From b2afb8800bb033a04bb3ecdf0363068d56648ef1 Mon Sep 17 00:00:00 2001
From: Jacek Antonelli
Date: Fri, 15 Aug 2008 23:44:54 -0500
Subject: Second Life viewer sources 1.15.0.2
---
linden/indra/SConstruct | 1089 +-
linden/indra/indra_complete/indra_complete.sln | 13 +
linden/indra/lib/python/indra/llmanifest.py | 19 +-
.../linux_crash_logger/linux_crash_logger.cpp | 1 +
linden/indra/llaudio/audioengine.cpp | 3 +-
linden/indra/llaudio/audioengine.h | 1 +
linden/indra/llaudio/audioengine_fmod.cpp | 1 +
linden/indra/llaudio/audioengine_fmod.h | 1 +
linden/indra/llaudio/listener.cpp | 1 +
linden/indra/llaudio/listener.h | 1 +
linden/indra/llaudio/listener_ds3d.h | 1 +
linden/indra/llaudio/listener_fmod.cpp | 1 +
linden/indra/llaudio/listener_fmod.h | 1 +
linden/indra/llaudio/listener_openal.h | 1 +
linden/indra/llaudio/llaudiodecodemgr.cpp | 3 +-
linden/indra/llaudio/llaudiodecodemgr.h | 1 +
linden/indra/llaudio/vorbisdecode.cpp | 1 +
linden/indra/llaudio/vorbisdecode.h | 1 +
linden/indra/llaudio/vorbisencode.cpp | 1 +
linden/indra/llaudio/vorbisencode.h | 1 +
linden/indra/llcharacter/llanimationstates.cpp | 1 +
linden/indra/llcharacter/llanimationstates.h | 1 +
linden/indra/llcharacter/llbvhloader.cpp | 3 +-
linden/indra/llcharacter/llbvhloader.h | 1 +
linden/indra/llcharacter/llcharacter.cpp | 1 +
linden/indra/llcharacter/llcharacter.h | 3 +-
linden/indra/llcharacter/lleditingmotion.cpp | 1 +
linden/indra/llcharacter/lleditingmotion.h | 1 +
linden/indra/llcharacter/llgesture.cpp | 1 +
linden/indra/llcharacter/llgesture.h | 1 +
linden/indra/llcharacter/llhandmotion.cpp | 1 +
linden/indra/llcharacter/llhandmotion.h | 1 +
linden/indra/llcharacter/llheadrotmotion.cpp | 1 +
linden/indra/llcharacter/llheadrotmotion.h | 1 +
linden/indra/llcharacter/lljoint.cpp | 1 +
linden/indra/llcharacter/lljoint.h | 1 +
linden/indra/llcharacter/lljointsolverrp3.cpp | 1 +
linden/indra/llcharacter/lljointsolverrp3.h | 1 +
linden/indra/llcharacter/lljointstate.h | 1 +
linden/indra/llcharacter/llkeyframefallmotion.cpp | 1 +
linden/indra/llcharacter/llkeyframefallmotion.h | 1 +
linden/indra/llcharacter/llkeyframemotion.cpp | 127 +-
linden/indra/llcharacter/llkeyframemotion.h | 16 +-
linden/indra/llcharacter/llkeyframemotionparam.cpp | 3 +-
linden/indra/llcharacter/llkeyframemotionparam.h | 1 +
linden/indra/llcharacter/llkeyframestandmotion.cpp | 1 +
linden/indra/llcharacter/llkeyframestandmotion.h | 1 +
linden/indra/llcharacter/llkeyframewalkmotion.cpp | 1 +
linden/indra/llcharacter/llkeyframewalkmotion.h | 1 +
linden/indra/llcharacter/llmotion.cpp | 1 +
linden/indra/llcharacter/llmotion.h | 1 +
linden/indra/llcharacter/llmotioncontroller.cpp | 122 +-
linden/indra/llcharacter/llmotioncontroller.h | 19 +-
linden/indra/llcharacter/llmultigesture.cpp | 3 +-
linden/indra/llcharacter/llmultigesture.h | 1 +
linden/indra/llcharacter/llpose.cpp | 45 +-
linden/indra/llcharacter/llpose.h | 7 +-
linden/indra/llcharacter/llstatemachine.cpp | 1 +
linden/indra/llcharacter/llstatemachine.h | 1 +
linden/indra/llcharacter/lltargetingmotion.cpp | 1 +
linden/indra/llcharacter/lltargetingmotion.h | 1 +
linden/indra/llcharacter/llvisualparam.cpp | 1 +
linden/indra/llcharacter/llvisualparam.h | 1 +
linden/indra/llcommon/bitpack.cpp | 167 -
linden/indra/llcommon/bitpack.h | 1 +
linden/indra/llcommon/ctype_workaround.h | 1 +
linden/indra/llcommon/doublelinkedlist.h | 1 +
linden/indra/llcommon/files.lst | 1 -
linden/indra/llcommon/imageids.h | 1 +
linden/indra/llcommon/indra_constants.h | 7 +-
linden/indra/llcommon/linden_common.h | 1 +
linden/indra/llcommon/linked_lists.h | 1 +
linden/indra/llcommon/llagentconstants.h | 1 +
linden/indra/llcommon/llapp.cpp | 1 +
linden/indra/llcommon/llapp.h | 1 +
linden/indra/llcommon/llapr.cpp | 1 +
linden/indra/llcommon/llapr.h | 1 +
linden/indra/llcommon/llassettype.cpp | 1 +
linden/indra/llcommon/llassettype.h | 1 +
linden/indra/llcommon/llassoclist.h | 1 +
linden/indra/llcommon/llavatarconstants.h | 1 +
linden/indra/llcommon/llbase32.h | 39 +-
linden/indra/llcommon/llbase64.cpp | 1 +
linden/indra/llcommon/llbase64.h | 1 +
linden/indra/llcommon/llboost.h | 1 +
linden/indra/llcommon/llchat.h | 1 +
linden/indra/llcommon/llclickaction.h | 1 +
linden/indra/llcommon/llcommon.cpp | 1 +
linden/indra/llcommon/llcommon.h | 1 +
linden/indra/llcommon/llcommon.vcproj | 3 -
linden/indra/llcommon/llcommon_vc8.vcproj | 1518 +--
linden/indra/llcommon/llcriticaldamp.cpp | 1 +
linden/indra/llcommon/llcriticaldamp.h | 1 +
linden/indra/llcommon/lldarray.h | 1 +
linden/indra/llcommon/lldarrayptr.h | 1 +
linden/indra/llcommon/lldate.cpp | 1 +
linden/indra/llcommon/lldate.h | 1 +
linden/indra/llcommon/lldefs.h | 1 +
linden/indra/llcommon/lldepthstack.h | 1 +
linden/indra/llcommon/lldlinked.h | 1 +
linden/indra/llcommon/lldqueueptr.h | 1 +
linden/indra/llcommon/llendianswizzle.h | 1 +
linden/indra/llcommon/llenum.h | 1 +
linden/indra/llcommon/llerror.cpp | 7 +-
linden/indra/llcommon/llerror.h | 1 +
linden/indra/llcommon/llerrorcontrol.h | 1 +
linden/indra/llcommon/llerrorlegacy.h | 1 +
linden/indra/llcommon/llerrorthread.cpp | 1 +
linden/indra/llcommon/llerrorthread.h | 1 +
linden/indra/llcommon/llevent.cpp | 1 +
linden/indra/llcommon/llevent.h | 1 +
linden/indra/llcommon/lleventemitter.h | 1 +
linden/indra/llcommon/llfasttimer.cpp | 1 +
linden/indra/llcommon/llfasttimer.h | 1 +
linden/indra/llcommon/llfile.cpp | 1 +
linden/indra/llcommon/llfile.h | 1 +
linden/indra/llcommon/llfixedbuffer.cpp | 1 +
linden/indra/llcommon/llfixedbuffer.h | 1 +
linden/indra/llcommon/llformat.cpp | 1 +
linden/indra/llcommon/llformat.h | 1 +
linden/indra/llcommon/llframetimer.cpp | 45 +
linden/indra/llcommon/llframetimer.h | 16 +-
linden/indra/llcommon/llhash.h | 1 +
linden/indra/llcommon/llindexedqueue.h | 1 +
linden/indra/llcommon/lllinkedqueue.h | 1 +
linden/indra/llcommon/llliveappconfig.cpp | 1 +
linden/indra/llcommon/llliveappconfig.h | 1 +
linden/indra/llcommon/lllivefile.cpp | 1 +
linden/indra/llcommon/lllivefile.h | 1 +
linden/indra/llcommon/lllocalidhashmap.h | 1 +
linden/indra/llcommon/lllslconstants.h | 1 +
linden/indra/llcommon/llmap.h | 1 +
linden/indra/llcommon/llmemory.cpp | 6 +-
linden/indra/llcommon/llmemory.h | 90 +-
linden/indra/llcommon/llmemorystream.cpp | 1 +
linden/indra/llcommon/llmemorystream.h | 1 +
linden/indra/llcommon/llmemtype.h | 1 +
linden/indra/llcommon/llmortician.cpp | 1 +
linden/indra/llcommon/llmortician.h | 1 +
linden/indra/llcommon/llnametable.h | 1 +
linden/indra/llcommon/llpagemem.h | 1 +
linden/indra/llcommon/llpreprocessor.h | 14 +-
linden/indra/llcommon/llpriqueuemap.h | 1 +
linden/indra/llcommon/llprocessor.cpp | 239 +-
linden/indra/llcommon/llprocessor.h | 1 +
linden/indra/llcommon/llptrskiplist.h | 1 +
linden/indra/llcommon/llptrskipmap.h | 1 +
linden/indra/llcommon/llqueuedthread.cpp | 1 +
linden/indra/llcommon/llqueuedthread.h | 1 +
linden/indra/llcommon/llrun.cpp | 1 +
linden/indra/llcommon/llrun.h | 1 +
linden/indra/llcommon/llsd.cpp | 1 +
linden/indra/llcommon/llsd.h | 1 +
linden/indra/llcommon/llsdserialize.cpp | 1 +
linden/indra/llcommon/llsdserialize.h | 1 +
linden/indra/llcommon/llsdserialize_xml.cpp | 14 +-
linden/indra/llcommon/llsdserialize_xml.h | 1 +
linden/indra/llcommon/llsdutil.cpp | 62 +-
linden/indra/llcommon/llsdutil.h | 12 +
linden/indra/llcommon/llsecondlifeurls.cpp | 1 +
linden/indra/llcommon/llsecondlifeurls.h | 1 +
linden/indra/llcommon/llsimplehash.h | 1 +
linden/indra/llcommon/llskiplist.h | 1 +
linden/indra/llcommon/llskipmap.h | 1 +
linden/indra/llcommon/llstack.h | 1 +
linden/indra/llcommon/llstat.cpp | 6 +-
linden/indra/llcommon/llstat.h | 1 +
linden/indra/llcommon/llstatenums.h | 1 +
linden/indra/llcommon/llstl.h | 1 +
linden/indra/llcommon/llstreamtools.cpp | 1 +
linden/indra/llcommon/llstreamtools.h | 1 +
linden/indra/llcommon/llstrider.h | 1 +
linden/indra/llcommon/llstring.cpp | 28 +
linden/indra/llcommon/llstring.h | 5 +
linden/indra/llcommon/llstringtable.cpp | 1 +
linden/indra/llcommon/llstringtable.h | 1 +
linden/indra/llcommon/llsys.cpp | 46 +-
linden/indra/llcommon/llsys.h | 2 +-
linden/indra/llcommon/llthread.cpp | 1 +
linden/indra/llcommon/llthread.h | 1 +
linden/indra/llcommon/lltimer.cpp | 1 +
linden/indra/llcommon/lltimer.h | 1 +
linden/indra/llcommon/lluri.cpp | 48 +-
linden/indra/llcommon/lluri.h | 14 +-
linden/indra/llcommon/lluuidhashmap.h | 11 +-
linden/indra/llcommon/llversion.h | 10 +-
linden/indra/llcommon/llworkerthread.cpp | 1 +
linden/indra/llcommon/llworkerthread.h | 3 +-
linden/indra/llcommon/metaclass.cpp | 1 +
linden/indra/llcommon/metaclass.h | 1 +
linden/indra/llcommon/metaclasst.h | 1 +
linden/indra/llcommon/metaproperty.cpp | 1 +
linden/indra/llcommon/metaproperty.h | 1 +
linden/indra/llcommon/metapropertyt.h | 1 +
linden/indra/llcommon/processor.h | 1 +
linden/indra/llcommon/reflective.cpp | 1 +
linden/indra/llcommon/reflective.h | 1 +
linden/indra/llcommon/reflectivet.h | 1 +
linden/indra/llcommon/roles_constants.h | 1 +
linden/indra/llcommon/stdenums.h | 1 +
linden/indra/llcommon/stdtypes.h | 1 +
linden/indra/llcommon/string_table.h | 1 +
linden/indra/llcommon/timer.h | 1 +
linden/indra/llcommon/timing.cpp | 1 +
linden/indra/llcommon/timing.h | 1 +
linden/indra/llcommon/u64.cpp | 1 +
linden/indra/llcommon/u64.h | 1 +
linden/indra/llimage/llimage.cpp | 1 +
linden/indra/llimage/llimage.h | 1 +
linden/indra/llimage/llimagebmp.cpp | 1 +
linden/indra/llimage/llimagebmp.h | 1 +
linden/indra/llimage/llimagedxt.cpp | 6 +-
linden/indra/llimage/llimagedxt.h | 1 +
linden/indra/llimage/llimagej2c.cpp | 1 +
linden/indra/llimage/llimagej2c.h | 1 +
linden/indra/llimage/llimagejpeg.cpp | 1 +
linden/indra/llimage/llimagejpeg.h | 2 +-
linden/indra/llimage/llimagetga.cpp | 1 +
linden/indra/llimage/llimagetga.h | 1 +
linden/indra/llimage/llimageworker.cpp | 1 +
linden/indra/llimage/llimageworker.h | 1 +
linden/indra/llimage/llmapimagetype.h | 1 +
linden/indra/llimagej2coj/llimagej2coj.cpp | 23 +-
linden/indra/llimagej2coj/llimagej2coj.h | 1 +
linden/indra/llinventory/llcategory.cpp | 1 +
linden/indra/llinventory/llcategory.h | 1 +
linden/indra/llinventory/lleconomy.cpp | 6 +
linden/indra/llinventory/lleconomy.h | 1 +
linden/indra/llinventory/llinventory.cpp | 15 +-
linden/indra/llinventory/llinventory.h | 5 +
linden/indra/llinventory/lllandmark.cpp | 1 +
linden/indra/llinventory/lllandmark.h | 1 +
linden/indra/llinventory/llnotecard.cpp | 1 +
linden/indra/llinventory/llnotecard.h | 1 +
linden/indra/llinventory/llparcel.cpp | 14 +-
linden/indra/llinventory/llparcel.h | 6 +-
linden/indra/llinventory/llparcelflags.h | 1 +
linden/indra/llinventory/llpermissions.cpp | 11 +-
linden/indra/llinventory/llpermissions.h | 1 +
linden/indra/llinventory/llpermissionsflags.h | 1 +
linden/indra/llinventory/llsaleinfo.cpp | 1 +
linden/indra/llinventory/llsaleinfo.h | 1 +
linden/indra/llinventory/lltransactionflags.cpp | 1 +
linden/indra/llinventory/lltransactionflags.h | 1 +
linden/indra/llinventory/lltransactiontypes.h | 1 +
linden/indra/llinventory/lluserrelations.cpp | 1 +
linden/indra/llinventory/lluserrelations.h | 1 +
linden/indra/llmath/camera.h | 1 +
linden/indra/llmath/coordframe.h | 1 +
linden/indra/llmath/llbboxlocal.cpp | 1 +
linden/indra/llmath/llbboxlocal.h | 1 +
linden/indra/llmath/llcamera.cpp | 1 +
linden/indra/llmath/llcamera.h | 1 +
linden/indra/llmath/llcoord.h | 1 +
linden/indra/llmath/llcoordframe.cpp | 1 +
linden/indra/llmath/llcoordframe.h | 1 +
linden/indra/llmath/llcrc.cpp | 1 +
linden/indra/llmath/llcrc.h | 1 +
linden/indra/llmath/llinterp.h | 1 +
linden/indra/llmath/llmath.h | 1 +
linden/indra/llmath/llmath.vcproj | 6 +-
linden/indra/llmath/llmd5.cpp | 3 +-
linden/indra/llmath/llmd5.h | 1 +
linden/indra/llmath/lloctree.h | 1 +
linden/indra/llmath/llperlin.cpp | 1 +
linden/indra/llmath/llperlin.h | 1 +
linden/indra/llmath/llplane.h | 1 +
linden/indra/llmath/llquantize.h | 1 +
linden/indra/llmath/llquaternion.cpp | 1 +
linden/indra/llmath/llquaternion.h | 1 +
linden/indra/llmath/llrand.cpp | 1 +
linden/indra/llmath/llrand.h | 1 +
linden/indra/llmath/llrect.cpp | 1 +
linden/indra/llmath/llrect.h | 1 +
linden/indra/llmath/lltreenode.h | 1 +
linden/indra/llmath/lluuid.cpp | 6 +
linden/indra/llmath/lluuid.h | 2 +
linden/indra/llmath/llvolume.cpp | 5 +-
linden/indra/llmath/llvolume.h | 29 +-
linden/indra/llmath/llvolumemgr.cpp | 3 +-
linden/indra/llmath/llvolumemgr.h | 1 +
linden/indra/llmath/m3math.cpp | 1 +
linden/indra/llmath/m3math.h | 1 +
linden/indra/llmath/m4math.cpp | 67 +-
linden/indra/llmath/m4math.h | 22 +-
linden/indra/llmath/raytrace.cpp | 1 +
linden/indra/llmath/raytrace.h | 1 +
linden/indra/llmath/v2math.cpp | 1 +
linden/indra/llmath/v2math.h | 1 +
linden/indra/llmath/v3color.cpp | 50 +
linden/indra/llmath/v3color.h | 3 +
linden/indra/llmath/v3dmath.cpp | 1 +
linden/indra/llmath/v3dmath.h | 1 +
linden/indra/llmath/v3math.cpp | 1 +
linden/indra/llmath/v3math.h | 1 +
linden/indra/llmath/v4color.cpp | 50 +
linden/indra/llmath/v4color.h | 3 +
linden/indra/llmath/v4coloru.cpp | 1 +
linden/indra/llmath/v4coloru.h | 1 +
linden/indra/llmath/v4math.cpp | 1 +
linden/indra/llmath/v4math.h | 12 +-
linden/indra/llmath/xform.cpp | 1 +
linden/indra/llmath/xform.h | 1 +
linden/indra/llmedia/llmediabase.cpp | 1 +
linden/indra/llmedia/llmediabase.h | 1 +
linden/indra/llmedia/llmediaemitter.h | 1 +
linden/indra/llmedia/llmediaemitterevents.h | 1 +
linden/indra/llmedia/llmediaengine.cpp | 1 +
linden/indra/llmedia/llmediaengine.h | 1 +
linden/indra/llmedia/llmediaimplquicktime.cpp | 1 +
linden/indra/llmedia/llmediaimplquicktime.h | 1 +
linden/indra/llmedia/llmediamoviebase.cpp | 1 +
linden/indra/llmedia/llmediamoviebase.h | 1 +
linden/indra/llmedia/llmediaobservers.h | 1 +
linden/indra/llmessage/files.lst | 11 +-
linden/indra/llmessage/llassetstorage.cpp | 16 +-
linden/indra/llmessage/llassetstorage.h | 1 +
linden/indra/llmessage/llblowfishcipher.cpp | 49 +-
linden/indra/llmessage/llblowfishcipher.h | 1 +
linden/indra/llmessage/llbuffer.cpp | 121 +-
linden/indra/llmessage/llbuffer.h | 91 +-
linden/indra/llmessage/llbufferstream.cpp | 96 +-
linden/indra/llmessage/llbufferstream.h | 1 +
linden/indra/llmessage/llcachename.cpp | 1 +
linden/indra/llmessage/llcachename.h | 1 +
linden/indra/llmessage/llcallbacklisth.h | 1 +
linden/indra/llmessage/llchainio.cpp | 1 +
linden/indra/llmessage/llchainio.h | 1 +
linden/indra/llmessage/llcipher.h | 1 +
linden/indra/llmessage/llcircuit.cpp | 1 +
linden/indra/llmessage/llcircuit.h | 1 +
linden/indra/llmessage/llclassifiedflags.cpp | 1 +
linden/indra/llmessage/llclassifiedflags.h | 3 +
linden/indra/llmessage/lldatapacker.cpp | 221 +-
linden/indra/llmessage/lldatapacker.h | 1 +
linden/indra/llmessage/lldbstrings.h | 1 +
linden/indra/llmessage/lldispatcher.cpp | 1 +
linden/indra/llmessage/lldispatcher.h | 1 +
linden/indra/llmessage/lleventflags.h | 1 +
linden/indra/llmessage/llfiltersd2xmlrpc.cpp | 1 +
linden/indra/llmessage/llfiltersd2xmlrpc.h | 1 +
linden/indra/llmessage/llfollowcamparams.h | 1 +
linden/indra/llmessage/llhost.cpp | 7 +-
linden/indra/llmessage/llhost.h | 1 +
linden/indra/llmessage/llhttpassetstorage.cpp | 51 +-
linden/indra/llmessage/llhttpassetstorage.h | 1 +
linden/indra/llmessage/llhttpclient.cpp | 65 +-
linden/indra/llmessage/llhttpclient.h | 17 +-
linden/indra/llmessage/llhttpnode.cpp | 1 +
linden/indra/llmessage/llhttpnode.h | 1 +
linden/indra/llmessage/llhttpsender.cpp | 90 +
linden/indra/llmessage/llhttpsender.h | 58 +
linden/indra/llmessage/llinstantmessage.cpp | 48 +-
linden/indra/llmessage/llinstantmessage.h | 18 +-
linden/indra/llmessage/llinvite.h | 1 +
linden/indra/llmessage/lliobuffer.cpp | 1 +
linden/indra/llmessage/lliobuffer.h | 1 +
linden/indra/llmessage/lliohttpserver.cpp | 27 +-
linden/indra/llmessage/lliohttpserver.h | 4 +-
linden/indra/llmessage/lliopipe.cpp | 1 +
linden/indra/llmessage/lliopipe.h | 3 +-
linden/indra/llmessage/lliosocket.cpp | 14 +-
linden/indra/llmessage/lliosocket.h | 1 +
linden/indra/llmessage/llioutil.cpp | 1 +
linden/indra/llmessage/llioutil.h | 1 +
linden/indra/llmessage/llloginflags.h | 1 +
linden/indra/llmessage/lllogtextmessage.cpp | 1 +
linden/indra/llmessage/lllogtextmessage.h | 1 +
linden/indra/llmessage/llmail.cpp | 1 +
linden/indra/llmessage/llmail.h | 1 +
linden/indra/llmessage/llmessage.vcproj | 52 +-
linden/indra/llmessage/llmessagebuilder.cpp | 38 +
linden/indra/llmessage/llmessagebuilder.h | 70 +
linden/indra/llmessage/llmessageconfig.cpp | 230 +
linden/indra/llmessage/llmessageconfig.h | 51 +
linden/indra/llmessage/llmessagereader.cpp | 35 +
linden/indra/llmessage/llmessagereader.h | 59 +
linden/indra/llmessage/llmessagetemplate.cpp | 146 +
linden/indra/llmessage/llmessagetemplate.h | 356 +
linden/indra/llmessage/llmessagethrottle.cpp | 1 +
linden/indra/llmessage/llmessagethrottle.h | 1 +
linden/indra/llmessage/llmime.cpp | 1 +
linden/indra/llmessage/llmime.h | 1 +
linden/indra/llmessage/llmsgvariabletype.h | 33 +
linden/indra/llmessage/llnamevalue.cpp | 1 +
linden/indra/llmessage/llnamevalue.h | 1 +
linden/indra/llmessage/llnullcipher.cpp | 1 +
linden/indra/llmessage/llnullcipher.h | 1 +
linden/indra/llmessage/llpacketack.h | 19 +-
linden/indra/llmessage/llpacketbuffer.cpp | 1 +
linden/indra/llmessage/llpacketbuffer.h | 1 +
linden/indra/llmessage/llpacketring.cpp | 1 +
linden/indra/llmessage/llpacketring.h | 1 +
linden/indra/llmessage/llpartdata.cpp | 1 +
linden/indra/llmessage/llpartdata.h | 1 +
linden/indra/llmessage/llpumpio.cpp | 9 +-
linden/indra/llmessage/llpumpio.h | 2 +
linden/indra/llmessage/llqueryflags.h | 4 +
linden/indra/llmessage/llregionflags.h | 1 +
linden/indra/llmessage/llregionhandle.h | 1 +
linden/indra/llmessage/llsdappservices.cpp | 1 +
linden/indra/llmessage/llsdappservices.h | 1 +
linden/indra/llmessage/llsdhttpserver.cpp | 1 +
linden/indra/llmessage/llsdhttpserver.h | 1 +
linden/indra/llmessage/llsdmessagebuilder.cpp | 281 +
linden/indra/llmessage/llsdmessagebuilder.h | 98 +
linden/indra/llmessage/llsdmessagereader.cpp | 264 +
linden/indra/llmessage/llsdmessagereader.h | 79 +
linden/indra/llmessage/llsdmessagesystem.cpp | 176 -
linden/indra/llmessage/llsdmessagesystem.h | 73 -
linden/indra/llmessage/llsdrpcclient.cpp | 1 +
linden/indra/llmessage/llsdrpcclient.h | 1 +
linden/indra/llmessage/llsdrpcserver.cpp | 1 +
linden/indra/llmessage/llsdrpcserver.h | 1 +
linden/indra/llmessage/llservice.cpp | 1 +
linden/indra/llmessage/llservice.h | 3 +-
linden/indra/llmessage/llservicebuilder.cpp | 135 +
linden/indra/llmessage/llservicebuilder.h | 93 +
linden/indra/llmessage/lltaskname.h | 1 +
linden/indra/llmessage/llteleportflags.h | 1 +
.../indra/llmessage/lltemplatemessagebuilder.cpp | 856 ++
linden/indra/llmessage/lltemplatemessagebuilder.h | 88 +
linden/indra/llmessage/lltemplatemessagereader.cpp | 750 ++
linden/indra/llmessage/lltemplatemessagereader.h | 98 +
linden/indra/llmessage/llthrottle.cpp | 1 +
linden/indra/llmessage/llthrottle.h | 1 +
linden/indra/llmessage/lltransfermanager.cpp | 1 +
linden/indra/llmessage/lltransfermanager.h | 1 +
linden/indra/llmessage/lltransfersourceasset.cpp | 1 +
linden/indra/llmessage/lltransfersourceasset.h | 1 +
linden/indra/llmessage/lltransfersourcefile.cpp | 1 +
linden/indra/llmessage/lltransfersourcefile.h | 1 +
linden/indra/llmessage/lltransfertargetfile.cpp | 1 +
linden/indra/llmessage/lltransfertargetfile.h | 1 +
linden/indra/llmessage/lltransfertargetvfile.cpp | 1 +
linden/indra/llmessage/lltransfertargetvfile.h | 1 +
linden/indra/llmessage/llurlrequest.cpp | 1 +
linden/indra/llmessage/llurlrequest.h | 1 +
linden/indra/llmessage/lluseroperation.cpp | 1 +
linden/indra/llmessage/lluseroperation.h | 1 +
linden/indra/llmessage/llvehicleparams.h | 1 +
linden/indra/llmessage/llxfer.cpp | 1 +
linden/indra/llmessage/llxfer.h | 1 +
linden/indra/llmessage/llxfer_file.cpp | 3 +-
linden/indra/llmessage/llxfer_file.h | 1 +
linden/indra/llmessage/llxfer_mem.cpp | 1 +
linden/indra/llmessage/llxfer_mem.h | 1 +
linden/indra/llmessage/llxfer_vfile.cpp | 1 +
linden/indra/llmessage/llxfer_vfile.h | 1 +
linden/indra/llmessage/llxfermanager.cpp | 1 +
linden/indra/llmessage/llxfermanager.h | 1 +
linden/indra/llmessage/llxorcipher.cpp | 1 +
linden/indra/llmessage/llxorcipher.h | 1 +
linden/indra/llmessage/machine.h | 1 +
linden/indra/llmessage/mean_collision_data.h | 1 +
linden/indra/llmessage/message.cpp | 3687 +++---
linden/indra/llmessage/message.h | 571 +-
linden/indra/llmessage/message_prehash.cpp | 45 +-
linden/indra/llmessage/message_prehash.h | 23 +-
linden/indra/llmessage/message_string_table.cpp | 1 +
linden/indra/llmessage/net.cpp | 7 +
linden/indra/llmessage/net.h | 1 +
linden/indra/llmessage/network.cpp | 1 +
linden/indra/llmessage/network.h | 1 +
linden/indra/llmessage/partsyspacket.cpp | 1 +
linden/indra/llmessage/partsyspacket.h | 1 +
linden/indra/llmessage/patch_code.cpp | 1 +
linden/indra/llmessage/patch_code.h | 1 +
linden/indra/llmessage/patch_dct.cpp | 1 +
linden/indra/llmessage/patch_dct.h | 1 +
linden/indra/llmessage/patch_idct.cpp | 1 +
linden/indra/llmessage/sound_ids.h | 1 +
linden/indra/llprimitive/legacy_object_types.h | 1 +
linden/indra/llprimitive/llmaterialtable.cpp | 1 +
linden/indra/llprimitive/llmaterialtable.h | 1 +
linden/indra/llprimitive/llprimitive.cpp | 71 +-
linden/indra/llprimitive/llprimitive.h | 1 +
linden/indra/llprimitive/lltextureanim.cpp | 1 +
linden/indra/llprimitive/lltextureanim.h | 1 +
linden/indra/llprimitive/lltextureentry.cpp | 1 +
linden/indra/llprimitive/lltextureentry.h | 1 +
linden/indra/llprimitive/lltree_common.h | 1 +
linden/indra/llprimitive/lltreeparams.cpp | 1 +
linden/indra/llprimitive/lltreeparams.h | 1 +
linden/indra/llprimitive/llvolumemessage.cpp | 97 +-
linden/indra/llprimitive/llvolumemessage.h | 1 +
linden/indra/llprimitive/llvolumexml.cpp | 1 +
linden/indra/llprimitive/llvolumexml.h | 1 +
linden/indra/llprimitive/material_codes.h | 1 +
linden/indra/llprimitive/object_flags.h | 1 +
linden/indra/llrender/files.lst | 1 -
linden/indra/llrender/llfont.cpp | 6 +-
linden/indra/llrender/llfont.h | 1 +
linden/indra/llrender/llfontgl.cpp | 194 +-
linden/indra/llrender/llfontgl.h | 4 +
linden/indra/llrender/llgldbg.cpp | 3 +-
linden/indra/llrender/llgldbg.h | 1 +
linden/indra/llrender/llimagegl.cpp | 12 +-
linden/indra/llrender/llimagegl.h | 4 +-
linden/indra/llrender/llrender.vcproj | 6 -
linden/indra/llrender/llrender_vc8.vcproj | 8 -
linden/indra/llrender/llvertexprogramgl.cpp | 1 +
linden/indra/llrender/llvertexprogramgl.h | 1 +
linden/indra/llrender/text_out.cpp | 115 -
linden/indra/llrender/text_out.h | 40 -
linden/indra/llui/files.lst | 1 +
linden/indra/llui/llalertdialog.cpp | 1 +
linden/indra/llui/llalertdialog.h | 1 +
linden/indra/llui/llbutton.cpp | 63 +-
linden/indra/llui/llbutton.h | 12 +-
linden/indra/llui/llcallbackmap.h | 1 +
linden/indra/llui/llcheckboxctrl.cpp | 3 +-
linden/indra/llui/llcheckboxctrl.h | 1 +
linden/indra/llui/llclipboard.cpp | 1 +
linden/indra/llui/llclipboard.h | 1 +
linden/indra/llui/llcombobox.cpp | 292 +-
linden/indra/llui/llcombobox.h | 30 +-
linden/indra/llui/llctrlselectioninterface.cpp | 1 +
linden/indra/llui/llctrlselectioninterface.h | 1 +
linden/indra/llui/lldraghandle.cpp | 9 +-
linden/indra/llui/lldraghandle.h | 1 +
linden/indra/llui/lleditmenuhandler.cpp | 1 +
linden/indra/llui/lleditmenuhandler.h | 1 +
linden/indra/llui/llfloater.cpp | 73 +-
linden/indra/llui/llfloater.h | 1 +
linden/indra/llui/llfocusmgr.cpp | 70 +-
linden/indra/llui/llfocusmgr.h | 17 +-
linden/indra/llui/llhtmlhelp.h | 40 +
linden/indra/llui/lliconctrl.cpp | 1 +
linden/indra/llui/lliconctrl.h | 1 +
linden/indra/llui/llkeywords.cpp | 1 +
linden/indra/llui/llkeywords.h | 1 +
linden/indra/llui/lllineeditor.cpp | 35 +-
linden/indra/llui/lllineeditor.h | 8 +-
linden/indra/llui/llmemberlistener.h | 1 +
linden/indra/llui/llmenugl.cpp | 31 +-
linden/indra/llui/llmenugl.h | 2 +
linden/indra/llui/llmodaldialog.cpp | 21 +-
linden/indra/llui/llmodaldialog.h | 1 +
linden/indra/llui/llpanel.cpp | 1 +
linden/indra/llui/llpanel.h | 1 +
linden/indra/llui/llradiogroup.cpp | 1 +
linden/indra/llui/llradiogroup.h | 1 +
linden/indra/llui/llresizebar.cpp | 130 +-
linden/indra/llui/llresizebar.h | 5 +-
linden/indra/llui/llresizehandle.cpp | 118 +-
linden/indra/llui/llresizehandle.h | 5 +-
linden/indra/llui/llresmgr.cpp | 5 +-
linden/indra/llui/llresmgr.h | 1 +
linden/indra/llui/llrootview.cpp | 1 +
linden/indra/llui/llrootview.h | 1 +
linden/indra/llui/llscrollbar.cpp | 11 +-
linden/indra/llui/llscrollbar.h | 1 +
linden/indra/llui/llscrollcontainer.cpp | 3 +-
linden/indra/llui/llscrollcontainer.h | 1 +
linden/indra/llui/llscrollingpanellist.cpp | 1 +
linden/indra/llui/llscrollingpanellist.h | 1 +
linden/indra/llui/llscrolllistctrl.cpp | 972 +-
linden/indra/llui/llscrolllistctrl.h | 163 +-
linden/indra/llui/llslider.cpp | 13 +-
linden/indra/llui/llslider.h | 1 +
linden/indra/llui/llsliderctrl.cpp | 5 +-
linden/indra/llui/llsliderctrl.h | 1 +
linden/indra/llui/llspinctrl.cpp | 29 +-
linden/indra/llui/llspinctrl.h | 1 +
linden/indra/llui/llstyle.cpp | 1 +
linden/indra/llui/llstyle.h | 1 +
linden/indra/llui/lltabcontainer.cpp | 141 +-
linden/indra/llui/lltabcontainer.h | 5 +
linden/indra/llui/lltabcontainervertical.cpp | 9 +-
linden/indra/llui/lltabcontainervertical.h | 1 +
linden/indra/llui/lltextbox.cpp | 9 +-
linden/indra/llui/lltextbox.h | 1 +
linden/indra/llui/lltexteditor.cpp | 42 +-
linden/indra/llui/lltexteditor.h | 8 +-
linden/indra/llui/llui.cpp | 20 +-
linden/indra/llui/llui.h | 4 +
linden/indra/llui/llui.vcproj | 3 +
linden/indra/llui/lluiconstants.h | 1 +
linden/indra/llui/lluictrl.cpp | 14 +
linden/indra/llui/lluictrl.h | 3 +
linden/indra/llui/lluictrlfactory.cpp | 5 +
linden/indra/llui/lluictrlfactory.h | 1 +
linden/indra/llui/lluistring.cpp | 1 +
linden/indra/llui/lluistring.h | 1 +
linden/indra/llui/lluixmltags.h | 1 +
linden/indra/llui/llundo.cpp | 1 +
linden/indra/llui/llundo.h | 1 +
linden/indra/llui/llview.cpp | 39 +-
linden/indra/llui/llview.h | 11 +-
linden/indra/llui/llviewborder.cpp | 1 +
linden/indra/llui/llviewborder.h | 1 +
linden/indra/llui/llviewquery.cpp | 1 +
linden/indra/llui/llviewquery.h | 1 +
linden/indra/llvfs/lldir.cpp | 1 +
linden/indra/llvfs/lldir.h | 1 +
linden/indra/llvfs/lldir_linux.cpp | 3 +-
linden/indra/llvfs/lldir_linux.h | 1 +
linden/indra/llvfs/lldir_mac.cpp | 3 +-
linden/indra/llvfs/lldir_mac.h | 3 +-
linden/indra/llvfs/lldir_win32.cpp | 1 +
linden/indra/llvfs/lldir_win32.h | 1 +
linden/indra/llvfs/lllfsthread.cpp | 1 +
linden/indra/llvfs/lllfsthread.h | 1 +
linden/indra/llvfs/llvfile.cpp | 1 +
linden/indra/llvfs/llvfile.h | 1 +
linden/indra/llvfs/llvfs.cpp | 1 +
linden/indra/llvfs/llvfs.h | 1 +
linden/indra/llvfs/llvfsthread.cpp | 1 +
linden/indra/llvfs/llvfsthread.h | 1 +
linden/indra/llwindow/lldxhardware.cpp | 1 +
linden/indra/llwindow/lldxhardware.h | 1 +
linden/indra/llwindow/llgl.cpp | 146 +-
linden/indra/llwindow/llgl.h | 26 +-
linden/indra/llwindow/llglheaders.h | 68 +-
linden/indra/llwindow/llglstates.h | 1 +
linden/indra/llwindow/llglstubs.h | 1 +
linden/indra/llwindow/llgltypes.h | 1 +
linden/indra/llwindow/llkeyboard.cpp | 1 +
linden/indra/llwindow/llkeyboard.h | 1 +
linden/indra/llwindow/llkeyboardmacosx.cpp | 1 +
linden/indra/llwindow/llkeyboardmacosx.h | 1 +
linden/indra/llwindow/llkeyboardsdl.cpp | 1 +
linden/indra/llwindow/llkeyboardsdl.h | 1 +
linden/indra/llwindow/llkeyboardwin32.cpp | 1 +
linden/indra/llwindow/llkeyboardwin32.h | 1 +
linden/indra/llwindow/llmousehandler.h | 7 +-
linden/indra/llwindow/llwindow.cpp | 28 +
linden/indra/llwindow/llwindow.h | 8 +-
linden/indra/llwindow/llwindowheadless.cpp | 1 +
linden/indra/llwindow/llwindowheadless.h | 1 +
linden/indra/llwindow/llwindowlinux.cpp | 1 +
linden/indra/llwindow/llwindowlinux.h | 1 +
linden/indra/llwindow/llwindowmacosx-objc.h | 1 +
linden/indra/llwindow/llwindowmacosx-objc.mm | 1 +
linden/indra/llwindow/llwindowmacosx.cpp | 5 +-
linden/indra/llwindow/llwindowmacosx.h | 1 +
linden/indra/llwindow/llwindowmesaheadless.cpp | 1 +
linden/indra/llwindow/llwindowmesaheadless.h | 1 +
linden/indra/llwindow/llwindowsdl.cpp | 14 +-
linden/indra/llwindow/llwindowsdl.h | 1 +
linden/indra/llwindow/llwindowwin32.cpp | 92 +-
linden/indra/llwindow/llwindowwin32.h | 4 +-
linden/indra/llxml/llcontrol.cpp | 1 +
linden/indra/llxml/llcontrol.h | 1 +
linden/indra/llxml/llxmlnode.cpp | 5 +-
linden/indra/llxml/llxmlnode.h | 1 +
linden/indra/llxml/llxmlparser.cpp | 9 +-
linden/indra/llxml/llxmlparser.h | 1 +
linden/indra/llxml/llxmltree.cpp | 1 +
linden/indra/llxml/llxmltree.h | 1 +
linden/indra/lscript/lscript_alloc.h | 1 +
linden/indra/lscript/lscript_byteconvert.h | 1 +
linden/indra/lscript/lscript_byteformat.h | 1 +
.../lscript/lscript_compile/lscript_alloc.cpp | 1 +
.../lscript/lscript_compile/lscript_bytecode.cpp | 1 +
.../lscript/lscript_compile/lscript_bytecode.h | 1 +
.../lscript/lscript_compile/lscript_error.cpp | 1 +
.../indra/lscript/lscript_compile/lscript_error.h | 1 +
.../indra/lscript/lscript_compile/lscript_heap.cpp | 1 +
.../indra/lscript/lscript_compile/lscript_heap.h | 1 +
.../lscript/lscript_compile/lscript_resource.cpp | 1 +
.../lscript/lscript_compile/lscript_resource.h | 1 +
.../lscript/lscript_compile/lscript_scope.cpp | 1 +
.../indra/lscript/lscript_compile/lscript_scope.h | 1 +
.../indra/lscript/lscript_compile/lscript_tree.cpp | 18 +-
.../indra/lscript/lscript_compile/lscript_tree.h | 1 +
.../lscript/lscript_compile/lscript_typecheck.cpp | 1 +
.../lscript/lscript_compile/lscript_typecheck.h | 1 +
linden/indra/lscript/lscript_execute.h | 1 +
.../lscript/lscript_execute/lscript_execute.cpp | 10 +-
.../lscript_execute/lscript_heapruntime.cpp | 1 +
.../lscript/lscript_execute/lscript_heapruntime.h | 1 +
.../lscript/lscript_execute/lscript_readlso.cpp | 1 +
.../lscript/lscript_execute/lscript_readlso.h | 1 +
linden/indra/lscript/lscript_export.h | 1 +
linden/indra/lscript/lscript_http.h | 1 +
linden/indra/lscript/lscript_library.h | 5 +-
.../lscript/lscript_library/lscript_alloc.cpp | 1 +
.../lscript/lscript_library/lscript_export.cpp | 1 +
.../lscript/lscript_library/lscript_library.cpp | 3 +-
linden/indra/lscript/lscript_rt_interface.h | 1 +
linden/indra/mac_crash_logger/mac_crash_logger.cpp | 1 +
linden/indra/mac_updater/FSCopyObject.h | 1 +
linden/indra/mac_updater/GenLinkedList.h | 1 +
linden/indra/mac_updater/MoreFilesX.h | 1 +
linden/indra/mac_updater/mac_updater.cpp | 52 +-
.../indra/newview/English.lproj/InfoPlist.strings | 4 +-
linden/indra/newview/Info-SecondLife.plist | 2 +-
linden/indra/newview/VertexCache.h | 1 +
linden/indra/newview/VorbisFramework.h | 1 +
linden/indra/newview/app_settings/keywords.ini | 4 +
linden/indra/newview/app_settings/message.xml | 228 +
.../shaders/class1/environment/glowF.glsl | 14 +
.../shaders/class1/environment/glowV.glsl | 10 +
.../shaders/class2/environment/waterF.glsl | 2 +
linden/indra/newview/audiosettings.h | 1 +
linden/indra/newview/character/avatar_eye.llm | Bin 16011 -> 0 bytes
linden/indra/newview/character/avatar_eye_1.llm | Bin 5591 -> 0 bytes
.../indra/newview/character/avatar_eyelashes.llm | Bin 65637 -> 0 bytes
linden/indra/newview/character/avatar_hair.llm | Bin 690581 -> 0 bytes
linden/indra/newview/character/avatar_hair_1.llm | Bin 5031 -> 0 bytes
linden/indra/newview/character/avatar_hair_2.llm | Bin 3261 -> 0 bytes
linden/indra/newview/character/avatar_hair_3.llm | Bin 1845 -> 0 bytes
linden/indra/newview/character/avatar_hair_4.llm | Bin 927 -> 0 bytes
linden/indra/newview/character/avatar_hair_5.llm | Bin 927 -> 0 bytes
linden/indra/newview/character/avatar_head.llm | Bin 1635981 -> 0 bytes
linden/indra/newview/character/avatar_head_1.llm | Bin 7875 -> 0 bytes
linden/indra/newview/character/avatar_head_2.llm | Bin 3675 -> 0 bytes
linden/indra/newview/character/avatar_head_3.llm | Bin 1797 -> 0 bytes
linden/indra/newview/character/avatar_head_4.llm | Bin 1239 -> 0 bytes
linden/indra/newview/character/avatar_lad.xml | 11223 -------------------
.../indra/newview/character/avatar_lower_body.llm | Bin 337125 -> 0 bytes
.../newview/character/avatar_lower_body_1.llm | Bin 7083 -> 0 bytes
.../newview/character/avatar_lower_body_2.llm | Bin 4107 -> 0 bytes
.../newview/character/avatar_lower_body_3.llm | Bin 2115 -> 0 bytes
.../newview/character/avatar_lower_body_4.llm | Bin 1629 -> 0 bytes
linden/indra/newview/character/avatar_skeleton.xml | 74 -
linden/indra/newview/character/avatar_skirt.llm | Bin 72497 -> 0 bytes
linden/indra/newview/character/avatar_skirt_1.llm | Bin 1899 -> 0 bytes
linden/indra/newview/character/avatar_skirt_2.llm | Bin 1551 -> 0 bytes
linden/indra/newview/character/avatar_skirt_3.llm | Bin 1191 -> 0 bytes
linden/indra/newview/character/avatar_skirt_4.llm | Bin 843 -> 0 bytes
.../indra/newview/character/avatar_upper_body.llm | Bin 929297 -> 0 bytes
.../newview/character/avatar_upper_body_1.llm | Bin 15627 -> 0 bytes
.../newview/character/avatar_upper_body_2.llm | Bin 8991 -> 0 bytes
.../newview/character/avatar_upper_body_3.llm | Bin 4557 -> 0 bytes
.../newview/character/avatar_upper_body_4.llm | Bin 3453 -> 0 bytes
linden/indra/newview/character/blush_alpha.tga | Bin 17352 -> 0 bytes
linden/indra/newview/character/body_skingrain.tga | Bin 262188 -> 0 bytes
.../indra/newview/character/bodyfreckles_alpha.tga | Bin 257249 -> 0 bytes
.../indra/newview/character/bump_face_wrinkles.tga | Bin 25243 -> 0 bytes
linden/indra/newview/character/bump_head_base.tga | Bin 105525 -> 0 bytes
.../newview/character/bump_lowerbody_base.tga | Bin 112782 -> 0 bytes
.../newview/character/bump_pants_wrinkles.tga | Bin 83183 -> 0 bytes
.../newview/character/bump_shirt_wrinkles.tga | Bin 81501 -> 0 bytes
.../newview/character/bump_upperbody_base.tga | Bin 147581 -> 0 bytes
linden/indra/newview/character/eyebrows_alpha.tga | Bin 9469 -> 0 bytes
linden/indra/newview/character/eyeliner_alpha.tga | Bin 4720 -> 0 bytes
.../newview/character/eyeshadow_inner_alpha.tga | Bin 5466 -> 0 bytes
.../newview/character/eyeshadow_outer_alpha.tga | Bin 7382 -> 0 bytes
linden/indra/newview/character/eyewhite.tga | Bin 42353 -> 0 bytes
.../character/facehair_chincurtains_alpha.tga | Bin 34610 -> 0 bytes
.../newview/character/facehair_moustache_alpha.tga | Bin 14017 -> 0 bytes
.../newview/character/facehair_sideburns_alpha.tga | Bin 27328 -> 0 bytes
.../newview/character/facehair_soulpatch_alpha.tga | Bin 11277 -> 0 bytes
linden/indra/newview/character/freckles_alpha.tga | Bin 140558 -> 0 bytes
linden/indra/newview/character/genepool.xml | 7107 ------------
.../indra/newview/character/glove_length_alpha.tga | Bin 49745 -> 0 bytes
.../newview/character/gloves_fingers_alpha.tga | Bin 39616 -> 0 bytes
linden/indra/newview/character/head_alpha.tga | Bin 6066 -> 0 bytes
linden/indra/newview/character/head_color.tga | Bin 70715 -> 0 bytes
linden/indra/newview/character/head_hair.tga | Bin 75600 -> 0 bytes
.../newview/character/head_highlights_alpha.tga | Bin 20503 -> 0 bytes
.../indra/newview/character/head_shading_alpha.tga | Bin 35304 -> 0 bytes
linden/indra/newview/character/head_skingrain.tga | Bin 262376 -> 0 bytes
.../character/jacket_length_lower_alpha.tga | Bin 9768 -> 0 bytes
.../character/jacket_length_upper_alpha.tga | Bin 14617 -> 0 bytes
.../newview/character/jacket_open_lower_alpha.tga | Bin 19732 -> 0 bytes
.../newview/character/jacket_open_upper_alpha.tga | Bin 41606 -> 0 bytes
linden/indra/newview/character/lipgloss_alpha.tga | Bin 4738 -> 0 bytes
linden/indra/newview/character/lips_mask.tga | Bin 6110 -> 0 bytes
linden/indra/newview/character/lipstick_alpha.tga | Bin 7966 -> 0 bytes
linden/indra/newview/character/lowerbody_color.tga | Bin 135395 -> 0 bytes
.../character/lowerbody_highlights_alpha.tga | Bin 8695 -> 0 bytes
.../newview/character/lowerbody_shading_alpha.tga | Bin 41766 -> 0 bytes
.../indra/newview/character/nailpolish_alpha.tga | Bin 4656 -> 0 bytes
.../indra/newview/character/pants_length_alpha.tga | Bin 26843 -> 0 bytes
.../indra/newview/character/pants_waist_alpha.tga | Bin 10487 -> 0 bytes
linden/indra/newview/character/rosyface_alpha.tga | Bin 44382 -> 0 bytes
linden/indra/newview/character/rouge_alpha.tga | Bin 44382 -> 0 bytes
.../indra/newview/character/shirt_bottom_alpha.tga | Bin 32242 -> 0 bytes
.../indra/newview/character/shirt_collar_alpha.tga | Bin 14417 -> 0 bytes
.../newview/character/shirt_collar_back_alpha.tga | Bin 12789 -> 0 bytes
.../indra/newview/character/shirt_sleeve_alpha.tga | Bin 72196 -> 0 bytes
.../indra/newview/character/shoe_height_alpha.tga | Bin 24461 -> 0 bytes
.../indra/newview/character/skirt_length_alpha.tga | Bin 4114 -> 0 bytes
.../newview/character/skirt_slit_back_alpha.tga | Bin 90350 -> 0 bytes
.../newview/character/skirt_slit_front_alpha.tga | Bin 90350 -> 0 bytes
.../newview/character/skirt_slit_left_alpha.tga | Bin 82006 -> 0 bytes
.../newview/character/skirt_slit_right_alpha.tga | Bin 91410 -> 0 bytes
.../newview/character/underpants_trial_female.tga | Bin 48063 -> 0 bytes
.../newview/character/underpants_trial_male.tga | Bin 144983 -> 0 bytes
.../newview/character/undershirt_trial_female.tga | Bin 81390 -> 0 bytes
linden/indra/newview/character/upperbody_color.tga | Bin 23348 -> 0 bytes
.../character/upperbody_highlights_alpha.tga | Bin 6509 -> 0 bytes
.../newview/character/upperbody_shading_alpha.tga | Bin 25297 -> 0 bytes
.../newview/character/upperbodyfreckles_alpha.tga | Bin 180104 -> 0 bytes
linden/indra/newview/featuretable.txt | 21 +-
linden/indra/newview/files.lst | 6 +-
linden/indra/newview/fmod_hidden_symbols.exp | 100 +
linden/indra/newview/fmodwrapper.cpp | 1 +
linden/indra/newview/fonts/MtBdLfRg.ttf | Bin 52444 -> 0 bytes
linden/indra/newview/fonts/MtBkLfRg.ttf | Bin 55108 -> 0 bytes
linden/indra/newview/fonts/profontdoc.txt | 176 -
linden/indra/newview/fonts/profontwindows.ttf | Bin 56376 -> 0 bytes
linden/indra/newview/gpu_table.txt | 5 +
linden/indra/newview/head.cpp | 1 +
linden/indra/newview/head.h | 1 +
.../windows/installer_template_multilang.nsi | 938 ++
.../indra/newview/installers/windows/lang_de.nsi | 57 +
.../newview/installers/windows/lang_en-us.nsi | 57 +
.../indra/newview/installers/windows/lang_ja.nsi | 57 +
.../indra/newview/installers/windows/lang_ko.nsi | 57 +
linden/indra/newview/licenses-linux.txt | 14 +
linden/indra/newview/licenses-mac.txt | 14 +
linden/indra/newview/licenses-win32.txt | 14 +
linden/indra/newview/linux_tools/client-readme.txt | 50 +-
linden/indra/newview/llagent.cpp | 101 +-
linden/indra/newview/llagent.h | 13 +-
linden/indra/newview/llagentdata.cpp | 1 +
linden/indra/newview/llagentdata.h | 1 +
linden/indra/newview/llagentpilot.cpp | 1 +
linden/indra/newview/llagentpilot.h | 1 +
linden/indra/newview/llanimalcontrols.cpp | 1 +
linden/indra/newview/llanimalcontrols.h | 1 +
linden/indra/newview/llappearance.h | 1 +
linden/indra/newview/llassetuploadresponders.cpp | 2 +-
linden/indra/newview/llasynchostbyname.cpp | 1 +
linden/indra/newview/llasynchostbyname.h | 1 +
linden/indra/newview/llaudiosourcevo.cpp | 1 +
linden/indra/newview/llaudiosourcevo.h | 1 +
linden/indra/newview/llaudiostatus.cpp | 1 +
linden/indra/newview/llaudiostatus.h | 1 +
linden/indra/newview/llbbox.cpp | 1 +
linden/indra/newview/llbbox.h | 1 +
linden/indra/newview/llbox.cpp | 1 +
linden/indra/newview/llbox.h | 1 +
linden/indra/newview/llcallbacklist.cpp | 1 +
linden/indra/newview/llcallbacklist.h | 1 +
linden/indra/newview/llcallingcard.cpp | 1 +
linden/indra/newview/llcallingcard.h | 1 +
linden/indra/newview/llcameraview.cpp | 97 +-
linden/indra/newview/llcameraview.h | 22 +
linden/indra/newview/llcape.cpp | 1 +
linden/indra/newview/llcape.h | 1 +
linden/indra/newview/llcaphttpsender.cpp | 50 +
linden/indra/newview/llcaphttpsender.h | 50 +
linden/indra/newview/llchatbar.cpp | 3 +-
linden/indra/newview/llchatbar.h | 3 +-
linden/indra/newview/llclassifiedinfo.cpp | 1 +
linden/indra/newview/llclassifiedinfo.h | 1 +
linden/indra/newview/llcloud.cpp | 1 +
linden/indra/newview/llcloud.h | 1 +
linden/indra/newview/llcolorscheme.cpp | 1 +
linden/indra/newview/llcolorscheme.h | 1 +
linden/indra/newview/llcolorswatch.cpp | 9 +-
linden/indra/newview/llcolorswatch.h | 1 +
linden/indra/newview/llcompass.cpp | 1 +
linden/indra/newview/llcompass.h | 1 +
linden/indra/newview/llcompilequeue.cpp | 25 +-
linden/indra/newview/llcompilequeue.h | 1 +
linden/indra/newview/llconfirmationmanager.cpp | 1 +
linden/indra/newview/llconfirmationmanager.h | 1 +
linden/indra/newview/llconsole.cpp | 1 +
linden/indra/newview/llconsole.h | 1 +
linden/indra/newview/llcontainerview.cpp | 1 +
linden/indra/newview/llcontainerview.h | 1 +
linden/indra/newview/llcontroldef.cpp | 78 +-
linden/indra/newview/llcountdown.cpp | 1 +
linden/indra/newview/llcountdown.h | 1 +
linden/indra/newview/llcubemap.cpp | 18 +-
linden/indra/newview/llcubemap.h | 3 +
linden/indra/newview/llcurrencyuimanager.cpp | 1 +
linden/indra/newview/llcurrencyuimanager.h | 1 +
linden/indra/newview/llcylinder.cpp | 1 +
linden/indra/newview/llcylinder.h | 1 +
linden/indra/newview/lldebugmessagebox.cpp | 7 +-
linden/indra/newview/lldebugmessagebox.h | 1 +
linden/indra/newview/lldebugview.cpp | 1 +
linden/indra/newview/lldebugview.h | 1 +
linden/indra/newview/lldirpicker.cpp | 1 +
linden/indra/newview/lldirpicker.h | 1 +
linden/indra/newview/lldrawable.cpp | 24 +-
linden/indra/newview/lldrawable.h | 4 +-
linden/indra/newview/lldrawpool.cpp | 4 +
linden/indra/newview/lldrawpool.h | 4 +-
linden/indra/newview/lldrawpoolalpha.cpp | 17 +-
linden/indra/newview/lldrawpoolalpha.h | 1 +
linden/indra/newview/lldrawpoolavatar.cpp | 72 +-
linden/indra/newview/lldrawpoolavatar.h | 1 +
linden/indra/newview/lldrawpoolbump.cpp | 30 +-
linden/indra/newview/lldrawpoolbump.h | 3 +-
linden/indra/newview/lldrawpoolclouds.cpp | 1 +
linden/indra/newview/lldrawpoolclouds.h | 1 +
linden/indra/newview/lldrawpoolground.cpp | 4 +-
linden/indra/newview/lldrawpoolground.h | 1 +
linden/indra/newview/lldrawpoolsimple.cpp | 100 +-
linden/indra/newview/lldrawpoolsimple.h | 21 +
linden/indra/newview/lldrawpoolsky.cpp | 4 +-
linden/indra/newview/lldrawpoolsky.h | 1 +
linden/indra/newview/lldrawpoolstars.cpp | 8 +-
linden/indra/newview/lldrawpoolstars.h | 1 +
linden/indra/newview/lldrawpoolterrain.cpp | 22 +-
linden/indra/newview/lldrawpoolterrain.h | 1 +
linden/indra/newview/lldrawpooltree.cpp | 4 +-
linden/indra/newview/lldrawpooltree.h | 1 +
linden/indra/newview/lldrawpoolwater.cpp | 152 +-
linden/indra/newview/lldrawpoolwater.h | 1 +
linden/indra/newview/lldriverparam.cpp | 1 +
linden/indra/newview/lldriverparam.h | 1 +
linden/indra/newview/lldynamictexture.cpp | 1 +
linden/indra/newview/lldynamictexture.h | 1 +
linden/indra/newview/llemote.cpp | 1 +
linden/indra/newview/llemote.h | 1 +
linden/indra/newview/lleventinfo.cpp | 1 +
linden/indra/newview/lleventinfo.h | 1 +
linden/indra/newview/lleventnotifier.cpp | 1 +
linden/indra/newview/lleventnotifier.h | 1 +
linden/indra/newview/lleventpoll.cpp | 255 +-
linden/indra/newview/lleventpoll.h | 13 +-
linden/indra/newview/llface.cpp | 37 +-
linden/indra/newview/llface.h | 1 +
linden/indra/newview/llface.inl | 1 +
linden/indra/newview/llfasttimerview.cpp | 1 +
linden/indra/newview/llfasttimerview.h | 1 +
linden/indra/newview/llfeaturemanager.cpp | 24 +-
linden/indra/newview/llfeaturemanager.h | 1 +
linden/indra/newview/llfft.cpp | 1 +
linden/indra/newview/llfft.h | 1 +
linden/indra/newview/llfilepicker.cpp | 2 +
linden/indra/newview/llfilepicker.h | 1 +
linden/indra/newview/llfirstuse.cpp | 1 +
linden/indra/newview/llfirstuse.h | 1 +
linden/indra/newview/llflexibleobject.cpp | 1 +
linden/indra/newview/llflexibleobject.h | 1 +
linden/indra/newview/llfloaterabout.cpp | 3 +-
linden/indra/newview/llfloaterabout.h | 1 +
linden/indra/newview/llfloateranimpreview.cpp | 13 +-
linden/indra/newview/llfloateranimpreview.h | 3 +-
linden/indra/newview/llfloaterauction.cpp | 54 +-
linden/indra/newview/llfloaterauction.h | 1 +
linden/indra/newview/llfloateravatarinfo.cpp | 6 +-
linden/indra/newview/llfloateravatarinfo.h | 1 +
linden/indra/newview/llfloateravatarpicker.cpp | 35 +-
linden/indra/newview/llfloateravatarpicker.h | 1 +
linden/indra/newview/llfloateravatartextures.cpp | 12 +-
linden/indra/newview/llfloateravatartextures.h | 1 +
linden/indra/newview/llfloaterbuildoptions.cpp | 1 +
linden/indra/newview/llfloaterbuildoptions.h | 1 +
linden/indra/newview/llfloaterbump.cpp | 16 +-
linden/indra/newview/llfloaterbump.h | 1 +
linden/indra/newview/llfloaterbuy.cpp | 13 +-
linden/indra/newview/llfloaterbuy.h | 1 +
linden/indra/newview/llfloaterbuycontents.cpp | 11 +-
linden/indra/newview/llfloaterbuycontents.h | 1 +
linden/indra/newview/llfloaterbuycurrency.cpp | 1 +
linden/indra/newview/llfloaterbuycurrency.h | 1 +
linden/indra/newview/llfloaterbuyland.cpp | 51 +-
linden/indra/newview/llfloaterbuyland.h | 1 +
linden/indra/newview/llfloaterchat.cpp | 1 +
linden/indra/newview/llfloaterchat.h | 1 +
linden/indra/newview/llfloaterclothing.cpp | 9 +-
linden/indra/newview/llfloaterclothing.h | 1 +
linden/indra/newview/llfloatercolorpicker.cpp | 76 +-
linden/indra/newview/llfloatercolorpicker.h | 4 +-
linden/indra/newview/llfloatercustomize.cpp | 1 +
linden/indra/newview/llfloatercustomize.h | 1 +
linden/indra/newview/llfloaterdirectory.cpp | 1 +
linden/indra/newview/llfloaterdirectory.h | 1 +
linden/indra/newview/llfloatereditui.cpp | 1 +
linden/indra/newview/llfloatereditui.h | 1 +
linden/indra/newview/llfloaterfriends.cpp | 47 +-
linden/indra/newview/llfloaterfriends.h | 10 +-
linden/indra/newview/llfloatergesture.cpp | 1 +
linden/indra/newview/llfloatergesture.h | 1 +
linden/indra/newview/llfloatergodtools.cpp | 15 +-
linden/indra/newview/llfloatergodtools.h | 1 +
linden/indra/newview/llfloatergroupinfo.cpp | 1 +
linden/indra/newview/llfloatergroupinfo.h | 1 +
linden/indra/newview/llfloatergroupinvite.cpp | 1 +
linden/indra/newview/llfloatergroupinvite.h | 1 +
linden/indra/newview/llfloatergroups.cpp | 1 +
linden/indra/newview/llfloatergroups.h | 1 +
linden/indra/newview/llfloaterhtml.cpp | 164 +-
linden/indra/newview/llfloaterhtml.h | 31 +-
linden/indra/newview/llfloaterhtmlfind.cpp | 1 +
linden/indra/newview/llfloaterhtmlfind.h | 1 +
linden/indra/newview/llfloaterhtmlhelp.cpp | 58 +-
linden/indra/newview/llfloaterhtmlhelp.h | 15 +-
linden/indra/newview/llfloaterimagepreview.cpp | 7 +-
linden/indra/newview/llfloaterimagepreview.h | 1 +
linden/indra/newview/llfloaterimport.cpp | 34 +-
linden/indra/newview/llfloaterimport.h | 1 +
linden/indra/newview/llfloaterinspect.cpp | 1 -
linden/indra/newview/llfloaterinspect.h | 1 +
linden/indra/newview/llfloaterland.cpp | 105 +-
linden/indra/newview/llfloaterland.h | 22 +-
linden/indra/newview/llfloaterlandholdings.cpp | 15 +-
linden/indra/newview/llfloaterlandholdings.h | 1 +
linden/indra/newview/llfloatermap.cpp | 45 +
linden/indra/newview/llfloatermap.h | 2 +
linden/indra/newview/llfloatermute.cpp | 1 +
linden/indra/newview/llfloatermute.h | 1 +
linden/indra/newview/llfloaternamedesc.cpp | 1 +
linden/indra/newview/llfloaternamedesc.h | 1 +
linden/indra/newview/llfloaternewim.cpp | 63 +-
linden/indra/newview/llfloaternewim.h | 6 +-
linden/indra/newview/llfloateropenobject.cpp | 1 +
linden/indra/newview/llfloateropenobject.h | 1 +
linden/indra/newview/llfloaterpermissionsmgr.cpp | 1 +
linden/indra/newview/llfloaterpermissionsmgr.h | 1 +
linden/indra/newview/llfloaterpostcard.cpp | 3 +-
linden/indra/newview/llfloaterpostcard.h | 1 +
linden/indra/newview/llfloaterpreference.cpp | 1 +
linden/indra/newview/llfloaterpreference.h | 1 +
linden/indra/newview/llfloaterproperties.cpp | 13 +-
linden/indra/newview/llfloaterproperties.h | 1 +
linden/indra/newview/llfloaterrate.cpp | 277 -
linden/indra/newview/llfloaterrate.h | 88 -
linden/indra/newview/llfloaterregioninfo.cpp | 73 +-
linden/indra/newview/llfloaterregioninfo.h | 1 +
linden/indra/newview/llfloaterreporter.cpp | 4 +-
linden/indra/newview/llfloaterreporter.h | 1 +
linden/indra/newview/llfloatersaveavatar.cpp | 1 +
linden/indra/newview/llfloatersaveavatar.h | 1 +
linden/indra/newview/llfloaterscriptdebug.cpp | 1 +
linden/indra/newview/llfloaterscriptdebug.h | 1 +
linden/indra/newview/llfloatersellland.cpp | 1 +
linden/indra/newview/llfloatersellland.h | 1 +
linden/indra/newview/llfloatersnapshot.cpp | 3 +-
linden/indra/newview/llfloatersnapshot.h | 1 +
linden/indra/newview/llfloatertelehub.cpp | 3 +-
linden/indra/newview/llfloatertelehub.h | 1 +
linden/indra/newview/llfloatertest.cpp | 5 +-
linden/indra/newview/llfloatertest.h | 1 +
linden/indra/newview/llfloatertools.cpp | 3 +-
linden/indra/newview/llfloatertools.h | 1 +
linden/indra/newview/llfloatertopobjects.cpp | 1 +
linden/indra/newview/llfloatertopobjects.h | 1 +
linden/indra/newview/llfloatertos.cpp | 2 +
linden/indra/newview/llfloatertos.h | 1 +
linden/indra/newview/llfloaterworldmap.cpp | 1 +
linden/indra/newview/llfloaterworldmap.h | 1 +
linden/indra/newview/llfolderview.cpp | 34 +-
linden/indra/newview/llfolderview.h | 1 +
linden/indra/newview/llfollowcam.cpp | 1 +
linden/indra/newview/llfollowcam.h | 1 +
linden/indra/newview/llframestats.cpp | 7 +-
linden/indra/newview/llframestats.h | 1 +
linden/indra/newview/llframestatview.cpp | 7 +-
linden/indra/newview/llframestatview.h | 1 +
linden/indra/newview/llgenepool.cpp | 1 +
linden/indra/newview/llgenepool.h | 1 +
linden/indra/newview/llgesturemgr.cpp | 1 +
linden/indra/newview/llgesturemgr.h | 1 +
linden/indra/newview/llgivemoney.cpp | 1 +
linden/indra/newview/llgivemoney.h | 1 +
linden/indra/newview/llglsandbox.cpp | 1 +
linden/indra/newview/llglslshader.cpp | 1221 ++
linden/indra/newview/llglslshader.h | 232 +
linden/indra/newview/llgroupmgr.cpp | 1 +
linden/indra/newview/llgroupmgr.h | 1 +
linden/indra/newview/llgroupnotify.cpp | 3 +-
linden/indra/newview/llgroupnotify.h | 1 +
linden/indra/newview/llhippo.cpp | 1 +
linden/indra/newview/llhippo.h | 1 +
linden/indra/newview/llhoverview.cpp | 5 +-
linden/indra/newview/llhoverview.h | 1 +
linden/indra/newview/llhudconnector.cpp | 1 +
linden/indra/newview/llhudconnector.h | 1 +
linden/indra/newview/llhudeffect.cpp | 1 +
linden/indra/newview/llhudeffect.h | 1 +
linden/indra/newview/llhudeffectbeam.cpp | 1 +
linden/indra/newview/llhudeffectbeam.h | 1 +
linden/indra/newview/llhudeffectlookat.cpp | 1 +
linden/indra/newview/llhudeffectlookat.h | 1 +
linden/indra/newview/llhudeffectpointat.cpp | 1 +
linden/indra/newview/llhudeffectpointat.h | 1 +
linden/indra/newview/llhudeffecttrail.cpp | 1 +
linden/indra/newview/llhudeffecttrail.h | 1 +
linden/indra/newview/llhudicon.cpp | 1 +
linden/indra/newview/llhudicon.h | 1 +
linden/indra/newview/llhudmanager.cpp | 1 +
linden/indra/newview/llhudmanager.h | 1 +
linden/indra/newview/llhudobject.cpp | 1 +
linden/indra/newview/llhudobject.h | 1 +
linden/indra/newview/llhudrender.cpp | 1 +
linden/indra/newview/llhudrender.h | 1 +
linden/indra/newview/llhudtext.cpp | 1 +
linden/indra/newview/llhudtext.h | 1 +
linden/indra/newview/llhudview.cpp | 1 +
linden/indra/newview/llhudview.h | 1 +
linden/indra/newview/llimpanel.cpp | 497 +-
linden/indra/newview/llimpanel.h | 42 +-
linden/indra/newview/llimview.cpp | 294 +-
linden/indra/newview/llimview.h | 25 +-
linden/indra/newview/llinventoryactions.cpp | 137 +-
linden/indra/newview/llinventorybridge.cpp | 82 +-
linden/indra/newview/llinventorybridge.h | 7 +-
linden/indra/newview/llinventoryclipboard.cpp | 1 +
linden/indra/newview/llinventoryclipboard.h | 1 +
linden/indra/newview/llinventorymodel.cpp | 9 +-
linden/indra/newview/llinventorymodel.h | 1 +
linden/indra/newview/llinventoryview.cpp | 21 +-
linden/indra/newview/llinventoryview.h | 7 +-
linden/indra/newview/lljoystickbutton.cpp | 9 +-
linden/indra/newview/lljoystickbutton.h | 1 +
linden/indra/newview/lllandmarklist.cpp | 1 +
linden/indra/newview/lllandmarklist.h | 1 +
linden/indra/newview/lllightconstants.h | 1 +
linden/indra/newview/lllocalanimationobject.cpp | 1 +
linden/indra/newview/lllocalanimationobject.h | 1 +
linden/indra/newview/lllogchat.cpp | 1 +
linden/indra/newview/lllogchat.h | 1 +
linden/indra/newview/llmanip.cpp | 23 +-
linden/indra/newview/llmanip.h | 1 +
linden/indra/newview/llmaniprotate.cpp | 1 +
linden/indra/newview/llmaniprotate.h | 1 +
linden/indra/newview/llmanipscale.cpp | 1 +
linden/indra/newview/llmanipscale.h | 1 +
linden/indra/newview/llmaniptranslate.cpp | 3 +-
linden/indra/newview/llmaniptranslate.h | 1 +
linden/indra/newview/llmapresponders.cpp | 1 +
linden/indra/newview/llmapresponders.h | 1 +
linden/indra/newview/llmediaremotectrl.cpp | 1 +
linden/indra/newview/llmediaremotectrl.h | 1 +
linden/indra/newview/llmemoryview.cpp | 1 +
linden/indra/newview/llmemoryview.h | 1 +
linden/indra/newview/llmenucommands.cpp | 1 +
linden/indra/newview/llmenucommands.h | 1 +
linden/indra/newview/llmorphview.cpp | 1 +
linden/indra/newview/llmorphview.h | 1 +
linden/indra/newview/llmoveview.cpp | 1 +
linden/indra/newview/llmoveview.h | 1 +
linden/indra/newview/llmutelist.cpp | 9 +-
linden/indra/newview/llmutelist.h | 1 +
linden/indra/newview/llnamebox.cpp | 1 +
linden/indra/newview/llnamebox.h | 1 +
linden/indra/newview/llnameeditor.cpp | 3 +-
linden/indra/newview/llnameeditor.h | 3 +-
linden/indra/newview/llnamelistctrl.cpp | 60 +-
linden/indra/newview/llnamelistctrl.h | 1 +
linden/indra/newview/llnetmap.cpp | 17 +-
linden/indra/newview/llnetmap.h | 1 +
linden/indra/newview/llnotify.cpp | 1 +
linden/indra/newview/llnotify.h | 1 +
linden/indra/newview/lloverlaybar.cpp | 1 +
linden/indra/newview/lloverlaybar.h | 1 +
linden/indra/newview/llpanelaudioprefs.cpp | 1 +
linden/indra/newview/llpanelaudioprefs.h | 1 +
linden/indra/newview/llpanelavatar.cpp | 219 +-
linden/indra/newview/llpanelavatar.h | 16 +-
linden/indra/newview/llpanelclassified.cpp | 23 +-
linden/indra/newview/llpanelclassified.h | 4 +-
linden/indra/newview/llpanelcontents.cpp | 1 +
linden/indra/newview/llpanelcontents.h | 1 +
linden/indra/newview/llpaneldebug.cpp | 1 +
linden/indra/newview/llpaneldebug.h | 1 +
linden/indra/newview/llpaneldirbrowser.cpp | 43 +-
linden/indra/newview/llpaneldirbrowser.h | 3 +-
linden/indra/newview/llpaneldirclassified.cpp | 1 +
linden/indra/newview/llpaneldirclassified.h | 1 +
linden/indra/newview/llpaneldirevents.cpp | 5 +-
linden/indra/newview/llpaneldirevents.h | 1 +
linden/indra/newview/llpaneldirfind.cpp | 1 +
linden/indra/newview/llpaneldirfind.h | 1 +
linden/indra/newview/llpaneldirgroups.cpp | 26 +-
linden/indra/newview/llpaneldirgroups.h | 3 +
linden/indra/newview/llpaneldirland.cpp | 3 +-
linden/indra/newview/llpaneldirland.h | 1 +
linden/indra/newview/llpaneldirpeople.cpp | 1 +
linden/indra/newview/llpaneldirpeople.h | 1 +
linden/indra/newview/llpaneldirplaces.cpp | 3 +-
linden/indra/newview/llpaneldirplaces.h | 1 +
linden/indra/newview/llpaneldirpopular.cpp | 1 +
linden/indra/newview/llpaneldirpopular.h | 1 +
linden/indra/newview/llpaneldisplay.cpp | 44 +-
linden/indra/newview/llpaneldisplay.h | 4 +
linden/indra/newview/llpanelevent.cpp | 19 +-
linden/indra/newview/llpanelevent.h | 4 +-
linden/indra/newview/llpanelface.cpp | 1 +
linden/indra/newview/llpanelface.h | 1 +
linden/indra/newview/llpanelgeneral.cpp | 1 +
linden/indra/newview/llpanelgeneral.h | 1 +
linden/indra/newview/llpanelgroup.cpp | 1 +
linden/indra/newview/llpanelgroup.h | 1 +
linden/indra/newview/llpanelgroupgeneral.cpp | 25 +-
linden/indra/newview/llpanelgroupgeneral.h | 1 +
linden/indra/newview/llpanelgroupinvite.cpp | 11 +-
linden/indra/newview/llpanelgroupinvite.h | 1 +
linden/indra/newview/llpanelgrouplandmoney.cpp | 41 +-
linden/indra/newview/llpanelgrouplandmoney.h | 1 +
linden/indra/newview/llpanelgroupnotices.cpp | 16 +-
linden/indra/newview/llpanelgroupnotices.h | 1 +
linden/indra/newview/llpanelgrouproles.cpp | 1 +
linden/indra/newview/llpanelgrouproles.h | 1 +
linden/indra/newview/llpanelgroupvoting.cpp | 225 +-
linden/indra/newview/llpanelgroupvoting.h | 1 +
linden/indra/newview/llpanelinput.cpp | 1 +
linden/indra/newview/llpanelinput.h | 1 +
linden/indra/newview/llpanelinventory.cpp | 53 +-
linden/indra/newview/llpanelinventory.h | 1 +
linden/indra/newview/llpanelland.cpp | 1 +
linden/indra/newview/llpanelland.h | 1 +
linden/indra/newview/llpanellandobjects.cpp | 1 +
linden/indra/newview/llpanellandobjects.h | 1 +
linden/indra/newview/llpanellandoptions.cpp | 1 +
linden/indra/newview/llpanellandoptions.h | 1 +
linden/indra/newview/llpanellogin.cpp | 3 +-
linden/indra/newview/llpanellogin.h | 1 +
linden/indra/newview/llpanelmorph.cpp | 1 +
linden/indra/newview/llpanelmorph.h | 1 +
linden/indra/newview/llpanelmsgs.cpp | 23 +-
linden/indra/newview/llpanelmsgs.h | 1 +
linden/indra/newview/llpanelnetwork.cpp | 1 +
linden/indra/newview/llpanelnetwork.h | 1 +
linden/indra/newview/llpanelobject.cpp | 7 +-
linden/indra/newview/llpanelobject.h | 1 +
linden/indra/newview/llpanelpermissions.cpp | 5 +-
linden/indra/newview/llpanelpermissions.h | 1 +
linden/indra/newview/llpanelpick.cpp | 38 +-
linden/indra/newview/llpanelpick.h | 11 +-
linden/indra/newview/llpanelplace.cpp | 22 +-
linden/indra/newview/llpanelplace.h | 4 +-
linden/indra/newview/llpanelvolume.cpp | 1 +
linden/indra/newview/llpanelvolume.h | 1 +
linden/indra/newview/llpanelweb.cpp | 1 +
linden/indra/newview/llpanelweb.h | 1 +
linden/indra/newview/llpatchvertexarray.cpp | 1 +
linden/indra/newview/llpatchvertexarray.h | 1 +
linden/indra/newview/llpolymesh.cpp | 7 +-
linden/indra/newview/llpolymesh.h | 1 +
linden/indra/newview/llpolymorph.cpp | 1 +
linden/indra/newview/llpolymorph.h | 1 +
linden/indra/newview/llprefschat.cpp | 1 +
linden/indra/newview/llprefschat.h | 1 +
linden/indra/newview/llprefsim.cpp | 1 +
linden/indra/newview/llprefsim.h | 1 +
linden/indra/newview/llpreview.cpp | 9 +-
linden/indra/newview/llpreview.h | 1 +
linden/indra/newview/llpreviewanim.cpp | 25 +-
linden/indra/newview/llpreviewanim.h | 1 +
linden/indra/newview/llpreviewgesture.cpp | 24 +-
linden/indra/newview/llpreviewgesture.h | 1 +
linden/indra/newview/llpreviewlandmark.cpp | 1 +
linden/indra/newview/llpreviewlandmark.h | 1 +
linden/indra/newview/llpreviewnotecard.cpp | 3 +-
linden/indra/newview/llpreviewnotecard.h | 1 +
linden/indra/newview/llpreviewscript.cpp | 313 +-
linden/indra/newview/llpreviewscript.h | 15 +
linden/indra/newview/llpreviewsound.cpp | 1 +
linden/indra/newview/llpreviewsound.h | 1 +
linden/indra/newview/llpreviewtexture.cpp | 3 +-
linden/indra/newview/llpreviewtexture.h | 1 +
linden/indra/newview/llprogressview.cpp | 7 +-
linden/indra/newview/llprogressview.h | 5 +-
linden/indra/newview/llregionposition.cpp | 1 +
linden/indra/newview/llregionposition.h | 1 +
linden/indra/newview/llroam.cpp | 1 +
linden/indra/newview/llroam.h | 1 +
linden/indra/newview/llsavedsettingsglue.cpp | 1 +
linden/indra/newview/llsavedsettingsglue.h | 1 +
linden/indra/newview/llselectmgr.cpp | 19 +-
linden/indra/newview/llselectmgr.h | 1 +
linden/indra/newview/llsky.cpp | 1 +
linden/indra/newview/llsky.h | 1 +
linden/indra/newview/llspatialpartition.cpp | 69 +-
linden/indra/newview/llspatialpartition.h | 1 +
linden/indra/newview/llsphere.cpp | 1 +
linden/indra/newview/llsphere.h | 1 +
linden/indra/newview/llsprite.cpp | 1 +
linden/indra/newview/llsprite.h | 1 +
linden/indra/newview/llstartup.cpp | 153 +-
linden/indra/newview/llstartup.h | 2 +
linden/indra/newview/llstatbar.cpp | 1 +
linden/indra/newview/llstatbar.h | 1 +
linden/indra/newview/llstatgraph.cpp | 3 +-
linden/indra/newview/llstatgraph.h | 1 +
linden/indra/newview/llstatusbar.cpp | 1 +
linden/indra/newview/llstatusbar.h | 1 +
linden/indra/newview/llstatview.cpp | 1 +
linden/indra/newview/llstatview.h | 1 +
linden/indra/newview/llsurface.cpp | 1 +
linden/indra/newview/llsurface.h | 1 +
linden/indra/newview/llsurfacepatch.cpp | 6 +
linden/indra/newview/llsurfacepatch.h | 1 +
linden/indra/newview/lltable.h | 1 +
linden/indra/newview/lltexlayer.cpp | 1 +
linden/indra/newview/lltexlayer.h | 1 +
linden/indra/newview/lltexturecache.cpp | 1 +
linden/indra/newview/lltexturecache.h | 1 +
linden/indra/newview/lltexturectrl.cpp | 3 +-
linden/indra/newview/lltexturectrl.h | 1 +
linden/indra/newview/lltexturefetch.cpp | 1 +
linden/indra/newview/lltexturefetch.h | 1 +
linden/indra/newview/lltexturetable.cpp | 1 +
linden/indra/newview/lltexturetable.h | 1 +
linden/indra/newview/lltextureview.cpp | 1 +
linden/indra/newview/lltextureview.h | 1 +
linden/indra/newview/lltool.cpp | 23 +-
linden/indra/newview/lltool.h | 2 +-
linden/indra/newview/lltoolbar.cpp | 1 +
linden/indra/newview/lltoolbar.h | 1 +
linden/indra/newview/lltoolbrush.cpp | 1 +
linden/indra/newview/lltoolbrush.h | 1 +
linden/indra/newview/lltoolcomp.cpp | 6 +
linden/indra/newview/lltoolcomp.h | 1 +
linden/indra/newview/lltooldraganddrop.cpp | 7 +-
linden/indra/newview/lltooldraganddrop.h | 1 +
linden/indra/newview/lltoolface.cpp | 1 +
linden/indra/newview/lltoolface.h | 1 +
linden/indra/newview/lltoolfocus.cpp | 1 +
linden/indra/newview/lltoolfocus.h | 1 +
linden/indra/newview/lltoolgrab.cpp | 1 +
linden/indra/newview/lltoolgrab.h | 1 +
linden/indra/newview/lltoolgun.cpp | 1 +
linden/indra/newview/lltoolgun.h | 1 +
linden/indra/newview/lltoolindividual.cpp | 1 +
linden/indra/newview/lltoolindividual.h | 1 +
linden/indra/newview/lltoolmgr.cpp | 1 +
linden/indra/newview/lltoolmgr.h | 1 +
linden/indra/newview/lltoolmorph.cpp | 1 +
linden/indra/newview/lltoolmorph.h | 1 +
linden/indra/newview/lltoolobjpicker.cpp | 1 +
linden/indra/newview/lltoolobjpicker.h | 1 +
linden/indra/newview/lltoolpie.cpp | 1 +
linden/indra/newview/lltoolpie.h | 1 +
linden/indra/newview/lltoolpipette.cpp | 1 +
linden/indra/newview/lltoolpipette.h | 1 +
linden/indra/newview/lltoolplacer.cpp | 1 +
linden/indra/newview/lltoolplacer.h | 1 +
linden/indra/newview/lltoolselect.cpp | 1 +
linden/indra/newview/lltoolselect.h | 1 +
linden/indra/newview/lltoolselectland.cpp | 1 +
linden/indra/newview/lltoolselectland.h | 1 +
linden/indra/newview/lltoolselectrect.cpp | 1 +
linden/indra/newview/lltoolselectrect.h | 1 +
linden/indra/newview/lltoolview.cpp | 1 +
linden/indra/newview/lltoolview.h | 1 +
linden/indra/newview/lltracker.cpp | 1 +
linden/indra/newview/lltracker.h | 1 +
linden/indra/newview/lluiconstants.h | 1 +
linden/indra/newview/lluploaddialog.cpp | 3 +-
linden/indra/newview/lluploaddialog.h | 1 +
linden/indra/newview/llurl.cpp | 1 +
linden/indra/newview/llurl.h | 1 +
linden/indra/newview/llurlwhitelist.cpp | 1 +
linden/indra/newview/llurlwhitelist.h | 1 +
linden/indra/newview/lluserauth.cpp | 15 +-
linden/indra/newview/lluserauth.h | 1 +
linden/indra/newview/llvelocitybar.cpp | 1 +
linden/indra/newview/llvelocitybar.h | 1 +
linden/indra/newview/llviewchildren.cpp | 1 +
linden/indra/newview/llviewchildren.h | 1 +
linden/indra/newview/llviewerassetstorage.cpp | 1 +
linden/indra/newview/llviewerassetstorage.h | 1 +
linden/indra/newview/llviewerbuild.h | 1 +
linden/indra/newview/llviewercamera.cpp | 3 +
linden/indra/newview/llviewercamera.h | 2 +
linden/indra/newview/llviewercontrol.cpp | 1 +
linden/indra/newview/llviewercontrol.h | 3 +-
linden/indra/newview/llviewerdisplay.cpp | 23 +-
linden/indra/newview/llviewerdisplay.h | 1 +
linden/indra/newview/llviewergenericmessage.cpp | 97 +
linden/indra/newview/llviewergenericmessage.h | 46 +
linden/indra/newview/llviewergesture.cpp | 75 +-
linden/indra/newview/llviewergesture.h | 3 +-
linden/indra/newview/llviewerimage.cpp | 9 +-
linden/indra/newview/llviewerimage.h | 1 +
linden/indra/newview/llviewerimagelist.cpp | 3 +
linden/indra/newview/llviewerimagelist.h | 1 +
linden/indra/newview/llviewerinventory.cpp | 1 +
linden/indra/newview/llviewerinventory.h | 1 +
linden/indra/newview/llviewerjoint.cpp | 3 +-
linden/indra/newview/llviewerjoint.h | 1 +
linden/indra/newview/llviewerjointattachment.cpp | 1 +
linden/indra/newview/llviewerjointattachment.h | 1 +
linden/indra/newview/llviewerjointmesh.cpp | 178 +-
linden/indra/newview/llviewerjointmesh.h | 1 +
linden/indra/newview/llviewerjointshape.cpp | 1 +
linden/indra/newview/llviewerjointshape.h | 1 +
linden/indra/newview/llviewerjoystick.cpp | 272 +
linden/indra/newview/llviewerjoystick.h | 40 +
linden/indra/newview/llviewerkeyboard.cpp | 1 +
linden/indra/newview/llviewerkeyboard.h | 1 +
linden/indra/newview/llviewerlayer.cpp | 1 +
linden/indra/newview/llviewerlayer.h | 1 +
linden/indra/newview/llviewermenu.cpp | 219 +-
linden/indra/newview/llviewermenu.h | 1 +
linden/indra/newview/llviewermessage.cpp | 284 +-
linden/indra/newview/llviewermessage.h | 14 +-
linden/indra/newview/llviewernetwork.cpp | 1 +
linden/indra/newview/llviewernetwork.h | 1 +
linden/indra/newview/llviewerobject.cpp | 8 +
linden/indra/newview/llviewerobject.h | 1 +
linden/indra/newview/llviewerobjectlist.cpp | 1 +
linden/indra/newview/llviewerobjectlist.h | 1 +
linden/indra/newview/llviewerparcelmgr.cpp | 16 +-
linden/indra/newview/llviewerparcelmgr.h | 7 +-
linden/indra/newview/llviewerparceloverlay.cpp | 1 +
linden/indra/newview/llviewerparceloverlay.h | 1 +
linden/indra/newview/llviewerpartsim.cpp | 31 +-
linden/indra/newview/llviewerpartsim.h | 1 +
linden/indra/newview/llviewerpartsource.cpp | 1 +
linden/indra/newview/llviewerpartsource.h | 1 +
.../indra/newview/llviewerprecompiledheaders.cpp | 1 +
linden/indra/newview/llviewerprecompiledheaders.h | 1 +
linden/indra/newview/llviewerregion.cpp | 68 +-
linden/indra/newview/llviewerregion.h | 15 +-
linden/indra/newview/llviewerreputation.cpp | 113 -
linden/indra/newview/llviewerreputation.h | 40 -
linden/indra/newview/llviewerstats.cpp | 1 +
linden/indra/newview/llviewerstats.h | 1 +
linden/indra/newview/llviewertexteditor.cpp | 32 +-
linden/indra/newview/llviewertexteditor.h | 1 +
linden/indra/newview/llviewertextureanim.cpp | 1 +
linden/indra/newview/llviewertextureanim.h | 1 +
linden/indra/newview/llviewerthrottle.cpp | 1 +
linden/indra/newview/llviewerthrottle.h | 1 +
linden/indra/newview/llvieweruictrlfactory.cpp | 1 +
linden/indra/newview/llvieweruictrlfactory.h | 1 +
linden/indra/newview/llviewervisualparam.cpp | 1 +
linden/indra/newview/llviewervisualparam.h | 1 +
linden/indra/newview/llviewerwindow.cpp | 439 +-
linden/indra/newview/llviewerwindow.h | 32 +-
linden/indra/newview/llvlcomposition.cpp | 3 +-
linden/indra/newview/llvlcomposition.h | 1 +
linden/indra/newview/llvlmanager.cpp | 1 +
linden/indra/newview/llvlmanager.h | 1 +
linden/indra/newview/llvoavatar.cpp | 70 +-
linden/indra/newview/llvoavatar.h | 3 +-
linden/indra/newview/llvocache.cpp | 1 +
linden/indra/newview/llvocache.h | 1 +
linden/indra/newview/llvoclouds.cpp | 1 +
linden/indra/newview/llvoclouds.h | 1 +
linden/indra/newview/llvograss.cpp | 1 +
linden/indra/newview/llvograss.h | 1 +
linden/indra/newview/llvoground.cpp | 1 +
linden/indra/newview/llvoground.h | 1 +
linden/indra/newview/llvoinventorylistener.cpp | 1 +
linden/indra/newview/llvoinventorylistener.h | 1 +
linden/indra/newview/llvolumesliderctrl.cpp | 3 +-
linden/indra/newview/llvolumesliderctrl.h | 1 +
linden/indra/newview/llvopartgroup.cpp | 1 +
linden/indra/newview/llvopartgroup.h | 1 +
linden/indra/newview/llvosky.cpp | 28 +-
linden/indra/newview/llvosky.h | 22 +-
linden/indra/newview/llvostars.cpp | 1 +
linden/indra/newview/llvostars.h | 1 +
linden/indra/newview/llvosurfacepatch.cpp | 23 +-
linden/indra/newview/llvosurfacepatch.h | 1 +
linden/indra/newview/llvotextbubble.cpp | 1 +
linden/indra/newview/llvotextbubble.h | 1 +
linden/indra/newview/llvotree.cpp | 1 +
linden/indra/newview/llvotree.h | 1 +
linden/indra/newview/llvotreenew.h | 1 +
linden/indra/newview/llvovolume.cpp | 55 +-
linden/indra/newview/llvovolume.h | 1 +
linden/indra/newview/llvowater.cpp | 1 +
linden/indra/newview/llvowater.h | 1 +
linden/indra/newview/llwaterpatch.cpp | 1 +
linden/indra/newview/llwaterpatch.h | 1 +
linden/indra/newview/llwearable.cpp | 1 +
linden/indra/newview/llwearable.h | 1 +
linden/indra/newview/llwearablelist.cpp | 1 +
linden/indra/newview/llwearablelist.h | 1 +
linden/indra/newview/llweb.cpp | 1 +
linden/indra/newview/llweb.h | 1 +
linden/indra/newview/llwebbrowserctrl.cpp | 98 +-
linden/indra/newview/llwebbrowserctrl.h | 10 +
linden/indra/newview/llwind.cpp | 1 +
linden/indra/newview/llwind.h | 1 +
linden/indra/newview/llwindebug.cpp | 1 +
linden/indra/newview/llwindebug.h | 1 +
linden/indra/newview/llworld.cpp | 310 +-
linden/indra/newview/llworld.h | 16 +-
linden/indra/newview/llworldmap.cpp | 1 +
linden/indra/newview/llworldmap.h | 1 +
linden/indra/newview/llworldmapview.cpp | 9 +-
linden/indra/newview/llworldmapview.h | 1 +
linden/indra/newview/llxmlrpctransaction.cpp | 2 +
linden/indra/newview/llxmlrpctransaction.h | 1 +
linden/indra/newview/lsl_guide.html | 124 +
linden/indra/newview/macmain.h | 1 +
linden/indra/newview/macutil_Prefix.h | 1 +
.../newview/macview.xcodeproj/project.pbxproj | 330 +-
linden/indra/newview/macview_Prefix.h | 1 +
linden/indra/newview/moviemaker.cpp | 1 +
linden/indra/newview/moviemaker.h | 1 +
linden/indra/newview/newview.vcproj | 40 +-
linden/indra/newview/newview_vc8.vcproj | 24 +-
linden/indra/newview/noise.cpp | 1 +
linden/indra/newview/noise.h | 1 +
linden/indra/newview/pipeline.cpp | 1558 +--
linden/indra/newview/pipeline.h | 222 +-
linden/indra/newview/randgauss.h | 1 +
linden/indra/newview/releasenotes.txt | 1324 +--
linden/indra/newview/res-sdl/arrow.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/arrowcop.BMP | Bin 3126 -> 0 bytes
linden/indra/newview/res-sdl/arrowcopmulti.BMP | Bin 3126 -> 0 bytes
linden/indra/newview/res-sdl/arrowdrag.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/circleandline.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/cross.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/hand.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/ibeam.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/ll_icon.BMP | Bin 5174 -> 0 bytes
linden/indra/newview/res-sdl/llarrow.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/llarrowdrag.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/llarrowdragmulti.BMP | Bin 3126 -> 0 bytes
linden/indra/newview/res-sdl/llarrowlocked.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/llgrablocked.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/llno.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/llnolocked.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/lltoolcamera.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/lltoolcreate.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/lltoolfocus.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/lltoolgrab.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/lltoolland.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/lltoolpan.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/lltoolpipette.BMP | Bin 3126 -> 0 bytes
linden/indra/newview/res-sdl/lltoolrotate.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/lltoolscale.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/lltooltranslate.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/lltoolzoomin.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/lltoolzoomout.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/sizenesw.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/sizens.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/sizenwse.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/sizewe.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/toolbuy.BMP | Bin 3126 -> 0 bytes
linden/indra/newview/res-sdl/toolopen.BMP | Bin 3126 -> 0 bytes
linden/indra/newview/res-sdl/toolpay.BMP | Bin 3126 -> 0 bytes
linden/indra/newview/res-sdl/toolpickobject.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/toolpickobject2.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/toolpickobject3.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/toolsit.BMP | Bin 3126 -> 0 bytes
linden/indra/newview/res-sdl/wait.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res-sdl/working.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res/arrow.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res/arrow.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/arrowcop.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/arrowcopmulti.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/arrowdrag.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res/arrowdrag.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/bitmap2.bmp | Bin 25118 -> 0 bytes
linden/indra/newview/res/circleandline.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res/circleandline.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/install_icon.BMP | Bin 262198 -> 0 bytes
linden/indra/newview/res/install_icon.ico | Bin 363246 -> 0 bytes
linden/indra/newview/res/ll_icon.BMP | Bin 262198 -> 0 bytes
linden/indra/newview/res/ll_icon.ico | Bin 364590 -> 0 bytes
linden/indra/newview/res/llarrow.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res/llarrow.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/llarrowdrag.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res/llarrowdrag.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/llarrowdragmulti.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/llarrowlocked.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res/llarrowlocked.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/llgrablocked.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res/llgrablocked.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/llno.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res/llno.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/llnolocked.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res/llnolocked.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/lltoolcamera.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res/lltoolcamera.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/lltoolcreate.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res/lltoolcreate.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/lltoolfocus.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res/lltoolfocus.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/lltoolgrab.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res/lltoolgrab.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/lltoolland.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res/lltoolland.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/lltoolpan.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res/lltoolpan.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/lltoolpipette.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/lltoolrotate.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res/lltoolrotate.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/lltoolscale.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res/lltoolscale.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/lltooltranslate.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res/lltooltranslate.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/lltoolzoomin.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res/lltoolzoomin.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/lltoolzoomout.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res/lltoolzoomout.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/loginbackground.bmp | Bin 336054 -> 0 bytes
linden/indra/newview/res/newViewRes.rc | 8 +-
linden/indra/newview/res/toolbuy.cur | Bin 2238 -> 0 bytes
linden/indra/newview/res/toolopen.cur | Bin 2238 -> 0 bytes
linden/indra/newview/res/toolpay.cur | Bin 2238 -> 0 bytes
linden/indra/newview/res/toolpickobject.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res/toolpickobject.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/toolpickobject2.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res/toolpickobject2.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/toolpickobject3.BMP | Bin 2102 -> 0 bytes
linden/indra/newview/res/toolpickobject3.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/toolpipette.cur | Bin 326 -> 0 bytes
linden/indra/newview/res/toolsit.cur | Bin 2238 -> 0 bytes
linden/indra/newview/res/uninstall_icon.BMP | Bin 262198 -> 0 bytes
linden/indra/newview/res/uninstall_icon.ico | Bin 363246 -> 0 bytes
.../indra/newview/secondlife setup build uma.bat | 4 +
.../indra/newview/secondlife setup build vaak.bat | 4 +
.../indra/newview/secondlife setup build yami.bat | 4 +
linden/indra/newview/skins/textures/textures.xml | 3 +
linden/indra/newview/skins/xui/de/alerts.xml | 16 -
.../indra/newview/skins/xui/de/menu_pie_avatar.xml | 1 -
.../indra/newview/skins/xui/de/menu_pie_object.xml | 2 -
linden/indra/newview/skins/xui/de/panel_avatar.xml | 1 -
linden/indra/newview/skins/xui/en-us/alerts.xml | 61 +-
.../newview/skins/xui/en-us/floater_about.xml | 9 +-
.../newview/skins/xui/en-us/floater_about_land.xml | 18 +-
.../skins/xui/en-us/floater_animation_preview.xml | 4 +-
.../newview/skins/xui/en-us/floater_auction.xml | 9 -
.../skins/xui/en-us/floater_avatar_picker.xml | 4 +-
.../newview/skins/xui/en-us/floater_buy_land.xml | 12 +-
.../newview/skins/xui/en-us/floater_directory.xml | 27 +-
.../newview/skins/xui/en-us/floater_groups.xml | 81 +-
.../indra/newview/skins/xui/en-us/floater_html.xml | 36 +-
.../indra/newview/skins/xui/en-us/floater_im.xml | 21 +
.../skins/xui/en-us/floater_instant_message.xml | 7 +
.../newview/skins/xui/en-us/floater_joystick.xml | 57 +
.../newview/skins/xui/en-us/floater_lsl_guide.xml | 23 +
.../skins/xui/en-us/floater_preferences.xml | 9 +-
.../skins/xui/en-us/floater_script_ed_panel.xml | 8 +-
.../newview/skins/xui/en-us/floater_tools.xml | 6 +-
.../newview/skins/xui/en-us/menu_inventory.xml | 13 +-
.../newview/skins/xui/en-us/menu_pie_avatar.xml | 4 +-
.../newview/skins/xui/en-us/menu_pie_object.xml | 12 +-
.../indra/newview/skins/xui/en-us/menu_viewer.xml | 24 +-
linden/indra/newview/skins/xui/en-us/notify.xml | 6 +-
.../indra/newview/skins/xui/en-us/panel_avatar.xml | 28 +-
.../indra/newview/skins/xui/en-us/panel_group.xml | 2 +-
.../skins/xui/en-us/panel_group_general.xml | 9 +-
.../skins/xui/en-us/panel_preferences_general.xml | 3 +
.../xui/en-us/panel_preferences_graphics2.xml | 42 +-
.../xui/en-us/panel_preferences_graphics3.xml | 5 +
.../indra/newview/skins/xui/en-us/role_actions.xml | 2 +-
.../newview/skins/xui/en-us/teleport_strings.xml | 87 +
linden/indra/newview/skins/xui/es/alerts.xml | 16 -
.../indra/newview/skins/xui/es/menu_pie_avatar.xml | 1 -
.../indra/newview/skins/xui/es/menu_pie_object.xml | 2 -
linden/indra/newview/skins/xui/es/panel_avatar.xml | 1 -
linden/indra/newview/skins/xui/fr/alerts.xml | 16 -
.../indra/newview/skins/xui/fr/menu_pie_avatar.xml | 1 -
.../indra/newview/skins/xui/fr/menu_pie_object.xml | 2 -
linden/indra/newview/skins/xui/fr/panel_avatar.xml | 1 -
linden/indra/newview/skins/xui/ja/alerts.xml | 16 -
.../indra/newview/skins/xui/ja/menu_pie_avatar.xml | 1 -
.../indra/newview/skins/xui/ja/menu_pie_object.xml | 2 -
linden/indra/newview/skins/xui/ja/panel_avatar.xml | 1 -
linden/indra/newview/skins/xui/ko/alerts.xml | 16 -
.../indra/newview/skins/xui/ko/menu_pie_avatar.xml | 1 -
.../indra/newview/skins/xui/ko/menu_pie_object.xml | 2 -
linden/indra/newview/skins/xui/ko/panel_avatar.xml | 1 -
linden/indra/newview/skins/xui/pt/alerts.xml | 16 -
.../indra/newview/skins/xui/pt/menu_pie_avatar.xml | 1 -
.../indra/newview/skins/xui/pt/menu_pie_object.xml | 2 -
linden/indra/newview/skins/xui/pt/panel_avatar.xml | 1 -
linden/indra/newview/skins/xui/zh/alerts.xml | 729 +-
.../indra/newview/skins/xui/zh/floater_about.xml | 19 +-
.../newview/skins/xui/zh/floater_about_land.xml | 144 +-
.../skins/xui/zh/floater_account_history.xml | 4 +
.../skins/xui/zh/floater_animation_preview.xml | 21 +-
.../indra/newview/skins/xui/zh/floater_auction.xml | 2 +-
.../newview/skins/xui/zh/floater_avatar_picker.xml | 8 +-
.../skins/xui/zh/floater_avatar_textures.xml | 28 +-
.../indra/newview/skins/xui/zh/floater_bumps.xml | 14 +-
.../newview/skins/xui/zh/floater_buy_contents.xml | 4 +-
.../newview/skins/xui/zh/floater_buy_currency.xml | 24 +-
.../newview/skins/xui/zh/floater_buy_land.xml | 101 +-
.../newview/skins/xui/zh/floater_buy_object.xml | 2 +-
.../newview/skins/xui/zh/floater_customize.xml | 403 +-
.../newview/skins/xui/zh/floater_directory.xml | 24 +-
.../indra/newview/skins/xui/zh/floater_friends.xml | 18 +-
.../newview/skins/xui/zh/floater_god_tools.xml | 143 +
.../newview/skins/xui/zh/floater_group_info.xml | 26 +-
.../indra/newview/skins/xui/zh/floater_groups.xml | 2 +-
linden/indra/newview/skins/xui/zh/floater_im.xml | 6 +-
.../newview/skins/xui/zh/floater_image_preview.xml | 20 +-
.../skins/xui/zh/floater_instant_message.xml | 5 +-
.../newview/skins/xui/zh/floater_inventory.xml | 54 +-
.../skins/xui/zh/floater_inventory_view_finder.xml | 24 +
.../newview/skins/xui/zh/floater_land_holdings.xml | 5 +-
.../skins/xui/zh/floater_live_lsleditor.xml | 6 +-
.../newview/skins/xui/zh/floater_moveview.xml | 19 +-
linden/indra/newview/skins/xui/zh/floater_mute.xml | 16 +-
.../indra/newview/skins/xui/zh/floater_new_im.xml | 8 +-
.../skins/xui/zh/floater_new_outfit_dialog.xml | 114 +-
.../newview/skins/xui/zh/floater_openobject.xml | 8 +-
linden/indra/newview/skins/xui/zh/floater_pay.xml | 18 +-
.../newview/skins/xui/zh/floater_pay_object.xml | 24 +-
.../newview/skins/xui/zh/floater_postcard.xml | 4 +-
.../newview/skins/xui/zh/floater_preferences.xml | 7 +
.../skins/xui/zh/floater_preview_animation.xml | 11 +-
.../xui/zh/floater_preview_embedded_texture.xml | 6 +-
.../skins/xui/zh/floater_preview_gesture.xml | 30 +-
.../skins/xui/zh/floater_preview_notecard.xml | 2 +-
.../zh/floater_preview_notecard_keep_discard.xml | 4 +-
.../newview/skins/xui/zh/floater_preview_sound.xml | 11 +-
.../skins/xui/zh/floater_preview_texture.xml | 5 +-
.../zh/floater_preview_texture_keep_discard.xml | 6 +-
linden/indra/newview/skins/xui/zh/floater_rate.xml | 44 +
.../newview/skins/xui/zh/floater_report_abuse.xml | 30 +-
.../newview/skins/xui/zh/floater_report_bug.xml | 8 +-
.../skins/xui/zh/floater_script_ed_panel.xml | 18 +-
.../skins/xui/zh/floater_script_preview.xml | 2 +-
.../newview/skins/xui/zh/floater_script_queue.xml | 2 +-
.../newview/skins/xui/zh/floater_script_search.xml | 10 +-
.../newview/skins/xui/zh/floater_sell_land.xml | 68 +
.../skins/xui/zh/floater_settings_debug.xml | 15 +
.../newview/skins/xui/zh/floater_snapshot.xml | 16 +-
.../indra/newview/skins/xui/zh/floater_telehub.xml | 8 +-
.../newview/skins/xui/zh/floater_texture_ctrl.xml | 12 +-
.../indra/newview/skins/xui/zh/floater_tools.xml | 332 +-
.../newview/skins/xui/zh/floater_top_objects.xml | 20 +-
.../skins/xui/zh/floater_wearable_save_as.xml | 4 +-
.../newview/skins/xui/zh/floater_world_map.xml | 23 +-
.../indra/newview/skins/xui/zh/menu_inventory.xml | 91 +-
.../newview/skins/xui/zh/menu_pie_attachment.xml | 6 +
.../indra/newview/skins/xui/zh/menu_pie_avatar.xml | 15 +
.../indra/newview/skins/xui/zh/menu_pie_land.xml | 10 +
.../indra/newview/skins/xui/zh/menu_pie_object.xml | 23 +
.../indra/newview/skins/xui/zh/menu_pie_self.xml | 29 +
linden/indra/newview/skins/xui/zh/menu_viewer.xml | 221 +
.../newview/skins/xui/zh/need_to_translate.xml | 401 +-
.../indra/newview/skins/xui/zh/need_to_update.xml | 479 +-
linden/indra/newview/skins/xui/zh/notify.xml | 334 +-
.../newview/skins/xui/zh/panel_account_details.xml | 7 +
.../skins/xui/zh/panel_account_planning.xml | 2 +
.../skins/xui/zh/panel_account_transactions.xml | 7 +
linden/indra/newview/skins/xui/zh/panel_avatar.xml | 193 +
.../skins/xui/zh/panel_avatar_classified.xml | 11 +-
.../indra/newview/skins/xui/zh/panel_chat_bar.xml | 13 +-
.../newview/skins/xui/zh/panel_classified.xml | 4 +-
linden/indra/newview/skins/xui/zh/panel_group.xml | 14 +
.../newview/skins/xui/zh/panel_group_finder.xml | 9 +
.../newview/skins/xui/zh/panel_group_general.xml | 74 +
.../newview/skins/xui/zh/panel_group_invite.xml | 18 +
.../skins/xui/zh/panel_group_land_money.xml | 82 +
.../newview/skins/xui/zh/panel_group_notices.xml | 64 +
.../newview/skins/xui/zh/panel_group_roles.xml | 153 +
.../newview/skins/xui/zh/panel_group_voting.xml | 78 +
.../newview/skins/xui/zh/panel_land_covenant.xml | 39 +
.../newview/skins/xui/zh/panel_media_remote.xml | 14 +-
.../newview/skins/xui/zh/panel_music_remote.xml | 14 +-
.../newview/skins/xui/zh/panel_overlaybar.xml | 22 +-
.../skins/xui/zh/panel_preferences_audio.xml | 55 +
.../skins/xui/zh/panel_preferences_chat.xml | 54 +
.../skins/xui/zh/panel_preferences_general.xml | 47 +-
.../skins/xui/zh/panel_preferences_graphics1.xml | 32 +-
.../skins/xui/zh/panel_preferences_graphics2.xml | 22 +-
.../skins/xui/zh/panel_preferences_graphics3.xml | 33 +-
.../newview/skins/xui/zh/panel_preferences_im.xml | 19 +
.../skins/xui/zh/panel_preferences_input.xml | 22 +-
.../skins/xui/zh/panel_preferences_popups.xml | 14 +
.../newview/skins/xui/zh/panel_region_covenant.xml | 50 +
.../newview/skins/xui/zh/panel_region_debug.xml | 14 +-
.../newview/skins/xui/zh/panel_region_estate.xml | 9 +-
.../newview/skins/xui/zh/panel_region_general.xml | 6 +-
.../newview/skins/xui/zh/panel_region_terrain.xml | 6 +-
.../newview/skins/xui/zh/panel_scrolling_param.xml | 12 +
.../newview/skins/xui/zh/panel_settings_chat.xml | 6 +-
.../newview/skins/xui/zh/panel_settings_web.xml | 2 +-
.../newview/skins/xui/zh/panel_status_bar.xml | 34 +-
.../indra/newview/skins/xui/zh/panel_toolbar.xml | 6 +-
linden/indra/newview/skins/xui/zh/role_actions.xml | 183 +
linden/indra/newview/skins/xui/zh/strings.xml | 2 +
linden/indra/newview/skins/xui/zh/strings_long.xml | 2 +
linden/indra/newview/skins/xui/zh/xui_version.xml | 4 +
linden/indra/newview/viewer.cpp | 283 +-
linden/indra/newview/viewer.h | 12 +-
linden/indra/newview/viewer_manifest.py | 6 +-
linden/indra/test/common.cpp | 173 +
linden/indra/test/files.lst | 5 +-
linden/indra/test/inventory.cpp | 1 +
linden/indra/test/io.cpp | 129 +-
linden/indra/test/llapp_tut.cpp | 1 +
linden/indra/test/llbase64_tut.cpp | 1 +
linden/indra/test/llblowfish_tut.cpp | 1 +
linden/indra/test/llerror_tut.cpp | 1 +
linden/indra/test/llhttpclient_tut.cpp | 3 +-
linden/indra/test/llhttpnode_tut.cpp | 1 +
linden/indra/test/lliohttpserver_tut.cpp | 30 +-
linden/indra/test/llmessageconfig_tut.cpp | 227 +
linden/indra/test/llmime_tut.cpp | 1 +
linden/indra/test/llpipeutil.cpp | 1 +
linden/indra/test/llpipeutil.h | 1 +
linden/indra/test/llrandom_tut.cpp | 1 +
linden/indra/test/llsd_message_system_tut.cpp | 144 -
linden/indra/test/llsd_new_tut.cpp | 78 +-
linden/indra/test/llsdmessagebuilder_tut.cpp | 279 +
linden/indra/test/llsdmessagereader_tut.cpp | 320 +
linden/indra/test/llsdserialize_tut.cpp | 25 +-
linden/indra/test/llsdtraits.h | 78 +
linden/indra/test/llservicebuilder_tut.cpp | 96 +
linden/indra/test/lltiming_tut.cpp | 1 +
linden/indra/test/lltut.cpp | 1 +
linden/indra/test/lltut.h | 17 +
linden/indra/test/lluri_tut.cpp | 12 +-
linden/indra/test/lluserrelations_tut.cpp | 1 +
linden/indra/test/math.cpp | 143 +
linden/indra/test/reflection_tut.cpp | 1 +
linden/indra/test/test.cpp | 24 +-
linden/indra/test/test.vcproj | 15 +-
linden/indra/test/test_llmanifest.py | 3 +-
linden/indra/win_crash_logger/StdAfx.cpp | 1 +
linden/indra/win_crash_logger/StdAfx.h | 1 +
linden/indra/win_crash_logger/resource.h | 1 +
linden/indra/win_crash_logger/win_crash_logger.cpp | 1 +
linden/indra/win_crash_logger/win_crash_logger.h | 1 +
.../indra/win_crash_logger/win_crash_logger.vcproj | 2 +-
linden/indra/win_updater/updater.cpp | 46 +-
1805 files changed, 27080 insertions(+), 33540 deletions(-)
delete mode 100644 linden/indra/llcommon/bitpack.cpp
create mode 100644 linden/indra/llmessage/llhttpsender.cpp
create mode 100644 linden/indra/llmessage/llhttpsender.h
create mode 100644 linden/indra/llmessage/llmessagebuilder.cpp
create mode 100644 linden/indra/llmessage/llmessagebuilder.h
create mode 100644 linden/indra/llmessage/llmessageconfig.cpp
create mode 100644 linden/indra/llmessage/llmessageconfig.h
create mode 100644 linden/indra/llmessage/llmessagereader.cpp
create mode 100644 linden/indra/llmessage/llmessagereader.h
create mode 100644 linden/indra/llmessage/llmessagetemplate.cpp
create mode 100644 linden/indra/llmessage/llmessagetemplate.h
create mode 100644 linden/indra/llmessage/llmsgvariabletype.h
create mode 100755 linden/indra/llmessage/llsdmessagebuilder.cpp
create mode 100755 linden/indra/llmessage/llsdmessagebuilder.h
create mode 100755 linden/indra/llmessage/llsdmessagereader.cpp
create mode 100755 linden/indra/llmessage/llsdmessagereader.h
delete mode 100644 linden/indra/llmessage/llsdmessagesystem.cpp
delete mode 100644 linden/indra/llmessage/llsdmessagesystem.h
create mode 100644 linden/indra/llmessage/llservicebuilder.cpp
create mode 100644 linden/indra/llmessage/llservicebuilder.h
create mode 100644 linden/indra/llmessage/lltemplatemessagebuilder.cpp
create mode 100644 linden/indra/llmessage/lltemplatemessagebuilder.h
create mode 100644 linden/indra/llmessage/lltemplatemessagereader.cpp
create mode 100644 linden/indra/llmessage/lltemplatemessagereader.h
delete mode 100644 linden/indra/llrender/text_out.cpp
delete mode 100644 linden/indra/llrender/text_out.h
create mode 100644 linden/indra/llui/llhtmlhelp.h
create mode 100644 linden/indra/newview/app_settings/message.xml
create mode 100644 linden/indra/newview/app_settings/shaders/class1/environment/glowF.glsl
create mode 100644 linden/indra/newview/app_settings/shaders/class1/environment/glowV.glsl
delete mode 100644 linden/indra/newview/character/avatar_eye.llm
delete mode 100644 linden/indra/newview/character/avatar_eye_1.llm
delete mode 100644 linden/indra/newview/character/avatar_eyelashes.llm
delete mode 100644 linden/indra/newview/character/avatar_hair.llm
delete mode 100644 linden/indra/newview/character/avatar_hair_1.llm
delete mode 100644 linden/indra/newview/character/avatar_hair_2.llm
delete mode 100644 linden/indra/newview/character/avatar_hair_3.llm
delete mode 100644 linden/indra/newview/character/avatar_hair_4.llm
delete mode 100644 linden/indra/newview/character/avatar_hair_5.llm
delete mode 100644 linden/indra/newview/character/avatar_head.llm
delete mode 100644 linden/indra/newview/character/avatar_head_1.llm
delete mode 100644 linden/indra/newview/character/avatar_head_2.llm
delete mode 100644 linden/indra/newview/character/avatar_head_3.llm
delete mode 100644 linden/indra/newview/character/avatar_head_4.llm
delete mode 100644 linden/indra/newview/character/avatar_lad.xml
delete mode 100644 linden/indra/newview/character/avatar_lower_body.llm
delete mode 100644 linden/indra/newview/character/avatar_lower_body_1.llm
delete mode 100644 linden/indra/newview/character/avatar_lower_body_2.llm
delete mode 100644 linden/indra/newview/character/avatar_lower_body_3.llm
delete mode 100644 linden/indra/newview/character/avatar_lower_body_4.llm
delete mode 100644 linden/indra/newview/character/avatar_skeleton.xml
delete mode 100644 linden/indra/newview/character/avatar_skirt.llm
delete mode 100644 linden/indra/newview/character/avatar_skirt_1.llm
delete mode 100644 linden/indra/newview/character/avatar_skirt_2.llm
delete mode 100644 linden/indra/newview/character/avatar_skirt_3.llm
delete mode 100644 linden/indra/newview/character/avatar_skirt_4.llm
delete mode 100644 linden/indra/newview/character/avatar_upper_body.llm
delete mode 100644 linden/indra/newview/character/avatar_upper_body_1.llm
delete mode 100644 linden/indra/newview/character/avatar_upper_body_2.llm
delete mode 100644 linden/indra/newview/character/avatar_upper_body_3.llm
delete mode 100644 linden/indra/newview/character/avatar_upper_body_4.llm
delete mode 100644 linden/indra/newview/character/blush_alpha.tga
delete mode 100644 linden/indra/newview/character/body_skingrain.tga
delete mode 100644 linden/indra/newview/character/bodyfreckles_alpha.tga
delete mode 100644 linden/indra/newview/character/bump_face_wrinkles.tga
delete mode 100644 linden/indra/newview/character/bump_head_base.tga
delete mode 100644 linden/indra/newview/character/bump_lowerbody_base.tga
delete mode 100644 linden/indra/newview/character/bump_pants_wrinkles.tga
delete mode 100644 linden/indra/newview/character/bump_shirt_wrinkles.tga
delete mode 100644 linden/indra/newview/character/bump_upperbody_base.tga
delete mode 100644 linden/indra/newview/character/eyebrows_alpha.tga
delete mode 100644 linden/indra/newview/character/eyeliner_alpha.tga
delete mode 100644 linden/indra/newview/character/eyeshadow_inner_alpha.tga
delete mode 100644 linden/indra/newview/character/eyeshadow_outer_alpha.tga
delete mode 100644 linden/indra/newview/character/eyewhite.tga
delete mode 100644 linden/indra/newview/character/facehair_chincurtains_alpha.tga
delete mode 100644 linden/indra/newview/character/facehair_moustache_alpha.tga
delete mode 100644 linden/indra/newview/character/facehair_sideburns_alpha.tga
delete mode 100644 linden/indra/newview/character/facehair_soulpatch_alpha.tga
delete mode 100644 linden/indra/newview/character/freckles_alpha.tga
delete mode 100644 linden/indra/newview/character/genepool.xml
delete mode 100644 linden/indra/newview/character/glove_length_alpha.tga
delete mode 100644 linden/indra/newview/character/gloves_fingers_alpha.tga
delete mode 100644 linden/indra/newview/character/head_alpha.tga
delete mode 100644 linden/indra/newview/character/head_color.tga
delete mode 100644 linden/indra/newview/character/head_hair.tga
delete mode 100644 linden/indra/newview/character/head_highlights_alpha.tga
delete mode 100644 linden/indra/newview/character/head_shading_alpha.tga
delete mode 100644 linden/indra/newview/character/head_skingrain.tga
delete mode 100644 linden/indra/newview/character/jacket_length_lower_alpha.tga
delete mode 100644 linden/indra/newview/character/jacket_length_upper_alpha.tga
delete mode 100644 linden/indra/newview/character/jacket_open_lower_alpha.tga
delete mode 100644 linden/indra/newview/character/jacket_open_upper_alpha.tga
delete mode 100644 linden/indra/newview/character/lipgloss_alpha.tga
delete mode 100644 linden/indra/newview/character/lips_mask.tga
delete mode 100644 linden/indra/newview/character/lipstick_alpha.tga
delete mode 100644 linden/indra/newview/character/lowerbody_color.tga
delete mode 100644 linden/indra/newview/character/lowerbody_highlights_alpha.tga
delete mode 100644 linden/indra/newview/character/lowerbody_shading_alpha.tga
delete mode 100644 linden/indra/newview/character/nailpolish_alpha.tga
delete mode 100644 linden/indra/newview/character/pants_length_alpha.tga
delete mode 100644 linden/indra/newview/character/pants_waist_alpha.tga
delete mode 100644 linden/indra/newview/character/rosyface_alpha.tga
delete mode 100644 linden/indra/newview/character/rouge_alpha.tga
delete mode 100644 linden/indra/newview/character/shirt_bottom_alpha.tga
delete mode 100644 linden/indra/newview/character/shirt_collar_alpha.tga
delete mode 100644 linden/indra/newview/character/shirt_collar_back_alpha.tga
delete mode 100644 linden/indra/newview/character/shirt_sleeve_alpha.tga
delete mode 100644 linden/indra/newview/character/shoe_height_alpha.tga
delete mode 100644 linden/indra/newview/character/skirt_length_alpha.tga
delete mode 100644 linden/indra/newview/character/skirt_slit_back_alpha.tga
delete mode 100644 linden/indra/newview/character/skirt_slit_front_alpha.tga
delete mode 100644 linden/indra/newview/character/skirt_slit_left_alpha.tga
delete mode 100644 linden/indra/newview/character/skirt_slit_right_alpha.tga
delete mode 100644 linden/indra/newview/character/underpants_trial_female.tga
delete mode 100644 linden/indra/newview/character/underpants_trial_male.tga
delete mode 100644 linden/indra/newview/character/undershirt_trial_female.tga
delete mode 100644 linden/indra/newview/character/upperbody_color.tga
delete mode 100644 linden/indra/newview/character/upperbody_highlights_alpha.tga
delete mode 100644 linden/indra/newview/character/upperbody_shading_alpha.tga
delete mode 100644 linden/indra/newview/character/upperbodyfreckles_alpha.tga
delete mode 100644 linden/indra/newview/fonts/MtBdLfRg.ttf
delete mode 100644 linden/indra/newview/fonts/MtBkLfRg.ttf
delete mode 100644 linden/indra/newview/fonts/profontdoc.txt
delete mode 100644 linden/indra/newview/fonts/profontwindows.ttf
create mode 100644 linden/indra/newview/installers/windows/installer_template_multilang.nsi
create mode 100644 linden/indra/newview/installers/windows/lang_de.nsi
create mode 100644 linden/indra/newview/installers/windows/lang_en-us.nsi
create mode 100644 linden/indra/newview/installers/windows/lang_ja.nsi
create mode 100644 linden/indra/newview/installers/windows/lang_ko.nsi
create mode 100644 linden/indra/newview/llcaphttpsender.cpp
create mode 100644 linden/indra/newview/llcaphttpsender.h
delete mode 100644 linden/indra/newview/llfloaterrate.cpp
delete mode 100644 linden/indra/newview/llfloaterrate.h
create mode 100644 linden/indra/newview/llglslshader.cpp
create mode 100644 linden/indra/newview/llglslshader.h
create mode 100644 linden/indra/newview/llviewergenericmessage.cpp
create mode 100644 linden/indra/newview/llviewergenericmessage.h
create mode 100644 linden/indra/newview/llviewerjoystick.cpp
create mode 100644 linden/indra/newview/llviewerjoystick.h
delete mode 100644 linden/indra/newview/llviewerreputation.cpp
delete mode 100644 linden/indra/newview/llviewerreputation.h
delete mode 100644 linden/indra/newview/res-sdl/arrow.BMP
delete mode 100644 linden/indra/newview/res-sdl/arrowcop.BMP
delete mode 100644 linden/indra/newview/res-sdl/arrowcopmulti.BMP
delete mode 100644 linden/indra/newview/res-sdl/arrowdrag.BMP
delete mode 100644 linden/indra/newview/res-sdl/circleandline.BMP
delete mode 100644 linden/indra/newview/res-sdl/cross.BMP
delete mode 100644 linden/indra/newview/res-sdl/hand.BMP
delete mode 100644 linden/indra/newview/res-sdl/ibeam.BMP
delete mode 100644 linden/indra/newview/res-sdl/ll_icon.BMP
delete mode 100644 linden/indra/newview/res-sdl/llarrow.BMP
delete mode 100644 linden/indra/newview/res-sdl/llarrowdrag.BMP
delete mode 100644 linden/indra/newview/res-sdl/llarrowdragmulti.BMP
delete mode 100644 linden/indra/newview/res-sdl/llarrowlocked.BMP
delete mode 100644 linden/indra/newview/res-sdl/llgrablocked.BMP
delete mode 100644 linden/indra/newview/res-sdl/llno.BMP
delete mode 100644 linden/indra/newview/res-sdl/llnolocked.BMP
delete mode 100644 linden/indra/newview/res-sdl/lltoolcamera.BMP
delete mode 100644 linden/indra/newview/res-sdl/lltoolcreate.BMP
delete mode 100644 linden/indra/newview/res-sdl/lltoolfocus.BMP
delete mode 100644 linden/indra/newview/res-sdl/lltoolgrab.BMP
delete mode 100644 linden/indra/newview/res-sdl/lltoolland.BMP
delete mode 100644 linden/indra/newview/res-sdl/lltoolpan.BMP
delete mode 100644 linden/indra/newview/res-sdl/lltoolpipette.BMP
delete mode 100644 linden/indra/newview/res-sdl/lltoolrotate.BMP
delete mode 100644 linden/indra/newview/res-sdl/lltoolscale.BMP
delete mode 100644 linden/indra/newview/res-sdl/lltooltranslate.BMP
delete mode 100644 linden/indra/newview/res-sdl/lltoolzoomin.BMP
delete mode 100644 linden/indra/newview/res-sdl/lltoolzoomout.BMP
delete mode 100644 linden/indra/newview/res-sdl/sizenesw.BMP
delete mode 100644 linden/indra/newview/res-sdl/sizens.BMP
delete mode 100644 linden/indra/newview/res-sdl/sizenwse.BMP
delete mode 100644 linden/indra/newview/res-sdl/sizewe.BMP
delete mode 100644 linden/indra/newview/res-sdl/toolbuy.BMP
delete mode 100644 linden/indra/newview/res-sdl/toolopen.BMP
delete mode 100644 linden/indra/newview/res-sdl/toolpay.BMP
delete mode 100644 linden/indra/newview/res-sdl/toolpickobject.BMP
delete mode 100644 linden/indra/newview/res-sdl/toolpickobject2.BMP
delete mode 100644 linden/indra/newview/res-sdl/toolpickobject3.BMP
delete mode 100644 linden/indra/newview/res-sdl/toolsit.BMP
delete mode 100644 linden/indra/newview/res-sdl/wait.BMP
delete mode 100644 linden/indra/newview/res-sdl/working.BMP
delete mode 100644 linden/indra/newview/res/arrow.BMP
delete mode 100644 linden/indra/newview/res/arrow.cur
delete mode 100644 linden/indra/newview/res/arrowcop.cur
delete mode 100644 linden/indra/newview/res/arrowcopmulti.cur
delete mode 100644 linden/indra/newview/res/arrowdrag.BMP
delete mode 100644 linden/indra/newview/res/arrowdrag.cur
delete mode 100644 linden/indra/newview/res/bitmap2.bmp
delete mode 100644 linden/indra/newview/res/circleandline.BMP
delete mode 100644 linden/indra/newview/res/circleandline.cur
delete mode 100644 linden/indra/newview/res/install_icon.BMP
delete mode 100644 linden/indra/newview/res/install_icon.ico
delete mode 100644 linden/indra/newview/res/ll_icon.BMP
delete mode 100644 linden/indra/newview/res/ll_icon.ico
delete mode 100644 linden/indra/newview/res/llarrow.BMP
delete mode 100644 linden/indra/newview/res/llarrow.cur
delete mode 100644 linden/indra/newview/res/llarrowdrag.BMP
delete mode 100644 linden/indra/newview/res/llarrowdrag.cur
delete mode 100644 linden/indra/newview/res/llarrowdragmulti.cur
delete mode 100644 linden/indra/newview/res/llarrowlocked.BMP
delete mode 100644 linden/indra/newview/res/llarrowlocked.cur
delete mode 100644 linden/indra/newview/res/llgrablocked.BMP
delete mode 100644 linden/indra/newview/res/llgrablocked.cur
delete mode 100644 linden/indra/newview/res/llno.BMP
delete mode 100644 linden/indra/newview/res/llno.cur
delete mode 100644 linden/indra/newview/res/llnolocked.BMP
delete mode 100644 linden/indra/newview/res/llnolocked.cur
delete mode 100644 linden/indra/newview/res/lltoolcamera.BMP
delete mode 100644 linden/indra/newview/res/lltoolcamera.cur
delete mode 100644 linden/indra/newview/res/lltoolcreate.BMP
delete mode 100644 linden/indra/newview/res/lltoolcreate.cur
delete mode 100644 linden/indra/newview/res/lltoolfocus.BMP
delete mode 100644 linden/indra/newview/res/lltoolfocus.cur
delete mode 100644 linden/indra/newview/res/lltoolgrab.BMP
delete mode 100644 linden/indra/newview/res/lltoolgrab.cur
delete mode 100644 linden/indra/newview/res/lltoolland.BMP
delete mode 100644 linden/indra/newview/res/lltoolland.cur
delete mode 100644 linden/indra/newview/res/lltoolpan.BMP
delete mode 100644 linden/indra/newview/res/lltoolpan.cur
delete mode 100644 linden/indra/newview/res/lltoolpipette.cur
delete mode 100644 linden/indra/newview/res/lltoolrotate.BMP
delete mode 100644 linden/indra/newview/res/lltoolrotate.cur
delete mode 100644 linden/indra/newview/res/lltoolscale.BMP
delete mode 100644 linden/indra/newview/res/lltoolscale.cur
delete mode 100644 linden/indra/newview/res/lltooltranslate.BMP
delete mode 100644 linden/indra/newview/res/lltooltranslate.cur
delete mode 100644 linden/indra/newview/res/lltoolzoomin.BMP
delete mode 100644 linden/indra/newview/res/lltoolzoomin.cur
delete mode 100644 linden/indra/newview/res/lltoolzoomout.BMP
delete mode 100644 linden/indra/newview/res/lltoolzoomout.cur
delete mode 100644 linden/indra/newview/res/loginbackground.bmp
delete mode 100644 linden/indra/newview/res/toolbuy.cur
delete mode 100644 linden/indra/newview/res/toolopen.cur
delete mode 100644 linden/indra/newview/res/toolpay.cur
delete mode 100644 linden/indra/newview/res/toolpickobject.BMP
delete mode 100644 linden/indra/newview/res/toolpickobject.cur
delete mode 100644 linden/indra/newview/res/toolpickobject2.BMP
delete mode 100644 linden/indra/newview/res/toolpickobject2.cur
delete mode 100644 linden/indra/newview/res/toolpickobject3.BMP
delete mode 100644 linden/indra/newview/res/toolpickobject3.cur
delete mode 100644 linden/indra/newview/res/toolpipette.cur
delete mode 100644 linden/indra/newview/res/toolsit.cur
delete mode 100644 linden/indra/newview/res/uninstall_icon.BMP
delete mode 100644 linden/indra/newview/res/uninstall_icon.ico
create mode 100644 linden/indra/newview/secondlife setup build uma.bat
create mode 100644 linden/indra/newview/secondlife setup build vaak.bat
create mode 100644 linden/indra/newview/secondlife setup build yami.bat
create mode 100644 linden/indra/newview/skins/xui/en-us/floater_joystick.xml
create mode 100644 linden/indra/newview/skins/xui/en-us/floater_lsl_guide.xml
create mode 100644 linden/indra/newview/skins/xui/en-us/teleport_strings.xml
create mode 100644 linden/indra/newview/skins/xui/zh/floater_account_history.xml
create mode 100644 linden/indra/newview/skins/xui/zh/floater_god_tools.xml
create mode 100644 linden/indra/newview/skins/xui/zh/floater_inventory_view_finder.xml
create mode 100644 linden/indra/newview/skins/xui/zh/floater_preferences.xml
create mode 100644 linden/indra/newview/skins/xui/zh/floater_rate.xml
create mode 100644 linden/indra/newview/skins/xui/zh/floater_sell_land.xml
create mode 100644 linden/indra/newview/skins/xui/zh/floater_settings_debug.xml
create mode 100644 linden/indra/newview/skins/xui/zh/menu_pie_attachment.xml
create mode 100644 linden/indra/newview/skins/xui/zh/menu_pie_avatar.xml
create mode 100644 linden/indra/newview/skins/xui/zh/menu_pie_land.xml
create mode 100644 linden/indra/newview/skins/xui/zh/menu_pie_object.xml
create mode 100644 linden/indra/newview/skins/xui/zh/menu_pie_self.xml
create mode 100644 linden/indra/newview/skins/xui/zh/menu_viewer.xml
create mode 100644 linden/indra/newview/skins/xui/zh/panel_account_details.xml
create mode 100644 linden/indra/newview/skins/xui/zh/panel_account_planning.xml
create mode 100644 linden/indra/newview/skins/xui/zh/panel_account_transactions.xml
create mode 100644 linden/indra/newview/skins/xui/zh/panel_avatar.xml
create mode 100644 linden/indra/newview/skins/xui/zh/panel_group.xml
create mode 100644 linden/indra/newview/skins/xui/zh/panel_group_finder.xml
create mode 100644 linden/indra/newview/skins/xui/zh/panel_group_general.xml
create mode 100644 linden/indra/newview/skins/xui/zh/panel_group_invite.xml
create mode 100644 linden/indra/newview/skins/xui/zh/panel_group_land_money.xml
create mode 100644 linden/indra/newview/skins/xui/zh/panel_group_notices.xml
create mode 100644 linden/indra/newview/skins/xui/zh/panel_group_roles.xml
create mode 100644 linden/indra/newview/skins/xui/zh/panel_group_voting.xml
create mode 100644 linden/indra/newview/skins/xui/zh/panel_land_covenant.xml
create mode 100644 linden/indra/newview/skins/xui/zh/panel_preferences_audio.xml
create mode 100644 linden/indra/newview/skins/xui/zh/panel_preferences_chat.xml
create mode 100644 linden/indra/newview/skins/xui/zh/panel_preferences_im.xml
create mode 100644 linden/indra/newview/skins/xui/zh/panel_preferences_popups.xml
create mode 100644 linden/indra/newview/skins/xui/zh/panel_region_covenant.xml
create mode 100644 linden/indra/newview/skins/xui/zh/panel_scrolling_param.xml
create mode 100644 linden/indra/newview/skins/xui/zh/role_actions.xml
create mode 100644 linden/indra/newview/skins/xui/zh/strings.xml
create mode 100644 linden/indra/newview/skins/xui/zh/strings_long.xml
create mode 100644 linden/indra/newview/skins/xui/zh/xui_version.xml
create mode 100644 linden/indra/test/llmessageconfig_tut.cpp
delete mode 100644 linden/indra/test/llsd_message_system_tut.cpp
create mode 100755 linden/indra/test/llsdmessagebuilder_tut.cpp
create mode 100755 linden/indra/test/llsdmessagereader_tut.cpp
create mode 100644 linden/indra/test/llsdtraits.h
create mode 100644 linden/indra/test/llservicebuilder_tut.cpp
(limited to 'linden/indra')
diff --git a/linden/indra/SConstruct b/linden/indra/SConstruct
index 66a0231..0174b2d 100644
--- a/linden/indra/SConstruct
+++ b/linden/indra/SConstruct
@@ -22,7 +22,7 @@ import glob
platform = sys.platform
if platform == 'linux2':
- platform = 'linux'
+ platform = 'linux'
######################
# GET VERSION #
@@ -46,562 +46,557 @@ pipe.close()
#########################
opts = Options()
-opts.Add(EnumOption('BUILD', 'Set build type', 'releasefordownload',
- allowed_values=('debug', 'release', 'releasenoopt', 'releasefordownload')))
-opts.Add(EnumOption('ARCH', 'Set architecture', 'i686',
- allowed_values=('i686', 'powerpc', 'x86_64', 'x86_64cross')))
-opts.Add(EnumOption('BTARGET', 'Set build target', 'server',
- allowed_values=('client', 'server', 'all')))
-opts.Add(EnumOption('DISTCC', 'Enabled distcc', 'yes',
- allowed_values=('yes', 'no')))
-opts.Add(EnumOption('MOZLIB', 'Enabled llmozlib/mozilla support', 'yes',
- allowed_values=('yes', 'no')))
-opts.Add(EnumOption('COLORGCC', 'Enabled colorgcc', 'yes',
- allowed_values=('yes', 'no')))
-opts.Add(EnumOption('GRID', 'Client package\'s default grid', 'default',
- allowed_values=('default', 'aditi', 'agni', 'dmz', 'durga', 'firstlook', 'ganga', 'shakti', 'siva', 'soma', 'uma', 'vaak')))
-opts.Add(EnumOption('OPENSOURCE', 'Build using only non-proprietary dependencies',
- 'yes',# OPENSOURCE: do not edit this line
- allowed_values=('yes', 'no')))
-helpenv = Environment(options = opts)
-Help(opts.GenerateHelpText(helpenv))
-
-build_param = ARGUMENTS.get('BUILD', 'releasefordownload')
-arch = ARGUMENTS.get('ARCH', 'i686')
-target_param = ARGUMENTS.get('BTARGET', 'server')
-enable_distcc = ARGUMENTS.get('DISTCC', 'yes')
-enable_mozlib = ARGUMENTS.get('MOZLIB', 'yes')
-enable_colorgcc = ARGUMENTS.get('COLORGCC', 'yes')
-grid = ARGUMENTS.get('GRID', 'default')
-# OPENSOURCE: do not edit the following line:
-opensource = ARGUMENTS.get('OPENSOURCE', 'yes')
+opts.AddOptions(
+ EnumOption('BUILD', 'Set build type', 'releasefordownload',
+ allowed_values=('debug', 'release', 'releasenoopt', 'releasefordownload')),
+ EnumOption('ARCH', 'Set architecture', 'i686',
+ allowed_values=('i686', 'powerpc', 'x86_64')),
+ EnumOption('BTARGET', 'Set build target', 'server',
+ allowed_values=('client', 'server', 'all')),
+ BoolOption('DISTCC', 'Enabled distcc', True),
+ BoolOption('MOZLIB', 'Enabled llmozlib/mozilla support', True),
+ BoolOption('COLORGCC', 'Enabled colorgcc', True),
+ EnumOption('GRID', 'Client package\'s default grid', 'default',
+ allowed_values=('default', 'aditi', 'agni', 'dmz', 'durga', 'firstlook', 'ganga', 'shakti', 'siva', 'soma', 'uma', 'vaak')),
+ BoolOption('OPENSOURCE', 'Build using only non-proprietary dependencies', True) # OPENSOURCE: do not edit this line
+)
+optenv = Environment(options = opts)
+Help(opts.GenerateHelpText(optenv))
+
+build_param = optenv['BUILD']
+arch = optenv['ARCH']
+target_param = optenv['BTARGET']
+enable_distcc = optenv['DISTCC']
+enable_mozlib = optenv['MOZLIB']
+enable_colorgcc = optenv['COLORGCC']
+grid = optenv['GRID']
+opensource = optenv['OPENSOURCE']
targets = [ target_param ]
if target_param == 'all':
- targets = [ 'client', 'server' ]
+ targets = [ 'client', 'server' ]
#####################
# ITERATE TARGETS #
#####################
for build_target in targets:
- buildtype = build_param
- if build_target == 'server' and buildtype == 'releasefordownload':
- buildtype = 'release'
-
- system_str = arch + '-' + platform
-
- print 'Building ' + build_target + ' ' + version_major + '.' + version_minor + '.' + version_patch + '.' + version_build + ' on ' + system_str + ' (' + buildtype + ')'
-
- system_lib_dir = '../libraries/' + system_str
- if build_target == 'client':
- system_lib_dir += '/lib_release_client'
- elif buildtype == 'debug':
- system_lib_dir += '/lib_debug'
- else:
- system_lib_dir += '/lib_release'
-
- lib_dir = './lib_' + buildtype + '_' + build_target + '/' + system_str
-
- try:
- build_dir_prefix = os.environ['TEMP_BUILD_DIR']
- except:
- build_dir_prefix = '/tmp/' + os.environ['USER']
-
- build_dir = build_dir_prefix + os.getcwd() + '/' + system_str + '-' + build_target + '-' + buildtype
-
- ### Base include directories ###
-
- include_dirs = Split("""
- ./llcommon ./llmath ./llwindow ./llaudio ./llcharacter
- ./lldatabase ./llhavok ./llimage ./llinventory ./llmedia ./llmessage
- ./llprimitive ./llrender ./llscene ./llui ./llvfs ./llwindow
- ./llxml ./lscript
- ../libraries/include
- ../libraries/include/havok
- """ +
- '../libraries/' + system_str + '/include' )
-
- client_external_libs = []
- system_link_flags = ''
-
- if platform != 'linux' and build_target == 'client' and enable_mozlib == 'yes':
-
- ### Mozilla include directories ###
-
- mozilla_dir = '../libraries/' + system_str + '/include/mozilla'
- include_dirs += Split(
- mozilla_dir + '/include/webbrwsr ' +
- mozilla_dir + '/include/docshell ' +
- mozilla_dir + '/include/dom ' +
- mozilla_dir + '/include/xpcom ' +
- mozilla_dir + '/include/widget ' +
- mozilla_dir + '/include/gfx ' +
- mozilla_dir + '/include/string ' +
- mozilla_dir + '/include/uriloader ' +
- mozilla_dir + '/include/view ' +
- mozilla_dir + '/include/layout ' +
- mozilla_dir + '/include/content ' +
- mozilla_dir + '/include/locale ' +
- mozilla_dir + '/include/profdirserviceprovider ' +
- mozilla_dir + '/include/xulapp ' +
- mozilla_dir + '/include/pref ' +
- mozilla_dir + '/sdk/include')
-
- ##############
- # CPP Flags #
- ##############
-
- # Generic GCC flags
- flags = '-g -pipe -Wall -Wno-trigraphs '
-
- if opensource == 'yes':
- flags += '-DLL_USE_KDU=0 '
- else:
- flags += '-DLL_USE_KDU=1 '
-
- if build_target == 'server':
- # Server flags
- flags += '-march=pentiumpro -D_GNU_SOURCE -ftemplate-depth-60 -DLL_MESA_HEADLESS=1 -DLL_MESA=1 '
- try:
- server_cppflags = os.environ['SERVER_CPPFLAGS']
- except:
- server_cppflags = ''
- flags += server_cppflags + ' '
- else:
- # Viewer flags
- flags += '-falign-loops=16 -fno-math-errno -fexceptions -fsigned-char -fno-strict-aliasing -ffast-math '
- flags += '-DLL_MESA_HEADLESS=0 -DLL_MESA=0 '
- try:
- client_cppflags = os.environ['CLIENT_CPPFLAGS']
- except:
- client_cppflags = ''
- flags += client_cppflags + ' '
-
- if platform == 'linux':
- # Linux-only flags
- flags += '-DLL_LINUX=1 '
- if build_target == 'client':
- flags += '-DAPPID=secondlife -DLL_SDL=1 '
- if arch == 'x86_64' or arch == 'x86_64cross':
- flags += '-DLL_FMOD=0 '
- flags += '-DLL_X11=1 -DLL_GTK=1 '
- client_external_libs += [ 'gtk-x11-2.0', 'elfio' ]
- include_dirs += [ '../libraries/' + system_str + '/include/gtk-2.0' ]
- include_dirs += [ '../libraries/' + system_str + '/include/glib-2.0']
- include_dirs += [ '../libraries/' + system_str + '/include/pango-1.0' ]
- include_dirs += [ '../libraries/' + system_str + '/include/atk-1.0' ]
- include_dirs += [ '../libraries/' + system_str + '/include/ELFIO' ]
- include_dirs += [ '../libraries/' + system_str + '/include/llfreetype2' ]
-
- # llmozlib stuff
- if enable_mozlib == 'yes':
- flags += '-DLL_LIBXUL_ENABLED=1 '
- client_external_libs += [ 'llmozlib' ]
- client_external_libs += [ 'mozjs', 'nspr4', 'plc4', 'plds4', 'profdirserviceprovider_s', 'xpcom', 'xul' ]
- else:
- flags += '-DLL_LIBXUL_ENABLED=0 '
- else:
- # Mac-only flags
- flags += '-x c++ -arch ppc -pipe -Wno-trigraphs -fpascal-strings -faltivec -fasm-blocks -g -fmessage-length=0 -mtune=G4 -Wno-deprecated-declarations -Wno-invalid-offsetof -mmacosx-version-min=10.3 -DLL_DARWIN=1 -Wmost -Wno-sign-compare -Wno-switch -fpch-preprocess -F./newview/build/Deployment -fconstant-cfstrings -ffor-scope -Wno-reorder -isysroot /Developer/SDKs/MacOSX10.3.9.sdk '
-
- ### Build type-specific flags ###
-
- debug_opts = flags + '-fno-inline -O0 -D_DEBUG -DLL_DEBUG=1 '
- release_opts = flags + '-O2 -DNDEBUG -DLL_RELEASE=1 '
- releasenoopt_opts = flags + '-O0 -DNDEBUG -DLL_RELEASE=1 '
- releasefordownload_opts = flags + '-O2 -DNDEBUG -DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 '
-
- ################
- # ENVIRONMENT #
- ################
-
- gcc_bin = 'g++-3.4'
- # If you strip more aggressively than -S then the quality of crash-
- # logger backtraces deteriorates.
- strip_cmd = 'strip -S -o $TARGET $SOURCE'
-
- # hidesyms_cmd is something which copies an executable while 'hiding'
- # all of its exposed symbols except a very few desired ones. This is
- # used mainly to hide the symbols of the many common libraries we
- # static-link, which otherwise cause hard-to-trace fatal crashes due
- # to clashes in the run-time symbol namespace.
- if platform == 'linux':
- exposed_symbols_file = 'newview/linux_tools/exposed-symbols.txt'
- hidesyms_cmd = 'objcopy --keep-global-symbols ' + exposed_symbols_file + ' $SOURCE $TARGET'
- else:
- hidesyms_cmd = 'cp -f $SOURCE $TARGET'
-
- if build_target != 'client':
- gcc_bin = 'g++-3.3'
-
- if arch == 'x86_64cross':
- gcc_bin = '/opt/crosstool/gcc-4.0.2-glibc-2.3.6/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-gcc'
- strip_cmd = '/opt/crosstool/gcc-4.0.2-glibc-2.3.6/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/bin/strip -S -o $TARGET $SOURCE'
-
- compiler = gcc_bin
- compiler_no_distcc = compiler
- if enable_distcc == 'yes':
- compiler = 'distcc ' + gcc_bin
-
- base_env = Environment(CXX = compiler,
- CPPPATH = include_dirs,
- LIBPATH = [lib_dir] + [system_lib_dir],
- LINKFLAGS = system_link_flags + '--no-keep-memory --reduce-memory-overheads ' )
-
- ### Environments for various build types ###
-
- env = base_env.Copy(CPPFLAGS = releasefordownload_opts)
-
- if buildtype == 'debug':
- env = base_env.Copy(CPPFLAGS = debug_opts)
-
- if buildtype == 'release':
- env = base_env.Copy(CPPFLAGS = release_opts)
-
- if buildtype == 'releasenoopt':
- env = base_env.Copy(CPPFLAGS = releasenoopt_opts)
-
- # ccache needs this to be set
- try:
- env['ENV']['CCACHE_DIR'] = os.environ['CCACHE_DIR']
- except:
- print "No CCACHE_DIR set."
-
- env_no_distcc = env.Copy(CXX = compiler_no_distcc)
-
- ### Distributed build hosts ###
-
- if enable_distcc == 'yes':
- hosts = 'localhost/2 station9.lindenlab.com,lzo station7.lindenlab.com,lzo station6.lindenlab.com,lzo station11.lindenlab.com,lzo station5.lindenlab.com,lzo station15.lindenlab.com,lzo station10.lindenlab.com,lzo station13.lindenlab.com,lzo station12.lindenlab.com,lzo'
- if arch == 'x86_64' or arch == 'x86_64cross':
- hosts = 'localhost'
- print "Distributing to hosts: " + hosts
- env['ENV']['DISTCC_HOSTS'] = hosts
- env['ENV']['USER'] = os.environ['USER']
- env['ENV']['HOME'] = os.environ['HOME']
-
- if enable_colorgcc == 'yes':
- env['ENV']['PATH'] = os.environ['PATH']
- env['ENV']['TERM'] = os.environ['TERM']
- env['ENV']['HOME'] = os.environ['HOME']
-
- ### Configure lex and yacc ###
- env.Append(YACCFLAGS = ["-v", "-d"])
- env.CFile(target=build_dir+'/lscript/lscript_compile/indra.l.cpp', source='lscript/lscript_compile/indra.l')
- env.CFile(target=build_dir+'/lscript/lscript_compile/indra.y.c', source='lscript/lscript_compile/indra.y')
- env.Command(build_dir+'/lscript/lscript_compile/indra.y.cpp',build_dir+'/lscript/lscript_compile/indra.y.c',
- [Move('$TARGET','$SOURCE'),Delete(build_dir+'/lscript/lscript_compile/indra.y.output')])
-
- #####################
- # HELPER FUNCTIONS #
- #####################
-
- ### Load a files.lst and files.PLATFORM.lst for each module ###
-
- def load_files(module, source_fname):
- new_list = []
- try:
- list_file = open('./' + module + '/' + source_fname, 'r')
- list = Split(list_file.read())
- for x in list:
- file = os.path.join(build_dir, x)
- if x == 'newsim/lltask.cpp':
- print 'Found lltask!'
- obj = env_no_distcc.Object(file)
- new_list.append(obj)
- else:
- new_list.append(file)
- list_file.close()
- except IOError, val:
- print 'Error: unable to open file list',source_fname,
- print 'for module', module + ":", val
- return []
-
- try:
- platform_list_file = open('./' + module + '/files.' + platform + '.lst', 'r')
- list = Split(platform_list_file.read())
- for x in list:
- file = os.path.join(build_dir, x)
- new_list.append(file)
- platform_list_file.close()
- except IOError:
- return new_list
-
- return new_list
-
- ### Create a static library from the module ###
-
- def create_static_module_from_dir(
- input_dir,
- mod_name,
- local_flags="",
- source_files = 'files.lst',
- extra_depends=None):
- files_list = load_files(input_dir, source_files)
- BuildDir(build_dir + '/' + input_dir, input_dir)
- local_env = env.Copy(CPPFLAGS = env['CPPFLAGS'] + ' ' + local_flags)
- if extra_depends:
- for x in files_list:
- Depends(local_env.Object(x), extra_depends)
- tgt = local_env.StaticLibrary(lib_dir + '/' + mod_name, files_list)
- Default(tgt)
-
- def create_static_module(module, local_flags="", source_files = 'files.lst', extra_depends=None):
- create_static_module_from_dir(module, module, local_flags, source_files, extra_depends)
-
- def create_dynamic_module(
- module,
- local_flags="",
- module_libs = None,
- source_files = 'files.lst'):
- files_list = load_files(module, source_files)
- BuildDir(build_dir + '/' + module, module)
- local_env = env.Copy(CPPFLAGS = env['CPPFLAGS'] + ' ' + local_flags)
- tgt = local_env.SharedLibrary(lib_dir + '/' + module, files_list, LIBS = module_libs)
- Default(tgt)
-
- ### Create an executable from the module ###
-
- def create_executable(
- exec_file, module, module_libs, source_files = 'files.lst'):
- files_list = load_files(module, source_files)
- BuildDir(build_dir + '/' + module, module)
- tgt = env.Program(exec_file, files_list, LIBS = module_libs)
- Default(tgt)
-
-
- ####################
- # BUILD LIBRARIES #
- ####################
-
- create_static_module('llcommon')
- create_static_module('llmath')
- create_static_module('llmessage')
- create_static_module('llvfs')
- create_static_module('llimage')
- create_static_module('llinventory')
- create_static_module('llcharacter')
- create_static_module('llprimitive')
- create_static_module('llrender')
- create_static_module('llwindow')
- create_static_module('llxml')
- create_static_module('lscript', extra_depends=build_dir + '/lscript/lscript_compile/indra.y.h')
-
- net_external_libs = [ 'curl', 'cares', 'ssl', 'crypto', 'aprutil-1', 'apr-1' ]
- common_external_libs = net_external_libs + [ 'xmlrpc', 'expat', 'z' ]
-
- if build_target == 'client':
- if platform == 'linux':
- #############################
- # BUILD LINUX_CRASH_LOGGER #
- #############################
- output_crashlogger_bin = 'linux_crash_logger/linux-crash-logger-' + arch + '-bin'
- external_libs = net_external_libs + [ 'db-4.2', 'gtk-x11-2.0' ]
- external_libs.remove('cares')
- internal_libs = [ 'llvfs', 'llmath', 'llcommon' ]
- create_executable(output_crashlogger_bin + '-globalsyms', 'linux_crash_logger', internal_libs + external_libs)
- env.Command(output_crashlogger_bin, output_crashlogger_bin + '-globalsyms', hidesyms_cmd)
-
- create_static_module('llaudio')
- create_static_module('llmedia')
- create_static_module('llui')
- create_static_module('llimagej2coj')
-
- if opensource == 'no':
- create_dynamic_module('llkdu', '', ['llimage', 'llvfs', 'llmath', 'llcommon', 'apr-1', 'kdu_v42R'])
-
- ##################
- # BUILD NEWVIEW #
- ##################
- output_bin = 'newview/secondlife-' + arch + '-bin'
-
- external_libs = client_external_libs + common_external_libs + [ 'freetype', 'jpeg', 'SDL', 'GL', 'GLU', 'ogg', 'vorbisenc', 'vorbisfile', 'vorbis', 'db-4.2', 'openjpeg' ]
-
- if arch != 'x86_64' and arch != 'x86_64cross':
- external_libs += [ 'fmod-3.75' ]
-
- external_libs.remove('cares')
-
- internal_libs = [ 'lscript', 'llwindow', 'llrender', 'llprimitive',
- 'llmedia', 'llinventory',
- 'llimage', 'llimagej2coj',
- 'llcharacter', 'llaudio', 'llui', 'llxml',
- 'llmessage', 'llvfs', 'llmath', 'llcommon' ]
-
- create_executable(output_bin + '-globalsyms', 'newview', internal_libs + external_libs)
- env.Command(output_bin, output_bin + '-globalsyms', hidesyms_cmd)
- Default(output_bin)
-
- if buildtype == 'releasefordownload':
-
- #######################
- # PACKAGE THE CLIENT #
- #######################
-
- if platform == 'linux':
- env.Command(output_bin + '-stripped', output_bin, strip_cmd)
- env.Command(output_crashlogger_bin + '-stripped', output_crashlogger_bin, strip_cmd)
- product_name = 'SecondLife_' + arch + '_' + version_major + "_" + version_minor + "_" + version_patch + "_" + version_build
- if grid not in ['default', 'agni']:
- product_name += "_" + grid.upper()
- package_name = product_name + '.tar.bz2'
- cmd = 'rm -rf newview/%(pn)s* && newview/viewer_manifest.py --grid=%(grid)s --installer_name=%(pn)s --arch=%(arch)s' % {
- 'pn': product_name,
- 'grid':grid,
- 'arch':arch}
- env.Command('newview/' + package_name, 'newview/viewer_manifest.py', cmd)
- Depends('newview/' + package_name, output_bin + '-stripped')
- Depends('newview/' + package_name, output_crashlogger_bin + '-stripped')
- Default('newview/' + package_name)
-
- elif build_target == 'server':
- create_static_module('lldatabase')
- create_static_module('llscene')
- create_static_module('llhavok', '-fno-exceptions -fno-rtti')
- create_static_module_from_dir('llkdu', 'llkdustatic')
-
- # This makes sure we only build the release llpython. The
- # debug one is difficult to use.
- if buildtype == 'release':
- create_dynamic_module(
- 'tools/llpython',
- '-I/usr/include/python2.3',
- ['llmessage', 'llvfs', 'llmath', 'llcommon',
- 'boost_python-gcc', 'apr-1'])
- env.Command('lib/python/indra/llpython.so', lib_dir + '/tools/libllpython.so', 'cp -u $SOURCE $TARGET')
- Default('lib/python/indra/llpython.so')
-
- ##################
- # BUILD SERVERS #
- ##################
- file_suffix = ''
- if buildtype == 'debug':
- file_suffix = '_debug'
-
- common_external_libs += [ 'pthread' ]
-
- # Chatter test application
- external_libs = common_external_libs
- internal_libs = [ 'llmessage', 'llvfs', 'llmath', 'llcommon' ]
- create_executable('test_apps/chatter/chatter', 'test_apps/chatter',
- internal_libs + external_libs)
-
- # Tool to buffer all of standard input to memory.
- create_executable('tools/simbin2xml/buffer_file/buffer_file',
- 'tools/simbin2xml/buffer_file', "")
-
- # Simstate binary to XML utility.
- external_libs = common_external_libs
- internal_libs = [ 'llxml', 'llcommon', 'llmath' ]
- create_executable('tools/simbin2xml/simbin2xml', 'tools/simbin2xml',
- internal_libs + external_libs)
-
- # Launcher
- external_libs = common_external_libs
- internal_libs = [ 'llmessage', 'llvfs', 'llmath', 'llcommon' ]
- create_executable('launcher/launcher' + file_suffix, 'launcher',
- internal_libs + external_libs)
-
- # Dataserver
- Depends('dataserver/dataserver', 'launcher/launcher' + file_suffix)
- external_libs = common_external_libs + ['boost_regex-gcc-mt', 'mysqlclient']
- internal_libs = [ 'llcharacter', 'lldatabase', 'llimage', 'llinventory',
- 'llscene', 'llmessage', 'llvfs', 'llxml', 'llcommon', 'llmath' ]
- create_executable('dataserver/dataserver' + file_suffix, 'dataserver',
- internal_libs + external_libs)
-
- # Spaceserver
- Depends('newspace/spaceserver', 'dataserver/dataserver' + file_suffix)
- external_libs = common_external_libs + ['expat', 'aprutil-1', 'mysqlclient']
- internal_libs = ['llscene', 'lldatabase', 'llmessage', 'llvfs',
- 'llmath', 'llcommon']
- create_executable('newspace/spaceserver' + file_suffix, 'newspace',
- internal_libs + external_libs)
-
- # Userserver
- Depends('userserver/userserver', 'newspace/spaceserver' + file_suffix)
- external_libs = common_external_libs
- internal_libs = ['llinventory', 'llscene', 'llmessage', 'llvfs',
- 'llxml', 'llmath', 'llcommon']
- create_executable('userserver/userserver' + file_suffix, 'userserver',
- internal_libs + external_libs)
-
- # Rpcserver
- Depends('rpcserver/rpcserver', 'userserver/userserver' + file_suffix)
- external_libs = common_external_libs + ['xmlrpc', 'expat', 'aprutil-1',
- 'mysqlclient']
- internal_libs = ['llscene', 'llmessage', 'lldatabase', 'llvfs',
- 'llmath', 'llcommon']
- create_executable('rpcserver/rpcserver' + file_suffix, 'rpcserver',
- internal_libs + external_libs)
-
- # Mapserver
- Depends('mapserver/mapserver', 'rpcserver/rpcserver' + file_suffix)
- external_libs = common_external_libs + ['apr-1', 'aprutil-1', 'OSMesa16', 'kdu',
- 'boost_regex-gcc-mt', 'iconv', 'jpeg', 'GL',
- 'mysqlclient', 'pthread', 'dl']
- internal_libs = ['llrender', 'llwindow', 'llimage', 'lldatabase', 'llprimitive', 'llmessage', 'llkdustatic',
- 'llxml', 'llvfs', 'llmath', 'llcommon']
- create_executable('mapserver/mapserver' + file_suffix, 'mapserver',
- internal_libs + external_libs)
-
- # Simulator
- Depends('newsim/simulator' + file_suffix, 'mapserver/mapserver' + file_suffix)
- external_libs = common_external_libs + ['hkdynamics', 'hkgeometry', 'hkmath', 'hkbase', 'hkcollide', 'hkactions', 'apr-1', 'aprutil-1', 'boost_regex-gcc-mt', 'dl', 'kdu', 'mysqlclient', 'iconv']
- internal_libs = [ 'lscript', 'llprimitive',
- 'llscene', 'llhavok', 'llinventory', 'llimage',
- 'llcharacter', 'llxml', 'lldatabase', 'llkdustatic',
- 'llmessage', 'llvfs', 'llmath', 'llcommon' ]
- create_executable('newsim/simulator' + file_suffix, 'newsim',
- internal_libs + external_libs)
-
- # texture upload verifier
- external_libs = common_external_libs + [ 'kdu', 'dl' ]
- internal_libs = [
- 'llimage',
- 'llkdustatic',
- 'llinventory',
- 'llmessage',
- 'llvfs',
- 'llxml',
- 'llcommon',
- 'llmath' ]
- create_executable(
- 'web/doc/asset-upload/plugins/verify-texture',
- 'web/doc/asset-upload/plugins',
- internal_libs + external_libs,
- 'verify-texture.lst')
-
- # notecard upload verifier
- create_executable(
- 'web/doc/asset-upload/plugins/verify-notecard',
- 'web/doc/asset-upload/plugins',
- internal_libs + external_libs,
- 'verify-notecard.lst')
-
- # LSL compiler plugin for asset upload CGI.
- external_libs = common_external_libs
- internal_libs = ['lscript', 'llmath', 'llcommon']
- create_executable('web/doc/asset-upload/plugins/lsl_compiler/lslc' + file_suffix, 'web/doc/asset-upload/plugins/lsl_compiler/', internal_libs + external_libs);
-
- # Test
- Depends('test/test', 'newsim/simulator' + file_suffix)
- external_libs = common_external_libs + ['mysqlclient']
- internal_libs = [ 'lldatabase', 'llinventory', 'llmessage', 'llxml',
- 'llvfs', 'llmath', 'llcommon' ]
- test_executable = 'test/test' + file_suffix
- create_executable(test_executable, 'test',
- internal_libs + external_libs)
-
- # Run tests
- test_results_file = 'test/test_results' + file_suffix + '.txt'
- env.Command(test_results_file,
- test_executable,
- "$SOURCE 2>&1 | tee $TARGET")
- Depends(test_results_file, test_executable)
- Default(test_results_file)
+ buildtype = build_param
+ if build_target == 'server' and buildtype == 'releasefordownload':
+ buildtype = 'release'
+
+ system_str = arch + '-' + platform
+
+ print 'Building ' + build_target + ' ' + version_major + '.' + version_minor + '.' + version_patch + '.' + version_build + ' on ' + system_str + ' (' + buildtype + ')'
+
+ system_lib_dir = '../libraries/' + system_str
+ if build_target == 'client':
+ system_lib_dir += '/lib_release_client'
+ elif buildtype == 'debug':
+ system_lib_dir += '/lib_debug'
+ else:
+ system_lib_dir += '/lib_release'
+
+ lib_dir = './lib_' + buildtype + '_' + build_target + '/' + system_str
+
+ try:
+ build_dir_prefix = os.environ['TEMP_BUILD_DIR']
+ except:
+ build_dir_prefix = '/tmp/' + os.environ['USER']
+
+ build_dir = build_dir_prefix + os.getcwd() + '/' + system_str + '-' + build_target + '-' + buildtype
+
+ ### Base include directories ###
+
+ include_dirs = Split("""
+ ./llcommon ./llmath ./llwindow ./llaudio ./llcharacter
+ ./lldatabase ./llhavok ./llimage ./llinventory ./llmedia ./llmessage
+ ./llprimitive ./llrender ./llscene ./llui ./llvfs ./llwindow
+ ./llxml ./lscript
+ ../libraries/include
+ ../libraries/include/havok
+ """ +
+ '../libraries/' + system_str + '/include' )
+
+ client_external_libs = []
+ system_link_flags = ''
+
+ if platform != 'linux' and build_target == 'client' and enable_mozlib:
+
+ ### Mozilla include directories ###
+
+ mozilla_dir = '../libraries/' + system_str + '/include/mozilla'
+ include_dirs += Split(
+ mozilla_dir + '/include/webbrwsr ' +
+ mozilla_dir + '/include/docshell ' +
+ mozilla_dir + '/include/dom ' +
+ mozilla_dir + '/include/xpcom ' +
+ mozilla_dir + '/include/widget ' +
+ mozilla_dir + '/include/gfx ' +
+ mozilla_dir + '/include/string ' +
+ mozilla_dir + '/include/uriloader ' +
+ mozilla_dir + '/include/view ' +
+ mozilla_dir + '/include/layout ' +
+ mozilla_dir + '/include/content ' +
+ mozilla_dir + '/include/locale ' +
+ mozilla_dir + '/include/profdirserviceprovider ' +
+ mozilla_dir + '/include/xulapp ' +
+ mozilla_dir + '/include/pref ' +
+ mozilla_dir + '/sdk/include')
+
+ ##############
+ # CPP Flags #
+ ##############
+
+ # Generic GCC flags
+ flags = '-g -pipe -Wall -Wno-trigraphs '
+
+ if opensource:
+ flags += '-DLL_USE_KDU=0 '
+ else:
+ flags += '-DLL_USE_KDU=1 '
+
+ if build_target == 'server':
+ # Server flags
+ flags += '-march=pentiumpro -D_GNU_SOURCE -ftemplate-depth-60 -DLL_MESA_HEADLESS=1 -DLL_MESA=1 '
+ try:
+ server_cppflags = os.environ['SERVER_CPPFLAGS']
+ except:
+ server_cppflags = ''
+ flags += server_cppflags + ' '
+ else:
+ # Viewer flags
+ flags += '-falign-loops=16 -fno-math-errno -fexceptions -fsigned-char -fno-strict-aliasing -ffast-math '
+ flags += '-DLL_MESA_HEADLESS=0 -DLL_MESA=0 '
+ try:
+ client_cppflags = os.environ['CLIENT_CPPFLAGS']
+ except:
+ client_cppflags = ''
+ flags += client_cppflags + ' '
+
+ if platform == 'linux':
+ # Linux-only flags
+ flags += '-DLL_LINUX=1 '
+ if build_target == 'client':
+ flags += '-DAPPID=secondlife -DLL_SDL=1 '
+ if arch == 'x86_64' or arch == 'x86_64cross':
+ flags += '-DLL_FMOD=0 '
+ flags += '-DLL_X11=1 -DLL_GTK=1 '
+ client_external_libs += [ 'gtk-x11-2.0', 'elfio' ]
+ include_dirs += [ '../libraries/' + system_str + '/include/gtk-2.0' ]
+ include_dirs += [ '../libraries/' + system_str + '/include/glib-2.0']
+ include_dirs += [ '../libraries/' + system_str + '/include/pango-1.0' ]
+ include_dirs += [ '../libraries/' + system_str + '/include/atk-1.0' ]
+ include_dirs += [ '../libraries/' + system_str + '/include/ELFIO' ]
+ include_dirs += [ '../libraries/' + system_str + '/include/llfreetype2' ]
+
+ # llmozlib stuff
+ if enable_mozlib:
+ flags += '-DLL_LIBXUL_ENABLED=1 '
+ client_external_libs += [ 'llmozlib' ]
+ client_external_libs += [ 'mozjs', 'nspr4', 'plc4', 'plds4', 'profdirserviceprovider_s', 'xpcom', 'xul' ]
+ else:
+ flags += '-DLL_LIBXUL_ENABLED=0 '
+ else:
+ # Mac-only flags
+ flags += '-x c++ -arch ppc -pipe -Wno-trigraphs -fpascal-strings -faltivec -fasm-blocks -g -fmessage-length=0 -mtune=G4 -Wno-deprecated-declarations -Wno-invalid-offsetof -mmacosx-version-min=10.3 -DLL_DARWIN=1 -Wmost -Wno-sign-compare -Wno-switch -fpch-preprocess -F./newview/build/Deployment -fconstant-cfstrings -ffor-scope -Wno-reorder -isysroot /Developer/SDKs/MacOSX10.3.9.sdk '
+
+ ### Build type-specific flags ###
+
+ debug_opts = flags + '-fno-inline -O0 -D_DEBUG -DLL_DEBUG=1 '
+ release_opts = flags + '-O2 -DNDEBUG -DLL_RELEASE=1 '
+ releasenoopt_opts = flags + '-O0 -DNDEBUG -DLL_RELEASE=1 '
+ releasefordownload_opts = flags + '-O2 -DNDEBUG -DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 '
+
+ ################
+ # ENVIRONMENT #
+ ################
+
+ gcc_bin = 'g++-3.4'
+ # If you strip more aggressively than -S then the quality of crash-
+ # logger backtraces deteriorates.
+ strip_cmd = 'strip -S -o $TARGET $SOURCE'
+
+ # hidesyms_cmd is something which copies an executable while 'hiding'
+ # all of its exposed symbols except a very few desired ones. This is
+ # used mainly to hide the symbols of the many common libraries we
+ # static-link, which otherwise cause hard-to-trace fatal crashes due
+ # to clashes in the run-time symbol namespace.
+ if platform == 'linux':
+ exposed_symbols_file = 'newview/linux_tools/exposed-symbols.txt'
+ hidesyms_cmd = 'objcopy --keep-global-symbols ' + exposed_symbols_file + ' $SOURCE $TARGET'
+ else:
+ hidesyms_cmd = 'cp -f $SOURCE $TARGET'
+
+ if build_target != 'client':
+ gcc_bin = 'g++-3.3'
+
+ if arch == 'x86_64cross':
+ gcc_bin = '/opt/crosstool/gcc-4.0.2-glibc-2.3.6/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-gcc'
+ strip_cmd = '/opt/crosstool/gcc-4.0.2-glibc-2.3.6/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/bin/strip -S -o $TARGET $SOURCE'
+
+ compiler = gcc_bin
+ compiler_no_distcc = compiler
+ if enable_distcc:
+ compiler = 'distcc ' + gcc_bin
+
+ base_env = Environment(CXX = compiler,
+ CPPPATH = include_dirs,
+ LIBPATH = [lib_dir] + [system_lib_dir],
+ LINKFLAGS = system_link_flags + '--no-keep-memory --reduce-memory-overheads ' )
+
+ ### Environments for various build types ###
+
+ env = base_env.Copy(CPPFLAGS = releasefordownload_opts)
+
+ if buildtype == 'debug':
+ env = base_env.Copy(CPPFLAGS = debug_opts)
+
+ if buildtype == 'release':
+ env = base_env.Copy(CPPFLAGS = release_opts)
+
+ if buildtype == 'releasenoopt':
+ env = base_env.Copy(CPPFLAGS = releasenoopt_opts)
+
+ # ccache needs this to be set
+ try:
+ env['ENV']['CCACHE_DIR'] = os.environ['CCACHE_DIR']
+ except:
+ print "No CCACHE_DIR set."
+
+ env_no_distcc = env.Copy(CXX = compiler_no_distcc)
+
+ ### Distributed build hosts ###
+
+ if enable_distcc:
+ hosts = 'localhost/2 station9.lindenlab.com,lzo station7.lindenlab.com,lzo station6.lindenlab.com,lzo station11.lindenlab.com,lzo station5.lindenlab.com,lzo station15.lindenlab.com,lzo station10.lindenlab.com,lzo station13.lindenlab.com,lzo station12.lindenlab.com,lzo'
+ if arch == 'x86_64' or arch == 'x86_64cross':
+ hosts = 'localhost'
+ print "Distributing to hosts: " + hosts
+ env['ENV']['DISTCC_HOSTS'] = hosts
+ env['ENV']['USER'] = os.environ['USER']
+ env['ENV']['HOME'] = os.environ['HOME']
+
+ if enable_colorgcc:
+ env['ENV']['PATH'] = os.environ['PATH']
+ env['ENV']['TERM'] = os.environ['TERM']
+ env['ENV']['HOME'] = os.environ['HOME']
+
+ ### Configure lex and yacc ###
+ env.Append(YACCFLAGS = ["-v", "-d"])
+ env.CFile(target=build_dir+'/lscript/lscript_compile/indra.l.cpp', source='lscript/lscript_compile/indra.l')
+ env.CFile(target=build_dir+'/lscript/lscript_compile/indra.y.c', source='lscript/lscript_compile/indra.y')
+ env.Command(build_dir+'/lscript/lscript_compile/indra.y.cpp',build_dir+'/lscript/lscript_compile/indra.y.c',
+ [Move('$TARGET','$SOURCE'),Delete(build_dir+'/lscript/lscript_compile/indra.y.output')])
+
+ #####################
+ # HELPER FUNCTIONS #
+ #####################
+
+ ### Load a files.lst and files.PLATFORM.lst for each module ###
+
+ def load_files(module, source_fname):
+ new_list = []
+ try:
+ list_file = open('./' + module + '/' + source_fname, 'r')
+ list = Split(list_file.read())
+ for x in list:
+ file = os.path.join(build_dir, x)
+ if x == 'newsim/lltask.cpp':
+ print 'Found lltask!'
+ obj = env_no_distcc.Object(file)
+ new_list.append(obj)
+ else:
+ new_list.append(file)
+ list_file.close()
+ except IOError, val:
+ print 'Error: unable to open file list',source_fname,
+ print 'for module', module + ":", val
+ return []
+
+ try:
+ platform_list_file = open('./' + module + '/files.' + platform + '.lst', 'r')
+ list = Split(platform_list_file.read())
+ for x in list:
+ file = os.path.join(build_dir, x)
+ new_list.append(file)
+ platform_list_file.close()
+ except IOError:
+ return new_list
+
+ return new_list
+
+ ### Create a static library from the module ###
+
+ def create_static_module_from_dir(
+ input_dir,
+ mod_name,
+ local_flags="",
+ source_files = 'files.lst',
+ extra_depends=None):
+ files_list = load_files(input_dir, source_files)
+ BuildDir(build_dir + '/' + input_dir, input_dir)
+ local_env = env.Copy(CPPFLAGS = env['CPPFLAGS'] + ' ' + local_flags)
+ if extra_depends:
+ for x in files_list:
+ Depends(local_env.Object(x), extra_depends)
+ tgt = local_env.StaticLibrary(lib_dir + '/' + mod_name, files_list)
+ Default(tgt)
+
+ def create_static_module(module, local_flags="", source_files = 'files.lst', extra_depends=None):
+ create_static_module_from_dir(module, module, local_flags, source_files, extra_depends)
+
+ def create_dynamic_module(
+ module,
+ local_flags="",
+ module_libs = None,
+ source_files = 'files.lst'):
+ files_list = load_files(module, source_files)
+ BuildDir(build_dir + '/' + module, module)
+ local_env = env.Copy(CPPFLAGS = env['CPPFLAGS'] + ' ' + local_flags)
+ tgt = local_env.SharedLibrary(lib_dir + '/' + module, files_list, LIBS = module_libs)
+ Default(tgt)
+
+ ### Create an executable from the module ###
+
+ def create_executable(
+ exec_file, module, module_libs, source_files = 'files.lst'):
+ files_list = load_files(module, source_files)
+ BuildDir(build_dir + '/' + module, module)
+ tgt = env.Program(exec_file, files_list, LIBS = module_libs)
+ Default(tgt)
+
+
+ ####################
+ # BUILD LIBRARIES #
+ ####################
+
+ create_static_module('llcommon')
+ create_static_module('llmath')
+ create_static_module('llmessage')
+ create_static_module('llvfs')
+ create_static_module('llimage')
+ create_static_module('llinventory')
+ create_static_module('llcharacter')
+ create_static_module('llprimitive')
+ create_static_module('llrender')
+ create_static_module('llwindow')
+ create_static_module('llxml')
+ create_static_module('lscript', extra_depends=build_dir + '/lscript/lscript_compile/indra.y.h')
+
+ net_external_libs = [ 'curl', 'cares', 'ssl', 'crypto', 'expat', 'aprutil-1', 'apr-1' ]
+ common_external_libs = net_external_libs + [ 'xmlrpc', 'z' ]
+
+ if build_target == 'client':
+ if platform == 'linux':
+ #############################
+ # BUILD LINUX_CRASH_LOGGER #
+ #############################
+ output_crashlogger_bin = 'linux_crash_logger/linux-crash-logger-' + arch + '-bin'
+ external_libs = net_external_libs + [ 'db-4.2', 'gtk-x11-2.0' ]
+ external_libs.remove('cares')
+ internal_libs = [ 'llvfs', 'llmath', 'llcommon' ]
+ create_executable(output_crashlogger_bin + '-globalsyms', 'linux_crash_logger', internal_libs + external_libs)
+ env.Command(output_crashlogger_bin, output_crashlogger_bin + '-globalsyms', hidesyms_cmd)
+
+ create_static_module('llaudio')
+ create_static_module('llmedia')
+ create_static_module('llui')
+ create_static_module('llimagej2coj')
+
+ if not opensource:
+ create_dynamic_module('llkdu', '', ['llimage', 'llvfs', 'llmath', 'llcommon', 'apr-1', 'kdu_v42R'])
+
+ ##################
+ # BUILD NEWVIEW #
+ ##################
+ output_bin = 'newview/secondlife-' + arch + '-bin'
+
+ external_libs = client_external_libs + common_external_libs + [ 'freetype', 'jpeg', 'SDL', 'GL', 'GLU', 'ogg', 'vorbisenc', 'vorbisfile', 'vorbis', 'db-4.2', 'openjpeg' ]
+
+ if arch != 'x86_64' and arch != 'x86_64cross':
+ external_libs += [ 'fmod-3.75' ]
+
+ external_libs.remove('cares')
+
+ internal_libs = [ 'lscript', 'llwindow', 'llrender', 'llprimitive',
+ 'llmedia', 'llinventory',
+ 'llimage', 'llimagej2coj',
+ 'llcharacter', 'llaudio', 'llui', 'llxml',
+ 'llmessage', 'llvfs', 'llmath', 'llcommon' ]
+
+ create_executable(output_bin + '-globalsyms', 'newview', internal_libs + external_libs)
+ env.Command(output_bin, output_bin + '-globalsyms', hidesyms_cmd)
+ Default(output_bin)
+
+ if buildtype == 'releasefordownload':
+
+ #######################
+ # PACKAGE THE CLIENT #
+ #######################
+
+ if platform == 'linux':
+ env.Command(output_bin + '-stripped', output_bin, strip_cmd)
+ env.Command(output_crashlogger_bin + '-stripped', output_crashlogger_bin, strip_cmd)
+ product_name = 'SecondLife_' + arch + '_' + version_major + "_" + version_minor + "_" + version_patch + "_" + version_build
+ if grid not in ['default', 'agni']:
+ product_name += "_" + grid.upper()
+ package_name = product_name + '.tar.bz2'
+ cmd = 'rm -rf newview/%(pn)s* && newview/viewer_manifest.py --grid=%(grid)s --installer_name=%(pn)s --arch=%(arch)s' % {
+ 'pn': product_name,
+ 'grid':grid,
+ 'arch':arch}
+ env.Command('newview/' + package_name, 'newview/viewer_manifest.py', cmd)
+ Depends('newview/' + package_name, output_bin + '-stripped')
+ Depends('newview/' + package_name, output_crashlogger_bin + '-stripped')
+ Default('newview/' + package_name)
+
+ elif build_target == 'server':
+ create_static_module('lldatabase')
+ create_static_module('llscene')
+ create_static_module('llhavok', '-fno-exceptions -fno-rtti')
+ create_static_module_from_dir('llkdu', 'llkdustatic')
+
+
+ ##################
+ # BUILD SERVERS #
+ ##################
+ file_suffix = ''
+ if buildtype == 'debug':
+ file_suffix = '_debug'
+
+ common_external_libs += [ 'pthread' ]
+
+ # Chatter test application
+ external_libs = common_external_libs
+ internal_libs = [ 'llmessage', 'llvfs', 'llmath', 'llcommon' ]
+ create_executable('test_apps/chatter/chatter', 'test_apps/chatter',
+ internal_libs + external_libs)
+
+ # Tool to buffer all of standard input to memory.
+ create_executable('tools/simbin2xml/buffer_file/buffer_file',
+ 'tools/simbin2xml/buffer_file', "")
+
+ # Simstate binary to XML utility.
+ external_libs = common_external_libs
+ internal_libs = [ 'llxml', 'llcommon', 'llmath' ]
+ create_executable('tools/simbin2xml/simbin2xml', 'tools/simbin2xml',
+ internal_libs + external_libs)
+
+ # Launcher
+ external_libs = common_external_libs
+ internal_libs = [ 'llmessage', 'llvfs', 'llmath', 'llcommon' ]
+ create_executable('launcher/launcher' + file_suffix, 'launcher',
+ internal_libs + external_libs)
+
+ # Dataserver
+ Depends('dataserver/dataserver', 'launcher/launcher' + file_suffix)
+ external_libs = common_external_libs + ['boost_regex-gcc-mt', 'mysqlclient']
+ internal_libs = [ 'llcharacter', 'lldatabase', 'llimage', 'llinventory',
+ 'llscene', 'llmessage', 'llvfs', 'llxml', 'llcommon', 'llmath' ]
+ create_executable('dataserver/dataserver' + file_suffix, 'dataserver',
+ internal_libs + external_libs)
+
+ # Spaceserver
+ Depends('newspace/spaceserver', 'dataserver/dataserver' + file_suffix)
+ external_libs = common_external_libs + ['mysqlclient']
+ internal_libs = ['llscene', 'lldatabase', 'llmessage', 'llvfs',
+ 'llmath', 'llcommon']
+ create_executable('newspace/spaceserver' + file_suffix, 'newspace',
+ internal_libs + external_libs)
+
+ # Userserver
+ Depends('userserver/userserver', 'newspace/spaceserver' + file_suffix)
+ external_libs = common_external_libs
+ internal_libs = ['llinventory', 'llscene', 'llmessage', 'llvfs',
+ 'llxml', 'llmath', 'llcommon']
+ create_executable('userserver/userserver' + file_suffix, 'userserver',
+ internal_libs + external_libs)
+
+ # Rpcserver
+ Depends('rpcserver/rpcserver', 'userserver/userserver' + file_suffix)
+ external_libs = common_external_libs + ['xmlrpc',
+ 'mysqlclient']
+ internal_libs = ['llscene', 'llmessage', 'lldatabase', 'llvfs',
+ 'llmath', 'llcommon']
+ create_executable('rpcserver/rpcserver' + file_suffix, 'rpcserver',
+ internal_libs + external_libs)
+
+ # Mapserver
+ Depends('mapserver/mapserver', 'rpcserver/rpcserver' + file_suffix)
+ external_libs = common_external_libs + ['OSMesa16', 'kdu',
+ 'boost_regex-gcc-mt', 'iconv', 'jpeg', 'GL',
+ 'mysqlclient', 'pthread', 'dl']
+ internal_libs = ['llrender', 'llwindow', 'llimage', 'lldatabase', 'llprimitive', 'llmessage', 'llkdustatic',
+ 'llxml', 'llvfs', 'llmath', 'llcommon']
+ create_executable('mapserver/mapserver' + file_suffix, 'mapserver',
+ internal_libs + external_libs)
+
+ # Simulator
+ Depends('newsim/simulator' + file_suffix, 'mapserver/mapserver' + file_suffix)
+ external_libs = common_external_libs + ['hkdynamics', 'hkgeometry', 'hkmath', 'hkbase', 'hkcollide', 'hkactions', 'boost_regex-gcc-mt', 'dl', 'kdu', 'mysqlclient', 'iconv']
+ internal_libs = [ 'lscript', 'llprimitive',
+ 'llscene', 'llhavok', 'llinventory', 'llimage',
+ 'llcharacter', 'llxml', 'lldatabase', 'llkdustatic',
+ 'llmessage', 'llvfs', 'llmath', 'llcommon' ]
+ create_executable('newsim/simulator' + file_suffix, 'newsim',
+ internal_libs + external_libs)
+
+ # texture upload verifier
+ external_libs = common_external_libs + [ 'kdu', 'dl' ]
+ internal_libs = [
+ 'llimage',
+ 'llkdustatic',
+ 'llinventory',
+ 'llmessage',
+ 'llvfs',
+ 'llxml',
+ 'llcommon',
+ 'llmath' ]
+ create_executable(
+ 'web/doc/asset-upload/plugins/verify-texture',
+ 'web/doc/asset-upload/plugins',
+ internal_libs + external_libs,
+ 'verify-texture.lst')
+
+ # notecard upload verifier
+ create_executable(
+ 'web/doc/asset-upload/plugins/verify-notecard',
+ 'web/doc/asset-upload/plugins',
+ internal_libs + external_libs,
+ 'verify-notecard.lst')
+
+ # LSL compiler plugin for asset upload CGI.
+ external_libs = common_external_libs
+ internal_libs = ['lscript', 'llmath', 'llcommon']
+ create_executable('web/doc/asset-upload/plugins/lsl_compiler/lslc' + file_suffix, 'web/doc/asset-upload/plugins/lsl_compiler/', internal_libs + external_libs);
+
+ # Test
+ Depends('test/test', 'newsim/simulator' + file_suffix)
+ external_libs = common_external_libs + ['mysqlclient']
+ internal_libs = [ 'lldatabase', 'llinventory', 'llmessage', 'llxml',
+ 'llvfs', 'llmath', 'llcommon' ]
+ test_executable = 'test/test' + file_suffix
+ create_executable(test_executable, 'test',
+ internal_libs + external_libs)
+
+ # Run tests
+ test_results_file = 'test/test_results' + file_suffix + '.txt'
+ env.Command(test_results_file,
+ test_executable,
+ "$SOURCE 2>&1 | tee $TARGET")
+ Depends(test_results_file, test_executable)
+ Default(test_results_file)
+
+ test_script = 'test/test.py'
+ script_test_results = 'test/script_test_result' + file_suffix + '.txt'
+ env.Command(script_test_results,
+ test_script,
+ "$SOURCE 2>&1 | tee $TARGET")
+
+ Depends(script_test_results, test_results_file)
+ Default(script_test_results)
#########
# DONE #
diff --git a/linden/indra/indra_complete/indra_complete.sln b/linden/indra/indra_complete/indra_complete.sln
index c78dba2..5c5c0ca 100644
--- a/linden/indra/indra_complete/indra_complete.sln
+++ b/linden/indra/indra_complete/indra_complete.sln
@@ -97,6 +97,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lscript_compile", "..\lscri
EndProjectSection
EndProject
ProjectSection(ProjectDependencies) = postProject
+ {AF2D801E-EEE7-4B52-A025-F8E648ADC34B} = {AF2D801E-EEE7-4B52-A025-F8E648ADC34B}
{7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}
{FCC4483C-5B84-4944-B91F-4589A219BC0B} = {FCC4483C-5B84-4944-B91F-4589A219BC0B}
{F882263E-4F2A-43D9-A45A-FA4C8EC66552} = {F882263E-4F2A-43D9-A45A-FA4C8EC66552}
@@ -139,11 +140,15 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lscript_compile_fb", "..\ls
EndProjectSection
EndProject
ProjectSection(ProjectDependencies) = postProject
+ {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}
{44CE6D82-7320-4609-8FC3-5965C19F4808} = {44CE6D82-7320-4609-8FC3-5965C19F4808}
+ {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}
EndProjectSection
EndProject
ProjectSection(ProjectDependencies) = postProject
+ {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}
{F882263E-4F2A-43D9-A45A-FA4C8EC66552} = {F882263E-4F2A-43D9-A45A-FA4C8EC66552}
+ {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}
EndProjectSection
EndProject
ProjectSection(ProjectDependencies) = postProject
@@ -151,6 +156,7 @@ EndProject
{7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}
{E5D94794-5671-4BD6-A16D-26EC18F3DB34} = {E5D94794-5671-4BD6-A16D-26EC18F3DB34}
{E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}
+ {D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "win_crash_logger", "..\win_crash_logger\win_crash_logger.vcproj", "{648685F3-8760-4CC5-BB2B-CAF9DECC25A4}"
@@ -158,6 +164,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "win_crash_logger", "..\win_
{B5B53617-416F-404A-BF10-22EBCCA0E4FB} = {B5B53617-416F-404A-BF10-22EBCCA0E4FB}
{7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}
{E5D94794-5671-4BD6-A16D-26EC18F3DB34} = {E5D94794-5671-4BD6-A16D-26EC18F3DB34}
+ {A5470DA6-0C3A-4602-B930-43DB25511A59} = {A5470DA6-0C3A-4602-B930-43DB25511A59}
{E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}
{D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1}
EndProjectSection
@@ -179,6 +186,7 @@ EndProject
{DE55D666-6A3D-476C-937F-109269B83681} = {DE55D666-6A3D-476C-937F-109269B83681}
{681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5} = {681FDD6C-2FAE-4CB9-AF6D-B952F2B151C5}
{E5D94794-5671-4BD6-A16D-26EC18F3DB34} = {E5D94794-5671-4BD6-A16D-26EC18F3DB34}
+ {A5470DA6-0C3A-4602-B930-43DB25511A59} = {A5470DA6-0C3A-4602-B930-43DB25511A59}
{E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}
{D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1}
EndProjectSection
@@ -224,6 +232,11 @@ EndProject
EndProjectSection
EndProject
ProjectSection(ProjectDependencies) = postProject
+ {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}
+ {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4} = {4B19F64E-AB97-4FB9-8E1D-74A8104DE0C4}
+ {E5D94794-5671-4BD6-A16D-26EC18F3DB34} = {E5D94794-5671-4BD6-A16D-26EC18F3DB34}
+ {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}
+ {D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1}
EndProjectSection
EndProject
ProjectSection(ProjectDependencies) = postProject
diff --git a/linden/indra/lib/python/indra/llmanifest.py b/linden/indra/lib/python/indra/llmanifest.py
index 6697299..c49e39a 100644
--- a/linden/indra/lib/python/indra/llmanifest.py
+++ b/linden/indra/lib/python/indra/llmanifest.py
@@ -5,6 +5,7 @@
#
# Copyright (c) 2006-2007, Linden Research, Inc.
#
+# Second Life Viewer Source Code
# The source code in this file ("Source Code") is provided by Linden Lab
# to you under the terms of the GNU General Public License, version 2.0
# ("GPL"), unless you have obtained a separate licensing agreement
@@ -150,15 +151,15 @@ def main(argv=None, srctree='.', dsttree='./dst'):
if(argv == None):
argv = sys.argv
- print "Source tree:", srctree
- print "Destination tree:", dsttree
-
option_names = [arg['name'] + '=' for arg in ARGUMENTS]
option_names.append('help')
options, remainder = getopt.getopt(argv[1:], "", option_names)
if len(remainder) >= 1:
dsttree = remainder[0]
+ print "Source tree:", srctree
+ print "Destination tree:", dsttree
+
# convert options to a hash
args = {}
for opt in options:
@@ -323,7 +324,7 @@ class LLManifest(object):
def put_in_file(self, contents, dst):
# write contents as dst
- f = open(self.dst_path_of(dst), "wbU")
+ f = open(self.dst_path_of(dst), "wb")
f.write(contents)
f.close()
@@ -480,6 +481,11 @@ class LLManifest(object):
for f in list:
if(os.path.exists(f)):
return f
+ # didn't find it, return last item in list
+ if len(list) > 0:
+ return list[-1]
+ else:
+ return None
def contents_of_tar(self, src_tar, dst_dir):
""" Extracts the contents of the tarfile (specified
@@ -509,7 +515,8 @@ class LLManifest(object):
def check_file_exists(self, path):
if(not os.path.exists(path) and not os.path.islink(path)):
- raise RuntimeError, "Path " + path + " doesn't exist"
+ raise RuntimeError("Path %s doesn't exist" % (
+ os.path.normpath(os.path.join(os.getcwd(), path)),))
wildcard_pattern = re.compile('\*')
@@ -530,6 +537,8 @@ class LLManifest(object):
def path(self, src, dst=None):
print "Processing", src, "=>", dst
+ if src == None:
+ raise RuntimeError("No source file, dst is " + dst)
if dst == None:
dst = src
dst = os.path.join(self.get_dst_prefix(), dst)
diff --git a/linden/indra/linux_crash_logger/linux_crash_logger.cpp b/linden/indra/linux_crash_logger/linux_crash_logger.cpp
index 196ff6e..b950753 100644
--- a/linden/indra/linux_crash_logger/linux_crash_logger.cpp
+++ b/linden/indra/linux_crash_logger/linux_crash_logger.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llaudio/audioengine.cpp b/linden/indra/llaudio/audioengine.cpp
index 46e621a..edfa123 100644
--- a/linden/indra/llaudio/audioengine.cpp
+++ b/linden/indra/llaudio/audioengine.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -1656,7 +1657,7 @@ BOOL LLAudioData::load()
char uuid_str[UUID_STR_LENGTH]; /*Flawfinder: ignore*/
char wav_path[MAX_PATH]; /*Flawfinder: ignore*/
mID.toString(uuid_str);
- snprintf(wav_path, MAX_PATH, "%s.dsf",gDirUtilp->getExpandedFilename(LL_PATH_CACHE,uuid_str).c_str()); /*Flawfinder: ignore*/
+ snprintf(wav_path, MAX_PATH, "%s.dsf",gDirUtilp->getExpandedFilename(LL_PATH_CACHE,uuid_str).c_str()); /* Flawfinder: ignore */
if (!mBufferp->loadWAV(wav_path))
{
diff --git a/linden/indra/llaudio/audioengine.h b/linden/indra/llaudio/audioengine.h
index 83f822b..5a0186c 100644
--- a/linden/indra/llaudio/audioengine.h
+++ b/linden/indra/llaudio/audioengine.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llaudio/audioengine_fmod.cpp b/linden/indra/llaudio/audioengine_fmod.cpp
index 2e8f45f..485b95b 100644
--- a/linden/indra/llaudio/audioengine_fmod.cpp
+++ b/linden/indra/llaudio/audioengine_fmod.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llaudio/audioengine_fmod.h b/linden/indra/llaudio/audioengine_fmod.h
index 9274b1b..6a40a12 100644
--- a/linden/indra/llaudio/audioengine_fmod.h
+++ b/linden/indra/llaudio/audioengine_fmod.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llaudio/listener.cpp b/linden/indra/llaudio/listener.cpp
index cff8e79..3860949 100644
--- a/linden/indra/llaudio/listener.cpp
+++ b/linden/indra/llaudio/listener.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llaudio/listener.h b/linden/indra/llaudio/listener.h
index bdc3ba2..5cf0ac6 100644
--- a/linden/indra/llaudio/listener.h
+++ b/linden/indra/llaudio/listener.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llaudio/listener_ds3d.h b/linden/indra/llaudio/listener_ds3d.h
index e62040c..4859513 100644
--- a/linden/indra/llaudio/listener_ds3d.h
+++ b/linden/indra/llaudio/listener_ds3d.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llaudio/listener_fmod.cpp b/linden/indra/llaudio/listener_fmod.cpp
index d4f57c0..36f9fcf 100644
--- a/linden/indra/llaudio/listener_fmod.cpp
+++ b/linden/indra/llaudio/listener_fmod.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llaudio/listener_fmod.h b/linden/indra/llaudio/listener_fmod.h
index 521cc16..e532371 100644
--- a/linden/indra/llaudio/listener_fmod.h
+++ b/linden/indra/llaudio/listener_fmod.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llaudio/listener_openal.h b/linden/indra/llaudio/listener_openal.h
index e87c504..480c3fa 100644
--- a/linden/indra/llaudio/listener_openal.h
+++ b/linden/indra/llaudio/listener_openal.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llaudio/llaudiodecodemgr.cpp b/linden/indra/llaudio/llaudiodecodemgr.cpp
index 832c314..0dbc64f 100644
--- a/linden/indra/llaudio/llaudiodecodemgr.cpp
+++ b/linden/indra/llaudio/llaudiodecodemgr.cpp
@@ -3,6 +3,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -589,7 +590,7 @@ void LLAudioDecodeMgr::Impl::processQueue(const F32 num_secs)
timer.reset();
uuid.toString(uuid_str);
- snprintf(d_path, LL_MAX_PATH, "%s.dsf", gDirUtilp->getExpandedFilename(LL_PATH_CACHE,uuid_str).c_str()); /*Flawfinder: ignore*/
+ snprintf(d_path, LL_MAX_PATH, "%s.dsf", gDirUtilp->getExpandedFilename(LL_PATH_CACHE,uuid_str).c_str()); /* Flawfinder: ignore */
mCurrentDecodep = new LLVorbisDecodeState(uuid, d_path);
if (!mCurrentDecodep->initDecode())
diff --git a/linden/indra/llaudio/llaudiodecodemgr.h b/linden/indra/llaudio/llaudiodecodemgr.h
index aab7144..e01bb29 100644
--- a/linden/indra/llaudio/llaudiodecodemgr.h
+++ b/linden/indra/llaudio/llaudiodecodemgr.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llaudio/vorbisdecode.cpp b/linden/indra/llaudio/vorbisdecode.cpp
index 4308b71..bb7a73d 100644
--- a/linden/indra/llaudio/vorbisdecode.cpp
+++ b/linden/indra/llaudio/vorbisdecode.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llaudio/vorbisdecode.h b/linden/indra/llaudio/vorbisdecode.h
index e5f1b26..16ee4ae 100644
--- a/linden/indra/llaudio/vorbisdecode.h
+++ b/linden/indra/llaudio/vorbisdecode.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llaudio/vorbisencode.cpp b/linden/indra/llaudio/vorbisencode.cpp
index c8716cc..6a0ebac 100644
--- a/linden/indra/llaudio/vorbisencode.cpp
+++ b/linden/indra/llaudio/vorbisencode.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llaudio/vorbisencode.h b/linden/indra/llaudio/vorbisencode.h
index 3813c50..e7f76c3 100644
--- a/linden/indra/llaudio/vorbisencode.h
+++ b/linden/indra/llaudio/vorbisencode.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/llanimationstates.cpp b/linden/indra/llcharacter/llanimationstates.cpp
index 8687dfb..95aa5d6 100644
--- a/linden/indra/llcharacter/llanimationstates.cpp
+++ b/linden/indra/llcharacter/llanimationstates.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/llanimationstates.h b/linden/indra/llcharacter/llanimationstates.h
index 75e2f67..6a9f7a4 100644
--- a/linden/indra/llcharacter/llanimationstates.h
+++ b/linden/indra/llcharacter/llanimationstates.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/llbvhloader.cpp b/linden/indra/llcharacter/llbvhloader.cpp
index 48b5e7c..9f7e901 100644
--- a/linden/indra/llcharacter/llbvhloader.cpp
+++ b/linden/indra/llcharacter/llbvhloader.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -175,7 +176,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName)
//--------------------------------------------------------------------
char path[LL_MAX_PATH]; /* Flawfinder: ignore */
- snprintf( path, sizeof(path), "%s",/* Flawfinder: ignore */
+ snprintf( path, sizeof(path), "%s", /* Flawfinder: ignore */
gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,fileName).c_str());
diff --git a/linden/indra/llcharacter/llbvhloader.h b/linden/indra/llcharacter/llbvhloader.h
index 0ae31ef..0a4f9a9 100644
--- a/linden/indra/llcharacter/llbvhloader.h
+++ b/linden/indra/llcharacter/llbvhloader.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/llcharacter.cpp b/linden/indra/llcharacter/llcharacter.cpp
index 6e9327f..90a3cc6 100644
--- a/linden/indra/llcharacter/llcharacter.cpp
+++ b/linden/indra/llcharacter/llcharacter.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/llcharacter.h b/linden/indra/llcharacter/llcharacter.h
index 6f4fe17..90824aa 100644
--- a/linden/indra/llcharacter/llcharacter.h
+++ b/linden/indra/llcharacter/llcharacter.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -127,7 +128,7 @@ public:
// updates all visual parameters for this character
virtual void updateVisualParams();
- virtual void addDebugText( const char* text ) = 0;
+ virtual void addDebugText( const std::string& text ) = 0;
virtual const LLUUID& getID() = 0;
//-------------------------------------------------------------------------
diff --git a/linden/indra/llcharacter/lleditingmotion.cpp b/linden/indra/llcharacter/lleditingmotion.cpp
index 66608f8..08d7940 100644
--- a/linden/indra/llcharacter/lleditingmotion.cpp
+++ b/linden/indra/llcharacter/lleditingmotion.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/lleditingmotion.h b/linden/indra/llcharacter/lleditingmotion.h
index 37df991..6ca6765 100644
--- a/linden/indra/llcharacter/lleditingmotion.h
+++ b/linden/indra/llcharacter/lleditingmotion.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/llgesture.cpp b/linden/indra/llcharacter/llgesture.cpp
index 944df78..231047d 100644
--- a/linden/indra/llcharacter/llgesture.cpp
+++ b/linden/indra/llcharacter/llgesture.cpp
@@ -3,6 +3,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/llgesture.h b/linden/indra/llcharacter/llgesture.h
index 5180be0..dc2b10c 100644
--- a/linden/indra/llcharacter/llgesture.h
+++ b/linden/indra/llcharacter/llgesture.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/llhandmotion.cpp b/linden/indra/llcharacter/llhandmotion.cpp
index 12ef070..96b1dc7 100644
--- a/linden/indra/llcharacter/llhandmotion.cpp
+++ b/linden/indra/llcharacter/llhandmotion.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/llhandmotion.h b/linden/indra/llcharacter/llhandmotion.h
index 3f3dac6..b909818 100644
--- a/linden/indra/llcharacter/llhandmotion.h
+++ b/linden/indra/llcharacter/llhandmotion.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/llheadrotmotion.cpp b/linden/indra/llcharacter/llheadrotmotion.cpp
index 1d1771d..be0b55d 100644
--- a/linden/indra/llcharacter/llheadrotmotion.cpp
+++ b/linden/indra/llcharacter/llheadrotmotion.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/llheadrotmotion.h b/linden/indra/llcharacter/llheadrotmotion.h
index 1412354..bdb82aa 100644
--- a/linden/indra/llcharacter/llheadrotmotion.h
+++ b/linden/indra/llcharacter/llheadrotmotion.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/lljoint.cpp b/linden/indra/llcharacter/lljoint.cpp
index 4102612..6141cc0 100644
--- a/linden/indra/llcharacter/lljoint.cpp
+++ b/linden/indra/llcharacter/lljoint.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/lljoint.h b/linden/indra/llcharacter/lljoint.h
index 352d222..f188968 100644
--- a/linden/indra/llcharacter/lljoint.h
+++ b/linden/indra/llcharacter/lljoint.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/lljointsolverrp3.cpp b/linden/indra/llcharacter/lljointsolverrp3.cpp
index 2221a53..9ecb31b 100644
--- a/linden/indra/llcharacter/lljointsolverrp3.cpp
+++ b/linden/indra/llcharacter/lljointsolverrp3.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/lljointsolverrp3.h b/linden/indra/llcharacter/lljointsolverrp3.h
index 7dd35eb..42f4912 100644
--- a/linden/indra/llcharacter/lljointsolverrp3.h
+++ b/linden/indra/llcharacter/lljointsolverrp3.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/lljointstate.h b/linden/indra/llcharacter/lljointstate.h
index 7fef28a..8b55410 100644
--- a/linden/indra/llcharacter/lljointstate.h
+++ b/linden/indra/llcharacter/lljointstate.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/llkeyframefallmotion.cpp b/linden/indra/llcharacter/llkeyframefallmotion.cpp
index 2fca225..d539be6 100644
--- a/linden/indra/llcharacter/llkeyframefallmotion.cpp
+++ b/linden/indra/llcharacter/llkeyframefallmotion.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/llkeyframefallmotion.h b/linden/indra/llcharacter/llkeyframefallmotion.h
index ddf4c45..b6a4e68 100644
--- a/linden/indra/llcharacter/llkeyframefallmotion.h
+++ b/linden/indra/llcharacter/llkeyframefallmotion.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/llkeyframemotion.cpp b/linden/indra/llcharacter/llkeyframemotion.cpp
index d09de0e..94e45b6 100644
--- a/linden/indra/llcharacter/llkeyframemotion.cpp
+++ b/linden/indra/llcharacter/llkeyframemotion.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -48,7 +49,7 @@
// Static Definitions
//-----------------------------------------------------------------------------
LLVFS* LLKeyframeMotion::sVFS = NULL;
-LLKeyframeDataCache::LLKeyframeDataMap LLKeyframeDataCache::sKeyframeDataMap;
+LLKeyframeDataCache::keyframe_data_map_t LLKeyframeDataCache::sKeyframeDataMap;
//-----------------------------------------------------------------------------
// Globals
@@ -64,8 +65,20 @@ static F32 MIN_ACCELERATION_SQUARED = 0.0005f * 0.0005f;
static F32 MAX_CONSTRAINTS = 10;
//-----------------------------------------------------------------------------
-// JointMotionList::dumpDiagInfo()
+// JointMotionList
//-----------------------------------------------------------------------------
+LLKeyframeMotion::JointMotionList::JointMotionList()
+ : mNumJointMotions(0),
+ mJointMotionArray(NULL)
+{
+}
+
+LLKeyframeMotion::JointMotionList::~JointMotionList()
+{
+ for_each(mConstraints.begin(), mConstraints.end(), DeletePointer());
+ delete [] mJointMotionArray;
+}
+
U32 LLKeyframeMotion::JointMotionList::dumpDiagInfo()
{
S32 total_size = sizeof(JointMotionList);
@@ -434,7 +447,7 @@ LLKeyframeMotion::~LLKeyframeMotion()
{
delete [] mJointStates;
}
- mConstraints.deleteAllData();
+ for_each(mConstraints.begin(), mConstraints.end(), DeletePointer());
}
//-----------------------------------------------------------------------------
@@ -569,8 +582,7 @@ LLMotion::LLMotionInitStatus LLKeyframeMotion::onInitialize(LLCharacter *charact
BOOL LLKeyframeMotion::setupPose()
{
// add all valid joint states to the pose
- U32 jm;
- for (jm=0; jmmNumJointMotions; jm++)
+ for (U32 jm=0; jmmNumJointMotions; jm++)
{
if ( mJointStates[jm].getJoint() )
{
@@ -579,16 +591,16 @@ BOOL LLKeyframeMotion::setupPose()
}
// initialize joint constraints
- for (JointConstraintSharedData* shared_constraintp = mJointMotionList->mConstraints.getFirstData();
- shared_constraintp;
- shared_constraintp = mJointMotionList->mConstraints.getNextData())
- {
- JointConstraint* constraintp = new JointConstraint(shared_constraintp);
- initializeConstraint(constraintp);
- mConstraints.addData(constraintp);
- }
+ for (JointMotionList::constraint_list_t::iterator iter = mJointMotionList->mConstraints.begin();
+ iter != mJointMotionList->mConstraints.end(); ++iter)
+ {
+ JointConstraintSharedData* shared_constraintp = *iter;
+ JointConstraint* constraintp = new JointConstraint(shared_constraintp);
+ initializeConstraint(constraintp);
+ mConstraints.push_front(constraintp);
+ }
- if (mJointMotionList->mConstraints.getLength())
+ if (mJointMotionList->mConstraints.size())
{
mPelvisp = mCharacter->getJoint("mPelvis");
if (!mPelvisp)
@@ -711,21 +723,21 @@ void LLKeyframeMotion::applyConstraints(F32 time, U8* joint_mask)
if (mCharacter->getSkeletonSerialNum() != mLastSkeletonSerialNum)
{
mLastSkeletonSerialNum = mCharacter->getSkeletonSerialNum();
- for (JointConstraint* constraintp = mConstraints.getFirstData();
- constraintp;
- constraintp = mConstraints.getNextData())
- {
- initializeConstraint(constraintp);
- }
+ for (constraint_list_t::iterator iter = mConstraints.begin();
+ iter != mConstraints.end(); ++iter)
+ {
+ JointConstraint* constraintp = *iter;
+ initializeConstraint(constraintp);
+ }
}
// apply constraints
- for (JointConstraint* constraintp = mConstraints.getFirstData();
- constraintp;
- constraintp = mConstraints.getNextData())
- {
- applyConstraint(constraintp, time, joint_mask);
- }
+ for (constraint_list_t::iterator iter = mConstraints.begin();
+ iter != mConstraints.end(); ++iter)
+ {
+ JointConstraint* constraintp = *iter;
+ applyConstraint(constraintp, time, joint_mask);
+ }
}
//-----------------------------------------------------------------------------
@@ -733,12 +745,12 @@ void LLKeyframeMotion::applyConstraints(F32 time, U8* joint_mask)
//-----------------------------------------------------------------------------
void LLKeyframeMotion::onDeactivate()
{
- for (JointConstraint* constraintp = mConstraints.getFirstData();
- constraintp;
- constraintp = mConstraints.getNextData())
- {
- deactivateConstraint(constraintp);
- }
+ for (constraint_list_t::iterator iter = mConstraints.begin();
+ iter != mConstraints.end(); ++iter)
+ {
+ JointConstraint* constraintp = *iter;
+ deactivateConstraint(constraintp);
+ }
}
//-----------------------------------------------------------------------------
@@ -1605,7 +1617,7 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
return FALSE;
}
- mJointMotionList->mConstraints.addData(constraintp);
+ mJointMotionList->mConstraints.push_front(constraintp);
constraintp->mJointStateIndices = new S32[constraintp->mChainLength + 1];
@@ -1713,10 +1725,19 @@ BOOL LLKeyframeMotion::serialize(LLDataPacker& dp) const
}
}
- success &= dp.packS32(mJointMotionList->mConstraints.getLength(), "num_constraints");
- for (JointConstraintSharedData* shared_constraintp = mJointMotionList->mConstraints.getFirstData();
- shared_constraintp;
- shared_constraintp = mJointMotionList->mConstraints.getNextData())
+ success &= dp.packS32(mJointMotionList->mConstraints.size(), "num_constraints");
+ for (JointMotionList::constraint_list_t::iterator iter = mJointMotionList->mConstraints.begin();
+ iter != mJointMotionList->mConstraints.end(); ++iter)
+ {
+ JointConstraintSharedData* shared_constraintp = *iter;
+ success &= dp.packU8(shared_constraintp->mChainLength, "chain_length");
+ success &= dp.packU8(shared_constraintp->mConstraintType, "constraint_type");
+ char volume_name[16]; /* Flawfinder: ignore */
+ snprintf(volume_name, sizeof(volume_name), "%s", /* Flawfinder: ignore */
+ mCharacter->findCollisionVolume(shared_constraintp->mSourceConstraintVolume)->getName().c_str());
+ success &= dp.packBinaryDataFixed((U8*)volume_name, 16, "source_volume");
+ success &= dp.packVector3(shared_constraintp->mSourceConstraintOffset, "source_offset");
+ if (shared_constraintp->mConstraintTargetType == TYPE_GROUND)
{
success &= dp.packU8(shared_constraintp->mChainLength, "chain_length");
success &= dp.packU8(shared_constraintp->mConstraintType, "constraint_type");
@@ -1731,7 +1752,7 @@ BOOL LLKeyframeMotion::serialize(LLDataPacker& dp) const
}
else
{
- snprintf(volume_name, sizeof(volume_name),"%s", /* Flawfinder: ignore */
+ snprintf(volume_name, sizeof(volume_name),"%s", /* Flawfinder: ignore */
mCharacter->findCollisionVolume(shared_constraintp->mTargetConstraintVolume)->getName().c_str());
}
success &= dp.packBinaryDataFixed((U8*)volume_name, 16, "target_volume");
@@ -1742,6 +1763,19 @@ BOOL LLKeyframeMotion::serialize(LLDataPacker& dp) const
success &= dp.packF32(shared_constraintp->mEaseOutStartTime, "ease_out_start");
success &= dp.packF32(shared_constraintp->mEaseOutStopTime, "ease_out_stop");
}
+ else
+ {
+ snprintf(volume_name, sizeof(volume_name),"%s", /* Flawfinder: ignore */
+ mCharacter->findCollisionVolume(shared_constraintp->mTargetConstraintVolume)->getName().c_str());
+ }
+ success &= dp.packBinaryDataFixed((U8*)volume_name, 16, "target_volume");
+ success &= dp.packVector3(shared_constraintp->mTargetConstraintOffset, "target_offset");
+ success &= dp.packVector3(shared_constraintp->mTargetConstraintDir, "target_dir");
+ success &= dp.packF32(shared_constraintp->mEaseInStartTime, "ease_in_start");
+ success &= dp.packF32(shared_constraintp->mEaseInStopTime, "ease_in_stop");
+ success &= dp.packF32(shared_constraintp->mEaseOutStartTime, "ease_out_start");
+ success &= dp.packF32(shared_constraintp->mEaseOutStopTime, "ease_out_stop");
+ }
return success;
}
@@ -1832,7 +1866,8 @@ void LLKeyframeMotion::setEaseOut(F32 ease_in)
//-----------------------------------------------------------------------------
void LLKeyframeMotion::flushKeyframeCache()
{
- LLKeyframeDataCache::clear();
+ // TODO: Make this safe to do
+// LLKeyframeDataCache::clear();
}
//-----------------------------------------------------------------------------
@@ -2041,8 +2076,8 @@ void LLKeyframeDataCache::dumpDiagInfo()
llinfos << "-----------------------------------------------------" << llendl;
// print each loaded mesh, and it's memory usage
- LLKeyframeDataMap::iterator map_it;
- for (map_it = sKeyframeDataMap.begin(); map_it != sKeyframeDataMap.end(); ++map_it)
+ for (keyframe_data_map_t::iterator map_it = sKeyframeDataMap.begin();
+ map_it != sKeyframeDataMap.end(); ++map_it)
{
U32 joint_motion_kb;
@@ -2076,12 +2111,12 @@ void LLKeyframeDataCache::addKeyframeData(const LLUUID& id, LLKeyframeMotion::Jo
//--------------------------------------------------------------------
void LLKeyframeDataCache::removeKeyframeData(const LLUUID& id)
{
- LLKeyframeMotion::JointMotionList* joint_motion_listp = getKeyframeData(id);
- if (joint_motion_listp)
+ keyframe_data_map_t::iterator found_data = sKeyframeDataMap.find(id);
+ if (found_data != sKeyframeDataMap.end())
{
- delete joint_motion_listp;
+ delete found_data->second;
+ sKeyframeDataMap.erase(found_data);
}
- sKeyframeDataMap.erase(id);
}
//--------------------------------------------------------------------
@@ -2089,7 +2124,7 @@ void LLKeyframeDataCache::removeKeyframeData(const LLUUID& id)
//--------------------------------------------------------------------
LLKeyframeMotion::JointMotionList* LLKeyframeDataCache::getKeyframeData(const LLUUID& id)
{
- LLKeyframeDataMap::iterator found_data = sKeyframeDataMap.find(id);
+ keyframe_data_map_t::iterator found_data = sKeyframeDataMap.find(id);
if (found_data == sKeyframeDataMap.end())
{
return NULL;
diff --git a/linden/indra/llcharacter/llkeyframemotion.h b/linden/indra/llcharacter/llkeyframemotion.h
index c33df80..1e5cd62 100644
--- a/linden/indra/llcharacter/llkeyframemotion.h
+++ b/linden/indra/llcharacter/llkeyframemotion.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -35,7 +36,6 @@
#include
#include "llassetstorage.h"
-#include "llassoclist.h"
#include "llbboxlocal.h"
#include "llhandmotion.h"
#include "lljointstate.h"
@@ -405,11 +405,12 @@ public:
LLJoint::JointPriority mBasePriority;
LLHandMotion::eHandPose mHandPose;
LLJoint::JointPriority mMaxPriority;
- LLLinkedList mConstraints;
+ typedef std::list constraint_list_t;
+ constraint_list_t mConstraints;
LLBBoxLocal mPelvisBBox;
public:
- JointMotionList() : mNumJointMotions(0), mJointMotionArray(NULL) {};
- ~JointMotionList() { mConstraints.deleteAllData(); delete [] mJointMotionArray; }
+ JointMotionList();
+ ~JointMotionList();
U32 dumpDiagInfo();
};
@@ -425,7 +426,8 @@ protected:
LLJoint* mPelvisp;
LLCharacter* mCharacter;
std::string mEmoteName;
- LLLinkedList mConstraints;
+ typedef std::list constraint_list_t;
+ constraint_list_t mConstraints;
U32 mLastSkeletonSerialNum;
F32 mLastUpdateTime;
F32 mLastLoopedTime;
@@ -439,8 +441,8 @@ public:
LLKeyframeDataCache(){};
~LLKeyframeDataCache();
- typedef std::map LLKeyframeDataMap;
- static LLKeyframeDataMap sKeyframeDataMap;
+ typedef std::map keyframe_data_map_t;
+ static keyframe_data_map_t sKeyframeDataMap;
static void addKeyframeData(const LLUUID& id, LLKeyframeMotion::JointMotionList*);
static LLKeyframeMotion::JointMotionList* getKeyframeData(const LLUUID& id);
diff --git a/linden/indra/llcharacter/llkeyframemotionparam.cpp b/linden/indra/llcharacter/llkeyframemotionparam.cpp
index 93df410..5970909 100644
--- a/linden/indra/llcharacter/llkeyframemotionparam.cpp
+++ b/linden/indra/llcharacter/llkeyframemotionparam.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -348,7 +349,7 @@ BOOL LLKeyframeMotionParam::loadMotions()
// Load data into a buffer to be parsed.
//-------------------------------------------------------------------------
char path[LL_MAX_PATH]; /* Flawfinder: ignore */
- snprintf( path,sizeof(path), "%s_%s.llp", /* Flawfinder: ignore */
+ snprintf( path,sizeof(path), "%s_%s.llp",
gDirUtilp->getExpandedFilename(LL_PATH_MOTIONS,mCharacter->getAnimationPrefix()).c_str(),
getName().c_str() );
diff --git a/linden/indra/llcharacter/llkeyframemotionparam.h b/linden/indra/llcharacter/llkeyframemotionparam.h
index 33dd094..e0885c1 100644
--- a/linden/indra/llcharacter/llkeyframemotionparam.h
+++ b/linden/indra/llcharacter/llkeyframemotionparam.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/llkeyframestandmotion.cpp b/linden/indra/llcharacter/llkeyframestandmotion.cpp
index 4fcb76c..9b423c5 100644
--- a/linden/indra/llcharacter/llkeyframestandmotion.cpp
+++ b/linden/indra/llcharacter/llkeyframestandmotion.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/llkeyframestandmotion.h b/linden/indra/llcharacter/llkeyframestandmotion.h
index f569498..e7c54c5 100644
--- a/linden/indra/llcharacter/llkeyframestandmotion.h
+++ b/linden/indra/llcharacter/llkeyframestandmotion.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/llkeyframewalkmotion.cpp b/linden/indra/llcharacter/llkeyframewalkmotion.cpp
index b1838d8..bf347a6 100644
--- a/linden/indra/llcharacter/llkeyframewalkmotion.cpp
+++ b/linden/indra/llcharacter/llkeyframewalkmotion.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/llkeyframewalkmotion.h b/linden/indra/llcharacter/llkeyframewalkmotion.h
index 3367b64..d2c9cd8 100644
--- a/linden/indra/llcharacter/llkeyframewalkmotion.h
+++ b/linden/indra/llcharacter/llkeyframewalkmotion.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/llmotion.cpp b/linden/indra/llcharacter/llmotion.cpp
index d2343ab..b13ea60 100644
--- a/linden/indra/llcharacter/llmotion.cpp
+++ b/linden/indra/llcharacter/llmotion.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/llmotion.h b/linden/indra/llcharacter/llmotion.h
index 2e302cf..48d402a 100644
--- a/linden/indra/llcharacter/llmotion.h
+++ b/linden/indra/llcharacter/llmotion.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/llmotioncontroller.cpp b/linden/indra/llcharacter/llmotioncontroller.cpp
index 3e1456b..5545841 100644
--- a/linden/indra/llcharacter/llmotioncontroller.cpp
+++ b/linden/indra/llcharacter/llmotioncontroller.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -180,9 +181,9 @@ LLMotionController::~LLMotionController()
//-----------------------------------------------------------------------------
void LLMotionController::deleteAllMotions()
{
- mLoadingMotions.removeAllNodes();
+ mLoadingMotions.clear();
mLoadedMotions.clear();
- mActiveMotions.removeAllNodes();
+ mActiveMotions.clear();
for_each(mAllMotions.begin(), mAllMotions.end(), DeletePairedPointer());
mAllMotions.clear();
@@ -234,16 +235,16 @@ void LLMotionController::setTimeStep(F32 step)
if (step != 0.f)
{
// make sure timestamps conform to new quantum
- for( LLMotion* motionp = mActiveMotions.getFirstData();
- motionp != NULL;
- motionp = mActiveMotions.getNextData() )
- {
- motionp->mActivationTimestamp = (F32)llfloor(motionp->mActivationTimestamp / step) * step;
- BOOL stopped = motionp->isStopped();
- motionp->setStopTime((F32)llfloor(motionp->getStopTime() / step) * step);
- motionp->setStopped(stopped);
- motionp->mSendStopTimestamp = (F32)llfloor(motionp->mSendStopTimestamp / step) * step;
- }
+ for (motion_list_t::iterator iter = mActiveMotions.begin();
+ iter != mActiveMotions.end(); ++iter)
+ {
+ LLMotion* motionp = *iter;
+ motionp->mActivationTimestamp = (F32)llfloor(motionp->mActivationTimestamp / step) * step;
+ BOOL stopped = motionp->isStopped();
+ motionp->setStopTime((F32)llfloor(motionp->getStopTime() / step) * step);
+ motionp->setStopped(stopped);
+ motionp->mSendStopTimestamp = (F32)llfloor(motionp->mSendStopTimestamp / step) * step;
+ }
}
}
@@ -257,23 +258,6 @@ void LLMotionController::setTimeFactor(F32 time_factor)
}
//-----------------------------------------------------------------------------
-// getFirstActiveMotion()
-//-----------------------------------------------------------------------------
-LLMotion* LLMotionController::getFirstActiveMotion()
-{
- return mActiveMotions.getFirstData();
-}
-
-//-----------------------------------------------------------------------------
-// getNextActiveMotion()
-//-----------------------------------------------------------------------------
-LLMotion* LLMotionController::getNextActiveMotion()
-{
- return mActiveMotions.getNextData();
-}
-
-
-//-----------------------------------------------------------------------------
// setCharacter()
//-----------------------------------------------------------------------------
void LLMotionController::setCharacter(LLCharacter *character)
@@ -300,17 +284,9 @@ void LLMotionController::removeMotion( const LLUUID& id)
{
stopMotionLocally(id, TRUE);
- mLoadingMotions.deleteData(motionp);
- std::deque::iterator motion_it;
- for (motion_it = mLoadedMotions.begin(); motion_it != mLoadedMotions.end(); ++motion_it)
- {
- if(*motion_it == motionp)
- {
- mLoadedMotions.erase(motion_it);
- break;
- }
- }
- mActiveMotions.deleteData(motionp);
+ mLoadingMotions.erase(motionp);
+ mLoadedMotions.remove(motionp);
+ mActiveMotions.remove(motionp);
mAllMotions.erase(id);
delete motionp;
}
@@ -351,7 +327,7 @@ LLMotion* LLMotionController::createMotion( const LLUUID &id )
delete motion;
return NULL;
case LLMotion::STATUS_HOLD:
- mLoadingMotions.addData(motion);
+ mLoadingMotions.insert(motion);
break;
case LLMotion::STATUS_SUCCESS:
// add motion to our list
@@ -470,10 +446,11 @@ void LLMotionController::updateMotionsByType(LLMotion::LLMotionBlendType anim_ty
memset(&last_joint_signature, 0, sizeof(U8) * LL_CHARACTER_MAX_JOINTS);
// iterate through active motions in chronological order
- for(LLMotion* motionp = mActiveMotions.getFirstData();
- motionp != NULL;
- motionp = mActiveMotions.getNextData())
+ for (motion_list_t::iterator iter = mActiveMotions.begin();
+ iter != mActiveMotions.end(); )
{
+ motion_list_t::iterator curiter = iter++;
+ LLMotion* motionp = *curiter;
if (motionp->getBlendType() != anim_type)
{
continue;
@@ -487,9 +464,8 @@ void LLMotionController::updateMotionsByType(LLMotion::LLMotionBlendType anim_ty
}
else
{
- S32 i;
// NUM_JOINT_SIGNATURE_STRIDES should be multiple of 4
- for (i = 0; i < NUM_JOINT_SIGNATURE_STRIDES; i++)
+ for (S32 i = 0; i < NUM_JOINT_SIGNATURE_STRIDES; i++)
{
U32 *current_signature = (U32*)&(mJointSignature[0][i * 4]);
U32 test_signature = *(U32*)&(motionp->mJointSignature[0][i * 4]);
@@ -745,16 +721,15 @@ void LLMotionController::updateMotion()
}
// query pending motions for completion
- LLMotion* motionp;
-
- for ( motionp = mLoadingMotions.getFirstData();
- motionp != NULL;
- motionp = mLoadingMotions.getNextData() )
+ for (motion_set_t::iterator iter = mLoadingMotions.begin();
+ iter != mLoadingMotions.end(); )
{
+ motion_set_t::iterator curiter = iter++;
+ LLMotion* motionp = *curiter;
LLMotion::LLMotionInitStatus status = motionp->onInitialize(mCharacter);
if (status == LLMotion::STATUS_SUCCESS)
{
- mLoadingMotions.removeCurrentData();
+ mLoadingMotions.erase(curiter);
// add motion to our loaded motion list
addLoadedMotion(motionp);
// this motion should be playing
@@ -767,7 +742,7 @@ void LLMotionController::updateMotion()
{
llinfos << "Motion " << motionp->getID() << " init failed." << llendl;
sRegistry.markBad(motionp->getID());
- mLoadingMotions.removeCurrentData();
+ mLoadingMotions.erase(curiter);
mAllMotions.erase(motionp->getID());
delete motionp;
}
@@ -804,7 +779,7 @@ void LLMotionController::updateMotion()
//-----------------------------------------------------------------------------
BOOL LLMotionController::activateMotion(LLMotion *motion, F32 time)
{
- if (mLoadingMotions.checkData(motion))
+ if (mLoadingMotions.find(motion) != mLoadingMotions.end())
{
// we want to start this motion, but we can't yet, so flag it as started
motion->setStopped(FALSE);
@@ -835,7 +810,8 @@ BOOL LLMotionController::activateMotion(LLMotion *motion, F32 time)
motion->mSendStopTimestamp = F32_MAX;
}
- mActiveMotions.addData(motion);
+ mActiveMotions.remove(motion); // in case it is already in the active list
+ mActiveMotions.push_front(motion);
motion->activate();
motion->onUpdate(0.f, mJointSignature[1]);
@@ -849,7 +825,7 @@ BOOL LLMotionController::activateMotion(LLMotion *motion, F32 time)
BOOL LLMotionController::deactivateMotion(LLMotion *motion)
{
motion->deactivate();
- mActiveMotions.removeData(motion);
+ mActiveMotions.remove(motion);
return TRUE;
}
@@ -857,22 +833,17 @@ BOOL LLMotionController::deactivateMotion(LLMotion *motion)
//-----------------------------------------------------------------------------
// isMotionActive()
//-----------------------------------------------------------------------------
-BOOL LLMotionController::isMotionActive(LLMotion *motion)
+bool LLMotionController::isMotionActive(LLMotion *motion)
{
- if (motion && motion->isActive())
- {
- return TRUE;
- }
-
- return FALSE;
+ return (motion && motion->isActive());
}
//-----------------------------------------------------------------------------
// isMotionLoading()
//-----------------------------------------------------------------------------
-BOOL LLMotionController::isMotionLoading(LLMotion* motion)
+bool LLMotionController::isMotionLoading(LLMotion* motion)
{
- return mLoadingMotions.checkData(motion);
+ return (mLoadingMotions.find(motion) != mLoadingMotions.end());
}
@@ -890,15 +861,15 @@ LLMotion *LLMotionController::findMotion(const LLUUID& id)
//-----------------------------------------------------------------------------
void LLMotionController::flushAllMotions()
{
- LLDynamicArray active_motions;
- LLDynamicArray active_motion_times;
-
- for (LLMotion* motionp = mActiveMotions.getFirstData();
- motionp;
- motionp = mActiveMotions.getNextData())
+ std::vector > active_motions;
+ active_motions.reserve(mActiveMotions.size());
+ for (motion_list_t::iterator iter = mActiveMotions.begin();
+ iter != mActiveMotions.end(); )
{
- active_motions.put(motionp->getID());
- active_motion_times.put(mTime - motionp->mActivationTimestamp);
+ motion_list_t::iterator curiter = iter++;
+ LLMotion* motionp = *curiter;
+ F32 dtime = mTime - motionp->mActivationTimestamp;
+ active_motions.push_back(std::make_pair(motionp->getID(),dtime));
motionp->deactivate();
}
@@ -910,9 +881,10 @@ void LLMotionController::flushAllMotions()
mCharacter->removeAnimationData("Hand Pose");
// restart motions
- for (S32 i = 0; i < active_motions.count(); i++)
+ for (std::vector >::iterator iter = active_motions.begin();
+ iter != active_motions.end(); ++iter)
{
- startMotion(active_motions[i], active_motion_times[i]);
+ startMotion(iter->first, iter->second);
}
}
diff --git a/linden/indra/llcharacter/llmotioncontroller.h b/linden/indra/llcharacter/llmotioncontroller.h
index c9ee7c4..e4c7b3f 100644
--- a/linden/indra/llcharacter/llmotioncontroller.h
+++ b/linden/indra/llcharacter/llmotioncontroller.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -35,7 +36,6 @@
#include
#include
-#include "linked_lists.h"
#include "lluuidhashmap.h"
#include "llmotion.h"
#include "llpose.h"
@@ -109,6 +109,10 @@ protected:
class LLMotionController
{
public:
+ typedef std::list motion_list_t;
+ typedef std::set motion_set_t;
+
+public:
// Constructor
LLMotionController();
@@ -164,12 +168,11 @@ public:
void setTimeFactor(F32 time_factor);
F32 getTimeFactor() { return mTimeFactor; }
- LLMotion* getFirstActiveMotion();
- LLMotion* getNextActiveMotion();
+ motion_list_t& getActiveMotions() { return mActiveMotions; }
//protected:
- BOOL isMotionActive( LLMotion *motion );
- BOOL isMotionLoading( LLMotion *motion );
+ bool isMotionActive( LLMotion *motion );
+ bool isMotionLoading( LLMotion *motion );
LLMotion *findMotion( const LLUUID& id );
protected:
@@ -199,9 +202,9 @@ protected:
std::map mAllMotions;
- LLLinkedList mLoadingMotions;
- std::deque mLoadedMotions;
- LLLinkedList mActiveMotions;
+ motion_set_t mLoadingMotions;
+ motion_list_t mLoadedMotions;
+ motion_list_t mActiveMotions;
LLFrameTimer mTimer;
F32 mTime;
diff --git a/linden/indra/llcharacter/llmultigesture.cpp b/linden/indra/llcharacter/llmultigesture.cpp
index 80cbacb..0a4d99a 100644
--- a/linden/indra/llcharacter/llmultigesture.cpp
+++ b/linden/indra/llcharacter/llmultigesture.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -469,7 +470,7 @@ std::string LLGestureStepWait::getLabel() const
if (mFlags & WAIT_FLAG_TIME)
{
char buffer[64]; /* Flawfinder: ignore */
- snprintf(buffer, sizeof(buffer), "%.1f seconds", (double)mWaitSeconds); /* Flawfinder: ignore */
+ snprintf(buffer, sizeof(buffer), "%.1f seconds", (double)mWaitSeconds); /* Flawfinder: ignore */
label += buffer;
}
else if (mFlags & WAIT_FLAG_ALL_ANIM)
diff --git a/linden/indra/llcharacter/llmultigesture.h b/linden/indra/llcharacter/llmultigesture.h
index aeb7c04..75e5db8 100644
--- a/linden/indra/llcharacter/llmultigesture.h
+++ b/linden/indra/llcharacter/llmultigesture.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/llpose.cpp b/linden/indra/llcharacter/llpose.cpp
index ebf6a67..ccedc1e 100644
--- a/linden/indra/llcharacter/llpose.cpp
+++ b/linden/indra/llcharacter/llpose.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -34,6 +35,7 @@
#include "llmotion.h"
#include "llmath.h"
+#include "llstl.h"
//-----------------------------------------------------------------------------
// Static
@@ -457,7 +459,7 @@ LLPoseBlender::LLPoseBlender()
LLPoseBlender::~LLPoseBlender()
{
- mJointStateBlenderPool.deleteAllData();
+ for_each(mJointStateBlenderPool.begin(), mJointStateBlenderPool.end(), DeletePairedPointer());
}
//-----------------------------------------------------------------------------
@@ -471,15 +473,16 @@ BOOL LLPoseBlender::addMotion(LLMotion* motion)
{
LLJoint *jointp = jsp->getJoint();
LLJointStateBlender* joint_blender;
- if (!mJointStateBlenderPool.checkData(jointp))
+ if (mJointStateBlenderPool.find(jointp) == mJointStateBlenderPool.end())
{
// this is the first time we are animating this joint
// so create new jointblender and add it to our pool
joint_blender = new LLJointStateBlender();
- mJointStateBlenderPool.addData(jointp, joint_blender);
- } else
+ mJointStateBlenderPool[jointp] = joint_blender;
+ }
+ else
{
- joint_blender = mJointStateBlenderPool.getData(jointp);
+ joint_blender = mJointStateBlenderPool[jointp];
}
if (jsp->getPriority() == LLJoint::USE_MOTION_PRIORITY)
@@ -492,9 +495,9 @@ BOOL LLPoseBlender::addMotion(LLMotion* motion)
}
// add it to our list of active blenders
- if(!mActiveBlenders.checkData(joint_blender))
+ if (std::find(mActiveBlenders.begin(), mActiveBlenders.end(), joint_blender) == mActiveBlenders.end())
{
- mActiveBlenders.addData(joint_blender);
+ mActiveBlenders.push_front(joint_blender);
}
}
return TRUE;
@@ -505,15 +508,15 @@ BOOL LLPoseBlender::addMotion(LLMotion* motion)
//-----------------------------------------------------------------------------
void LLPoseBlender::blendAndApply()
{
- for (LLJointStateBlender* jsbp = mActiveBlenders.getFirstData();
- jsbp;
- jsbp = mActiveBlenders.getNextData())
+ for (blender_list_t::iterator iter = mActiveBlenders.begin();
+ iter != mActiveBlenders.end(); ++iter)
{
+ LLJointStateBlender* jsbp = *iter;
jsbp->blendJointStates();
}
// we're done now so there are no more active blenders for this frame
- mActiveBlenders.removeAllNodes();
+ mActiveBlenders.clear();
}
//-----------------------------------------------------------------------------
@@ -521,10 +524,10 @@ void LLPoseBlender::blendAndApply()
//-----------------------------------------------------------------------------
void LLPoseBlender::blendAndCache(BOOL reset_cached_joints)
{
- for (LLJointStateBlender* jsbp = mActiveBlenders.getFirstData();
- jsbp;
- jsbp = mActiveBlenders.getNextData())
+ for (blender_list_t::iterator iter = mActiveBlenders.begin();
+ iter != mActiveBlenders.end(); ++iter)
{
+ LLJointStateBlender* jsbp = *iter;
if (reset_cached_joints)
{
jsbp->resetCachedJoint();
@@ -538,10 +541,10 @@ void LLPoseBlender::blendAndCache(BOOL reset_cached_joints)
//-----------------------------------------------------------------------------
void LLPoseBlender::interpolate(F32 u)
{
- for (LLJointStateBlender* jsbp = mActiveBlenders.getFirstData();
- jsbp;
- jsbp = mActiveBlenders.getNextData())
+ for (blender_list_t::iterator iter = mActiveBlenders.begin();
+ iter != mActiveBlenders.end(); ++iter)
{
+ LLJointStateBlender* jsbp = *iter;
jsbp->interpolate(u);
}
}
@@ -551,13 +554,13 @@ void LLPoseBlender::interpolate(F32 u)
//-----------------------------------------------------------------------------
void LLPoseBlender::clearBlenders()
{
- for (LLJointStateBlender* jsbp = mActiveBlenders.getFirstData();
- jsbp;
- jsbp = mActiveBlenders.getNextData())
+ for (blender_list_t::iterator iter = mActiveBlenders.begin();
+ iter != mActiveBlenders.end(); ++iter)
{
+ LLJointStateBlender* jsbp = *iter;
jsbp->clear();
}
- mActiveBlenders.removeAllNodes();
+ mActiveBlenders.clear();
}
diff --git a/linden/indra/llcharacter/llpose.h b/linden/indra/llcharacter/llpose.h
index 12d1640..f57f7de 100644
--- a/linden/indra/llcharacter/llpose.h
+++ b/linden/indra/llcharacter/llpose.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -106,8 +107,10 @@ class LLMotion;
class LLPoseBlender
{
protected:
- LLMap mJointStateBlenderPool;
- LLLinkedList mActiveBlenders;
+ typedef std::list blender_list_t;
+ typedef std::map blender_map_t;
+ blender_map_t mJointStateBlenderPool;
+ blender_list_t mActiveBlenders;
S32 mNextPoseSlot;
LLPose mBlendedPose;
diff --git a/linden/indra/llcharacter/llstatemachine.cpp b/linden/indra/llcharacter/llstatemachine.cpp
index 6920bcf..1ad81be 100644
--- a/linden/indra/llcharacter/llstatemachine.cpp
+++ b/linden/indra/llcharacter/llstatemachine.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/llstatemachine.h b/linden/indra/llcharacter/llstatemachine.h
index 0f986bd..091662e 100644
--- a/linden/indra/llcharacter/llstatemachine.h
+++ b/linden/indra/llcharacter/llstatemachine.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/lltargetingmotion.cpp b/linden/indra/llcharacter/lltargetingmotion.cpp
index 799e4d0..9e8b8df 100644
--- a/linden/indra/llcharacter/lltargetingmotion.cpp
+++ b/linden/indra/llcharacter/lltargetingmotion.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/lltargetingmotion.h b/linden/indra/llcharacter/lltargetingmotion.h
index 9fd8391..a6a6b03 100644
--- a/linden/indra/llcharacter/lltargetingmotion.h
+++ b/linden/indra/llcharacter/lltargetingmotion.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/llvisualparam.cpp b/linden/indra/llcharacter/llvisualparam.cpp
index ed8a034..de163eb 100644
--- a/linden/indra/llcharacter/llvisualparam.cpp
+++ b/linden/indra/llcharacter/llvisualparam.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcharacter/llvisualparam.h b/linden/indra/llcharacter/llvisualparam.h
index 74774b8..ec19fa0 100644
--- a/linden/indra/llcharacter/llvisualparam.h
+++ b/linden/indra/llcharacter/llvisualparam.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/bitpack.cpp b/linden/indra/llcommon/bitpack.cpp
deleted file mode 100644
index 813e09c..0000000
--- a/linden/indra/llcommon/bitpack.cpp
+++ /dev/null
@@ -1,167 +0,0 @@
-/**
- * @file bitpack.cpp
- * @brief Convert data to packed bit stream
- *
- * Copyright (c) 2000-2007, Linden Research, Inc.
- *
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlife.com/developers/opensource/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at http://secondlife.com/developers/opensource/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#include "linden_common.h"
-
-#include "bitpack.h"
-
-#if 0
-#include
-#include
-#include "stdtypes.h"
-
-U8 gLoad, gUnLoad;
-U32 gLoadSize, gUnLoadSize, gTotalBits;
-
-const U32 gMaxDataBits = 8;
-
-/////////////////////////////////////////////////////////////////////////////////////////
-#if 0
-void bit_pack(U8 *outbase, U32 *outptr, U8 *total_data, U32 total_dsize)
-{
- U32 max_data_bits = gMaxDataBits;
- U32 load_size = gLoadSize, total_bits = gTotalBits;
- U32 dsize;
-
- U8 data;
- U8 load = gLoad;
-
- while (total_dsize > 0)
- {
- if (total_dsize > max_data_bits)
- {
- dsize = max_data_bits;
- total_dsize -= max_data_bits;
- }
- else
- {
- dsize = total_dsize;
- total_dsize = 0;
- }
-
- data = *total_data++;
-
- data <<= (max_data_bits - dsize);
- while (dsize > 0)
- {
- if (load_size == max_data_bits)
- {
- *(outbase + (*outptr)++) = load;
- load_size = 0;
- load = 0x00;
- }
- load <<= 1;
- load |= (data >> (max_data_bits - 1));
- data <<= 1;
- load_size++;
- total_bits++;
- dsize--;
- }
- }
-
- gLoad = load;
- gLoadSize = load_size;
- gTotalBits = total_bits;
-}
-#endif
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-void bit_pack_reset()
-{
- gLoad = 0x0;
- gLoadSize = 0;
- gTotalBits = 0;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-void bit_pack_flush(U8 *outbase, U32 *outptr)
-{
- if (gLoadSize)
- {
- gTotalBits += gLoadSize;
- gLoad <<= (gMaxDataBits - gLoadSize);
- outbase[(*outptr)++] = gLoad;
- gLoadSize = 0;
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////////////
-#if 0
-void bit_unpack(U8 *total_retval, U32 total_dsize, U8 *indata, U32 *inptr)
-{
- U32 max_data_bits = gMaxDataBits;
- U32 unload_size = gUnLoadSize;
- U32 dsize;
- U8 *retval;
- U8 unload = gUnLoad;
-
- while (total_dsize > 0)
- {
- if (total_dsize > max_data_bits)
- {
- dsize = max_data_bits;
- total_dsize -= max_data_bits;
- }
- else
- {
- dsize = total_dsize;
- total_dsize = 0;
- }
-
- retval = total_data++;
- *retval = 0x00;
- while (dsize > 0)
- {
- if (unload_size == 0)
- {
- unload = indata[(*inptr)++];
- unload_size = max_data_bits;
- }
- *retval <<= 1;
- *retval |= (unload >> (max_data_bits - 1));
- unload_size--;
- unload <<= 1;
- dsize--;
- }
- }
-
- gUnLoad = unload;
- gUnLoadSize = unload_size;
-}
-#endif
-
-
-///////////////////////////////////////////////////////////////////////////////////////
-
-void bit_unpack_reset()
-{
- gUnLoad = 0;
- gUnLoadSize = 0;
-}
-#endif
diff --git a/linden/indra/llcommon/bitpack.h b/linden/indra/llcommon/bitpack.h
index 9a32a07..89af101 100644
--- a/linden/indra/llcommon/bitpack.h
+++ b/linden/indra/llcommon/bitpack.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/ctype_workaround.h b/linden/indra/llcommon/ctype_workaround.h
index 08c44b1..20dd6c6 100644
--- a/linden/indra/llcommon/ctype_workaround.h
+++ b/linden/indra/llcommon/ctype_workaround.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/doublelinkedlist.h b/linden/indra/llcommon/doublelinkedlist.h
index 833e73c..81891b3 100644
--- a/linden/indra/llcommon/doublelinkedlist.h
+++ b/linden/indra/llcommon/doublelinkedlist.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/files.lst b/linden/indra/llcommon/files.lst
index 5fcb8c7..6a48752 100644
--- a/linden/indra/llcommon/files.lst
+++ b/linden/indra/llcommon/files.lst
@@ -1,4 +1,3 @@
-llcommon/bitpack.cpp
llcommon/llapp.cpp
llcommon/llapr.cpp
llcommon/llassettype.cpp
diff --git a/linden/indra/llcommon/imageids.h b/linden/indra/llcommon/imageids.h
index d65b374..5c6ff08 100644
--- a/linden/indra/llcommon/imageids.h
+++ b/linden/indra/llcommon/imageids.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/indra_constants.h b/linden/indra/llcommon/indra_constants.h
index deb9c9d..9024b12 100644
--- a/linden/indra/llcommon/indra_constants.h
+++ b/linden/indra/llcommon/indra_constants.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -31,10 +32,6 @@
#include "stdtypes.h"
#include "lluuid.h"
-// Viewer object cache version, change if object update
-// format changes. JC
-const U32 INDRA_OBJECT_CACHE_VERSION = 11;
-
// At 45 Hz collisions seem stable and objects seem
// to settle down at a reasonable rate.
// JC 3/18/2003
@@ -116,11 +113,11 @@ const U32 DEFAULT_USER_SERVER_PORT = 12036;
const U32 DEFAULT_RPC_SERVER_PORT = 12037;
const U32 DEFAULT_LOG_DATA_SERVER_PORT = 12039;
const U32 DEFAULT_BACKBONE_PORT = 12040;
-const U32 DEFAULT_CGI_SERVICES_PORT = 12045;
const U32 DEFAULT_LOCAL_ASSET_PORT = 12041;
//const U32 DEFAULT_BACKBONE_CAP_PORT = 12042; // Deprecated
const U32 DEFAULT_CAP_PROXY_PORT = 12043;
const U32 DEFAULT_INV_DATA_SERVER_PORT = 12044;
+const U32 DEFAULT_CGI_SERVICES_PORT = 12045;
// For automatic port discovery when running multiple viewers on one host
const U32 PORT_DISCOVERY_RANGE_MIN = 13000;
diff --git a/linden/indra/llcommon/linden_common.h b/linden/indra/llcommon/linden_common.h
index b1c5f3b..5a6018a 100644
--- a/linden/indra/llcommon/linden_common.h
+++ b/linden/indra/llcommon/linden_common.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/linked_lists.h b/linden/indra/llcommon/linked_lists.h
index 4a1b163..ab4a622 100644
--- a/linden/indra/llcommon/linked_lists.h
+++ b/linden/indra/llcommon/linked_lists.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llagentconstants.h b/linden/indra/llcommon/llagentconstants.h
index fe51688..0e0fdb0 100644
--- a/linden/indra/llcommon/llagentconstants.h
+++ b/linden/indra/llcommon/llagentconstants.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llapp.cpp b/linden/indra/llcommon/llapp.cpp
index f48ff8f..5edcb3c 100644
--- a/linden/indra/llcommon/llapp.cpp
+++ b/linden/indra/llcommon/llapp.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llapp.h b/linden/indra/llcommon/llapp.h
index aef5cde..599bd48 100644
--- a/linden/indra/llcommon/llapp.h
+++ b/linden/indra/llcommon/llapp.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llapr.cpp b/linden/indra/llcommon/llapr.cpp
index 550a8d8..ee63497 100644
--- a/linden/indra/llcommon/llapr.cpp
+++ b/linden/indra/llcommon/llapr.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llapr.h b/linden/indra/llcommon/llapr.h
index be6fc6c..a36b177 100644
--- a/linden/indra/llcommon/llapr.h
+++ b/linden/indra/llcommon/llapr.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llassettype.cpp b/linden/indra/llcommon/llassettype.cpp
index df00af8..0bbef8c 100644
--- a/linden/indra/llcommon/llassettype.cpp
+++ b/linden/indra/llcommon/llassettype.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llassettype.h b/linden/indra/llcommon/llassettype.h
index da4cf0b..5fe6b16 100644
--- a/linden/indra/llcommon/llassettype.h
+++ b/linden/indra/llcommon/llassettype.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llassoclist.h b/linden/indra/llcommon/llassoclist.h
index d1d3eb8..417e347 100644
--- a/linden/indra/llcommon/llassoclist.h
+++ b/linden/indra/llcommon/llassoclist.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llavatarconstants.h b/linden/indra/llcommon/llavatarconstants.h
index 1eb5b05..3eedf4e 100644
--- a/linden/indra/llcommon/llavatarconstants.h
+++ b/linden/indra/llcommon/llavatarconstants.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llbase32.h b/linden/indra/llcommon/llbase32.h
index eaf3efc..198c5c6 100644
--- a/linden/indra/llcommon/llbase32.h
+++ b/linden/indra/llcommon/llbase32.h
@@ -1,10 +1,11 @@
-/**
- * @file llbase32.h
- * @brief base32 encoding that returns a std::string
- * @author James Cook
- *
- * Copyright (c) 2007-2007, Linden Research, Inc.
+/**
+ * @file llbase32.h
+ * @brief base32 encoding that returns a std::string
+ * @author James Cook
+ *
+ * Copyright (c) 2007-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -23,16 +24,16 @@
*
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#ifndef LLBASE32_H
-#define LLBASE32_h
-
-class LLBase32
-{
-public:
- static std::string encode(const U8* input, size_t input_size);
-};
-
-#endif
+ * COMPLETENESS OR PERFORMANCE.
+ */
+
+#ifndef LLBASE32_H
+#define LLBASE32_h
+
+class LLBase32
+{
+public:
+ static std::string encode(const U8* input, size_t input_size);
+};
+
+#endif
diff --git a/linden/indra/llcommon/llbase64.cpp b/linden/indra/llcommon/llbase64.cpp
index 0869d3f..18aefea 100644
--- a/linden/indra/llcommon/llbase64.cpp
+++ b/linden/indra/llcommon/llbase64.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2007-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llbase64.h b/linden/indra/llcommon/llbase64.h
index d8b4acc..995ac04 100644
--- a/linden/indra/llcommon/llbase64.h
+++ b/linden/indra/llcommon/llbase64.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2007-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llboost.h b/linden/indra/llcommon/llboost.h
index e572f6e..45d5eb2 100644
--- a/linden/indra/llcommon/llboost.h
+++ b/linden/indra/llcommon/llboost.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llchat.h b/linden/indra/llcommon/llchat.h
index aee9008..b1635a7 100644
--- a/linden/indra/llcommon/llchat.h
+++ b/linden/indra/llcommon/llchat.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llclickaction.h b/linden/indra/llcommon/llclickaction.h
index 03b8b85..e45ad90 100644
--- a/linden/indra/llcommon/llclickaction.h
+++ b/linden/indra/llcommon/llclickaction.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llcommon.cpp b/linden/indra/llcommon/llcommon.cpp
index 49675e1..993da7d 100644
--- a/linden/indra/llcommon/llcommon.cpp
+++ b/linden/indra/llcommon/llcommon.cpp
@@ -3,6 +3,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llcommon.h b/linden/indra/llcommon/llcommon.h
index 8b57579..443870e 100644
--- a/linden/indra/llcommon/llcommon.h
+++ b/linden/indra/llcommon/llcommon.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llcommon.vcproj b/linden/indra/llcommon/llcommon.vcproj
index 403b8c5..ca91e18 100644
--- a/linden/indra/llcommon/llcommon.vcproj
+++ b/linden/indra/llcommon/llcommon.vcproj
@@ -155,9 +155,6 @@
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/linden/indra/llcommon/llcriticaldamp.cpp b/linden/indra/llcommon/llcriticaldamp.cpp
index 2f83192..f574550 100644
--- a/linden/indra/llcommon/llcriticaldamp.cpp
+++ b/linden/indra/llcommon/llcriticaldamp.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llcriticaldamp.h b/linden/indra/llcommon/llcriticaldamp.h
index 670aa9f..6a35e5e 100644
--- a/linden/indra/llcommon/llcriticaldamp.h
+++ b/linden/indra/llcommon/llcriticaldamp.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/lldarray.h b/linden/indra/llcommon/lldarray.h
index 24e8543..291da19 100644
--- a/linden/indra/llcommon/lldarray.h
+++ b/linden/indra/llcommon/lldarray.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/lldarrayptr.h b/linden/indra/llcommon/lldarrayptr.h
index 18e1e93..308101c 100644
--- a/linden/indra/llcommon/lldarrayptr.h
+++ b/linden/indra/llcommon/lldarrayptr.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/lldate.cpp b/linden/indra/llcommon/lldate.cpp
index 211d350..ccc314d 100644
--- a/linden/indra/llcommon/lldate.cpp
+++ b/linden/indra/llcommon/lldate.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/lldate.h b/linden/indra/llcommon/lldate.h
index 8fb6d67..f8bd625 100644
--- a/linden/indra/llcommon/lldate.h
+++ b/linden/indra/llcommon/lldate.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/lldefs.h b/linden/indra/llcommon/lldefs.h
index c0435fb..a3651ff 100644
--- a/linden/indra/llcommon/lldefs.h
+++ b/linden/indra/llcommon/lldefs.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/lldepthstack.h b/linden/indra/llcommon/lldepthstack.h
index 0011f30..f3ea709 100644
--- a/linden/indra/llcommon/lldepthstack.h
+++ b/linden/indra/llcommon/lldepthstack.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/lldlinked.h b/linden/indra/llcommon/lldlinked.h
index 488ef1e..0e39f69 100644
--- a/linden/indra/llcommon/lldlinked.h
+++ b/linden/indra/llcommon/lldlinked.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/lldqueueptr.h b/linden/indra/llcommon/lldqueueptr.h
index 4d8a5ca..aca73d9 100644
--- a/linden/indra/llcommon/lldqueueptr.h
+++ b/linden/indra/llcommon/lldqueueptr.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llendianswizzle.h b/linden/indra/llcommon/llendianswizzle.h
index 34a530c..d06af70 100644
--- a/linden/indra/llcommon/llendianswizzle.h
+++ b/linden/indra/llcommon/llendianswizzle.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llenum.h b/linden/indra/llcommon/llenum.h
index 1dde5f8..310ccd2 100644
--- a/linden/indra/llcommon/llenum.h
+++ b/linden/indra/llcommon/llenum.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llerror.cpp b/linden/indra/llcommon/llerror.cpp
index 57e098e..9bcb415 100644
--- a/linden/indra/llcommon/llerror.cpp
+++ b/linden/indra/llcommon/llerror.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -514,7 +515,11 @@ namespace LLError
{
void initForServer(const std::string& identity)
{
- std::string dir = LLApp::instance()->getOption("configdir");
+ std::string dir = "/opt/linden/etc";
+ if (LLApp::instance())
+ {
+ dir = LLApp::instance()->getOption("configdir").asString();
+ }
commonInit(dir);
#if !LL_WINDOWS
addRecorder(new RecordToSyslog(identity));
diff --git a/linden/indra/llcommon/llerror.h b/linden/indra/llcommon/llerror.h
index 1285491..9c8d018 100644
--- a/linden/indra/llcommon/llerror.h
+++ b/linden/indra/llcommon/llerror.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llerrorcontrol.h b/linden/indra/llcommon/llerrorcontrol.h
index f2c8755..c09a180 100644
--- a/linden/indra/llcommon/llerrorcontrol.h
+++ b/linden/indra/llcommon/llerrorcontrol.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2007-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llerrorlegacy.h b/linden/indra/llcommon/llerrorlegacy.h
index 5438a21..1671d0f 100644
--- a/linden/indra/llcommon/llerrorlegacy.h
+++ b/linden/indra/llcommon/llerrorlegacy.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2007-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llerrorthread.cpp b/linden/indra/llcommon/llerrorthread.cpp
index b9bb605..5f7d448 100644
--- a/linden/indra/llcommon/llerrorthread.cpp
+++ b/linden/indra/llcommon/llerrorthread.cpp
@@ -3,6 +3,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llerrorthread.h b/linden/indra/llcommon/llerrorthread.h
index b2eda32..61bcf4c 100644
--- a/linden/indra/llcommon/llerrorthread.h
+++ b/linden/indra/llcommon/llerrorthread.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llevent.cpp b/linden/indra/llcommon/llevent.cpp
index bbb37c5..a6c4ef0 100644
--- a/linden/indra/llcommon/llevent.cpp
+++ b/linden/indra/llcommon/llevent.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llevent.h b/linden/indra/llcommon/llevent.h
index bcb6ee9..18b0596 100644
--- a/linden/indra/llcommon/llevent.h
+++ b/linden/indra/llcommon/llevent.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/lleventemitter.h b/linden/indra/llcommon/lleventemitter.h
index ddaaca5..6390d34 100644
--- a/linden/indra/llcommon/lleventemitter.h
+++ b/linden/indra/llcommon/lleventemitter.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llfasttimer.cpp b/linden/indra/llcommon/llfasttimer.cpp
index 61b6df2..2b1d58f 100644
--- a/linden/indra/llcommon/llfasttimer.cpp
+++ b/linden/indra/llcommon/llfasttimer.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llfasttimer.h b/linden/indra/llcommon/llfasttimer.h
index 47634ac..4182500 100644
--- a/linden/indra/llcommon/llfasttimer.h
+++ b/linden/indra/llcommon/llfasttimer.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llfile.cpp b/linden/indra/llcommon/llfile.cpp
index feac28f..4520fd1 100644
--- a/linden/indra/llcommon/llfile.cpp
+++ b/linden/indra/llcommon/llfile.cpp
@@ -7,6 +7,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llfile.h b/linden/indra/llcommon/llfile.h
index 5034cf7..9e1a98a 100644
--- a/linden/indra/llcommon/llfile.h
+++ b/linden/indra/llcommon/llfile.h
@@ -7,6 +7,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llfixedbuffer.cpp b/linden/indra/llcommon/llfixedbuffer.cpp
index 795273b..397fcfd 100644
--- a/linden/indra/llcommon/llfixedbuffer.cpp
+++ b/linden/indra/llcommon/llfixedbuffer.cpp
@@ -3,6 +3,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llfixedbuffer.h b/linden/indra/llcommon/llfixedbuffer.h
index 1501250..fbf2338 100644
--- a/linden/indra/llcommon/llfixedbuffer.h
+++ b/linden/indra/llcommon/llfixedbuffer.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llformat.cpp b/linden/indra/llcommon/llformat.cpp
index f088bc6..6a5b531 100644
--- a/linden/indra/llcommon/llformat.cpp
+++ b/linden/indra/llcommon/llformat.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2007-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llformat.h b/linden/indra/llcommon/llformat.h
index 135f9d2..b338591 100644
--- a/linden/indra/llcommon/llformat.h
+++ b/linden/indra/llcommon/llformat.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2007-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llframetimer.cpp b/linden/indra/llcommon/llframetimer.cpp
index d41f904..5ae4a6b 100644
--- a/linden/indra/llcommon/llframetimer.cpp
+++ b/linden/indra/llcommon/llframetimer.cpp
@@ -3,6 +3,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -52,6 +53,50 @@ void LLFrameTimer::updateFrameTime()
sFrameCount++;
}
+void LLFrameTimer::start()
+{
+ reset();
+ mStarted = TRUE;
+}
+
+void LLFrameTimer::stop()
+{
+ mStarted = FALSE;
+}
+
+void LLFrameTimer::reset()
+{
+ mStartTime = sFrameTime;
+ mExpiry = sFrameTime;
+}
+
+// Don't combine pause/unpause with start/stop
+// Useage:
+// LLFrameTime foo; // starts automatically
+// foo.unpause(); // noop but safe
+// foo.pause(); // pauses timer
+// foo.unpause() // unpauses
+// F32 elapsed = foo.getElapsedTimeF32() // does not include time between pause() and unpause()
+// Note: elapsed would also be valid with no unpause() call (= time run until pause() called)
+void LLFrameTimer::pause()
+{
+ if (mStarted)
+ mStartTime = sFrameTime - mStartTime; // save dtime
+ mStarted = FALSE;
+}
+
+void LLFrameTimer::unpause()
+{
+ if (!mStarted)
+ mStartTime = sFrameTime - mStartTime; // restore dtime
+ mStarted = TRUE;
+}
+
+void LLFrameTimer::setTimerExpirySec(F32 expiration)
+{
+ mExpiry = expiration + mStartTime;
+}
+
void LLFrameTimer::setExpiryAt(F64 seconds_since_epoch)
{
mStartTime = sFrameTime;
diff --git a/linden/indra/llcommon/llframetimer.h b/linden/indra/llcommon/llframetimer.h
index 007fe7d..0366e09 100644
--- a/linden/indra/llcommon/llframetimer.h
+++ b/linden/indra/llcommon/llframetimer.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -63,8 +64,7 @@ public:
return sTotalSeconds;
}
- // Call this method once per frame to update the current frame
- // time.
+ // Call this method once per frame to update the current frame time.
static void updateFrameTime();
static S32 getFrameCount() { return sFrameCount; }
@@ -72,10 +72,12 @@ public:
static F32 getFrameDeltaTimeF32();
// MANIPULATORS
- void start() { reset(); mStarted = TRUE; }
- void stop() { mStarted = FALSE; }
- void reset() { mStartTime = sFrameTime; mExpiry = sFrameTime; }
- void setTimerExpirySec(F32 expiration) { mExpiry = expiration + mStartTime; }
+ void start();
+ void stop();
+ void reset();
+ void pause();
+ void unpause();
+ void setTimerExpirySec(F32 expiration);
void setExpiryAt(F64 seconds_since_epoch);
BOOL checkExpirationAndReset(F32 expiration);
F32 getElapsedTimeAndResetF32() { F32 t = F32(sFrameTime - mStartTime); reset(); return t; }
@@ -85,7 +87,7 @@ public:
// ACCESSORS
BOOL hasExpired() const { return (sFrameTime >= mExpiry); }
F32 getTimeToExpireF32() const { return (F32)(mExpiry - sFrameTime); }
- F32 getElapsedTimeF32() const { return (F32)(sFrameTime - mStartTime); }
+ F32 getElapsedTimeF32() const { return mStarted ? (F32)(sFrameTime - mStartTime) : (F32)mStartTime; }
BOOL getStarted() const { return mStarted; }
// return the seconds since epoch when this timer will expire.
diff --git a/linden/indra/llcommon/llhash.h b/linden/indra/llcommon/llhash.h
index bfe5397..c3c4ec9 100644
--- a/linden/indra/llcommon/llhash.h
+++ b/linden/indra/llcommon/llhash.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llindexedqueue.h b/linden/indra/llcommon/llindexedqueue.h
index 040de84..13e9f7a 100644
--- a/linden/indra/llcommon/llindexedqueue.h
+++ b/linden/indra/llcommon/llindexedqueue.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/lllinkedqueue.h b/linden/indra/llcommon/lllinkedqueue.h
index 699667a..9ce5a1b 100644
--- a/linden/indra/llcommon/lllinkedqueue.h
+++ b/linden/indra/llcommon/lllinkedqueue.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llliveappconfig.cpp b/linden/indra/llcommon/llliveappconfig.cpp
index bcffa7c..7923126 100644
--- a/linden/indra/llcommon/llliveappconfig.cpp
+++ b/linden/indra/llcommon/llliveappconfig.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llliveappconfig.h b/linden/indra/llcommon/llliveappconfig.h
index 822410f..f5c73d0 100644
--- a/linden/indra/llcommon/llliveappconfig.h
+++ b/linden/indra/llcommon/llliveappconfig.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/lllivefile.cpp b/linden/indra/llcommon/lllivefile.cpp
index d289671..f116a2a 100644
--- a/linden/indra/llcommon/lllivefile.cpp
+++ b/linden/indra/llcommon/lllivefile.cpp
@@ -3,6 +3,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/lllivefile.h b/linden/indra/llcommon/lllivefile.h
index fbf2bdf..d8381bf 100644
--- a/linden/indra/llcommon/lllivefile.h
+++ b/linden/indra/llcommon/lllivefile.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/lllocalidhashmap.h b/linden/indra/llcommon/lllocalidhashmap.h
index e1d3445..aae0bd9 100644
--- a/linden/indra/llcommon/lllocalidhashmap.h
+++ b/linden/indra/llcommon/lllocalidhashmap.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/lllslconstants.h b/linden/indra/llcommon/lllslconstants.h
index 08c63e3..59d1cc8 100644
--- a/linden/indra/llcommon/lllslconstants.h
+++ b/linden/indra/llcommon/lllslconstants.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llmap.h b/linden/indra/llcommon/llmap.h
index 2bda851..65e3da7 100644
--- a/linden/indra/llcommon/llmap.h
+++ b/linden/indra/llcommon/llmap.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llmemory.cpp b/linden/indra/llcommon/llmemory.cpp
index 8528433..284c8e7 100644
--- a/linden/indra/llcommon/llmemory.cpp
+++ b/linden/indra/llcommon/llmemory.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -30,11 +31,6 @@
#include "llmemory.h"
#include "llmemtype.h"
-// not defining nullfunc will currently crash when trying to use a LLHandle
-template< typename _Ty >
- const typename LLHandle< _Ty >::NullFunc
- LLHandle< _Ty >::sNullFunc = LLHandle< _Ty >::defaultNullFunc;
-
//----------------------------------------------------------------------------
//static
diff --git a/linden/indra/llcommon/llmemory.h b/linden/indra/llcommon/llmemory.h
index 7a7996b..b6f42e3 100644
--- a/linden/indra/llcommon/llmemory.h
+++ b/linden/indra/llcommon/llmemory.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -193,6 +194,14 @@ public:
}
return *this;
}
+
+ // Just exchange the pointers, which will not change the reference counts.
+ static void swap(LLPointer& a, LLPointer& b)
+ {
+ Type* temp = a.mPointer;
+ a.mPointer = b.mPointer;
+ b.mPointer = temp;
+ }
protected:
void ref()
@@ -239,29 +248,28 @@ class LLHandle
{
public:
LLHandle() :
- mPointer(sNullFunc())
+ mPointer(NULL)
{
- ref();
}
LLHandle(Type* ptr) :
- mPointer(nonNull(ptr))
+ mPointer(NULL)
{
- ref();
+ assign(ptr);
}
LLHandle(const LLHandle& ptr) :
- mPointer(ptr.mPointer)
+ mPointer(NULL)
{
- ref();
+ assign(ptr.mPointer);
}
// support conversion up the type hierarchy. See Item 45 in Effective C++, 3rd Ed.
template
LLHandle(const LLHandle& ptr) :
- mPointer(ptr.get())
+ mPointer(NULL)
{
- ref();
+ assign(ptr.get());
}
~LLHandle()
@@ -269,47 +277,39 @@ public:
unref();
}
+ const Type* operator->() const { return nonNull(mPointer); }
+ Type* operator->() { return nonNull(mPointer); }
+
Type* get() const { return mPointer; }
- const Type* operator->() const { return mPointer; }
- Type* operator->() { return mPointer; }
- const Type& operator*() const { return *mPointer; }
- Type& operator*() { return *mPointer; }
+ // we disallow these operations as they expose our null objects to direct manipulation
+ // and bypass the reference counting semantics
+ //const Type& operator*() const { return *nonNull(mPointer); }
+ //Type& operator*() { return *nonNull(mPointer); }
- operator BOOL() const { return (mPointer != sNullFunc()); }
- operator bool() const { return (mPointer != sNullFunc()); }
- bool operator!() const { return (mPointer == sNullFunc()); }
- bool isNull() const { return (mPointer == sNullFunc()); }
- bool notNull() const { return (mPointer != sNullFunc()); }
+ operator BOOL() const { return mPointer != NULL; }
+ operator bool() const { return mPointer != NULL; }
+ bool operator!() const { return mPointer == NULL; }
+ bool isNull() const { return mPointer == NULL; }
+ bool notNull() const { return mPointer != NULL; }
operator Type*() const { return mPointer; }
operator const Type*() const { return mPointer; }
- bool operator !=(Type* ptr) const { return (mPointer != nonNull(ptr)); }
- bool operator ==(Type* ptr) const { return (mPointer == nonNull(ptr)); }
+ bool operator !=(Type* ptr) const { return (mPointer != ptr); }
+ bool operator ==(Type* ptr) const { return (mPointer == ptr); }
bool operator ==(const LLHandle& ptr) const { return (mPointer == ptr.mPointer); }
bool operator < (const LLHandle& ptr) const { return (mPointer < ptr.mPointer); }
bool operator > (const LLHandle& ptr) const { return (mPointer > ptr.mPointer); }
LLHandle& operator =(Type* ptr)
{
- if( mPointer != ptr )
- {
- unref();
- mPointer = nonNull(ptr);
- ref();
- }
-
+ assign(ptr);
return *this;
}
LLHandle& operator =(const LLHandle& ptr)
{
- if( mPointer != ptr.mPointer )
- {
- unref();
- mPointer = ptr.mPointer;
- ref();
- }
+ assign(ptr.mPointer);
return *this;
}
@@ -317,12 +317,7 @@ public:
template
LLHandle& operator =(const LLHandle& ptr)
{
- if( mPointer != ptr.get() )
- {
- unref();
- mPointer = ptr.get();
- ref();
- }
+ assign(ptr.get());
return *this;
}
@@ -344,9 +339,9 @@ protected:
if (mPointer)
{
Type *tempp = mPointer;
- mPointer = sNullFunc();
+ mPointer = NULL;
tempp->unref();
- if (mPointer != sNullFunc())
+ if (mPointer != NULL)
{
llwarns << "Unreference did assignment to non-NULL because of destructor" << llendl;
unref();
@@ -354,19 +349,22 @@ protected:
}
}
- static Type* nonNull(Type* ptr)
+ void assign(Type* ptr)
{
- return ptr == NULL ? sNullFunc() : ptr;
+ if( mPointer != ptr )
+ {
+ unref();
+ mPointer = ptr;
+ ref();
+ }
}
- static Type* defaultNullFunc()
+ static Type* nonNull(Type* ptr)
{
- llerrs << "No null value provided for LLHandle" << llendl;
- return NULL;
+ return ptr == NULL ? sNullFunc() : ptr;
}
protected:
-
Type* mPointer;
};
diff --git a/linden/indra/llcommon/llmemorystream.cpp b/linden/indra/llcommon/llmemorystream.cpp
index ca3311d..ac9e61c 100644
--- a/linden/indra/llcommon/llmemorystream.cpp
+++ b/linden/indra/llcommon/llmemorystream.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llmemorystream.h b/linden/indra/llcommon/llmemorystream.h
index 4210eb9..f00bc28 100644
--- a/linden/indra/llcommon/llmemorystream.h
+++ b/linden/indra/llcommon/llmemorystream.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llmemtype.h b/linden/indra/llcommon/llmemtype.h
index 0af1ed3..501b5f5 100644
--- a/linden/indra/llcommon/llmemtype.h
+++ b/linden/indra/llcommon/llmemtype.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llmortician.cpp b/linden/indra/llcommon/llmortician.cpp
index d76359d..ec1383f 100644
--- a/linden/indra/llcommon/llmortician.cpp
+++ b/linden/indra/llcommon/llmortician.cpp
@@ -3,6 +3,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llmortician.h b/linden/indra/llcommon/llmortician.h
index c3e4b05..353f263 100644
--- a/linden/indra/llcommon/llmortician.h
+++ b/linden/indra/llcommon/llmortician.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llnametable.h b/linden/indra/llcommon/llnametable.h
index 80b9be4..c3bdfbd 100644
--- a/linden/indra/llcommon/llnametable.h
+++ b/linden/indra/llcommon/llnametable.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llpagemem.h b/linden/indra/llcommon/llpagemem.h
index 7081251..f3d6061 100644
--- a/linden/indra/llcommon/llpagemem.h
+++ b/linden/indra/llcommon/llpagemem.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llpreprocessor.h b/linden/indra/llcommon/llpreprocessor.h
index 9db0108..495b9e8 100644
--- a/linden/indra/llcommon/llpreprocessor.h
+++ b/linden/indra/llcommon/llpreprocessor.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -41,6 +42,13 @@
#define LL_BIG_ENDIAN 1
#endif
+// Per-compiler switches
+#ifdef __GNUC__
+#define LL_FORCE_INLINE inline __attribute__((always_inline))
+#else
+#define LL_FORCE_INLINE __forceinline
+#endif
+
// Per-OS feature switches.
#if LL_DARWIN
@@ -81,9 +89,9 @@
#endif
// Deal with the differeneces on Windows
-#if defined(LL_WINDOWS)
-#define snprintf _snprintf /*Flawfinder: ignore*/
-#endif // LL_WINDOWS
+#if LL_WINDOWS
+#define snprintf safe_snprintf /* Flawfinder: ignore */
+#endif // LL_WINDOWS
// Static linking with apr on windows needs to be declared.
#ifdef LL_WINDOWS
diff --git a/linden/indra/llcommon/llpriqueuemap.h b/linden/indra/llcommon/llpriqueuemap.h
index 20cbc6b..deda338 100644
--- a/linden/indra/llcommon/llpriqueuemap.h
+++ b/linden/indra/llcommon/llpriqueuemap.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llprocessor.cpp b/linden/indra/llcommon/llprocessor.cpp
index 3408cb1..d269e35 100644
--- a/linden/indra/llcommon/llprocessor.cpp
+++ b/linden/indra/llcommon/llprocessor.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -103,6 +104,7 @@ static void _Delay(unsigned int ms)
CProcessor::CProcessor()
{
uqwFrequency = 0;
+ strCPUName[0] = 0;
memset(&CPUInfo, 0, sizeof(CPUInfo));
}
@@ -245,77 +247,44 @@ bool CProcessor::AnalyzeIntelProcessor()
CPUInfo.uiType = (eaxreg >> 12) & 0x3;
CPUInfo.uiBrandID = ebxreg & 0xF;
- // Now we can translate the type number to a more understandable string format
- switch (CPUInfo.uiType)
+ static const char* INTEL_BRAND[] =
{
- case 0: // Type = 0: Original OEM processor
- strcpy(CPUInfo.strType, "Original OEM"); /* Flawfinder: ignore */
- strcpy(strCPUName, CPUInfo.strType); /* Flawfinder: ignore */
- strcat(strCPUName, " "); /* Flawfinder: ignore */
- break;
- case 1: // Type = 1: Overdrive processor
- strcpy(CPUInfo.strType, "Overdrive"); /* Flawfinder: ignore */
- strcpy(strCPUName, CPUInfo.strType); /* Flawfinder: ignore */
- strcat(strCPUName, " "); /* Flawfinder: ignore */
- break;
- case 2: // Type = 2: Dual-capable processor
- strcpy(CPUInfo.strType, "Dual-capable"); /* Flawfinder: ignore */
- strcpy(strCPUName, CPUInfo.strType); /* Flawfinder: ignore */
- strcat(strCPUName, " "); /* Flawfinder: ignore */
- break;
- case 3: // Type = 3: Reserved for future use
- strcpy(CPUInfo.strType, "Reserved"); /* Flawfinder: ignore */
- break;
- default: // This should be never called, cause we just mask 2 bits --> [0..3]
- strcpy(CPUInfo.strType, "Unknown"); /* Flawfinder: ignore */
- break;
- }
-
- // Then we translate the brand id:
- switch (CPUInfo.uiBrandID)
+ /* 0x00 */ "",
+ /* 0x01 */ "0.18 micron Intel Celeron",
+ /* 0x02 */ "0.18 micron Intel Pentium III",
+ /* 0x03 */ "0.13 micron Intel Celeron",
+ /* 0x04 */ "0.13 micron Intel Pentium III",
+ /* 0x05 */ "",
+ /* 0x06 */ "0.13 micron Intel Pentium III mobile",
+ /* 0x07 */ "0.13 micron Intel Celeron mobile",
+ /* 0x08 */ "0.18 micron Intel Pentium 4",
+ /* 0x09 */ "0.13 micron Intel Pentium 4",
+ /* 0x0A */ "0.13 micron Intel Pentium 4",
+ /* 0x0B */ "0.13 micron Intel Pentium 4 Xeon",
+ /* 0x0C */ "",
+ /* 0x0D */ "",
+ /* 0x0E */ "0.18 micron Intel Pentium 4 Xeon",
+ /* 0x0F */ "",
+ /* 0x10 */ "",
+ /* 0x11 */ "",
+ /* 0x12 */ "Intel Celeron M",
+ /* 0x13 */ "mobile Intel Celeron",
+ /* 0x14 */ "Intel Celeron",
+ /* 0x15 */ "mobile Intel",
+ /* 0x16 */ "Intel Pentium M",
+ /* 0x17 */ "mobile Intel Celeron",
+ };
+
+ // Only override the brand if we have it in the lookup table. We should
+ // already have a string here from GetCPUInfo(). JC
+ if (CPUInfo.uiBrandID < sizeof(INTEL_BRAND))
{
- case 0: // Brand id = 0: Brand id not supported on this processor
- strcpy(CPUInfo.strBrandID, "Not supported"); /* Flawfinder: ignore */
- break;
- case 1: // Brand id = 1: Intel Celeron (0.18 micron) processor
- strcpy(CPUInfo.strBrandID, "0.18 micron Intel Celeron"); /* Flawfinder: ignore */
- break;
- case 2: // Brand id = 2: Intel Pentium III (0.18 micron) processor
- strcpy(CPUInfo.strBrandID, "0.18 micron Intel Pentium III"); /* Flawfinder: ignore */
- break;
- case 3: // Brand id = 3: Model dependent
- if (CPUInfo.uiModel == 6) // If the cpu model is Celeron (well, I'm NOT SURE!!!)
- strcpy(CPUInfo.strBrandID, "0.13 micron Intel Celeron"); /* Flawfinder: ignore */
- else
- strcpy(CPUInfo.strBrandID, "0.18 micron Intel Pentium III Xeon"); /* Flawfinder: ignore */
- break;
- case 4: // Brand id = 4: Intel Pentium III Tualatin (0.13 micron) processor
- strcpy(CPUInfo.strBrandID, "0.13 micron Intel Pentium III"); /* Flawfinder: ignore */
- break;
- case 6: // Brand id = 6: Intel Pentium III mobile (0.13 micron) processor
- strcpy(CPUInfo.strBrandID, "0.13 micron Intel Pentium III mobile"); /* Flawfinder: ignore */
- break;
- case 7: // Brand id = 7: Intel Celeron mobile (0.13 micron) processor
- strcpy(CPUInfo.strBrandID, "0.13 micron Intel Celeron mobile"); /* Flawfinder: ignore */
- break;
- case 8: // Brand id = 8: Intel Pentium 4 Willamette (0.18 micron) processor
- strcpy(CPUInfo.strBrandID, "0.18 micron Intel Pentium 4"); /* Flawfinder: ignore */
- break;
- case 9: // Brand id = 9: Intel Pentium 4 Northwood (0.13 micron) processor
- strcpy(CPUInfo.strBrandID, "0.13 micron Intel Pentium 4"); /* Flawfinder: ignore */
- break;
- case 0xA: // Brand id = 0xA: Intel Pentium 4 Northwood (0.13 micron processor)
- strcpy(CPUInfo.strBrandID, "0.13 micron Intel Pentium 4"); /* Flawfinder: ignore */
- break; // No idea, where the difference to id=9 is
- case 0xB: // Brand id = 0xB: Intel Pentium 4 Northwood Xeon (0.13 micron processor)
- strcpy(CPUInfo.strBrandID, "0.13 micron Intel Pentium 4 Xeon"); /* Flawfinder: ignore */
- break;
- case 0xE: // Brand id = 0xE: Intel Pentium 4 Willamette Xeon (0.18 micron processor)
- strcpy(CPUInfo.strBrandID, "0.18 micron Intel Pentium 4 Xeon"); /* Flawfinder: ignore */
- break;
- default: // Should be never called, but sure is sure
- strcpy(CPUInfo.strBrandID, "Unknown"); /* Flawfinder: ignore */
- break;
+ strcpy(CPUInfo.strBrandID, INTEL_BRAND[CPUInfo.uiBrandID]);
+
+ if (CPUInfo.uiBrandID == 3 && CPUInfo.uiModel == 6)
+ {
+ strcpy(CPUInfo.strBrandID, "0.18 micron Intel Pentium III Xeon");
+ }
}
// Then we translate the cpu family
@@ -617,7 +586,7 @@ bool CProcessor::AnalyzeIntelProcessor()
else
{
// If there's no serial number support we just put "No serial number"
- snprintf( /* Flawfinder: ignore */
+ snprintf( /* Flawfinder: ignore */
CPUInfo.strProcessorSerial,
sizeof(CPUInfo.strProcessorSerial),
"No Processor Serial Number");
@@ -667,33 +636,6 @@ bool CProcessor::AnalyzeAMDProcessor()
CPUInfo.uiFamily = (eaxreg >> 8) & 0xF;
CPUInfo.uiType = (eaxreg >> 12) & 0x3;
- // After that, we translate the processor type (see CProcessor::AnalyzeIntelProcessor()
- // for further comments on this)
- switch (CPUInfo.uiType)
- {
- case 0:
- strcpy(CPUInfo.strType, "Original OEM"); /* Flawfinder: ignore */
- strcpy(strCPUName, CPUInfo.strType); /* Flawfinder: ignore */
- strcat(strCPUName, " "); /*Flawfinder: ignore*/
- break;
- case 1:
- strcpy(CPUInfo.strType, "Overdrive"); /* Flawfinder: ignore */
- strcpy(strCPUName, CPUInfo.strType); /* Flawfinder: ignore */
- strcat(strCPUName, " "); /*Flawfinder: ignore*/
- break;
- case 2:
- strcpy(CPUInfo.strType, "Dual-capable"); /* Flawfinder: ignore */
- strcpy(strCPUName, CPUInfo.strType); /* Flawfinder: ignore */
- strcat(strCPUName, " "); /*Flawfinder: ignore*/
- break;
- case 3:
- strcpy(CPUInfo.strType, "Reserved"); /* Flawfinder: ignore */
- break;
- default:
- strcpy(CPUInfo.strType, "Unknown"); /* Flawfinder: ignore */
- break;
- }
-
// Now we check if the processor supports the brand id string extended CPUID level
if (CPUInfo.MaxSupportedExtendedLevel >= 0x80000004)
{
@@ -728,7 +670,7 @@ bool CProcessor::AnalyzeAMDProcessor()
else
{
// Or just tell there is no brand id string support
- strcpy(CPUInfo.strBrandID, "Not supported"); /* Flawfinder: ignore */
+ strcpy(CPUInfo.strBrandID, ""); /* Flawfinder: ignore */
}
// After that we translate the processor family
@@ -993,7 +935,7 @@ bool CProcessor::AnalyzeAMDProcessor()
if ((ecxreg >> 24) > 0)
{
CPUInfo._L1.Data.bPresent = true;
- snprintf(CPUInfo._L1.Data.strSize, sizeof(CPUInfo._L1.Data.strSize), "%d KB", ecxreg >> 24); /*Flawfinder: ignore*/
+ snprintf(CPUInfo._L1.Data.strSize, sizeof(CPUInfo._L1.Data.strSize), "%d KB", ecxreg >> 24); /* Flawfinder: ignore */
CPUInfo._L1.Data.uiAssociativeWays = (ecxreg >> 15) & 0xFF;
CPUInfo._L1.Data.uiLineSize = ecxreg & 0xFF;
}
@@ -1001,7 +943,7 @@ bool CProcessor::AnalyzeAMDProcessor()
if ((edxreg >> 24) > 0)
{
CPUInfo._L1.Instruction.bPresent = true;
- snprintf(CPUInfo._L1.Instruction.strSize, sizeof(CPUInfo._L1.Instruction.strSize), "%d KB", edxreg >> 24); /*Flawfinder: ignore*/
+ snprintf(CPUInfo._L1.Instruction.strSize, sizeof(CPUInfo._L1.Instruction.strSize), "%d KB", edxreg >> 24); /* Flawfinder: ignore */
CPUInfo._L1.Instruction.uiAssociativeWays = (edxreg >> 15) & 0xFF;
CPUInfo._L1.Instruction.uiLineSize = edxreg & 0xFF;
}
@@ -1025,7 +967,7 @@ bool CProcessor::AnalyzeAMDProcessor()
if (((ecxreg >> 12) & 0xF) > 0)
{
CPUInfo._L2.bPresent = true;
- snprintf(CPUInfo._L2.strSize, sizeof(CPUInfo._L2.strSize), "%d KB", ecxreg >> 16); /*Flawfinder: ignore*/
+ snprintf(CPUInfo._L2.strSize, sizeof(CPUInfo._L2.strSize), "%d KB", ecxreg >> 16); /* Flawfinder: ignore */
switch ((ecxreg >> 12) & 0xF)
{
case 1:
@@ -1118,29 +1060,9 @@ bool CProcessor::AnalyzeUnknownProcessor()
strcpy(CPUInfo.strProcessorSerial, "Unknown / Not supported"); /*Flawfinder: ignore*/
// For the family, model and brand id we can only print the numeric value
- snprintf(CPUInfo.strBrandID, sizeof(CPUInfo.strBrandID), "Brand-ID number %d", CPUInfo.uiBrandID); /*Flawfinder: ignore*/
- snprintf(CPUInfo.strFamily, sizeof(CPUInfo.strFamily), "Family number %d", CPUInfo.uiFamily); /*Flawfinder: ignore*/
- snprintf(CPUInfo.strModel, sizeof(CPUInfo.strModel), "Model number %d", CPUInfo.uiModel); /*Flawfinder: ignore*/
-
- // Nevertheless we can determine the processor type
- switch (CPUInfo.uiType)
- {
- case 0:
- strcpy(CPUInfo.strType, "Original OEM"); /*Flawfinder: ignore*/
- break;
- case 1:
- strcpy(CPUInfo.strType, "Overdrive"); /*Flawfinder: ignore*/
- break;
- case 2:
- strcpy(CPUInfo.strType, "Dual-capable"); /*Flawfinder: ignore*/
- break;
- case 3:
- strcpy(CPUInfo.strType, "Reserved"); /*Flawfinder: ignore*/
- break;
- default:
- strcpy(CPUInfo.strType, "Unknown"); /*Flawfinder: ignore*/
- break;
- }
+ snprintf(CPUInfo.strBrandID, sizeof(CPUInfo.strBrandID), "Brand-ID number %d", CPUInfo.uiBrandID); /* Flawfinder: ignore */
+ snprintf(CPUInfo.strFamily, sizeof(CPUInfo.strFamily), "Family number %d", CPUInfo.uiFamily); /* Flawfinder: ignore */
+ snprintf(CPUInfo.strModel, sizeof(CPUInfo.strModel), "Model number %d", CPUInfo.uiModel); /* Flawfinder: ignore */
// And thats it
return true;
@@ -1653,6 +1575,8 @@ const ProcessorInfo *CProcessor::GetCPUInfo()
*((unsigned long *) CPUInfo.strVendor) = ebxreg;
*((unsigned long *) (CPUInfo.strVendor+4)) = edxreg;
*((unsigned long *) (CPUInfo.strVendor+8)) = ecxreg;
+ // Null terminate for string comparisons below.
+ CPUInfo.strVendor[12] = 0;
// We can also read the max. supported standard CPUID level
CPUInfo.MaxSupportedLevel = eaxreg & 0xFFFF;
@@ -1668,22 +1592,52 @@ const ProcessorInfo *CProcessor::GetCPUInfo()
CPUInfo.MaxSupportedExtendedLevel = eaxreg;
// Then we switch to the specific processor vendors
- switch (ebxreg)
+ // See http://www.sandpile.org/ia32/cpuid.htm
+ if (!strcmp(CPUInfo.strVendor, "GenuineIntel"))
{
- case 0x756E6547: // GenuineIntel
- AnalyzeIntelProcessor();
- break;
- case 0x68747541: // AuthenticAMD
- AnalyzeAMDProcessor();
- break;
- case 0x69727943: // CyrixInstead
- // I really do not know anyone owning such a piece of crab
- // So we analyze it as an unknown processor *ggggg*
- default:
- AnalyzeUnknownProcessor();
- break;
+ AnalyzeIntelProcessor();
+ }
+ else if (!strcmp(CPUInfo.strVendor, "AuthenticAMD"))
+ {
+ AnalyzeAMDProcessor();
+ }
+ else if (!strcmp(CPUInfo.strVendor, "UMC UMC UMC"))
+ {
+ AnalyzeUnknownProcessor();
+ }
+ else if (!strcmp(CPUInfo.strVendor, "CyrixInstead"))
+ {
+ AnalyzeUnknownProcessor();
+ }
+ else if (!strcmp(CPUInfo.strVendor, "NexGenDriven"))
+ {
+ AnalyzeUnknownProcessor();
+ }
+ else if (!strcmp(CPUInfo.strVendor, "CentaurHauls"))
+ {
+ AnalyzeUnknownProcessor();
+ }
+ else if (!strcmp(CPUInfo.strVendor, "RiseRiseRise"))
+ {
+ AnalyzeUnknownProcessor();
+ }
+ else if (!strcmp(CPUInfo.strVendor, "SiS SiS SiS"))
+ {
+ AnalyzeUnknownProcessor();
+ }
+ else if (!strcmp(CPUInfo.strVendor, "GenuineTMx86"))
+ {
+ // Transmeta
+ AnalyzeUnknownProcessor();
+ }
+ else if (!strcmp(CPUInfo.strVendor, "Geode by NSC"))
+ {
+ AnalyzeUnknownProcessor();
+ }
+ else
+ {
+ AnalyzeUnknownProcessor();
}
-
#endif
// After all we return the class CPUInfo member var
return (&CPUInfo);
@@ -1767,6 +1721,7 @@ void CProcessor::TranslateProcessorConfiguration()
CProcessor::CProcessor()
{
uqwFrequency = 0;
+ strCPUName[0] = 0;
memset(&CPUInfo, 0, sizeof(CPUInfo));
}
@@ -1970,7 +1925,7 @@ const ProcessorInfo *CProcessor::GetCPUInfo()
if(l1dcachesize != 0)
{
CPUInfo._L1.Data.bPresent = true;
- snprintf(CPUInfo._L1.Data.strSize, sizeof(CPUInfo._L1.Data.strSize), "%d KB", l1dcachesize / 1024); /* Flawfinder: ignore */
+ snprintf(CPUInfo._L1.Data.strSize, sizeof(CPUInfo._L1.Data.strSize), "%d KB", l1dcachesize / 1024); /* Flawfinder: ignore */
// CPUInfo._L1.Data.uiAssociativeWays = ???;
CPUInfo._L1.Data.uiLineSize = cachelinesize;
}
@@ -1978,7 +1933,7 @@ const ProcessorInfo *CProcessor::GetCPUInfo()
if(l1icachesize != 0)
{
CPUInfo._L1.Instruction.bPresent = true;
- snprintf(CPUInfo._L1.Instruction.strSize, sizeof(CPUInfo._L1.Instruction.strSize), "%d KB", l1icachesize / 1024); /* Flawfinder: ignore */
+ snprintf(CPUInfo._L1.Instruction.strSize, sizeof(CPUInfo._L1.Instruction.strSize), "%d KB", l1icachesize / 1024); /* Flawfinder: ignore */
// CPUInfo._L1.Instruction.uiAssociativeWays = ???;
CPUInfo._L1.Instruction.uiLineSize = cachelinesize;
}
@@ -1986,7 +1941,7 @@ const ProcessorInfo *CProcessor::GetCPUInfo()
if(l2cachesize != 0)
{
CPUInfo._L2.bPresent = true;
- snprintf(CPUInfo._L2.strSize, sizeof(CPUInfo._L2.strSize), "%d KB", l2cachesize / 1024); /* Flawfinder: ignore */
+ snprintf(CPUInfo._L2.strSize, sizeof(CPUInfo._L2.strSize), "%d KB", l2cachesize / 1024); /* Flawfinder: ignore */
// CPUInfo._L2.uiAssociativeWays = ???;
CPUInfo._L2.uiLineSize = cachelinesize;
}
@@ -1994,7 +1949,7 @@ const ProcessorInfo *CProcessor::GetCPUInfo()
if(l3cachesize != 0)
{
CPUInfo._L2.bPresent = true;
- snprintf(CPUInfo._L2.strSize, sizeof(CPUInfo._L2.strSize), "%d KB", l3cachesize / 1024); /* Flawfinder: ignore */
+ snprintf(CPUInfo._L2.strSize, sizeof(CPUInfo._L2.strSize), "%d KB", l3cachesize / 1024); /* Flawfinder: ignore */
// CPUInfo._L2.uiAssociativeWays = ???;
CPUInfo._L2.uiLineSize = cachelinesize;
}
diff --git a/linden/indra/llcommon/llprocessor.h b/linden/indra/llcommon/llprocessor.h
index cbadb42..fd9a5da 100644
--- a/linden/indra/llcommon/llprocessor.h
+++ b/linden/indra/llcommon/llprocessor.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llptrskiplist.h b/linden/indra/llcommon/llptrskiplist.h
index df56556..f695f88 100644
--- a/linden/indra/llcommon/llptrskiplist.h
+++ b/linden/indra/llcommon/llptrskiplist.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llptrskipmap.h b/linden/indra/llcommon/llptrskipmap.h
index c4e131f..e2fdc7f 100644
--- a/linden/indra/llcommon/llptrskipmap.h
+++ b/linden/indra/llcommon/llptrskipmap.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llqueuedthread.cpp b/linden/indra/llcommon/llqueuedthread.cpp
index 2e4324b..7eaaf68 100644
--- a/linden/indra/llcommon/llqueuedthread.cpp
+++ b/linden/indra/llcommon/llqueuedthread.cpp
@@ -3,6 +3,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llqueuedthread.h b/linden/indra/llcommon/llqueuedthread.h
index 7231285..18a44c5 100644
--- a/linden/indra/llcommon/llqueuedthread.h
+++ b/linden/indra/llcommon/llqueuedthread.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llrun.cpp b/linden/indra/llcommon/llrun.cpp
index 6cdae74..131030e 100644
--- a/linden/indra/llcommon/llrun.cpp
+++ b/linden/indra/llcommon/llrun.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llrun.h b/linden/indra/llcommon/llrun.h
index 696a226..649c7b0 100644
--- a/linden/indra/llcommon/llrun.h
+++ b/linden/indra/llcommon/llrun.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llsd.cpp b/linden/indra/llcommon/llsd.cpp
index 342e356..376a0de 100644
--- a/linden/indra/llcommon/llsd.cpp
+++ b/linden/indra/llcommon/llsd.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llsd.h b/linden/indra/llcommon/llsd.h
index 625b480..bd24ecf 100644
--- a/linden/indra/llcommon/llsd.h
+++ b/linden/indra/llcommon/llsd.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llsdserialize.cpp b/linden/indra/llcommon/llsdserialize.cpp
index 653fc66..d262ca1 100644
--- a/linden/indra/llcommon/llsdserialize.cpp
+++ b/linden/indra/llcommon/llsdserialize.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llsdserialize.h b/linden/indra/llcommon/llsdserialize.h
index 76c65c2..4a73b60 100644
--- a/linden/indra/llcommon/llsdserialize.h
+++ b/linden/indra/llcommon/llsdserialize.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llsdserialize_xml.cpp b/linden/indra/llcommon/llsdserialize_xml.cpp
index bb36fa7..04cdd57 100644
--- a/linden/indra/llcommon/llsdserialize_xml.cpp
+++ b/linden/indra/llcommon/llsdserialize_xml.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -253,7 +254,7 @@ public:
Impl();
~Impl();
- LLSD parse(std::istream& input);
+ S32 parse(std::istream& input, LLSD& data);
void parsePart(const char *buf, int len);
@@ -355,7 +356,7 @@ static unsigned get_till_eol(std::istream& input, char *buf, unsigned bufsize)
return count;
}
-LLSD LLSDXMLParser::Impl::parse(std::istream& input)
+S32 LLSDXMLParser::Impl::parse(std::istream& input, LLSD& data)
{
reset();
XML_Status status;
@@ -399,11 +400,13 @@ LLSD LLSDXMLParser::Impl::parse(std::istream& input)
{
((char*) buffer)[count? count - 1 : 0] = '\0';
llinfos << "LLSDXMLParser::Impl::parse: XML_STATUS_ERROR parsing:" << (char*) buffer << llendl;
- return LLSD();
+ data = LLSD();
+ return -1;
}
clear_eol(input);
- return mResult;
+ data = mResult;
+ return 1;
}
void LLSDXMLParser::Impl::reset()
@@ -722,6 +725,5 @@ void LLSDXMLParser::parsePart(const char *buf, int len)
// virtual
S32 LLSDXMLParser::parse(std::istream& input, LLSD& data) const
{
- data = impl.parse(input);
- return 0;
+ return impl.parse(input, data);
}
diff --git a/linden/indra/llcommon/llsdserialize_xml.h b/linden/indra/llcommon/llsdserialize_xml.h
index 0450acb..0546ea4 100644
--- a/linden/indra/llcommon/llsdserialize_xml.h
+++ b/linden/indra/llcommon/llsdserialize_xml.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llsdutil.cpp b/linden/indra/llcommon/llsdutil.cpp
index 0f295a1..d30afc7 100644
--- a/linden/indra/llcommon/llsdutil.cpp
+++ b/linden/indra/llcommon/llsdutil.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -40,7 +41,7 @@
# include
#endif
-
+#include "llsdserialize.h"
// vector3
LLSD ll_sd_from_vector3(const LLVector3& vec)
@@ -61,6 +62,27 @@ LLVector3 ll_vector3_from_sd(const LLSD& sd, S32 start_index)
return rv;
}
+// vector4
+LLSD ll_sd_from_vector4(const LLVector4& vec)
+{
+ LLSD rv;
+ rv.append((F64)vec.mV[VX]);
+ rv.append((F64)vec.mV[VY]);
+ rv.append((F64)vec.mV[VZ]);
+ rv.append((F64)vec.mV[VW]);
+ return rv;
+}
+
+LLVector4 ll_vector4_from_sd(const LLSD& sd, S32 start_index)
+{
+ LLVector4 rv;
+ rv.mV[VX] = (F32)sd[start_index].asReal();
+ rv.mV[VY] = (F32)sd[++start_index].asReal();
+ rv.mV[VZ] = (F32)sd[++start_index].asReal();
+ rv.mV[VW] = (F32)sd[++start_index].asReal();
+ return rv;
+}
+
// vector3d
LLSD ll_sd_from_vector3d(const LLVector3d& vec)
{
@@ -227,9 +249,39 @@ U32 ll_ipaddr_from_sd(const LLSD& sd)
LLSD ll_string_from_binary(const LLSD& sd)
{
std::vector value = sd.asBinary();
- char* c_str = new char[value.size() + 1];
- memcpy(c_str, &value[0], value.size());
- c_str[value.size()] = '\0';
+ std::string str;
+ str.resize(value.size());
+ memcpy(&str[0], &value[0], value.size());
+ return str;
+}
- return c_str;
+// Converts an LLSD string to an LLSD binary
+LLSD ll_binary_from_string(const LLSD& sd)
+{
+ std::vector binary_value;
+
+ LLString string_value = sd.asString();
+ const char* string_p = string_value.c_str();
+ while (*string_p)
+ {
+ binary_value.push_back(*string_p);
+ string_p++;
+ }
+
+ binary_value.push_back('\0');
+
+ return binary_value;
+}
+
+char* ll_print_sd(const LLSD& sd)
+{
+ const U32 bufferSize = 10 * 1024;
+ static char buffer[bufferSize];
+ std::ostringstream stream;
+ //stream.rdbuf()->pubsetbuf(buffer, bufferSize);
+ stream << LLSDOStreamer(sd);
+ stream << std::ends;
+ strncpy(buffer, stream.str().c_str(), bufferSize);
+ buffer[bufferSize - 1] = '\0';
+ return buffer;
}
diff --git a/linden/indra/llcommon/llsdutil.h b/linden/indra/llcommon/llsdutil.h
index ca6b76f..6344c50 100644
--- a/linden/indra/llcommon/llsdutil.h
+++ b/linden/indra/llcommon/llsdutil.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -32,6 +33,7 @@
#include "llsd.h"
#include "../llmath/v3math.h"
+#include "../llmath/v4math.h"
#include "../llmath/v3dmath.h"
#include "../llmath/v2math.h"
#include "../llmath/llquaternion.h"
@@ -42,6 +44,10 @@
LLSD ll_sd_from_vector3(const LLVector3& vec);
LLVector3 ll_vector3_from_sd(const LLSD& sd, S32 start_index = 0);
+// vector4
+LLSD ll_sd_from_vector4(const LLVector4& vec);
+LLVector4 ll_vector4_from_sd(const LLSD& sd, S32 start_index = 0);
+
// vector3d (double)
LLSD ll_sd_from_vector3d(const LLVector3d& vec);
LLVector3d ll_vector3d_from_sd(const LLSD& sd, S32 start_index = 0);
@@ -73,4 +79,10 @@ U32 ll_ipaddr_from_sd(const LLSD& sd);
// Binary to string
LLSD ll_string_from_binary(const LLSD& sd);
+//String to binary
+LLSD ll_binary_from_string(const LLSD& sd);
+
+// Serializes sd to static buffer and returns pointer, useful for gdb debugging.
+char* ll_print_sd(const LLSD& sd);
+
#endif // LL_LLSDUTIL_H
diff --git a/linden/indra/llcommon/llsecondlifeurls.cpp b/linden/indra/llcommon/llsecondlifeurls.cpp
index 4372373..53a1906 100644
--- a/linden/indra/llcommon/llsecondlifeurls.cpp
+++ b/linden/indra/llcommon/llsecondlifeurls.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llsecondlifeurls.h b/linden/indra/llcommon/llsecondlifeurls.h
index 1f7d359..d4d296b 100644
--- a/linden/indra/llcommon/llsecondlifeurls.h
+++ b/linden/indra/llcommon/llsecondlifeurls.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llsimplehash.h b/linden/indra/llcommon/llsimplehash.h
index 259f140..4e0d5ea 100644
--- a/linden/indra/llcommon/llsimplehash.h
+++ b/linden/indra/llcommon/llsimplehash.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llskiplist.h b/linden/indra/llcommon/llskiplist.h
index bd28cea..be3385d 100644
--- a/linden/indra/llcommon/llskiplist.h
+++ b/linden/indra/llcommon/llskiplist.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llskipmap.h b/linden/indra/llcommon/llskipmap.h
index 85a84e5..c2c0092 100644
--- a/linden/indra/llcommon/llskipmap.h
+++ b/linden/indra/llcommon/llskipmap.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llstack.h b/linden/indra/llcommon/llstack.h
index b3bb81f..36c2e1e 100644
--- a/linden/indra/llcommon/llstack.h
+++ b/linden/indra/llcommon/llstack.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llstat.cpp b/linden/indra/llcommon/llstat.cpp
index 61893e2..4e43923 100644
--- a/linden/indra/llcommon/llstat.cpp
+++ b/linden/indra/llcommon/llstat.cpp
@@ -3,6 +3,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -118,8 +119,9 @@ void LLStatAccum::impl::sum(F64 value, U64 when)
}
if (when < mLastTime)
{
- llwarns << "LLStatAccum::sum clock has gone backwards from "
- << mLastTime << " to " << when << ", resetting" << llendl;
+ // JAMESDEBUG spams on Athlon
+ //llwarns << "LLStatAccum::sum clock has gone backwards from "
+ // << mLastTime << " to " << when << ", resetting" << llendl;
reset(when);
return;
diff --git a/linden/indra/llcommon/llstat.h b/linden/indra/llcommon/llstat.h
index 09b6028..9266b60 100644
--- a/linden/indra/llcommon/llstat.h
+++ b/linden/indra/llcommon/llstat.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llstatenums.h b/linden/indra/llcommon/llstatenums.h
index 6860ca0..fc618df 100644
--- a/linden/indra/llcommon/llstatenums.h
+++ b/linden/indra/llcommon/llstatenums.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llstl.h b/linden/indra/llcommon/llstl.h
index ae0dc25..06980a1 100644
--- a/linden/indra/llcommon/llstl.h
+++ b/linden/indra/llcommon/llstl.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llstreamtools.cpp b/linden/indra/llcommon/llstreamtools.cpp
index 2c78e05..d70fa60 100644
--- a/linden/indra/llcommon/llstreamtools.cpp
+++ b/linden/indra/llcommon/llstreamtools.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llstreamtools.h b/linden/indra/llcommon/llstreamtools.h
index cd92911..c339dde 100644
--- a/linden/indra/llcommon/llstreamtools.h
+++ b/linden/indra/llcommon/llstreamtools.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llstrider.h b/linden/indra/llcommon/llstrider.h
index efc2ae4..707d10e 100644
--- a/linden/indra/llcommon/llstrider.h
+++ b/linden/indra/llcommon/llstrider.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llstring.cpp b/linden/indra/llcommon/llstring.cpp
index c9f684f..22d7b47 100644
--- a/linden/indra/llcommon/llstring.cpp
+++ b/linden/indra/llcommon/llstring.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -673,6 +674,33 @@ std::string mbcsstring_makeASCII(const std::string& wstr)
return out_str;
}
+#if LL_WINDOWS
+/* If the size of the passed in buffer is not large enough to hold the string,
+ * two bad things happen:
+ * 1. resulting formatted string is NOT null terminated
+ * 2. Depending on the platform, the return value could be a) the required
+ * size of the buffer to copy the entire formatted string or b) -1.
+ * On Windows with VS.Net 2003, it returns -1 e.g.
+ *
+ * safe_snprintf always adds a NULL terminator so that the caller does not
+ * need to check for return value or need to add the NULL terminator.
+ * It does not, however change the return value - to let the caller know
+ * that the passed in buffer size was not large enough to hold the formatted string.
+ *
+ */
+int safe_snprintf(char *str, size_t size, const char *format, ...)
+{
+ va_list args;
+ va_start(args, format);
+
+ int num_written = _vsnprintf(str, size, format, args); /* Flawfinder: ignore */
+ va_end(args);
+
+ str[size-1] = '\0'; // always null terminate
+ return num_written;
+}
+#endif // LL_WINDOWS
+
S32 LLStringOps::collate(const llwchar* a, const llwchar* b)
{
#if LL_WINDOWS
diff --git a/linden/indra/llcommon/llstring.h b/linden/indra/llcommon/llstring.h
index 0485a1e..d901e61 100644
--- a/linden/indra/llcommon/llstring.h
+++ b/linden/indra/llcommon/llstring.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -38,6 +39,7 @@
#include
#include
#include
+#include /* for vsnprintf */
#if LL_LINUX
#include
#include
@@ -464,6 +466,9 @@ std::ostream& operator<<(std::ostream &s, const LLStringBase &str)
std::ostream& operator<<(std::ostream &s, const LLWString &wstr);
+#if LL_WINDOWS
+int safe_snprintf(char *str, size_t size, const char *format, ...);
+#endif // LL_WINDOWS
/**
* Many of the 'strip' and 'replace' methods of LLStringBase need
diff --git a/linden/indra/llcommon/llstringtable.cpp b/linden/indra/llcommon/llstringtable.cpp
index 4a76ed6..30db4f7 100644
--- a/linden/indra/llcommon/llstringtable.cpp
+++ b/linden/indra/llcommon/llstringtable.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llstringtable.h b/linden/indra/llcommon/llstringtable.h
index ddfef88..337d937 100644
--- a/linden/indra/llcommon/llstringtable.h
+++ b/linden/indra/llcommon/llstringtable.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llsys.cpp b/linden/indra/llcommon/llsys.cpp
index 906bc65..48f2474 100644
--- a/linden/indra/llcommon/llsys.cpp
+++ b/linden/indra/llcommon/llsys.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -31,6 +32,7 @@
#include
#include
+
#include "processor.h"
#if LL_WINDOWS
@@ -143,7 +145,7 @@ LLOSInfo::LLOSInfo() :
}
else
{
- snprintf( /* Flawfinder: ignore */
+ snprintf( /* Flawfinder: ignore */
tmp,
sizeof(tmp),
"%s (Build %d)",
@@ -308,50 +310,28 @@ LLCPUInfo::LLCPUInfo()
mFamily.assign( info->strFamily );
}
+
std::string LLCPUInfo::getCPUString() const
{
- std::string cpu_string;
-
#if LL_WINDOWS || LL_DARWIN
- // gather machine information.
- char proc_buf[CPUINFO_BUFFER_SIZE]; /* Flawfinder: ignore */
- CProcessor proc;
- if(proc.CPUInfoToText(proc_buf, CPUINFO_BUFFER_SIZE))
- {
- cpu_string.append(proc_buf);
- }
-#else
- cpu_string.append("Can't get CPU information");
-#endif
-
- return cpu_string;
-}
-
-std::string LLCPUInfo::getCPUStringTerse() const
-{
- std::string cpu_string;
+ std::ostringstream out;
-#if LL_WINDOWS || LL_DARWIN
CProcessor proc;
- const ProcessorInfo *info = proc.GetCPUInfo();
-
- cpu_string.append(info->strBrandID);
+ (void) proc.GetCPUInfo();
+ out << proc.strCPUName << " ";
- F64 freq = (F64)(S64)proc.GetCPUFrequency(50) / 1000000.f;
+ F32 freq = (F32)(proc.GetCPUFrequency(50) / 1000000.0);
// cpu speed is often way wrong, do a sanity check
- if (freq < 10000.f && freq > 200.f )
+ if (200.f < freq && freq < 10000.f)
{
- char tmp[MAX_STRING]; /* Flawfinder: ignore */
- snprintf(tmp, sizeof(tmp), " (%.0f Mhz)", freq); /* Flawfinder: ignore */
-
- cpu_string.append(tmp);
+ out << "(" << (S32)(freq) << " MHz)";
}
+
+ return out.str();
#else
- cpu_string.append("Can't get terse CPU information");
+ return "Can't get terse CPU information";
#endif
-
- return cpu_string;
}
void LLCPUInfo::stream(std::ostream& s) const
diff --git a/linden/indra/llcommon/llsys.h b/linden/indra/llcommon/llsys.h
index 7753adb..2047d9a 100644
--- a/linden/indra/llcommon/llsys.h
+++ b/linden/indra/llcommon/llsys.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -70,7 +71,6 @@ public:
void stream(std::ostream& s) const;
std::string getCPUString() const;
- std::string getCPUStringTerse() const;
BOOL hasSSE() const { return mHasSSE; }
BOOL hasSSE2() const { return mHasSSE2; }
diff --git a/linden/indra/llcommon/llthread.cpp b/linden/indra/llcommon/llthread.cpp
index d6b52f7..0f833ab 100644
--- a/linden/indra/llcommon/llthread.cpp
+++ b/linden/indra/llcommon/llthread.cpp
@@ -3,6 +3,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llthread.h b/linden/indra/llcommon/llthread.h
index cdf1d33..adb04a5 100644
--- a/linden/indra/llcommon/llthread.h
+++ b/linden/indra/llcommon/llthread.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/lltimer.cpp b/linden/indra/llcommon/lltimer.cpp
index 07bd543..21fbf0e 100644
--- a/linden/indra/llcommon/lltimer.cpp
+++ b/linden/indra/llcommon/lltimer.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/lltimer.h b/linden/indra/llcommon/lltimer.h
index caac16f..94dcbb9 100644
--- a/linden/indra/llcommon/lltimer.h
+++ b/linden/indra/llcommon/lltimer.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/lluri.cpp b/linden/indra/llcommon/lluri.cpp
index bc3540e..f85f294 100644
--- a/linden/indra/llcommon/lluri.cpp
+++ b/linden/indra/llcommon/lluri.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -214,6 +215,19 @@ LLURI LLURI::buildHTTP(const std::string& prefix,
result.mEscapedPath += "/" + escapePathComponent(it->asString());
}
}
+ else if(path.isString())
+ {
+ result.mEscapedPath += "/" + escapePathComponent(path.asString());
+ }
+ else if(path.isUndefined())
+ {
+ // do nothing
+ }
+ else
+ {
+ llwarns << "Valid path arguments to buildHTTP are array, string, or undef, you passed type"
+ << path.type() << llendl;
+ }
result.mEscapedOpaque = "//" + result.mEscapedAuthority +
result.mEscapedPath;
return result;
@@ -284,19 +298,7 @@ namespace {
}
}
-
-// static
-LLURI LLURI::buildAgentPresenceURI(const LLUUID& agent_id, LLApp* app)
-{
- return buildBackboneURL(app, "agent", agent_id.asString(), "presence");
-}
-
-// static
-LLURI LLURI::buildBulkAgentPresenceURI(LLApp* app)
-{
- return buildBackboneURL(app, "agent", "presence");
-}
-
+#if LL_ENABLE_JANKY_DEPRECATED_WEB_SERVICE_CALLS
// static
LLURI LLURI::buildBulkAgentNamesURI(LLApp* app)
{
@@ -321,25 +323,6 @@ LLURI LLURI::buildAgentSessionURI(const LLUUID& agent_id, LLApp* app)
}
// static
-LLURI LLURI::buildInventoryHostURI(const LLUUID& agent_id, LLApp* app)
-{
- std::string host = "localhost:12040";
-
- if (app)
- {
- host = app->getOption("backbone-host-port").asString();
- }
-
- LLSD path = LLSD::emptyArray();
- path.append("agent");
- path.append(agent_id);
- path.append("inventory");
- path.append("host");
-
- return buildHTTP(host, path);
-}
-
-// static
LLURI LLURI::buildAgentNameURI(const LLUUID& agent_id, LLApp* app)
{
std::string host = "localhost:12040";
@@ -367,6 +350,7 @@ LLURI LLURI::buildAgentLoginInfoURI(const LLUUID& agent_id, const std::string& d
return buildHTTP(dataserver, path);
}
+#endif // LL_ENABLE_JANKY_DEPRECATED_WEB_SERVICE_CALLS
std::string LLURI::asString() const
{
diff --git a/linden/indra/llcommon/lluri.h b/linden/indra/llcommon/lluri.h
index 60b3d48..77de595 100644
--- a/linden/indra/llcommon/lluri.h
+++ b/linden/indra/llcommon/lluri.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -96,13 +97,12 @@ public:
static std::string unescape(const std::string& str);
// Functions for building specific URIs for web services
- static LLURI buildAgentPresenceURI(const LLUUID& agent_id, LLApp* app);
- static LLURI buildBulkAgentPresenceURI(LLApp* app);
- static LLURI buildBulkAgentNamesURI(LLApp* app);
- static LLURI buildAgentSessionURI(const LLUUID& agent_id, LLApp* app);
- static LLURI buildAgentLoginInfoURI(const LLUUID& agent_id, const std::string& dataserver);
- static LLURI buildInventoryHostURI(const LLUUID& agent_id, LLApp* app);
- static LLURI buildAgentNameURI(const LLUUID& agent_id, LLApp* app);
+ // *NOTE: DEPRECATED. use the service builder instead.
+ //static LLURI buildBulkAgentNamesURI(LLApp* app);
+ //static LLURI buildAgentSessionURI(const LLUUID& agent_id, LLApp* app);
+ //static LLURI buildAgentLoginInfoURI(const LLUUID& agent_id, const std::string& dataserver);
+ //static LLURI buildAgentNameURI(const LLUUID& agent_id, LLApp* app);
+
private:
std::string mScheme;
std::string mEscapedOpaque;
diff --git a/linden/indra/llcommon/lluuidhashmap.h b/linden/indra/llcommon/lluuidhashmap.h
index 44cd925..77609e0 100644
--- a/linden/indra/llcommon/lluuidhashmap.h
+++ b/linden/indra/llcommon/lluuidhashmap.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -225,7 +226,7 @@ inline S32 LLUUIDHashMap::getLength() const
S32 bin;
for (bin = 0; bin < 256; bin++)
{
- LLUUIDHashNode* nodep = &mNodes[bin];
+ LLUUIDHashNode* nodep = (LLUUIDHashNode*) &mNodes[bin];
while (nodep)
{
count += nodep->mCount;
@@ -440,6 +441,7 @@ public:
~LLUUIDHashMapIter();
+ inline void reset();
inline void first();
inline void next();
inline BOOL done() const;
@@ -479,10 +481,17 @@ LLUUIDHashMapIter::LLUUIDHashMapIter(LLUUIDHashMap
LLUUIDHashMapIter::~LLUUIDHashMapIter()
{
+ reset();
+}
+
+template
+inline void LLUUIDHashMapIter::reset()
+{
if (mCurHashNodep)
{
// We're partway through an iteration, we can clean up now
mHashMapp->mIterCount--;
+ mCurHashNodep = NULL;
}
}
diff --git a/linden/indra/llcommon/llversion.h b/linden/indra/llcommon/llversion.h
index a3e5152..426eff0 100644
--- a/linden/indra/llcommon/llversion.h
+++ b/linden/indra/llcommon/llversion.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -28,14 +29,9 @@
#ifndef LL_LLVERSION_H
#define LL_LLVERSION_H
-// Branch "release"
-
-// MUST ALSO change version number in secondlife setup.nsi
const S32 LL_VERSION_MAJOR = 1;
-const S32 LL_VERSION_MINOR = 14;
+const S32 LL_VERSION_MINOR = 15;
const S32 LL_VERSION_PATCH = 0;
-const S32 LL_VERSION_BUILD = 0;
-
-
+const S32 LL_VERSION_BUILD = 2;
#endif
diff --git a/linden/indra/llcommon/llworkerthread.cpp b/linden/indra/llcommon/llworkerthread.cpp
index 4f99393..aa0bedf 100644
--- a/linden/indra/llcommon/llworkerthread.cpp
+++ b/linden/indra/llcommon/llworkerthread.cpp
@@ -3,6 +3,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/llworkerthread.h b/linden/indra/llcommon/llworkerthread.h
index 17b7e7b..278f8e0 100644
--- a/linden/indra/llcommon/llworkerthread.h
+++ b/linden/indra/llcommon/llworkerthread.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -90,7 +91,7 @@ public:
handle_t addWorkRequest(LLWorkerClass* workerclass, S32 param, U32 priority = PRIORITY_NORMAL);
void deleteWorker(LLWorkerClass* workerclass); // schedule for deletion
- S32 getNumDeletes() { return mDeleteList.size(); } // debug
+ S32 getNumDeletes() { return (S32)mDeleteList.size(); } // debug
};
//============================================================================
diff --git a/linden/indra/llcommon/metaclass.cpp b/linden/indra/llcommon/metaclass.cpp
index f83a044..251795e 100644
--- a/linden/indra/llcommon/metaclass.cpp
+++ b/linden/indra/llcommon/metaclass.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/metaclass.h b/linden/indra/llcommon/metaclass.h
index 091f83c..1e255b0 100644
--- a/linden/indra/llcommon/metaclass.h
+++ b/linden/indra/llcommon/metaclass.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/metaclasst.h b/linden/indra/llcommon/metaclasst.h
index 81748b9..5a110ba 100644
--- a/linden/indra/llcommon/metaclasst.h
+++ b/linden/indra/llcommon/metaclasst.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/metaproperty.cpp b/linden/indra/llcommon/metaproperty.cpp
index 312dd9d..23ed7d9 100644
--- a/linden/indra/llcommon/metaproperty.cpp
+++ b/linden/indra/llcommon/metaproperty.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/metaproperty.h b/linden/indra/llcommon/metaproperty.h
index 08e9c59..d8272fe 100644
--- a/linden/indra/llcommon/metaproperty.h
+++ b/linden/indra/llcommon/metaproperty.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/metapropertyt.h b/linden/indra/llcommon/metapropertyt.h
index 6633975..1b444bd 100644
--- a/linden/indra/llcommon/metapropertyt.h
+++ b/linden/indra/llcommon/metapropertyt.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/processor.h b/linden/indra/llcommon/processor.h
index 6a2cdcb..367d540 100644
--- a/linden/indra/llcommon/processor.h
+++ b/linden/indra/llcommon/processor.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007 Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/reflective.cpp b/linden/indra/llcommon/reflective.cpp
index 5c6eff7..7c07d88 100644
--- a/linden/indra/llcommon/reflective.cpp
+++ b/linden/indra/llcommon/reflective.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/reflective.h b/linden/indra/llcommon/reflective.h
index ca698b1..10cecb0 100644
--- a/linden/indra/llcommon/reflective.h
+++ b/linden/indra/llcommon/reflective.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/reflectivet.h b/linden/indra/llcommon/reflectivet.h
index 698f057..e81d76a 100644
--- a/linden/indra/llcommon/reflectivet.h
+++ b/linden/indra/llcommon/reflectivet.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/roles_constants.h b/linden/indra/llcommon/roles_constants.h
index c30048c..3c885ab 100644
--- a/linden/indra/llcommon/roles_constants.h
+++ b/linden/indra/llcommon/roles_constants.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/stdenums.h b/linden/indra/llcommon/stdenums.h
index edd9048..b910570 100644
--- a/linden/indra/llcommon/stdenums.h
+++ b/linden/indra/llcommon/stdenums.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/stdtypes.h b/linden/indra/llcommon/stdtypes.h
index 43f180c..16b57fa 100644
--- a/linden/indra/llcommon/stdtypes.h
+++ b/linden/indra/llcommon/stdtypes.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/string_table.h b/linden/indra/llcommon/string_table.h
index 3af586d..790741d 100644
--- a/linden/indra/llcommon/string_table.h
+++ b/linden/indra/llcommon/string_table.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007 Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/timer.h b/linden/indra/llcommon/timer.h
index 06c9013..31e6db6 100644
--- a/linden/indra/llcommon/timer.h
+++ b/linden/indra/llcommon/timer.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007 Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/timing.cpp b/linden/indra/llcommon/timing.cpp
index 0915c85..342bf19 100644
--- a/linden/indra/llcommon/timing.cpp
+++ b/linden/indra/llcommon/timing.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007 Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/timing.h b/linden/indra/llcommon/timing.h
index e6cc2d1..662d22b 100644
--- a/linden/indra/llcommon/timing.h
+++ b/linden/indra/llcommon/timing.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/u64.cpp b/linden/indra/llcommon/u64.cpp
index 744e0ab..204c6c8 100644
--- a/linden/indra/llcommon/u64.cpp
+++ b/linden/indra/llcommon/u64.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llcommon/u64.h b/linden/indra/llcommon/u64.h
index e2a751e..da83e28 100644
--- a/linden/indra/llcommon/u64.h
+++ b/linden/indra/llcommon/u64.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llimage/llimage.cpp b/linden/indra/llimage/llimage.cpp
index eb4ff46..a7d8bdd 100644
--- a/linden/indra/llimage/llimage.cpp
+++ b/linden/indra/llimage/llimage.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llimage/llimage.h b/linden/indra/llimage/llimage.h
index ef5496e..489fb27 100644
--- a/linden/indra/llimage/llimage.h
+++ b/linden/indra/llimage/llimage.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llimage/llimagebmp.cpp b/linden/indra/llimage/llimagebmp.cpp
index e8cada5..eaed63d 100644
--- a/linden/indra/llimage/llimagebmp.cpp
+++ b/linden/indra/llimage/llimagebmp.cpp
@@ -3,6 +3,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llimage/llimagebmp.h b/linden/indra/llimage/llimagebmp.h
index 43724f2..556b4a2 100644
--- a/linden/indra/llimage/llimagebmp.h
+++ b/linden/indra/llimage/llimagebmp.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llimage/llimagedxt.cpp b/linden/indra/llimage/llimagedxt.cpp
index 6676366..22d7557 100644
--- a/linden/indra/llimage/llimagedxt.cpp
+++ b/linden/indra/llimage/llimagedxt.cpp
@@ -3,6 +3,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -295,7 +296,10 @@ BOOL LLImageDXT::getMipData(LLPointer& raw, S32 discard)
llerrs << "Request for invalid discard level" << llendl;
}
U8* data = getData() + getMipOffset(discard);
- S32 width, height;
+ // I'm not sure these are the correct initial values for height and width,
+ // but previously they were being used uninitialized. JC
+ S32 width = raw->getWidth();
+ S32 height = raw->getHeight();
calcDiscardWidthHeight(discard, mFileFormat, width, height);
raw = new LLImageRaw(data, width, height, getComponents());
return TRUE;
diff --git a/linden/indra/llimage/llimagedxt.h b/linden/indra/llimage/llimagedxt.h
index 936258a..c52c866 100644
--- a/linden/indra/llimage/llimagedxt.h
+++ b/linden/indra/llimage/llimagedxt.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llimage/llimagej2c.cpp b/linden/indra/llimage/llimagej2c.cpp
index 51d9522..b116027 100644
--- a/linden/indra/llimage/llimagej2c.cpp
+++ b/linden/indra/llimage/llimagej2c.cpp
@@ -3,6 +3,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llimage/llimagej2c.h b/linden/indra/llimage/llimagej2c.h
index 24a1429..63ebe38 100644
--- a/linden/indra/llimage/llimagej2c.h
+++ b/linden/indra/llimage/llimagej2c.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llimage/llimagejpeg.cpp b/linden/indra/llimage/llimagejpeg.cpp
index fdfcc16..4ceecdf 100644
--- a/linden/indra/llimage/llimagejpeg.cpp
+++ b/linden/indra/llimage/llimagejpeg.cpp
@@ -3,6 +3,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llimage/llimagejpeg.h b/linden/indra/llimage/llimagejpeg.h
index 8f8e7bb..aca780d 100644
--- a/linden/indra/llimage/llimagejpeg.h
+++ b/linden/indra/llimage/llimagejpeg.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -33,7 +34,6 @@
#include "llimage.h"
extern "C" {
-#include "jpeglib/jinclude.h"
#include "jpeglib/jpeglib.h"
#include "jpeglib/jerror.h"
}
diff --git a/linden/indra/llimage/llimagetga.cpp b/linden/indra/llimage/llimagetga.cpp
index d5d60de..39da50a 100644
--- a/linden/indra/llimage/llimagetga.cpp
+++ b/linden/indra/llimage/llimagetga.cpp
@@ -3,6 +3,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llimage/llimagetga.h b/linden/indra/llimage/llimagetga.h
index 9575b4d..d4d56d0 100644
--- a/linden/indra/llimage/llimagetga.h
+++ b/linden/indra/llimage/llimagetga.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llimage/llimageworker.cpp b/linden/indra/llimage/llimageworker.cpp
index 4550848..c28f80c 100644
--- a/linden/indra/llimage/llimageworker.cpp
+++ b/linden/indra/llimage/llimageworker.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llimage/llimageworker.h b/linden/indra/llimage/llimageworker.h
index a39d21a..8026cbb 100644
--- a/linden/indra/llimage/llimageworker.h
+++ b/linden/indra/llimage/llimageworker.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llimage/llmapimagetype.h b/linden/indra/llimage/llmapimagetype.h
index 1f83b71..690d3ec 100644
--- a/linden/indra/llimage/llmapimagetype.h
+++ b/linden/indra/llimage/llmapimagetype.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llimagej2coj/llimagej2coj.cpp b/linden/indra/llimagej2coj/llimagej2coj.cpp
index 307f952..9366a62 100644
--- a/linden/indra/llimagej2coj/llimagej2coj.cpp
+++ b/linden/indra/llimagej2coj/llimagej2coj.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -49,22 +50,23 @@ void fallbackDestroyLLImageJ2CImpl(LLImageJ2CImpl* impl)
/**
sample error callback expecting a FILE* client object
*/
-void error_callback(const char *msg, void *client_data) {
- FILE *stream = (FILE*)client_data;
- fprintf(stream, "[ERROR] %s", msg);
+void error_callback(const char* msg, void*)
+{
+ lldebugs << "LLImageJ2CImpl error_callback: " << msg << llendl;
}
/**
sample warning callback expecting a FILE* client object
*/
-void warning_callback(const char *msg, void *client_data) {
- FILE *stream = (FILE*)client_data;
- fprintf(stream, "[WARNING] %s", msg);
+void warning_callback(const char* msg, void*)
+{
+ lldebugs << "LLImageJ2CImpl warning_callback: " << msg << llendl;
}
/**
sample debug callback expecting no client object
*/
-void info_callback(const char *msg, void *client_data) {
- fprintf(stdout, "[INFO] %s", msg);
+void info_callback(const char* msg, void*)
+{
+ lldebugs << "LLImageJ2CImpl info_callback: " << msg << llendl;
}
@@ -289,9 +291,10 @@ BOOL LLImageJ2COJ::encodeImpl(LLImageJ2C &base, const LLImageRaw &raw_image, con
/* encode the image */
bool bSuccess = opj_encode(cinfo, cio, image, parameters.index);
- if (!bSuccess) {
+ if (!bSuccess)
+ {
opj_cio_close(cio);
- fprintf(stderr, "failed to encode image\n");
+ llinfos << "Failed to encode image." << llendl;
return FALSE;
}
codestream_length = cio_tell(cio);
diff --git a/linden/indra/llimagej2coj/llimagej2coj.h b/linden/indra/llimagej2coj/llimagej2coj.h
index c3e3d52..822ebc2 100644
--- a/linden/indra/llimagej2coj/llimagej2coj.h
+++ b/linden/indra/llimagej2coj/llimagej2coj.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llinventory/llcategory.cpp b/linden/indra/llinventory/llcategory.cpp
index e27733c..93f86f9 100644
--- a/linden/indra/llinventory/llcategory.cpp
+++ b/linden/indra/llinventory/llcategory.cpp
@@ -3,6 +3,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llinventory/llcategory.h b/linden/indra/llinventory/llcategory.h
index f566987..ed28a7f 100644
--- a/linden/indra/llinventory/llcategory.h
+++ b/linden/indra/llinventory/llcategory.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llinventory/lleconomy.cpp b/linden/indra/llinventory/lleconomy.cpp
index 2337a3e..837acfe 100644
--- a/linden/indra/llinventory/lleconomy.cpp
+++ b/linden/indra/llinventory/lleconomy.cpp
@@ -3,6 +3,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -170,6 +171,11 @@ void LLRegionEconomy::processEconomyData(LLMessageSystem *msg, void** user_data)
void LLRegionEconomy::processEconomyDataRequest(LLMessageSystem *msg, void **user_data)
{
LLRegionEconomy *this_ptr = (LLRegionEconomy*)user_data;
+ if (!this_ptr->hasData())
+ {
+ llwarns << "Dropping EconomyDataRequest, because EconomyData message "
+ << "has not been processed" << llendl;
+ }
msg->newMessageFast(_PREHASH_EconomyData);
msg->nextBlockFast(_PREHASH_Info);
diff --git a/linden/indra/llinventory/lleconomy.h b/linden/indra/llinventory/lleconomy.h
index 7690142..b381663 100644
--- a/linden/indra/llinventory/lleconomy.h
+++ b/linden/indra/llinventory/lleconomy.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llinventory/llinventory.cpp b/linden/indra/llinventory/llinventory.cpp
index c5be7f7..85fc47f 100644
--- a/linden/indra/llinventory/llinventory.cpp
+++ b/linden/indra/llinventory/llinventory.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -1101,7 +1102,7 @@ BOOL LLInventoryItem::exportLegacyStream(std::ostream& output_stream, BOOL inclu
if(inv_type_str)
output_stream << "\t\tinv_type\t" << inv_type_str << "\n";
char buffer[32]; /* Flawfinder: ignore */
- snprintf(buffer, sizeof(buffer), "\t\tflags\t%08x\n", mFlags); /* Flawfinder: ignore */
+ snprintf(buffer, sizeof(buffer), "\t\tflags\t%08x\n", mFlags); /* Flawfinder: ignore */
output_stream << buffer;
mSaleInfo.exportLegacyStream(output_stream);
output_stream << "\t\tname\t" << mName.c_str() << "|\n";
@@ -1791,7 +1792,17 @@ LLPointer ll_create_item_from_sd(const LLSD& sd_item)
rv->rename(sd_item[INV_NAME_LABEL].asString());
rv->setType(
LLAssetType::lookup(sd_item[INV_ASSET_TYPE_LABEL].asString().c_str()));
- rv->setAssetUUID(sd_item[INV_ASSET_ID_LABEL].asUUID());
+ if (sd_item.has("shadow_id"))
+ {
+ LLUUID asset_id = sd_item["shadow_id"];
+ LLXORCipher cipher(MAGIC_ID.mData, UUID_BYTES);
+ cipher.decrypt(asset_id.mData, UUID_BYTES);
+ rv->setAssetUUID(asset_id);
+ }
+ if (sd_item.has(INV_ASSET_ID_LABEL))
+ {
+ rv->setAssetUUID(sd_item[INV_ASSET_ID_LABEL].asUUID());
+ }
rv->setDescription(sd_item[INV_DESC_LABEL].asString());
rv->setSaleInfo(ll_sale_info_from_sd(sd_item[INV_SALE_INFO_LABEL]));
rv->setPermissions(ll_permissions_from_sd(sd_item[INV_PERMISSIONS_LABEL]));
diff --git a/linden/indra/llinventory/llinventory.h b/linden/indra/llinventory/llinventory.h
index fc135de..6e64412 100644
--- a/linden/indra/llinventory/llinventory.h
+++ b/linden/indra/llinventory/llinventory.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -214,6 +215,10 @@ public:
II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE = 0x080000,
II_FLAGS_OBJECT_PERM_OVERWRITE_NEXT_OWNER = 0x100000,
+ // flag to indicate whether an object that is returned is composed
+ // of muiltiple items or not.
+ II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS = 0x200000,
+
// wearables use the low order byte of flags to store the
// EWearableType enumeration found in newview/llwearable.h
};
diff --git a/linden/indra/llinventory/lllandmark.cpp b/linden/indra/llinventory/lllandmark.cpp
index c153d68..ae7a991 100644
--- a/linden/indra/llinventory/lllandmark.cpp
+++ b/linden/indra/llinventory/lllandmark.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llinventory/lllandmark.h b/linden/indra/llinventory/lllandmark.h
index eea0600..69c377a 100644
--- a/linden/indra/llinventory/lllandmark.h
+++ b/linden/indra/llinventory/lllandmark.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llinventory/llnotecard.cpp b/linden/indra/llinventory/llnotecard.cpp
index d40cabb..47dd690 100644
--- a/linden/indra/llinventory/llnotecard.cpp
+++ b/linden/indra/llinventory/llnotecard.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llinventory/llnotecard.h b/linden/indra/llinventory/llnotecard.h
index 511d779..3d89c7a 100644
--- a/linden/indra/llinventory/llnotecard.h
+++ b/linden/indra/llinventory/llnotecard.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llinventory/llparcel.cpp b/linden/indra/llinventory/llparcel.cpp
index b4faf7c..c37a4d6 100644
--- a/linden/indra/llinventory/llparcel.cpp
+++ b/linden/indra/llinventory/llparcel.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -192,7 +193,6 @@ void LLParcel::init(const LLUUID &owner_id,
mRecordTransaction = FALSE;
mAuctionID = 0;
- mIsReservedForNewbie = FALSE;
mInEscrow = false;
mParcelFlags = PF_DEFAULT;
@@ -652,10 +652,6 @@ BOOL LLParcel::importStream(std::istream& input_stream)
{
LLString::convertToU32(value, mAuctionID);
}
- else if("reserved_newbie" == keyword)
- {
- LLString::convertToBOOL(value, mIsReservedForNewbie);
- }
else if ("allow_modify" == keyword)
{
LLString::convertToU32(value, setting);
@@ -1090,10 +1086,6 @@ BOOL LLParcel::exportStream(std::ostream& output_stream)
{
output_stream << "\t\t auction_id " << mAuctionID << "\n";
}
- if(mIsReservedForNewbie)
- {
- output_stream << "\t\t reserved_newbie " << mIsReservedForNewbie << "\n";
- }
output_stream << "\t\t allow_modify " << getAllowModify() << "\n";
output_stream << "\t\t allow_group_modify " << getAllowGroupModify() << "\n";
@@ -1634,7 +1626,6 @@ void LLParcel::expireSale(U32& type, U8& flags, LLUUID& from_id, LLUUID& to_id)
setSellWithObjects(FALSE);
type = TRANS_LAND_RELEASE;
mStatus = OS_NONE;
- mIsReservedForNewbie = FALSE;
flags = pack_transaction_flags(mGroupOwned, FALSE);
mAuthBuyerID.setNull();
from_id = mOwnerID;
@@ -1652,7 +1643,6 @@ void LLParcel::completeSale(U32& type, U8& flags,
flags = pack_transaction_flags(mGroupOwned, mGroupOwned);
to_id = mOwnerID;
mAuthBuyerID.setNull();
- mIsReservedForNewbie = FALSE;
// Purchased parcels are assumed to no longer be for sale.
// Otherwise someone can snipe the sale.
@@ -1685,7 +1675,6 @@ void LLParcel::clearSale()
setPreviousOwnerID(LLUUID::null);
setPreviouslyGroupOwned(FALSE);
setSellWithObjects(FALSE);
- mIsReservedForNewbie = FALSE;
}
BOOL LLParcel::isPublic() const
@@ -1719,7 +1708,6 @@ void LLParcel::clearParcel()
setUserLookAt(LLVector3::x_axis);
setLandingType(L_LANDING_POINT);
setAuctionID(0);
- setReservedForNewbie(FALSE);
setGroupID(LLUUID::null);
setPassPrice(0);
setPassHours(0.f);
diff --git a/linden/indra/llinventory/llparcel.h b/linden/indra/llinventory/llparcel.h
index 54936e2..29e393a 100644
--- a/linden/indra/llinventory/llparcel.h
+++ b/linden/indra/llinventory/llparcel.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -209,7 +210,6 @@ public:
void setLandingType(const ELandingType type) { mLandingType = type; }
void setAuctionID(U32 auction_id) { mAuctionID = auction_id;}
- void setReservedForNewbie(BOOL reserve) { mIsReservedForNewbie = reserve; }
void setAllParcelFlags(U32 flags) { mParcelFlags = flags; }
void setParcelFlag(U32 flag, BOOL b);
@@ -290,7 +290,6 @@ public:
BOOL getIsGroupOwned() const { return mGroupOwned; }
U32 getAuctionID() { return mAuctionID; }
- BOOL getReservedForNewbie() { return mIsReservedForNewbie; }
bool isInEscrow() const { return mInEscrow; }
BOOL isPublic() const;
@@ -537,9 +536,6 @@ protected:
// the parcel.
U32 mAuctionID;
- // This value is TRUE if the land is reserved for a newbie.
- BOOL mIsReservedForNewbie;
-
// value used to temporarily lock attempts to purchase the parcel.
bool mInEscrow;
diff --git a/linden/indra/llinventory/llparcelflags.h b/linden/indra/llinventory/llparcelflags.h
index 66158d8..17d9151 100644
--- a/linden/indra/llinventory/llparcelflags.h
+++ b/linden/indra/llinventory/llparcelflags.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llinventory/llpermissions.cpp b/linden/indra/llinventory/llpermissions.cpp
index 0788ec6..86ab57c 100644
--- a/linden/indra/llinventory/llpermissions.cpp
+++ b/linden/indra/llinventory/llpermissions.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -757,15 +758,15 @@ BOOL LLPermissions::exportLegacyStream(std::ostream& output_stream) const
output_stream << "\t{\n";
char buffer[256]; /* Flawfinder: ignore */
- snprintf(buffer, sizeof(buffer), "\t\tbase_mask\t%08x\n", mMaskBase); /* Flawfinder: ignore */
+ snprintf(buffer, sizeof(buffer), "\t\tbase_mask\t%08x\n", mMaskBase); /* Flawfinder: ignore */
output_stream << buffer;
- snprintf(buffer, sizeof(buffer), "\t\towner_mask\t%08x\n", mMaskOwner); /* Flawfinder: ignore */
+ snprintf(buffer, sizeof(buffer), "\t\towner_mask\t%08x\n", mMaskOwner); /* Flawfinder: ignore */
output_stream << buffer;
- snprintf(buffer, sizeof(buffer), "\t\tgroup_mask\t%08x\n", mMaskGroup); /* Flawfinder: ignore */
+ snprintf(buffer, sizeof(buffer), "\t\tgroup_mask\t%08x\n", mMaskGroup); /* Flawfinder: ignore */
output_stream << buffer;
- snprintf(buffer, sizeof(buffer), "\t\teveryone_mask\t%08x\n", mMaskEveryone); /* Flawfinder: ignore */
+ snprintf(buffer, sizeof(buffer), "\t\teveryone_mask\t%08x\n", mMaskEveryone); /* Flawfinder: ignore */
output_stream << buffer;
- snprintf(buffer, sizeof(buffer), "\t\tnext_owner_mask\t%08x\n", mMaskNextOwner); /* Flawfinder: ignore */
+ snprintf(buffer, sizeof(buffer), "\t\tnext_owner_mask\t%08x\n", mMaskNextOwner); /* Flawfinder: ignore */
output_stream << buffer;
mCreator.toString(uuid_str);
diff --git a/linden/indra/llinventory/llpermissions.h b/linden/indra/llinventory/llpermissions.h
index d8a6b0a..608f4b2 100644
--- a/linden/indra/llinventory/llpermissions.h
+++ b/linden/indra/llinventory/llpermissions.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llinventory/llpermissionsflags.h b/linden/indra/llinventory/llpermissionsflags.h
index 2af16fb..72778be 100644
--- a/linden/indra/llinventory/llpermissionsflags.h
+++ b/linden/indra/llinventory/llpermissionsflags.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llinventory/llsaleinfo.cpp b/linden/indra/llinventory/llsaleinfo.cpp
index 28801e5..9364529 100644
--- a/linden/indra/llinventory/llsaleinfo.cpp
+++ b/linden/indra/llinventory/llsaleinfo.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llinventory/llsaleinfo.h b/linden/indra/llinventory/llsaleinfo.h
index 5e80108..fd6429e 100644
--- a/linden/indra/llinventory/llsaleinfo.h
+++ b/linden/indra/llinventory/llsaleinfo.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llinventory/lltransactionflags.cpp b/linden/indra/llinventory/lltransactionflags.cpp
index 16d6101..ffd3271 100644
--- a/linden/indra/llinventory/lltransactionflags.cpp
+++ b/linden/indra/llinventory/lltransactionflags.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llinventory/lltransactionflags.h b/linden/indra/llinventory/lltransactionflags.h
index ed47995..3675074 100644
--- a/linden/indra/llinventory/lltransactionflags.h
+++ b/linden/indra/llinventory/lltransactionflags.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llinventory/lltransactiontypes.h b/linden/indra/llinventory/lltransactiontypes.h
index 345fe89..49ba6aa 100644
--- a/linden/indra/llinventory/lltransactiontypes.h
+++ b/linden/indra/llinventory/lltransactiontypes.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llinventory/lluserrelations.cpp b/linden/indra/llinventory/lluserrelations.cpp
index e9248c3..fc8e510 100644
--- a/linden/indra/llinventory/lluserrelations.cpp
+++ b/linden/indra/llinventory/lluserrelations.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llinventory/lluserrelations.h b/linden/indra/llinventory/lluserrelations.h
index 9363ab5..430dc43 100644
--- a/linden/indra/llinventory/lluserrelations.h
+++ b/linden/indra/llinventory/lluserrelations.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/camera.h b/linden/indra/llmath/camera.h
index e9963e9..3aa86d5 100644
--- a/linden/indra/llmath/camera.h
+++ b/linden/indra/llmath/camera.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007 Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/coordframe.h b/linden/indra/llmath/coordframe.h
index 81d630e..611387d 100644
--- a/linden/indra/llmath/coordframe.h
+++ b/linden/indra/llmath/coordframe.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007 Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/llbboxlocal.cpp b/linden/indra/llmath/llbboxlocal.cpp
index b197241..505c7e6 100644
--- a/linden/indra/llmath/llbboxlocal.cpp
+++ b/linden/indra/llmath/llbboxlocal.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/llbboxlocal.h b/linden/indra/llmath/llbboxlocal.h
index cb71a4f..4fdc01f 100644
--- a/linden/indra/llmath/llbboxlocal.h
+++ b/linden/indra/llmath/llbboxlocal.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/llcamera.cpp b/linden/indra/llmath/llcamera.cpp
index bc13c90..2197066 100644
--- a/linden/indra/llmath/llcamera.cpp
+++ b/linden/indra/llmath/llcamera.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/llcamera.h b/linden/indra/llmath/llcamera.h
index 82b6130..b5f78f4 100644
--- a/linden/indra/llmath/llcamera.h
+++ b/linden/indra/llmath/llcamera.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/llcoord.h b/linden/indra/llmath/llcoord.h
index 6aa6b64..a1ed130 100644
--- a/linden/indra/llmath/llcoord.h
+++ b/linden/indra/llmath/llcoord.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/llcoordframe.cpp b/linden/indra/llmath/llcoordframe.cpp
index c7d18bb..1650dd2 100644
--- a/linden/indra/llmath/llcoordframe.cpp
+++ b/linden/indra/llmath/llcoordframe.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/llcoordframe.h b/linden/indra/llmath/llcoordframe.h
index d15f3e5..2777cbe 100644
--- a/linden/indra/llmath/llcoordframe.h
+++ b/linden/indra/llmath/llcoordframe.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/llcrc.cpp b/linden/indra/llmath/llcrc.cpp
index 1c0aa5d..cc0f955 100644
--- a/linden/indra/llmath/llcrc.cpp
+++ b/linden/indra/llmath/llcrc.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/llcrc.h b/linden/indra/llmath/llcrc.h
index 7c267d6..06ddac2 100644
--- a/linden/indra/llmath/llcrc.h
+++ b/linden/indra/llmath/llcrc.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/llinterp.h b/linden/indra/llmath/llinterp.h
index 3cc0b18..724fb31 100644
--- a/linden/indra/llmath/llinterp.h
+++ b/linden/indra/llmath/llinterp.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/llmath.h b/linden/indra/llmath/llmath.h
index 7009557..dbd825d 100644
--- a/linden/indra/llmath/llmath.h
+++ b/linden/indra/llmath/llmath.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/llmath.vcproj b/linden/indra/llmath/llmath.vcproj
index 82feb25..4876065 100644
--- a/linden/indra/llmath/llmath.vcproj
+++ b/linden/indra/llmath/llmath.vcproj
@@ -224,9 +224,6 @@
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
-
-
+
+
0.01f)
+ if (t_fraction > 0.0001f)
{
LLVector3 new_pt = lerp(pt1, pt2, t_fraction);
F32 pt_x = new_pt.mV[VX];
diff --git a/linden/indra/llmath/llvolume.h b/linden/indra/llmath/llvolume.h
index 91f7c9b..7137346 100644
--- a/linden/indra/llmath/llvolume.h
+++ b/linden/indra/llmath/llvolume.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -61,12 +62,12 @@ const S32 MAX_LOD = 3;
const F32 MIN_VOLUME_PROFILE_WIDTH = 0.05f;
const F32 MIN_VOLUME_PATH_WIDTH = 0.05f;
-const F32 CUT_QUANTA = 0.005f;
-const F32 SCALE_QUANTA = 0.01f;
-const F32 SHEAR_QUANTA = 0.01f;
-const F32 TAPER_QUANTA = 0.01f;
-const F32 REV_QUANTA = 0.015f;
-
+const F32 CUT_QUANTA = 0.00002f;
+const F32 SCALE_QUANTA = 0.01f;
+const F32 SHEAR_QUANTA = 0.01f;
+const F32 TAPER_QUANTA = 0.01f;
+const F32 REV_QUANTA = 0.015f;
+const F32 HOLLOW_QUANTA = 0.00002f;
//============================================================================
@@ -184,7 +185,7 @@ public:
{
}
- LLProfileParams(U8 curve, U8 begin, U8 end, U8 hollow)
+ LLProfileParams(U8 curve, U16 begin, U16 end, U16 hollow)
{
mCurveType = curve;
F32 temp_f32 = begin * CUT_QUANTA;
@@ -199,7 +200,7 @@ public:
temp_f32 = 1.f;
}
mEnd = 1.f - temp_f32;
- temp_f32 = hollow * SCALE_QUANTA;
+ temp_f32 = hollow * HOLLOW_QUANTA;
if (temp_f32 > 1.f)
{
temp_f32 = 1.f;
@@ -229,9 +230,9 @@ public:
const U8& getCurveType () const { return mCurveType; }
void setCurveType(const U32 type) { mCurveType = type;}
- void setBegin(const F32 begin) { mBegin = (begin >= 1.0f) ? 0.0f : ((int) (begin * 1000))/1000.0f;}
- void setEnd(const F32 end) { mEnd = (end <= 0.0f) ? 1.0f : ((int) (end * 1000))/1000.0f;}
- void setHollow(const F32 hollow) { mHollow = ((int) (hollow * 1000))/1000.0f;}
+ void setBegin(const F32 begin) { mBegin = (begin >= 1.0f) ? 0.0f : ((int) (begin * 100000))/100000.0f;}
+ void setEnd(const F32 end) { mEnd = (end <= 0.0f) ? 1.0f : ((int) (end * 100000))/100000.0f;}
+ void setHollow(const F32 hollow) { mHollow = ((int) (hollow * 100000))/100000.0f;}
friend std::ostream& operator<<(std::ostream &s, const LLProfileParams &profile_params);
@@ -315,11 +316,11 @@ public:
mTaper.setVec(tx,ty);
}
- LLPathParams(U8 curve, U8 begin, U8 end, U8 scx, U8 scy, U8 shx, U8 shy, U8 twistend, U8 twistbegin, U8 radiusoffset, U8 tx, U8 ty, U8 revolutions, U8 skew)
+ LLPathParams(U8 curve, U16 begin, U16 end, U8 scx, U8 scy, U8 shx, U8 shy, U8 twistend, U8 twistbegin, U8 radiusoffset, U8 tx, U8 ty, U8 revolutions, U8 skew)
{
mCurveType = curve;
- mBegin = (F32)(begin * SCALE_QUANTA);
- mEnd = (F32)(100.f - end) * SCALE_QUANTA;
+ mBegin = (F32)(begin * CUT_QUANTA);
+ mEnd = (F32)(100.f - end) * CUT_QUANTA;
if (mEnd > 1.f)
mEnd = 1.f;
mScale.setVec((F32) (200 - scx) * SCALE_QUANTA,(F32) (200 - scy) * SCALE_QUANTA);
diff --git a/linden/indra/llmath/llvolumemgr.cpp b/linden/indra/llmath/llvolumemgr.cpp
index 2aa480c..eac407f 100644
--- a/linden/indra/llmath/llvolumemgr.cpp
+++ b/linden/indra/llmath/llvolumemgr.cpp
@@ -3,6 +3,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -297,7 +298,7 @@ F32 LLVolumeLODGroup::dump()
}
usage = usage / (F32)NUM_LODS;
- snprintf(dump_str, sizeof(dump_str), "%.3f %d %d %d %d", usage, mAccessCount[0], mAccessCount[1], mAccessCount[2], mAccessCount[3]); /* Flawfinder: ignore */
+ snprintf(dump_str, sizeof(dump_str), "%.3f %d %d %d %d", usage, mAccessCount[0], mAccessCount[1], mAccessCount[2], mAccessCount[3]); /* Flawfinder: ignore */
llinfos << dump_str << llendl;
return usage;
diff --git a/linden/indra/llmath/llvolumemgr.h b/linden/indra/llmath/llvolumemgr.h
index 9cb1f63..aa00c4e 100644
--- a/linden/indra/llmath/llvolumemgr.h
+++ b/linden/indra/llmath/llvolumemgr.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/m3math.cpp b/linden/indra/llmath/m3math.cpp
index 4d93af6..09a18d2 100644
--- a/linden/indra/llmath/m3math.cpp
+++ b/linden/indra/llmath/m3math.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/m3math.h b/linden/indra/llmath/m3math.h
index 494856a..94c9b65 100644
--- a/linden/indra/llmath/m3math.h
+++ b/linden/indra/llmath/m3math.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/m4math.cpp b/linden/indra/llmath/m4math.cpp
index ee7e6f3..b6d91a1 100644
--- a/linden/indra/llmath/m4math.cpp
+++ b/linden/indra/llmath/m4math.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -673,31 +674,55 @@ LLVector4 operator*(const LLMatrix4 &a, const LLVector4 &b)
}
*/
+// Operates "to the left" on row-vector a
+//
+// This used to be in the header file but was not actually inlined in practice.
+// When avatar vertex programs are off, this function is a hot spot in profiles
+// due to software skinning in LLViewerJointMesh::updateGeometry(). JC
+LLVector3 operator*(const LLVector3 &a, const LLMatrix4 &b)
+{
+ // This is better than making a temporary LLVector3. This eliminates an
+ // unnecessary LLVector3() constructor and also helps the compiler to
+ // realize that the output floats do not alias the input floats, hence
+ // eliminating redundant loads of a.mV[0], etc. JC
+ return LLVector3(a.mV[VX] * b.mMatrix[VX][VX] +
+ a.mV[VY] * b.mMatrix[VY][VX] +
+ a.mV[VZ] * b.mMatrix[VZ][VX] +
+ b.mMatrix[VW][VX],
+
+ a.mV[VX] * b.mMatrix[VX][VY] +
+ a.mV[VY] * b.mMatrix[VY][VY] +
+ a.mV[VZ] * b.mMatrix[VZ][VY] +
+ b.mMatrix[VW][VY],
+
+ a.mV[VX] * b.mMatrix[VX][VZ] +
+ a.mV[VY] * b.mMatrix[VY][VZ] +
+ a.mV[VZ] * b.mMatrix[VZ][VZ] +
+ b.mMatrix[VW][VZ]);
+}
LLVector4 operator*(const LLVector4 &a, const LLMatrix4 &b)
{
// Operate "to the left" on row-vector a
- LLVector4 vec;
- vec.mV[VX] = a.mV[VX] * b.mMatrix[VX][VX] +
- a.mV[VY] * b.mMatrix[VY][VX] +
- a.mV[VZ] * b.mMatrix[VZ][VX] +
- a.mV[VW] * b.mMatrix[VW][VX];
-
- vec.mV[VY] = a.mV[VX] * b.mMatrix[VX][VY] +
- a.mV[VY] * b.mMatrix[VY][VY] +
- a.mV[VZ] * b.mMatrix[VZ][VY] +
- a.mV[VW] * b.mMatrix[VW][VY];
-
- vec.mV[VZ] = a.mV[VX] * b.mMatrix[VX][VZ] +
- a.mV[VY] * b.mMatrix[VY][VZ] +
- a.mV[VZ] * b.mMatrix[VZ][VZ] +
- a.mV[VW] * b.mMatrix[VW][VZ];
-
- vec.mV[VW] = a.mV[VX] * b.mMatrix[VX][VW] +
- a.mV[VY] * b.mMatrix[VY][VW] +
- a.mV[VZ] * b.mMatrix[VZ][VW] +
- a.mV[VW] * b.mMatrix[VW][VW];
- return vec;
+ return LLVector4(a.mV[VX] * b.mMatrix[VX][VX] +
+ a.mV[VY] * b.mMatrix[VY][VX] +
+ a.mV[VZ] * b.mMatrix[VZ][VX] +
+ a.mV[VW] * b.mMatrix[VW][VX],
+
+ a.mV[VX] * b.mMatrix[VX][VY] +
+ a.mV[VY] * b.mMatrix[VY][VY] +
+ a.mV[VZ] * b.mMatrix[VZ][VY] +
+ a.mV[VW] * b.mMatrix[VW][VY],
+
+ a.mV[VX] * b.mMatrix[VX][VZ] +
+ a.mV[VY] * b.mMatrix[VY][VZ] +
+ a.mV[VZ] * b.mMatrix[VZ][VZ] +
+ a.mV[VW] * b.mMatrix[VW][VZ],
+
+ a.mV[VX] * b.mMatrix[VX][VW] +
+ a.mV[VY] * b.mMatrix[VY][VW] +
+ a.mV[VZ] * b.mMatrix[VZ][VW] +
+ a.mV[VW] * b.mMatrix[VW][VW]);
}
LLVector4 rotate_vector(const LLVector4 &a, const LLMatrix4 &b)
diff --git a/linden/indra/llmath/m4math.h b/linden/indra/llmath/m4math.h
index 7de29ed..24f9f86 100644
--- a/linden/indra/llmath/m4math.h
+++ b/linden/indra/llmath/m4math.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -266,27 +267,6 @@ inline const LLMatrix4& LLMatrix4::identity()
return (*this);
}
-inline LLVector3 operator*(const LLVector3 &a, const LLMatrix4 &b)
-{
- // Converts a to LLVector4 and applies full transformation
- // Operates "to the left" on row-vector a
- LLVector3 vec;
- vec.mV[VX] = a.mV[VX] * b.mMatrix[VX][VX] +
- a.mV[VY] * b.mMatrix[VY][VX] +
- a.mV[VZ] * b.mMatrix[VZ][VX] +
- b.mMatrix[VW][VX];
-
- vec.mV[VY] = a.mV[VX] * b.mMatrix[VX][VY] +
- a.mV[VY] * b.mMatrix[VY][VY] +
- a.mV[VZ] * b.mMatrix[VZ][VY] +
- b.mMatrix[VW][VY];
-
- vec.mV[VZ] = a.mV[VX] * b.mMatrix[VX][VZ] +
- a.mV[VY] * b.mMatrix[VY][VZ] +
- a.mV[VZ] * b.mMatrix[VZ][VZ] +
- b.mMatrix[VW][VZ];
- return vec;
-}
/*
inline LLMatrix4 operator*(const LLMatrix4 &a, const LLMatrix4 &b)
diff --git a/linden/indra/llmath/raytrace.cpp b/linden/indra/llmath/raytrace.cpp
index 64bf616..634542d 100644
--- a/linden/indra/llmath/raytrace.cpp
+++ b/linden/indra/llmath/raytrace.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/raytrace.h b/linden/indra/llmath/raytrace.h
index 58cca69..f68002f 100644
--- a/linden/indra/llmath/raytrace.h
+++ b/linden/indra/llmath/raytrace.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/v2math.cpp b/linden/indra/llmath/v2math.cpp
index cee0f73..e41227b 100644
--- a/linden/indra/llmath/v2math.cpp
+++ b/linden/indra/llmath/v2math.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/v2math.h b/linden/indra/llmath/v2math.h
index c978fc0..bcfe016 100644
--- a/linden/indra/llmath/v2math.h
+++ b/linden/indra/llmath/v2math.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/v3color.cpp b/linden/indra/llmath/v3color.cpp
index 9428093..5464a0b 100644
--- a/linden/indra/llmath/v3color.cpp
+++ b/linden/indra/llmath/v3color.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -61,3 +62,52 @@ std::ostream& operator<<(std::ostream& s, const LLColor3 &a)
s << "{ " << a.mV[VX] << ", " << a.mV[VY] << ", " << a.mV[VZ] << " }";
return s;
}
+
+void LLColor3::calcHSL(F32* hue, F32* saturation, F32* luminance) const
+{
+ F32 var_R = mV[VRED];
+ F32 var_G = mV[VGREEN];
+ F32 var_B = mV[VBLUE];
+
+ F32 var_Min = ( var_R < ( var_G < var_B ? var_G : var_B ) ? var_R : ( var_G < var_B ? var_G : var_B ) );
+ F32 var_Max = ( var_R > ( var_G > var_B ? var_G : var_B ) ? var_R : ( var_G > var_B ? var_G : var_B ) );
+
+ F32 del_Max = var_Max - var_Min;
+
+ F32 L = ( var_Max + var_Min ) / 2.0f;
+ F32 H = 0.0f;
+ F32 S = 0.0f;
+
+ if ( del_Max == 0.0f )
+ {
+ H = 0.0f;
+ S = 0.0f;
+ }
+ else
+ {
+ if ( L < 0.5 )
+ S = del_Max / ( var_Max + var_Min );
+ else
+ S = del_Max / ( 2.0f - var_Max - var_Min );
+
+ F32 del_R = ( ( ( var_Max - var_R ) / 6.0f ) + ( del_Max / 2.0f ) ) / del_Max;
+ F32 del_G = ( ( ( var_Max - var_G ) / 6.0f ) + ( del_Max / 2.0f ) ) / del_Max;
+ F32 del_B = ( ( ( var_Max - var_B ) / 6.0f ) + ( del_Max / 2.0f ) ) / del_Max;
+
+ if ( var_R >= var_Max )
+ H = del_B - del_G;
+ else
+ if ( var_G >= var_Max )
+ H = ( 1.0f / 3.0f ) + del_R - del_B;
+ else
+ if ( var_B >= var_Max )
+ H = ( 2.0f / 3.0f ) + del_G - del_R;
+
+ if ( H < 0.0f ) H += 1.0f;
+ if ( H > 1.0f ) H -= 1.0f;
+ }
+
+ if (hue) *hue = H;
+ if (saturation) *saturation = S;
+ if (luminance) *luminance = L;
+}
\ No newline at end of file
diff --git a/linden/indra/llmath/v3color.h b/linden/indra/llmath/v3color.h
index 06a94db..8f9224d 100644
--- a/linden/indra/llmath/v3color.h
+++ b/linden/indra/llmath/v3color.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -71,6 +72,8 @@ public:
mV[1] = (F32) sd[1].asReal();;
mV[2] = (F32) sd[2].asReal();;
}
+
+ void calcHSL(F32* hue, F32* saturation, F32* luminance) const;
const LLColor3& setToBlack(); // Clears LLColor3 to (0, 0, 0)
const LLColor3& setToWhite(); // Zero LLColor3 to (0, 0, 0)
diff --git a/linden/indra/llmath/v3dmath.cpp b/linden/indra/llmath/v3dmath.cpp
index 5d3aad0..059f9c6 100644
--- a/linden/indra/llmath/v3dmath.cpp
+++ b/linden/indra/llmath/v3dmath.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/v3dmath.h b/linden/indra/llmath/v3dmath.h
index da13cc3..c101cc8 100644
--- a/linden/indra/llmath/v3dmath.h
+++ b/linden/indra/llmath/v3dmath.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/v3math.cpp b/linden/indra/llmath/v3math.cpp
index a97b6d8..f42fe1c 100644
--- a/linden/indra/llmath/v3math.cpp
+++ b/linden/indra/llmath/v3math.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/v3math.h b/linden/indra/llmath/v3math.h
index e7134eb..bf211e2 100644
--- a/linden/indra/llmath/v3math.h
+++ b/linden/indra/llmath/v3math.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/v4color.cpp b/linden/indra/llmath/v4color.cpp
index 2732a60..281e5f1 100644
--- a/linden/indra/llmath/v4color.cpp
+++ b/linden/indra/llmath/v4color.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -224,6 +225,55 @@ LLColor4 vec3to4(const LLColor3 &vec)
return temp;
}
+void LLColor4::calcHSL(F32* hue, F32* saturation, F32* luminance) const
+{
+ F32 var_R = mV[VRED];
+ F32 var_G = mV[VGREEN];
+ F32 var_B = mV[VBLUE];
+
+ F32 var_Min = ( var_R < ( var_G < var_B ? var_G : var_B ) ? var_R : ( var_G < var_B ? var_G : var_B ) );
+ F32 var_Max = ( var_R > ( var_G > var_B ? var_G : var_B ) ? var_R : ( var_G > var_B ? var_G : var_B ) );
+
+ F32 del_Max = var_Max - var_Min;
+
+ F32 L = ( var_Max + var_Min ) / 2.0f;
+ F32 H = 0.0f;
+ F32 S = 0.0f;
+
+ if ( del_Max == 0.0f )
+ {
+ H = 0.0f;
+ S = 0.0f;
+ }
+ else
+ {
+ if ( L < 0.5 )
+ S = del_Max / ( var_Max + var_Min );
+ else
+ S = del_Max / ( 2.0f - var_Max - var_Min );
+
+ F32 del_R = ( ( ( var_Max - var_R ) / 6.0f ) + ( del_Max / 2.0f ) ) / del_Max;
+ F32 del_G = ( ( ( var_Max - var_G ) / 6.0f ) + ( del_Max / 2.0f ) ) / del_Max;
+ F32 del_B = ( ( ( var_Max - var_B ) / 6.0f ) + ( del_Max / 2.0f ) ) / del_Max;
+
+ if ( var_R >= var_Max )
+ H = del_B - del_G;
+ else
+ if ( var_G >= var_Max )
+ H = ( 1.0f / 3.0f ) + del_R - del_B;
+ else
+ if ( var_B >= var_Max )
+ H = ( 2.0f / 3.0f ) + del_G - del_R;
+
+ if ( H < 0.0f ) H += 1.0f;
+ if ( H > 1.0f ) H -= 1.0f;
+ }
+
+ if (hue) *hue = H;
+ if (saturation) *saturation = S;
+ if (luminance) *luminance = L;
+}
+
// static
BOOL LLColor4::parseColor(const char* buf, LLColor4* color)
{
diff --git a/linden/indra/llmath/v4color.h b/linden/indra/llmath/v4color.h
index d4130d6..d79b6c8 100644
--- a/linden/indra/llmath/v4color.h
+++ b/linden/indra/llmath/v4color.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -73,6 +74,8 @@ class LLColor4
mV[3] = (F32) sd[3].asReal();
}
+ void calcHSL(F32* hue, F32* saturation, F32* luminance) const;
+
const LLColor4& setToBlack(); // zero LLColor4 to (0, 0, 0, 1)
const LLColor4& setToWhite(); // zero LLColor4 to (0, 0, 0, 1)
diff --git a/linden/indra/llmath/v4coloru.cpp b/linden/indra/llmath/v4coloru.cpp
index 848a082..90399b5 100644
--- a/linden/indra/llmath/v4coloru.cpp
+++ b/linden/indra/llmath/v4coloru.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/v4coloru.h b/linden/indra/llmath/v4coloru.h
index a5124d0..08e723a 100644
--- a/linden/indra/llmath/v4coloru.h
+++ b/linden/indra/llmath/v4coloru.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/v4math.cpp b/linden/indra/llmath/v4math.cpp
index a4af47d..fa52d95 100644
--- a/linden/indra/llmath/v4math.cpp
+++ b/linden/indra/llmath/v4math.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/v4math.h b/linden/indra/llmath/v4math.h
index f768ba7..f3c2ccc 100644
--- a/linden/indra/llmath/v4math.h
+++ b/linden/indra/llmath/v4math.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -45,7 +46,8 @@ class LLVector4
public:
F32 mV[LENGTHOFVECTOR4];
LLVector4(); // Initializes LLVector4 to (0, 0, 0, 1)
- explicit LLVector4(const F32 *vec); // Initializes LLVector4 to (vec[0]. vec[1], vec[2], 1)
+ explicit LLVector4(const F32 *vec); // Initializes LLVector4 to (vec[0]. vec[1], vec[2], vec[3])
+ explicit LLVector4(const F64 *vec); // Initialized LLVector4 to ((F32) vec[0], (F32) vec[1], (F32) vec[3], (F32) vec[4]);
explicit LLVector4(const LLVector3 &vec); // Initializes LLVector4 to (vec, 1)
explicit LLVector4(const LLVector3 &vec, F32 w); // Initializes LLVector4 to (vec, w)
LLVector4(F32 x, F32 y, F32 z); // Initializes LLVector4 to (x. y, z, 1)
@@ -155,6 +157,14 @@ inline LLVector4::LLVector4(const F32 *vec)
mV[VW] = vec[VW];
}
+inline LLVector4::LLVector4(const F64 *vec)
+{
+ mV[VX] = (F32) vec[VX];
+ mV[VY] = (F32) vec[VY];
+ mV[VZ] = (F32) vec[VZ];
+ mV[VW] = (F32) vec[VW];
+}
+
inline LLVector4::LLVector4(const LLVector3 &vec)
{
mV[VX] = vec.mV[VX];
diff --git a/linden/indra/llmath/xform.cpp b/linden/indra/llmath/xform.cpp
index fc2e060..71c2755 100644
--- a/linden/indra/llmath/xform.cpp
+++ b/linden/indra/llmath/xform.cpp
@@ -3,6 +3,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmath/xform.h b/linden/indra/llmath/xform.h
index af28e43..605b1b5 100644
--- a/linden/indra/llmath/xform.h
+++ b/linden/indra/llmath/xform.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmedia/llmediabase.cpp b/linden/indra/llmedia/llmediabase.cpp
index a27fd34..7abf960 100644
--- a/linden/indra/llmedia/llmediabase.cpp
+++ b/linden/indra/llmedia/llmediabase.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmedia/llmediabase.h b/linden/indra/llmedia/llmediabase.h
index cf16947..f78c7ad 100644
--- a/linden/indra/llmedia/llmediabase.h
+++ b/linden/indra/llmedia/llmediabase.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmedia/llmediaemitter.h b/linden/indra/llmedia/llmediaemitter.h
index fc68303..0560f16 100644
--- a/linden/indra/llmedia/llmediaemitter.h
+++ b/linden/indra/llmedia/llmediaemitter.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmedia/llmediaemitterevents.h b/linden/indra/llmedia/llmediaemitterevents.h
index 1a2eb17..632f863 100644
--- a/linden/indra/llmedia/llmediaemitterevents.h
+++ b/linden/indra/llmedia/llmediaemitterevents.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmedia/llmediaengine.cpp b/linden/indra/llmedia/llmediaengine.cpp
index c8a21ba..34f63b7 100644
--- a/linden/indra/llmedia/llmediaengine.cpp
+++ b/linden/indra/llmedia/llmediaengine.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmedia/llmediaengine.h b/linden/indra/llmedia/llmediaengine.h
index 0d0db58..775837b 100644
--- a/linden/indra/llmedia/llmediaengine.h
+++ b/linden/indra/llmedia/llmediaengine.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmedia/llmediaimplquicktime.cpp b/linden/indra/llmedia/llmediaimplquicktime.cpp
index 6489f66..6028d51 100644
--- a/linden/indra/llmedia/llmediaimplquicktime.cpp
+++ b/linden/indra/llmedia/llmediaimplquicktime.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmedia/llmediaimplquicktime.h b/linden/indra/llmedia/llmediaimplquicktime.h
index 9eb3a04..d564d3a 100644
--- a/linden/indra/llmedia/llmediaimplquicktime.h
+++ b/linden/indra/llmedia/llmediaimplquicktime.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmedia/llmediamoviebase.cpp b/linden/indra/llmedia/llmediamoviebase.cpp
index b24e7ab..46b76b0 100644
--- a/linden/indra/llmedia/llmediamoviebase.cpp
+++ b/linden/indra/llmedia/llmediamoviebase.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmedia/llmediamoviebase.h b/linden/indra/llmedia/llmediamoviebase.h
index e9617c0..91c21d8 100644
--- a/linden/indra/llmedia/llmediamoviebase.h
+++ b/linden/indra/llmedia/llmediamoviebase.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmedia/llmediaobservers.h b/linden/indra/llmedia/llmediaobservers.h
index a604989..c45005d 100644
--- a/linden/indra/llmedia/llmediaobservers.h
+++ b/linden/indra/llmedia/llmediaobservers.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/files.lst b/linden/indra/llmessage/files.lst
index 2ff3771..456dffe 100644
--- a/linden/indra/llmessage/files.lst
+++ b/linden/indra/llmessage/files.lst
@@ -14,6 +14,7 @@ llmessage/llhost.cpp
llmessage/llhttpassetstorage.cpp
llmessage/llhttpclient.cpp
llmessage/llhttpnode.cpp
+llmessage/llhttpsender.cpp
llmessage/llinstantmessage.cpp
llmessage/lliobuffer.cpp
llmessage/lliohttpserver.cpp
@@ -22,6 +23,10 @@ llmessage/lliosocket.cpp
llmessage/llioutil.cpp
llmessage/lllogtextmessage.cpp
llmessage/llmail.cpp
+llmessage/llmessagebuilder.cpp
+llmessage/llmessageconfig.cpp
+llmessage/llmessagereader.cpp
+llmessage/llmessagetemplate.cpp
llmessage/llmessagethrottle.cpp
llmessage/llmime.cpp
llmessage/llnamevalue.cpp
@@ -32,10 +37,14 @@ llmessage/llpartdata.cpp
llmessage/llpumpio.cpp
llmessage/llsdappservices.cpp
llmessage/llsdhttpserver.cpp
-llmessage/llsdmessagesystem.cpp
+llmessage/llsdmessagereader.cpp
+llmessage/llsdmessagebuilder.cpp
llmessage/llsdrpcclient.cpp
llmessage/llsdrpcserver.cpp
llmessage/llservice.cpp
+llmessage/llservicebuilder.cpp
+llmessage/lltemplatemessagebuilder.cpp
+llmessage/lltemplatemessagereader.cpp
llmessage/llthrottle.cpp
llmessage/lltransfermanager.cpp
llmessage/lltransfersourceasset.cpp
diff --git a/linden/indra/llmessage/llassetstorage.cpp b/linden/indra/llmessage/llassetstorage.cpp
index a8cd0e5..4f4fc0c 100644
--- a/linden/indra/llmessage/llassetstorage.cpp
+++ b/linden/indra/llmessage/llassetstorage.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -434,20 +435,21 @@ void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, vo
if (callback == tmp->mDownCallback && user_data == tmp->mUserData)
{
// this is a duplicate from the same subsystem - throw it away
- llinfos << "Discarding duplicate request for UUID " << uuid << llendl;
+ llwarns << "Discarding duplicate request for asset " << uuid
+ << "." << LLAssetType::lookup(type) << llendl;
return;
}
- else
- {
- llinfos << "Adding additional non-duplicate request for UUID " << uuid << llendl;
- }
// this is a duplicate request
// queue the request, but don't actually ask for it again
duplicate = TRUE;
- break;
}
}
+ if (duplicate)
+ {
+ llinfos << "Adding additional non-duplicate request for asset " << uuid
+ << "." << LLAssetType::lookup(type) << llendl;
+ }
// This can be overridden by subclasses
_queueDataRequest(uuid, type, callback, user_data, duplicate, is_priority);
@@ -1272,7 +1274,7 @@ void LLAssetStorage::legacyGetDataCallback(LLVFS *vfs, const LLUUID &uuid, LLAss
char uuid_str[UUID_STR_LENGTH]; /* Flawfinder: ignore */
uuid.toString(uuid_str);
- snprintf(filename,sizeof(filename),"%s.%s",gDirUtilp->getExpandedFilename(LL_PATH_CACHE,uuid_str).c_str(),LLAssetType::lookup(type)); /* Flawfinder: ignore */
+ snprintf(filename,sizeof(filename),"%s.%s",gDirUtilp->getExpandedFilename(LL_PATH_CACHE,uuid_str).c_str(),LLAssetType::lookup(type)); /* Flawfinder: ignore */
FILE* fp = LLFile::fopen(filename, "wb"); /* Flawfinder: ignore */
if (fp)
diff --git a/linden/indra/llmessage/llassetstorage.h b/linden/indra/llmessage/llassetstorage.h
index 639ab59..3c7a709 100644
--- a/linden/indra/llmessage/llassetstorage.h
+++ b/linden/indra/llmessage/llassetstorage.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llblowfishcipher.cpp b/linden/indra/llmessage/llblowfishcipher.cpp
index f9a68ab..1772078 100644
--- a/linden/indra/llmessage/llblowfishcipher.cpp
+++ b/linden/indra/llmessage/llblowfishcipher.cpp
@@ -7,6 +7,7 @@
*
* Copyright (c) 2007-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -84,27 +85,33 @@ U32 LLBlowfishCipher::encrypt(const U8* src, U32 src_len, U8* dst, U32 dst_len)
<< " iv_len " << iv_length
<< llendl;
- int output_len = 0;
- if (!EVP_EncryptUpdate(&context,
- dst,
- &output_len,
- src,
- src_len))
- {
- llwarns << "LLBlowfishCipher::encrypt EVP_EncryptUpdate failure" << llendl;
- return 0;
- }
-
- // There may be some final data left to encrypt if the input is
- // not an exact multiple of the block size.
- int temp_len = 0;
- if (!EVP_EncryptFinal_ex(&context, (unsigned char*)(dst + output_len), &temp_len))
- {
- llwarns << "LLBlowfishCipher::encrypt EVP_EncryptFinal failure" << llendl;
- return 0;
- }
- output_len += temp_len;
- return output_len;
+ int output_len = 0;
+ int temp_len = 0;
+ if (!EVP_EncryptUpdate(&context,
+ dst,
+ &output_len,
+ src,
+ src_len))
+ {
+ llwarns << "LLBlowfishCipher::encrypt EVP_EncryptUpdate failure" << llendl;
+ goto ERROR;
+ }
+
+ // There may be some final data left to encrypt if the input is
+ // not an exact multiple of the block size.
+ if (!EVP_EncryptFinal_ex(&context, (unsigned char*)(dst + output_len), &temp_len))
+ {
+ llwarns << "LLBlowfishCipher::encrypt EVP_EncryptFinal failure" << llendl;
+ goto ERROR;
+ }
+ output_len += temp_len;
+
+ EVP_CIPHER_CTX_cleanup(&context);
+ return output_len;
+
+ERROR:
+ EVP_CIPHER_CTX_cleanup(&context);
+ return 0;
}
// virtual
diff --git a/linden/indra/llmessage/llblowfishcipher.h b/linden/indra/llmessage/llblowfishcipher.h
index 2557598..0ba1473 100644
--- a/linden/indra/llmessage/llblowfishcipher.h
+++ b/linden/indra/llmessage/llblowfishcipher.h
@@ -7,6 +7,7 @@
*
* Copyright (c) 2007-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llbuffer.cpp b/linden/indra/llmessage/llbuffer.cpp
index 3dd34a0..ad822bc 100644
--- a/linden/indra/llmessage/llbuffer.cpp
+++ b/linden/indra/llmessage/llbuffer.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -84,24 +85,44 @@ S32 LLSegment::size() const
return mSize;
}
+bool LLSegment::operator==(const LLSegment& rhs) const
+{
+ if((mData != rhs.mData)||(mSize != rhs.mSize)||(mChannel != rhs.mChannel))
+ {
+ return false;
+ }
+ return true;
+}
/**
* LLHeapBuffer
*/
-LLHeapBuffer::LLHeapBuffer()
+LLHeapBuffer::LLHeapBuffer() :
+ mBuffer(NULL),
+ mSize(0),
+ mNextFree(NULL),
+ mReclaimedBytes(0)
{
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
const S32 DEFAULT_HEAP_BUFFER_SIZE = 16384;
allocate(DEFAULT_HEAP_BUFFER_SIZE);
}
-LLHeapBuffer::LLHeapBuffer(S32 size)
+LLHeapBuffer::LLHeapBuffer(S32 size) :
+ mBuffer(NULL),
+ mSize(0),
+ mNextFree(NULL),
+ mReclaimedBytes(0)
{
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
allocate(size);
}
-LLHeapBuffer::LLHeapBuffer(const U8* src, S32 len)
+LLHeapBuffer::LLHeapBuffer(const U8* src, S32 len) :
+ mBuffer(NULL),
+ mSize(0),
+ mNextFree(NULL),
+ mReclaimedBytes(0)
{
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
if((len > 0) && src)
@@ -112,12 +133,6 @@ LLHeapBuffer::LLHeapBuffer(const U8* src, S32 len)
memcpy(mBuffer, src, len); /*Flawfinder: ignore*/
}
}
- else
- {
- mBuffer = NULL;
- mSize = 0;
- mNextFree = NULL;
- }
}
// virtual
@@ -130,11 +145,10 @@ LLHeapBuffer::~LLHeapBuffer()
mNextFree = NULL;
}
-// virtual
-//S32 LLHeapBuffer::bytesLeft() const
-//{
-// return (mSize - (mNextFree - mBuffer));
-//}
+S32 LLHeapBuffer::bytesLeft() const
+{
+ return (mSize - (mNextFree - mBuffer));
+}
// virtual
bool LLHeapBuffer::createSegment(
@@ -158,9 +172,47 @@ bool LLHeapBuffer::createSegment(
return true;
}
+// virtual
+bool LLHeapBuffer::reclaimSegment(const LLSegment& segment)
+{
+ if(containsSegment(segment))
+ {
+ mReclaimedBytes += segment.size();
+ if(mReclaimedBytes == mSize)
+ {
+ // We have reclaimed all of the memory from this
+ // buffer. Therefore, we can reset the mNextFree to the
+ // start of the buffer, and reset the reclaimed bytes.
+ mReclaimedBytes = 0;
+ mNextFree = mBuffer;
+ }
+ else if(mReclaimedBytes > mSize)
+ {
+ llwarns << "LLHeapBuffer reclaimed more memory than allocated."
+ << " This is probably programmer error." << llendl;
+ }
+ return true;
+ }
+ return false;
+}
+
+// virtual
+bool LLHeapBuffer::containsSegment(const LLSegment& segment) const
+{
+ // *NOTE: this check is fairly simple because heap buffers are
+ // simple contiguous chunks of heap memory.
+ if((mBuffer > segment.data())
+ || ((mBuffer + mSize) < (segment.data() + segment.size())))
+ {
+ return false;
+ }
+ return true;
+}
+
void LLHeapBuffer::allocate(S32 size)
{
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
+ mReclaimedBytes = 0;
mBuffer = new U8[size];
if(mBuffer)
{
@@ -199,6 +251,18 @@ LLChannelDescriptors LLBufferArray::nextChannel()
return rv;
}
+S32 LLBufferArray::capacity() const
+{
+ S32 total = 0;
+ const_buffer_iterator_t iter = mBuffers.begin();
+ const_buffer_iterator_t end = mBuffers.end();
+ for(; iter != end; ++iter)
+ {
+ total += (*iter)->capacity();
+ }
+ return total;
+}
+
bool LLBufferArray::append(S32 channel, const U8* src, S32 len)
{
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
@@ -703,14 +767,31 @@ LLBufferArray::segment_iterator_t LLBufferArray::makeSegment(
return send;
}
-bool LLBufferArray::eraseSegment(const segment_iterator_t& iter)
+bool LLBufferArray::eraseSegment(const segment_iterator_t& erase_iter)
{
LLMemType m1(LLMemType::MTYPE_IO_BUFFER);
- // *FIX: in theory, we could reclaim the memory. We are leaking a
- // bit of buffered memory into an unusable but still referenced
- // location.
- (void)mSegments.erase(iter);
- return true;
+
+ // Find out which buffer contains the segment, and if it is found,
+ // ask it to reclaim the memory.
+ bool rv = false;
+ LLSegment segment(*erase_iter);
+ buffer_iterator_t iter = mBuffers.begin();
+ buffer_iterator_t end = mBuffers.end();
+ for(; iter != end; ++iter)
+ {
+ // We can safely call reclaimSegment on every buffer, and once
+ // it returns true, the segment was found.
+ if((*iter)->reclaimSegment(segment))
+ {
+ rv = true;
+ break;
+ }
+ }
+
+ // No need to get the return value since we are not interested in
+ // the interator retured by the call.
+ (void)mSegments.erase(erase_iter);
+ return rv;
}
diff --git a/linden/indra/llmessage/llbuffer.h b/linden/indra/llmessage/llbuffer.h
index cd76c90..badbc9f 100644
--- a/linden/indra/llmessage/llbuffer.h
+++ b/linden/indra/llmessage/llbuffer.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -32,7 +33,7 @@
/**
* Declaration of classes used for minimizing calls to new[],
- * memcpy(), and delete[]. Typically, you would create an LLHeapArray,
+ * memcpy(), and delete[]. Typically, you would create an LLBufferArray,
* feed it data, modify and add segments as you process it, and feed
* it to a sink.
*/
@@ -108,6 +109,16 @@ public:
*/
S32 size() const;
+ /**
+ * @brief Check if two segments are the same.
+ *
+ * Two segments are considered equal if they are on the same
+ * channel and cover the exact same address range.
+ * @param rhs the segment to compare with this segment.
+ * @return Returns true if they are equal.
+ */
+ bool operator==(const LLSegment& rhs) const;
+
protected:
S32 mChannel;
U8* mData;
@@ -145,6 +156,35 @@ public:
* @return Returns true if a segment was found.
*/
virtual bool createSegment(S32 channel, S32 size, LLSegment& segment) = 0;
+
+ /**
+ * @brief Reclaim a segment from this buffer.
+ *
+ * This method is called on a buffer object when a caller is done
+ * with a contiguous segment of memory inside this buffer. Since
+ * segments can be cut arbitrarily outside of the control of the
+ * buffer, this segment may not match any segment returned from
+ * createSegment()
.
+ * @param segment The contiguous buffer segment to reclaim.
+ * @return Returns true if the call was successful.
+ */
+ virtual bool reclaimSegment(const LLSegment& segment) = 0;
+
+ /**
+ * @brief Test if a segment is inside this buffer.
+ *
+ * @param segment The contiguous buffer segment to test.
+ * @return Returns true if the segment is in the bufffer.
+ */
+ virtual bool containsSegment(const LLSegment& segment) const = 0;
+
+ /**
+ * @brief Return the current number of bytes allocated.
+ *
+ * This was implemented as a debugging tool, and it is not
+ * necessarily a good idea to use it for anything else.
+ */
+ virtual S32 capacity() const = 0;
};
/**
@@ -186,9 +226,11 @@ public:
/**
* @brief Get the number of bytes left in the buffer.
*
+ * Note that this is not a virtual function, and only available in
+ * the LLHeapBuffer as a debugging aid.
* @return Returns the number of bytes left.
*/
- //virtual S32 bytesLeft() const;
+ S32 bytesLeft() const;
/**
* @brief Generate a segment for this buffer.
@@ -205,10 +247,40 @@ public:
*/
virtual bool createSegment(S32 channel, S32 size, LLSegment& segment);
+ /**
+ * @brief reclaim a segment from this buffer.
+ *
+ * This method is called on a buffer object when a caller is done
+ * with a contiguous segment of memory inside this buffer. Since
+ * segments can be cut arbitrarily outside of the control of the
+ * buffer, this segment may not match any segment returned from
+ * createSegment()
.
+ * This call will fail if the segment passed in is note completely
+ * inside the buffer, eg, if the segment starts before this buffer
+ * in memory or ends after it.
+ * @param segment The contiguous buffer segment to reclaim.
+ * @return Returns true if the call was successful.
+ */
+ virtual bool reclaimSegment(const LLSegment& segment);
+
+ /**
+ * @brief Test if a segment is inside this buffer.
+ *
+ * @param segment The contiguous buffer segment to test.
+ * @return Returns true if the segment is in the bufffer.
+ */
+ virtual bool containsSegment(const LLSegment& segment) const;
+
+ /**
+ * @brief Return the current number of bytes allocated.
+ */
+ virtual S32 capacity() const { return mSize; }
+
protected:
U8* mBuffer;
S32 mSize;
U8* mNextFree;
+ S32 mReclaimedBytes;
private:
/**
@@ -223,13 +295,14 @@ private:
* @brief Class to represent scattered memory buffers and in-order segments
* of that buffered data.
*
- * NOTE: This class needs to have an iovec interface
+ * *NOTE: This class needs to have an iovec interface
*/
class LLBufferArray
{
public:
typedef std::vector buffer_list_t;
typedef buffer_list_t::iterator buffer_iterator_t;
+ typedef buffer_list_t::const_iterator const_buffer_iterator_t;
typedef std::list segment_list_t;
typedef segment_list_t::const_iterator const_segment_iterator_t;
typedef segment_list_t::iterator segment_iterator_t;
@@ -260,11 +333,16 @@ public:
*/
LLChannelDescriptors nextChannel();
//@}
-
+
/* @name Data methods
*/
//@{
+ /**
+ * @brief Return the sum of all allocated bytes.
+ */
+ S32 capacity() const;
+
// These methods will be useful once there is any kind of buffer
// besides a heap buffer.
//bool append(EBufferChannel channel, LLBuffer* data);
@@ -294,7 +372,6 @@ public:
* new segment is created and put in the front of the array. This
* object will internally allocate new buffers if necessary.
* @param channel The channel for this data
-
* @param src The start of memory for the data to be copied
* @param len The number of bytes of data to copy
* @return Returns true if the method worked.
@@ -378,7 +455,7 @@ public:
bool takeContents(LLBufferArray& source);
//@}
- /* @name Segment methods
+ /* @name Segment methods
*/
//@{
/**
@@ -468,7 +545,7 @@ public:
* endSegment() on failure.
*/
segment_iterator_t makeSegment(S32 channel, S32 length);
-
+
/**
* @brief Erase the segment if it is in the buffer array.
*
diff --git a/linden/indra/llmessage/llbufferstream.cpp b/linden/indra/llmessage/llbufferstream.cpp
index 7d899d6..4a4d892 100644
--- a/linden/indra/llmessage/llbufferstream.cpp
+++ b/linden/indra/llmessage/llbufferstream.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -62,34 +63,64 @@ int LLBufferStreamBuf::underflow()
{
return EOF;
}
- LLSegment segment;
- LLBufferArray::segment_iterator_t it;
- U8* last_pos = (U8*)gptr();
- if(last_pos) --last_pos;
-
- LLBufferArray::segment_iterator_t end = mBuffer->endSegment();
- // Get iterator to full segment containing last_pos
- // and construct sub-segment starting at last_pos.
- // Note: segment may != *it at this point
- it = mBuffer->constructSegmentAfter(last_pos, segment);
- if(it == end)
+ LLBufferArray::segment_iterator_t iter;
+ LLBufferArray::segment_iterator_t end = mBuffer->endSegment();
+ U8* last_pos = (U8*)gptr();
+ LLSegment segment;
+ if(last_pos)
+ {
+ // Back up into a piece of memory we know that we have
+ // allocated so that calls for the next segment based on
+ // 'after' will succeed.
+ --last_pos;
+ iter = mBuffer->splitAfter(last_pos);
+ if(iter != end)
+ {
+ // We need to clear the read segment just in case we have
+ // an early exit in the function and never collect the
+ // next segment. Calling eraseSegment() with the same
+ // segment twice is just like double deleting -- nothing
+ // good comes from it.
+ mBuffer->eraseSegment(iter++);
+ if(iter != end) segment = (*iter);
+ }
+ else
+ {
+ // This should never really happen, but somehow, the
+ // istream is telling the buf that it just finished
+ // reading memory that is not in the buf. I think this
+ // would only happen if there were a bug in the c++ stream
+ // class. Just bail.
+ // *TODO: can we set the fail bit on the stream somehow?
+ return EOF;
+ }
+ }
+ else
+ {
+ // Get iterator to full segment containing last_pos
+ // and construct sub-segment starting at last_pos.
+ // Note: segment may != *it at this point
+ iter = mBuffer->constructSegmentAfter(last_pos, segment);
+ }
+ if(iter == end)
{
return EOF;
}
-
+
// Iterate through segments to find a non-empty segment on input channel.
while((!segment.isOnChannel(mChannels.in()) || (segment.size() == 0)))
{
- ++it;
- if(it == end)
+ ++iter;
+ if(iter == end)
{
return EOF;
}
- segment = *it;
+ segment = *(iter);
}
-
+
+ // set up the stream to read from the next segment.
char* start = (char*)segment.data();
setg(start, start, start + segment.size());
return *gptr();
@@ -144,12 +175,43 @@ int LLBufferStreamBuf::sync()
return return_value;
}
+ // This chunk of code is not necessary because typically, users of
+ // the stream will read until EOF. Therefore, underflow was called
+ // and the segment was discarded before the sync() was called in
+ // the destructor. Theoretically, we could keep some more data
+ // around and detect the rare case where an istream was deleted
+ // before reading to the end, but that will only leave behind some
+ // unavailable but still referenced memory. Also, if another
+ // istream is constructed, it will re-read that segment, and then
+ // discard it.
+ //U8* last_pos = (U8*)gptr();
+ //if(last_pos)
+ //{
+ // // Looks like we read something. Discard what we have read.
+ // // gptr() actually returns the currrent position, but we call
+ // // it last_pos because of how it is used in the split call
+ // // below.
+ // --last_pos;
+ // LLBufferArray::segment_iterator_t iter;
+ // iter = mBuffer->splitAfter(last_pos);
+ // if(iter != mBuffer->endSegment())
+ // {
+ // // We need to clear the read segment just in case we have
+ // // an early exit in the function and never collect the
+ // // next segment. Calling eraseSegment() with the same
+ // // segment twice is just like double deleting -- nothing
+ // // good comes from it.
+ // mBuffer->eraseSegment(iter);
+ // }
+ //}
+
// set the put pointer so that we force an overflow on the next
// write.
U8* address = (U8*)pptr();
setp(NULL, NULL);
- // *NOTE: I bet we could just --address. Need to think about that.
+ // *NOTE: I bet we could just --address if address is not NULL.
+ // Need to think about that.
address = mBuffer->seek(mChannels.out(), address, -1);
if(address)
{
diff --git a/linden/indra/llmessage/llbufferstream.h b/linden/indra/llmessage/llbufferstream.h
index 0a4ad40..5447a80 100644
--- a/linden/indra/llmessage/llbufferstream.h
+++ b/linden/indra/llmessage/llbufferstream.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llcachename.cpp b/linden/indra/llmessage/llcachename.cpp
index e92c72f..5df62b3 100644
--- a/linden/indra/llmessage/llcachename.cpp
+++ b/linden/indra/llmessage/llcachename.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llcachename.h b/linden/indra/llmessage/llcachename.h
index 9987f11..9009b1f 100644
--- a/linden/indra/llmessage/llcachename.h
+++ b/linden/indra/llmessage/llcachename.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llcallbacklisth.h b/linden/indra/llmessage/llcallbacklisth.h
index d1cacbd..74dbcc8 100644
--- a/linden/indra/llmessage/llcallbacklisth.h
+++ b/linden/indra/llmessage/llcallbacklisth.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llchainio.cpp b/linden/indra/llmessage/llchainio.cpp
index 2ca53e0..47352d1 100644
--- a/linden/indra/llmessage/llchainio.cpp
+++ b/linden/indra/llmessage/llchainio.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llchainio.h b/linden/indra/llmessage/llchainio.h
index c65b3c2..ef2747a 100644
--- a/linden/indra/llmessage/llchainio.h
+++ b/linden/indra/llmessage/llchainio.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llcipher.h b/linden/indra/llmessage/llcipher.h
index c1f88ff..1860277 100644
--- a/linden/indra/llmessage/llcipher.h
+++ b/linden/indra/llmessage/llcipher.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llcircuit.cpp b/linden/indra/llmessage/llcircuit.cpp
index d73cc22..5e93e0a 100644
--- a/linden/indra/llmessage/llcircuit.cpp
+++ b/linden/indra/llmessage/llcircuit.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llcircuit.h b/linden/indra/llmessage/llcircuit.h
index 8021685..e3a5779 100644
--- a/linden/indra/llmessage/llcircuit.h
+++ b/linden/indra/llmessage/llcircuit.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llclassifiedflags.cpp b/linden/indra/llmessage/llclassifiedflags.cpp
index 3422802..ed595b1 100644
--- a/linden/indra/llmessage/llclassifiedflags.cpp
+++ b/linden/indra/llmessage/llclassifiedflags.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llclassifiedflags.h b/linden/indra/llmessage/llclassifiedflags.h
index 7c448a3..a2a93d8 100644
--- a/linden/indra/llmessage/llclassifiedflags.h
+++ b/linden/indra/llmessage/llclassifiedflags.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -41,6 +42,8 @@ const U8 CLASSIFIED_QUERY_FILTER_MATURE = 1 << 1;
const U8 CLASSIFIED_QUERY_FILTER_ENABLED = 1 << 2;
const U8 CLASSIFIED_QUERY_FILTER_PRICE = 1 << 3;
+const S32 MAX_CLASSIFIEDS = 100;
+
ClassifiedFlags pack_classified_flags(BOOL is_mature, BOOL auto_renew);
bool is_cf_mature(ClassifiedFlags flags);
//bool is_cf_enabled(ClassifiedFlags flags);
diff --git a/linden/indra/llmessage/lldatapacker.cpp b/linden/indra/llmessage/lldatapacker.cpp
index d4c8704..2448c40 100644
--- a/linden/indra/llmessage/lldatapacker.cpp
+++ b/linden/indra/llmessage/lldatapacker.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -557,7 +558,7 @@ void LLDataPackerBinaryBuffer::dumpBufferToLog()
S32 cur_line = 0;
for (i = 0; i < mBufferSize; i++)
{
- snprintf(line_buffer + cur_line_pos*3, sizeof(line_buffer) - cur_line_pos*3, "%02x ", mBufferp[i]); /*Flawfinder: ignore*/
+ snprintf(line_buffer + cur_line_pos*3, sizeof(line_buffer) - cur_line_pos*3, "%02x ", mBufferp[i]); /* Flawfinder: ignore */
cur_line_pos++;
if (cur_line_pos >= 16)
{
@@ -582,7 +583,7 @@ BOOL LLDataPackerAsciiBuffer::packString(const char *value, const char *name)
int numCopied = 0;
if (mWriteEnabled)
{
- numCopied = snprintf(mCurBufferp,getBufferSize()-getCurrentSize(),"%s\n", value); /*Flawfinder: ignore*/
+ numCopied = snprintf(mCurBufferp,getBufferSize()-getCurrentSize(),"%s\n", value); /* Flawfinder: ignore */
}
else
{
@@ -591,14 +592,15 @@ BOOL LLDataPackerAsciiBuffer::packString(const char *value, const char *name)
// snprintf returns number of bytes that would have been written
// had the output not being truncated. In that case, it will
- // return >= passed in size value. so a check needs to be added
+ // return either -1 or value >= passed in size value . So a check needs to be added
// to detect truncation, and if there is any, only account for the
// actual number of bytes written..and not what could have been
// written.
- if (numCopied > getBufferSize()-getCurrentSize())
+ if (numCopied < 0 || numCopied > getBufferSize()-getCurrentSize())
{
// *NOTE: I believe we need to mark a failure bit at this point.
numCopied = getBufferSize()-getCurrentSize();
+ llwarns << "LLDataPackerAsciiBuffer::packString: string truncated: " << value << llendl;
}
mCurBufferp += numCopied;
return success;
@@ -626,7 +628,7 @@ BOOL LLDataPackerAsciiBuffer::packBinaryData(const U8 *value, S32 size, const ch
int numCopied = 0;
if (mWriteEnabled)
{
- numCopied = snprintf(mCurBufferp,getBufferSize()-getCurrentSize(),"%010d ", size); /*Flawfinder: ignore*/
+ numCopied = snprintf(mCurBufferp,getBufferSize()-getCurrentSize(),"%010d ", size); /* Flawfinder: ignore */
// snprintf returns number of bytes that would have been
// written had the output not being truncated. In that case,
@@ -634,9 +636,10 @@ BOOL LLDataPackerAsciiBuffer::packBinaryData(const U8 *value, S32 size, const ch
// to be added to detect truncation, and if there is any, only
// account for the actual number of bytes written..and not
// what could have been written.
- if (numCopied > getBufferSize()-getCurrentSize())
+ if (numCopied < 0 || numCopied > getBufferSize()-getCurrentSize())
{
numCopied = getBufferSize()-getCurrentSize();
+ llwarns << "LLDataPackerAsciiBuffer::packBinaryData: number truncated: " << size << llendl;
}
mCurBufferp += numCopied;
@@ -645,10 +648,11 @@ BOOL LLDataPackerAsciiBuffer::packBinaryData(const U8 *value, S32 size, const ch
BOOL bBufferFull = FALSE;
for (i = 0; i < size && !bBufferFull; i++)
{
- numCopied = snprintf(mCurBufferp, getBufferSize()-getCurrentSize(), "%02x ", value[i]); /* Flawfinder: ignore */
- if (numCopied > getBufferSize()-getCurrentSize())
+ numCopied = snprintf(mCurBufferp, getBufferSize()-getCurrentSize(), "%02x ", value[i]); /* Flawfinder: ignore */
+ if (numCopied < 0 || numCopied > getBufferSize()-getCurrentSize())
{
numCopied = getBufferSize()-getCurrentSize();
+ llwarns << "LLDataPackerAsciiBuffer::packBinaryData: data truncated: " << llendl;
bBufferFull = TRUE;
}
mCurBufferp += numCopied;
@@ -656,10 +660,11 @@ BOOL LLDataPackerAsciiBuffer::packBinaryData(const U8 *value, S32 size, const ch
if (!bBufferFull)
{
- numCopied = snprintf(mCurBufferp,getBufferSize()-getCurrentSize(), "\n"); /* Flawfinder: ignore */
- if (numCopied > getBufferSize()-getCurrentSize())
+ numCopied = snprintf(mCurBufferp,getBufferSize()-getCurrentSize(), "\n"); /* Flawfinder: ignore */
+ if (numCopied < 0 || numCopied > getBufferSize()-getCurrentSize())
{
numCopied = getBufferSize()-getCurrentSize();
+ llwarns << "LLDataPackerAsciiBuffer::packBinaryData: newline truncated: " << llendl;
}
mCurBufferp += numCopied;
}
@@ -717,10 +722,11 @@ BOOL LLDataPackerAsciiBuffer::packBinaryDataFixed(const U8 *value, S32 size, con
BOOL bBufferFull = FALSE;
for (i = 0; i < size && !bBufferFull; i++)
{
- numCopied = snprintf(mCurBufferp, getBufferSize()-getCurrentSize(), "%02x ", value[i]); /* Flawfinder: ignore */
- if (numCopied > getBufferSize()-getCurrentSize())
+ numCopied = snprintf(mCurBufferp, getBufferSize()-getCurrentSize(), "%02x ", value[i]); /* Flawfinder: ignore */
+ if (numCopied < 0 || numCopied > getBufferSize()-getCurrentSize())
{
numCopied = getBufferSize()-getCurrentSize();
+ llwarns << "LLDataPackerAsciiBuffer::packBinaryDataFixed: data truncated: " << llendl;
bBufferFull = TRUE;
}
mCurBufferp += numCopied;
@@ -728,10 +734,11 @@ BOOL LLDataPackerAsciiBuffer::packBinaryDataFixed(const U8 *value, S32 size, con
}
if (!bBufferFull)
{
- numCopied = snprintf(mCurBufferp,getBufferSize()-getCurrentSize(), "\n"); /* Flawfinder: ignore */
- if (numCopied > getBufferSize()-getCurrentSize())
+ numCopied = snprintf(mCurBufferp,getBufferSize()-getCurrentSize(), "\n"); /* Flawfinder: ignore */
+ if (numCopied < 0 || numCopied > getBufferSize()-getCurrentSize())
{
numCopied = getBufferSize()-getCurrentSize();
+ llwarns << "LLDataPackerAsciiBuffer::packBinaryDataFixed: newline truncated: " << llendl;
}
mCurBufferp += numCopied;
@@ -781,21 +788,24 @@ BOOL LLDataPackerAsciiBuffer::packU8(const U8 value, const char *name)
int numCopied = 0;
if (mWriteEnabled)
{
- numCopied = snprintf(mCurBufferp,getBufferSize()-getCurrentSize(),"%d\n", value); /*Flawfinder: ignore*/
+ numCopied = snprintf(mCurBufferp,getBufferSize()-getCurrentSize(),"%d\n", value); /* Flawfinder: ignore */
}
else
{
// just do the write to a temp buffer to get the length
- numCopied = snprintf(DUMMY_BUFFER, sizeof(DUMMY_BUFFER), "%d\n", value); /* Flawfinder: ignore */
+ numCopied = snprintf(DUMMY_BUFFER, sizeof(DUMMY_BUFFER), "%d\n", value); /* Flawfinder: ignore */
}
- // snprintf returns number of bytes that would have been written had the
- // output not being truncated. In that case, it will retuen >= passed in size value.
- // so a check needs to be added to detect truncation, and if there is any,
- // only account for the actual number of bytes written..and not what could have been written.
- if (numCopied > getBufferSize()-getCurrentSize())
+ // snprintf returns number of bytes that would have been written
+ // had the output not being truncated. In that case, it will
+ // return either -1 or value >= passed in size value . So a check needs to be added
+ // to detect truncation, and if there is any, only account for the
+ // actual number of bytes written..and not what could have been
+ // written.
+ if (numCopied < 0 || numCopied > getBufferSize()-getCurrentSize())
{
numCopied = getBufferSize()-getCurrentSize();
+ llwarns << "LLDataPackerAsciiBuffer::packU8: val truncated: " << llendl;
}
mCurBufferp += numCopied;
@@ -826,20 +836,23 @@ BOOL LLDataPackerAsciiBuffer::packU16(const U16 value, const char *name)
int numCopied = 0;
if (mWriteEnabled)
{
- numCopied = snprintf(mCurBufferp,getBufferSize()-getCurrentSize(),"%d\n", value); /*Flawfinder: ignore*/
+ numCopied = snprintf(mCurBufferp,getBufferSize()-getCurrentSize(),"%d\n", value); /* Flawfinder: ignore */
}
else
{
- numCopied = snprintf(DUMMY_BUFFER, sizeof(DUMMY_BUFFER), "%d\n", value); /* Flawfinder: ignore */
+ numCopied = snprintf(DUMMY_BUFFER, sizeof(DUMMY_BUFFER), "%d\n", value); /* Flawfinder: ignore */
}
- // snprintf returns number of bytes that would have been written had the
- // output not being truncated. In that case, it will retuen >= passed in size value.
- // so a check needs to be added to detect truncation, and if there is any,
- // only account for the actual number of bytes written..and not what could have been written.
- if (numCopied > getBufferSize()-getCurrentSize())
+ // snprintf returns number of bytes that would have been written
+ // had the output not being truncated. In that case, it will
+ // return either -1 or value >= passed in size value . So a check needs to be added
+ // to detect truncation, and if there is any, only account for the
+ // actual number of bytes written..and not what could have been
+ // written.
+ if (numCopied < 0 || numCopied > getBufferSize()-getCurrentSize())
{
numCopied = getBufferSize()-getCurrentSize();
+ llwarns << "LLDataPackerAsciiBuffer::packU16: val truncated: " << llendl;
}
mCurBufferp += numCopied;
@@ -871,19 +884,22 @@ BOOL LLDataPackerAsciiBuffer::packU32(const U32 value, const char *name)
int numCopied = 0;
if (mWriteEnabled)
{
- numCopied = snprintf(mCurBufferp,getBufferSize()-getCurrentSize(),"%u\n", value); /* Flawfinder: ignore */
+ numCopied = snprintf(mCurBufferp,getBufferSize()-getCurrentSize(),"%u\n", value); /* Flawfinder: ignore */
}
else
{
- numCopied = snprintf(DUMMY_BUFFER, sizeof(DUMMY_BUFFER), "%u\n", value); /* Flawfinder: ignore */
+ numCopied = snprintf(DUMMY_BUFFER, sizeof(DUMMY_BUFFER), "%u\n", value); /* Flawfinder: ignore */
}
- // snprintf returns number of bytes that would have been written had the
- // output not being truncated. In that case, it will retuen >= passed in size value.
- // so a check needs to be added to detect truncation, and if there is any,
- // only account for the actual number of bytes written..and not what could have been written.
- if (numCopied > getBufferSize()-getCurrentSize())
+ // snprintf returns number of bytes that would have been written
+ // had the output not being truncated. In that case, it will
+ // return either -1 or value >= passed in size value . So a check needs to be added
+ // to detect truncation, and if there is any, only account for the
+ // actual number of bytes written..and not what could have been
+ // written.
+ if (numCopied < 0 || numCopied > getBufferSize()-getCurrentSize())
{
numCopied = getBufferSize()-getCurrentSize();
+ llwarns << "LLDataPackerAsciiBuffer::packU32: val truncated: " << llendl;
}
mCurBufferp += numCopied;
@@ -912,19 +928,22 @@ BOOL LLDataPackerAsciiBuffer::packS32(const S32 value, const char *name)
int numCopied = 0;
if (mWriteEnabled)
{
- numCopied = snprintf(mCurBufferp,getBufferSize()-getCurrentSize(),"%d\n", value); /* Flawfinder: ignore */
+ numCopied = snprintf(mCurBufferp,getBufferSize()-getCurrentSize(),"%d\n", value); /* Flawfinder: ignore */
}
else
{
numCopied = snprintf(DUMMY_BUFFER, sizeof(DUMMY_BUFFER), "%d\n", value); /* Flawfinder: ignore */
}
- // snprintf returns number of bytes that would have been written had the
- // output not being truncated. In that case, it will retuen >= passed in size value.
- // so a check needs to be added to detect truncation, and if there is any,
- // only account for the actual number of bytes written..and not what could have been written.
- if (numCopied > getBufferSize()-getCurrentSize())
+ // snprintf returns number of bytes that would have been written
+ // had the output not being truncated. In that case, it will
+ // return either -1 or value >= passed in size value . So a check needs to be added
+ // to detect truncation, and if there is any, only account for the
+ // actual number of bytes written..and not what could have been
+ // written.
+ if (numCopied < 0 || numCopied > getBufferSize()-getCurrentSize())
{
numCopied = getBufferSize()-getCurrentSize();
+ llwarns << "LLDataPackerAsciiBuffer::packS32: val truncated: " << llendl;
}
mCurBufferp += numCopied;
@@ -953,19 +972,22 @@ BOOL LLDataPackerAsciiBuffer::packF32(const F32 value, const char *name)
int numCopied = 0;
if (mWriteEnabled)
{
- numCopied = snprintf(mCurBufferp,getBufferSize()-getCurrentSize(),"%g\n", value); /* Flawfinder: ignore */
+ numCopied = snprintf(mCurBufferp,getBufferSize()-getCurrentSize(),"%g\n", value); /* Flawfinder: ignore */
}
else
{
- numCopied = snprintf(DUMMY_BUFFER, sizeof(DUMMY_BUFFER), "%g\n", value); /* Flawfinder: ignore */
+ numCopied = snprintf(DUMMY_BUFFER, sizeof(DUMMY_BUFFER), "%g\n", value); /* Flawfinder: ignore */
}
- // snprintf returns number of bytes that would have been written had the
- // output not being truncated. In that case, it will retuen >= passed in size value.
- // so a check needs to be added to detect truncation, and if there is any,
- // only account for the actual number of bytes written..and not what could have been written.
- if (numCopied > getBufferSize()-getCurrentSize())
+ // snprintf returns number of bytes that would have been written
+ // had the output not being truncated. In that case, it will
+ // return either -1 or value >= passed in size value . So a check needs to be added
+ // to detect truncation, and if there is any, only account for the
+ // actual number of bytes written..and not what could have been
+ // written.
+ if (numCopied < 0 || numCopied > getBufferSize()-getCurrentSize())
{
numCopied = getBufferSize()-getCurrentSize();
+ llwarns << "LLDataPackerAsciiBuffer::packF32: val truncated: " << llendl;
}
mCurBufferp += numCopied;
@@ -994,19 +1016,22 @@ BOOL LLDataPackerAsciiBuffer::packColor4(const LLColor4 &value, const char *name
int numCopied = 0;
if (mWriteEnabled)
{
- numCopied = snprintf(mCurBufferp,getBufferSize()-getCurrentSize(),"%g %g %g %g\n", value.mV[0], value.mV[1], value.mV[2], value.mV[3]); /* Flawfinder: ignore */
+ numCopied = snprintf(mCurBufferp,getBufferSize()-getCurrentSize(),"%g %g %g %g\n", value.mV[0], value.mV[1], value.mV[2], value.mV[3]); /* Flawfinder: ignore */
}
else
{
numCopied = snprintf(DUMMY_BUFFER,sizeof(DUMMY_BUFFER),"%g %g %g %g\n", value.mV[0], value.mV[1], value.mV[2], value.mV[3]); /* Flawfinder: ignore */
}
- // snprintf returns number of bytes that would have been written had the
- // output not being truncated. In that case, it will retuen >= passed in size value.
- // so a check needs to be added to detect truncation, and if there is any,
- // only account for the actual number of bytes written..and not what could have been written.
- if (numCopied > getBufferSize()-getCurrentSize())
+ // snprintf returns number of bytes that would have been written
+ // had the output not being truncated. In that case, it will
+ // return either -1 or value >= passed in size value . So a check needs to be added
+ // to detect truncation, and if there is any, only account for the
+ // actual number of bytes written..and not what could have been
+ // written.
+ if (numCopied < 0 || numCopied > getBufferSize()-getCurrentSize())
{
numCopied = getBufferSize()-getCurrentSize();
+ llwarns << "LLDataPackerAsciiBuffer::packColor4: truncated: " << llendl;
}
mCurBufferp += numCopied;
@@ -1034,19 +1059,22 @@ BOOL LLDataPackerAsciiBuffer::packColor4U(const LLColor4U &value, const char *na
int numCopied = 0;
if (mWriteEnabled)
{
- numCopied = snprintf(mCurBufferp,getBufferSize()-getCurrentSize(),"%d %d %d %d\n", value.mV[0], value.mV[1], value.mV[2], value.mV[3]); /* Flawfinder: ignore */
+ numCopied = snprintf(mCurBufferp,getBufferSize()-getCurrentSize(),"%d %d %d %d\n", value.mV[0], value.mV[1], value.mV[2], value.mV[3]); /* Flawfinder: ignore */
}
else
{
numCopied = snprintf(DUMMY_BUFFER,sizeof(DUMMY_BUFFER),"%d %d %d %d\n", value.mV[0], value.mV[1], value.mV[2], value.mV[3]); /* Flawfinder: ignore */
}
- // snprintf returns number of bytes that would have been written had the
- // output not being truncated. In that case, it will retuen >= passed in size value.
- // so a check needs to be added to detect truncation, and if there is any,
- // only account for the actual number of bytes written..and not what could have been written.
- if (numCopied > getBufferSize()-getCurrentSize())
+ // snprintf returns number of bytes that would have been written
+ // had the output not being truncated. In that case, it will
+ // return either -1 or value >= passed in size value . So a check needs to be added
+ // to detect truncation, and if there is any, only account for the
+ // actual number of bytes written..and not what could have been
+ // written.
+ if (numCopied < 0 || numCopied > getBufferSize()-getCurrentSize())
{
numCopied = getBufferSize()-getCurrentSize();
+ llwarns << "LLDataPackerAsciiBuffer::packColor4U: truncated: " << llendl;
}
mCurBufferp += numCopied;
@@ -1085,15 +1113,18 @@ BOOL LLDataPackerAsciiBuffer::packVector2(const LLVector2 &value, const char *na
}
else
{
- numCopied = snprintf(DUMMY_BUFFER,sizeof(DUMMY_BUFFER),"%g %g\n", value.mV[0], value.mV[1]); /* Flawfinder: ignore */
+ numCopied = snprintf(DUMMY_BUFFER,sizeof(DUMMY_BUFFER),"%g %g\n", value.mV[0], value.mV[1]); /* Flawfinder: ignore */
}
- // snprintf returns number of bytes that would have been written had the
- // output not being truncated. In that case, it will retuen >= passed in size value.
- // so a check needs to be added to detect truncation, and if there is any,
- // only account for the actual number of bytes written..and not what could have been written.
- if (numCopied > getBufferSize()-getCurrentSize())
+ // snprintf returns number of bytes that would have been written
+ // had the output not being truncated. In that case, it will
+ // return either -1 or value >= passed in size value . So a check needs to be added
+ // to detect truncation, and if there is any, only account for the
+ // actual number of bytes written..and not what could have been
+ // written.
+ if (numCopied < 0 || numCopied > getBufferSize()-getCurrentSize())
{
numCopied = getBufferSize()-getCurrentSize();
+ llwarns << "LLDataPackerAsciiBuffer::packVector2: truncated: " << llendl;
}
mCurBufferp += numCopied;
@@ -1128,13 +1159,16 @@ BOOL LLDataPackerAsciiBuffer::packVector3(const LLVector3 &value, const char *na
{
numCopied = snprintf(DUMMY_BUFFER,sizeof(DUMMY_BUFFER),"%g %g %g\n", value.mV[0], value.mV[1], value.mV[2]); /* Flawfinder: ignore */
}
- // snprintf returns number of bytes that would have been written had the
- // output not being truncated. In that case, it will retuen >= passed in size value.
- // so a check needs to be added to detect truncation, and if there is any,
- // only account for the actual number of bytes written..and not what could have been written.
- if (numCopied > getBufferSize()-getCurrentSize())
+ // snprintf returns number of bytes that would have been written
+ // had the output not being truncated. In that case, it will
+ // return either -1 or value >= passed in size value . So a check needs to be added
+ // to detect truncation, and if there is any, only account for the
+ // actual number of bytes written..and not what could have been
+ // written.
+ if (numCopied < 0 || numCopied > getBufferSize()-getCurrentSize())
{
numCopied = getBufferSize()-getCurrentSize();
+ llwarns << "LLDataPackerAsciiBuffer::packVector3: truncated: " << llendl;
}
mCurBufferp += numCopied;
@@ -1168,13 +1202,16 @@ BOOL LLDataPackerAsciiBuffer::packVector4(const LLVector4 &value, const char *na
{
numCopied = snprintf(DUMMY_BUFFER,sizeof(DUMMY_BUFFER),"%g %g %g %g\n", value.mV[0], value.mV[1], value.mV[2], value.mV[3]); /* Flawfinder: ignore */
}
- // snprintf returns number of bytes that would have been written had the
- // output not being truncated. In that case, it will retuen >= passed in size value.
- // so a check needs to be added to detect truncation, and if there is any,
- // only account for the actual number of bytes written..and not what could have been written.
- if (numCopied > getBufferSize()-getCurrentSize())
+ // snprintf returns number of bytes that would have been written
+ // had the output not being truncated. In that case, it will
+ // return either -1 or value >= passed in size value . So a check needs to be added
+ // to detect truncation, and if there is any, only account for the
+ // actual number of bytes written..and not what could have been
+ // written.
+ if (numCopied < 0 || numCopied > getBufferSize()-getCurrentSize())
{
numCopied = getBufferSize()-getCurrentSize();
+ llwarns << "LLDataPackerAsciiBuffer::packVector4: truncated: " << llendl;
}
mCurBufferp += numCopied;
@@ -1212,13 +1249,16 @@ BOOL LLDataPackerAsciiBuffer::packUUID(const LLUUID &value, const char *name)
{
numCopied = 64 + 1; // UUID + newline
}
- // snprintf returns number of bytes that would have been written had the
- // output not being truncated. In that case, it will retuen >= passed in size value.
- // so a check needs to be added to detect truncation, and if there is any,
- // only account for the actual number of bytes written..and not what could have been written.
- if (numCopied > getBufferSize()-getCurrentSize())
+ // snprintf returns number of bytes that would have been written
+ // had the output not being truncated. In that case, it will
+ // return either -1 or value >= passed in size value . So a check needs to be added
+ // to detect truncation, and if there is any, only account for the
+ // actual number of bytes written..and not what could have been
+ // written.
+ if (numCopied < 0 || numCopied > getBufferSize()-getCurrentSize())
{
numCopied = getBufferSize()-getCurrentSize();
+ llwarns << "LLDataPackerAsciiBuffer::packUUID: truncated: " << llendl;
success = FALSE;
}
mCurBufferp += numCopied;
@@ -1254,21 +1294,26 @@ void LLDataPackerAsciiBuffer::writeIndentedName(const char *name)
int numCopied = 0;
if (mWriteEnabled)
{
- numCopied = snprintf(mCurBufferp,getBufferSize()-getCurrentSize(),"%s\t", name); /* Flawfinder: ignore */
+ numCopied = snprintf(mCurBufferp,getBufferSize()-getCurrentSize(),"%s\t", name); /* Flawfinder: ignore */
}
else
{
numCopied = (S32)strlen(name) + 1; /* Flawfinder: ignore */ //name + tab
}
- // snprintf returns number of bytes that would have been written had the
- // output not being truncated. In that case, it will retuen >= passed in size value.
- // so a check needs to be added to detect truncation, and if there is any,
- // only account for the actual number of bytes written..and not what could have been written.
- if (numCopied > getBufferSize()-getCurrentSize())
+ // snprintf returns number of bytes that would have been written
+ // had the output not being truncated. In that case, it will
+ // return either -1 or value >= passed in size value . So a check needs to be added
+ // to detect truncation, and if there is any, only account for the
+ // actual number of bytes written..and not what could have been
+ // written.
+ if (numCopied < 0 || numCopied > getBufferSize()-getCurrentSize())
{
numCopied = getBufferSize()-getCurrentSize();
+ llwarns << "LLDataPackerAsciiBuffer::writeIndentedName: truncated: " << llendl;
}
+
+ mCurBufferp += numCopied;
}
}
@@ -1424,7 +1469,7 @@ BOOL LLDataPackerAsciiFile::packBinaryDataFixed(const U8 *value, S32 size, const
S32 i;
for (i = 0; i < size; i++)
{
- snprintf(buffer, sizeof(buffer), "%02x ", value[i]); /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), "%02x ", value[i]); /* Flawfinder: ignore */
*mOutputStream << buffer;
}
*mOutputStream << "\n";
diff --git a/linden/indra/llmessage/lldatapacker.h b/linden/indra/llmessage/lldatapacker.h
index 4e0b4cd..700f8fb 100644
--- a/linden/indra/llmessage/lldatapacker.h
+++ b/linden/indra/llmessage/lldatapacker.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/lldbstrings.h b/linden/indra/llmessage/lldbstrings.h
index 122e45b..dd249b1 100644
--- a/linden/indra/llmessage/lldbstrings.h
+++ b/linden/indra/llmessage/lldbstrings.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/lldispatcher.cpp b/linden/indra/llmessage/lldispatcher.cpp
index 7ba9f44..2e775f9 100644
--- a/linden/indra/llmessage/lldispatcher.cpp
+++ b/linden/indra/llmessage/lldispatcher.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/lldispatcher.h b/linden/indra/llmessage/lldispatcher.h
index 2a103f0..374ee0d 100644
--- a/linden/indra/llmessage/lldispatcher.h
+++ b/linden/indra/llmessage/lldispatcher.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/lleventflags.h b/linden/indra/llmessage/lleventflags.h
index 755e5a9..f6b89e3 100644
--- a/linden/indra/llmessage/lleventflags.h
+++ b/linden/indra/llmessage/lleventflags.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llfiltersd2xmlrpc.cpp b/linden/indra/llmessage/llfiltersd2xmlrpc.cpp
index 63913d5..34a4621 100644
--- a/linden/indra/llmessage/llfiltersd2xmlrpc.cpp
+++ b/linden/indra/llmessage/llfiltersd2xmlrpc.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llfiltersd2xmlrpc.h b/linden/indra/llmessage/llfiltersd2xmlrpc.h
index 622ab90..8b2f066 100644
--- a/linden/indra/llmessage/llfiltersd2xmlrpc.h
+++ b/linden/indra/llmessage/llfiltersd2xmlrpc.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llfollowcamparams.h b/linden/indra/llmessage/llfollowcamparams.h
index aa14ab2..0979474 100644
--- a/linden/indra/llmessage/llfollowcamparams.h
+++ b/linden/indra/llmessage/llfollowcamparams.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llhost.cpp b/linden/indra/llmessage/llhost.cpp
index c1ca4b0..50ef301 100644
--- a/linden/indra/llmessage/llhost.cpp
+++ b/linden/indra/llmessage/llhost.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -47,7 +48,7 @@ LLHost LLHost::invalid(INVALID_PORT,INVALID_HOST_IP_ADDRESS);
LLHost::LLHost(const std::string& ip_and_port)
{
std::string::size_type colon_index = ip_and_port.find(":");
- if (colon_index != std::string::npos)
+ if (colon_index == std::string::npos)
{
mIP = ip_string_to_u32(ip_and_port.c_str());
mPort = 0;
@@ -70,7 +71,7 @@ void LLHost::getString(char* buffer, S32 length) const
return;
}
- snprintf(buffer, length, "%s:%u", u32_to_ip_string(mIP), mPort); /*Flawfinder: ignore*/
+ snprintf(buffer, length, "%s:%u", u32_to_ip_string(mIP), mPort); /* Flawfinder: ignore */
}
void LLHost::getIPString(char* buffer, S32 length) const
@@ -81,7 +82,7 @@ void LLHost::getIPString(char* buffer, S32 length) const
return;
}
- snprintf(buffer, length, "%s", u32_to_ip_string(mIP)); /*Flawfinder: ignore*/
+ snprintf(buffer, length, "%s", u32_to_ip_string(mIP)); /* Flawfinder: ignore */
}
diff --git a/linden/indra/llmessage/llhost.h b/linden/indra/llmessage/llhost.h
index 894e2de..5b477e0 100644
--- a/linden/indra/llmessage/llhost.h
+++ b/linden/indra/llmessage/llhost.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llhttpassetstorage.cpp b/linden/indra/llmessage/llhttpassetstorage.cpp
index 6c57499..8e328ce 100644
--- a/linden/indra/llmessage/llhttpassetstorage.cpp
+++ b/linden/indra/llmessage/llhttpassetstorage.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -38,7 +39,7 @@
#include "zlib/zlib.h"
-const U32 MAX_RUNNING_REQUESTS = 4;
+const U32 MAX_RUNNING_REQUESTS = 1;
const F32 MAX_PROCESSING_TIME = 0.005f;
const S32 CURL_XFER_BUFFER_SIZE = 65536;
// Try for 30 minutes for now.
@@ -77,6 +78,7 @@ public:
virtual ~LLHTTPAssetRequest();
void setupCurlHandle();
+ void cleanupCurlHandle();
void prepareCompressedUpload();
void finishCompressedUpload();
@@ -140,16 +142,7 @@ LLHTTPAssetRequest::~LLHTTPAssetRequest()
if (mCurlHandle)
{
curl_multi_remove_handle(mCurlMultiHandle, mCurlHandle);
- curl_easy_cleanup(mCurlHandle);
- if (mAssetStoragep)
- {
- // Terminating a request. Thus upload or download is no longer pending.
- mAssetStoragep->removeRunningRequest(mRequestType, this);
- }
- else
- {
- llerrs << "LLHTTPAssetRequest::~LLHTTPAssetRequest - No asset storage associated with this request!" << llendl;
- }
+ cleanupCurlHandle();
}
if (mHTTPHeaders)
{
@@ -274,6 +267,21 @@ void LLHTTPAssetRequest::setupCurlHandle()
}
}
+void LLHTTPAssetRequest::cleanupCurlHandle()
+{
+ curl_easy_cleanup(mCurlHandle);
+ if (mAssetStoragep)
+ {
+ // Terminating a request. Thus upload or download is no longer pending.
+ mAssetStoragep->removeRunningRequest(mRequestType, this);
+ }
+ else
+ {
+ llerrs << "LLHTTPAssetRequest::~LLHTTPAssetRequest - No asset storage associated with this request!" << llendl;
+ }
+ mCurlHandle = NULL;
+}
+
void LLHTTPAssetRequest::prepareCompressedUpload()
{
mZStream.next_in = Z_NULL;
@@ -682,7 +690,7 @@ void LLHTTPAssetStorage::checkForTimeouts()
{
CURLMcode mcode;
LLAssetRequest *req;
- while (req = findNextRequest(mPendingDownloads, mRunningDownloads))
+ while ( (req = findNextRequest(mPendingDownloads, mRunningDownloads)) )
{
// Setup this curl download request
// We need to generate a new request here
@@ -691,7 +699,7 @@ void LLHTTPAssetStorage::checkForTimeouts()
char uuid_str[UUID_STR_LENGTH]; /*Flawfinder: ignore*/
req->getUUID().toString(uuid_str);
std::string base_url = getBaseURL(req->getUUID(), req->getType());
- snprintf(tmp_url, sizeof(tmp_url), "%s/%36s.%s", base_url.c_str() , uuid_str, LLAssetType::lookup(req->getType())); /*Flawfinder: ignore*/
+ snprintf(tmp_url, sizeof(tmp_url), "%s/%36s.%s", base_url.c_str() , uuid_str, LLAssetType::lookup(req->getType())); /* Flawfinder: ignore */
LLHTTPAssetRequest *new_req = new LLHTTPAssetRequest(this, req->getUUID(),
req->getType(), RT_DOWNLOAD, tmp_url, mCurlMultiHandle);
@@ -708,7 +716,8 @@ void LLHTTPAssetStorage::checkForTimeouts()
{
// Failure. Deleting the pending request will remove it from the running
// queue, and push it to the end of the pending queue.
- deletePendingRequest(RT_DOWNLOAD, req->getType(), req->getUUID());
+ new_req->cleanupCurlHandle();
+ deletePendingRequest(RT_DOWNLOAD, new_req->getType(), new_req->getUUID());
break;
}
else
@@ -717,7 +726,7 @@ void LLHTTPAssetStorage::checkForTimeouts()
}
}
- while (req = findNextRequest(mPendingUploads, mRunningUploads))
+ while ( (req = findNextRequest(mPendingUploads, mRunningUploads)) )
{
// setup this curl upload request
@@ -726,7 +735,7 @@ void LLHTTPAssetStorage::checkForTimeouts()
char tmp_url[MAX_STRING];/*Flawfinder: ignore*/
char uuid_str[UUID_STR_LENGTH];/*Flawfinder: ignore*/
req->getUUID().toString(uuid_str);
- snprintf(tmp_url, sizeof(tmp_url), /*Flawfinder: ignore*/
+ snprintf(tmp_url, sizeof(tmp_url), /* Flawfinder: ignore */
do_compress ? "%s/%s.%s.gz" : "%s/%s.%s",
mBaseURL.c_str(), uuid_str, LLAssetType::lookup(req->getType()));
@@ -761,7 +770,8 @@ void LLHTTPAssetStorage::checkForTimeouts()
{
// Failure. Deleting the pending request will remove it from the running
// queue, and push it to the end of the pending queue.
- deletePendingRequest(RT_UPLOAD, req->getType(), req->getUUID());
+ new_req->cleanupCurlHandle();
+ deletePendingRequest(RT_UPLOAD, new_req->getType(), new_req->getUUID());
break;
}
else
@@ -771,7 +781,7 @@ void LLHTTPAssetStorage::checkForTimeouts()
// Pending upload will have been flagged by the request
}
- while (req = findNextRequest(mPendingLocalUploads, mRunningLocalUploads))
+ while ( (req = findNextRequest(mPendingLocalUploads, mRunningLocalUploads)) )
{
// setup this curl upload request
LLVFile file(mVFS, req->getUUID(), req->getType());
@@ -781,7 +791,7 @@ void LLHTTPAssetStorage::checkForTimeouts()
req->getUUID().toString(uuid_str);
// KLW - All temporary uploads are saved locally "http://localhost:12041/asset"
- snprintf(tmp_url, sizeof(tmp_url), "%s/%36s.%s", mLocalBaseURL.c_str(), uuid_str, LLAssetType::lookup(req->getType())); /*Flawfinder: ignore*/
+ snprintf(tmp_url, sizeof(tmp_url), "%s/%36s.%s", mLocalBaseURL.c_str(), uuid_str, LLAssetType::lookup(req->getType())); /* Flawfinder: ignore */
LLHTTPAssetRequest *new_req = new LLHTTPAssetRequest(this, req->getUUID(),
req->getType(), RT_LOCALUPLOAD, tmp_url, mCurlMultiHandle);
@@ -800,7 +810,8 @@ void LLHTTPAssetStorage::checkForTimeouts()
{
// Failure. Deleting the pending request will remove it from the running
// queue, and push it to the end of the pending queue.
- deletePendingRequest(RT_LOCALUPLOAD, req->getType(), req->getUUID());
+ new_req->cleanupCurlHandle();
+ deletePendingRequest(RT_LOCALUPLOAD, new_req->getType(), new_req->getUUID());
break;
}
else
diff --git a/linden/indra/llmessage/llhttpassetstorage.h b/linden/indra/llmessage/llhttpassetstorage.h
index d98af45..b5ab56b 100644
--- a/linden/indra/llmessage/llhttpassetstorage.h
+++ b/linden/indra/llmessage/llhttpassetstorage.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llhttpclient.cpp b/linden/indra/llmessage/llhttpclient.cpp
index 3755ae0..1d38a13 100644
--- a/linden/indra/llmessage/llhttpclient.cpp
+++ b/linden/indra/llmessage/llhttpclient.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -37,9 +38,10 @@
#include "llvfile.h"
#include "llvfs.h"
+#include "message.h"
#include
-static const F32 HTTP_REQUEST_EXPIRY_SECS = 60.0f;
+const F32 HTTP_REQUEST_EXPIRY_SECS = 60.0f;
static std::string gCABundle;
@@ -111,6 +113,14 @@ namespace
if (200 <= mStatus && mStatus < 300)
{
LLSDSerialize::fromXML(content, istr);
+/*
+ const S32 parseError = -1;
+ if(LLSDSerialize::fromXML(content, istr) == parseError)
+ {
+ mStatus = 498;
+ mReason = "Client Parse Error";
+ }
+*/
}
if (mResponder.get())
@@ -233,7 +243,7 @@ namespace
}
static void request(const std::string& url, LLURLRequest::ERequestAction method,
- Injector* body_injector, LLHTTPClient::ResponderPtr responder)
+ Injector* body_injector, LLHTTPClient::ResponderPtr responder, const F32 timeout=HTTP_REQUEST_EXPIRY_SECS)
{
if (!LLHTTPClient::hasPump())
{
@@ -251,19 +261,26 @@ static void request(const std::string& url, LLURLRequest::ERequestAction method,
}
req->setCallback(new LLHTTPClientURLAdaptor(responder));
+ if (method == LLURLRequest::HTTP_POST && gMessageSystem) {
+ req->addHeader(llformat("X-SecondLife-UDP-Listen-Port: %d",
+ gMessageSystem->mPort).c_str());
+ }
+
if (method == LLURLRequest::HTTP_PUT || method == LLURLRequest::HTTP_POST)
{
- req->addHeader(llformat("Content-Type: %s", body_injector->contentType()).c_str());
- chain.push_back(LLIOPipe::ptr_t(body_injector));
+ req->addHeader(llformat("Content-Type: %s",
+ body_injector->contentType()).c_str());
+
+ chain.push_back(LLIOPipe::ptr_t(body_injector));
}
chain.push_back(LLIOPipe::ptr_t(req));
- theClientPump->addChain(chain, HTTP_REQUEST_EXPIRY_SECS);
+ theClientPump->addChain(chain, timeout);
}
-void LLHTTPClient::get(const std::string& url, ResponderPtr responder)
+void LLHTTPClient::get(const std::string& url, ResponderPtr responder, const F32 timeout)
{
- request(url, LLURLRequest::HTTP_GET, NULL, responder);
+ request(url, LLURLRequest::HTTP_GET, NULL, responder, timeout);
}
// A simple class for managing data returned from a curl http request.
@@ -312,6 +329,14 @@ LLSD LLHTTPClient::blockingGet(const std::string& url)
LLHTTPBuffer http_buffer;
+ // Without this timeout, blockingGet() calls have been observed to take
+ // up to 90 seconds to complete. Users of blockingGet() already must
+ // check the HTTP return code for validity, so this will not introduce
+ // new errors. A 5 second timeout will succeed > 95% of the time (and
+ // probably > 99% of the time) based on my statistics. JC
+ curl_easy_setopt(curlp, CURLOPT_NOSIGNAL, 1); // don't use SIGALRM for timeouts
+ curl_easy_setopt(curlp, CURLOPT_TIMEOUT, 5); // seconds
+
curl_easy_setopt(curlp, CURLOPT_WRITEFUNCTION, LLHTTPBuffer::curl_write);
curl_easy_setopt(curlp, CURLOPT_WRITEDATA, &http_buffer);
curl_easy_setopt(curlp, CURLOPT_URL, url.c_str());
@@ -344,36 +369,36 @@ LLSD LLHTTPClient::blockingGet(const std::string& url)
return response;
}
-void LLHTTPClient::put(const std::string& url, const LLSD& body, ResponderPtr responder)
+void LLHTTPClient::put(const std::string& url, const LLSD& body, ResponderPtr responder, const F32 timeout)
{
- request(url, LLURLRequest::HTTP_PUT, new LLSDInjector(body), responder);
+ request(url, LLURLRequest::HTTP_PUT, new LLSDInjector(body), responder, timeout);
}
-void LLHTTPClient::post(const std::string& url, const LLSD& body, ResponderPtr responder)
+void LLHTTPClient::post(const std::string& url, const LLSD& body, ResponderPtr responder, const F32 timeout)
{
- request(url, LLURLRequest::HTTP_POST, new LLSDInjector(body), responder);
+ request(url, LLURLRequest::HTTP_POST, new LLSDInjector(body), responder, timeout);
}
-void LLHTTPClient::post(const std::string& url, const U8* data, S32 size, ResponderPtr responder)
+void LLHTTPClient::post(const std::string& url, const U8* data, S32 size, ResponderPtr responder, const F32 timeout)
{
- request(url, LLURLRequest::HTTP_POST, new RawInjector(data, size), responder);
+ request(url, LLURLRequest::HTTP_POST, new RawInjector(data, size), responder, timeout);
}
-void LLHTTPClient::del(const std::string& url, ResponderPtr responder)
+void LLHTTPClient::del(const std::string& url, ResponderPtr responder, const F32 timeout)
{
- request(url, LLURLRequest::HTTP_DELETE, NULL, responder);
+ request(url, LLURLRequest::HTTP_DELETE, NULL, responder, timeout);
}
#if 1
-void LLHTTPClient::postFile(const std::string& url, const std::string& filename, ResponderPtr responder)
+void LLHTTPClient::postFile(const std::string& url, const std::string& filename, ResponderPtr responder, const F32 timeout)
{
- request(url, LLURLRequest::HTTP_POST, new FileInjector(filename), responder);
+ request(url, LLURLRequest::HTTP_POST, new FileInjector(filename), responder, timeout);
}
void LLHTTPClient::postFile(const std::string& url, const LLUUID& uuid,
- LLAssetType::EType asset_type, ResponderPtr responder)
+ LLAssetType::EType asset_type, ResponderPtr responder, const F32 timeout)
{
- request(url, LLURLRequest::HTTP_POST, new VFileInjector(uuid, asset_type), responder);
+ request(url, LLURLRequest::HTTP_POST, new VFileInjector(uuid, asset_type), responder, timeout);
}
#endif
@@ -401,7 +426,7 @@ namespace boost
void intrusive_ptr_release(LLHTTPClient::Responder* p)
{
- if(0 == --p->mReferenceCount)
+ if(p && 0 == --p->mReferenceCount)
{
delete p;
}
diff --git a/linden/indra/llmessage/llhttpclient.h b/linden/indra/llmessage/llhttpclient.h
index 93859eb..136577c 100644
--- a/linden/indra/llmessage/llhttpclient.h
+++ b/linden/indra/llmessage/llhttpclient.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -38,6 +39,8 @@
#include "llassettype.h"
+extern const F32 HTTP_REQUEST_EXPIRY_SECS;
+
class LLUUID;
class LLPumpIO;
class LLSD;
@@ -69,19 +72,19 @@ public:
typedef boost::intrusive_ptr ResponderPtr;
- static void get(const std::string& url, ResponderPtr);
- static void put(const std::string& url, const LLSD& body, ResponderPtr);
+ static void get(const std::string& url, ResponderPtr, const F32 timeout=HTTP_REQUEST_EXPIRY_SECS);
+ static void put(const std::string& url, const LLSD& body, ResponderPtr, const F32 timeout=HTTP_REQUEST_EXPIRY_SECS);
///< non-blocking
- static void post(const std::string& url, const LLSD& body, ResponderPtr);
- static void post(const std::string& url, const U8* data, S32 size, ResponderPtr responder);
- static void postFile(const std::string& url, const std::string& filename, ResponderPtr);
+ static void post(const std::string& url, const LLSD& body, ResponderPtr, const F32 timeout=HTTP_REQUEST_EXPIRY_SECS);
+ static void post(const std::string& url, const U8* data, S32 size, ResponderPtr responder, const F32 timeout=HTTP_REQUEST_EXPIRY_SECS);
+ static void postFile(const std::string& url, const std::string& filename, ResponderPtr, const F32 timeout=HTTP_REQUEST_EXPIRY_SECS);
static void postFile(const std::string& url, const LLUUID& uuid,
- LLAssetType::EType asset_type, ResponderPtr responder);
+ LLAssetType::EType asset_type, ResponderPtr responder, const F32 timeout=HTTP_REQUEST_EXPIRY_SECS);
// Blocking HTTP get that returns an LLSD map of status and body.
static LLSD blockingGet(const std::string& url);
- static void del(const std::string& url, ResponderPtr);
+ static void del(const std::string& url, ResponderPtr, const F32 timeout=HTTP_REQUEST_EXPIRY_SECS);
///< sends a DELETE method, but we can't call it delete in c++
diff --git a/linden/indra/llmessage/llhttpnode.cpp b/linden/indra/llmessage/llhttpnode.cpp
index e997415..97064a1 100644
--- a/linden/indra/llmessage/llhttpnode.cpp
+++ b/linden/indra/llmessage/llhttpnode.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llhttpnode.h b/linden/indra/llmessage/llhttpnode.h
index bbce091..ae64a63 100644
--- a/linden/indra/llmessage/llhttpnode.h
+++ b/linden/indra/llmessage/llhttpnode.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llhttpsender.cpp b/linden/indra/llmessage/llhttpsender.cpp
new file mode 100644
index 0000000..f96e6d2
--- /dev/null
+++ b/linden/indra/llmessage/llhttpsender.cpp
@@ -0,0 +1,90 @@
+/**
+ * @file llhttpsender.cpp
+ * @brief Abstracts details of sending messages via HTTP.
+ *
+ * Copyright (c) 2007-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ */
+
+#include "linden_common.h"
+
+#include "llhttpsender.h"
+
+#include
+#include
+
+#include "llhost.h"
+#include "llsd.h"
+
+namespace
+{
+ typedef std::map SenderMap;
+ static SenderMap senderMap;
+}
+
+//virtual
+LLHTTPSender::~LLHTTPSender()
+{
+}
+
+//virtual
+void LLHTTPSender::send(const LLHost& host, const char* name,
+ const LLSD& body,
+ LLHTTPClient::ResponderPtr response) const
+{
+ // Default implementation inserts sender, message and sends HTTP POST
+ std::ostringstream stream;
+ stream << "http://" << host << "/trusted-message/" << name;
+ llinfos << "LLHTTPSender::send: POST to " << stream.str() << llendl;
+ LLHTTPClient::post(stream.str(), body, response);
+}
+
+//static
+void LLHTTPSender::setSender(const LLHost& host, LLHTTPSender* sender)
+{
+ llinfos << "LLHTTPSender::setSender " << host << llendl;
+ senderMap[host] = sender;
+}
+
+//static
+const LLHTTPSender& LLHTTPSender::getSender(const LLHost& host)
+{
+ static LLHTTPSender defaultSender;
+ SenderMap::const_iterator iter = senderMap.find(host);
+ if(iter == senderMap.end())
+ {
+ return defaultSender;
+ }
+ return *(iter->second);
+}
+
+//static
+void LLHTTPSender::clearSender(const LLHost& host)
+{
+ SenderMap::iterator iter = senderMap.find(host);
+ if(iter != senderMap.end())
+ {
+ delete iter->second;
+ senderMap.erase(iter);
+ }
+}
diff --git a/linden/indra/llmessage/llhttpsender.h b/linden/indra/llmessage/llhttpsender.h
new file mode 100644
index 0000000..650a0e9
--- /dev/null
+++ b/linden/indra/llmessage/llhttpsender.h
@@ -0,0 +1,58 @@
+/**
+ * @file llhttpsender.h
+ * @brief Abstracts details of sending messages via HTTP.
+ *
+ * Copyright (c) 2007-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ */
+
+#ifndef LL_HTTP_SENDER_H
+#define LL_HTTP_SENDER_H
+
+#include "llhttpclient.h"
+
+class LLHost;
+class LLSD;
+
+class LLHTTPSender
+{
+ public:
+
+ virtual ~LLHTTPSender();
+
+ /** @brief Send message to host with body, call response when done */
+ virtual void send(const LLHost& host,
+ const char* message, const LLSD& body,
+ LLHTTPClient::ResponderPtr response) const;
+
+ /** @brief Set sender for host, takes ownership of sender. */
+ static void setSender(const LLHost& host, LLHTTPSender* sender);
+
+ /** @brief Get sender for host, retains ownership of returned sender. */
+ static const LLHTTPSender& getSender(const LLHost& host);
+
+ /** @brief Clear sender for host. */
+ static void clearSender(const LLHost& host);
+};
+
+#endif // LL_HTTP_SENDER_H
diff --git a/linden/indra/llmessage/llinstantmessage.cpp b/linden/indra/llmessage/llinstantmessage.cpp
index 6f6e022..0ba7629 100644
--- a/linden/indra/llmessage/llinstantmessage.cpp
+++ b/linden/indra/llmessage/llinstantmessage.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -35,6 +36,7 @@
#include "lluuid.h"
#include "llsd.h"
#include "llsdserialize.h"
+#include "llsdutil.h"
#include "llmemory.h"
#include "message.h"
@@ -226,8 +228,21 @@ void pack_instant_message_block(
S32 bytes_left = MTUBYTES;
if(message)
{
- char buffer[MTUBYTES]; /*Flawfinder: ignore*/
- bytes_left -= snprintf(buffer, MTUBYTES, "%s", message); /*Flawfinder: ignore*/
+ char buffer[MTUBYTES];
+ int num_written = snprintf(buffer, MTUBYTES, "%s", message); /* Flawfinder: ignore */
+ // snprintf returns number of bytes that would have been written
+ // had the output not being truncated. In that case, it will
+ // return either -1 or value >= passed in size value . So a check needs to be added
+ // to detect truncation, and if there is any, only account for the
+ // actual number of bytes written..and not what could have been
+ // written.
+ if (num_written < 0 || num_written >= MTUBYTES)
+ {
+ num_written = MTUBYTES - 1;
+ llwarns << "pack_instant_message_block: message truncated: " << message << llendl;
+ }
+
+ bytes_left -= num_written;
bytes_left = llmax(0, bytes_left);
msg->addStringFast(_PREHASH_Message, buffer);
}
@@ -296,6 +311,35 @@ void LLIMInfo::unpackMessageBlock(LLMessageSystem* msg)
}
}
+LLSD im_info_to_llsd(LLPointer im_info)
+{
+ LLSD param_version;
+ param_version["version"] = 1;
+ LLSD param_message;
+ param_message["from_id"] = im_info->mFromID;
+ param_message["from_group"] = im_info->mFromGroup;
+ param_message["to_id"] = im_info->mToID;
+ param_message["from_name"] = im_info->mName;
+ param_message["message"] = im_info->mMessage;
+ param_message["type"] = (S32)im_info->mIMType;
+ param_message["id"] = im_info->mID;
+ param_message["timestamp"] = (S32)im_info->mTimeStamp;
+ param_message["offline"] = (S32)im_info->mOffline;
+ param_message["parent_estate_id"] = (S32)im_info->mParentEstateID;
+ param_message["region_id"] = im_info->mRegionID;
+ param_message["position"] = ll_sd_from_vector3(im_info->mPosition);
+ if (im_info->mData) param_message["data"] = im_info->mData;
+ LLSD param_agent;
+ param_agent["agent_id"] = im_info->mFromID;
+
+ LLSD params;
+ params.append(param_version);
+ params.append(param_message);
+ params.append(param_agent);
+
+ return params;
+}
+
LLPointer LLIMInfo::clone()
{
return new LLIMInfo(
diff --git a/linden/indra/llmessage/llinstantmessage.h b/linden/indra/llmessage/llinstantmessage.h
index a7074a2..0b2de19 100644
--- a/linden/indra/llmessage/llinstantmessage.h
+++ b/linden/indra/llmessage/llinstantmessage.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -93,17 +94,19 @@ enum EInstantMessage
// communicate with each other.
//
- // Start a session, or add users to a session.
+ // Add users to a session.
IM_SESSION_ADD = 13,
- // Start a session, but don't prune offline users
- IM_SESSION_OFFLINE_ADD = 14,
+ // IM sent automatically on call for help,
+ // sets up a way for each Helper reached to teleport to the
+ // helpee
+ IM_SESSION_911_SEND = 14,
// start a session with your gruop
IM_SESSION_GROUP_START = 15,
// start a session without a calling card (finder or objects)
- IM_SESSION_CARDLESS_START = 16,
+ IM_SESSION_CONFERENCE_START = 16,
// send a message to a session.
IM_SESSION_SEND = 17,
@@ -142,9 +145,9 @@ enum EInstantMessage
// Binary bucket contains the name of the session.
IM_SESSION_911_START = 29,
- // IM sent automatically on call for help,
- // sends a lure to each Helper reached
- IM_LURE_911 = 30,
+ // IM for requesting to teleport to the creator
+ // of a livehelp session (assuming they are verified first)
+ IM_TELEPORT_911 = 30,
// a message generated by a script which we don't want to
// be sent through e-mail. Similar to IM_FROM_TASK, but
@@ -285,6 +288,7 @@ public:
S32 mTTL;
};
+LLSD im_info_to_llsd(LLPointer im_info);
void pack_instant_message(
LLMessageSystem* msgsystem,
diff --git a/linden/indra/llmessage/llinvite.h b/linden/indra/llmessage/llinvite.h
index ac54058..d3774c4 100644
--- a/linden/indra/llmessage/llinvite.h
+++ b/linden/indra/llmessage/llinvite.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/lliobuffer.cpp b/linden/indra/llmessage/lliobuffer.cpp
index 506bd76..7dea578 100644
--- a/linden/indra/llmessage/lliobuffer.cpp
+++ b/linden/indra/llmessage/lliobuffer.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/lliobuffer.h b/linden/indra/llmessage/lliobuffer.h
index 59d7074..ac24576 100644
--- a/linden/indra/llmessage/lliobuffer.h
+++ b/linden/indra/llmessage/lliobuffer.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/lliohttpserver.cpp b/linden/indra/llmessage/lliohttpserver.cpp
index 25c1aef..9ea7272 100644
--- a/linden/indra/llmessage/lliohttpserver.cpp
+++ b/linden/indra/llmessage/lliohttpserver.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -46,6 +47,8 @@
#include "llsdserialize_xml.h"
#include "llstl.h"
+#include
+
static const char HTTP_VERSION_STR[] = "HTTP/1.0";
static const std::string CONTEXT_REQUEST("request");
static const std::string HTTP_VERB_GET("GET");
@@ -393,7 +396,7 @@ LLIOPipe::EStatus LLHTTPResponseHeader::process_impl(
class LLHTTPResponder : public LLIOPipe
{
public:
- LLHTTPResponder(const LLHTTPNode& tree);
+ LLHTTPResponder(const LLHTTPNode& tree, const LLSD& ctx);
~LLHTTPResponder();
protected:
@@ -454,6 +457,7 @@ protected:
STATE_SHORT_CIRCUIT
};
+ LLSD mBuildContext;
EState mState;
U8* mLastRead;
std::string mVerb;
@@ -462,12 +466,14 @@ protected:
std::string mQuery;
std::string mVersion;
S32 mContentLength;
+ LLSD mHeaders;
// handle the urls
const LLHTTPNode& mRootNode;
};
-LLHTTPResponder::LLHTTPResponder(const LLHTTPNode& tree) :
+LLHTTPResponder::LLHTTPResponder(const LLHTTPNode& tree, const LLSD& ctx) :
+ mBuildContext(ctx),
mState(STATE_NOTHING),
mLastRead(NULL),
mContentLength(0),
@@ -655,6 +661,11 @@ LLIOPipe::EStatus LLHTTPResponder::process_impl(
lldebugs << "Content-Length: " << value << llendl;
mContentLength = atoi(value.c_str());
}
+ else
+ {
+ LLString::trimTail(value);
+ mHeaders[name] = value;
+ }
}
}
}
@@ -720,6 +731,11 @@ LLIOPipe::EStatus LLHTTPResponder::process_impl(
chain.push_back(LLIOPipe::ptr_t(new LLIOFlush));
context[CONTEXT_REQUEST]["path"] = mPath;
context[CONTEXT_REQUEST]["query-string"] = mQuery;
+ context[CONTEXT_REQUEST]["remote-host"]
+ = mBuildContext["remote-host"];
+ context[CONTEXT_REQUEST]["remote-port"]
+ = mBuildContext["remote-port"];
+ context[CONTEXT_REQUEST]["headers"] = mHeaders;
const LLChainIOFactory* protocolHandler
= node->getProtocolHandler();
@@ -804,9 +820,10 @@ LLIOPipe::EStatus LLHTTPResponder::process_impl(
-void LLCreateHTTPPipe(LLPumpIO::chain_t& chain, const LLHTTPNode& root)
+void LLCreateHTTPPipe(LLPumpIO::chain_t& chain,
+ const LLHTTPNode& root, const LLSD& ctx)
{
- chain.push_back(LLIOPipe::ptr_t(new LLHTTPResponder(root)));
+ chain.push_back(LLIOPipe::ptr_t(new LLHTTPResponder(root, ctx)));
}
@@ -815,7 +832,7 @@ class LLHTTPResponseFactory : public LLChainIOFactory
public:
bool build(LLPumpIO::chain_t& chain, LLSD ctx) const
{
- LLCreateHTTPPipe(chain, mTree);
+ LLCreateHTTPPipe(chain, mTree, ctx);
return true;
}
diff --git a/linden/indra/llmessage/lliohttpserver.h b/linden/indra/llmessage/lliohttpserver.h
index efbd7db..64dce63 100644
--- a/linden/indra/llmessage/lliohttpserver.h
+++ b/linden/indra/llmessage/lliohttpserver.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -50,7 +51,8 @@ LLHTTPNode& LLCreateHTTPServer(apr_pool_t* pool, LLPumpIO& pump, U16 port);
* for example), use the helper templates below.
*/
-void LLCreateHTTPPipe(LLPumpIO::chain_t& chain, const LLHTTPNode& root);
+void LLCreateHTTPPipe(LLPumpIO::chain_t& chain,
+ const LLHTTPNode& root, const LLSD& ctx);
/**< Create a pipe on the chain that handles HTTP requests.
* The requests are served by the node tree given at root.
*
diff --git a/linden/indra/llmessage/lliopipe.cpp b/linden/indra/llmessage/lliopipe.cpp
index 86a36d8..a37b046 100644
--- a/linden/indra/llmessage/lliopipe.cpp
+++ b/linden/indra/llmessage/lliopipe.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/lliopipe.h b/linden/indra/llmessage/lliopipe.h
index f419703..38a98a6 100644
--- a/linden/indra/llmessage/lliopipe.h
+++ b/linden/indra/llmessage/lliopipe.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -256,7 +257,7 @@ namespace boost
}
inline void intrusive_ptr_release(LLIOPipe* p)
{
- if(0 == --p->mReferenceCount)
+ if(p && 0 == --p->mReferenceCount)
{
delete p;
}
diff --git a/linden/indra/llmessage/lliosocket.cpp b/linden/indra/llmessage/lliosocket.cpp
index 628f884..af22180 100644
--- a/linden/indra/llmessage/lliosocket.cpp
+++ b/linden/indra/llmessage/lliosocket.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -538,9 +539,20 @@ LLIOPipe::EStatus LLIOServerSocket::process_impl(
if(llsocket)
{
PUMP_DEBUG;
+
+ apr_sockaddr_t* remote_addr;
+ apr_socket_addr_get(&remote_addr, APR_REMOTE, socket);
+
+ char* remote_host_string;
+ apr_sockaddr_ip_get(&remote_host_string, remote_addr);
+
+ LLSD context;
+ context["remote-host"] = remote_host_string;
+ context["remote-port"] = remote_addr->port;
+
LLPumpIO::chain_t chain;
chain.push_back(LLIOPipe::ptr_t(new LLIOSocketReader(llsocket)));
- if(mReactor->build(chain, LLSD()))
+ if(mReactor->build(chain, context))
{
chain.push_back(LLIOPipe::ptr_t(new LLIOSocketWriter(llsocket)));
pump->addChain(chain, mResponseTimeout);
diff --git a/linden/indra/llmessage/lliosocket.h b/linden/indra/llmessage/lliosocket.h
index f994404..0f5eae8 100644
--- a/linden/indra/llmessage/lliosocket.h
+++ b/linden/indra/llmessage/lliosocket.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llioutil.cpp b/linden/indra/llmessage/llioutil.cpp
index 76eeb02..21e36fa 100644
--- a/linden/indra/llmessage/llioutil.cpp
+++ b/linden/indra/llmessage/llioutil.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llioutil.h b/linden/indra/llmessage/llioutil.h
index 54b3d39..27cd39a 100644
--- a/linden/indra/llmessage/llioutil.h
+++ b/linden/indra/llmessage/llioutil.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llloginflags.h b/linden/indra/llmessage/llloginflags.h
index b518849..7725419 100644
--- a/linden/indra/llmessage/llloginflags.h
+++ b/linden/indra/llmessage/llloginflags.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/lllogtextmessage.cpp b/linden/indra/llmessage/lllogtextmessage.cpp
index 06cc9c8..06c88b9 100644
--- a/linden/indra/llmessage/lllogtextmessage.cpp
+++ b/linden/indra/llmessage/lllogtextmessage.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/lllogtextmessage.h b/linden/indra/llmessage/lllogtextmessage.h
index 2413376..89fb90c 100644
--- a/linden/indra/llmessage/lllogtextmessage.h
+++ b/linden/indra/llmessage/lllogtextmessage.h
@@ -7,6 +7,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llmail.cpp b/linden/indra/llmessage/llmail.cpp
index aea3689..793cb19 100644
--- a/linden/indra/llmessage/llmail.cpp
+++ b/linden/indra/llmessage/llmail.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llmail.h b/linden/indra/llmessage/llmail.h
index b1dc3b5..26aaa3a 100644
--- a/linden/indra/llmessage/llmail.h
+++ b/linden/indra/llmessage/llmail.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llmessage.vcproj b/linden/indra/llmessage/llmessage.vcproj
index 11f4dbf..ac16f52 100644
--- a/linden/indra/llmessage/llmessage.vcproj
+++ b/linden/indra/llmessage/llmessage.vcproj
@@ -201,6 +201,9 @@
RelativePath=".\llhttpnode.cpp">
+
+
+
+
+
+
+
+
+
+
+ RelativePath=".\llsdmessagebuilder.cpp">
+
+
@@ -267,6 +285,15 @@
RelativePath=".\llservice.cpp">
+
+
+
+
+
+
+
+
+
+
+
+
+ RelativePath=".\llsdmessagebuilder.h">
+
+
@@ -497,12 +536,21 @@
RelativePath=".\llservice.h">
+
+
+
+
+
+
+
+#include "stdtypes.h"
+
+class LLMsgData;
+class LLQuaternion;
+class LLSD;
+class LLUUID;
+class LLVector3;
+class LLVector3d;
+class LLVector4;
+
+class LLMessageBuilder
+{
+public:
+
+ //CLASS_LOG_TYPE(LLMessageBuilder);
+
+ virtual ~LLMessageBuilder();
+ virtual void newMessage(const char *name) = 0;
+
+ virtual void nextBlock(const char* blockname) = 0;
+ virtual BOOL removeLastBlock() = 0; // TODO: babbage: remove this horror
+
+ /** All add* methods expect pointers to canonical strings. */
+ virtual void addBinaryData(const char *varname, const void *data,
+ S32 size) = 0;
+ virtual void addBOOL(const char* varname, BOOL b) = 0;
+ virtual void addS8(const char *varname, S8 s) = 0;
+ virtual void addU8(const char *varname, U8 u) = 0;
+ virtual void addS16(const char *varname, S16 i) = 0;
+ virtual void addU16(const char *varname, U16 i) = 0;
+ virtual void addF32(const char *varname, F32 f) = 0;
+ virtual void addS32(const char *varname, S32 s) = 0;
+ virtual void addU32(const char *varname, U32 u) = 0;
+ virtual void addU64(const char *varname, U64 lu) = 0;
+ virtual void addF64(const char *varname, F64 d) = 0;
+ virtual void addVector3(const char *varname, const LLVector3& vec) = 0;
+ virtual void addVector4(const char *varname, const LLVector4& vec) = 0;
+ virtual void addVector3d(const char *varname, const LLVector3d& vec) = 0;
+ virtual void addQuat(const char *varname, const LLQuaternion& quat) = 0;
+ virtual void addUUID(const char *varname, const LLUUID& uuid) = 0;
+ virtual void addIPAddr(const char *varname, const U32 ip) = 0;
+ virtual void addIPPort(const char *varname, const U16 port) = 0;
+ virtual void addString(const char* varname, const char* s) = 0;
+ virtual void addString(const char* varname, const std::string& s) = 0;
+
+ virtual BOOL isMessageFull(const char* blockname) const = 0;
+ virtual void compressMessage(U8*& buf_ptr, U32& buffer_length) = 0;
+ virtual S32 getMessageSize() = 0;
+
+ virtual BOOL isBuilt() const = 0;
+ virtual BOOL isClear() const = 0;
+ virtual U32 buildMessage(U8* buffer, U32 buffer_size) = 0;
+ /**< Return built message size */
+ virtual void clearMessage() = 0;
+
+ // TODO: babbage: remove this horror
+ virtual void setBuilt(BOOL b) = 0;
+
+ virtual const char* getMessageName() const = 0;
+
+ virtual void copyFromMessageData(const LLMsgData& data) = 0;
+ virtual void copyFromLLSD(const LLSD& data) = 0;
+};
+
+#endif // LL_LLMESSAGEBUILDER_H
diff --git a/linden/indra/llmessage/llmessageconfig.cpp b/linden/indra/llmessage/llmessageconfig.cpp
new file mode 100644
index 0000000..a0566ea
--- /dev/null
+++ b/linden/indra/llmessage/llmessageconfig.cpp
@@ -0,0 +1,230 @@
+/**
+ * @file llmessageconfig.cpp
+ * @brief Live file handling for messaging
+ *
+ * Copyright (c) 2000-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ */
+
+#include "linden_common.h"
+
+#include "llmessageconfig.h"
+#include "llfile.h"
+#include "lllivefile.h"
+#include "llsd.h"
+#include "llsdserialize.h"
+
+static const char messageConfigFileName[] = "message.xml";
+static const F32 messageConfigRefreshRate = 5.0; // seconds
+static std::string sServerName = "";
+static std::string sConfigDir = "";
+
+class LLMessageConfigFile : public LLLiveFile
+{
+private:
+ LLMessageConfigFile()
+ : LLLiveFile(fileName(), messageConfigRefreshRate),
+ mChanged(false)
+ { }
+
+ static std::string fileName();
+
+public:
+ static LLMessageConfigFile& instance();
+ // return the singleton configuration file
+
+protected:
+ /* virtual */ void loadFile();
+ void loadServerDefaults(const LLSD& data);
+ void loadMessages(const LLSD& data);
+
+public:
+ bool mChanged;
+
+ std::string mServerDefault;
+ LLSD mMessages;
+};
+
+std::string LLMessageConfigFile::fileName()
+{
+ std::ostringstream ostr;
+ ostr << sConfigDir//gAppSimp->getOption("configdir").asString()
+ << "/" << messageConfigFileName;
+ return ostr.str();
+}
+
+LLMessageConfigFile& LLMessageConfigFile::instance()
+{
+ static LLMessageConfigFile the_file;
+ the_file.checkAndReload();
+ return the_file;
+}
+
+// virtual
+void LLMessageConfigFile::loadFile()
+{
+ LLSD data;
+ {
+ llifstream file(filename().c_str());
+ if (file.is_open())
+ {
+ llinfos << "Loading message.xml file at " << fileName() << llendl;
+ LLSDSerialize::fromXML(data, file);
+ }
+
+ if (data.isUndefined())
+ {
+ llinfos << "LLMessageConfigFile::loadFile: file missing,"
+ " ill-formed, or simply undefined; not changing the"
+ " file" << llendl;
+ return;
+ }
+ }
+ loadServerDefaults(data);
+ loadMessages(data);
+}
+
+void LLMessageConfigFile::loadServerDefaults(const LLSD& data)
+{
+ mServerDefault = data["serverDefaults"][sServerName].asString();
+ lldebugs << "loading default " << mServerDefault << llendl;
+}
+
+void LLMessageConfigFile::loadMessages(const LLSD& data)
+{
+ mMessages = data["messages"];
+ std::ostringstream out;
+ LLSDXMLFormatter *formatter = new LLSDXMLFormatter;
+ formatter->format(mMessages, out);
+ lldebugs << "loading ... " << out.str()
+ << " LLMessageConfigFile::loadMessages loaded "
+ << mMessages.size() << " messages" << llendl;
+}
+
+
+//---------------------------------------------------------------
+// LLMessageConfig
+//---------------------------------------------------------------
+
+//static
+void LLMessageConfig::initClass(const std::string& server_name,
+ const std::string& config_dir)
+{
+ sServerName = server_name;
+ sConfigDir = config_dir;
+ (void) LLMessageConfigFile::instance();
+ llinfos << "LLMessageConfig::intiClass config file "
+ << config_dir << "/" << messageConfigFileName << llendl;
+}
+
+//static
+bool LLMessageConfig::isServerDefaultBuilderLLSD()
+{
+ if (sServerName.empty())
+ {
+ llerrs << "LLMessageConfig::isServerDefaultBuilderLLSD() before"
+ << " LLMessageConfig::initClass()" << llendl;
+ }
+ LLMessageConfigFile& file = LLMessageConfigFile::instance();
+ return (file.mServerDefault == "llsd");
+}
+
+//static
+bool LLMessageConfig::isServerDefaultBuilderTemplate()
+{
+ if (sServerName.empty())
+ {
+ llerrs << "LLMessageConfig::isServerDefaultBuilderTemplate() before"
+ << " LLMessageConfig::initClass()" << llendl;
+ }
+ LLMessageConfigFile& file = LLMessageConfigFile::instance();
+ return (file.mServerDefault == "template");
+}
+
+//static
+bool LLMessageConfig::isMessageBuiltLLSD(const std::string& msg_name)
+{
+ if (sServerName.empty())
+ {
+ llerrs << "LLMessageConfig::isMessageBuiltLLSD(name) before"
+ << " LLMessageConfig::initClass()" << llendl;
+ }
+ LLMessageConfigFile& file = LLMessageConfigFile::instance();
+ LLSD config = file.mMessages[msg_name];
+ if (!config.has("builder"))
+ {
+ return isServerDefaultBuilderLLSD();
+ }
+ return (config["builder"].asString() == "llsd");
+}
+
+//static
+bool LLMessageConfig::isMessageBuiltTemplate(const std::string& msg_name)
+{
+ if (sServerName.empty())
+ {
+ llerrs << "LLMessageConfig::isMessageBuiltTemplate(name) before"
+ << " LLMessageConfig::initClass()" << llendl;
+ }
+ LLMessageConfigFile& file = LLMessageConfigFile::instance();
+ LLSD config = file.mMessages[msg_name];
+ if (!config.has("builder"))
+ {
+ return isServerDefaultBuilderTemplate();
+ }
+ return (config["builder"].asString() == "template");
+}
+
+//static
+bool LLMessageConfig::isMessageTrusted(const std::string& msg_name)
+{
+ if (sServerName.empty())
+ {
+ llerrs << "LLMessageConfig::isMessageTrusted(name) before"
+ << " LLMessageConfig::initClass()" << llendl;
+ }
+ LLMessageConfigFile& file = LLMessageConfigFile::instance();
+ LLSD config = file.mMessages[msg_name];
+ if (!config.has("trusted-sender"))
+ {
+ return false;
+ }
+ return config["trusted-sender"].asBoolean();
+}
+
+//static
+bool LLMessageConfig::isValidUntrustedMessage(const std::string& msg_name)
+{
+ if (sServerName.empty())
+ {
+ llerrs << "LLMessageConfig::isMessageTrusted(name) before"
+ << " LLMessageConfig::initClass()" << llendl;
+ }
+ LLMessageConfigFile& file = LLMessageConfigFile::instance();
+ LLSD config = file.mMessages[msg_name];
+ if (!config.has("trusted-sender"))
+ {
+ return false;
+ }
+ return !(config["trusted-sender"].asBoolean());
+}
diff --git a/linden/indra/llmessage/llmessageconfig.h b/linden/indra/llmessage/llmessageconfig.h
new file mode 100644
index 0000000..1664ce6
--- /dev/null
+++ b/linden/indra/llmessage/llmessageconfig.h
@@ -0,0 +1,51 @@
+/**
+ * @file llmessageconfig.h
+ * @brief Live file handling for messaging
+ *
+ * Copyright (c) 2000-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ */
+
+#ifndef LL_MESSAGECONFIG_H
+#define LL_MESSAGECONFIG_H
+
+#include
+
+class LLMessageConfig
+{
+public:
+ static void initClass(const std::string& server_name,
+ const std::string& config_dir);
+ // force loading of config file during startup process
+ // so it can be used for startup features
+
+ static bool isServerDefaultBuilderLLSD();
+ static bool isServerDefaultBuilderTemplate();
+
+ // For individual messages
+ static bool isMessageBuiltLLSD(const std::string& msg_name);
+ static bool isMessageBuiltTemplate(const std::string& msg_name);
+ static bool isMessageTrusted(const std::string& msg_name);
+ static bool isValidUntrustedMessage(const std::string& msg_name);
+};
+#endif // LL_MESSAGECONFIG_H
diff --git a/linden/indra/llmessage/llmessagereader.cpp b/linden/indra/llmessage/llmessagereader.cpp
new file mode 100644
index 0000000..4824480
--- /dev/null
+++ b/linden/indra/llmessage/llmessagereader.cpp
@@ -0,0 +1,35 @@
+#include "llmessagereader.h"
+
+static BOOL sTimeDecodes = FALSE;
+
+static F32 sTimeDecodesSpamThreshold = 0.05f;
+
+//virtual
+LLMessageReader::~LLMessageReader()
+{
+ // even abstract base classes need a concrete destructor
+}
+
+//static
+void LLMessageReader::setTimeDecodes(BOOL b)
+{
+ sTimeDecodes = b;
+}
+
+//static
+void LLMessageReader::setTimeDecodesSpamThreshold(F32 seconds)
+{
+ sTimeDecodesSpamThreshold = seconds;
+}
+
+//static
+BOOL LLMessageReader::getTimeDecodes()
+{
+ return sTimeDecodes;
+}
+
+//static
+F32 LLMessageReader::getTimeDecodesSpamThreshold()
+{
+ return sTimeDecodesSpamThreshold;
+}
diff --git a/linden/indra/llmessage/llmessagereader.h b/linden/indra/llmessage/llmessagereader.h
new file mode 100644
index 0000000..33ce928
--- /dev/null
+++ b/linden/indra/llmessage/llmessagereader.h
@@ -0,0 +1,59 @@
+#ifndef LL_LLMESSAGEREADER_H
+#define LL_LLMESSAGEREADER_H
+
+#include "stdtypes.h"
+
+class LLHost;
+class LLMessageBuilder;
+class LLMsgData;
+class LLQuaternion;
+class LLUUID;
+class LLVector3;
+class LLVector3d;
+class LLVector4;
+
+class LLMessageReader
+{
+ public:
+
+ virtual ~LLMessageReader();
+
+ /** All get* methods expect pointers to canonical strings. */
+ virtual void getBinaryData(const char *blockname, const char *varname, void *datap, S32 size, S32 blocknum = 0, S32 max_size = S32_MAX) = 0;
+ virtual void getBOOL(const char *block, const char *var, BOOL &data, S32 blocknum = 0) = 0;
+ virtual void getS8(const char *block, const char *var, S8 &data, S32 blocknum = 0) = 0;
+ virtual void getU8(const char *block, const char *var, U8 &data, S32 blocknum = 0) = 0;
+ virtual void getS16(const char *block, const char *var, S16 &data, S32 blocknum = 0) = 0;
+ virtual void getU16(const char *block, const char *var, U16 &data, S32 blocknum = 0) = 0;
+ virtual void getS32(const char *block, const char *var, S32 &data, S32 blocknum = 0) = 0;
+ virtual void getF32(const char *block, const char *var, F32 &data, S32 blocknum = 0) = 0;
+ virtual void getU32(const char *block, const char *var, U32 &data, S32 blocknum = 0) = 0;
+ virtual void getU64(const char *block, const char *var, U64 &data, S32 blocknum = 0) = 0;
+ virtual void getF64(const char *block, const char *var, F64 &data, S32 blocknum = 0) = 0;
+ virtual void getVector3(const char *block, const char *var, LLVector3 &vec, S32 blocknum = 0) = 0;
+ virtual void getVector4(const char *block, const char *var, LLVector4 &vec, S32 blocknum = 0) = 0;
+ virtual void getVector3d(const char *block, const char *var, LLVector3d &vec, S32 blocknum = 0) = 0;
+ virtual void getQuat(const char *block, const char *var, LLQuaternion &q, S32 blocknum = 0) = 0;
+ virtual void getUUID(const char *block, const char *var, LLUUID &uuid, S32 blocknum = 0) = 0;
+ virtual void getIPAddr(const char *block, const char *var, U32 &ip, S32 blocknum = 0) = 0;
+ virtual void getIPPort(const char *block, const char *var, U16 &port, S32 blocknum = 0) = 0;
+ virtual void getString(const char *block, const char *var, S32 buffer_size, char *buffer, S32 blocknum = 0) = 0;
+
+ virtual S32 getNumberOfBlocks(const char *blockname) = 0;
+ virtual S32 getSize(const char *blockname, const char *varname) = 0;
+ virtual S32 getSize(const char *blockname, S32 blocknum, const char *varname) = 0;
+
+ virtual void clearMessage() = 0;
+
+ virtual const char* getMessageName() const = 0;
+ virtual S32 getMessageSize() const = 0;
+
+ virtual void copyToBuilder(LLMessageBuilder&) const = 0;
+
+ static void setTimeDecodes(BOOL b);
+ static BOOL getTimeDecodes();
+ static void setTimeDecodesSpamThreshold(F32 seconds);
+ static F32 getTimeDecodesSpamThreshold();
+};
+
+#endif // LL_LLMESSAGEREADER_H
diff --git a/linden/indra/llmessage/llmessagetemplate.cpp b/linden/indra/llmessage/llmessagetemplate.cpp
new file mode 100644
index 0000000..026843d
--- /dev/null
+++ b/linden/indra/llmessage/llmessagetemplate.cpp
@@ -0,0 +1,146 @@
+#include "linden_common.h"
+
+#include "llmessagetemplate.h"
+
+#include "message.h"
+
+void LLMsgVarData::addData(const void *data, S32 size, EMsgVariableType type, S32 data_size)
+{
+ mSize = size;
+ mDataSize = data_size;
+ if ( (type != MVT_VARIABLE) && (type != MVT_FIXED)
+ && (mType != MVT_VARIABLE) && (mType != MVT_FIXED))
+ {
+ if (mType != type)
+ {
+ llwarns << "Type mismatch in LLMsgVarData::addData for " << mName
+ << llendl;
+ }
+ }
+ if(size)
+ {
+ delete mData; // Delete it if it already exists
+ mData = new U8[size];
+ htonmemcpy(mData, data, mType, size);
+ }
+}
+
+void LLMsgData::addDataFast(char *blockname, char *varname, const void *data, S32 size, EMsgVariableType type, S32 data_size)
+{
+ // remember that if the blocknumber is > 0 then the number is appended to the name
+ char *namep = (char *)blockname;
+ LLMsgBlkData* block_data = mMemberBlocks[namep];
+ if (block_data->mBlockNumber)
+ {
+ namep += block_data->mBlockNumber;
+ block_data->addData(varname, data, size, type, data_size);
+ }
+ else
+ {
+ block_data->addData(varname, data, size, type, data_size);
+ }
+}
+
+// LLMessageVariable functions and friends
+
+std::ostream& operator<<(std::ostream& s, LLMessageVariable &msg)
+{
+ s << "\t\t" << msg.mName << " (";
+ switch (msg.mType)
+ {
+ case MVT_FIXED:
+ s << "Fixed, " << msg.mSize << " bytes total)\n";
+ break;
+ case MVT_VARIABLE:
+ s << "Variable, " << msg.mSize << " bytes of size info)\n";
+ break;
+ default:
+ s << "Unknown\n";
+ break;
+ }
+ return s;
+}
+
+// LLMessageBlock functions and friends
+
+std::ostream& operator<<(std::ostream& s, LLMessageBlock &msg)
+{
+ s << "\t" << msg.mName << " (";
+ switch (msg.mType)
+ {
+ case MBT_SINGLE:
+ s << "Fixed";
+ break;
+ case MBT_MULTIPLE:
+ s << "Multiple - " << msg.mNumber << " copies";
+ break;
+ case MBT_VARIABLE:
+ s << "Variable";
+ break;
+ default:
+ s << "Unknown";
+ break;
+ }
+ if (msg.mTotalSize != -1)
+ {
+ s << ", " << msg.mTotalSize << " bytes each, " << msg.mNumber*msg.mTotalSize << " bytes total)\n";
+ }
+ else
+ {
+ s << ")\n";
+ }
+
+
+ for (LLMessageBlock::message_variable_map_t::iterator iter = msg.mMemberVariables.begin();
+ iter != msg.mMemberVariables.end(); iter++)
+ {
+ LLMessageVariable& ci = *(iter->second);
+ s << ci;
+ }
+
+ return s;
+}
+
+// LLMessageTemplate functions and friends
+
+std::ostream& operator<<(std::ostream& s, LLMessageTemplate &msg)
+{
+ switch (msg.mFrequency)
+ {
+ case MFT_HIGH:
+ s << "========================================\n" << "Message #" << msg.mMessageNumber << "\n" << msg.mName << " (";
+ s << "High";
+ break;
+ case MFT_MEDIUM:
+ s << "========================================\n" << "Message #";
+ s << (msg.mMessageNumber & 0xFF) << "\n" << msg.mName << " (";
+ s << "Medium";
+ break;
+ case MFT_LOW:
+ s << "========================================\n" << "Message #";
+ s << (msg.mMessageNumber & 0xFFFF) << "\n" << msg.mName << " (";
+ s << "Low";
+ break;
+ default:
+ s << "Unknown";
+ break;
+ }
+
+ if (msg.mTotalSize != -1)
+ {
+ s << ", " << msg.mTotalSize << " bytes total)\n";
+ }
+ else
+ {
+ s << ")\n";
+ }
+
+ for (LLMessageTemplate::message_block_map_t::iterator iter = msg.mMemberBlocks.begin();
+ iter != msg.mMemberBlocks.end(); iter++)
+ {
+ LLMessageBlock* ci = iter->second;
+ s << *ci;
+ }
+
+ return s;
+}
diff --git a/linden/indra/llmessage/llmessagetemplate.h b/linden/indra/llmessage/llmessagetemplate.h
new file mode 100644
index 0000000..8847ddc
--- /dev/null
+++ b/linden/indra/llmessage/llmessagetemplate.h
@@ -0,0 +1,356 @@
+#ifndef LL_LLMESSAGETEMPLATE_H
+#define LL_LLMESSAGETEMPLATE_H
+
+#include "lldarray.h"
+#include "message.h" // TODO: babbage: Remove...
+#include "llstl.h"
+
+class LLMsgVarData
+{
+public:
+ LLMsgVarData() : mName(NULL), mSize(-1), mDataSize(-1), mData(NULL), mType(MVT_U8)
+ {
+ }
+
+ LLMsgVarData(const char *name, EMsgVariableType type) : mSize(-1), mDataSize(-1), mData(NULL), mType(type)
+ {
+ mName = (char *)name;
+ }
+
+ ~LLMsgVarData()
+ {
+ // copy constructor just copies the mData pointer, so only delete mData explicitly
+ }
+
+ void deleteData()
+ {
+ delete[] mData;
+ mData = NULL;
+ }
+
+ void addData(const void *indata, S32 size, EMsgVariableType type, S32 data_size = -1);
+
+ char *getName() const { return mName; }
+ S32 getSize() const { return mSize; }
+ void *getData() { return (void*)mData; }
+ const void *getData() const { return (const void*)mData; }
+ S32 getDataSize() const { return mDataSize; }
+ EMsgVariableType getType() const { return mType; }
+
+protected:
+ char *mName;
+ S32 mSize;
+ S32 mDataSize;
+
+ U8 *mData;
+ EMsgVariableType mType;
+};
+
+class LLMsgBlkData
+{
+public:
+ LLMsgBlkData(const char *name, S32 blocknum) : mOffset(-1), mBlockNumber(blocknum), mTotalSize(-1)
+ {
+ mName = (char *)name;
+ }
+
+ ~LLMsgBlkData()
+ {
+ for (msg_var_data_map_t::iterator iter = mMemberVarData.begin();
+ iter != mMemberVarData.end(); iter++)
+ {
+ iter->deleteData();
+ }
+ }
+
+ void addVariable(const char *name, EMsgVariableType type)
+ {
+ LLMsgVarData tmp(name,type);
+ mMemberVarData[name] = tmp;
+ }
+
+ void addData(char *name, const void *data, S32 size, EMsgVariableType type, S32 data_size = -1)
+ {
+ LLMsgVarData* temp = &mMemberVarData[name]; // creates a new entry if one doesn't exist
+ temp->addData(data, size, type, data_size);
+ }
+
+ S32 mOffset;
+ S32 mBlockNumber;
+ typedef LLDynamicArrayIndexed msg_var_data_map_t;
+ msg_var_data_map_t mMemberVarData;
+ char *mName;
+ S32 mTotalSize;
+};
+
+class LLMsgData
+{
+public:
+ LLMsgData(const char *name) : mTotalSize(-1)
+ {
+ mName = (char *)name;
+ }
+ ~LLMsgData()
+ {
+ for_each(mMemberBlocks.begin(), mMemberBlocks.end(), DeletePairedPointer());
+ }
+
+ void addBlock(LLMsgBlkData *blockp)
+ {
+ mMemberBlocks[blockp->mName] = blockp;
+ }
+
+ void addDataFast(char *blockname, char *varname, const void *data, S32 size, EMsgVariableType type, S32 data_size = -1);
+
+public:
+ S32 mOffset;
+ typedef std::map msg_blk_data_map_t;
+ msg_blk_data_map_t mMemberBlocks;
+ char *mName;
+ S32 mTotalSize;
+};
+
+// LLMessage* classes store the template of messages
+class LLMessageVariable
+{
+public:
+ LLMessageVariable() : mName(NULL), mType(MVT_NULL), mSize(-1)
+ {
+ }
+
+ LLMessageVariable(char *name) : mType(MVT_NULL), mSize(-1)
+ {
+ mName = name;
+ }
+
+ LLMessageVariable(char *name, const EMsgVariableType type, const S32 size) : mType(type), mSize(size)
+ {
+ mName = gMessageStringTable.getString(name);
+ }
+
+ ~LLMessageVariable() {}
+
+ friend std::ostream& operator<<(std::ostream& s, LLMessageVariable &msg);
+
+ EMsgVariableType getType() const { return mType; }
+ S32 getSize() const { return mSize; }
+ char *getName() const { return mName; }
+protected:
+ char *mName;
+ EMsgVariableType mType;
+ S32 mSize;
+};
+
+
+typedef enum e_message_block_type
+{
+ MBT_NULL,
+ MBT_SINGLE,
+ MBT_MULTIPLE,
+ MBT_VARIABLE,
+ MBT_EOF
+} EMsgBlockType;
+
+class LLMessageBlock
+{
+public:
+ LLMessageBlock(char *name, EMsgBlockType type, S32 number = 1) : mType(type), mNumber(number), mTotalSize(0)
+ {
+ mName = gMessageStringTable.getString(name);
+ }
+
+ ~LLMessageBlock()
+ {
+ for_each(mMemberVariables.begin(), mMemberVariables.end(), DeletePairedPointer());
+ }
+
+ void addVariable(char *name, const EMsgVariableType type, const S32 size)
+ {
+ LLMessageVariable** varp = &mMemberVariables[name];
+ if (*varp != NULL)
+ {
+ llerrs << name << " has already been used as a variable name!" << llendl;
+ }
+ *varp = new LLMessageVariable(name, type, size);
+ if (((*varp)->getType() != MVT_VARIABLE)
+ &&(mTotalSize != -1))
+ {
+ mTotalSize += (*varp)->getSize();
+ }
+ else
+ {
+ mTotalSize = -1;
+ }
+ }
+
+ EMsgVariableType getVariableType(char *name)
+ {
+ return (mMemberVariables[name])->getType();
+ }
+
+ S32 getVariableSize(char *name)
+ {
+ return (mMemberVariables[name])->getSize();
+ }
+
+ friend std::ostream& operator<<(std::ostream& s, LLMessageBlock &msg);
+
+ typedef std::map message_variable_map_t;
+ message_variable_map_t mMemberVariables;
+ char *mName;
+ EMsgBlockType mType;
+ S32 mNumber;
+ S32 mTotalSize;
+};
+
+
+enum EMsgFrequency
+{
+ MFT_NULL = 0, // value is size of message number in bytes
+ MFT_HIGH = 1,
+ MFT_MEDIUM = 2,
+ MFT_LOW = 4
+};
+
+typedef enum e_message_trust
+{
+ MT_TRUST,
+ MT_NOTRUST
+} EMsgTrust;
+
+enum EMsgEncoding
+{
+ ME_UNENCODED,
+ ME_ZEROCODED
+};
+
+class LLMessageTemplate
+{
+public:
+ LLMessageTemplate(const char *name, U32 message_number, EMsgFrequency freq)
+ :
+ //mMemberBlocks(),
+ mName(NULL),
+ mFrequency(freq),
+ mTrust(MT_NOTRUST),
+ mEncoding(ME_ZEROCODED),
+ mMessageNumber(message_number),
+ mTotalSize(0),
+ mReceiveCount(0),
+ mReceiveBytes(0),
+ mReceiveInvalid(0),
+ mDecodeTimeThisFrame(0.f),
+ mTotalDecoded(0),
+ mTotalDecodeTime(0.f),
+ mMaxDecodeTimePerMsg(0.f),
+ mBanFromTrusted(false),
+ mBanFromUntrusted(false),
+ mHandlerFunc(NULL),
+ mUserData(NULL)
+ {
+ mName = gMessageStringTable.getString(name);
+ }
+
+ ~LLMessageTemplate()
+ {
+ for_each(mMemberBlocks.begin(), mMemberBlocks.end(), DeletePairedPointer());
+ }
+
+ void addBlock(LLMessageBlock *blockp)
+ {
+ LLMessageBlock** member_blockp = &mMemberBlocks[blockp->mName];
+ if (*member_blockp != NULL)
+ {
+ llerrs << "Block " << blockp->mName
+ << "has already been used as a block name!" << llendl;
+ }
+ *member_blockp = blockp;
+ if ( (mTotalSize != -1)
+ &&(blockp->mTotalSize != -1)
+ &&( (blockp->mType == MBT_SINGLE)
+ ||(blockp->mType == MBT_MULTIPLE)))
+ {
+ mTotalSize += blockp->mNumber*blockp->mTotalSize;
+ }
+ else
+ {
+ mTotalSize = -1;
+ }
+ }
+
+ LLMessageBlock *getBlock(char *name)
+ {
+ return mMemberBlocks[name];
+ }
+
+ // Trusted messages can only be recieved on trusted circuits.
+ void setTrust(EMsgTrust t)
+ {
+ mTrust = t;
+ }
+
+ EMsgTrust getTrust(void)
+ {
+ return mTrust;
+ }
+
+ // controls for how the message should be encoded
+ void setEncoding(EMsgEncoding e)
+ {
+ mEncoding = e;
+ }
+ EMsgEncoding getEncoding()
+ {
+ return mEncoding;
+ }
+
+ void setHandlerFunc(void (*handler_func)(LLMessageSystem *msgsystem, void **user_data), void **user_data)
+ {
+ mHandlerFunc = handler_func;
+ mUserData = user_data;
+ }
+
+ BOOL callHandlerFunc(LLMessageSystem *msgsystem)
+ {
+ if (mHandlerFunc)
+ {
+ mHandlerFunc(msgsystem, mUserData);
+ return TRUE;
+ }
+ return FALSE;
+ }
+
+ bool isBanned(bool trustedSource)
+ {
+ return trustedSource ? mBanFromTrusted : mBanFromUntrusted;
+ }
+
+ friend std::ostream& operator<<(std::ostream& s, LLMessageTemplate &msg);
+
+public:
+ typedef std::map message_block_map_t;
+ message_block_map_t mMemberBlocks;
+ char *mName;
+ EMsgFrequency mFrequency;
+ EMsgTrust mTrust;
+ EMsgEncoding mEncoding;
+ U32 mMessageNumber;
+ S32 mTotalSize;
+ U32 mReceiveCount; // how many of this template have been received since last reset
+ U32 mReceiveBytes; // How many bytes received
+ U32 mReceiveInvalid; // How many "invalid" packets
+ F32 mDecodeTimeThisFrame; // Total seconds spent decoding this frame
+ U32 mTotalDecoded; // Total messages successfully decoded
+ F32 mTotalDecodeTime; // Total time successfully decoding messages
+ F32 mMaxDecodeTimePerMsg;
+
+ bool mBanFromTrusted;
+ bool mBanFromUntrusted;
+
+private:
+ // message handler function (this is set by each application)
+ void (*mHandlerFunc)(LLMessageSystem *msgsystem, void **user_data);
+ void **mUserData;
+};
+
+#endif // LL_LLMESSAGETEMPLATE_H
diff --git a/linden/indra/llmessage/llmessagethrottle.cpp b/linden/indra/llmessage/llmessagethrottle.cpp
index 309a1d9..07c22a5 100644
--- a/linden/indra/llmessage/llmessagethrottle.cpp
+++ b/linden/indra/llmessage/llmessagethrottle.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llmessagethrottle.h b/linden/indra/llmessage/llmessagethrottle.h
index 80d4ca3..522358c 100644
--- a/linden/indra/llmessage/llmessagethrottle.h
+++ b/linden/indra/llmessage/llmessagethrottle.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llmime.cpp b/linden/indra/llmessage/llmime.cpp
index 2786ea8..6938ed7 100644
--- a/linden/indra/llmessage/llmime.cpp
+++ b/linden/indra/llmessage/llmime.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llmime.h b/linden/indra/llmessage/llmime.h
index 7cb2b74..307a33d 100644
--- a/linden/indra/llmessage/llmime.h
+++ b/linden/indra/llmessage/llmime.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llmsgvariabletype.h b/linden/indra/llmessage/llmsgvariabletype.h
new file mode 100644
index 0000000..360d949
--- /dev/null
+++ b/linden/indra/llmessage/llmsgvariabletype.h
@@ -0,0 +1,33 @@
+#ifndef LL_LLMSGVARIABLETYPE_H
+#define LL_LLMSGVARIABLETYPE_H
+
+typedef enum e_message_variable_type
+{
+ MVT_NULL,
+ MVT_FIXED,
+ MVT_VARIABLE,
+ MVT_U8,
+ MVT_U16,
+ MVT_U32,
+ MVT_U64,
+ MVT_S8,
+ MVT_S16,
+ MVT_S32,
+ MVT_S64,
+ MVT_F32,
+ MVT_F64,
+ MVT_LLVector3,
+ MVT_LLVector3d,
+ MVT_LLVector4,
+ MVT_LLQuaternion,
+ MVT_LLUUID,
+ MVT_BOOL,
+ MVT_IP_ADDR,
+ MVT_IP_PORT,
+ MVT_U16Vec3,
+ MVT_U16Quat,
+ MVT_S16Array,
+ MVT_EOL
+} EMsgVariableType;
+
+#endif // LL_LLMSGVARIABLETYPE_H
diff --git a/linden/indra/llmessage/llnamevalue.cpp b/linden/indra/llmessage/llnamevalue.cpp
index 1304923..6e449ed 100644
--- a/linden/indra/llmessage/llnamevalue.cpp
+++ b/linden/indra/llmessage/llnamevalue.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llnamevalue.h b/linden/indra/llmessage/llnamevalue.h
index 89fe71b..fe733fa 100644
--- a/linden/indra/llmessage/llnamevalue.h
+++ b/linden/indra/llmessage/llnamevalue.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llnullcipher.cpp b/linden/indra/llmessage/llnullcipher.cpp
index ad2b25f..eddadeb 100644
--- a/linden/indra/llmessage/llnullcipher.cpp
+++ b/linden/indra/llmessage/llnullcipher.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llnullcipher.h b/linden/indra/llmessage/llnullcipher.h
index 75d022d..2e41063 100644
--- a/linden/indra/llmessage/llnullcipher.h
+++ b/linden/indra/llmessage/llnullcipher.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llpacketack.h b/linden/indra/llmessage/llpacketack.h
index e8d598a..c86fb0f 100644
--- a/linden/indra/llmessage/llpacketack.h
+++ b/linden/indra/llmessage/llpacketack.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -63,6 +64,14 @@ public:
public:
LLReliablePacketParams()
{
+ clear();
+ };
+
+ ~LLReliablePacketParams() { };
+
+ void clear()
+ {
+ mHost.invalidate();
mRetries = 0;
mPingBasedRetry = TRUE;
mTimeout = 0.f;
@@ -71,8 +80,6 @@ public:
mMessageName = NULL;
};
- ~LLReliablePacketParams() { };
-
void set ( const LLHost &host, S32 retries, BOOL ping_based_retry,
F32 timeout,
void (*callback)(void **,S32), void **callback_data, char *name )
@@ -136,7 +143,13 @@ public:
}
};
- ~LLReliablePacket(){ delete [] mBuffer; };
+
+ ~LLReliablePacket()
+ {
+ mCallback = NULL;
+ delete [] mBuffer;
+ mBuffer = NULL;
+ };
friend class LLCircuitData;
protected:
diff --git a/linden/indra/llmessage/llpacketbuffer.cpp b/linden/indra/llmessage/llpacketbuffer.cpp
index 855fb40..69144f5 100644
--- a/linden/indra/llmessage/llpacketbuffer.cpp
+++ b/linden/indra/llmessage/llpacketbuffer.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llpacketbuffer.h b/linden/indra/llmessage/llpacketbuffer.h
index 613418a..17fe446 100644
--- a/linden/indra/llmessage/llpacketbuffer.h
+++ b/linden/indra/llmessage/llpacketbuffer.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llpacketring.cpp b/linden/indra/llmessage/llpacketring.cpp
index a2e6eb9..e07c754 100644
--- a/linden/indra/llmessage/llpacketring.cpp
+++ b/linden/indra/llmessage/llpacketring.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llpacketring.h b/linden/indra/llmessage/llpacketring.h
index 27b830e..1a0c0c6 100644
--- a/linden/indra/llmessage/llpacketring.h
+++ b/linden/indra/llmessage/llpacketring.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llpartdata.cpp b/linden/indra/llmessage/llpartdata.cpp
index de0cb13..f46481e 100644
--- a/linden/indra/llmessage/llpartdata.cpp
+++ b/linden/indra/llmessage/llpartdata.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llpartdata.h b/linden/indra/llmessage/llpartdata.h
index 55d22d5..3177e84 100644
--- a/linden/indra/llmessage/llpartdata.h
+++ b/linden/indra/llmessage/llpartdata.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llpumpio.cpp b/linden/indra/llmessage/llpumpio.cpp
index 4ce15b9..e76f3ea 100644
--- a/linden/indra/llmessage/llpumpio.cpp
+++ b/linden/indra/llmessage/llpumpio.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -333,6 +334,12 @@ bool LLPumpIO::copyCurrentLinkInfo(links_t& links) const
void LLPumpIO::pump()
{
+ pump(DEFAULT_POLL_TIMEOUT);
+}
+
+//timeout is in microseconds
+void LLPumpIO::pump(const S32& poll_timeout)
+{
LLMemType m1(LLMemType::MTYPE_IO_PUMP);
LLFastTimer t1(LLFastTimer::FTM_PUMP);
//llinfos << "LLPumpIO::pump()" << llendl;
@@ -414,7 +421,7 @@ void LLPumpIO::pump()
S32 count = 0;
S32 client_id = 0;
const apr_pollfd_t* poll_fd = NULL;
- apr_pollset_poll(mPollset, DEFAULT_POLL_TIMEOUT, &count, &poll_fd);
+ apr_pollset_poll(mPollset, poll_timeout, &count, &poll_fd);
PUMP_DEBUG;
for(S32 i = 0; i < count; ++i)
{
diff --git a/linden/indra/llmessage/llpumpio.h b/linden/indra/llmessage/llpumpio.h
index d90d6b0..0f2bd48 100644
--- a/linden/indra/llmessage/llpumpio.h
+++ b/linden/indra/llmessage/llpumpio.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -246,6 +247,7 @@ public:
* chain has a file descriptor ready, process()
will
* be called for all pipes which have requested it.
*/
+ void pump(const S32& poll_timeout);
void pump();
/**
diff --git a/linden/indra/llmessage/llqueryflags.h b/linden/indra/llmessage/llqueryflags.h
index 69ba95a..9143995 100644
--- a/linden/indra/llmessage/llqueryflags.h
+++ b/linden/indra/llmessage/llqueryflags.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -57,6 +58,9 @@ const U32 DFQ_NAME_SORT = 0x1 << 19;
const U32 DFQ_LIMIT_BY_PRICE = 0x1 << 20;
const U32 DFQ_LIMIT_BY_AREA = 0x1 << 21;
+const U32 DFQ_FILTER_MATURE = 0x1 << 22;
+const U32 DFQ_PG_PARCELS_ONLY = 0x1 << 23;
+
// Sell Type flags
const U32 ST_AUCTION = 0x1 << 1;
const U32 ST_NEWBIE = 0x1 << 2;
diff --git a/linden/indra/llmessage/llregionflags.h b/linden/indra/llmessage/llregionflags.h
index 6a8f72a..6a23544 100644
--- a/linden/indra/llmessage/llregionflags.h
+++ b/linden/indra/llmessage/llregionflags.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llregionhandle.h b/linden/indra/llmessage/llregionhandle.h
index d943374..ad4cf61 100644
--- a/linden/indra/llmessage/llregionhandle.h
+++ b/linden/indra/llmessage/llregionhandle.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llsdappservices.cpp b/linden/indra/llmessage/llsdappservices.cpp
index 8574f87..ae1505b 100644
--- a/linden/indra/llmessage/llsdappservices.cpp
+++ b/linden/indra/llmessage/llsdappservices.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llsdappservices.h b/linden/indra/llmessage/llsdappservices.h
index 8e6e868..0075b2e 100644
--- a/linden/indra/llmessage/llsdappservices.h
+++ b/linden/indra/llmessage/llsdappservices.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llsdhttpserver.cpp b/linden/indra/llmessage/llsdhttpserver.cpp
index 4054680..8ca7f14 100644
--- a/linden/indra/llmessage/llsdhttpserver.cpp
+++ b/linden/indra/llmessage/llsdhttpserver.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llsdhttpserver.h b/linden/indra/llmessage/llsdhttpserver.h
index 904852f..b6904f3 100644
--- a/linden/indra/llmessage/llsdhttpserver.h
+++ b/linden/indra/llmessage/llsdhttpserver.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llsdmessagebuilder.cpp b/linden/indra/llmessage/llsdmessagebuilder.cpp
new file mode 100755
index 0000000..b7deb48
--- /dev/null
+++ b/linden/indra/llmessage/llsdmessagebuilder.cpp
@@ -0,0 +1,281 @@
+#include "linden_common.h"
+
+#include "llsdmessagebuilder.h"
+
+#include "llmessagetemplate.h"
+#include "llquaternion.h"
+#include "llsdutil.h"
+#include "llsdserialize.h"
+#include "u64.h"
+#include "v3dmath.h"
+#include "v3math.h"
+#include "v4math.h"
+
+LLSDMessageBuilder::LLSDMessageBuilder() :
+ mCurrentMessage(LLSD::emptyMap()),
+ mCurrentBlock(NULL),
+ mCurrentMessageName(""),
+ mCurrentBlockName(""),
+ mbSBuilt(FALSE),
+ mbSClear(TRUE)
+{
+}
+
+//virtual
+LLSDMessageBuilder::~LLSDMessageBuilder()
+{
+}
+
+
+// virtual
+void LLSDMessageBuilder::newMessage(const char *name)
+{
+ mbSBuilt = FALSE;
+ mbSClear = FALSE;
+
+ mCurrentMessage = LLSD::emptyMap();
+ mCurrentMessageName = (char *)name;
+}
+
+// virtual
+void LLSDMessageBuilder::clearMessage()
+{
+ mbSBuilt = FALSE;
+ mbSClear = TRUE;
+
+ mCurrentMessage = LLSD::emptyMap();
+ mCurrentMessageName = "";
+}
+
+// virtual
+void LLSDMessageBuilder::nextBlock(const char* blockname)
+{
+ LLSD& block = mCurrentMessage[blockname];
+ if(block.isUndefined())
+ {
+ block[0] = LLSD::emptyMap();
+ mCurrentBlock = &(block[0]);
+ }
+ else if(block.isArray())
+ {
+ block[block.size()] = LLSD::emptyMap();
+ mCurrentBlock = &(block[block.size() - 1]);
+ }
+ else
+ {
+ llerrs << "existing block not array" << llendl;
+ }
+}
+
+// TODO: Remove this horror...
+BOOL LLSDMessageBuilder::removeLastBlock()
+{
+ /* TODO: finish implementing this */
+ return FALSE;
+}
+
+void LLSDMessageBuilder::addBinaryData(const char *varname,
+ const void *data, S32 size)
+{
+ std::vector v;
+ v.resize(size);
+ memcpy(&(v[0]), reinterpret_cast(data), size);
+ (*mCurrentBlock)[varname] = v;
+}
+
+void LLSDMessageBuilder::addS8(const char *varname, S8 v)
+{
+ (*mCurrentBlock)[varname] = v;
+}
+
+void LLSDMessageBuilder::addU8(const char *varname, U8 v)
+{
+ (*mCurrentBlock)[varname] = v;
+}
+
+void LLSDMessageBuilder::addS16(const char *varname, S16 v)
+{
+ (*mCurrentBlock)[varname] = v;
+}
+
+void LLSDMessageBuilder::addU16(const char *varname, U16 v)
+{
+ (*mCurrentBlock)[varname] = v;
+}
+
+void LLSDMessageBuilder::addF32(const char *varname, F32 v)
+{
+ (*mCurrentBlock)[varname] = v;
+}
+
+void LLSDMessageBuilder::addS32(const char *varname, S32 v)
+{
+ (*mCurrentBlock)[varname] = v;
+}
+
+void LLSDMessageBuilder::addU32(const char *varname, U32 v)
+{
+ (*mCurrentBlock)[varname] = ll_sd_from_U32(v);
+}
+
+void LLSDMessageBuilder::addU64(const char *varname, U64 v)
+{
+ (*mCurrentBlock)[varname] = ll_sd_from_U64(v);
+}
+
+void LLSDMessageBuilder::addF64(const char *varname, F64 v)
+{
+ (*mCurrentBlock)[varname] = v;
+}
+
+void LLSDMessageBuilder::addIPAddr(const char *varname, U32 v)
+{
+ (*mCurrentBlock)[varname] = ll_sd_from_ipaddr(v);
+}
+
+void LLSDMessageBuilder::addIPPort(const char *varname, U16 v)
+{
+ (*mCurrentBlock)[varname] = v;
+}
+
+void LLSDMessageBuilder::addBOOL(const char* varname, BOOL v)
+{
+ (*mCurrentBlock)[varname] = (v == TRUE);
+}
+
+void LLSDMessageBuilder::addString(const char* varname, const char* v)
+{
+ if (v)
+ (*mCurrentBlock)[varname] = v; /* Flawfinder: ignore */
+ else
+ (*mCurrentBlock)[varname] = "";
+}
+
+void LLSDMessageBuilder::addString(const char* varname, const std::string& v)
+{
+ if (v.size())
+ (*mCurrentBlock)[varname] = v;
+ else
+ (*mCurrentBlock)[varname] = "";
+}
+
+void LLSDMessageBuilder::addVector3(const char *varname, const LLVector3& v)
+{
+ (*mCurrentBlock)[varname] = ll_sd_from_vector3(v);
+}
+
+void LLSDMessageBuilder::addVector4(const char *varname, const LLVector4& v)
+{
+ (*mCurrentBlock)[varname] = ll_sd_from_vector4(v);
+}
+
+void LLSDMessageBuilder::addVector3d(const char *varname, const LLVector3d& v)
+{
+ (*mCurrentBlock)[varname] = ll_sd_from_vector3d(v);
+}
+
+void LLSDMessageBuilder::addQuat(const char *varname, const LLQuaternion& v)
+{
+ (*mCurrentBlock)[varname] = ll_sd_from_quaternion(v);
+}
+
+void LLSDMessageBuilder::addUUID(const char *varname, const LLUUID& v)
+{
+ (*mCurrentBlock)[varname] = v;
+}
+
+void LLSDMessageBuilder::compressMessage(U8*& buf_ptr, U32& buffer_length)
+{
+}
+
+BOOL LLSDMessageBuilder::isMessageFull(const char* blockname) const
+{
+ return FALSE;
+}
+
+// make sure that all the desired data is in place and then copy the data
+// into MAX_BUFFER_SIZEd buffer
+U32 LLSDMessageBuilder::buildMessage(U8* buffer, U32 buffer_size)
+{
+ return 0;
+}
+
+void LLSDMessageBuilder::copyFromMessageData(const LLMsgData& data)
+{
+ // copy the blocks
+ // counting variables used to encode multiple block info
+ S32 block_count = 0;
+ char *block_name = NULL;
+
+ // loop through msg blocks to loop through variables, totalling up size
+ // data and filling the new (send) message
+ LLMsgData::msg_blk_data_map_t::const_iterator iter =
+ data.mMemberBlocks.begin();
+ LLMsgData::msg_blk_data_map_t::const_iterator end =
+ data.mMemberBlocks.end();
+ for(; iter != end; ++iter)
+ {
+ const LLMsgBlkData* mbci = iter->second;
+ if(!mbci) continue;
+
+ // do we need to encode a block code?
+ if (block_count == 0)
+ {
+ block_count = mbci->mBlockNumber;
+ block_name = (char *)mbci->mName;
+ }
+
+ // counting down mutliple blocks
+ block_count--;
+
+ nextBlock(block_name);
+
+ // now loop through the variables
+ LLMsgBlkData::msg_var_data_map_t::const_iterator dit = mbci->mMemberVarData.begin();
+ LLMsgBlkData::msg_var_data_map_t::const_iterator dend = mbci->mMemberVarData.end();
+
+ for(; dit != dend; ++dit)
+ {
+ //const LLMsgVarData& mvci = *dit;
+
+ // TODO: Copy mvci data in to block:
+ // (*mCurrentBlock)[varname] = v;
+ }
+ }
+}
+
+//virtual
+void LLSDMessageBuilder::copyFromLLSD(const LLSD& msg)
+{
+ mCurrentMessage = msg;
+ llinfos << LLSDXMLStreamer(mCurrentMessage) << llendl;
+}
+
+const LLSD& LLSDMessageBuilder::getMessage() const
+{
+ return mCurrentMessage;
+}
+
+//virtual
+void LLSDMessageBuilder::setBuilt(BOOL b) { mbSBuilt = b; }
+
+//virtual
+BOOL LLSDMessageBuilder::isBuilt() const {return mbSBuilt;}
+
+//virtual
+BOOL LLSDMessageBuilder::isClear() const {return mbSClear;}
+
+//virtual
+S32 LLSDMessageBuilder::getMessageSize()
+{
+ // babbage: size is unknown as message stored as LLSD.
+ // return non-zero if pending data, as send can be skipped for 0 size.
+ // return 1 to encourage senders checking size against splitting message.
+ return mCurrentMessage.size()? 1 : 0;
+}
+
+//virtual
+const char* LLSDMessageBuilder::getMessageName() const
+{
+ return mCurrentMessageName.c_str();
+}
diff --git a/linden/indra/llmessage/llsdmessagebuilder.h b/linden/indra/llmessage/llsdmessagebuilder.h
new file mode 100755
index 0000000..f04194d
--- /dev/null
+++ b/linden/indra/llmessage/llsdmessagebuilder.h
@@ -0,0 +1,98 @@
+#ifndef LL_LLSDMESSAGEBUILDER_H
+#define LL_LLSDMESSAGEBUILDER_H
+
+#include
+
+#include "llmessagebuilder.h"
+#include "llmsgvariabletype.h"
+#include "llsd.h"
+
+class LLMessageTemplate;
+class LLMsgData;
+
+class LLSDMessageBuilder : public LLMessageBuilder
+{
+public:
+
+ //CLASS_LOG_TYPE(LLSDMessageBuilder);
+
+ LLSDMessageBuilder();
+ virtual ~LLSDMessageBuilder();
+
+ virtual void newMessage(const char *name);
+
+ virtual void nextBlock(const char* blockname);
+ virtual BOOL removeLastBlock(); // TODO: babbage: remove this horror...
+
+ /** All add* methods expect pointers to canonical varname strings. */
+ virtual void addBinaryData(const char *varname, const void *data,
+ S32 size);
+ virtual void addBOOL(const char* varname, BOOL b);
+ virtual void addS8(const char *varname, S8 s);
+ virtual void addU8(const char *varname, U8 u);
+ virtual void addS16(const char *varname, S16 i);
+ virtual void addU16(const char *varname, U16 i);
+ virtual void addF32(const char *varname, F32 f);
+ virtual void addS32(const char *varname, S32 s);
+ virtual void addU32(const char *varname, U32 u);
+ virtual void addU64(const char *varname, U64 lu);
+ virtual void addF64(const char *varname, F64 d);
+ virtual void addVector3(const char *varname, const LLVector3& vec);
+ virtual void addVector4(const char *varname, const LLVector4& vec);
+ virtual void addVector3d(const char *varname, const LLVector3d& vec);
+ virtual void addQuat(const char *varname, const LLQuaternion& quat);
+ virtual void addUUID(const char *varname, const LLUUID& uuid);
+ virtual void addIPAddr(const char *varname, const U32 ip);
+ virtual void addIPPort(const char *varname, const U16 port);
+ virtual void addString(const char* varname, const char* s);
+ virtual void addString(const char* varname, const std::string& s);
+
+ virtual BOOL isMessageFull(const char* blockname) const;
+ virtual void compressMessage(U8*& buf_ptr, U32& buffer_length);
+
+ virtual BOOL isBuilt() const;
+ virtual BOOL isClear() const;
+ virtual U32 buildMessage(U8* buffer, U32 buffer_size);
+ /**< Return built message size */
+
+ virtual void clearMessage();
+
+ // TODO: babbage: remove this horror.
+ virtual void setBuilt(BOOL b);
+
+ virtual S32 getMessageSize();
+ virtual const char* getMessageName() const;
+
+ virtual void copyFromMessageData(const LLMsgData& data);
+
+ virtual void copyFromLLSD(const LLSD& msg);
+
+ const LLSD& getMessage() const;
+private:
+
+ /* mCurrentMessage is of the following format:
+ mCurrentMessage = { 'block_name1' : [ { 'block1_field1' : 'b1f1_data',
+ 'block1_field2' : 'b1f2_data',
+ ...
+ 'block1_fieldn' : 'b1fn_data'},
+ { 'block2_field1' : 'b2f1_data',
+ 'block2_field2' : 'b2f2_data',
+ ...
+ 'block2_fieldn' : 'b2fn_data'},
+ ...
+ { 'blockm_field1' : 'bmf1_data',
+ 'blockm_field2' : 'bmf2_data',
+ ...
+ 'blockm_fieldn' : 'bmfn_data'} ],
+ 'block_name2' : ...,
+ ...
+ 'block_namem' } */
+ LLSD mCurrentMessage;
+ LLSD* mCurrentBlock;
+ std::string mCurrentMessageName;
+ std::string mCurrentBlockName;
+ BOOL mbSBuilt;
+ BOOL mbSClear;
+};
+
+#endif // LL_LLSDMESSAGEBUILDER_H
diff --git a/linden/indra/llmessage/llsdmessagereader.cpp b/linden/indra/llmessage/llsdmessagereader.cpp
new file mode 100755
index 0000000..6312bee
--- /dev/null
+++ b/linden/indra/llmessage/llsdmessagereader.cpp
@@ -0,0 +1,264 @@
+#include "llsdmessagereader.h"
+#include "llsdutil.h"
+#include "llmessagebuilder.h"
+#include "llsdmessagebuilder.h"
+
+LLSDMessageReader::LLSDMessageReader()
+{
+}
+
+//virtual
+LLSDMessageReader::~LLSDMessageReader()
+{
+}
+
+
+LLSD getLLSD(const LLSD& input, const char* block, const char* var, S32 blocknum)
+{
+ if(input[block].isArray())
+ {
+ return input[block][blocknum][var];
+ }
+ return LLSD();
+}
+
+//virtual
+void LLSDMessageReader::getBinaryData(const char *block, const char *var,
+ void *datap, S32 size, S32 blocknum,
+ S32 max_size)
+{
+ std::vector data = getLLSD(mMessage, block, var, blocknum);
+ S32 data_size = (S32)data.size();
+
+ if (size && data_size != size)
+ {
+ return;
+ }
+
+ if (max_size < data_size)
+ {
+ data_size = max_size;
+ }
+
+ memcpy(datap, &(data[0]), data_size);
+}
+
+//virtual
+void LLSDMessageReader::getBOOL(const char *block, const char *var,
+ BOOL &data,
+ S32 blocknum)
+{
+ data = getLLSD(mMessage, block, var, blocknum);
+}
+
+//virtual
+void LLSDMessageReader::getS8(const char *block, const char *var, S8 &data,
+ S32 blocknum)
+{
+ data = getLLSD(mMessage, block, var, blocknum).asInteger();
+}
+
+//virtual
+void LLSDMessageReader::getU8(const char *block, const char *var, U8 &data,
+ S32 blocknum)
+{
+ data = getLLSD(mMessage, block, var, blocknum).asInteger();
+}
+
+//virtual
+void LLSDMessageReader::getS16(const char *block, const char *var, S16 &data,
+ S32 blocknum)
+{
+ data = getLLSD(mMessage, block, var, blocknum).asInteger();
+}
+
+//virtual
+void LLSDMessageReader::getU16(const char *block, const char *var, U16 &data,
+ S32 blocknum)
+{
+ data = getLLSD(mMessage, block, var, blocknum).asInteger();
+}
+
+//virtual
+void LLSDMessageReader::getS32(const char *block, const char *var, S32 &data,
+ S32 blocknum)
+{
+ data = getLLSD(mMessage, block, var, blocknum);
+}
+
+//virtual
+void LLSDMessageReader::getF32(const char *block, const char *var, F32 &data,
+ S32 blocknum)
+{
+ data = (F32)getLLSD(mMessage, block, var, blocknum).asReal();
+}
+
+//virtual
+void LLSDMessageReader::getU32(const char *block, const char *var, U32 &data,
+ S32 blocknum)
+{
+ data = ll_U32_from_sd(getLLSD(mMessage, block, var, blocknum));
+}
+
+//virtual
+void LLSDMessageReader::getU64(const char *block, const char *var,
+ U64 &data, S32 blocknum)
+{
+ data = ll_U64_from_sd(getLLSD(mMessage, block, var, blocknum));
+}
+
+//virtual
+void LLSDMessageReader::getF64(const char *block, const char *var,
+ F64 &data, S32 blocknum)
+{
+ data = getLLSD(mMessage, block, var, blocknum);
+}
+
+//virtual
+void LLSDMessageReader::getVector3(const char *block, const char *var,
+ LLVector3 &vec, S32 blocknum)
+{
+ vec = ll_vector3_from_sd(getLLSD(mMessage, block, var, blocknum));
+}
+
+//virtual
+void LLSDMessageReader::getVector4(const char *block, const char *var,
+ LLVector4 &vec, S32 blocknum)
+{
+ vec = ll_vector4_from_sd(getLLSD(mMessage, block, var, blocknum));
+}
+
+//virtual
+void LLSDMessageReader::getVector3d(const char *block, const char *var,
+ LLVector3d &vec, S32 blocknum)
+{
+ vec = ll_vector3d_from_sd(getLLSD(mMessage, block, var, blocknum));
+}
+
+//virtual
+void LLSDMessageReader::getQuat(const char *block, const char *var,
+ LLQuaternion &q, S32 blocknum)
+{
+ q = ll_quaternion_from_sd(getLLSD(mMessage, block, var, blocknum));
+}
+
+//virtual
+void LLSDMessageReader::getUUID(const char *block, const char *var,
+ LLUUID &uuid, S32 blocknum)
+{
+ uuid = getLLSD(mMessage, block, var, blocknum);
+}
+
+//virtual
+void LLSDMessageReader::getIPAddr(const char *block, const char *var,
+ U32 &ip, S32 blocknum)
+{
+ ip = ll_ipaddr_from_sd(getLLSD(mMessage, block, var, blocknum));
+}
+
+//virtual
+void LLSDMessageReader::getIPPort(const char *block, const char *var,
+ U16 &port, S32 blocknum)
+{
+ port = getLLSD(mMessage, block, var, blocknum).asInteger();
+}
+
+//virtual
+void LLSDMessageReader::getString(const char *block, const char *var,
+ S32 buffer_size, char *buffer, S32 blocknum)
+{
+ std::string data = getLLSD(mMessage, block, var, blocknum);
+
+ S32 data_size = data.size();
+ if (data_size >= buffer_size)
+ {
+ data_size = buffer_size - 1;
+ }
+ memcpy(buffer, data.data(), data_size);
+ buffer[data_size] = '\0';
+}
+
+
+//virtual
+S32 LLSDMessageReader::getNumberOfBlocks(const char *blockname)
+{
+ return mMessage[blockname].size();
+}
+
+S32 getElementSize(const LLSD& llsd)
+{
+ LLSD::Type type = llsd.type();
+ switch(type)
+ {
+ case LLSD::TypeBoolean:
+ return sizeof(bool);
+ case LLSD::TypeInteger:
+ return sizeof(S32);
+ case LLSD::TypeReal:
+ return sizeof(F64);
+ case LLSD::TypeString:
+ return llsd.asString().size();
+ case LLSD::TypeUUID:
+ return sizeof(LLUUID);
+ case LLSD::TypeDate:
+ return sizeof(LLDate);
+ case LLSD::TypeURI:
+ return sizeof(LLURI);
+ case LLSD::TypeBinary:
+ {
+ std::vector data = llsd;
+ return data.size() * sizeof(U8);
+ }
+ case LLSD::TypeMap:
+ case LLSD::TypeArray:
+ case LLSD::TypeUndefined:
+ return 0;
+ }
+ return 0;
+}
+
+//virtual
+//Mainly used to find size of binary block of data
+S32 LLSDMessageReader::getSize(const char *blockname, const char *varname)
+{
+ return getElementSize(mMessage[blockname][0][varname]);
+}
+
+
+//virtual
+S32 LLSDMessageReader::getSize(const char *blockname, S32 blocknum,
+ const char *varname)
+{
+ return getElementSize(mMessage[blockname][blocknum][varname]);
+}
+
+//virtual
+void LLSDMessageReader::clearMessage()
+{
+ mMessage = LLSD();
+}
+
+//virtual
+const char* LLSDMessageReader::getMessageName() const
+{
+ return mMessageName.c_str();
+}
+
+// virtual
+S32 LLSDMessageReader::getMessageSize() const
+{
+ return 0;
+}
+
+//virtual
+void LLSDMessageReader::copyToBuilder(LLMessageBuilder& builder) const
+{
+ builder.copyFromLLSD(mMessage);
+}
+
+void LLSDMessageReader::setMessage(const std::string& name, const LLSD& message)
+{
+ mMessageName = name;
+ // TODO: Validate
+ mMessage = message;
+}
diff --git a/linden/indra/llmessage/llsdmessagereader.h b/linden/indra/llmessage/llsdmessagereader.h
new file mode 100755
index 0000000..5785194
--- /dev/null
+++ b/linden/indra/llmessage/llsdmessagereader.h
@@ -0,0 +1,79 @@
+#ifndef LL_LLSDMESSAGEREADER_H
+#define LL_LLSDMESSAGEREADER_H
+
+#include "llmessagereader.h"
+#include "llsd.h"
+
+#include
+
+class LLMessageTemplate;
+class LLMsgData;
+
+class LLSDMessageReader : public LLMessageReader
+{
+public:
+
+ LLSDMessageReader();
+ virtual ~LLSDMessageReader();
+
+ /** All get* methods expect pointers to canonical strings. */
+ virtual void getBinaryData(const char *block, const char *var,
+ void *datap, S32 size, S32 blocknum = 0,
+ S32 max_size = S32_MAX);
+ virtual void getBOOL(const char *block, const char *var, BOOL &data,
+ S32 blocknum = 0);
+ virtual void getS8(const char *block, const char *var, S8 &data,
+ S32 blocknum = 0);
+ virtual void getU8(const char *block, const char *var, U8 &data,
+ S32 blocknum = 0);
+ virtual void getS16(const char *block, const char *var, S16 &data,
+ S32 blocknum = 0);
+ virtual void getU16(const char *block, const char *var, U16 &data,
+ S32 blocknum = 0);
+ virtual void getS32(const char *block, const char *var, S32 &data,
+ S32 blocknum = 0);
+ virtual void getF32(const char *block, const char *var, F32 &data,
+ S32 blocknum = 0);
+ virtual void getU32(const char *block, const char *var, U32 &data,
+ S32 blocknum = 0);
+ virtual void getU64(const char *block, const char *var, U64 &data,
+ S32 blocknum = 0);
+ virtual void getF64(const char *block, const char *var, F64 &data,
+ S32 blocknum = 0);
+ virtual void getVector3(const char *block, const char *var,
+ LLVector3 &vec, S32 blocknum = 0);
+ virtual void getVector4(const char *block, const char *var,
+ LLVector4 &vec, S32 blocknum = 0);
+ virtual void getVector3d(const char *block, const char *var,
+ LLVector3d &vec, S32 blocknum = 0);
+ virtual void getQuat(const char *block, const char *var, LLQuaternion &q,
+ S32 blocknum = 0);
+ virtual void getUUID(const char *block, const char *var, LLUUID &uuid,
+ S32 blocknum = 0);
+ virtual void getIPAddr(const char *block, const char *var, U32 &ip,
+ S32 blocknum = 0);
+ virtual void getIPPort(const char *block, const char *var, U16 &port,
+ S32 blocknum = 0);
+ virtual void getString(const char *block, const char *var,
+ S32 buffer_size, char *buffer, S32 blocknum = 0);
+
+ virtual S32 getNumberOfBlocks(const char *blockname);
+ virtual S32 getSize(const char *blockname, const char *varname);
+ virtual S32 getSize(const char *blockname, S32 blocknum,
+ const char *varname);
+
+ virtual void clearMessage();
+
+ virtual const char* getMessageName() const;
+ virtual S32 getMessageSize() const;
+
+ virtual void copyToBuilder(LLMessageBuilder&) const;
+
+ void setMessage(const std::string& name, const LLSD& msg);
+
+private:
+ std::string mMessageName;
+ LLSD mMessage;
+};
+
+#endif // LL_LLSDMESSAGEREADER_H
diff --git a/linden/indra/llmessage/llsdmessagesystem.cpp b/linden/indra/llmessage/llsdmessagesystem.cpp
deleted file mode 100644
index 66382ea..0000000
--- a/linden/indra/llmessage/llsdmessagesystem.cpp
+++ /dev/null
@@ -1,176 +0,0 @@
-/**
- * @file llsdmessagesystem.cpp
- * @brief LLSDMessageSystem class implementation
- *
- * Copyright (c) 2001-2007, Linden Research, Inc.
- *
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlife.com/developers/opensource/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at http://secondlife.com/developers/opensource/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#include "linden_common.h"
-#include "llsdmessagesystem.h"
-
-#include "llhttpnode.h"
-#include "llsdutil.h"
-
-LLSDMessageSystem::LLSDMessageSystem() : mMsg(* new LLMessageSystem())
-{
-}
-
-LLSDMessageSystem::LLSDMessageSystem(LLMessageSystem& delegateSystem) : mMsg(delegateSystem)
-{
-}
-
-LLSDMessageSystem::~LLSDMessageSystem()
-{
-}
-
-bool LLSDMessageSystem::handleMessage(std::string name, const LLSD& message)
-{
- setInput(message);
- return mMsg.callHandler(name.c_str(), false, this);
-}
-
-void LLSDMessageSystem::setInput(const LLSD& input)
-{
- mInput = input;
-}
-
-LLSD getLLSD(const LLSD& input, const char* block, const char* var, S32 blocknum)
-{
- if(input[block].isArray())
- {
- return input[block][blocknum][var];
- }
- return input[block][var];
-}
-
-//virtual
-void LLSDMessageSystem::getU32Fast(const char *block, const char *var, U32 &data, S32 blocknum)
-{
- data = ll_U32_from_sd(getLLSD(mInput, block, var, blocknum));
-}
-
-//virtual
-void LLSDMessageSystem::getUUIDFast(const char *block, const char *var, LLUUID &uuid, S32 blocknum)
-{
- uuid = getLLSD(mInput, block, var, blocknum).asUUID();
-}
-
-//virtual
-void LLSDMessageSystem::getIPAddrFast(const char *block, const char *var, U32 &ip, S32 blocknum)
-{
- ip = ll_ipaddr_from_sd(getLLSD(mInput, block, var, blocknum));
-}
-
-//virtual
-void LLSDMessageSystem::getIPPortFast(const char *block, const char *var, U16 &port, S32 blocknum)
-{
- port = getLLSD(mInput, block, var, blocknum).asInteger();
-}
-
-//virtual
-void LLSDMessageSystem::getU64Fast(const char *block, const char *var, U64 &data, S32 blocknum)
-{
- data = ll_U64_from_sd(getLLSD(mInput, block, var, blocknum));
-}
-
-//virtual
-void LLSDMessageSystem::getStringFast(const char *block, const char *var, S32 buffer_size, char *buffer, S32 blocknum)
-{
- std::string data = getLLSD(mInput, block, var, blocknum).asString();
- S32 length = data.length();
- memset(buffer, 0, buffer_size);
- strncpy(buffer, data.c_str(), llmin(length, buffer_size)); /* Flawfinder: ignore */
-}
-
-//virtual
-void LLSDMessageSystem::newMessageFast(const char *name)
-{
- mMsg.newMessageFast(name);
-}
-
-//virtual
-void LLSDMessageSystem::nextBlockFast(const char *blockname)
-{
- mMsg.nextBlockFast(blockname);
-}
-
-//virtual
-void LLSDMessageSystem::addU32Fast(const char *varname, U32 u)
-{
- mMsg.addU32Fast(varname, u);
-}
-
-//virtual
-void LLSDMessageSystem::addUUIDFast( const char *varname, const LLUUID& uuid)
-{
- mMsg.addUUIDFast(varname, uuid);
-}
-
-//virtual
-S32 LLSDMessageSystem::sendReliable(const LLHost &host)
-{
- return mMsg.sendReliable(host);
-}
-
-//virtual
-U32 LLSDMessageSystem::getOurCircuitCode()
-{
- return mMsg.getOurCircuitCode();
-}
-
-void LLSDMessageSystem::useServices()
-{
- /*
- Having this function body here, causes the classes and globals in this
- file to be linked into any program that uses the llmessage library.
- */
-}
-
-class LLMessageService : public LLHTTPNode
-{
- virtual bool validate(const std::string& name, LLSD& context) const
- { return true; }
-
- virtual void post(LLHTTPNode::ResponsePtr response, const LLSD& context, const LLSD& input) const;
-};
-
-//virtual
-void LLMessageService::post(LLHTTPNode::ResponsePtr response, const LLSD& context, const LLSD& input) const
-{
- static LLSDMessageSystem msg(*gMessageSystem);
-
- std::string name = context["request"]["wildcard"]["message-name"];
-
- if (msg.handleMessage(name, input))
- {
- response->result(LLSD());
- }
- else
- {
- response->notFound();
- }
-}
-
-
-LLHTTPRegistration
- gHTTPRegistrationMessageService("/message/");
diff --git a/linden/indra/llmessage/llsdmessagesystem.h b/linden/indra/llmessage/llsdmessagesystem.h
deleted file mode 100644
index b114a49..0000000
--- a/linden/indra/llmessage/llsdmessagesystem.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * @file llsdmessagesystem.h
- * @brief LLSDMessageSystem class header file
- *
- * Copyright (c) 2001-2007, Linden Research, Inc.
- *
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlife.com/developers/opensource/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at http://secondlife.com/developers/opensource/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#ifndef LLSD_MESSAGE_SYSTEM_H
-#define LLSD_MESSAGE_SYSTEM_H
-
-#include "message.h"
-#include "llsd.h"
-
-class LLSDMessageSystem : public LLMessageSystem
-{
-public:
- LLSDMessageSystem(); // Testing only.
- LLSDMessageSystem(LLMessageSystem& delegateSystem);
- virtual ~LLSDMessageSystem();
-
- bool handleMessage(std::string name, const LLSD& message);
-
- void setInput(const LLSD& input); // Testing only.
-
- // Input methods, read from input LLSD.
- virtual void getU32Fast(const char *block, const char *var, U32 &data, S32 blocknum = 0);
- virtual void getUUIDFast(const char *block, const char *var, LLUUID &uuid, S32 blocknum = 0);
- virtual void getIPAddrFast(const char *block, const char *var, U32 &ip, S32 blocknum = 0);
- virtual void getIPPortFast(const char *block, const char *var, U16 &port, S32 blocknum = 0);
- virtual void getU64Fast(const char *block, const char *var, U64 &data, S32 blocknum = 0);
- virtual void getStringFast(const char *block, const char *var, S32 buffer_size, char *buffer, S32 blocknum = 0);
-
- // Output methods, routed to delegate message system.
- virtual void newMessageFast(const char *name);
- virtual void nextBlockFast(const char *blockname);
-
- virtual void addU32Fast(const char *varname, U32 u);
- virtual void addUUIDFast( const char *varname, const LLUUID& uuid);
-
- virtual S32 sendReliable(const LLHost &host);
-
- // Global Information messages, routed to delegate message system
- virtual U32 getOurCircuitCode();
-
- static void useServices();
- // call this from any application, when you set up the http tree
-
-private:
- LLMessageSystem& mMsg;
- LLSD mInput;
-};
-
-#endif // LLSD_MESSAGE_SYSTEM_H
diff --git a/linden/indra/llmessage/llsdrpcclient.cpp b/linden/indra/llmessage/llsdrpcclient.cpp
index a9ff722..64d4b98 100644
--- a/linden/indra/llmessage/llsdrpcclient.cpp
+++ b/linden/indra/llmessage/llsdrpcclient.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llsdrpcclient.h b/linden/indra/llmessage/llsdrpcclient.h
index 8de7f12..52439b9 100644
--- a/linden/indra/llmessage/llsdrpcclient.h
+++ b/linden/indra/llmessage/llsdrpcclient.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llsdrpcserver.cpp b/linden/indra/llmessage/llsdrpcserver.cpp
index 67eaf33..ed37181 100644
--- a/linden/indra/llmessage/llsdrpcserver.cpp
+++ b/linden/indra/llmessage/llsdrpcserver.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llsdrpcserver.h b/linden/indra/llmessage/llsdrpcserver.h
index 35d91ee..4007d6e 100644
--- a/linden/indra/llmessage/llsdrpcserver.h
+++ b/linden/indra/llmessage/llsdrpcserver.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llservice.cpp b/linden/indra/llmessage/llservice.cpp
index 0ffff95..052524d 100644
--- a/linden/indra/llmessage/llservice.cpp
+++ b/linden/indra/llmessage/llservice.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llservice.h b/linden/indra/llmessage/llservice.h
index 3866dbc..5744f75 100644
--- a/linden/indra/llmessage/llservice.h
+++ b/linden/indra/llmessage/llservice.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -90,7 +91,7 @@ namespace boost
}
inline void intrusive_ptr_release(LLServiceCreator* p)
{
- if(0 == --p->mReferenceCount)
+ if(p && 0 == --p->mReferenceCount)
{
delete p;
}
diff --git a/linden/indra/llmessage/llservicebuilder.cpp b/linden/indra/llmessage/llservicebuilder.cpp
new file mode 100644
index 0000000..86b7d9d
--- /dev/null
+++ b/linden/indra/llmessage/llservicebuilder.cpp
@@ -0,0 +1,135 @@
+/**
+* @file llservicebuilder.cpp
+* @brief Implementation of the LLServiceBuilder class.
+*
+* Copyright (c) 2007-2007, Linden Research, Inc.
+*
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+*/
+
+#include "llapp.h"
+#include "llfile.h"
+#include "llservicebuilder.h"
+#include "llsd.h"
+#include "llsdserialize.h"
+
+void LLServiceBuilder::loadServiceDefinitionsFromFile(
+ const std::string& service_filename)
+{
+ llifstream service_file(service_filename.c_str(), std::ios::binary);
+ if(service_file.is_open())
+ {
+ LLSD service_data;
+ LLSDSerialize::fromXML(service_data, service_file);
+ service_file.close();
+ // Load service
+ LLSD service_map = service_data["services"];
+ for(LLSD::array_iterator array_itr = service_map.beginArray();
+ array_itr != service_map.endArray();
+ ++array_itr)
+ {
+ LLSD service_llsd = (*array_itr)["service-builder"];
+ std::string service_name = (*array_itr)["name"].asString();
+ createServiceDefinition(service_name, service_llsd);
+ }
+ llinfos << "loaded config file: " << service_filename << llendl;
+ }
+ else
+ {
+ llwarns << "unable to find config file: " << service_filename << llendl;
+ }
+}
+
+void LLServiceBuilder::createServiceDefinition(
+ const std::string& service_name,
+ LLSD& service_llsd)
+{
+ if(service_llsd.isString())
+ {
+ mServiceMap[ service_name ] = service_llsd.asString();
+ }
+ else if(service_llsd.isMap())
+ {
+ for(LLSD::map_iterator map_itr = service_llsd.beginMap();
+ map_itr != service_llsd.endMap();
+ ++map_itr)
+ {
+ std::string compound_builder_name = service_name;
+ compound_builder_name.append("-");
+ compound_builder_name.append((*map_itr).first);
+ mServiceMap[ compound_builder_name ] = (*map_itr).second.asString();
+ }
+ }
+}
+
+std::string LLServiceBuilder::buildServiceURI(const std::string& service_name)
+{
+ std::ostringstream service_url;
+ // Find the service builder
+ if(mServiceMap.find(service_name) != mServiceMap.end())
+ {
+ // construct the service builder url
+ LLApp* app = LLApp::instance();
+ if(app)
+ {
+ LLSD base_url = app->getOption("services-base-url");
+ service_url << base_url.asString();
+ }
+ service_url << mServiceMap[service_name];
+ }
+ else
+ {
+ llwarns << "Cannot find service " << service_name << llendl;
+ }
+ return service_url.str();
+}
+
+std::string LLServiceBuilder::buildServiceURI(
+ const std::string& service_name,
+ const LLSD& option_map)
+{
+ std::string service_url = buildServiceURI(service_name);
+
+ // Find the Service Name
+ if(!service_url.empty() && option_map.isMap())
+ {
+ // Do brace replacements - NOT CURRENTLY RECURSIVE
+ for(LLSD::map_const_iterator option_itr = option_map.beginMap();
+ option_itr != option_map.endMap();
+ ++option_itr)
+ {
+ std::string variable_name = "{$";
+ variable_name.append((*option_itr).first);
+ variable_name.append("}");
+ std::string::size_type find_pos = service_url.find(variable_name);
+ if(find_pos != std::string::npos)
+ {
+ service_url.replace(
+ find_pos,
+ variable_name.length(),
+ (*option_itr).second.asString());
+ }
+ }
+ }
+
+ return service_url;
+}
diff --git a/linden/indra/llmessage/llservicebuilder.h b/linden/indra/llmessage/llservicebuilder.h
new file mode 100644
index 0000000..817ea0c
--- /dev/null
+++ b/linden/indra/llmessage/llservicebuilder.h
@@ -0,0 +1,93 @@
+/**
+* @file llservicebuilder.h
+* @brief Declaration of the LLServiceBuilder class.
+*
+* Copyright (c) 2007-2007, Linden Research, Inc.
+*
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+*/
+
+#ifndef LLSERVICEBUILDER_H
+#define LLSERVICEBUILDER_H
+
+#include
+#include
+#include "llerror.h"
+
+class LLSD;
+
+/**
+ * @class LLServiceBuilder
+ * @brief This class builds urls for us to use when making web service calls.
+ */
+
+class LLServiceBuilder
+{
+ LOG_CLASS(LLServiceBuilder);
+public:
+ LLServiceBuilder(void) {}
+ ~LLServiceBuilder(void) {}
+
+ /**
+ * @brief Initialize this object with the service definitions.
+ *
+ * @param service_filename The services definition files -- services.xml.
+ */
+ void loadServiceDefinitionsFromFile(const std::string& service_filename);
+
+ /**
+ * @brief Build a service url if the url needs no construction parameters.
+ *
+ * @param service_name The name of the service you want to call.
+ */
+ std::string buildServiceURI(const std::string& service_name);
+
+ /**
+ * @brief Build a service url if the url with construction parameters.
+ *
+ * The parameter substitution supports string substituition from RUSS:
+ * [[Recursive_URL_Substitution_Syntax]]
+ * @param service_name The name of the service you want to call.
+ * @param option_map The parameters in a map of name:value for the service.
+ */
+ std::string buildServiceURI(
+ const std::string& service_name,
+ const LLSD& option_map);
+
+public:
+ /**
+ * @brief Helper method which builds construction state for a service
+ *
+ * This method should probably be protected, but we need to test this
+ * method.
+ */
+ void createServiceDefinition(
+ const std::string& service_name,
+ LLSD& service_url);
+
+protected:
+ std::map mServiceMap;
+};
+
+
+
+#endif
diff --git a/linden/indra/llmessage/lltaskname.h b/linden/indra/llmessage/lltaskname.h
index e4e5c66..ac4fbd5 100644
--- a/linden/indra/llmessage/lltaskname.h
+++ b/linden/indra/llmessage/lltaskname.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llteleportflags.h b/linden/indra/llmessage/llteleportflags.h
index e52491a..25aac14 100644
--- a/linden/indra/llmessage/llteleportflags.h
+++ b/linden/indra/llmessage/llteleportflags.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/lltemplatemessagebuilder.cpp b/linden/indra/llmessage/lltemplatemessagebuilder.cpp
new file mode 100644
index 0000000..806f034
--- /dev/null
+++ b/linden/indra/llmessage/lltemplatemessagebuilder.cpp
@@ -0,0 +1,856 @@
+#include "linden_common.h"
+
+#include "lltemplatemessagebuilder.h"
+
+#include "llmessagetemplate.h"
+#include "llquaternion.h"
+#include "u64.h"
+#include "v3dmath.h"
+#include "v3math.h"
+#include "v4math.h"
+
+LLTemplateMessageBuilder::LLTemplateMessageBuilder(message_template_name_map_t& name_template_map) :
+ mCurrentSMessageData(NULL),
+ mCurrentSMessageTemplate(NULL),
+ mCurrentSDataBlock(NULL),
+ mCurrentSMessageName(NULL),
+ mCurrentSBlockName(NULL),
+ mbSBuilt(FALSE),
+ mbSClear(TRUE),
+ mCurrentSendTotal(0),
+ mMessageTemplates(name_template_map)
+{
+}
+
+//virtual
+LLTemplateMessageBuilder::~LLTemplateMessageBuilder()
+{
+ delete mCurrentSMessageData;
+ mCurrentSMessageData = NULL;
+}
+
+
+// virtual
+void LLTemplateMessageBuilder::newMessage(const char *name)
+{
+ mbSBuilt = FALSE;
+ mbSClear = FALSE;
+
+ mCurrentSendTotal = 0;
+
+ delete mCurrentSMessageData;
+ mCurrentSMessageData = NULL;
+
+ char *namep = (char *)name;
+
+ if (mMessageTemplates.count(namep) > 0)
+ {
+ mCurrentSMessageTemplate = mMessageTemplates[namep];
+ if (mCurrentSMessageData)
+ {
+ delete mCurrentSMessageData;
+ }
+ mCurrentSMessageData = new LLMsgData(namep);
+ mCurrentSMessageName = namep;
+ mCurrentSDataBlock = NULL;
+ mCurrentSBlockName = NULL;
+
+ // add at one of each block
+ LLMessageTemplate* msg_template = mMessageTemplates[namep];
+ for (LLMessageTemplate::message_block_map_t::iterator iter = msg_template->mMemberBlocks.begin();
+ iter != msg_template->mMemberBlocks.end(); iter++)
+ {
+ LLMessageBlock* ci = iter->second;
+ LLMsgBlkData *tblockp;
+ tblockp = new LLMsgBlkData(ci->mName, 0);
+ mCurrentSMessageData->addBlock(tblockp);
+ }
+ }
+ else
+ {
+ llerrs << "newMessage - Message " << name << " not registered" << llendl;
+ }
+}
+
+// virtual
+void LLTemplateMessageBuilder::clearMessage()
+{
+ mbSBuilt = FALSE;
+ mbSClear = TRUE;
+
+ mCurrentSendTotal = 0;
+
+ mCurrentSMessageTemplate = NULL;
+
+ delete mCurrentSMessageData;
+ mCurrentSMessageData = NULL;
+
+ mCurrentSMessageName = NULL;
+ mCurrentSDataBlock = NULL;
+ mCurrentSBlockName = NULL;
+}
+
+// virtual
+void LLTemplateMessageBuilder::nextBlock(const char* blockname)
+{
+ char *bnamep = (char *)blockname;
+
+ if (!mCurrentSMessageTemplate)
+ {
+ llerrs << "newMessage not called prior to setBlock" << llendl;
+ return;
+ }
+
+ // now, does this block exist?
+ LLMessageTemplate::message_block_map_t::iterator temp_iter = mCurrentSMessageTemplate->mMemberBlocks.find(bnamep);
+ if (temp_iter == mCurrentSMessageTemplate->mMemberBlocks.end())
+ {
+ llerrs << "LLTemplateMessageBuilder::nextBlock " << bnamep
+ << " not a block in " << mCurrentSMessageTemplate->mName << llendl;
+ return;
+ }
+
+ LLMessageBlock* template_data = temp_iter->second;
+
+ // ok, have we already set this block?
+ LLMsgBlkData* block_data = mCurrentSMessageData->mMemberBlocks[bnamep];
+ if (block_data->mBlockNumber == 0)
+ {
+ // nope! set this as the current block
+ block_data->mBlockNumber = 1;
+ mCurrentSDataBlock = block_data;
+ mCurrentSBlockName = bnamep;
+
+ // add placeholders for each of the variables
+ for (LLMessageBlock::message_variable_map_t::iterator iter = template_data->mMemberVariables.begin();
+ iter != template_data->mMemberVariables.end(); iter++)
+ {
+ LLMessageVariable& ci = *(iter->second);
+ mCurrentSDataBlock->addVariable(ci.getName(), ci.getType());
+ }
+ return;
+ }
+ else
+ {
+ // already have this block. . .
+ // are we supposed to have a new one?
+
+ // if the block is type MBT_SINGLE this is bad!
+ if (template_data->mType == MBT_SINGLE)
+ {
+ llerrs << "LLTemplateMessageBuilder::nextBlock called multiple times"
+ << " for " << bnamep << " but is type MBT_SINGLE" << llendl;
+ return;
+ }
+
+
+ // if the block is type MBT_MULTIPLE then we need a known number,
+ // make sure that we're not exceeding it
+ if ( (template_data->mType == MBT_MULTIPLE)
+ &&(mCurrentSDataBlock->mBlockNumber == template_data->mNumber))
+ {
+ llerrs << "LLTemplateMessageBuilder::nextBlock called "
+ << mCurrentSDataBlock->mBlockNumber << " times for " << bnamep
+ << " exceeding " << template_data->mNumber
+ << " specified in type MBT_MULTIPLE." << llendl;
+ return;
+ }
+
+ // ok, we can make a new one
+ // modify the name to avoid name collision by adding number to end
+ S32 count = block_data->mBlockNumber;
+
+ // incrememt base name's count
+ block_data->mBlockNumber++;
+
+ if (block_data->mBlockNumber > MAX_BLOCKS)
+ {
+ llerrs << "Trying to pack too many blocks into MBT_VARIABLE type "
+ << "(limited to " << MAX_BLOCKS << ")" << llendl;
+ }
+
+ // create new name
+ // Nota Bene: if things are working correctly,
+ // mCurrentMessageData->mMemberBlocks[blockname]->mBlockNumber ==
+ // mCurrentDataBlock->mBlockNumber + 1
+
+ char *nbnamep = bnamep + count;
+
+ mCurrentSDataBlock = new LLMsgBlkData(bnamep, count);
+ mCurrentSDataBlock->mName = nbnamep;
+ mCurrentSMessageData->mMemberBlocks[nbnamep] = mCurrentSDataBlock;
+
+ // add placeholders for each of the variables
+ for (LLMessageBlock::message_variable_map_t::iterator
+ iter = template_data->mMemberVariables.begin(),
+ end = template_data->mMemberVariables.end();
+ iter != end; iter++)
+ {
+ LLMessageVariable& ci = *(iter->second);
+ mCurrentSDataBlock->addVariable(ci.getName(), ci.getType());
+ }
+ return;
+ }
+}
+
+// TODO: Remove this horror...
+BOOL LLTemplateMessageBuilder::removeLastBlock()
+{
+ if (mCurrentSBlockName)
+ {
+ if ( (mCurrentSMessageData)
+ &&(mCurrentSMessageTemplate))
+ {
+ if (mCurrentSMessageData->mMemberBlocks[mCurrentSBlockName]->mBlockNumber >= 1)
+ {
+ // At least one block for the current block name.
+
+ // Store the current block name for future reference.
+ char *block_name = mCurrentSBlockName;
+
+ // Decrement the sent total by the size of the
+ // data in the message block that we're currently building.
+
+ LLMessageBlock* template_data = mCurrentSMessageTemplate->mMemberBlocks[mCurrentSBlockName];
+
+ for (LLMessageBlock::message_variable_map_t::iterator iter = template_data->mMemberVariables.begin();
+ iter != template_data->mMemberVariables.end(); iter++)
+ {
+ LLMessageVariable& ci = *(iter->second);
+ mCurrentSendTotal -= ci.getSize();
+ }
+
+
+ // Now we want to find the block that we're blowing away.
+
+ // Get the number of blocks.
+ LLMsgBlkData* block_data = mCurrentSMessageData->mMemberBlocks[block_name];
+ S32 num_blocks = block_data->mBlockNumber;
+
+ // Use the same (suspect?) algorithm that's used to generate
+ // the names in the nextBlock method to find it.
+ char *block_getting_whacked = block_name + num_blocks - 1;
+ LLMsgBlkData* whacked_data = mCurrentSMessageData->mMemberBlocks[block_getting_whacked];
+ delete whacked_data;
+ mCurrentSMessageData->mMemberBlocks.erase(block_getting_whacked);
+
+ if (num_blocks <= 1)
+ {
+ // we just blew away the last one, so return FALSE
+ llwarns << "not blowing away the only block of message "
+ << mCurrentSMessageName
+ << ". Block: " << block_name
+ << ". Number: " << num_blocks
+ << llendl;
+ return FALSE;
+ }
+ else
+ {
+ // Decrement the counter.
+ block_data->mBlockNumber--;
+ return TRUE;
+ }
+ }
+ }
+ }
+ return FALSE;
+}
+
+// add data to variable in current block
+void LLTemplateMessageBuilder::addData(const char *varname, const void *data, EMsgVariableType type, S32 size)
+{
+ char *vnamep = (char *)varname;
+
+ // do we have a current message?
+ if (!mCurrentSMessageTemplate)
+ {
+ llerrs << "newMessage not called prior to addData" << llendl;
+ return;
+ }
+
+ // do we have a current block?
+ if (!mCurrentSDataBlock)
+ {
+ llerrs << "setBlock not called prior to addData" << llendl;
+ return;
+ }
+
+ // kewl, add the data if it exists
+ LLMessageVariable* var_data = mCurrentSMessageTemplate->mMemberBlocks[mCurrentSBlockName]->mMemberVariables[vnamep];
+ if (!var_data || !var_data->getName())
+ {
+ llerrs << vnamep << " not a variable in block " << mCurrentSBlockName << " of " << mCurrentSMessageTemplate->mName << llendl;
+ return;
+ }
+
+ // ok, it seems ok. . . are we the correct size?
+ if (var_data->getType() == MVT_VARIABLE)
+ {
+ // Variable 1 can only store 255 bytes, make sure our data is smaller
+ if ((var_data->getSize() == 1) &&
+ (size > 255))
+ {
+ llwarns << "Field " << varname << " is a Variable 1 but program "
+ << "attempted to stuff more than 255 bytes in "
+ << "(" << size << "). Clamping size and truncating data." << llendl;
+ size = 255;
+ char *truncate = (char *)data;
+ truncate[255] = 0;
+ }
+
+ // no correct size for MVT_VARIABLE, instead we need to tell how many bytes the size will be encoded as
+ mCurrentSDataBlock->addData(vnamep, data, size, type, var_data->getSize());
+ mCurrentSendTotal += size;
+ }
+ else
+ {
+ if (size != var_data->getSize())
+ {
+ llerrs << varname << " is type MVT_FIXED but request size " << size << " doesn't match template size "
+ << var_data->getSize() << llendl;
+ return;
+ }
+ // alright, smash it in
+ mCurrentSDataBlock->addData(vnamep, data, size, type);
+ mCurrentSendTotal += size;
+ }
+}
+
+// add data to variable in current block - fails if variable isn't MVT_FIXED
+void LLTemplateMessageBuilder::addData(const char *varname, const void *data, EMsgVariableType type)
+{
+ char *vnamep = (char *)varname;
+
+ // do we have a current message?
+ if (!mCurrentSMessageTemplate)
+ {
+ llerrs << "newMessage not called prior to addData" << llendl;
+ return;
+ }
+
+ // do we have a current block?
+ if (!mCurrentSDataBlock)
+ {
+ llerrs << "setBlock not called prior to addData" << llendl;
+ return;
+ }
+
+ // kewl, add the data if it exists
+ LLMessageVariable* var_data = mCurrentSMessageTemplate->mMemberBlocks[mCurrentSBlockName]->mMemberVariables[vnamep];
+ if (!var_data->getName())
+ {
+ llerrs << vnamep << " not a variable in block " << mCurrentSBlockName << " of " << mCurrentSMessageTemplate->mName << llendl;
+ return;
+ }
+
+ // ok, it seems ok. . . are we MVT_VARIABLE?
+ if (var_data->getType() == MVT_VARIABLE)
+ {
+ // nope
+ llerrs << vnamep << " is type MVT_VARIABLE. Call using addData(name, data, size)" << llendl;
+ return;
+ }
+ else
+ {
+ mCurrentSDataBlock->addData(vnamep, data, var_data->getSize(), type);
+ mCurrentSendTotal += var_data->getSize();
+ }
+}
+
+void LLTemplateMessageBuilder::addBinaryData(const char *varname,
+ const void *data, S32 size)
+{
+ addData(varname, data, MVT_FIXED, size);
+}
+
+void LLTemplateMessageBuilder::addS8(const char *varname, S8 s)
+{
+ addData(varname, &s, MVT_S8, sizeof(s));
+}
+
+void LLTemplateMessageBuilder::addU8(const char *varname, U8 u)
+{
+ addData(varname, &u, MVT_U8, sizeof(u));
+}
+
+void LLTemplateMessageBuilder::addS16(const char *varname, S16 i)
+{
+ addData(varname, &i, MVT_S16, sizeof(i));
+}
+
+void LLTemplateMessageBuilder::addU16(const char *varname, U16 i)
+{
+ addData(varname, &i, MVT_U16, sizeof(i));
+}
+
+void LLTemplateMessageBuilder::addF32(const char *varname, F32 f)
+{
+ addData(varname, &f, MVT_F32, sizeof(f));
+}
+
+void LLTemplateMessageBuilder::addS32(const char *varname, S32 s)
+{
+ addData(varname, &s, MVT_S32, sizeof(s));
+}
+
+void LLTemplateMessageBuilder::addU32(const char *varname, U32 u)
+{
+ addData(varname, &u, MVT_U32, sizeof(u));
+}
+
+void LLTemplateMessageBuilder::addU64(const char *varname, U64 lu)
+{
+ addData(varname, &lu, MVT_U64, sizeof(lu));
+}
+
+void LLTemplateMessageBuilder::addF64(const char *varname, F64 d)
+{
+ addData(varname, &d, MVT_F64, sizeof(d));
+}
+
+void LLTemplateMessageBuilder::addIPAddr(const char *varname, U32 u)
+{
+ addData(varname, &u, MVT_IP_ADDR, sizeof(u));
+}
+
+void LLTemplateMessageBuilder::addIPPort(const char *varname, U16 u)
+{
+ u = htons(u);
+ addData(varname, &u, MVT_IP_PORT, sizeof(u));
+}
+
+void LLTemplateMessageBuilder::addBOOL(const char* varname, BOOL b)
+{
+ // Can't just cast a BOOL (actually a U32) to a U8.
+ // In some cases the low order bits will be zero.
+ U8 temp = (b != 0);
+ addData(varname, &temp, MVT_BOOL, sizeof(temp));
+}
+
+void LLTemplateMessageBuilder::addString(const char* varname, const char* s)
+{
+ if (s)
+ addData( varname, (void *)s, MVT_VARIABLE, (S32)strlen(s) + 1); /* Flawfinder: ignore */
+ else
+ addData( varname, NULL, MVT_VARIABLE, 0);
+}
+
+void LLTemplateMessageBuilder::addString(const char* varname, const std::string& s)
+{
+ if (s.size())
+ addData( varname, (void *)s.c_str(), MVT_VARIABLE, (S32)(s.size()) + 1);
+ else
+ addData( varname, NULL, MVT_VARIABLE, 0);
+}
+
+void LLTemplateMessageBuilder::addVector3(const char *varname, const LLVector3& vec)
+{
+ addData(varname, vec.mV, MVT_LLVector3, sizeof(vec.mV));
+}
+
+void LLTemplateMessageBuilder::addVector4(const char *varname, const LLVector4& vec)
+{
+ addData(varname, vec.mV, MVT_LLVector4, sizeof(vec.mV));
+}
+
+void LLTemplateMessageBuilder::addVector3d(const char *varname, const LLVector3d& vec)
+{
+ addData(varname, vec.mdV, MVT_LLVector3d, sizeof(vec.mdV));
+}
+
+void LLTemplateMessageBuilder::addQuat(const char *varname, const LLQuaternion& quat)
+{
+ addData(varname, quat.packToVector3().mV, MVT_LLQuaternion, sizeof(LLVector3));
+}
+
+void LLTemplateMessageBuilder::addUUID(const char *varname, const LLUUID& uuid)
+{
+ addData(varname, uuid.mData, MVT_LLUUID, sizeof(uuid.mData));
+}
+
+static S32 zero_code(U8 **data, U32 *data_size)
+{
+ // Encoded send buffer needs to be slightly larger since the zero
+ // coding can potentially increase the size of the send data.
+ static U8 encodedSendBuffer[2 * MAX_BUFFER_SIZE];
+
+ S32 count = *data_size;
+
+ S32 net_gain = 0;
+ U8 num_zeroes = 0;
+
+ U8 *inptr = (U8 *)*data;
+ U8 *outptr = (U8 *)encodedSendBuffer;
+
+// skip the packet id field
+
+ for (U32 i=0;i256 zeroes)
+
+ while (count--)
+ {
+ if (!(*inptr)) // in a zero count
+ {
+ if (num_zeroes)
+ {
+ if (++num_zeroes > 254)
+ {
+ *outptr++ = num_zeroes;
+ num_zeroes = 0;
+ }
+ net_gain--; // subseqent zeroes save one
+ }
+ else
+ {
+ *outptr++ = 0;
+ net_gain++; // starting a zero count adds one
+ num_zeroes = 1;
+ }
+ inptr++;
+ }
+ else
+ {
+ if (num_zeroes)
+ {
+ *outptr++ = num_zeroes;
+ num_zeroes = 0;
+ }
+ *outptr++ = *inptr++;
+ }
+ }
+
+ if (num_zeroes)
+ {
+ *outptr++ = num_zeroes;
+ }
+
+ if (net_gain < 0)
+ {
+ // TODO: babbage: reinstate stat collecting...
+ //mCompressedPacketsOut++;
+ //mUncompressedBytesOut += *data_size;
+
+ *data = encodedSendBuffer;
+ *data_size += net_gain;
+ encodedSendBuffer[0] |= LL_ZERO_CODE_FLAG; // set the head bit to indicate zero coding
+
+ //mCompressedBytesOut += *data_size;
+
+ }
+ //mTotalBytesOut += *data_size;
+
+ return(net_gain);
+}
+
+void LLTemplateMessageBuilder::compressMessage(U8*& buf_ptr, U32& buffer_length)
+{
+ if(ME_ZEROCODED == mCurrentSMessageTemplate->getEncoding())
+ {
+ zero_code(&buf_ptr, &buffer_length);
+ }
+}
+
+BOOL LLTemplateMessageBuilder::isMessageFull(const char* blockname) const
+{
+ if(mCurrentSendTotal > MTUBYTES)
+ {
+ return TRUE;
+ }
+ if(!blockname)
+ {
+ return FALSE;
+ }
+ char* bnamep = (char*)blockname;
+ S32 max;
+
+ LLMessageBlock* template_data = mCurrentSMessageTemplate->mMemberBlocks[bnamep];
+
+ switch(template_data->mType)
+ {
+ case MBT_SINGLE:
+ max = 1;
+ break;
+ case MBT_MULTIPLE:
+ max = template_data->mNumber;
+ break;
+ case MBT_VARIABLE:
+ default:
+ max = MAX_BLOCKS;
+ break;
+ }
+ if(mCurrentSMessageData->mMemberBlocks[bnamep]->mBlockNumber >= max)
+ {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+
+// make sure that all the desired data is in place and then copy the data into MAX_BUFFER_SIZEd buffer
+U32 LLTemplateMessageBuilder::buildMessage(U8* buffer, U32 buffer_size)
+{
+ // basic algorithm is to loop through the various pieces, building
+ // size and offset info if we encounter a -1 for mSize at any
+ // point that variable wasn't given data
+
+ // do we have a current message?
+ if (!mCurrentSMessageTemplate)
+ {
+ llerrs << "newMessage not called prior to buildMessage" << llendl;
+ return 0;
+ }
+
+ // zero out some useful values
+
+ // leave room for circuit counter
+ U32 result = LL_PACKET_ID_SIZE;
+
+ // encode message number and adjust total_offset
+ if (mCurrentSMessageTemplate->mFrequency == MFT_HIGH)
+ {
+// old, endian-dependant way
+// memcpy(&buffer[result], &mCurrentMessageTemplate->mMessageNumber, sizeof(U8));
+
+// new, independant way
+ buffer[result] = (U8)mCurrentSMessageTemplate->mMessageNumber;
+ result += sizeof(U8);
+ }
+ else if (mCurrentSMessageTemplate->mFrequency == MFT_MEDIUM)
+ {
+ U8 temp = 255;
+ memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/
+ result += sizeof(U8);
+
+ // mask off unsightly bits
+ temp = mCurrentSMessageTemplate->mMessageNumber & 255;
+ memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/
+ result += sizeof(U8);
+ }
+ else if (mCurrentSMessageTemplate->mFrequency == MFT_LOW)
+ {
+ U8 temp = 255;
+ U16 message_num;
+ memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/
+ result += sizeof(U8);
+ memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/
+ result += sizeof(U8);
+
+ // mask off unsightly bits
+ message_num = mCurrentSMessageTemplate->mMessageNumber & 0xFFFF;
+
+ // convert to network byte order
+ message_num = htons(message_num);
+ memcpy(&buffer[result], &message_num, sizeof(U16)); /*Flawfinder: ignore*/
+ result += sizeof(U16);
+ }
+ else
+ {
+ llerrs << "unexpected message frequency in buildMessage" << llendl;
+ return 0;
+ }
+
+ // counting variables used to encode multiple block info
+ S32 block_count = 0;
+ U8 temp_block_number;
+
+ // loop through msg blocks to loop through variables,
+ // totalling up size data and copying into buffer
+ for (LLMsgData::msg_blk_data_map_t::iterator
+ iter = mCurrentSMessageData->mMemberBlocks.begin(),
+ end = mCurrentSMessageData->mMemberBlocks.end();
+ iter != end; iter++)
+ {
+ LLMsgBlkData* mbci = iter->second;
+ // do we need to encode a block code?
+ if (block_count == 0)
+ {
+ block_count = mbci->mBlockNumber;
+
+ LLMessageBlock* template_data =
+ mCurrentSMessageTemplate->mMemberBlocks[mbci->mName];
+
+ // ok, if this is the first block of a repeating pack, set
+ // block_count and, if it's type MBT_VARIABLE encode a byte
+ // for how many there are
+ if (template_data->mType == MBT_VARIABLE)
+ {
+ // remember that mBlockNumber is a S32
+ temp_block_number = (U8)mbci->mBlockNumber;
+ if ((S32)(result + sizeof(U8)) < MAX_BUFFER_SIZE)
+ {
+ memcpy(&buffer[result], &temp_block_number, sizeof(U8));
+ result += sizeof(U8);
+ }
+ else
+ {
+ // Just reporting error is likely not enough. Need
+ // to check how to abort or error out gracefully
+ // from this function. XXXTBD
+ llerrs << "buildMessage failed. Message excedding "
+ << "sendBuffersize." << llendl;
+ }
+ }
+ else if (template_data->mType == MBT_MULTIPLE)
+ {
+ if (block_count != template_data->mNumber)
+ {
+ // nope! need to fill it in all the way!
+ llerrs << "Block " << mbci->mName
+ << " is type MBT_MULTIPLE but only has data for "
+ << block_count << " out of its "
+ << template_data->mNumber << " blocks" << llendl;
+ }
+ }
+ }
+
+ // counting down multiple blocks
+ block_count--;
+
+ // now loop through the variables
+ for (LLMsgBlkData::msg_var_data_map_t::iterator iter = mbci->mMemberVarData.begin();
+ iter != mbci->mMemberVarData.end(); iter++)
+ {
+ LLMsgVarData& mvci = *iter;
+ if (mvci.getSize() == -1)
+ {
+ // oops, this variable wasn't ever set!
+ llerrs << "The variable " << mvci.getName() << " in block "
+ << mbci->mName << " of message "
+ << mCurrentSMessageData->mName
+ << " wasn't set prior to buildMessage call" << llendl;
+ }
+ else
+ {
+ S32 data_size = mvci.getDataSize();
+ if(data_size > 0)
+ {
+ // The type is MVT_VARIABLE, which means that we
+ // need to encode a size argument. Otherwise,
+ // there is no need.
+ S32 size = mvci.getSize();
+ U8 sizeb;
+ U16 sizeh;
+ switch(data_size)
+ {
+ case 1:
+ sizeb = size;
+ htonmemcpy(&buffer[result], &sizeb, MVT_U8, 1);
+ break;
+ case 2:
+ sizeh = size;
+ htonmemcpy(&buffer[result], &sizeh, MVT_U16, 2);
+ break;
+ case 4:
+ htonmemcpy(&buffer[result], &size, MVT_S32, 4);
+ break;
+ default:
+ llerrs << "Attempting to build variable field with unknown size of " << size << llendl;
+ break;
+ }
+ result += mvci.getDataSize();
+ }
+
+ // if there is any data to pack, pack it
+ if((mvci.getData() != NULL) && mvci.getSize())
+ {
+ if(result + mvci.getSize() < buffer_size)
+ {
+ memcpy(
+ &buffer[result],
+ mvci.getData(),
+ mvci.getSize());
+ result += mvci.getSize();
+ }
+ else
+ {
+ // Just reporting error is likely not
+ // enough. Need to check how to abort or error
+ // out gracefully from this function. XXXTBD
+ llerrs << "LLMessageSystem::buildMessage failed. "
+ << "Attempted to pack "
+ << result + mvci.getSize()
+ << " bytes into a buffer with size "
+ << buffer_size << "." << llendl
+ }
+ }
+ }
+ }
+ }
+ mbSBuilt = TRUE;
+
+ return result;
+}
+
+void LLTemplateMessageBuilder::copyFromMessageData(const LLMsgData& data)
+{
+ // copy the blocks
+ // counting variables used to encode multiple block info
+ S32 block_count = 0;
+ char *block_name = NULL;
+
+ // loop through msg blocks to loop through variables, totalling up size
+ // data and filling the new (send) message
+ LLMsgData::msg_blk_data_map_t::const_iterator iter =
+ data.mMemberBlocks.begin();
+ LLMsgData::msg_blk_data_map_t::const_iterator end =
+ data.mMemberBlocks.end();
+ for(; iter != end; ++iter)
+ {
+ const LLMsgBlkData* mbci = iter->second;
+ if(!mbci) continue;
+
+ // do we need to encode a block code?
+ if (block_count == 0)
+ {
+ block_count = mbci->mBlockNumber;
+ block_name = (char *)mbci->mName;
+ }
+
+ // counting down mutliple blocks
+ block_count--;
+
+ nextBlock(block_name);
+
+ // now loop through the variables
+ LLMsgBlkData::msg_var_data_map_t::const_iterator dit = mbci->mMemberVarData.begin();
+ LLMsgBlkData::msg_var_data_map_t::const_iterator dend = mbci->mMemberVarData.end();
+
+ for(; dit != dend; ++dit)
+ {
+ const LLMsgVarData& mvci = *dit;
+ addData(mvci.getName(), mvci.getData(), mvci.getType(), mvci.getSize());
+ }
+ }
+}
+
+//virtual
+void LLTemplateMessageBuilder::copyFromLLSD(const LLSD&)
+{
+ // TODO
+}
+
+//virtual
+void LLTemplateMessageBuilder::setBuilt(BOOL b) { mbSBuilt = b; }
+
+//virtual
+BOOL LLTemplateMessageBuilder::isBuilt() const {return mbSBuilt;}
+
+//virtual
+BOOL LLTemplateMessageBuilder::isClear() const {return mbSClear;}
+
+//virtual
+S32 LLTemplateMessageBuilder::getMessageSize() {return mCurrentSendTotal;}
+
+//virtual
+const char* LLTemplateMessageBuilder::getMessageName() const
+{
+ return mCurrentSMessageName;
+}
diff --git a/linden/indra/llmessage/lltemplatemessagebuilder.h b/linden/indra/llmessage/lltemplatemessagebuilder.h
new file mode 100644
index 0000000..ae53328
--- /dev/null
+++ b/linden/indra/llmessage/lltemplatemessagebuilder.h
@@ -0,0 +1,88 @@
+#ifndef LL_LLTEMPLATEMESSAGEBUILDER_H
+#define LL_LLTEMPLATEMESSAGEBUILDER_H
+
+#include
+
+#include "llmessagebuilder.h"
+#include "llmsgvariabletype.h"
+
+class LLMsgData;
+class LLMessageTemplate;
+class LLMsgBlkData;
+class LLMessageTemplate;
+
+class LLTemplateMessageBuilder : public LLMessageBuilder
+{
+public:
+
+ typedef std::map message_template_name_map_t;
+
+ LLTemplateMessageBuilder(message_template_name_map_t&);
+ virtual ~LLTemplateMessageBuilder();
+
+ virtual void newMessage(const char *name);
+
+ virtual void nextBlock(const char* blockname);
+ virtual BOOL removeLastBlock(); // TODO: babbage: remove this horror...
+
+ /** All add* methods expect pointers to canonical varname strings. */
+ virtual void addBinaryData(const char *varname, const void *data,
+ S32 size);
+ virtual void addBOOL(const char* varname, BOOL b);
+ virtual void addS8(const char *varname, S8 s);
+ virtual void addU8(const char *varname, U8 u);
+ virtual void addS16(const char *varname, S16 i);
+ virtual void addU16(const char *varname, U16 i);
+ virtual void addF32(const char *varname, F32 f);
+ virtual void addS32(const char *varname, S32 s);
+ virtual void addU32(const char *varname, U32 u);
+ virtual void addU64(const char *varname, U64 lu);
+ virtual void addF64(const char *varname, F64 d);
+ virtual void addVector3(const char *varname, const LLVector3& vec);
+ virtual void addVector4(const char *varname, const LLVector4& vec);
+ virtual void addVector3d(const char *varname, const LLVector3d& vec);
+ virtual void addQuat(const char *varname, const LLQuaternion& quat);
+ virtual void addUUID(const char *varname, const LLUUID& uuid);
+ virtual void addIPAddr(const char *varname, const U32 ip);
+ virtual void addIPPort(const char *varname, const U16 port);
+ virtual void addString(const char* varname, const char* s);
+ virtual void addString(const char* varname, const std::string& s);
+
+ virtual BOOL isMessageFull(const char* blockname) const;
+ virtual void compressMessage(U8*& buf_ptr, U32& buffer_length);
+
+ virtual BOOL isBuilt() const;
+ virtual BOOL isClear() const;
+ virtual U32 buildMessage(U8* buffer, U32 buffer_size);
+ /**< Return built message size */
+
+ virtual void clearMessage();
+
+ // TODO: babbage: remove this horror.
+ virtual void setBuilt(BOOL b);
+
+ virtual S32 getMessageSize();
+ virtual const char* getMessageName() const;
+
+ virtual void copyFromMessageData(const LLMsgData& data);
+ virtual void copyFromLLSD(const LLSD&);
+
+private:
+ void addData(const char *varname, const void *data,
+ EMsgVariableType type, S32 size);
+
+ void addData(const char *varname, const void *data,
+ EMsgVariableType type);
+
+ LLMsgData* mCurrentSMessageData;
+ LLMessageTemplate* mCurrentSMessageTemplate;
+ LLMsgBlkData* mCurrentSDataBlock;
+ char* mCurrentSMessageName;
+ char* mCurrentSBlockName;
+ BOOL mbSBuilt;
+ BOOL mbSClear;
+ S32 mCurrentSendTotal;
+ message_template_name_map_t& mMessageTemplates;
+};
+
+#endif // LL_LLTEMPLATEMESSAGEBUILDER_H
diff --git a/linden/indra/llmessage/lltemplatemessagereader.cpp b/linden/indra/llmessage/lltemplatemessagereader.cpp
new file mode 100644
index 0000000..892efb8
--- /dev/null
+++ b/linden/indra/llmessage/lltemplatemessagereader.cpp
@@ -0,0 +1,750 @@
+#include "lltemplatemessagereader.h"
+
+#include "llfasttimer.h"
+#include "llmessagebuilder.h"
+#include "llmessagetemplate.h"
+#include "llquaternion.h"
+#include "message.h"
+#include "u64.h"
+#include "v3dmath.h"
+#include "v3math.h"
+#include "v4math.h"
+
+LLTemplateMessageReader::LLTemplateMessageReader(message_template_number_map_t&
+ number_template_map) :
+ mReceiveSize(0),
+ mCurrentRMessageTemplate(NULL),
+ mCurrentRMessageData(NULL),
+ mMessageNumbers(number_template_map)
+{
+}
+
+//virtual
+LLTemplateMessageReader::~LLTemplateMessageReader()
+{
+ delete mCurrentRMessageData;
+ mCurrentRMessageData = NULL;
+}
+
+//virtual
+void LLTemplateMessageReader::clearMessage()
+{
+ mReceiveSize = -1;
+ mCurrentRMessageTemplate = NULL;
+ delete mCurrentRMessageData;
+ mCurrentRMessageData = NULL;
+}
+
+void LLTemplateMessageReader::getData(const char *blockname, const char *varname, void *datap, S32 size, S32 blocknum, S32 max_size)
+{
+ // is there a message ready to go?
+ if (mReceiveSize == -1)
+ {
+ llerrs << "No message waiting for decode 2!" << llendl;
+ return;
+ }
+
+ if (!mCurrentRMessageData)
+ {
+ llerrs << "Invalid mCurrentMessageData in getData!" << llendl;
+ return;
+ }
+
+ char *bnamep = (char *)blockname + blocknum; // this works because it's just a hash. The bnamep is never derefference
+ char *vnamep = (char *)varname;
+
+ LLMsgData::msg_blk_data_map_t::iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep);
+
+ if (iter == mCurrentRMessageData->mMemberBlocks.end())
+ {
+ llerrs << "Block " << blockname << " #" << blocknum
+ << " not in message " << mCurrentRMessageData->mName << llendl;
+ return;
+ }
+
+ LLMsgBlkData *msg_block_data = iter->second;
+ LLMsgVarData& vardata = msg_block_data->mMemberVarData[vnamep];
+
+ if (!vardata.getName())
+ {
+ llerrs << "Variable "<< vnamep << " not in message "
+ << mCurrentRMessageData->mName<< " block " << bnamep << llendl;
+ return;
+ }
+
+ if (size && size != vardata.getSize())
+ {
+ llerrs << "Msg " << mCurrentRMessageData->mName
+ << " variable " << vnamep
+ << " is size " << vardata.getSize()
+ << " but copying into buffer of size " << size
+ << llendl;
+ return;
+ }
+
+
+ const S32 vardata_size = vardata.getSize();
+ if( max_size >= vardata_size )
+ {
+ switch( vardata_size )
+ {
+ case 1:
+ *((U8*)datap) = *((U8*)vardata.getData());
+ break;
+ case 2:
+ *((U16*)datap) = *((U16*)vardata.getData());
+ break;
+ case 4:
+ *((U32*)datap) = *((U32*)vardata.getData());
+ break;
+ case 8:
+ ((U32*)datap)[0] = ((U32*)vardata.getData())[0];
+ ((U32*)datap)[1] = ((U32*)vardata.getData())[1];
+ break;
+ default:
+ memcpy(datap, vardata.getData(), vardata_size);
+ break;
+ }
+ }
+ else
+ {
+ llwarns << "Msg " << mCurrentRMessageData->mName
+ << " variable " << vnamep
+ << " is size " << vardata.getSize()
+ << " but truncated to max size of " << max_size
+ << llendl;
+
+ memcpy(datap, vardata.getData(), max_size);
+ }
+}
+
+S32 LLTemplateMessageReader::getNumberOfBlocks(const char *blockname)
+{
+ // is there a message ready to go?
+ if (mReceiveSize == -1)
+ {
+ llerrs << "No message waiting for decode 3!" << llendl;
+ return -1;
+ }
+
+ if (!mCurrentRMessageData)
+ {
+ llerrs << "Invalid mCurrentRMessageData in getData!" << llendl;
+ return -1;
+ }
+
+ char *bnamep = (char *)blockname;
+
+ LLMsgData::msg_blk_data_map_t::iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep);
+
+ if (iter == mCurrentRMessageData->mMemberBlocks.end())
+ {
+// sprintf(errmsg, "Block %s not in message %s", bnamep, mCurrentRMessageData->mName);
+// llerrs << errmsg << llendl;
+// return -1;
+ return 0;
+ }
+
+ return (iter->second)->mBlockNumber;
+}
+
+S32 LLTemplateMessageReader::getSize(const char *blockname, const char *varname)
+{
+ // is there a message ready to go?
+ if (mReceiveSize == -1)
+ {
+ llerrs << "No message waiting for decode 4!" << llendl;
+ return -1;
+ }
+
+ if (!mCurrentRMessageData)
+ {
+ llerrs << "Invalid mCurrentRMessageData in getData!" << llendl;
+ return -1;
+ }
+
+ char *bnamep = (char *)blockname;
+
+ LLMsgData::msg_blk_data_map_t::iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep);
+
+ if (iter == mCurrentRMessageData->mMemberBlocks.end())
+ {
+ llerrs << "Block " << bnamep << " not in message "
+ << mCurrentRMessageData->mName << llendl;
+ return -1;
+ }
+
+ char *vnamep = (char *)varname;
+
+ LLMsgBlkData* msg_data = iter->second;
+ LLMsgVarData& vardata = msg_data->mMemberVarData[vnamep];
+
+ if (!vardata.getName())
+ {
+ llerrs << "Variable " << varname << " not in message "
+ << mCurrentRMessageData->mName << " block " << bnamep << llendl;
+ return -1;
+ }
+
+ if (mCurrentRMessageTemplate->mMemberBlocks[bnamep]->mType != MBT_SINGLE)
+ {
+ llerrs << "Block " << bnamep << " isn't type MBT_SINGLE,"
+ " use getSize with blocknum argument!" << llendl;
+ return -1;
+ }
+
+ return vardata.getSize();
+}
+
+S32 LLTemplateMessageReader::getSize(const char *blockname, S32 blocknum, const char *varname)
+{
+ // is there a message ready to go?
+ if (mReceiveSize == -1)
+ {
+ llerrs << "No message waiting for decode 5!" << llendl;
+ return -1;
+ }
+
+ if (!mCurrentRMessageData)
+ {
+ llerrs << "Invalid mCurrentRMessageData in getData!" << llendl;
+ return -1;
+ }
+
+ char *bnamep = (char *)blockname + blocknum;
+ char *vnamep = (char *)varname;
+
+ LLMsgData::msg_blk_data_map_t::iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep);
+
+ if (iter == mCurrentRMessageData->mMemberBlocks.end())
+ {
+ llerrs << "Block " << bnamep << " not in message "
+ << mCurrentRMessageData->mName << llendl;
+ return -1;
+ }
+
+ LLMsgBlkData* msg_data = iter->second;
+ LLMsgVarData& vardata = msg_data->mMemberVarData[vnamep];
+
+ if (!vardata.getName())
+ {
+ llerrs << "Variable " << vnamep << " not in message "
+ << mCurrentRMessageData->mName << " block " << bnamep << llendl;
+ return -1;
+ }
+
+ return vardata.getSize();
+}
+
+void LLTemplateMessageReader::getBinaryData(const char *blockname,
+ const char *varname, void *datap,
+ S32 size, S32 blocknum,
+ S32 max_size)
+{
+ getData(blockname, varname, datap, size, blocknum, max_size);
+}
+
+void LLTemplateMessageReader::getS8(const char *block, const char *var,
+ S8 &u, S32 blocknum)
+{
+ getData(block, var, &u, sizeof(S8), blocknum);
+}
+
+void LLTemplateMessageReader::getU8(const char *block, const char *var,
+ U8 &u, S32 blocknum)
+{
+ getData(block, var, &u, sizeof(U8), blocknum);
+}
+
+void LLTemplateMessageReader::getBOOL(const char *block, const char *var,
+ BOOL &b, S32 blocknum )
+{
+ U8 value;
+ getData(block, var, &value, sizeof(U8), blocknum);
+ b = (BOOL) value;
+}
+
+void LLTemplateMessageReader::getS16(const char *block, const char *var,
+ S16 &d, S32 blocknum)
+{
+ getData(block, var, &d, sizeof(S16), blocknum);
+}
+
+void LLTemplateMessageReader::getU16(const char *block, const char *var,
+ U16 &d, S32 blocknum)
+{
+ getData(block, var, &d, sizeof(U16), blocknum);
+}
+
+void LLTemplateMessageReader::getS32(const char *block, const char *var,
+ S32 &d, S32 blocknum)
+{
+ getData(block, var, &d, sizeof(S32), blocknum);
+}
+
+void LLTemplateMessageReader::getU32(const char *block, const char *var,
+ U32 &d, S32 blocknum)
+{
+ getData(block, var, &d, sizeof(U32), blocknum);
+}
+
+void LLTemplateMessageReader::getU64(const char *block, const char *var,
+ U64 &d, S32 blocknum)
+{
+ getData(block, var, &d, sizeof(U64), blocknum);
+}
+
+void LLTemplateMessageReader::getF32(const char *block, const char *var,
+ F32 &d, S32 blocknum)
+{
+ getData(block, var, &d, sizeof(F32), blocknum);
+
+ if( !llfinite( d ) )
+ {
+ llwarns << "non-finite in getF32Fast " << block << " " << var
+ << llendl;
+ d = 0;
+ }
+}
+
+void LLTemplateMessageReader::getF64(const char *block, const char *var,
+ F64 &d, S32 blocknum)
+{
+ getData(block, var, &d, sizeof(F64), blocknum);
+
+ if( !llfinite( d ) )
+ {
+ llwarns << "non-finite in getF64Fast " << block << " " << var
+ << llendl;
+ d = 0;
+ }
+}
+
+void LLTemplateMessageReader::getVector3(const char *block, const char *var,
+ LLVector3 &v, S32 blocknum )
+{
+ getData(block, var, v.mV, sizeof(v.mV), blocknum);
+
+ if( !v.isFinite() )
+ {
+ llwarns << "non-finite in getVector3Fast " << block << " "
+ << var << llendl;
+ v.zeroVec();
+ }
+}
+
+void LLTemplateMessageReader::getVector4(const char *block, const char *var,
+ LLVector4 &v, S32 blocknum)
+{
+ getData(block, var, v.mV, sizeof(v.mV), blocknum);
+
+ if( !v.isFinite() )
+ {
+ llwarns << "non-finite in getVector4Fast " << block << " "
+ << var << llendl;
+ v.zeroVec();
+ }
+}
+
+void LLTemplateMessageReader::getVector3d(const char *block, const char *var,
+ LLVector3d &v, S32 blocknum )
+{
+ getData(block, var, v.mdV, sizeof(v.mdV), blocknum);
+
+ if( !v.isFinite() )
+ {
+ llwarns << "non-finite in getVector3dFast " << block << " "
+ << var << llendl;
+ v.zeroVec();
+ }
+
+}
+
+void LLTemplateMessageReader::getQuat(const char *block, const char *var,
+ LLQuaternion &q, S32 blocknum)
+{
+ LLVector3 vec;
+ getData(block, var, vec.mV, sizeof(vec.mV), blocknum);
+ if( vec.isFinite() )
+ {
+ q.unpackFromVector3( vec );
+ }
+ else
+ {
+ llwarns << "non-finite in getQuatFast " << block << " " << var
+ << llendl;
+ q.loadIdentity();
+ }
+}
+
+void LLTemplateMessageReader::getUUID(const char *block, const char *var,
+ LLUUID &u, S32 blocknum)
+{
+ getData(block, var, u.mData, sizeof(u.mData), blocknum);
+}
+
+inline void LLTemplateMessageReader::getIPAddr(const char *block, const char *var, U32 &u, S32 blocknum)
+{
+ getData(block, var, &u, sizeof(U32), blocknum);
+}
+
+inline void LLTemplateMessageReader::getIPPort(const char *block, const char *var, U16 &u, S32 blocknum)
+{
+ getData(block, var, &u, sizeof(U16), blocknum);
+ u = ntohs(u);
+}
+
+inline void LLTemplateMessageReader::getString(const char *block, const char *var, S32 buffer_size, char *s, S32 blocknum )
+{
+ s[0] = '\0';
+ getData(block, var, s, 0, blocknum, buffer_size);
+ s[buffer_size - 1] = '\0';
+}
+
+//virtual
+S32 LLTemplateMessageReader::getMessageSize() const
+{
+ return mReceiveSize;
+}
+
+// Returns template for the message contained in buffer
+BOOL LLTemplateMessageReader::decodeTemplate(
+ const U8* buffer, S32 buffer_size, // inputs
+ LLMessageTemplate** msg_template ) // outputs
+{
+ const U8* header = buffer + LL_PACKET_ID_SIZE;
+
+ // is there a message ready to go?
+ if (buffer_size <= 0)
+ {
+ llwarns << "No message waiting for decode!" << llendl;
+ return(FALSE);
+ }
+
+ U32 num = 0;
+
+ if (header[0] != 255)
+ {
+ // high frequency message
+ num = header[0];
+ }
+ else if ((buffer_size >= ((S32) LL_MINIMUM_VALID_PACKET_SIZE + 1)) && (header[1] != 255))
+ {
+ // medium frequency message
+ num = (255 << 8) | header[1];
+ }
+ else if ((buffer_size >= ((S32) LL_MINIMUM_VALID_PACKET_SIZE + 3)) && (header[1] == 255))
+ {
+ // low frequency message
+ U16 message_id_U16 = 0;
+ // I think this check busts the message system.
+ // it appears that if there is a NULL in the message #, it won't copy it....
+ // what was the goal?
+ //if(header[2])
+ memcpy(&message_id_U16, &header[2], 2);
+
+ // dependant on endian-ness:
+ // U32 temp = (255 << 24) | (255 << 16) | header[2];
+
+ // independant of endian-ness:
+ message_id_U16 = ntohs(message_id_U16);
+ num = 0xFFFF0000 | message_id_U16;
+ }
+ else // bogus packet received (too short)
+ {
+ llwarns << "Packet with unusable length received (too short): "
+ << buffer_size << llendl;
+ return(FALSE);
+ }
+
+ LLMessageTemplate* temp = get_ptr_in_map(mMessageNumbers,num);
+ if (temp)
+ {
+ *msg_template = temp;
+ }
+ else
+ {
+ llwarns << "Message #" << std::hex << num << std::dec
+ << " received but not registered!" << llendl;
+ gMessageSystem->callExceptionFunc(MX_UNREGISTERED_MESSAGE);
+ return(FALSE);
+ }
+
+ return(TRUE);
+}
+
+void LLTemplateMessageReader::logRanOffEndOfPacket( const LLHost& host )
+{
+ // we've run off the end of the packet!
+ llwarns << "Ran off end of packet " << mCurrentRMessageTemplate->mName
+// << " with id " << mCurrentRecvPacketID
+ << " from " << host
+ << llendl;
+ if(gMessageSystem->mVerboseLog)
+ {
+ llinfos << "MSG: -> " << host << "\tREAD PAST END:\t"
+// << mCurrentRecvPacketID << " "
+ << getMessageName() << llendl;
+ }
+ gMessageSystem->callExceptionFunc(MX_RAN_OFF_END_OF_PACKET);
+}
+
+// decode a given message
+BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender )
+{
+ llassert( mReceiveSize >= 0 );
+ llassert( mCurrentRMessageTemplate);
+ llassert( !mCurrentRMessageData );
+ delete mCurrentRMessageData; // just to make sure
+
+ S32 decode_pos = LL_PACKET_ID_SIZE + (S32)(mCurrentRMessageTemplate->mFrequency);
+
+ // create base working data set
+ mCurrentRMessageData = new LLMsgData(mCurrentRMessageTemplate->mName);
+
+ // loop through the template building the data structure as we go
+ for (LLMessageTemplate::message_block_map_t::iterator iter = mCurrentRMessageTemplate->mMemberBlocks.begin();
+ iter != mCurrentRMessageTemplate->mMemberBlocks.end(); iter++)
+ {
+ LLMessageBlock* mbci = iter->second;
+ U8 repeat_number;
+ S32 i;
+
+ // how many of this block?
+
+ if (mbci->mType == MBT_SINGLE)
+ {
+ // just one
+ repeat_number = 1;
+ }
+ else if (mbci->mType == MBT_MULTIPLE)
+ {
+ // a known number
+ repeat_number = mbci->mNumber;
+ }
+ else if (mbci->mType == MBT_VARIABLE)
+ {
+ // need to read the number from the message
+ // repeat number is a single byte
+ if (decode_pos >= mReceiveSize)
+ {
+ logRanOffEndOfPacket( sender );
+ return FALSE;
+ }
+ repeat_number = buffer[decode_pos];
+ decode_pos++;
+ }
+ else
+ {
+ llerrs << "Unknown block type" << llendl;
+ return FALSE;
+ }
+
+ LLMsgBlkData* cur_data_block = NULL;
+
+ // now loop through the block
+ for (i = 0; i < repeat_number; i++)
+ {
+ if (i)
+ {
+ // build new name to prevent collisions
+ // TODO: This should really change to a vector
+ cur_data_block = new LLMsgBlkData(mbci->mName, repeat_number);
+ cur_data_block->mName = mbci->mName + i;
+ }
+ else
+ {
+ cur_data_block = new LLMsgBlkData(mbci->mName, repeat_number);
+ }
+
+ // add the block to the message
+ mCurrentRMessageData->addBlock(cur_data_block);
+
+ // now read the variables
+ for (LLMessageBlock::message_variable_map_t::iterator iter = mbci->mMemberVariables.begin();
+ iter != mbci->mMemberVariables.end(); iter++)
+ {
+ LLMessageVariable& mvci = *(iter->second);
+ // ok, build out the variables
+ // add variable block
+ cur_data_block->addVariable(mvci.getName(), mvci.getType());
+
+ // what type of variable?
+ if (mvci.getType() == MVT_VARIABLE)
+ {
+ // variable, get the number of bytes to read from the template
+ S32 data_size = mvci.getSize();
+ U8 tsizeb = 0;
+ U16 tsizeh = 0;
+ U32 tsize = 0;
+
+ if ((decode_pos + data_size) > mReceiveSize)
+ {
+ logRanOffEndOfPacket( sender );
+ return FALSE;
+ }
+ switch(data_size)
+ {
+ case 1:
+ htonmemcpy(&tsizeb, &buffer[decode_pos], MVT_U8, 1);
+ tsize = tsizeb;
+ break;
+ case 2:
+ htonmemcpy(&tsizeh, &buffer[decode_pos], MVT_U16, 2);
+ tsize = tsizeh;
+ break;
+ case 4:
+ htonmemcpy(&tsizeb, &buffer[decode_pos], MVT_U32, 4);
+ break;
+ default:
+ llerrs << "Attempting to read variable field with unknown size of " << data_size << llendl;
+ break;
+
+ }
+ decode_pos += data_size;
+
+ if ((decode_pos + (S32)tsize) > mReceiveSize)
+ {
+ logRanOffEndOfPacket( sender );
+ return FALSE;
+ }
+ cur_data_block->addData(mvci.getName(), &buffer[decode_pos], tsize, mvci.getType());
+ decode_pos += tsize;
+ }
+ else
+ {
+ // fixed!
+ // so, copy data pointer and set data size to fixed size
+
+ if ((decode_pos + mvci.getSize()) > mReceiveSize)
+ {
+ logRanOffEndOfPacket( sender );
+ return FALSE;
+ }
+
+ cur_data_block->addData(mvci.getName(), &buffer[decode_pos], mvci.getSize(), mvci.getType());
+ decode_pos += mvci.getSize();
+ }
+ }
+ }
+ }
+
+ if (mCurrentRMessageData->mMemberBlocks.empty()
+ && !mCurrentRMessageTemplate->mMemberBlocks.empty())
+ {
+ lldebugs << "Empty message '" << mCurrentRMessageTemplate->mName << "' (no blocks)" << llendl;
+ return FALSE;
+ }
+
+ {
+ static LLTimer decode_timer;
+
+ if(LLMessageReader::getTimeDecodes() || gMessageSystem->getTimingCallback())
+ {
+ decode_timer.reset();
+ }
+
+ // if( mCurrentRMessageTemplate->mName == _PREHASH_AgentToNewRegion )
+ // {
+ // VTResume(); // VTune
+ // }
+
+ {
+ LLFastTimer t(LLFastTimer::FTM_PROCESS_MESSAGES);
+ if( !mCurrentRMessageTemplate->callHandlerFunc(gMessageSystem) )
+ {
+ llwarns << "Message from " << sender << " with no handler function received: " << mCurrentRMessageTemplate->mName << llendl;
+ }
+ }
+
+ // if( mCurrentRMessageTemplate->mName == _PREHASH_AgentToNewRegion )
+ // {
+ // VTPause(); // VTune
+ // }
+
+ if(LLMessageReader::getTimeDecodes() || gMessageSystem->getTimingCallback())
+ {
+ F32 decode_time = decode_timer.getElapsedTimeF32();
+
+ if (gMessageSystem->getTimingCallback())
+ {
+ (gMessageSystem->getTimingCallback())(mCurrentRMessageTemplate->mName,
+ decode_time,
+ gMessageSystem->getTimingCallbackData());
+ }
+
+ if (LLMessageReader::getTimeDecodes())
+ {
+ mCurrentRMessageTemplate->mDecodeTimeThisFrame += decode_time;
+
+ mCurrentRMessageTemplate->mTotalDecoded++;
+ mCurrentRMessageTemplate->mTotalDecodeTime += decode_time;
+
+ if( mCurrentRMessageTemplate->mMaxDecodeTimePerMsg < decode_time )
+ {
+ mCurrentRMessageTemplate->mMaxDecodeTimePerMsg = decode_time;
+ }
+
+
+ if(decode_time > LLMessageReader::getTimeDecodesSpamThreshold())
+ {
+ lldebugs << "--------- Message " << mCurrentRMessageTemplate->mName << " decode took " << decode_time << " seconds. (" <<
+ mCurrentRMessageTemplate->mMaxDecodeTimePerMsg << " max, " <<
+ (mCurrentRMessageTemplate->mTotalDecodeTime / mCurrentRMessageTemplate->mTotalDecoded) << " avg)" << llendl;
+ }
+ }
+ }
+ }
+ return TRUE;
+}
+
+BOOL LLTemplateMessageReader::validateMessage(const U8* buffer,
+ S32 buffer_size,
+ const LLHost& sender)
+{
+ mReceiveSize = buffer_size;
+ BOOL result = decodeTemplate(buffer, buffer_size, &mCurrentRMessageTemplate );
+ if(result)
+ {
+ mCurrentRMessageTemplate->mReceiveCount++;
+ lldebugst(LLERR_MESSAGE) << "MessageRecvd:"
+ << mCurrentRMessageTemplate->mName
+ << " from " << sender << llendl;
+ }
+ return result;
+}
+
+BOOL LLTemplateMessageReader::readMessage(const U8* buffer,
+ const LLHost& sender)
+{
+ return decodeData(buffer, sender);
+}
+
+//virtual
+const char* LLTemplateMessageReader::getMessageName() const
+{
+ static char empty_string[] = "";
+ return mCurrentRMessageTemplate ? mCurrentRMessageTemplate->mName : empty_string;
+}
+
+//virtual
+bool LLTemplateMessageReader::isTrusted() const
+{
+ return mCurrentRMessageTemplate->getTrust() == MT_TRUST;
+}
+
+//virtual
+bool LLTemplateMessageReader::isBanned(bool trustedSource) const
+{
+ return mCurrentRMessageTemplate->isBanned(trustedSource);
+}
+
+//virtual
+void LLTemplateMessageReader::copyToBuilder(LLMessageBuilder& builder) const
+{
+ if(NULL == mCurrentRMessageTemplate)
+ {
+ return;
+ }
+ builder.copyFromMessageData(*mCurrentRMessageData);
+}
diff --git a/linden/indra/llmessage/lltemplatemessagereader.h b/linden/indra/llmessage/lltemplatemessagereader.h
new file mode 100644
index 0000000..dd5ee39
--- /dev/null
+++ b/linden/indra/llmessage/lltemplatemessagereader.h
@@ -0,0 +1,98 @@
+#ifndef LL_LLTEMPLATEMESSAGEREADER_H
+#define LL_LLTEMPLATEMESSAGEREADER_H
+
+#include "llmessagereader.h"
+
+#include
+
+class LLMessageTemplate;
+class LLMsgData;
+
+class LLTemplateMessageReader : public LLMessageReader
+{
+public:
+
+ typedef std::map message_template_number_map_t;
+
+ LLTemplateMessageReader(message_template_number_map_t&);
+ virtual ~LLTemplateMessageReader();
+
+ /** All get* methods expect pointers to canonical strings. */
+ virtual void getBinaryData(const char *blockname, const char *varname,
+ void *datap, S32 size, S32 blocknum = 0,
+ S32 max_size = S32_MAX);
+ virtual void getBOOL(const char *block, const char *var, BOOL &data,
+ S32 blocknum = 0);
+ virtual void getS8(const char *block, const char *var, S8 &data,
+ S32 blocknum = 0);
+ virtual void getU8(const char *block, const char *var, U8 &data,
+ S32 blocknum = 0);
+ virtual void getS16(const char *block, const char *var, S16 &data,
+ S32 blocknum = 0);
+ virtual void getU16(const char *block, const char *var, U16 &data,
+ S32 blocknum = 0);
+ virtual void getS32(const char *block, const char *var, S32 &data,
+ S32 blocknum = 0);
+ virtual void getF32(const char *block, const char *var, F32 &data,
+ S32 blocknum = 0);
+ virtual void getU32(const char *block, const char *var, U32 &data,
+ S32 blocknum = 0);
+ virtual void getU64(const char *block, const char *var, U64 &data,
+ S32 blocknum = 0);
+ virtual void getF64(const char *block, const char *var, F64 &data,
+ S32 blocknum = 0);
+ virtual void getVector3(const char *block, const char *var,
+ LLVector3 &vec, S32 blocknum = 0);
+ virtual void getVector4(const char *block, const char *var,
+ LLVector4 &vec, S32 blocknum = 0);
+ virtual void getVector3d(const char *block, const char *var,
+ LLVector3d &vec, S32 blocknum = 0);
+ virtual void getQuat(const char *block, const char *var, LLQuaternion &q,
+ S32 blocknum = 0);
+ virtual void getUUID(const char *block, const char *var, LLUUID &uuid,
+ S32 blocknum = 0);
+ virtual void getIPAddr(const char *block, const char *var, U32 &ip,
+ S32 blocknum = 0);
+ virtual void getIPPort(const char *block, const char *var, U16 &port,
+ S32 blocknum = 0);
+ virtual void getString(const char *block, const char *var,
+ S32 buffer_size, char *buffer, S32 blocknum = 0);
+
+ virtual S32 getNumberOfBlocks(const char *blockname);
+ virtual S32 getSize(const char *blockname, const char *varname);
+ virtual S32 getSize(const char *blockname, S32 blocknum,
+ const char *varname);
+
+ virtual void clearMessage();
+
+ virtual const char* getMessageName() const;
+ virtual S32 getMessageSize() const;
+
+ virtual void copyToBuilder(LLMessageBuilder&) const;
+
+ BOOL validateMessage(const U8* buffer, S32 buffer_size,
+ const LLHost& sender);
+ BOOL readMessage(const U8* buffer, const LLHost& sender);
+
+ bool isTrusted() const;
+ bool isBanned(bool trusted_source) const;
+
+private:
+
+ void getData(const char *blockname, const char *varname, void *datap,
+ S32 size = 0, S32 blocknum = 0, S32 max_size = S32_MAX);
+
+ BOOL decodeTemplate(const U8* buffer, S32 buffer_size, // inputs
+ LLMessageTemplate** msg_template ); // outputs
+
+ void logRanOffEndOfPacket( const LLHost& host );
+
+ BOOL decodeData(const U8* buffer, const LLHost& sender );
+
+ S32 mReceiveSize;
+ LLMessageTemplate* mCurrentRMessageTemplate;
+ LLMsgData* mCurrentRMessageData;
+ message_template_number_map_t& mMessageNumbers;
+};
+
+#endif // LL_LLTEMPLATEMESSAGEREADER_H
diff --git a/linden/indra/llmessage/llthrottle.cpp b/linden/indra/llmessage/llthrottle.cpp
index 87dc929..de80dd0 100644
--- a/linden/indra/llmessage/llthrottle.cpp
+++ b/linden/indra/llmessage/llthrottle.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llthrottle.h b/linden/indra/llmessage/llthrottle.h
index 8fc2725..a87834b 100644
--- a/linden/indra/llmessage/llthrottle.h
+++ b/linden/indra/llmessage/llthrottle.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/lltransfermanager.cpp b/linden/indra/llmessage/lltransfermanager.cpp
index 43afa78..12e1728 100644
--- a/linden/indra/llmessage/lltransfermanager.cpp
+++ b/linden/indra/llmessage/lltransfermanager.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/lltransfermanager.h b/linden/indra/llmessage/lltransfermanager.h
index 6d9d172..81a0221 100644
--- a/linden/indra/llmessage/lltransfermanager.h
+++ b/linden/indra/llmessage/lltransfermanager.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/lltransfersourceasset.cpp b/linden/indra/llmessage/lltransfersourceasset.cpp
index 0285896..31094c1 100644
--- a/linden/indra/llmessage/lltransfersourceasset.cpp
+++ b/linden/indra/llmessage/lltransfersourceasset.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/lltransfersourceasset.h b/linden/indra/llmessage/lltransfersourceasset.h
index 7859de7..7b1aa63 100644
--- a/linden/indra/llmessage/lltransfersourceasset.h
+++ b/linden/indra/llmessage/lltransfersourceasset.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/lltransfersourcefile.cpp b/linden/indra/llmessage/lltransfersourcefile.cpp
index a8625b0..392349e 100644
--- a/linden/indra/llmessage/lltransfersourcefile.cpp
+++ b/linden/indra/llmessage/lltransfersourcefile.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/lltransfersourcefile.h b/linden/indra/llmessage/lltransfersourcefile.h
index f615e86..21661b5 100644
--- a/linden/indra/llmessage/lltransfersourcefile.h
+++ b/linden/indra/llmessage/lltransfersourcefile.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/lltransfertargetfile.cpp b/linden/indra/llmessage/lltransfertargetfile.cpp
index bb039d7..00af3ff 100644
--- a/linden/indra/llmessage/lltransfertargetfile.cpp
+++ b/linden/indra/llmessage/lltransfertargetfile.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/lltransfertargetfile.h b/linden/indra/llmessage/lltransfertargetfile.h
index 9e249f9..50d617f 100644
--- a/linden/indra/llmessage/lltransfertargetfile.h
+++ b/linden/indra/llmessage/lltransfertargetfile.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/lltransfertargetvfile.cpp b/linden/indra/llmessage/lltransfertargetvfile.cpp
index 5a1acf3..79919b8 100644
--- a/linden/indra/llmessage/lltransfertargetvfile.cpp
+++ b/linden/indra/llmessage/lltransfertargetvfile.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/lltransfertargetvfile.h b/linden/indra/llmessage/lltransfertargetvfile.h
index 4c915dc..6ba8745 100644
--- a/linden/indra/llmessage/lltransfertargetvfile.h
+++ b/linden/indra/llmessage/lltransfertargetvfile.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llurlrequest.cpp b/linden/indra/llmessage/llurlrequest.cpp
index 8ac8d94..b3dfb52 100644
--- a/linden/indra/llmessage/llurlrequest.cpp
+++ b/linden/indra/llmessage/llurlrequest.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llurlrequest.h b/linden/indra/llmessage/llurlrequest.h
index 788b0e4..9088244 100644
--- a/linden/indra/llmessage/llurlrequest.h
+++ b/linden/indra/llmessage/llurlrequest.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/lluseroperation.cpp b/linden/indra/llmessage/lluseroperation.cpp
index c3ce63c..29146ea 100644
--- a/linden/indra/llmessage/lluseroperation.cpp
+++ b/linden/indra/llmessage/lluseroperation.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/lluseroperation.h b/linden/indra/llmessage/lluseroperation.h
index 18459f5..325567c 100644
--- a/linden/indra/llmessage/lluseroperation.h
+++ b/linden/indra/llmessage/lluseroperation.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llvehicleparams.h b/linden/indra/llmessage/llvehicleparams.h
index 7725406..946f88c 100644
--- a/linden/indra/llmessage/llvehicleparams.h
+++ b/linden/indra/llmessage/llvehicleparams.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llxfer.cpp b/linden/indra/llmessage/llxfer.cpp
index 507b820..e12996d 100644
--- a/linden/indra/llmessage/llxfer.cpp
+++ b/linden/indra/llmessage/llxfer.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llxfer.h b/linden/indra/llmessage/llxfer.h
index b070c87..51d7731 100644
--- a/linden/indra/llmessage/llxfer.h
+++ b/linden/indra/llmessage/llxfer.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llxfer_file.cpp b/linden/indra/llmessage/llxfer_file.cpp
index 2fec06b..297d163 100644
--- a/linden/indra/llmessage/llxfer_file.cpp
+++ b/linden/indra/llmessage/llxfer_file.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -133,7 +134,7 @@ S32 LLXfer_File::initializeRequest(U64 xfer_id,
mRemoteHost = remote_host;
mDeleteRemoteOnCompletion = delete_remote_on_completion;
- snprintf(mTempFilename, sizeof(mTempFilename), "%s",gDirUtilp->getTempFilename().c_str()); /* Flawfinder : ignore */
+ snprintf(mTempFilename, sizeof(mTempFilename), "%s",gDirUtilp->getTempFilename().c_str()); /* Flawfinder: ignore */
mCallback = callback;
mCallbackDataHandle = user_data;
diff --git a/linden/indra/llmessage/llxfer_file.h b/linden/indra/llmessage/llxfer_file.h
index 2a92e00..6a9ee51 100644
--- a/linden/indra/llmessage/llxfer_file.h
+++ b/linden/indra/llmessage/llxfer_file.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llxfer_mem.cpp b/linden/indra/llmessage/llxfer_mem.cpp
index e9d7bf8..e9b4224 100644
--- a/linden/indra/llmessage/llxfer_mem.cpp
+++ b/linden/indra/llmessage/llxfer_mem.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llxfer_mem.h b/linden/indra/llmessage/llxfer_mem.h
index bda7893..b80807a 100644
--- a/linden/indra/llmessage/llxfer_mem.h
+++ b/linden/indra/llmessage/llxfer_mem.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llxfer_vfile.cpp b/linden/indra/llmessage/llxfer_vfile.cpp
index 3a2a4a2..0d0d5fe 100644
--- a/linden/indra/llmessage/llxfer_vfile.cpp
+++ b/linden/indra/llmessage/llxfer_vfile.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llxfer_vfile.h b/linden/indra/llmessage/llxfer_vfile.h
index 51b64db..e71a0e8 100644
--- a/linden/indra/llmessage/llxfer_vfile.h
+++ b/linden/indra/llmessage/llxfer_vfile.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llxfermanager.cpp b/linden/indra/llmessage/llxfermanager.cpp
index afeeef3..914488e 100644
--- a/linden/indra/llmessage/llxfermanager.cpp
+++ b/linden/indra/llmessage/llxfermanager.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llxfermanager.h b/linden/indra/llmessage/llxfermanager.h
index b6e3ee2..7b529ad 100644
--- a/linden/indra/llmessage/llxfermanager.h
+++ b/linden/indra/llmessage/llxfermanager.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llxorcipher.cpp b/linden/indra/llmessage/llxorcipher.cpp
index 3c3f690..042fbd4 100644
--- a/linden/indra/llmessage/llxorcipher.cpp
+++ b/linden/indra/llmessage/llxorcipher.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/llxorcipher.h b/linden/indra/llmessage/llxorcipher.h
index fbb879e..16579a6 100644
--- a/linden/indra/llmessage/llxorcipher.h
+++ b/linden/indra/llmessage/llxorcipher.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/machine.h b/linden/indra/llmessage/machine.h
index 72caadc..490ddc5 100644
--- a/linden/indra/llmessage/machine.h
+++ b/linden/indra/llmessage/machine.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/mean_collision_data.h b/linden/indra/llmessage/mean_collision_data.h
index 2d60159..a319640 100644
--- a/linden/indra/llmessage/mean_collision_data.h
+++ b/linden/indra/llmessage/mean_collision_data.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/message.cpp b/linden/indra/llmessage/message.cpp
index 2e7cb6a..ef22b63 100644
--- a/linden/indra/llmessage/message.cpp
+++ b/linden/indra/llmessage/message.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -52,11 +53,23 @@
// linden library headers
#include "indra_constants.h"
+#include "lldarray.h"
#include "lldir.h"
#include "llerror.h"
+#include "llerrorlegacy.h"
#include "llfasttimer.h"
+#include "llhttpclient.h"
+#include "llhttpsender.h"
#include "llmd5.h"
+#include "llmessagebuilder.h"
+#include "llmessageconfig.h"
+#include "llpumpio.h"
+#include "lltemplatemessagebuilder.h"
+#include "lltemplatemessagereader.h"
+#include "llmessagetemplate.h"
#include "llsd.h"
+#include "llsdmessagebuilder.h"
+#include "llsdmessagereader.h"
#include "lltransfermanager.h"
#include "lluuid.h"
#include "llxfermanager.h"
@@ -73,406 +86,6 @@
static const F32 CIRCUIT_DUMP_TIMEOUT = 30.f;
static const S32 TRUST_TIME_WINDOW = 3;
-class LLMsgVarData
-{
-public:
- LLMsgVarData() : mName(NULL), mSize(-1), mDataSize(-1), mData(NULL), mType(MVT_U8)
- {
- }
-
- LLMsgVarData(const char *name, EMsgVariableType type) : mSize(-1), mDataSize(-1), mData(NULL), mType(type)
- {
- mName = (char *)name;
- }
-
- ~LLMsgVarData()
- {
- // copy constructor just copies the mData pointer, so only delete mData explicitly
- }
-
- void deleteData()
- {
- delete[] mData;
- mData = NULL;
- }
-
- void addData(const void *indata, S32 size, EMsgVariableType type, S32 data_size = -1);
-
- char *getName() const { return mName; }
- S32 getSize() const { return mSize; }
- void *getData() { return (void*)mData; }
- S32 getDataSize() const { return mDataSize; }
- EMsgVariableType getType() const { return mType; }
-
-protected:
- char *mName;
- S32 mSize;
- S32 mDataSize;
-
- U8 *mData;
- EMsgVariableType mType;
-};
-
-
-class LLMsgBlkData
-{
-public:
- LLMsgBlkData(const char *name, S32 blocknum) : mOffset(-1), mBlockNumber(blocknum), mTotalSize(-1)
- {
- mName = (char *)name;
- }
-
- ~LLMsgBlkData()
- {
- for (msg_var_data_map_t::iterator iter = mMemberVarData.begin();
- iter != mMemberVarData.end(); iter++)
- {
- iter->deleteData();
- }
- }
-
- void addVariable(const char *name, EMsgVariableType type)
- {
- LLMsgVarData tmp(name,type);
- mMemberVarData[name] = tmp;
- }
-
- void addData(char *name, const void *data, S32 size, EMsgVariableType type, S32 data_size = -1)
- {
- LLMsgVarData* temp = &mMemberVarData[name]; // creates a new entry if one doesn't exist
- temp->addData(data, size, type, data_size);
- }
-
- S32 mOffset;
- S32 mBlockNumber;
- typedef LLDynamicArrayIndexed msg_var_data_map_t;
- msg_var_data_map_t mMemberVarData;
- char *mName;
- S32 mTotalSize;
-};
-
-
-class LLMsgData
-{
-public:
- LLMsgData(const char *name) : mTotalSize(-1)
- {
- mName = (char *)name;
- }
- ~LLMsgData()
- {
- for_each(mMemberBlocks.begin(), mMemberBlocks.end(), DeletePairedPointer());
- }
-
- void addBlock(LLMsgBlkData *blockp)
- {
- mMemberBlocks[blockp->mName] = blockp;
- }
-
- void addDataFast(char *blockname, char *varname, const void *data, S32 size, EMsgVariableType type, S32 data_size = -1);
-
-public:
- S32 mOffset;
- typedef std::map msg_blk_data_map_t;
- msg_blk_data_map_t mMemberBlocks;
- char *mName;
- S32 mTotalSize;
-};
-
-inline void LLMsgVarData::addData(const void *data, S32 size, EMsgVariableType type, S32 data_size)
-{
- mSize = size;
- mDataSize = data_size;
- if ( (type != MVT_VARIABLE) && (type != MVT_FIXED)
- && (mType != MVT_VARIABLE) && (mType != MVT_FIXED))
- {
- if (mType != type)
- {
- llwarns << "Type mismatch in addData for " << mName
- << " message: " << gMessageSystem->getCurrentSMessageName()
- << " block: " << gMessageSystem->getCurrentSBlockName()
- << llendl;
- }
- }
- if(size)
- {
- delete mData; // Delete it if it already exists
- mData = new U8[size];
- htonmemcpy(mData, data, mType, size);
- }
-}
-
-
-
-inline void LLMsgData::addDataFast(char *blockname, char *varname, const void *data, S32 size, EMsgVariableType type, S32 data_size)
-{
- // remember that if the blocknumber is > 0 then the number is appended to the name
- char *namep = (char *)blockname;
- LLMsgBlkData* block_data = mMemberBlocks[namep];
- if (block_data->mBlockNumber)
- {
- namep += block_data->mBlockNumber;
- block_data->addData(varname, data, size, type, data_size);
- }
- else
- {
- block_data->addData(varname, data, size, type, data_size);
- }
-}
-
-// LLMessage* classes store the template of messages
-
-
-class LLMessageVariable
-{
-public:
- LLMessageVariable() : mName(NULL), mType(MVT_NULL), mSize(-1)
- {
- }
-
- LLMessageVariable(char *name) : mType(MVT_NULL), mSize(-1)
- {
- mName = name;
- }
-
- LLMessageVariable(char *name, const EMsgVariableType type, const S32 size) : mType(type), mSize(size)
- {
- mName = gMessageStringTable.getString(name);
- }
-
- ~LLMessageVariable() {}
-
- friend std::ostream& operator<<(std::ostream& s, LLMessageVariable &msg);
-
- EMsgVariableType getType() const { return mType; }
- S32 getSize() const { return mSize; }
- char *getName() const { return mName; }
-protected:
- char *mName;
- EMsgVariableType mType;
- S32 mSize;
-};
-
-
-typedef enum e_message_block_type
-{
- MBT_NULL,
- MBT_SINGLE,
- MBT_MULTIPLE,
- MBT_VARIABLE,
- MBT_EOF
-} EMsgBlockType;
-
-class LLMessageBlock
-{
-public:
- LLMessageBlock(char *name, EMsgBlockType type, S32 number = 1) : mType(type), mNumber(number), mTotalSize(0)
- {
- mName = gMessageStringTable.getString(name);
- }
-
- ~LLMessageBlock()
- {
- for_each(mMemberVariables.begin(), mMemberVariables.end(), DeletePairedPointer());
- }
-
- void addVariable(char *name, const EMsgVariableType type, const S32 size)
- {
- LLMessageVariable** varp = &mMemberVariables[name];
- if (*varp != NULL)
- {
- llerrs << name << " has already been used as a variable name!" << llendl;
- }
- *varp = new LLMessageVariable(name, type, size);
- if (((*varp)->getType() != MVT_VARIABLE)
- &&(mTotalSize != -1))
- {
- mTotalSize += (*varp)->getSize();
- }
- else
- {
- mTotalSize = -1;
- }
- }
-
- EMsgVariableType getVariableType(char *name)
- {
- return (mMemberVariables[name])->getType();
- }
-
- S32 getVariableSize(char *name)
- {
- return (mMemberVariables[name])->getSize();
- }
-
- friend std::ostream& operator<<(std::ostream& s, LLMessageBlock &msg);
-
- typedef std::map message_variable_map_t;
- message_variable_map_t mMemberVariables;
- char *mName;
- EMsgBlockType mType;
- S32 mNumber;
- S32 mTotalSize;
-};
-
-
-enum EMsgFrequency
-{
- MFT_NULL = 0, // value is size of message number in bytes
- MFT_HIGH = 1,
- MFT_MEDIUM = 2,
- MFT_LOW = 4
-};
-
-typedef enum e_message_trust
-{
- MT_TRUST,
- MT_NOTRUST
-} EMsgTrust;
-
-enum EMsgEncoding
-{
- ME_UNENCODED,
- ME_ZEROCODED
-};
-
-class LLMessageTemplate
-{
-public:
- LLMessageTemplate(const char *name, U32 message_number, EMsgFrequency freq)
- :
- //mMemberBlocks(),
- mName(NULL),
- mFrequency(freq),
- mTrust(MT_NOTRUST),
- mEncoding(ME_ZEROCODED),
- mMessageNumber(message_number),
- mTotalSize(0),
- mReceiveCount(0),
- mReceiveBytes(0),
- mReceiveInvalid(0),
- mDecodeTimeThisFrame(0.f),
- mTotalDecoded(0),
- mTotalDecodeTime(0.f),
- mMaxDecodeTimePerMsg(0.f),
- mBanFromTrusted(false),
- mBanFromUntrusted(false),
- mHandlerFunc(NULL),
- mUserData(NULL)
- {
- mName = gMessageStringTable.getString(name);
- }
-
- ~LLMessageTemplate()
- {
- for_each(mMemberBlocks.begin(), mMemberBlocks.end(), DeletePairedPointer());
- }
-
- void addBlock(LLMessageBlock *blockp)
- {
- LLMessageBlock** member_blockp = &mMemberBlocks[blockp->mName];
- if (*member_blockp != NULL)
- {
- llerrs << "Block " << blockp->mName
- << "has already been used as a block name!" << llendl;
- }
- *member_blockp = blockp;
- if ( (mTotalSize != -1)
- &&(blockp->mTotalSize != -1)
- &&( (blockp->mType == MBT_SINGLE)
- ||(blockp->mType == MBT_MULTIPLE)))
- {
- mTotalSize += blockp->mNumber*blockp->mTotalSize;
- }
- else
- {
- mTotalSize = -1;
- }
- }
-
- LLMessageBlock *getBlock(char *name)
- {
- return mMemberBlocks[name];
- }
-
- // Trusted messages can only be recieved on trusted circuits.
- void setTrust(EMsgTrust t)
- {
- mTrust = t;
- }
-
- EMsgTrust getTrust(void)
- {
- return mTrust;
- }
-
- // controls for how the message should be encoded
- void setEncoding(EMsgEncoding e)
- {
- mEncoding = e;
- }
- EMsgEncoding getEncoding()
- {
- return mEncoding;
- }
-
- void setHandlerFunc(void (*handler_func)(LLMessageSystem *msgsystem, void **user_data), void **user_data)
- {
- mHandlerFunc = handler_func;
- mUserData = user_data;
- }
-
- BOOL callHandlerFunc(LLMessageSystem *msgsystem)
- {
- if (mHandlerFunc)
- {
- mHandlerFunc(msgsystem, mUserData);
- return TRUE;
- }
- return FALSE;
- }
-
- bool isBanned(bool trustedSource)
- {
- return trustedSource ? mBanFromTrusted : mBanFromUntrusted;
- }
-
- friend std::ostream& operator<<(std::ostream& s, LLMessageTemplate &msg);
-
-public:
- typedef std::map message_block_map_t;
- message_block_map_t mMemberBlocks;
- char *mName;
- EMsgFrequency mFrequency;
- EMsgTrust mTrust;
- EMsgEncoding mEncoding;
- U32 mMessageNumber;
- S32 mTotalSize;
- U32 mReceiveCount; // how many of this template have been received since last reset
- U32 mReceiveBytes; // How many bytes received
- U32 mReceiveInvalid; // How many "invalid" packets
- F32 mDecodeTimeThisFrame; // Total seconds spent decoding this frame
- U32 mTotalDecoded; // Total messages successfully decoded
- F32 mTotalDecodeTime; // Total time successfully decoding messages
- F32 mMaxDecodeTimePerMsg;
-
- bool mBanFromTrusted;
- bool mBanFromUntrusted;
-
-private:
- // message handler function (this is set by each application)
- void (*mHandlerFunc)(LLMessageSystem *msgsystem, void **user_data);
- void **mUserData;
-};
-
-
-
-// static
-BOOL LLMessageSystem::mTimeDecodes = FALSE;
-
-// static, 50ms per message decode
-F32 LLMessageSystem::mTimeDecodesSpamThreshold = 0.05f;
-
// *NOTE: This needs to be moved into a seperate file so that it never gets
// included in the viewer. 30 Sep 2002 mark
// *NOTE: I don't think it's important that the messgage system tracks
@@ -487,113 +100,6 @@ public:
apr_pollfd_t mPollFD;
};
-
-// LLMessageVariable functions and friends
-
-std::ostream& operator<<(std::ostream& s, LLMessageVariable &msg)
-{
- s << "\t\t" << msg.mName << " (";
- switch (msg.mType)
- {
- case MVT_FIXED:
- s << "Fixed, " << msg.mSize << " bytes total)\n";
- break;
- case MVT_VARIABLE:
- s << "Variable, " << msg.mSize << " bytes of size info)\n";
- break;
- default:
- s << "Unknown\n";
- break;
- }
- return s;
-}
-
-// LLMessageBlock functions and friends
-
-std::ostream& operator<<(std::ostream& s, LLMessageBlock &msg)
-{
- s << "\t" << msg.mName << " (";
- switch (msg.mType)
- {
- case MBT_SINGLE:
- s << "Fixed";
- break;
- case MBT_MULTIPLE:
- s << "Multiple - " << msg.mNumber << " copies";
- break;
- case MBT_VARIABLE:
- s << "Variable";
- break;
- default:
- s << "Unknown";
- break;
- }
- if (msg.mTotalSize != -1)
- {
- s << ", " << msg.mTotalSize << " bytes each, " << msg.mNumber*msg.mTotalSize << " bytes total)\n";
- }
- else
- {
- s << ")\n";
- }
-
-
- for (LLMessageBlock::message_variable_map_t::iterator iter = msg.mMemberVariables.begin();
- iter != msg.mMemberVariables.end(); iter++)
- {
- LLMessageVariable& ci = *(iter->second);
- s << ci;
- }
-
- return s;
-}
-
-// LLMessageTemplate functions and friends
-
-std::ostream& operator<<(std::ostream& s, LLMessageTemplate &msg)
-{
- switch (msg.mFrequency)
- {
- case MFT_HIGH:
- s << "========================================\n" << "Message #" << msg.mMessageNumber << "\n" << msg.mName << " (";
- s << "High";
- break;
- case MFT_MEDIUM:
- s << "========================================\n" << "Message #";
- s << (msg.mMessageNumber & 0xFF) << "\n" << msg.mName << " (";
- s << "Medium";
- break;
- case MFT_LOW:
- s << "========================================\n" << "Message #";
- s << (msg.mMessageNumber & 0xFFFF) << "\n" << msg.mName << " (";
- s << "Low";
- break;
- default:
- s << "Unknown";
- break;
- }
-
- if (msg.mTotalSize != -1)
- {
- s << ", " << msg.mTotalSize << " bytes total)\n";
- }
- else
- {
- s << ")\n";
- }
-
- for (LLMessageTemplate::message_block_map_t::iterator iter = msg.mMemberBlocks.begin();
- iter != msg.mMemberBlocks.end(); iter++)
- {
- LLMessageBlock* ci = iter->second;
- s << *ci;
- }
-
- return s;
-}
-
-// LLMessageList functions and friends
-
// Lets support a small subset of regular expressions here
// Syntax is a string made up of:
// a - checks against alphanumeric ([A-Za-z0-9])
@@ -795,103 +301,162 @@ BOOL b_positive_integer_ok(char *token)
return TRUE;
}
-void LLMessageSystem::init()
+namespace
{
- // initialize member variables
- mVerboseLog = FALSE;
+ class LLFnPtrResponder : public LLHTTPClient::Responder
+ {
+ public:
+ LLFnPtrResponder(void (*callback)(void **,S32), void **callbackData) :
+ mCallback(callback),
+ mCallbackData(callbackData)
+ {
+ }
- mbError = FALSE;
- mErrorCode = 0;
- mIncomingCompressedSize = 0;
- mSendReliable = FALSE;
+ virtual void error(U32 status, const std::string& reason)
+ {
+ // TODO: Map status in to useful error code.
+ if(NULL != mCallback) mCallback(mCallbackData, LL_ERR_TCP_TIMEOUT);
+ }
+
+ virtual void result(const LLSD& content)
+ {
+ if(NULL != mCallback) mCallback(mCallbackData, LL_ERR_NOERR);
+ }
- mbSBuilt = FALSE;
- mbSClear = TRUE;
+ private:
- mUnackedListDepth = 0;
- mUnackedListSize = 0;
- mDSMaxListDepth = 0;
+ void (*mCallback)(void **,S32);
+ void **mCallbackData;
+ };
+}
- mCurrentRMessageData = NULL;
- mCurrentRMessageTemplate = NULL;
- mCurrentSMessageData = NULL;
- mCurrentSMessageTemplate = NULL;
- mCurrentSMessageName = NULL;
+class LLTrustedMessageService : public LLHTTPNode
+{
+ virtual bool validate(const std::string& name, LLSD& context) const
+ { return true; }
- mCurrentRecvPacketID = 0;
+ virtual void post(LLHTTPNode::ResponsePtr response,
+ const LLSD& context,
+ const LLSD& input) const;
+};
- mNumberHighFreqMessages = 0;
- mNumberMediumFreqMessages = 0;
- mNumberLowFreqMessages = 0;
- mPacketsIn = mPacketsOut = 0;
- mBytesIn = mBytesOut = 0;
- mCompressedPacketsIn = mCompressedPacketsOut = 0;
- mReliablePacketsIn = mReliablePacketsOut = 0;
+//virtual
+void LLTrustedMessageService::post(LLHTTPNode::ResponsePtr response,
+ const LLSD& context,
+ const LLSD& input) const
+{
+ std::string name = context["request"]["wildcard"]["message-name"];
+ std::string senderIP = context["request"]["remote-host"];
+ std::string senderPort = context["request"]["headers"]
+ ["x-secondlife-udp-listen-port"];
- mCompressedBytesIn = 0;
- mCompressedBytesOut = 0;
- mUncompressedBytesIn = 0;
- mUncompressedBytesOut = 0;
- mTotalBytesIn = 0;
- mTotalBytesOut = 0;
+ LLSD message_data;
+ message_data["sender"] = senderIP + ":" + senderPort;
+ message_data["body"] = input;
+
+ LLMessageSystem::dispatch(name, message_data, response);
+}
- mDroppedPackets = 0; // total dropped packets in
- mResentPackets = 0; // total resent packets out
- mFailedResendPackets = 0; // total resend failure packets out
- mOffCircuitPackets = 0; // total # of off-circuit packets rejected
- mInvalidOnCircuitPackets = 0; // total # of on-circuit packets rejected
+class LLMessageHandlerBridge : public LLHTTPNode
+{
+ virtual bool validate(const std::string& name, LLSD& context) const
+ { return true; }
- mOurCircuitCode = 0;
+ virtual void post(LLHTTPNode::ResponsePtr response, const LLSD& context,
+ const LLSD& input) const;
+};
- mMessageFileChecksum = 0;
- mMessageFileVersionNumber = 0.f;
+//virtual
+void LLMessageHandlerBridge::post(LLHTTPNode::ResponsePtr response,
+ const LLSD& context, const LLSD& input) const
+{
+ std::string name = context["request"]["wildcard"]["message-name"];
+
+ lldebugs << "Setting mLastSender " << input["sender"].asString() << llendl;
+ gMessageSystem->mLastSender = LLHost(input["sender"].asString());
+ gMessageSystem->mPacketsIn += 1;
+ gMessageSystem->mLLSDMessageReader->setMessage(name, input["body"]);
+ gMessageSystem->mMessageReader = gMessageSystem->mLLSDMessageReader;
+
+ if(gMessageSystem->callHandler(name.c_str(), false, gMessageSystem))
+ {
+ response->result(LLSD());
+ }
+ else
+ {
+ response->notFound();
+ }
}
-LLMessageSystem::LLMessageSystem()
+LLHTTPRegistration
+ gHTTPRegistrationMessageWildcard("/message/");
+
+LLHTTPRegistration
+ gHTTPRegistrationTrustedMessageWildcard("/trusted-message/");
+
+//virtual
+LLUseCircuitCodeResponder::~LLUseCircuitCodeResponder()
{
- init();
+ // even abstract base classes need a concrete destructor
+}
- mSystemVersionMajor = 0;
- mSystemVersionMinor = 0;
- mSystemVersionPatch = 0;
- mSystemVersionServer = 0;
- mVersionFlags = 0x0;
+void LLMessageSystem::init()
+{
+ // initialize member variables
+ mVerboseLog = FALSE;
- // default to not accepting packets from not alive circuits
- mbProtected = TRUE;
+ mbError = FALSE;
+ mErrorCode = 0;
+ mSendReliable = FALSE;
- mSendPacketFailureCount = 0;
- mCircuitPrintFreq = 0.f; // seconds
+ mUnackedListDepth = 0;
+ mUnackedListSize = 0;
+ mDSMaxListDepth = 0;
- // initialize various bits of net info
- mSocket = 0;
- mPort = 0;
+ mNumberHighFreqMessages = 0;
+ mNumberMediumFreqMessages = 0;
+ mNumberLowFreqMessages = 0;
+ mPacketsIn = mPacketsOut = 0;
+ mBytesIn = mBytesOut = 0;
+ mCompressedPacketsIn = mCompressedPacketsOut = 0;
+ mReliablePacketsIn = mReliablePacketsOut = 0;
- mPollInfop = NULL;
+ mCompressedBytesIn = 0;
+ mCompressedBytesOut = 0;
+ mUncompressedBytesIn = 0;
+ mUncompressedBytesOut = 0;
+ mTotalBytesIn = 0;
+ mTotalBytesOut = 0;
- mResendDumpTime = 0;
- mMessageCountTime = 0;
- mCircuitPrintTime = 0;
- mCurrentMessageTimeSeconds = 0;
+ mDroppedPackets = 0; // total dropped packets in
+ mResentPackets = 0; // total resent packets out
+ mFailedResendPackets = 0; // total resend failure packets out
+ mOffCircuitPackets = 0; // total # of off-circuit packets rejected
+ mInvalidOnCircuitPackets = 0; // total # of on-circuit packets rejected
- // Constants for dumping output based on message processing time/count
- mNumMessageCounts = 0;
- mMaxMessageCounts = 0; // >= 0 means dump warnings
- mMaxMessageTime = 0.f;
+ mOurCircuitCode = 0;
- mTrueReceiveSize = 0;
+ mIncomingCompressedSize = 0;
+ mCurrentRecvPacketID = 0;
- // Error if checking this state, subclass methods which aren't implemented are delegated
- // to properly constructed message system.
- mbError = TRUE;
+ mMessageFileChecksum = 0;
+ mMessageFileVersionNumber = 0.f;
+
+ mTimingCallback = NULL;
+ mTimingCallbackData = NULL;
+
+ mMessageBuilder = NULL;
+ mMessageReader = NULL;
}
// Read file and build message templates
LLMessageSystem::LLMessageSystem(const char *filename, U32 port,
S32 version_major,
S32 version_minor,
- S32 version_patch)
+ S32 version_patch) :
+ mTemplateConfirmed(FALSE),
+ mTemplateMatches(FALSE)
{
init();
@@ -910,6 +475,14 @@ LLMessageSystem::LLMessageSystem(const char *filename, U32 port,
loadTemplateFile(filename);
+ mTemplateMessageBuilder = new LLTemplateMessageBuilder(mMessageTemplates);
+ mLLSDMessageBuilder = new LLSDMessageBuilder();
+ mMessageBuilder = NULL;
+
+ mTemplateMessageReader = new LLTemplateMessageReader(mMessageNumbers);
+ mLLSDMessageReader = new LLSDMessageReader();
+ mMessageReader = NULL;
+
// initialize various bits of net info
mSocket = 0;
mPort = port;
@@ -1728,25 +1301,25 @@ LLMessageSystem::~LLMessageSystem()
end_net();
}
- delete mCurrentRMessageData;
- mCurrentRMessageData = NULL;
+ delete mMessageReader;
+ mMessageReader = NULL;
- delete mCurrentSMessageData;
- mCurrentSMessageData = NULL;
+ delete mMessageBuilder;
+ mMessageBuilder = NULL;
delete mPollInfop;
mPollInfop = NULL;
+
+ mIncomingCompressedSize = 0;
+ mCurrentRecvPacketID = 0;
}
void LLMessageSystem::clearReceiveState()
{
- mReceiveSize = -1;
mCurrentRecvPacketID = 0;
- mCurrentRMessageTemplate = NULL;
- delete mCurrentRMessageData;
- mCurrentRMessageData = NULL;
mIncomingCompressedSize = 0;
mLastSender.invalidate();
+ mMessageReader->clearMessage();
}
@@ -1773,20 +1346,23 @@ BOOL LLMessageSystem::poll(F32 seconds)
// Returns TRUE if a valid, on-circuit message has been received.
BOOL LLMessageSystem::checkMessages( S64 frame_count )
{
+ // Pump
BOOL valid_packet = FALSE;
+ mMessageReader = mTemplateMessageReader;
LLTransferTargetVFile::updateQueue();
if (!mNumMessageCounts)
{
- // This is the first message being handled after a resetReceiveCounts, we must be starting
- // the message processing loop. Reset the timers.
+ // This is the first message being handled after a resetReceiveCounts,
+ // we must be starting the message processing loop. Reset the timers.
mCurrentMessageTimeSeconds = totalTime() * SEC_PER_USEC;
mMessageCountTime = getMessageTimeSeconds();
}
// loop until either no packets or a valid packet
// i.e., burn through packets from unregistered circuits
+ S32 receive_size = 0;
do
{
clearReceiveState();
@@ -1802,16 +1378,16 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
// If you want to dump all received packets into SecondLife.log, uncomment this
//dumpPacketToLog();
- mReceiveSize = mTrueReceiveSize;
+ receive_size = mTrueReceiveSize;
mLastSender = mPacketRing.getLastSender();
- if (mReceiveSize < (S32) LL_MINIMUM_VALID_PACKET_SIZE)
+ if (receive_size < (S32) LL_MINIMUM_VALID_PACKET_SIZE)
{
// A receive size of zero is OK, that means that there are no more packets available.
// Ones that are non-zero but below the minimum packet size are worrisome.
- if (mReceiveSize > 0)
+ if (receive_size > 0)
{
- llwarns << "Invalid (too short) packet discarded " << mReceiveSize << llendl;
+ llwarns << "Invalid (too short) packet discarded " << receive_size << llendl;
callExceptionFunc(MX_PACKET_TOO_SHORT);
}
// no data in packet receive buffer
@@ -1825,18 +1401,18 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
// note if packet acks are appended.
if(buffer[0] & LL_ACK_FLAG)
{
- acks += buffer[--mReceiveSize];
- true_rcv_size = mReceiveSize;
- if(mReceiveSize >= ((S32)(acks * sizeof(TPACKETID) + LL_MINIMUM_VALID_PACKET_SIZE)))
+ acks += buffer[--receive_size];
+ true_rcv_size = receive_size;
+ if(receive_size >= ((S32)(acks * sizeof(TPACKETID) + LL_MINIMUM_VALID_PACKET_SIZE)))
{
- mReceiveSize -= acks * sizeof(TPACKETID);
+ receive_size -= acks * sizeof(TPACKETID);
}
else
{
// mal-formed packet. ignore it and continue with
// the next one
llwarns << "Malformed packet received. Packet size "
- << mReceiveSize << " with invalid no. of acks " << acks
+ << receive_size << " with invalid no. of acks " << acks
<< llendl;
valid_packet = FALSE;
continue;
@@ -1845,7 +1421,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
// process the message as normal
- mIncomingCompressedSize = zeroCodeExpand(&buffer,&mReceiveSize);
+ mIncomingCompressedSize = zeroCodeExpand(&buffer,&receive_size);
mCurrentRecvPacketID = buffer[1] + ((buffer[0] & 0x0f ) * 256);
if (sizeof(TPACKETID) == 4)
{
@@ -1969,7 +1545,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
std::ostringstream str;
str << "MSG: <- " << host;
char buffer[MAX_STRING]; /* Flawfinder: ignore*/
- snprintf(buffer, MAX_STRING, "\t%6d\t%6d\t%6d ", mReceiveSize, (mIncomingCompressedSize ? mIncomingCompressedSize : mReceiveSize), mCurrentRecvPacketID);/* Flawfinder: ignore*/
+ snprintf(buffer, MAX_STRING, "\t%6d\t%6d\t%6d ", receive_size, (mIncomingCompressedSize ? mIncomingCompressedSize : receive_size), mCurrentRecvPacketID); /* Flawfinder: ignore */
str << buffer << "(unknown)"
<< (recv_reliable ? " reliable" : "")
<< " resent "
@@ -1987,23 +1563,22 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
// But we don't want to acknowledge UseCircuitCode until the circuit is
// available, which is why the acknowledgement test is done above. JC
- valid_packet = decodeTemplate( buffer, mReceiveSize, &mCurrentRMessageTemplate );
- if( valid_packet )
- {
- mCurrentRMessageTemplate->mReceiveCount++;
- lldebugst(LLERR_MESSAGE) << "MessageRecvd:" << mCurrentRMessageTemplate->mName << " from " << host << llendl;
- }
+ valid_packet = mTemplateMessageReader->validateMessage(buffer,
+ receive_size,
+ host);
// UseCircuitCode is allowed in even from an invalid circuit, so that
// we can toss circuits around.
- if (valid_packet && !cdp && (mCurrentRMessageTemplate->mName != _PREHASH_UseCircuitCode) )
+ if(valid_packet && !cdp &&
+ (mTemplateMessageReader->getMessageName() != _PREHASH_UseCircuitCode))
{
logMsgFromInvalidCircuit( host, recv_reliable );
clearReceiveState();
valid_packet = FALSE;
}
- if (valid_packet && cdp && !cdp->getTrusted() && (mCurrentRMessageTemplate->getTrust() == MT_TRUST) )
+ if(valid_packet && cdp && !cdp->getTrusted() &&
+ mTemplateMessageReader->isTrusted())
{
logTrustedMsgFromUntrustedCircuit( host );
clearReceiveState();
@@ -2013,11 +1588,11 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
}
if (valid_packet
- && mCurrentRMessageTemplate->isBanned(cdp && cdp->getTrusted()))
+ && mTemplateMessageReader->isBanned(cdp && cdp->getTrusted()))
{
llwarns << "LLMessageSystem::checkMessages "
<< "received banned message "
- << mCurrentRMessageTemplate->mName
+ << mTemplateMessageReader->getMessageName()
<< " from "
<< ((cdp && cdp->getTrusted()) ? "trusted " : "untrusted ")
<< host << llendl;
@@ -2029,7 +1604,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
{
logValidMsg(cdp, host, recv_reliable, recv_resent, (BOOL)(acks>0) );
- valid_packet = decodeData( buffer, host );
+ valid_packet = mTemplateMessageReader->readMessage(buffer, host);
}
// It's possible that the circuit went away, because ANY message can disable the circuit
@@ -2042,7 +1617,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
if( 1 )
{
static char* object_update = gMessageStringTable.getString("ObjectUpdate");
- if(object_update == mCurrentRMessageTemplate->mName )
+ if(object_update == mTemplateMessageReader->getMessageName() )
{
llinfos << "ObjectUpdate:" << llendl;
U32 i;
@@ -2053,8 +1628,8 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
}
llinfos << "" << llendl;
- llinfos << " Zero Unencoded: " << mReceiveSize << llendl;
- for( i = 0; imName : "")
+ << mTemplateMessageReader->getMessageName()
<< " from invalid circuit " << host << llendl;
mOffCircuitPackets++;
}
@@ -2156,7 +1731,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
// Code for dumping the complete contents of a message
// delete [] zero_unexpanded_buffer;
}
- } while (!valid_packet && mReceiveSize > 0);
+ } while (!valid_packet && receive_size > 0);
F64 mt_sec = getMessageTimeSeconds();
// Check to see if we need to print debug info
@@ -2257,728 +1832,188 @@ void LLMessageSystem::processAcks()
}
}
-
-void LLMessageSystem::newMessageFast(const char *name)
+void LLMessageSystem::copyMessageRtoS()
{
- mbSBuilt = FALSE;
- mbSClear = FALSE;
-
- mCurrentSendTotal = 0;
- mSendReliable = FALSE;
-
- char *namep = (char *)name;
-
- if (mMessageTemplates.count(namep) > 0)
+ // NOTE: babbage: switch builder to match reader to avoid
+ // converting message format
+ if(mMessageReader == mTemplateMessageReader)
{
- mCurrentSMessageTemplate = mMessageTemplates[namep];
- if (mCurrentSMessageData)
- {
- delete mCurrentSMessageData;
- }
- mCurrentSMessageData = new LLMsgData(namep);
- mCurrentSMessageName = namep;
- mCurrentSDataBlock = NULL;
- mCurrentSBlockName = NULL;
-
- // add at one of each block
- LLMessageTemplate* msg_template = mMessageTemplates[namep];
- for (LLMessageTemplate::message_block_map_t::iterator iter = msg_template->mMemberBlocks.begin();
- iter != msg_template->mMemberBlocks.end(); iter++)
- {
- LLMessageBlock* ci = iter->second;
- LLMsgBlkData *tblockp;
- tblockp = new LLMsgBlkData(ci->mName, 0);
- mCurrentSMessageData->addBlock(tblockp);
- }
+ mMessageBuilder = mTemplateMessageBuilder;
}
else
{
- llerrs << "newMessage - Message " << name << " not registered" << llendl;
+ mMessageBuilder = mLLSDMessageBuilder;
}
+ mSendReliable = FALSE;
+ mMessageBuilder->newMessage(mMessageReader->getMessageName());
+ mMessageReader->copyToBuilder(*mMessageBuilder);
}
-void LLMessageSystem::copyMessageRtoS()
+void LLMessageSystem::clearMessage()
{
- if (!mCurrentRMessageTemplate)
- {
- return;
- }
- newMessageFast(mCurrentRMessageTemplate->mName);
+ mSendReliable = FALSE;
+ mMessageBuilder->clearMessage();
+}
- // copy the blocks
- // counting variables used to encode multiple block info
- S32 block_count = 0;
- char *block_name = NULL;
+// set block to add data to within current message
+void LLMessageSystem::nextBlockFast(const char *blockname)
+{
+ mMessageBuilder->nextBlock(blockname);
+}
- // loop through msg blocks to loop through variables, totalling up size data and filling the new (send) message
- LLMsgData::msg_blk_data_map_t::iterator iter = mCurrentRMessageData->mMemberBlocks.begin();
- LLMsgData::msg_blk_data_map_t::iterator end = mCurrentRMessageData->mMemberBlocks.end();
- for(; iter != end; ++iter)
+BOOL LLMessageSystem::isSendFull(const char* blockname)
+{
+ char* stringTableName = NULL;
+ if(NULL != blockname)
{
- LLMsgBlkData* mbci = iter->second;
- if(!mbci) continue;
-
- // do we need to encode a block code?
- if (block_count == 0)
- {
- block_count = mbci->mBlockNumber;
- block_name = (char *)mbci->mName;
- }
-
- // counting down mutliple blocks
- block_count--;
-
- nextBlockFast(block_name);
-
- // now loop through the variables
- LLMsgBlkData::msg_var_data_map_t::iterator dit = mbci->mMemberVarData.begin();
- LLMsgBlkData::msg_var_data_map_t::iterator dend = mbci->mMemberVarData.end();
-
- for(; dit != dend; ++dit)
- {
- LLMsgVarData& mvci = *dit;
- addDataFast(mvci.getName(), mvci.getData(), mvci.getType(), mvci.getSize());
- }
+ stringTableName = gMessageStringTable.getString(blockname);
}
+ return isSendFullFast(stringTableName);
}
-void LLMessageSystem::clearMessage()
+BOOL LLMessageSystem::isSendFullFast(const char* blockname)
{
- mbSBuilt = FALSE;
- mbSClear = TRUE;
-
- mCurrentSendTotal = 0;
- mSendReliable = FALSE;
+ return mMessageBuilder->isMessageFull(blockname);
+}
- mCurrentSMessageTemplate = NULL;
- delete mCurrentSMessageData;
- mCurrentSMessageData = NULL;
+// blow away the last block of a message, return FALSE if that leaves no blocks or there wasn't a block to remove
+// TODO: Babbage: Remove this horror.
+BOOL LLMessageSystem::removeLastBlock()
+{
+ return mMessageBuilder->removeLastBlock();
+}
- mCurrentSMessageName = NULL;
- mCurrentSDataBlock = NULL;
- mCurrentSBlockName = NULL;
+S32 LLMessageSystem::sendReliable(const LLHost &host)
+{
+ return sendReliable(host, LL_DEFAULT_RELIABLE_RETRIES, TRUE, LL_PING_BASED_TIMEOUT_DUMMY, NULL, NULL);
}
-// set block to add data to within current message
-void LLMessageSystem::nextBlockFast(const char *blockname)
+S32 LLMessageSystem::sendSemiReliable(const LLHost &host, void (*callback)(void **,S32), void ** callback_data)
{
- char *bnamep = (char *)blockname;
-
- if (!mCurrentSMessageTemplate)
- {
- llerrs << "newMessage not called prior to setBlock" << llendl;
- return;
- }
+ F32 timeout;
- // now, does this block exist?
- LLMessageTemplate::message_block_map_t::iterator temp_iter = mCurrentSMessageTemplate->mMemberBlocks.find(bnamep);
- if (temp_iter == mCurrentSMessageTemplate->mMemberBlocks.end())
+ LLCircuitData *cdp = mCircuitInfo.findCircuit(host);
+ if (cdp)
{
- llerrs << "LLMessageSystem::nextBlockFast " << bnamep
- << " not a block in " << mCurrentSMessageTemplate->mName << llendl;
- return;
- }
-
- LLMessageBlock* template_data = temp_iter->second;
-
- // ok, have we already set this block?
- LLMsgBlkData* block_data = mCurrentSMessageData->mMemberBlocks[bnamep];
- if (block_data->mBlockNumber == 0)
- {
- // nope! set this as the current block
- block_data->mBlockNumber = 1;
- mCurrentSDataBlock = block_data;
- mCurrentSBlockName = bnamep;
-
- // add placeholders for each of the variables
- for (LLMessageBlock::message_variable_map_t::iterator iter = template_data->mMemberVariables.begin();
- iter != template_data->mMemberVariables.end(); iter++)
- {
- LLMessageVariable& ci = *(iter->second);
- mCurrentSDataBlock->addVariable(ci.getName(), ci.getType());
- }
- return;
+ timeout = llmax(LL_MINIMUM_SEMIRELIABLE_TIMEOUT_SECONDS,
+ LL_SEMIRELIABLE_TIMEOUT_FACTOR * cdp->getPingDelayAveraged());
}
else
{
- // already have this block. . .
- // are we supposed to have a new one?
-
- // if the block is type MBT_SINGLE this is bad!
- if (template_data->mType == MBT_SINGLE)
- {
- llerrs << "LLMessageSystem::nextBlockFast called multiple times"
- << " for " << bnamep << " but is type MBT_SINGLE" << llendl;
- return;
- }
-
-
- // if the block is type MBT_MULTIPLE then we need a known number, make sure that we're not exceeding it
- if ( (template_data->mType == MBT_MULTIPLE)
- &&(mCurrentSDataBlock->mBlockNumber == template_data->mNumber))
- {
- llerrs << "LLMessageSystem::nextBlockFast called "
- << mCurrentSDataBlock->mBlockNumber << " times for " << bnamep
- << " exceeding " << template_data->mNumber
- << " specified in type MBT_MULTIPLE." << llendl;
- return;
- }
-
- // ok, we can make a new one
- // modify the name to avoid name collision by adding number to end
- S32 count = block_data->mBlockNumber;
-
- // incrememt base name's count
- block_data->mBlockNumber++;
-
- if (block_data->mBlockNumber > MAX_BLOCKS)
- {
- llerrs << "Trying to pack too many blocks into MBT_VARIABLE type (limited to " << MAX_BLOCKS << ")" << llendl;
- }
-
- // create new name
- // Nota Bene: if things are working correctly, mCurrentMessageData->mMemberBlocks[blockname]->mBlockNumber == mCurrentDataBlock->mBlockNumber + 1
-
- char *nbnamep = bnamep + count;
-
- mCurrentSDataBlock = new LLMsgBlkData(bnamep, count);
- mCurrentSDataBlock->mName = nbnamep;
- mCurrentSMessageData->mMemberBlocks[nbnamep] = mCurrentSDataBlock;
-
- // add placeholders for each of the variables
- for (LLMessageBlock::message_variable_map_t::iterator
- iter = template_data->mMemberVariables.begin(),
- end = template_data->mMemberVariables.end();
- iter != end; iter++)
- {
- LLMessageVariable& ci = *(iter->second);
- mCurrentSDataBlock->addVariable(ci.getName(), ci.getType());
- }
- return;
+ timeout = LL_SEMIRELIABLE_TIMEOUT_FACTOR * LL_AVERAGED_PING_MAX;
}
+
+ const S32 retries = 0;
+ const BOOL ping_based_timeout = FALSE;
+ return sendReliable(host, retries, ping_based_timeout, timeout, callback, callback_data);
}
-// add data to variable in current block
-void LLMessageSystem::addDataFast(const char *varname, const void *data, EMsgVariableType type, S32 size)
+// send the message via a UDP packet
+S32 LLMessageSystem::sendReliable( const LLHost &host,
+ S32 retries,
+ BOOL ping_based_timeout,
+ F32 timeout,
+ void (*callback)(void **,S32),
+ void ** callback_data)
{
- char *vnamep = (char *)varname;
-
- // do we have a current message?
- if (!mCurrentSMessageTemplate)
- {
- llerrs << "newMessage not called prior to addData" << llendl;
- return;
- }
-
- // do we have a current block?
- if (!mCurrentSDataBlock)
+ if (ping_based_timeout)
{
- llerrs << "setBlock not called prior to addData" << llendl;
- return;
+ LLCircuitData *cdp = mCircuitInfo.findCircuit(host);
+ if (cdp)
+ {
+ timeout = llmax(LL_MINIMUM_RELIABLE_TIMEOUT_SECONDS, LL_RELIABLE_TIMEOUT_FACTOR * cdp->getPingDelayAveraged());
+ }
+ else
+ {
+ timeout = llmax(LL_MINIMUM_RELIABLE_TIMEOUT_SECONDS, LL_RELIABLE_TIMEOUT_FACTOR * LL_AVERAGED_PING_MAX);
+ }
}
- // kewl, add the data if it exists
- LLMessageVariable* var_data = mCurrentSMessageTemplate->mMemberBlocks[mCurrentSBlockName]->mMemberVariables[vnamep];
- if (!var_data || !var_data->getName())
- {
- llerrs << vnamep << " not a variable in block " << mCurrentSBlockName << " of " << mCurrentSMessageTemplate->mName << llendl;
- return;
- }
+ mSendReliable = TRUE;
+ mReliablePacketParams.set(host, retries, ping_based_timeout, timeout,
+ callback, callback_data,
+ const_cast(mMessageBuilder->getMessageName()));
+ return sendMessage(host);
+}
- // ok, it seems ok. . . are we the correct size?
- if (var_data->getType() == MVT_VARIABLE)
- {
- // Variable 1 can only store 255 bytes, make sure our data is smaller
- if ((var_data->getSize() == 1) &&
- (size > 255))
- {
- llwarns << "Field " << varname << " is a Variable 1 but program "
- << "attempted to stuff more than 255 bytes in "
- << "(" << size << "). Clamping size and truncating data." << llendl;
- size = 255;
- char *truncate = (char *)data;
- truncate[255] = 0;
- }
+void LLMessageSystem::forwardMessage(const LLHost &host)
+{
+ copyMessageRtoS();
+ sendMessage(host);
+}
- // no correct size for MVT_VARIABLE, instead we need to tell how many bytes the size will be encoded as
- mCurrentSDataBlock->addData(vnamep, data, size, type, var_data->getSize());
- mCurrentSendTotal += size;
- }
- else
- {
- if (size != var_data->getSize())
- {
- llerrs << varname << " is type MVT_FIXED but request size " << size << " doesn't match template size "
- << var_data->getSize() << llendl;
- return;
- }
- // alright, smash it in
- mCurrentSDataBlock->addData(vnamep, data, size, type);
- mCurrentSendTotal += size;
- }
+void LLMessageSystem::forwardReliable(const LLHost &host)
+{
+ copyMessageRtoS();
+ sendReliable(host);
}
-// add data to variable in current block - fails if variable isn't MVT_FIXED
-void LLMessageSystem::addDataFast(const char *varname, const void *data, EMsgVariableType type)
+void LLMessageSystem::forwardReliable(const U32 circuit_code)
{
- char *vnamep = (char *)varname;
+ copyMessageRtoS();
+ sendReliable(findHost(circuit_code));
+}
- // do we have a current message?
- if (!mCurrentSMessageTemplate)
- {
- llerrs << "newMessage not called prior to addData" << llendl;
- return;
- }
+S32 LLMessageSystem::flushSemiReliable(const LLHost &host, void (*callback)(void **,S32), void ** callback_data)
+{
+ F32 timeout;
- // do we have a current block?
- if (!mCurrentSDataBlock)
+ LLCircuitData *cdp = mCircuitInfo.findCircuit(host);
+ if (cdp)
{
- llerrs << "setBlock not called prior to addData" << llendl;
- return;
+ timeout = llmax(LL_MINIMUM_SEMIRELIABLE_TIMEOUT_SECONDS,
+ LL_SEMIRELIABLE_TIMEOUT_FACTOR * cdp->getPingDelayAveraged());
}
-
- // kewl, add the data if it exists
- LLMessageVariable* var_data = mCurrentSMessageTemplate->mMemberBlocks[mCurrentSBlockName]->mMemberVariables[vnamep];
- if (!var_data->getName())
+ else
{
- llerrs << vnamep << " not a variable in block " << mCurrentSBlockName << " of " << mCurrentSMessageTemplate->mName << llendl;
- return;
+ timeout = LL_SEMIRELIABLE_TIMEOUT_FACTOR * LL_AVERAGED_PING_MAX;
}
- // ok, it seems ok. . . are we MVT_VARIABLE?
- if (var_data->getType() == MVT_VARIABLE)
+ S32 send_bytes = 0;
+ if (mMessageBuilder->getMessageSize())
{
- // nope
- llerrs << vnamep << " is type MVT_VARIABLE. Call using addData(name, data, size)" << llendl;
- return;
+ mSendReliable = TRUE;
+ // No need for ping-based retry as not going to retry
+ mReliablePacketParams.set(host, 0, FALSE, timeout, callback,
+ callback_data,
+ const_cast(mMessageBuilder->getMessageName()));
+ send_bytes = sendMessage(host);
+ clearMessage();
}
else
{
- mCurrentSDataBlock->addData(vnamep, data, var_data->getSize(), type);
- mCurrentSendTotal += var_data->getSize();
+ delete callback_data;
}
+ return send_bytes;
}
-BOOL LLMessageSystem::isSendFull(const char* blockname)
+S32 LLMessageSystem::flushReliable(const LLHost &host)
{
- if(!blockname)
+ S32 send_bytes = 0;
+ if (mMessageBuilder->getMessageSize())
{
- return (mCurrentSendTotal > MTUBYTES);
+ send_bytes = sendReliable(host);
}
- return isSendFullFast(gMessageStringTable.getString(blockname));
+ clearMessage();
+ return send_bytes;
}
-BOOL LLMessageSystem::isSendFullFast(const char* blockname)
+
+// This can be called from signal handlers,
+// so should should not use llinfos.
+S32 LLMessageSystem::sendMessage(const LLHost &host)
{
- if(mCurrentSendTotal > MTUBYTES)
+ if (! mMessageBuilder->isBuilt())
{
- return TRUE;
+ mSendSize = mMessageBuilder->buildMessage(mSendBuffer,
+ MAX_BUFFER_SIZE);
}
- if(!blockname)
+
+ if (!(host.isOk())) // if port and ip are zero, don't bother trying to send the message
{
- return FALSE;
- }
- char* bnamep = (char*)blockname;
- S32 max;
-
- LLMessageBlock* template_data = mCurrentSMessageTemplate->mMemberBlocks[bnamep];
-
- switch(template_data->mType)
- {
- case MBT_SINGLE:
- max = 1;
- break;
- case MBT_MULTIPLE:
- max = template_data->mNumber;
- break;
- case MBT_VARIABLE:
- default:
- max = MAX_BLOCKS;
- break;
- }
- if(mCurrentSMessageData->mMemberBlocks[bnamep]->mBlockNumber >= max)
- {
- return TRUE;
- }
- return FALSE;
-}
-
-
-// blow away the last block of a message, return FALSE if that leaves no blocks or there wasn't a block to remove
-BOOL LLMessageSystem::removeLastBlock()
-{
- if (mCurrentSBlockName)
- {
- if ( (mCurrentSMessageData)
- &&(mCurrentSMessageTemplate))
- {
- if (mCurrentSMessageData->mMemberBlocks[mCurrentSBlockName]->mBlockNumber >= 1)
- {
- // At least one block for the current block name.
-
- // Store the current block name for future reference.
- char *block_name = mCurrentSBlockName;
-
- // Decrement the sent total by the size of the
- // data in the message block that we're currently building.
-
- LLMessageBlock* template_data = mCurrentSMessageTemplate->mMemberBlocks[mCurrentSBlockName];
-
- for (LLMessageBlock::message_variable_map_t::iterator iter = template_data->mMemberVariables.begin();
- iter != template_data->mMemberVariables.end(); iter++)
- {
- LLMessageVariable& ci = *(iter->second);
- mCurrentSendTotal -= ci.getSize();
- }
-
-
- // Now we want to find the block that we're blowing away.
-
- // Get the number of blocks.
- LLMsgBlkData* block_data = mCurrentSMessageData->mMemberBlocks[block_name];
- S32 num_blocks = block_data->mBlockNumber;
-
- // Use the same (suspect?) algorithm that's used to generate
- // the names in the nextBlock method to find it.
- char *block_getting_whacked = block_name + num_blocks - 1;
- LLMsgBlkData* whacked_data = mCurrentSMessageData->mMemberBlocks[block_getting_whacked];
- delete whacked_data;
- mCurrentSMessageData->mMemberBlocks.erase(block_getting_whacked);
-
- if (num_blocks <= 1)
- {
- // we just blew away the last one, so return FALSE
- return FALSE;
- }
- else
- {
- // Decrement the counter.
- block_data->mBlockNumber--;
- return TRUE;
- }
- }
- }
- }
- return FALSE;
-}
-
-// make sure that all the desired data is in place and then copy the data into mSendBuffer
-void LLMessageSystem::buildMessage()
-{
- // basic algorithm is to loop through the various pieces, building
- // size and offset info if we encounter a -1 for mSize at any
- // point that variable wasn't given data
-
- // do we have a current message?
- if (!mCurrentSMessageTemplate)
- {
- llerrs << "newMessage not called prior to buildMessage" << llendl;
- return;
- }
-
- // zero out some useful values
-
- // leave room for circuit counter
- mSendSize = LL_PACKET_ID_SIZE;
-
- // encode message number and adjust total_offset
- if (mCurrentSMessageTemplate->mFrequency == MFT_HIGH)
- {
-// old, endian-dependant way
-// memcpy(&mSendBuffer[mSendSize], &mCurrentMessageTemplate->mMessageNumber, sizeof(U8));
-
-// new, independant way
- mSendBuffer[mSendSize] = (U8)mCurrentSMessageTemplate->mMessageNumber;
- mSendSize += sizeof(U8);
- }
- else if (mCurrentSMessageTemplate->mFrequency == MFT_MEDIUM)
- {
- U8 temp = 255;
- memcpy(&mSendBuffer[mSendSize], &temp, sizeof(U8)); /*Flawfinder: ignore*/
- mSendSize += sizeof(U8);
-
- // mask off unsightly bits
- temp = mCurrentSMessageTemplate->mMessageNumber & 255;
- memcpy(&mSendBuffer[mSendSize], &temp, sizeof(U8)); /*Flawfinder: ignore*/
- mSendSize += sizeof(U8);
- }
- else if (mCurrentSMessageTemplate->mFrequency == MFT_LOW)
- {
- U8 temp = 255;
- U16 message_num;
- memcpy(&mSendBuffer[mSendSize], &temp, sizeof(U8)); /*Flawfinder: ignore*/
- mSendSize += sizeof(U8);
- memcpy(&mSendBuffer[mSendSize], &temp, sizeof(U8)); /*Flawfinder: ignore*/
- mSendSize += sizeof(U8);
-
- // mask off unsightly bits
- message_num = mCurrentSMessageTemplate->mMessageNumber & 0xFFFF;
-
- // convert to network byte order
- message_num = htons(message_num);
- memcpy(&mSendBuffer[mSendSize], &message_num, sizeof(U16)); /*Flawfinder: ignore*/
- mSendSize += sizeof(U16);
- }
- else
- {
- llerrs << "unexpected message frequency in buildMessage" << llendl;
- return;
- }
-
- // counting variables used to encode multiple block info
- S32 block_count = 0;
- U8 temp_block_number;
-
- // loop through msg blocks to loop through variables, totalling up size data and copying into mSendBuffer
- for (LLMsgData::msg_blk_data_map_t::iterator
- iter = mCurrentSMessageData->mMemberBlocks.begin(),
- end = mCurrentSMessageData->mMemberBlocks.end();
- iter != end; iter++)
- {
- LLMsgBlkData* mbci = iter->second;
- // do we need to encode a block code?
- if (block_count == 0)
- {
- block_count = mbci->mBlockNumber;
-
- LLMessageBlock* template_data = mCurrentSMessageTemplate->mMemberBlocks[mbci->mName];
-
- // ok, if this is the first block of a repeating pack, set block_count and, if it's type MBT_VARIABLE encode a byte for how many there are
- if (template_data->mType == MBT_VARIABLE)
- {
- // remember that mBlockNumber is a S32
- temp_block_number = (U8)mbci->mBlockNumber;
- if ((S32)(mSendSize + sizeof(U8)) < MAX_BUFFER_SIZE)
- {
- memcpy(&mSendBuffer[mSendSize], &temp_block_number, sizeof(U8)); /* Flawfinder: ignore */
- mSendSize += sizeof(U8);
- }
- else
- {
- // Just reporting error is likely not enough. Need
- // to check how to abort or error out gracefully
- // from this function. XXXTBD
- llerrs << "buildMessage failed. Message excedding"
- " sendBuffersize." << llendl;
- }
- }
- else if (template_data->mType == MBT_MULTIPLE)
- {
- if (block_count != template_data->mNumber)
- {
- // nope! need to fill it in all the way!
- llerrs << "Block " << mbci->mName
- << " is type MBT_MULTIPLE but only has data for "
- << block_count << " out of its "
- << template_data->mNumber << " blocks" << llendl;
- }
- }
- }
-
- // counting down multiple blocks
- block_count--;
-
- // now loop through the variables
- for (LLMsgBlkData::msg_var_data_map_t::iterator iter = mbci->mMemberVarData.begin();
- iter != mbci->mMemberVarData.end(); iter++)
- {
- LLMsgVarData& mvci = *iter;
- if (mvci.getSize() == -1)
- {
- // oops, this variable wasn't ever set!
- llerrs << "The variable " << mvci.getName() << " in block "
- << mbci->mName << " of message "
- << mCurrentSMessageData->mName
- << " wasn't set prior to buildMessage call" << llendl;
- }
- else
- {
- S32 data_size = mvci.getDataSize();
- if(data_size > 0)
- {
- // The type is MVT_VARIABLE, which means that we
- // need to encode a size argument. Otherwise,
- // there is no need.
- S32 size = mvci.getSize();
- U8 sizeb;
- U16 sizeh;
- switch(data_size)
- {
- case 1:
- sizeb = size;
- htonmemcpy(&mSendBuffer[mSendSize], &sizeb, MVT_U8, 1);
- break;
- case 2:
- sizeh = size;
- htonmemcpy(&mSendBuffer[mSendSize], &sizeh, MVT_U16, 2);
- break;
- case 4:
- htonmemcpy(&mSendBuffer[mSendSize], &size, MVT_S32, 4);
- break;
- default:
- llerrs << "Attempting to build variable field with unknown size of " << size << llendl;
- break;
- }
- mSendSize += mvci.getDataSize();
- }
-
- // if there is any data to pack, pack it
- if((mvci.getData() != NULL) && mvci.getSize())
- {
- if(mSendSize + mvci.getSize() < (S32)sizeof(mSendBuffer))
- {
- memcpy( /* Flawfinder: ignore */
- &mSendBuffer[mSendSize],
- mvci.getData(),
- mvci.getSize());
- mSendSize += mvci.getSize();
- }
- else
- {
- // Just reporting error is likely not
- // enough. Need to check how to abort or error
- // out gracefully from this function. XXXTBD
- llerrs << "LLMessageSystem::buildMessage failed. "
- << "Attempted to pack "
- << mSendSize + mvci.getSize()
- << " bytes into a buffer with size "
- << mSendBuffer << "." << llendl
- }
- }
- }
- }
- }
- mbSBuilt = TRUE;
-}
-
-S32 LLMessageSystem::sendReliable(const LLHost &host)
-{
- return sendReliable(host, LL_DEFAULT_RELIABLE_RETRIES, TRUE, LL_PING_BASED_TIMEOUT_DUMMY, NULL, NULL);
-}
-
-
-S32 LLMessageSystem::sendSemiReliable(const LLHost &host, void (*callback)(void **,S32), void ** callback_data)
-{
- F32 timeout;
-
- LLCircuitData *cdp = mCircuitInfo.findCircuit(host);
- if (cdp)
- {
- timeout = llmax(LL_MINIMUM_SEMIRELIABLE_TIMEOUT_SECONDS,
- LL_SEMIRELIABLE_TIMEOUT_FACTOR * cdp->getPingDelayAveraged());
- }
- else
- {
- timeout = LL_SEMIRELIABLE_TIMEOUT_FACTOR * LL_AVERAGED_PING_MAX;
- }
-
- return sendReliable(host, 0, FALSE, timeout, callback, callback_data);
-}
-
-// send the message via a UDP packet
-S32 LLMessageSystem::sendReliable( const LLHost &host,
- S32 retries,
- BOOL ping_based_timeout,
- F32 timeout,
- void (*callback)(void **,S32),
- void ** callback_data)
-{
- if (ping_based_timeout)
- {
- LLCircuitData *cdp = mCircuitInfo.findCircuit(host);
- if (cdp)
- {
- timeout = llmax(LL_MINIMUM_RELIABLE_TIMEOUT_SECONDS, LL_RELIABLE_TIMEOUT_FACTOR * cdp->getPingDelayAveraged());
- }
- else
- {
- timeout = llmax(LL_MINIMUM_RELIABLE_TIMEOUT_SECONDS, LL_RELIABLE_TIMEOUT_FACTOR * LL_AVERAGED_PING_MAX);
- }
- }
-
- mSendReliable = TRUE;
- mReliablePacketParams.set(host, retries, ping_based_timeout, timeout,
- callback, callback_data, mCurrentSMessageName);
- return sendMessage(host);
-}
-
-void LLMessageSystem::forwardMessage(const LLHost &host)
-{
- copyMessageRtoS();
- sendMessage(host);
-}
-
-void LLMessageSystem::forwardReliable(const LLHost &host)
-{
- copyMessageRtoS();
- sendReliable(host);
-}
-
-void LLMessageSystem::forwardReliable(const U32 circuit_code)
-{
- copyMessageRtoS();
- sendReliable(findHost(circuit_code));
-}
-
-S32 LLMessageSystem::flushSemiReliable(const LLHost &host, void (*callback)(void **,S32), void ** callback_data)
-{
- F32 timeout;
-
- LLCircuitData *cdp = mCircuitInfo.findCircuit(host);
- if (cdp)
- {
- timeout = llmax(LL_MINIMUM_SEMIRELIABLE_TIMEOUT_SECONDS,
- LL_SEMIRELIABLE_TIMEOUT_FACTOR * cdp->getPingDelayAveraged());
- }
- else
- {
- timeout = LL_SEMIRELIABLE_TIMEOUT_FACTOR * LL_AVERAGED_PING_MAX;
- }
-
- S32 send_bytes = 0;
- if (mCurrentSendTotal)
- {
- mSendReliable = TRUE;
- // No need for ping-based retry as not going to retry
- mReliablePacketParams.set(host, 0, FALSE, timeout, callback, callback_data, mCurrentSMessageName);
- send_bytes = sendMessage(host);
- clearMessage();
- }
- else
- {
- delete callback_data;
- }
- return send_bytes;
-}
-
-S32 LLMessageSystem::flushReliable(const LLHost &host)
-{
- S32 send_bytes = 0;
- if (mCurrentSendTotal)
- {
- send_bytes = sendReliable(host);
- }
- clearMessage();
- return send_bytes;
-}
-
-
-// This can be called from signal handlers,
-// so should should not use llinfos.
-S32 LLMessageSystem::sendMessage(const LLHost &host)
-{
- if (!mbSBuilt)
- {
- buildMessage();
- }
-
- mCurrentSendTotal = 0;
-
- if (!(host.isOk())) // if port and ip are zero, don't bother trying to send the message
- {
- return 0;
+ return 0;
}
LLCircuitData *cdp = mCircuitInfo.findCircuit(host);
@@ -2992,10 +2027,10 @@ S32 LLMessageSystem::sendMessage(const LLHost &host)
if(mVerboseLog)
{
llinfos << "MSG: -> " << host << "\tUNKNOWN CIRCUIT:\t"
- << mCurrentSMessageName << llendl;
+ << mMessageBuilder->getMessageName() << llendl;
}
llwarns << "sendMessage - Trying to send "
- << mCurrentSMessageName << " on unknown circuit "
+ << mMessageBuilder->getMessageName() << " on unknown circuit "
<< host << llendl;
return 0;
}
@@ -3014,15 +2049,41 @@ S32 LLMessageSystem::sendMessage(const LLHost &host)
if(mVerboseLog)
{
llinfos << "MSG: -> " << host << "\tDEAD CIRCUIT\t\t"
- << mCurrentSMessageName << llendl;
+ << mMessageBuilder->getMessageName() << llendl;
}
llwarns << "sendMessage - Trying to send message "
- << mCurrentSMessageName << " to dead circuit "
+ << mMessageBuilder->getMessageName() << " to dead circuit "
<< host << llendl;
return 0;
}
}
+ // NOTE: babbage: LLSD message -> HTTP, template message -> UDP
+ if(mMessageBuilder == mLLSDMessageBuilder)
+ {
+ LLSD message = mLLSDMessageBuilder->getMessage();
+
+ const LLHTTPSender& sender = LLHTTPSender::getSender(host);
+ LLHTTPClient::ResponderPtr responder = NULL;
+ if(mSendReliable)
+ {
+ responder =
+ new LLFnPtrResponder(mReliablePacketParams.mCallback,
+ mReliablePacketParams.mCallbackData);
+ }
+ else
+ {
+ llwarns << "LLMessageSystem::sendMessage: Sending unreliable " << mMessageBuilder->getMessageName() << " message via HTTP" << llendl;
+ responder = new LLFnPtrResponder(NULL, NULL);
+ }
+ sender.send(host, mLLSDMessageBuilder->getMessageName(),
+ message, responder);
+
+ mSendReliable = FALSE;
+ mReliablePacketParams.clear();
+ return 1;
+ }
+
memset(mSendBuffer,0,LL_PACKET_ID_SIZE); // zero out the packet ID field
// add the send id to the front of the message
@@ -3033,20 +2094,17 @@ S32 LLMessageSystem::sendMessage(const LLHost &host)
// Compress the message, which will usually reduce its size.
U8 * buf_ptr = (U8 *)mSendBuffer;
- S32 buffer_length = mSendSize;
- if(ME_ZEROCODED == mCurrentSMessageTemplate->getEncoding())
- {
- zeroCode(&buf_ptr, &buffer_length);
- }
+ U32 buffer_length = mSendSize;
+ mMessageBuilder->compressMessage(buf_ptr, buffer_length);
if (buffer_length > 1500)
{
- if((mCurrentSMessageName != _PREHASH_ChildAgentUpdate)
- && (mCurrentSMessageName != _PREHASH_SendXferPacket))
+ if((mMessageBuilder->getMessageName() != _PREHASH_ChildAgentUpdate)
+ && (mMessageBuilder->getMessageName() != _PREHASH_SendXferPacket))
{
llwarns << "sendMessage - Trying to send "
<< ((buffer_length > 4000) ? "EXTRA " : "")
- << "BIG message " << mCurrentSMessageName << " - "
+ << "BIG message " << mMessageBuilder->getMessageName() << " - "
<< buffer_length << llendl;
}
}
@@ -3071,7 +2129,7 @@ S32 LLMessageSystem::sendMessage(const LLHost &host)
BOOL is_ack_appended = FALSE;
std::vector acks;
if((space_left > 0) && (ack_count > 0) &&
- (mCurrentSMessageName != _PREHASH_PacketAck))
+ (mMessageBuilder->getMessageName() != _PREHASH_PacketAck))
{
buf_ptr[0] |= LL_ACK_FLAG;
S32 append_ack_count = llmin(space_left, ack_count);
@@ -3142,7 +2200,7 @@ S32 LLMessageSystem::sendMessage(const LLHost &host)
char buffer[MAX_STRING]; /* Flawfinder: ignore */
snprintf(buffer, MAX_STRING, "\t%6d\t%6d\t%6d ", mSendSize, buffer_length, cdp->getPacketOutID()); /* Flawfinder: ignore */
str << buffer
- << mCurrentSMessageTemplate->mName
+ << mMessageBuilder->getMessageName()
<< (mSendReliable ? " reliable " : "");
if(is_ack_appended)
{
@@ -3153,117 +2211,48 @@ S32 LLMessageSystem::sendMessage(const LLHost &host)
llinfos << str.str() << llendl;
}
- lldebugst(LLERR_MESSAGE) << "MessageSent at: " << (S32)totalTime()
- << ", " << mCurrentSMessageTemplate->mName
- << " to " << host
- << llendl;
-
- // ok, clean up temp data
- delete mCurrentSMessageData;
- mCurrentSMessageData = NULL;
+ /*lldebugst(LLERR_MESSAGE) << "MessageSent at: " << (S32)totalTime()
+ << "," << mMessageBuilder->getMessageName()
+ << " to " << host
+ << llendl;*/
mPacketsOut++;
mBytesOut += buffer_length;
+ mSendReliable = FALSE;
+ mReliablePacketParams.clear();
return buffer_length;
}
-
-// Returns template for the message contained in buffer
-BOOL LLMessageSystem::decodeTemplate(
- const U8* buffer, S32 buffer_size, // inputs
- LLMessageTemplate** msg_template ) // outputs
+void LLMessageSystem::logMsgFromInvalidCircuit( const LLHost& host, BOOL recv_reliable )
{
- const U8* header = buffer + LL_PACKET_ID_SIZE;
-
- // is there a message ready to go?
- if (buffer_size <= 0)
+ if(mVerboseLog)
{
- llwarns << "No message waiting for decode!" << llendl;
- return(FALSE);
+ std::ostringstream str;
+ str << "MSG: <- " << host;
+ char buffer[MAX_STRING]; /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "\t%6d\t%6d\t%6d ", mMessageReader->getMessageSize(), (mIncomingCompressedSize ? mIncomingCompressedSize: mMessageReader->getMessageSize()), mCurrentRecvPacketID); /* Flawfinder: ignore */
+ str << buffer
+ << mMessageReader->getMessageName()
+ << (recv_reliable ? " reliable" : "")
+ << " REJECTED";
+ llinfos << str.str() << llendl;
}
+ // nope!
+ // cout << "Rejecting unexpected message " << mCurrentMessageTemplate->mName << " from " << hex << ip << " , " << dec << port << endl;
- U32 num = 0;
-
- if (header[0] != 255)
+ // Keep track of rejected messages as well
+ if (mNumMessageCounts >= MAX_MESSAGE_COUNT_NUM)
{
- // high frequency message
- num = header[0];
+ llwarns << "Got more than " << MAX_MESSAGE_COUNT_NUM << " packets without clearing counts" << llendl;
}
- else if ((buffer_size >= ((S32) LL_MINIMUM_VALID_PACKET_SIZE + 1)) && (header[1] != 255))
+ else
{
- // medium frequency message
- num = (255 << 8) | header[1];
- }
- else if ((buffer_size >= ((S32) LL_MINIMUM_VALID_PACKET_SIZE + 3)) && (header[1] == 255))
- {
- // low frequency message
- U16 message_id_U16 = 0;
- // I think this check busts the message system.
- // it appears that if there is a NULL in the message #, it won't copy it....
- // what was the goal?
- //if(header[2])
- memcpy(&message_id_U16, &header[2], 2); /* Flawfinder: ignore */
-
- // dependant on endian-ness:
- // U32 temp = (255 << 24) | (255 << 16) | header[2];
-
- // independant of endian-ness:
- message_id_U16 = ntohs(message_id_U16);
- num = 0xFFFF0000 | message_id_U16;
- }
- else // bogus packet received (too short)
- {
- llwarns << "Packet with unusable length received (too short): "
- << buffer_size << llendl;
- return(FALSE);
- }
-
- LLMessageTemplate* temp = get_ptr_in_map(mMessageNumbers,num);
- if (temp)
- {
- *msg_template = temp;
- }
- else
- {
- llwarns << "Message #" << std::hex << num << std::dec
- << " received but not registered!" << llendl;
- callExceptionFunc(MX_UNREGISTERED_MESSAGE);
- return(FALSE);
- }
-
- return(TRUE);
-}
-
-
-void LLMessageSystem::logMsgFromInvalidCircuit( const LLHost& host, BOOL recv_reliable )
-{
- if(mVerboseLog)
- {
- std::ostringstream str;
- str << "MSG: <- " << host;
- char buffer[MAX_STRING]; /* Flawfinder: ignore */
- snprintf(buffer, MAX_STRING, "\t%6d\t%6d\t%6d ", mReceiveSize, (mIncomingCompressedSize ? mIncomingCompressedSize: mReceiveSize), mCurrentRecvPacketID); /* Flawfinder: ignore */
- str << buffer
- << mCurrentRMessageTemplate->mName
- << (recv_reliable ? " reliable" : "")
- << " REJECTED";
- llinfos << str.str() << llendl;
- }
- // nope!
- // cout << "Rejecting unexpected message " << mCurrentMessageTemplate->mName << " from " << hex << ip << " , " << dec << port << endl;
-
- // Keep track of rejected messages as well
- if (mNumMessageCounts >= MAX_MESSAGE_COUNT_NUM)
- {
- llwarns << "Got more than " << MAX_MESSAGE_COUNT_NUM << " packets without clearing counts" << llendl;
- }
- else
- {
- mMessageCountList[mNumMessageCounts].mMessageNum = mCurrentRMessageTemplate->mMessageNumber;
- mMessageCountList[mNumMessageCounts].mMessageBytes = mReceiveSize;
- mMessageCountList[mNumMessageCounts].mInvalid = TRUE;
- mNumMessageCounts++;
+ // TODO: babbage: work out if we need these
+ // mMessageCountList[mNumMessageCounts].mMessageNum = mCurrentRMessageTemplate->mMessageNumber;
+ mMessageCountList[mNumMessageCounts].mMessageBytes = mMessageReader->getMessageSize();
+ mMessageCountList[mNumMessageCounts].mInvalid = TRUE;
+ mNumMessageCounts++;
}
}
@@ -3271,11 +2260,11 @@ void LLMessageSystem::logTrustedMsgFromUntrustedCircuit( const LLHost& host )
{
// RequestTrustedCircuit is how we establish trust, so don't spam
// if it's received on a trusted circuit. JC
- if (strcmp(mCurrentRMessageTemplate->mName, "RequestTrustedCircuit"))
+ if (strcmp(mMessageReader->getMessageName(), "RequestTrustedCircuit"))
{
llwarns << "Received trusted message on untrusted circuit. "
<< "Will reply with deny. "
- << "Message: " << mCurrentRMessageTemplate->mName
+ << "Message: " << mMessageReader->getMessageName()
<< " Host: " << host << llendl;
}
@@ -3287,10 +2276,11 @@ void LLMessageSystem::logTrustedMsgFromUntrustedCircuit( const LLHost& host )
}
else
{
- mMessageCountList[mNumMessageCounts].mMessageNum
- = mCurrentRMessageTemplate->mMessageNumber;
+ // TODO: babbage: work out if we need these
+ //mMessageCountList[mNumMessageCounts].mMessageNum
+ // = mCurrentRMessageTemplate->mMessageNumber;
mMessageCountList[mNumMessageCounts].mMessageBytes
- = mReceiveSize;
+ = mMessageReader->getMessageSize();
mMessageCountList[mNumMessageCounts].mInvalid = TRUE;
mNumMessageCounts++;
}
@@ -3304,8 +2294,9 @@ void LLMessageSystem::logValidMsg(LLCircuitData *cdp, const LLHost& host, BOOL r
}
else
{
- mMessageCountList[mNumMessageCounts].mMessageNum = mCurrentRMessageTemplate->mMessageNumber;
- mMessageCountList[mNumMessageCounts].mMessageBytes = mReceiveSize;
+ // TODO: babbage: work out if we need these
+ //mMessageCountList[mNumMessageCounts].mMessageNum = mCurrentRMessageTemplate->mMessageNumber;
+ mMessageCountList[mNumMessageCounts].mMessageBytes = mMessageReader->getMessageSize();
mMessageCountList[mNumMessageCounts].mInvalid = FALSE;
mNumMessageCounts++;
}
@@ -3322,9 +2313,9 @@ void LLMessageSystem::logValidMsg(LLCircuitData *cdp, const LLHost& host, BOOL r
std::ostringstream str;
str << "MSG: <- " << host;
char buffer[MAX_STRING]; /* Flawfinder: ignore */
- snprintf(buffer, MAX_STRING, "\t%6d\t%6d\t%6d ", mReceiveSize, (mIncomingCompressedSize ? mIncomingCompressedSize : mReceiveSize), mCurrentRecvPacketID); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "\t%6d\t%6d\t%6d ", mMessageReader->getMessageSize(), (mIncomingCompressedSize ? mIncomingCompressedSize : mMessageReader->getMessageSize()), mCurrentRecvPacketID); /* Flawfinder: ignore */
str << buffer
- << mCurrentRMessageTemplate->mName
+ << mMessageReader->getMessageName()
<< (recv_reliable ? " reliable" : "")
<< (recv_resent ? " resent" : "")
<< (recv_acks ? " acks" : "");
@@ -3332,627 +2323,211 @@ void LLMessageSystem::logValidMsg(LLCircuitData *cdp, const LLHost& host, BOOL r
}
}
-
-void LLMessageSystem::logRanOffEndOfPacket( const LLHost& host )
+void LLMessageSystem::sanityCheck()
{
- // we've run off the end of the packet!
- llwarns << "Ran off end of packet " << mCurrentRMessageTemplate->mName
- << " with id " << mCurrentRecvPacketID << " from " << host
- << llendl;
- if(mVerboseLog)
- {
- llinfos << "MSG: -> " << host << "\tREAD PAST END:\t"
- << mCurrentRecvPacketID << " "
- << mCurrentSMessageTemplate->mName << llendl;
- }
- callExceptionFunc(MX_RAN_OFF_END_OF_PACKET);
-}
+// TODO: babbage: reinstate
+// if (!mCurrentRMessageData)
+// {
+// llerrs << "mCurrentRMessageData is NULL" << llendl;
+// }
-// decode a given message
-BOOL LLMessageSystem::decodeData(const U8* buffer, const LLHost& sender )
-{
- llassert( mReceiveSize >= 0 );
- llassert( mCurrentRMessageTemplate);
- llassert( !mCurrentRMessageData );
- delete mCurrentRMessageData; // just to make sure
+// if (!mCurrentRMessageTemplate)
+// {
+// llerrs << "mCurrentRMessageTemplate is NULL" << llendl;
+// }
- S32 decode_pos = LL_PACKET_ID_SIZE + (S32)(mCurrentRMessageTemplate->mFrequency);
+// if (!mCurrentRTemplateBlock)
+// {
+// llerrs << "mCurrentRTemplateBlock is NULL" << llendl;
+// }
- // create base working data set
- mCurrentRMessageData = new LLMsgData(mCurrentRMessageTemplate->mName);
-
- // loop through the template building the data structure as we go
- for (LLMessageTemplate::message_block_map_t::iterator iter = mCurrentRMessageTemplate->mMemberBlocks.begin();
- iter != mCurrentRMessageTemplate->mMemberBlocks.end(); iter++)
- {
- LLMessageBlock* mbci = iter->second;
- U8 repeat_number;
- S32 i;
+// if (!mCurrentRDataBlock)
+// {
+// llerrs << "mCurrentRDataBlock is NULL" << llendl;
+// }
- // how many of this block?
+// if (!mCurrentSMessageData)
+// {
+// llerrs << "mCurrentSMessageData is NULL" << llendl;
+// }
- if (mbci->mType == MBT_SINGLE)
- {
- // just one
- repeat_number = 1;
- }
- else if (mbci->mType == MBT_MULTIPLE)
- {
- // a known number
- repeat_number = mbci->mNumber;
- }
- else if (mbci->mType == MBT_VARIABLE)
- {
- // need to read the number from the message
- // repeat number is a single byte
- if (decode_pos >= mReceiveSize)
- {
- logRanOffEndOfPacket( sender );
- return FALSE;
- }
- repeat_number = buffer[decode_pos];
- decode_pos++;
- }
- else
- {
- llerrs << "Unknown block type" << llendl;
- return FALSE;
- }
+// if (!mCurrentSMessageTemplate)
+// {
+// llerrs << "mCurrentSMessageTemplate is NULL" << llendl;
+// }
- LLMsgBlkData* cur_data_block = NULL;
+// if (!mCurrentSTemplateBlock)
+// {
+// llerrs << "mCurrentSTemplateBlock is NULL" << llendl;
+// }
- // now loop through the block
- for (i = 0; i < repeat_number; i++)
- {
- if (i)
- {
- // build new name to prevent collisions
- // TODO: This should really change to a vector
- cur_data_block = new LLMsgBlkData(mbci->mName, repeat_number);
- cur_data_block->mName = mbci->mName + i;
- }
- else
- {
- cur_data_block = new LLMsgBlkData(mbci->mName, repeat_number);
- }
+// if (!mCurrentSDataBlock)
+// {
+// llerrs << "mCurrentSDataBlock is NULL" << llendl;
+// }
+}
- // add the block to the message
- mCurrentRMessageData->addBlock(cur_data_block);
+void LLMessageSystem::showCircuitInfo()
+{
+ llinfos << mCircuitInfo << llendl;
+}
- // now read the variables
- for (LLMessageBlock::message_variable_map_t::iterator iter = mbci->mMemberVariables.begin();
- iter != mbci->mMemberVariables.end(); iter++)
- {
- LLMessageVariable& mvci = *(iter->second);
- // ok, build out the variables
- // add variable block
- cur_data_block->addVariable(mvci.getName(), mvci.getType());
- // what type of variable?
- if (mvci.getType() == MVT_VARIABLE)
- {
- // variable, get the number of bytes to read from the template
- S32 data_size = mvci.getSize();
- U8 tsizeb = 0;
- U16 tsizeh = 0;
- U32 tsize = 0;
+void LLMessageSystem::dumpCircuitInfo()
+{
+ lldebugst(LLERR_CIRCUIT_INFO) << mCircuitInfo << llendl;
+}
- if ((decode_pos + data_size) > mReceiveSize)
- {
- logRanOffEndOfPacket( sender );
- return FALSE;
- }
- switch(data_size)
- {
- case 1:
- htonmemcpy(&tsizeb, &buffer[decode_pos], MVT_U8, 1);
- tsize = tsizeb;
- break;
- case 2:
- htonmemcpy(&tsizeh, &buffer[decode_pos], MVT_U16, 2);
- tsize = tsizeh;
- break;
- case 4:
- htonmemcpy(&tsizeb, &buffer[decode_pos], MVT_U32, 4);
- break;
- default:
- llerrs << "Attempting to read variable field with unknown size of " << data_size << llendl;
- break;
-
- }
- decode_pos += data_size;
+/* virtual */
+U32 LLMessageSystem::getOurCircuitCode()
+{
+ return mOurCircuitCode;
+}
- if ((decode_pos + (S32)tsize) > mReceiveSize)
- {
- logRanOffEndOfPacket( sender );
- return FALSE;
- }
- cur_data_block->addData(mvci.getName(), &buffer[decode_pos], tsize, mvci.getType());
- decode_pos += tsize;
- }
- else
- {
- // fixed!
- // so, copy data pointer and set data size to fixed size
+LLString LLMessageSystem::getCircuitInfoString()
+{
+ LLString info_string;
- if ((decode_pos + mvci.getSize()) > mReceiveSize)
- {
- logRanOffEndOfPacket( sender );
- return FALSE;
- }
+ info_string += mCircuitInfo.getInfoString();
+ return info_string;
+}
- cur_data_block->addData(mvci.getName(), &buffer[decode_pos], mvci.getSize(), mvci.getType());
- decode_pos += mvci.getSize();
- }
- }
- }
+// returns whether the given host is on a trusted circuit
+BOOL LLMessageSystem::getCircuitTrust(const LLHost &host)
+{
+ LLCircuitData *cdp = mCircuitInfo.findCircuit(host);
+ if (cdp)
+ {
+ return cdp->getTrusted();
}
- if (mCurrentRMessageData->mMemberBlocks.empty()
- && !mCurrentRMessageTemplate->mMemberBlocks.empty())
+ return FALSE;
+}
+
+// Activate a circuit, and set its trust level (TRUE if trusted,
+// FALSE if not).
+void LLMessageSystem::enableCircuit(const LLHost &host, BOOL trusted)
+{
+ LLCircuitData *cdp = mCircuitInfo.findCircuit(host);
+ if (!cdp)
{
- lldebugs << "Empty message '" << mCurrentRMessageTemplate->mName << "' (no blocks)" << llendl;
- return FALSE;
+ cdp = mCircuitInfo.addCircuitData(host, 0);
}
-
+ else
{
- static LLTimer decode_timer;
+ cdp->setAlive(TRUE);
+ }
+ cdp->setTrusted(trusted);
+}
- if( mTimeDecodes )
- {
- decode_timer.reset();
- }
+void LLMessageSystem::disableCircuit(const LLHost &host)
+{
+ llinfos << "LLMessageSystem::disableCircuit for " << host << llendl;
+ U32 code = gMessageSystem->findCircuitCode( host );
- // if( mCurrentRMessageTemplate->mName == _PREHASH_AgentToNewRegion )
- // {
- // VTResume(); // VTune
- // }
+ // Don't need to do this, as we're removing the circuit info anyway - djs 01/28/03
+ // don't clean up 0 circuit code entries
+ // because many hosts (neighbor sims, etc) can have the 0 circuit
+ if (code)
+ {
+ //if (mCircuitCodes.checkKey(code))
+ code_session_map_t::iterator it = mCircuitCodes.find(code);
+ if(it != mCircuitCodes.end())
{
- LLFastTimer t(LLFastTimer::FTM_PROCESS_MESSAGES);
- if( !mCurrentRMessageTemplate->callHandlerFunc(this) )
- {
- llwarns << "Message from " << sender << " with no handler function received: " << mCurrentRMessageTemplate->mName << llendl;
- }
+ llinfos << "Circuit " << code << " removed from list" << llendl;
+ //mCircuitCodes.removeData(code);
+ mCircuitCodes.erase(it);
}
- // if( mCurrentRMessageTemplate->mName == _PREHASH_AgentToNewRegion )
- // {
- // VTPause(); // VTune
- // }
-
- if( mTimeDecodes )
+ U64 ip_port = 0;
+ std::map::iterator iter = gMessageSystem->mCircuitCodeToIPPort.find(code);
+ if (iter != gMessageSystem->mCircuitCodeToIPPort.end())
{
- F32 decode_time = decode_timer.getElapsedTimeF32();
- mCurrentRMessageTemplate->mDecodeTimeThisFrame += decode_time;
-
- mCurrentRMessageTemplate->mTotalDecoded++;
- mCurrentRMessageTemplate->mTotalDecodeTime += decode_time;
+ ip_port = iter->second;
- if( mCurrentRMessageTemplate->mMaxDecodeTimePerMsg < decode_time )
- {
- mCurrentRMessageTemplate->mMaxDecodeTimePerMsg = decode_time;
- }
+ gMessageSystem->mCircuitCodeToIPPort.erase(iter);
+ U32 old_port = (U32)(ip_port & (U64)0xFFFFFFFF);
+ U32 old_ip = (U32)(ip_port >> 32);
- if( decode_time > mTimeDecodesSpamThreshold )
- {
- lldebugs << "--------- Message " << mCurrentRMessageTemplate->mName << " decode took " << decode_time << " seconds. (" <<
- mCurrentRMessageTemplate->mMaxDecodeTimePerMsg << " max, " <<
- (mCurrentRMessageTemplate->mTotalDecodeTime / mCurrentRMessageTemplate->mTotalDecoded) << " avg)" << llendl;
- }
+ llinfos << "Host " << LLHost(old_ip, old_port) << " circuit " << code << " removed from lookup table" << llendl;
+ gMessageSystem->mIPPortToCircuitCode.erase(ip_port);
}
}
- return TRUE;
+ else
+ {
+ // Sigh, since we can open circuits which don't have circuit
+ // codes, it's possible for this to happen...
+
+ //llwarns << "Couldn't find circuit code for " << host << llendl;
+ }
+
+ mCircuitInfo.removeCircuitData(host);
}
-void LLMessageSystem::getDataFast(const char *blockname, const char *varname, void *datap, S32 size, S32 blocknum, S32 max_size)
+
+void LLMessageSystem::setCircuitAllowTimeout(const LLHost &host, BOOL allow)
{
- // is there a message ready to go?
- if (mReceiveSize == -1)
+ LLCircuitData *cdp = mCircuitInfo.findCircuit(host);
+ if (cdp)
{
- llerrs << "No message waiting for decode 2!" << llendl;
- return;
+ cdp->setAllowTimeout(allow);
}
+}
- if (!mCurrentRMessageData)
+void LLMessageSystem::setCircuitTimeoutCallback(const LLHost &host, void (*callback_func)(const LLHost & host, void *user_data), void *user_data)
+{
+ LLCircuitData *cdp = mCircuitInfo.findCircuit(host);
+ if (cdp)
{
- llerrs << "Invalid mCurrentMessageData in getData!" << llendl;
- return;
+ cdp->setTimeoutCallback(callback_func, user_data);
}
+}
- char *bnamep = (char *)blockname + blocknum; // this works because it's just a hash. The bnamep is never derefference
- char *vnamep = (char *)varname;
-
- LLMsgData::msg_blk_data_map_t::iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep);
-
- if (iter == mCurrentRMessageData->mMemberBlocks.end())
- {
- llerrs << "Block " << blockname << " #" << blocknum
- << " not in message " << mCurrentRMessageData->mName << llendl;
- return;
- }
- LLMsgBlkData *msg_block_data = iter->second;
- LLMsgVarData& vardata = msg_block_data->mMemberVarData[vnamep];
+BOOL LLMessageSystem::checkCircuitBlocked(const U32 circuit)
+{
+ LLHost host = findHost(circuit);
- if (!vardata.getName())
+ if (!host.isOk())
{
- llerrs << "Variable "<< vnamep << " not in message "
- << mCurrentRMessageData->mName<< " block " << bnamep << llendl;
- return;
+ //llinfos << "checkCircuitBlocked: Unknown circuit " << circuit << llendl;
+ return TRUE;
}
- if (size && size != vardata.getSize())
+ LLCircuitData *cdp = mCircuitInfo.findCircuit(host);
+ if (cdp)
{
- llerrs << "Msg " << mCurrentRMessageData->mName
- << " variable " << vnamep
- << " is size " << vardata.getSize()
- << " but copying into buffer of size " << size
- << llendl;
- return;
- }
-
-
- const S32 vardata_size = vardata.getSize();
- if( max_size >= vardata_size )
- {
- switch( vardata_size )
- {
- case 1:
- *((U8*)datap) = *((U8*)vardata.getData());
- break;
- case 2:
- *((U16*)datap) = *((U16*)vardata.getData());
- break;
- case 4:
- *((U32*)datap) = *((U32*)vardata.getData());
- break;
- case 8:
- ((U32*)datap)[0] = ((U32*)vardata.getData())[0];
- ((U32*)datap)[1] = ((U32*)vardata.getData())[1];
- break;
- default:
- memcpy(datap, vardata.getData(), vardata_size); /* Flawfinder: ignore */
- break;
- }
+ return cdp->isBlocked();
}
else
{
- llwarns << "Msg " << mCurrentRMessageData->mName
- << " variable " << vnamep
- << " is size " << vardata.getSize()
- << " but truncated to max size of " << max_size
- << llendl;
-
- memcpy(datap, vardata.getData(), max_size); /* Flawfinder: ignore */
+ llinfos << "checkCircuitBlocked(circuit): Unknown host - " << host << llendl;
+ return FALSE;
}
}
-S32 LLMessageSystem::getNumberOfBlocksFast(const char *blockname)
+BOOL LLMessageSystem::checkCircuitAlive(const U32 circuit)
{
- // is there a message ready to go?
- if (mReceiveSize == -1)
+ LLHost host = findHost(circuit);
+
+ if (!host.isOk())
{
- llerrs << "No message waiting for decode 3!" << llendl;
- return -1;
+ //llinfos << "checkCircuitAlive: Unknown circuit " << circuit << llendl;
+ return FALSE;
}
- if (!mCurrentRMessageData)
+ LLCircuitData *cdp = mCircuitInfo.findCircuit(host);
+ if (cdp)
{
- llerrs << "Invalid mCurrentRMessageData in getData!" << llendl;
- return -1;
+ return cdp->isAlive();
}
-
- char *bnamep = (char *)blockname;
-
- LLMsgData::msg_blk_data_map_t::iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep);
-
- if (iter == mCurrentRMessageData->mMemberBlocks.end())
+ else
{
-// sprintf(errmsg, "Block %s not in message %s", bnamep, mCurrentRMessageData->mName);
-// llerrs << errmsg << llendl;
-// return -1;
- return 0;
- }
-
- return (iter->second)->mBlockNumber;
-}
-
-S32 LLMessageSystem::getSizeFast(const char *blockname, const char *varname)
-{
- // is there a message ready to go?
- if (mReceiveSize == -1)
- {
- llerrs << "No message waiting for decode 4!" << llendl;
- return -1;
- }
-
- if (!mCurrentRMessageData)
- {
- llerrs << "Invalid mCurrentRMessageData in getData!" << llendl;
- return -1;
- }
-
- char *bnamep = (char *)blockname;
-
- LLMsgData::msg_blk_data_map_t::iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep);
-
- if (iter == mCurrentRMessageData->mMemberBlocks.end())
- {
- llerrs << "Block " << bnamep << " not in message "
- << mCurrentRMessageData->mName << llendl;
- return -1;
- }
-
- char *vnamep = (char *)varname;
-
- LLMsgBlkData* msg_data = iter->second;
- LLMsgVarData& vardata = msg_data->mMemberVarData[vnamep];
-
- if (!vardata.getName())
- {
- llerrs << "Variable " << varname << " not in message "
- << mCurrentRMessageData->mName << " block " << bnamep << llendl;
- return -1;
- }
-
- if (mCurrentRMessageTemplate->mMemberBlocks[bnamep]->mType != MBT_SINGLE)
- {
- llerrs << "Block " << bnamep << " isn't type MBT_SINGLE,"
- " use getSize with blocknum argument!" << llendl;
- return -1;
- }
-
- return vardata.getSize();
-}
-
-
-S32 LLMessageSystem::getSizeFast(const char *blockname, S32 blocknum, const char *varname)
-{
- // is there a message ready to go?
- if (mReceiveSize == -1)
- {
- llerrs << "No message waiting for decode 5!" << llendl;
- return -1;
- }
-
- if (!mCurrentRMessageData)
- {
- llerrs << "Invalid mCurrentRMessageData in getData!" << llendl;
- return -1;
- }
-
- char *bnamep = (char *)blockname + blocknum;
- char *vnamep = (char *)varname;
-
- LLMsgData::msg_blk_data_map_t::iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep);
-
- if (iter == mCurrentRMessageData->mMemberBlocks.end())
- {
- llerrs << "Block " << bnamep << " not in message "
- << mCurrentRMessageData->mName << llendl;
- return -1;
- }
-
- LLMsgBlkData* msg_data = iter->second;
- LLMsgVarData& vardata = msg_data->mMemberVarData[vnamep];
-
- if (!vardata.getName())
- {
- llerrs << "Variable " << vnamep << " not in message "
- << mCurrentRMessageData->mName << " block " << bnamep << llendl;
- return -1;
- }
-
- return vardata.getSize();
-}
-
-
-void LLMessageSystem::sanityCheck()
-{
- if (!mCurrentRMessageData)
- {
- llerrs << "mCurrentRMessageData is NULL" << llendl;
- }
-
- if (!mCurrentRMessageTemplate)
- {
- llerrs << "mCurrentRMessageTemplate is NULL" << llendl;
- }
-
-// if (!mCurrentRTemplateBlock)
-// {
-// llerrs << "mCurrentRTemplateBlock is NULL" << llendl;
-// }
-
-// if (!mCurrentRDataBlock)
-// {
-// llerrs << "mCurrentRDataBlock is NULL" << llendl;
-// }
-
- if (!mCurrentSMessageData)
- {
- llerrs << "mCurrentSMessageData is NULL" << llendl;
- }
-
- if (!mCurrentSMessageTemplate)
- {
- llerrs << "mCurrentSMessageTemplate is NULL" << llendl;
- }
-
-// if (!mCurrentSTemplateBlock)
-// {
-// llerrs << "mCurrentSTemplateBlock is NULL" << llendl;
-// }
-
- if (!mCurrentSDataBlock)
- {
- llerrs << "mCurrentSDataBlock is NULL" << llendl;
- }
-}
-
-void LLMessageSystem::showCircuitInfo()
-{
- llinfos << mCircuitInfo << llendl;
-}
-
-
-void LLMessageSystem::dumpCircuitInfo()
-{
- lldebugst(LLERR_CIRCUIT_INFO) << mCircuitInfo << llendl;
-}
-
-/* virtual */
-U32 LLMessageSystem::getOurCircuitCode()
-{
- return mOurCircuitCode;
-}
-
-LLString LLMessageSystem::getCircuitInfoString()
-{
- LLString info_string;
-
- info_string += mCircuitInfo.getInfoString();
- return info_string;
-}
-
-// returns whether the given host is on a trusted circuit
-BOOL LLMessageSystem::getCircuitTrust(const LLHost &host)
-{
- LLCircuitData *cdp = mCircuitInfo.findCircuit(host);
- if (cdp)
- {
- return cdp->getTrusted();
- }
-
- return FALSE;
-}
-
-// Activate a circuit, and set its trust level (TRUE if trusted,
-// FALSE if not).
-void LLMessageSystem::enableCircuit(const LLHost &host, BOOL trusted)
-{
- LLCircuitData *cdp = mCircuitInfo.findCircuit(host);
- if (!cdp)
- {
- cdp = mCircuitInfo.addCircuitData(host, 0);
- }
- else
- {
- cdp->setAlive(TRUE);
- }
- cdp->setTrusted(trusted);
-}
-
-void LLMessageSystem::disableCircuit(const LLHost &host)
-{
- llinfos << "LLMessageSystem::disableCircuit for " << host << llendl;
- U32 code = gMessageSystem->findCircuitCode( host );
-
- // Don't need to do this, as we're removing the circuit info anyway - djs 01/28/03
-
- // don't clean up 0 circuit code entries
- // because many hosts (neighbor sims, etc) can have the 0 circuit
- if (code)
- {
- //if (mCircuitCodes.checkKey(code))
- code_session_map_t::iterator it = mCircuitCodes.find(code);
- if(it != mCircuitCodes.end())
- {
- llinfos << "Circuit " << code << " removed from list" << llendl;
- //mCircuitCodes.removeData(code);
- mCircuitCodes.erase(it);
- }
-
- U64 ip_port = 0;
- std::map::iterator iter = gMessageSystem->mCircuitCodeToIPPort.find(code);
- if (iter != gMessageSystem->mCircuitCodeToIPPort.end())
- {
- ip_port = iter->second;
-
- gMessageSystem->mCircuitCodeToIPPort.erase(iter);
-
- U32 old_port = (U32)(ip_port & (U64)0xFFFFFFFF);
- U32 old_ip = (U32)(ip_port >> 32);
-
- llinfos << "Host " << LLHost(old_ip, old_port) << " circuit " << code << " removed from lookup table" << llendl;
- gMessageSystem->mIPPortToCircuitCode.erase(ip_port);
- }
- }
- else
- {
- // Sigh, since we can open circuits which don't have circuit
- // codes, it's possible for this to happen...
-
- //llwarns << "Couldn't find circuit code for " << host << llendl;
- }
-
- mCircuitInfo.removeCircuitData(host);
-}
-
-
-void LLMessageSystem::setCircuitAllowTimeout(const LLHost &host, BOOL allow)
-{
- LLCircuitData *cdp = mCircuitInfo.findCircuit(host);
- if (cdp)
- {
- cdp->setAllowTimeout(allow);
- }
-}
-
-void LLMessageSystem::setCircuitTimeoutCallback(const LLHost &host, void (*callback_func)(const LLHost & host, void *user_data), void *user_data)
-{
- LLCircuitData *cdp = mCircuitInfo.findCircuit(host);
- if (cdp)
- {
- cdp->setTimeoutCallback(callback_func, user_data);
- }
-}
-
-
-BOOL LLMessageSystem::checkCircuitBlocked(const U32 circuit)
-{
- LLHost host = findHost(circuit);
-
- if (!host.isOk())
- {
- //llinfos << "checkCircuitBlocked: Unknown circuit " << circuit << llendl;
- return TRUE;
- }
-
- LLCircuitData *cdp = mCircuitInfo.findCircuit(host);
- if (cdp)
- {
- return cdp->isBlocked();
- }
- else
- {
- llinfos << "checkCircuitBlocked(circuit): Unknown host - " << host << llendl;
- return FALSE;
- }
-}
-
-BOOL LLMessageSystem::checkCircuitAlive(const U32 circuit)
-{
- LLHost host = findHost(circuit);
-
- if (!host.isOk())
- {
- //llinfos << "checkCircuitAlive: Unknown circuit " << circuit << llendl;
- return FALSE;
- }
-
- LLCircuitData *cdp = mCircuitInfo.findCircuit(host);
- if (cdp)
- {
- return cdp->isAlive();
- }
- else
- {
- llinfos << "checkCircuitAlive(circuit): Unknown host - " << host << llendl;
- return FALSE;
+ llinfos << "checkCircuitAlive(circuit): Unknown host - " << host << llendl;
+ return FALSE;
}
}
@@ -4176,7 +2751,8 @@ bool LLMessageSystem::addCircuitCode(U32 code, const LLUUID& session_id)
//}
// static
-void LLMessageSystem::processUseCircuitCode(LLMessageSystem* msg, void**)
+void LLMessageSystem::processUseCircuitCode(LLMessageSystem* msg,
+ void** user)
{
U32 circuit_code_in;
msg->getU32Fast(_PREHASH_CircuitCode, _PREHASH_Code, circuit_code_in);
@@ -4296,6 +2872,13 @@ void LLMessageSystem::processUseCircuitCode(LLMessageSystem* msg, void**)
llinfos << "Circuit code " << circuit_code_in << " from "
<< msg->getSender() << " for agent " << id << " in session "
<< session_id << llendl;
+
+ const LLUseCircuitCodeResponder* responder =
+ (const LLUseCircuitCodeResponder*) user;
+ if(responder)
+ {
+ responder->complete(msg->getSender(), id);
+ }
}
else
{
@@ -4303,10 +2886,53 @@ void LLMessageSystem::processUseCircuitCode(LLMessageSystem* msg, void**)
}
}
+static LLHTTPNode& messageRootNode()
+{
+ static LLHTTPNode root_node;
+ static bool initialized = false;
+ if (!initialized) {
+ initialized = true;
+ LLHTTPRegistrar::buildAllServices(root_node);
+ }
+ return root_node;
+}
-static void check_for_unrecognized_messages(
- const char* type,
+//static
+void LLMessageSystem::dispatch(const std::string& msg_name,
+ const LLSD& message)
+{
+ LLPointer responsep = LLSimpleResponse::create();
+ dispatch(msg_name, message, responsep);
+}
+
+//static
+void LLMessageSystem::dispatch(const std::string& msg_name,
+ const LLSD& message,
+ LLHTTPNode::ResponsePtr responsep)
+{
+ if (msg_name.empty())
+ {
+ llwarns << "LLMessageService::dispatch called with no message name"
+ << llendl;
+ return;
+ }
+
+ std::string path = "/message/" + msg_name;
+ LLSD context;
+ const LLHTTPNode* handler = messageRootNode().traverse(path, context);
+ if (!handler)
+ {
+ llwarns << "LLMessageService::dispatch > no handler for "
+ << path << llendl;
+ return;
+ }
+
+ handler->post(responsep, context, message);
+}
+
+static void check_for_unrecognized_messages(
+ const char* type,
const LLSD& map,
LLMessageSystem::message_template_name_map_t& templates)
{
@@ -4535,76 +3161,6 @@ void process_deny_trusted_circuit(LLMessageSystem *msg, void **)
msg->sendCreateTrustedCircuit(msg->getSender(), local_id, remote_id);
}
-#define LL_ENCRYPT_BUF_LENGTH 16384
-
-void encrypt_template(const char *src_name, const char *dest_name)
-{
- // encrypt and decrypt are symmetric
- decrypt_template(src_name, dest_name);
-}
-
-BOOL decrypt_template(const char *src_name, const char *dest_name)
-{
- S32 buf_length = LL_ENCRYPT_BUF_LENGTH;
- char buf[LL_ENCRYPT_BUF_LENGTH]; /* Flawfinder: ignore */
-
- FILE* infp = NULL;
- FILE* outfp = NULL;
- BOOL success = FALSE;
- char* bufp = NULL;
- U32 key = 0;
- S32 more_data = 0;
-
- if(src_name==NULL)
- {
- llwarns << "Input src_name is NULL!!" << llendl;
- goto exit;
- }
-
- infp = LLFile::fopen(src_name,"rb"); /* Flawfinder: ignore */
- if (!infp)
- {
- llwarns << "could not open " << src_name << " for reading" << llendl;
- goto exit;
- }
-
- if(dest_name==NULL)
- {
- llwarns << "Output dest_name is NULL!!" << llendl;
- goto exit;
- }
-
- outfp = LLFile::fopen(dest_name,"w+b"); /* Flawfinder: ignore */
- if (!outfp)
- {
- llwarns << "could not open " << src_name << " for writing" << llendl;
- goto exit;
- }
-
- while ((buf_length = (S32)fread(buf,1,LL_ENCRYPT_BUF_LENGTH,infp)))
- {
- // unscrozzle bits here
- bufp = buf;
- more_data = buf_length;
- while (more_data--)
- {
- *bufp = *bufp ^ ((key * 43) % 256);
- key++;
- bufp++;
- }
-
- if(buf_length != (S32)fwrite(buf,1,buf_length,outfp))
- {
- goto exit;
- }
- }
- success = TRUE;
-
- exit:
- if(infp) fclose(infp);
- if(outfp) fclose(outfp);
- return success;
-}
void dump_prehash_files()
{
@@ -4688,7 +3244,8 @@ BOOL start_messaging_system(
S32 version_minor,
S32 version_patch,
BOOL b_dump_prehash_file,
- const std::string& secret)
+ const std::string& secret,
+ const LLUseCircuitCodeResponder* responder)
{
gMessageSystem = new LLMessageSystem(
template_name.c_str(),
@@ -4737,7 +3294,7 @@ BOOL start_messaging_system(
//gMessageSystem->setHandlerFuncFast(_PREHASH_AssignCircuitCode, LLMessageSystem::processAssignCircuitCode);
gMessageSystem->setHandlerFuncFast(_PREHASH_AddCircuitCode, LLMessageSystem::processAddCircuitCode);
//gMessageSystem->setHandlerFuncFast(_PREHASH_AckAddCircuitCode, ack_add_circuit_code, NULL);
- gMessageSystem->setHandlerFuncFast(_PREHASH_UseCircuitCode, LLMessageSystem::processUseCircuitCode);
+ gMessageSystem->setHandlerFuncFast(_PREHASH_UseCircuitCode, LLMessageSystem::processUseCircuitCode, (void**)responder);
gMessageSystem->setHandlerFuncFast(_PREHASH_PacketAck, process_packet_ack, NULL);
gMessageSystem->setHandlerFuncFast(_PREHASH_TemplateChecksumRequest, process_template_checksum_request, NULL);
gMessageSystem->setHandlerFuncFast(_PREHASH_SecuredTemplateChecksumRequest, process_secured_template_checksum_request, NULL);
@@ -4790,75 +3347,75 @@ void LLMessageSystem::summarizeLogs(std::ostream& str)
char tmp_str[MAX_STRING]; /* Flawfinder: ignore */
F32 run_time = mMessageSystemTimer.getElapsedTimeF32();
str << "START MESSAGE LOG SUMMARY" << std::endl;
- snprintf(buffer, MAX_STRING, "Run time: %12.3f seconds", run_time); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "Run time: %12.3f seconds", run_time); /* Flawfinder: ignore */
// Incoming
str << buffer << std::endl << "Incoming:" << std::endl;
U64_to_str(mTotalBytesIn, tmp_str, sizeof(tmp_str));
- snprintf(buffer, MAX_STRING, "Total bytes received: %20s (%5.2f kbits per second)", tmp_str, ((F32)mTotalBytesIn * 0.008f) / run_time); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "Total bytes received: %20s (%5.2f kbits per second)", tmp_str, ((F32)mTotalBytesIn * 0.008f) / run_time); /* Flawfinder: ignore */
str << buffer << std::endl;
U64_to_str(mPacketsIn, tmp_str, sizeof(tmp_str));
- snprintf(buffer, MAX_STRING, "Total packets received: %20s (%5.2f packets per second)", tmp_str, ((F32) mPacketsIn / run_time)); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "Total packets received: %20s (%5.2f packets per second)", tmp_str, ((F32) mPacketsIn / run_time)); /* Flawfinder: ignore */
str << buffer << std::endl;
- snprintf(buffer, MAX_STRING, "Average packet size: %20.0f bytes", (F32)mTotalBytesIn / (F32)mPacketsIn); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "Average packet size: %20.0f bytes", (F32)mTotalBytesIn / (F32)mPacketsIn); /* Flawfinder: ignore */
str << buffer << std::endl;
U64_to_str(mReliablePacketsIn, tmp_str, sizeof(tmp_str));
- snprintf(buffer, MAX_STRING, "Total reliable packets: %20s (%5.2f%%)", tmp_str, 100.f * ((F32) mReliablePacketsIn)/((F32) mPacketsIn + 1)); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "Total reliable packets: %20s (%5.2f%%)", tmp_str, 100.f * ((F32) mReliablePacketsIn)/((F32) mPacketsIn + 1)); /* Flawfinder: ignore */
str << buffer << std::endl;
U64_to_str(mCompressedPacketsIn, tmp_str, sizeof(tmp_str));
- snprintf(buffer, MAX_STRING, "Total compressed packets: %20s (%5.2f%%)", tmp_str, 100.f * ((F32) mCompressedPacketsIn)/((F32) mPacketsIn + 1)); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "Total compressed packets: %20s (%5.2f%%)", tmp_str, 100.f * ((F32) mCompressedPacketsIn)/((F32) mPacketsIn + 1)); /* Flawfinder: ignore */
str << buffer << std::endl;
S64 savings = mUncompressedBytesIn - mCompressedBytesIn;
U64_to_str(savings, tmp_str, sizeof(tmp_str));
- snprintf(buffer, MAX_STRING, "Total compression savings: %20s bytes", tmp_str); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "Total compression savings: %20s bytes", tmp_str); /* Flawfinder: ignore */
str << buffer << std::endl;
U64_to_str(savings/(mCompressedPacketsIn +1), tmp_str, sizeof(tmp_str));
- snprintf(buffer, MAX_STRING, "Avg comp packet savings: %20s (%5.2f : 1)", tmp_str, ((F32) mUncompressedBytesIn)/((F32) mCompressedBytesIn+1)); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "Avg comp packet savings: %20s (%5.2f : 1)", tmp_str, ((F32) mUncompressedBytesIn)/((F32) mCompressedBytesIn+1)); /* Flawfinder: ignore */
str << buffer << std::endl;
U64_to_str(savings/(mPacketsIn+1), tmp_str, sizeof(tmp_str));
- snprintf(buffer, MAX_STRING, "Avg overall comp savings: %20s (%5.2f : 1)", tmp_str, ((F32) mTotalBytesIn + (F32) savings)/((F32) mTotalBytesIn + 1.f)); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "Avg overall comp savings: %20s (%5.2f : 1)", tmp_str, ((F32) mTotalBytesIn + (F32) savings)/((F32) mTotalBytesIn + 1.f)); /* Flawfinder: ignore */
// Outgoing
str << buffer << std::endl << std::endl << "Outgoing:" << std::endl;
U64_to_str(mTotalBytesOut, tmp_str, sizeof(tmp_str));
- snprintf(buffer, MAX_STRING, "Total bytes sent: %20s (%5.2f kbits per second)", tmp_str, ((F32)mTotalBytesOut * 0.008f) / run_time ); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "Total bytes sent: %20s (%5.2f kbits per second)", tmp_str, ((F32)mTotalBytesOut * 0.008f) / run_time ); /* Flawfinder: ignore */
str << buffer << std::endl;
U64_to_str(mPacketsOut, tmp_str, sizeof(tmp_str));
- snprintf(buffer, MAX_STRING, "Total packets sent: %20s (%5.2f packets per second)", tmp_str, ((F32)mPacketsOut / run_time)); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "Total packets sent: %20s (%5.2f packets per second)", tmp_str, ((F32)mPacketsOut / run_time)); /* Flawfinder: ignore */
str << buffer << std::endl;
- snprintf(buffer, MAX_STRING, "Average packet size: %20.0f bytes", (F32)mTotalBytesOut / (F32)mPacketsOut); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "Average packet size: %20.0f bytes", (F32)mTotalBytesOut / (F32)mPacketsOut); /* Flawfinder: ignore */
str << buffer << std::endl;
U64_to_str(mReliablePacketsOut, tmp_str, sizeof(tmp_str));
- snprintf(buffer, MAX_STRING, "Total reliable packets: %20s (%5.2f%%)", tmp_str, 100.f * ((F32) mReliablePacketsOut)/((F32) mPacketsOut + 1)); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "Total reliable packets: %20s (%5.2f%%)", tmp_str, 100.f * ((F32) mReliablePacketsOut)/((F32) mPacketsOut + 1)); /* Flawfinder: ignore */
str << buffer << std::endl;
U64_to_str(mCompressedPacketsOut, tmp_str, sizeof(tmp_str));
- snprintf(buffer, MAX_STRING, "Total compressed packets: %20s (%5.2f%%)", tmp_str, 100.f * ((F32) mCompressedPacketsOut)/((F32) mPacketsOut + 1)); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "Total compressed packets: %20s (%5.2f%%)", tmp_str, 100.f * ((F32) mCompressedPacketsOut)/((F32) mPacketsOut + 1)); /* Flawfinder: ignore */
str << buffer << std::endl;
savings = mUncompressedBytesOut - mCompressedBytesOut;
U64_to_str(savings, tmp_str, sizeof(tmp_str));
- snprintf(buffer, MAX_STRING, "Total compression savings: %20s bytes", tmp_str); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "Total compression savings: %20s bytes", tmp_str); /* Flawfinder: ignore */
str << buffer << std::endl;
U64_to_str(savings/(mCompressedPacketsOut +1), tmp_str, sizeof(tmp_str));
- snprintf(buffer, MAX_STRING, "Avg comp packet savings: %20s (%5.2f : 1)", tmp_str, ((F32) mUncompressedBytesOut)/((F32) mCompressedBytesOut+1)); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "Avg comp packet savings: %20s (%5.2f : 1)", tmp_str, ((F32) mUncompressedBytesOut)/((F32) mCompressedBytesOut+1)); /* Flawfinder: ignore */
str << buffer << std::endl;
U64_to_str(savings/(mPacketsOut+1), tmp_str, sizeof(tmp_str));
- snprintf(buffer, MAX_STRING, "Avg overall comp savings: %20s (%5.2f : 1)", tmp_str, ((F32) mTotalBytesOut + (F32) savings)/((F32) mTotalBytesOut + 1.f)); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "Avg overall comp savings: %20s (%5.2f : 1)", tmp_str, ((F32) mTotalBytesOut + (F32) savings)/((F32) mTotalBytesOut + 1.f)); /* Flawfinder: ignore */
str << buffer << std::endl << std::endl;
- snprintf(buffer, MAX_STRING, "SendPacket failures: %20d", mSendPacketFailureCount); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "SendPacket failures: %20d", mSendPacketFailureCount); /* Flawfinder: ignore */
str << buffer << std::endl;
- snprintf(buffer, MAX_STRING, "Dropped packets: %20d", mDroppedPackets); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "Dropped packets: %20d", mDroppedPackets); /* Flawfinder: ignore */
str << buffer << std::endl;
- snprintf(buffer, MAX_STRING, "Resent packets: %20d", mResentPackets); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "Resent packets: %20d", mResentPackets); /* Flawfinder: ignore */
str << buffer << std::endl;
- snprintf(buffer, MAX_STRING, "Failed reliable resends: %20d", mFailedResendPackets); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "Failed reliable resends: %20d", mFailedResendPackets); /* Flawfinder: ignore */
str << buffer << std::endl;
- snprintf(buffer, MAX_STRING, "Off-circuit rejected packets: %17d", mOffCircuitPackets); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "Off-circuit rejected packets: %17d", mOffCircuitPackets); /* Flawfinder: ignore */
str << buffer << std::endl;
- snprintf(buffer, MAX_STRING, "On-circuit invalid packets: %17d", mInvalidOnCircuitPackets); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "On-circuit invalid packets: %17d", mInvalidOnCircuitPackets); /* Flawfinder: ignore */
str << buffer << std::endl << std::endl;
str << "Decoding: " << std::endl;
- snprintf(buffer, MAX_STRING, "%35s%10s%10s%10s%10s", "Message", "Count", "Time", "Max", "Avg"); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "%35s%10s%10s%10s%10s", "Message", "Count", "Time", "Max", "Avg"); /* Flawfinder: ignore */
str << buffer << std:: endl;
F32 avg;
for (message_template_name_map_t::iterator iter = mMessageTemplates.begin(),
@@ -4869,7 +3426,7 @@ void LLMessageSystem::summarizeLogs(std::ostream& str)
if(mt->mTotalDecoded > 0)
{
avg = mt->mTotalDecodeTime / (F32)mt->mTotalDecoded;
- snprintf(buffer, MAX_STRING, "%35s%10u%10f%10f%10f", mt->mName, mt->mTotalDecoded, mt->mTotalDecodeTime, mt->mMaxDecodeTimePerMsg, avg); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "%35s%10u%10f%10f%10f", mt->mName, mt->mTotalDecoded, mt->mTotalDecodeTime, mt->mMaxDecodeTimePerMsg, avg); /* Flawfinder: ignore */
str << buffer << std::endl;
}
}
@@ -4957,13 +3514,13 @@ void LLMessageSystem::dumpReceiveCounts()
BOOL LLMessageSystem::isClear() const
{
- return mbSClear;
+ return mMessageBuilder->isClear();
}
S32 LLMessageSystem::flush(const LLHost &host)
{
- if (mCurrentSendTotal)
+ if (mMessageBuilder->getMessageSize())
{
S32 sentbytes = sendMessage(host);
clearMessage();
@@ -4980,91 +3537,22 @@ U32 LLMessageSystem::getListenPort( void ) const
return mPort;
}
-
-S32 LLMessageSystem::zeroCode(U8 **data, S32 *data_size)
+// TODO: babbage: remove this horror!
+S32 LLMessageSystem::zeroCodeAdjustCurrentSendTotal()
{
- S32 count = *data_size;
-
- S32 net_gain = 0;
- U8 num_zeroes = 0;
-
- U8 *inptr = (U8 *)*data;
- U8 *outptr = (U8 *)mEncodedSendBuffer;
-
-// skip the packet id field
-
- for (U32 i=0;i256 zeroes)
-
- while (count--)
- {
- if (!(*inptr)) // in a zero count
- {
- if (num_zeroes)
- {
- if (++num_zeroes > 254)
- {
- *outptr++ = num_zeroes;
- num_zeroes = 0;
- }
- net_gain--; // subseqent zeroes save one
- }
- else
- {
- *outptr++ = 0;
- net_gain++; // starting a zero count adds one
- num_zeroes = 1;
- }
- inptr++;
- }
- else
- {
- if (num_zeroes)
- {
- *outptr++ = num_zeroes;
- num_zeroes = 0;
- }
- *outptr++ = *inptr++;
- }
- }
-
- if (num_zeroes)
- {
- *outptr++ = num_zeroes;
- }
-
- if (net_gain < 0)
+ if(mMessageBuilder == mLLSDMessageBuilder)
{
- mCompressedPacketsOut++;
- mUncompressedBytesOut += *data_size;
-
- *data = mEncodedSendBuffer;
- *data_size += net_gain;
- mEncodedSendBuffer[0] |= LL_ZERO_CODE_FLAG; // set the head bit to indicate zero coding
-
- mCompressedBytesOut += *data_size;
-
+ // babbage: don't compress LLSD messages, so delta is 0
+ return 0;
}
- mTotalBytesOut += *data_size;
-
- return(net_gain);
-}
-
-S32 LLMessageSystem::zeroCodeAdjustCurrentSendTotal()
-{
- if (!mbSBuilt)
+
+ if (! mMessageBuilder->isBuilt())
{
- buildMessage();
+ mSendSize = mMessageBuilder->buildMessage(mSendBuffer,
+ MAX_BUFFER_SIZE);
}
- mbSBuilt = FALSE;
+ // TODO: babbage: remove this horror
+ mMessageBuilder->setBuilt(FALSE);
S32 count = mSendSize;
@@ -5244,7 +3732,6 @@ void LLMessageSystem::setHandlerFuncFast(const char *name, void (*handler_func)(
}
}
-
bool LLMessageSystem::callHandler(const char *name,
bool trustedSource, LLMessageSystem* msg)
{
@@ -5297,6 +3784,12 @@ BOOL LLMessageSystem::callExceptionFunc(EMessageException exception)
return FALSE;
}
+void LLMessageSystem::setTimingFunc(msg_timing_callback func, void* data)
+{
+ mTimingCallback = func;
+ mTimingCallbackData = data;
+}
+
BOOL LLMessageSystem::isCircuitCodeKnown(U32 code) const
{
if(mCircuitCodes.find(code) == mCircuitCodes.end())
@@ -5306,27 +3799,14 @@ BOOL LLMessageSystem::isCircuitCodeKnown(U32 code) const
BOOL LLMessageSystem::isMessageFast(const char *msg)
{
- if (mCurrentRMessageTemplate)
- {
- return(msg == mCurrentRMessageTemplate->mName);
- }
- else
- {
- return FALSE;
- }
+ return(msg == mMessageReader->getMessageName());
}
char* LLMessageSystem::getMessageName()
{
- if (mCurrentRMessageTemplate)
- {
- return mCurrentRMessageTemplate->mName;
- }
- else
- {
- return NULL;
- }
+ const char* name = mMessageReader->getMessageName();
+ return name[0] == '\0'? NULL : const_cast(name);
}
const LLUUID& LLMessageSystem::getSenderID() const
@@ -5350,211 +3830,6 @@ const LLUUID& LLMessageSystem::getSenderSessionID() const
return LLUUID::null;
}
-void LLMessageSystem::addVector3Fast(const char *varname, const LLVector3& vec)
-{
- addDataFast(varname, vec.mV, MVT_LLVector3, sizeof(vec.mV));
-}
-
-void LLMessageSystem::addVector3(const char *varname, const LLVector3& vec)
-{
- addDataFast(gMessageStringTable.getString(varname), vec.mV, MVT_LLVector3, sizeof(vec.mV));
-}
-
-void LLMessageSystem::addVector4Fast(const char *varname, const LLVector4& vec)
-{
- addDataFast(varname, vec.mV, MVT_LLVector4, sizeof(vec.mV));
-}
-
-void LLMessageSystem::addVector4(const char *varname, const LLVector4& vec)
-{
- addDataFast(gMessageStringTable.getString(varname), vec.mV, MVT_LLVector4, sizeof(vec.mV));
-}
-
-
-void LLMessageSystem::addVector3dFast(const char *varname, const LLVector3d& vec)
-{
- addDataFast(varname, vec.mdV, MVT_LLVector3d, sizeof(vec.mdV));
-}
-
-void LLMessageSystem::addVector3d(const char *varname, const LLVector3d& vec)
-{
- addDataFast(gMessageStringTable.getString(varname), vec.mdV, MVT_LLVector3d, sizeof(vec.mdV));
-}
-
-
-void LLMessageSystem::addQuatFast(const char *varname, const LLQuaternion& quat)
-{
- addDataFast(varname, quat.packToVector3().mV, MVT_LLQuaternion, sizeof(LLVector3));
-}
-
-void LLMessageSystem::addQuat(const char *varname, const LLQuaternion& quat)
-{
- addDataFast(gMessageStringTable.getString(varname), quat.packToVector3().mV, MVT_LLQuaternion, sizeof(LLVector3));
-}
-
-
-void LLMessageSystem::addUUIDFast(const char *varname, const LLUUID& uuid)
-{
- addDataFast(varname, uuid.mData, MVT_LLUUID, sizeof(uuid.mData));
-}
-
-void LLMessageSystem::addUUID(const char *varname, const LLUUID& uuid)
-{
- addDataFast(gMessageStringTable.getString(varname), uuid.mData, MVT_LLUUID, sizeof(uuid.mData));
-}
-
-void LLMessageSystem::getF32Fast(const char *block, const char *var, F32 &d, S32 blocknum)
-{
- getDataFast(block, var, &d, sizeof(F32), blocknum);
-
- if( !llfinite( d ) )
- {
- llwarns << "non-finite in getF32Fast " << block << " " << var << llendl;
- d = 0;
- }
-}
-
-void LLMessageSystem::getF32(const char *block, const char *var, F32 &d, S32 blocknum)
-{
- getDataFast(gMessageStringTable.getString(block), gMessageStringTable.getString(var), &d, sizeof(F32), blocknum);
-
- if( !llfinite( d ) )
- {
- llwarns << "non-finite in getF32 " << block << " " << var << llendl;
- d = 0;
- }
-}
-
-void LLMessageSystem::getF64Fast(const char *block, const char *var, F64 &d, S32 blocknum)
-{
- getDataFast(block, var, &d, sizeof(F64), blocknum);
-
- if( !llfinite( d ) )
- {
- llwarns << "non-finite in getF64Fast " << block << " " << var << llendl;
- d = 0;
- }
-}
-
-void LLMessageSystem::getF64(const char *block, const char *var, F64 &d, S32 blocknum)
-{
- getDataFast(gMessageStringTable.getString(block), gMessageStringTable.getString(var), &d, sizeof(F64), blocknum);
-
- if( !llfinite( d ) )
- {
- llwarns << "non-finite in getF64 " << block << " " << var << llendl;
- d = 0;
- }
-}
-
-
-void LLMessageSystem::getVector3Fast(const char *block, const char *var, LLVector3 &v, S32 blocknum )
-{
- getDataFast(block, var, v.mV, sizeof(v.mV), blocknum);
-
- if( !v.isFinite() )
- {
- llwarns << "non-finite in getVector3Fast " << block << " " << var << llendl;
- v.zeroVec();
- }
-}
-
-void LLMessageSystem::getVector3(const char *block, const char *var, LLVector3 &v, S32 blocknum )
-{
- getDataFast(gMessageStringTable.getString(block), gMessageStringTable.getString(var), v.mV, sizeof(v.mV), blocknum);
-
- if( !v.isFinite() )
- {
- llwarns << "non-finite in getVector4 " << block << " " << var << llendl;
- v.zeroVec();
- }
-}
-
-void LLMessageSystem::getVector4Fast(const char *block, const char *var, LLVector4 &v, S32 blocknum )
-{
- getDataFast(block, var, v.mV, sizeof(v.mV), blocknum);
-
- if( !v.isFinite() )
- {
- llwarns << "non-finite in getVector4Fast " << block << " " << var << llendl;
- v.zeroVec();
- }
-}
-
-void LLMessageSystem::getVector4(const char *block, const char *var, LLVector4 &v, S32 blocknum )
-{
- getDataFast(gMessageStringTable.getString(block), gMessageStringTable.getString(var), v.mV, sizeof(v.mV), blocknum);
-
- if( !v.isFinite() )
- {
- llwarns << "non-finite in getVector3 " << block << " " << var << llendl;
- v.zeroVec();
- }
-}
-
-void LLMessageSystem::getVector3dFast(const char *block, const char *var, LLVector3d &v, S32 blocknum )
-{
- getDataFast(block, var, v.mdV, sizeof(v.mdV), blocknum);
-
- if( !v.isFinite() )
- {
- llwarns << "non-finite in getVector3dFast " << block << " " << var << llendl;
- v.zeroVec();
- }
-
-}
-
-void LLMessageSystem::getVector3d(const char *block, const char *var, LLVector3d &v, S32 blocknum )
-{
- getDataFast(gMessageStringTable.getString(block), gMessageStringTable.getString(var), v.mdV, sizeof(v.mdV), blocknum);
-
- if( !v.isFinite() )
- {
- llwarns << "non-finite in getVector3d " << block << " " << var << llendl;
- v.zeroVec();
- }
-}
-
-void LLMessageSystem::getQuatFast(const char *block, const char *var, LLQuaternion &q, S32 blocknum )
-{
- LLVector3 vec;
- getDataFast(block, var, vec.mV, sizeof(vec.mV), blocknum);
- if( vec.isFinite() )
- {
- q.unpackFromVector3( vec );
- }
- else
- {
- llwarns << "non-finite in getQuatFast " << block << " " << var << llendl;
- q.loadIdentity();
- }
-}
-
-void LLMessageSystem::getQuat(const char *block, const char *var, LLQuaternion &q, S32 blocknum )
-{
- LLVector3 vec;
- getDataFast(gMessageStringTable.getString(block), gMessageStringTable.getString(var), vec.mV, sizeof(vec.mV), blocknum);
- if( vec.isFinite() )
- {
- q.unpackFromVector3( vec );
- }
- else
- {
- llwarns << "non-finite in getQuat " << block << " " << var << llendl;
- q.loadIdentity();
- }
-}
-
-void LLMessageSystem::getUUIDFast(const char *block, const char *var, LLUUID &u, S32 blocknum )
-{
- getDataFast(block, var, u.mData, sizeof(u.mData), blocknum);
-}
-
-void LLMessageSystem::getUUID(const char *block, const char *var, LLUUID &u, S32 blocknum )
-{
- getDataFast(gMessageStringTable.getString(block), gMessageStringTable.getString(var), u.mData, sizeof(u.mData), blocknum);
-}
-
bool LLMessageSystem::generateDigestForNumberAndUUIDs(
char* digest,
const U32 number,
@@ -5584,7 +3859,7 @@ bool LLMessageSystem::generateDigestForNumberAndUUIDs(
d.update((const unsigned char *) colon, (U32)strlen(colon)); /* Flawfinder: ignore */
- snprintf(tbuf, sizeof(tbuf),"%i", number); /* Flawfinder: ignore */
+ snprintf(tbuf, sizeof(tbuf),"%i", number); /* Flawfinder: ignore */
d.update((unsigned char *) tbuf, (U32)strlen(tbuf)); /* Flawfinder: ignore */
d.update((const unsigned char *) colon, (U32)strlen(colon)); /* Flawfinder: ignore */
@@ -5843,7 +4118,7 @@ void LLMessageSystem::dumpPacketToLog()
S32 cur_line = 0;
for (i = 0; i < mTrueReceiveSize; i++)
{
- snprintf(line_buffer + cur_line_pos*3, sizeof(line_buffer),"%02x ", mTrueReceiveBuffer[i]); /* Flawfinder: ignore */
+ snprintf(line_buffer + cur_line_pos*3, sizeof(line_buffer),"%02x ", mTrueReceiveBuffer[i]); /* Flawfinder: ignore */
cur_line_pos++;
if (cur_line_pos >= 16)
{
@@ -5859,26 +4134,141 @@ void LLMessageSystem::dumpPacketToLog()
}
//static
-U64 LLMessageSystem::getMessageTimeUsecs(const BOOL update)
+BOOL LLMessageSystem::isTemplateConfirmed()
{
- if (gMessageSystem)
- {
- if (update)
- {
- gMessageSystem->mCurrentMessageTimeSeconds = totalTime()*SEC_PER_USEC;
- }
- return (U64)(gMessageSystem->mCurrentMessageTimeSeconds * USEC_PER_SEC);
- }
- else
- {
- return totalTime();
- }
+ return gMessageSystem->mTemplateConfirmed;
}
//static
-F64 LLMessageSystem::getMessageTimeSeconds(const BOOL update)
+BOOL LLMessageSystem::doesTemplateMatch()
{
- if (gMessageSystem)
+ if (!isTemplateConfirmed())
+ {
+ return FALSE;
+ }
+ return gMessageSystem->mTemplateMatches;
+}
+
+//static
+void LLMessageSystem::sendMessageTemplateChecksum(const LLHost ¤tHost)
+{
+ gMessageSystem->mTemplateConfirmed = FALSE;
+ gMessageSystem->mTemplateMatches = FALSE;
+ gMessageSystem->newMessageFast(_PREHASH_TemplateChecksumRequest);
+ // Don't use ping-based retry
+ gMessageSystem->sendReliable(currentHost, 40, FALSE, 3, NULL, NULL);
+}
+
+//static
+void LLMessageSystem::processMessageTemplateChecksumReply(LLMessageSystem *msg,
+ void** user_data)
+{
+ U32 remote_template_checksum = 0;
+ msg->getU32Fast(_PREHASH_DataBlock, _PREHASH_Checksum, remote_template_checksum);
+ msg->mTemplateConfirmed = TRUE;
+ if ((remote_template_checksum) != msg->mMessageFileChecksum)
+ {
+ llwarns << "out of sync message template!" << llendl;
+
+ msg->mTemplateMatches = FALSE;
+ msg->newMessageFast(_PREHASH_CloseCircuit);
+ msg->sendMessage(msg->getSender());
+ return;
+ }
+
+ msg->mTemplateMatches = TRUE;
+ llinfos << "According to " << msg->getSender()
+ << " the message template is current!"
+ << llendl;
+}
+
+//static
+void LLMessageSystem::sendSecureMessageTemplateChecksum(const LLHost& host)
+{
+ // generate an token for use during template checksum requests to
+ // prevent DOS attacks from injected bad template checksum replies.
+ LLUUID *template_tokenp = new LLUUID;
+ template_tokenp->generate();
+ lldebugs << "random token: " << *template_tokenp << llendl;
+
+ // register the handler for the reply while saving off template_token
+ gMessageSystem->setHandlerFuncFast(_PREHASH_TemplateChecksumReply,
+ LLMessageSystem::processSecureTemplateChecksumReply,
+ (void**)template_tokenp);
+
+ // send checksum request
+ gMessageSystem->mTemplateConfirmed = FALSE;
+ gMessageSystem->newMessageFast(_PREHASH_SecuredTemplateChecksumRequest);
+ gMessageSystem->nextBlockFast(_PREHASH_TokenBlock);
+ gMessageSystem->addUUIDFast(_PREHASH_Token, *template_tokenp);
+ gMessageSystem->sendReliable(host);
+}
+
+//static
+void LLMessageSystem::processSecureTemplateChecksumReply(LLMessageSystem *msg,
+ void** user_data)
+{
+ // copy the token out into the stack and delete allocated memory
+ LLUUID template_token = *((LLUUID*)user_data);
+ delete user_data;
+
+ LLUUID received_token;
+ msg->getUUID("TokenBlock", "Token", received_token);
+
+ if(received_token != template_token)
+ {
+ llwarns << "Incorrect token in template checksum reply: "
+ << received_token << llendl;
+ //return do_normal_idle;
+ return;
+ }
+
+ U32 remote_template_checksum = 0;
+ U8 major_version = 0;
+ U8 minor_version = 0;
+ U8 patch_version = 0;
+ U8 server_version = 0;
+ U32 flags = 0x0;
+ msg->getU32("DataBlock", "Checksum", remote_template_checksum);
+ msg->getU8 ("DataBlock", "MajorVersion", major_version);
+ msg->getU8 ("DataBlock", "MinorVersion", minor_version);
+ msg->getU8 ("DataBlock", "PatchVersion", patch_version);
+ msg->getU8 ("DataBlock", "ServerVersion", server_version);
+ msg->getU32("DataBlock", "Flags", flags);
+
+ msg->mTemplateConfirmed = TRUE;
+ if (remote_template_checksum != gMessageSystem->mMessageFileChecksum)
+ {
+ llinfos << "Message template out of sync" << llendl;
+ msg->mTemplateMatches = FALSE;
+ }
+ else
+ {
+ msg->mTemplateMatches = TRUE;
+ }
+}
+
+//static
+U64 LLMessageSystem::getMessageTimeUsecs(const BOOL update)
+{
+ if (gMessageSystem)
+ {
+ if (update)
+ {
+ gMessageSystem->mCurrentMessageTimeSeconds = totalTime()*SEC_PER_USEC;
+ }
+ return (U64)(gMessageSystem->mCurrentMessageTimeSeconds * USEC_PER_SEC);
+ }
+ else
+ {
+ return totalTime();
+ }
+}
+
+//static
+F64 LLMessageSystem::getMessageTimeSeconds(const BOOL update)
+{
+ if (gMessageSystem)
{
if (update)
{
@@ -5903,3 +4293,558 @@ std::string get_shared_secret()
return g_shared_secret;
}
+typedef std::map BuilderMap;
+
+static void setBuilder(BuilderMap& map, const char* name, LLMessageBuilder* builder)
+{
+ map[gMessageStringTable.getString(name)] = builder;
+}
+
+void LLMessageSystem::newMessageFast(const char *name)
+{
+ if(LLMessageConfig::isMessageBuiltTemplate(name))
+ {
+ mMessageBuilder = mTemplateMessageBuilder;
+ }
+ else
+ {
+ mMessageBuilder = mLLSDMessageBuilder;
+ }
+ mSendReliable = FALSE;
+ mMessageBuilder->newMessage(name);
+}
+
+void LLMessageSystem::newMessage(const char *name)
+{
+ newMessageFast(gMessageStringTable.getString(name));
+}
+
+void LLMessageSystem::addBinaryDataFast(const char *varname, const void *data, S32 size)
+{
+ mMessageBuilder->addBinaryData(varname, data, size);
+}
+
+void LLMessageSystem::addBinaryData(const char *varname, const void *data, S32 size)
+{
+ mMessageBuilder->addBinaryData(gMessageStringTable.getString(varname),data, size);
+}
+
+void LLMessageSystem::addS8Fast(const char *varname, S8 v)
+{
+ mMessageBuilder->addS8(varname, v);
+}
+
+void LLMessageSystem::addS8(const char *varname, S8 v)
+{
+ mMessageBuilder->addS8(gMessageStringTable.getString(varname), v);
+}
+
+void LLMessageSystem::addU8Fast(const char *varname, U8 v)
+{
+ mMessageBuilder->addU8(varname, v);
+}
+
+void LLMessageSystem::addU8(const char *varname, U8 v)
+{
+ mMessageBuilder->addU8(gMessageStringTable.getString(varname), v);
+}
+
+void LLMessageSystem::addS16Fast(const char *varname, S16 v)
+{
+ mMessageBuilder->addS16(varname, v);
+}
+
+void LLMessageSystem::addS16(const char *varname, S16 v)
+{
+ mMessageBuilder->addS16(gMessageStringTable.getString(varname), v);
+}
+
+void LLMessageSystem::addU16Fast(const char *varname, U16 v)
+{
+ mMessageBuilder->addU16(varname, v);
+}
+
+void LLMessageSystem::addU16(const char *varname, U16 v)
+{
+ mMessageBuilder->addU16(gMessageStringTable.getString(varname), v);
+}
+
+void LLMessageSystem::addF32Fast(const char *varname, F32 v)
+{
+ mMessageBuilder->addF32(varname, v);
+}
+
+void LLMessageSystem::addF32(const char *varname, F32 v)
+{
+ mMessageBuilder->addF32(gMessageStringTable.getString(varname), v);
+}
+
+void LLMessageSystem::addS32Fast(const char *varname, S32 v)
+{
+ mMessageBuilder->addS32(varname, v);
+}
+
+void LLMessageSystem::addS32(const char *varname, S32 v)
+{
+ mMessageBuilder->addS32(gMessageStringTable.getString(varname), v);
+}
+
+void LLMessageSystem::addU32Fast(const char *varname, U32 v)
+{
+ mMessageBuilder->addU32(varname, v);
+}
+
+void LLMessageSystem::addU32(const char *varname, U32 v)
+{
+ mMessageBuilder->addU32(gMessageStringTable.getString(varname), v);
+}
+
+void LLMessageSystem::addU64Fast(const char *varname, U64 v)
+{
+ mMessageBuilder->addU64(varname, v);
+}
+
+void LLMessageSystem::addU64(const char *varname, U64 v)
+{
+ mMessageBuilder->addU64(gMessageStringTable.getString(varname), v);
+}
+
+void LLMessageSystem::addF64Fast(const char *varname, F64 v)
+{
+ mMessageBuilder->addF64(varname, v);
+}
+
+void LLMessageSystem::addF64(const char *varname, F64 v)
+{
+ mMessageBuilder->addF64(gMessageStringTable.getString(varname), v);
+}
+
+void LLMessageSystem::addIPAddrFast(const char *varname, U32 v)
+{
+ mMessageBuilder->addIPAddr(varname, v);
+}
+
+void LLMessageSystem::addIPAddr(const char *varname, U32 v)
+{
+ mMessageBuilder->addIPAddr(gMessageStringTable.getString(varname), v);
+}
+
+void LLMessageSystem::addIPPortFast(const char *varname, U16 v)
+{
+ mMessageBuilder->addIPPort(varname, v);
+}
+
+void LLMessageSystem::addIPPort(const char *varname, U16 v)
+{
+ mMessageBuilder->addIPPort(gMessageStringTable.getString(varname), v);
+}
+
+void LLMessageSystem::addBOOLFast(const char* varname, BOOL v)
+{
+ mMessageBuilder->addBOOL(varname, v);
+}
+
+void LLMessageSystem::addBOOL(const char* varname, BOOL v)
+{
+ mMessageBuilder->addBOOL(gMessageStringTable.getString(varname), v);
+}
+
+void LLMessageSystem::addStringFast(const char* varname, const char* v)
+{
+ mMessageBuilder->addString(varname, v);
+}
+
+void LLMessageSystem::addString(const char* varname, const char* v)
+{
+ mMessageBuilder->addString(gMessageStringTable.getString(varname), v);
+}
+
+void LLMessageSystem::addStringFast(const char* varname, const std::string& v)
+{
+ mMessageBuilder->addString(varname, v);
+}
+
+void LLMessageSystem::addString(const char* varname, const std::string& v)
+{
+ mMessageBuilder->addString(gMessageStringTable.getString(varname), v);
+}
+
+void LLMessageSystem::addVector3Fast(const char *varname, const LLVector3& v)
+{
+ mMessageBuilder->addVector3(varname, v);
+}
+
+void LLMessageSystem::addVector3(const char *varname, const LLVector3& v)
+{
+ mMessageBuilder->addVector3(gMessageStringTable.getString(varname), v);
+}
+
+void LLMessageSystem::addVector4Fast(const char *varname, const LLVector4& v)
+{
+ mMessageBuilder->addVector4(varname, v);
+}
+
+void LLMessageSystem::addVector4(const char *varname, const LLVector4& v)
+{
+ mMessageBuilder->addVector4(gMessageStringTable.getString(varname), v);
+}
+
+void LLMessageSystem::addVector3dFast(const char *varname, const LLVector3d& v)
+{
+ mMessageBuilder->addVector3d(varname, v);
+}
+
+void LLMessageSystem::addVector3d(const char *varname, const LLVector3d& v)
+{
+ mMessageBuilder->addVector3d(gMessageStringTable.getString(varname), v);
+}
+
+void LLMessageSystem::addQuatFast(const char *varname, const LLQuaternion& v)
+{
+ mMessageBuilder->addQuat(varname, v);
+}
+
+void LLMessageSystem::addQuat(const char *varname, const LLQuaternion& v)
+{
+ mMessageBuilder->addQuat(gMessageStringTable.getString(varname), v);
+}
+
+
+void LLMessageSystem::addUUIDFast(const char *varname, const LLUUID& v)
+{
+ mMessageBuilder->addUUID(varname, v);
+}
+
+void LLMessageSystem::addUUID(const char *varname, const LLUUID& v)
+{
+ mMessageBuilder->addUUID(gMessageStringTable.getString(varname), v);
+}
+
+S32 LLMessageSystem::getCurrentSendTotal() const
+{
+ return mMessageBuilder->getMessageSize();
+}
+
+void LLMessageSystem::getS8Fast(const char *block, const char *var, S8 &u,
+ S32 blocknum)
+{
+ mMessageReader->getS8(block, var, u, blocknum);
+}
+
+void LLMessageSystem::getS8(const char *block, const char *var, S8 &u,
+ S32 blocknum)
+{
+ getS8Fast(gMessageStringTable.getString(block),
+ gMessageStringTable.getString(var), u, blocknum);
+}
+
+void LLMessageSystem::getU8Fast(const char *block, const char *var, U8 &u,
+ S32 blocknum)
+{
+ mMessageReader->getU8(block, var, u, blocknum);
+}
+
+void LLMessageSystem::getU8(const char *block, const char *var, U8 &u,
+ S32 blocknum)
+{
+ getU8Fast(gMessageStringTable.getString(block),
+ gMessageStringTable.getString(var), u, blocknum);
+}
+
+void LLMessageSystem::getBOOLFast(const char *block, const char *var, BOOL &b,
+ S32 blocknum)
+{
+ mMessageReader->getBOOL(block, var, b, blocknum);
+}
+
+void LLMessageSystem::getBOOL(const char *block, const char *var, BOOL &b,
+ S32 blocknum)
+{
+ getBOOLFast(gMessageStringTable.getString(block),
+ gMessageStringTable.getString(var), b, blocknum);
+}
+
+void LLMessageSystem::getS16Fast(const char *block, const char *var, S16 &d,
+ S32 blocknum)
+{
+ mMessageReader->getS16(block, var, d, blocknum);
+}
+
+void LLMessageSystem::getS16(const char *block, const char *var, S16 &d,
+ S32 blocknum)
+{
+ getS16Fast(gMessageStringTable.getString(block),
+ gMessageStringTable.getString(var), d, blocknum);
+}
+
+void LLMessageSystem::getU16Fast(const char *block, const char *var, U16 &d,
+ S32 blocknum)
+{
+ mMessageReader->getU16(block, var, d, blocknum);
+}
+
+void LLMessageSystem::getU16(const char *block, const char *var, U16 &d,
+ S32 blocknum)
+{
+ getU16Fast(gMessageStringTable.getString(block),
+ gMessageStringTable.getString(var), d, blocknum);
+}
+
+void LLMessageSystem::getS32Fast(const char *block, const char *var, S32 &d,
+ S32 blocknum)
+{
+ mMessageReader->getS32(block, var, d, blocknum);
+}
+
+void LLMessageSystem::getS32(const char *block, const char *var, S32 &d,
+ S32 blocknum)
+{
+ getS32Fast(gMessageStringTable.getString(block),
+ gMessageStringTable.getString(var), d, blocknum);
+}
+
+void LLMessageSystem::getU32Fast(const char *block, const char *var, U32 &d,
+ S32 blocknum)
+{
+ mMessageReader->getU32(block, var, d, blocknum);
+}
+
+void LLMessageSystem::getU32(const char *block, const char *var, U32 &d,
+ S32 blocknum)
+{
+ getU32Fast(gMessageStringTable.getString(block),
+ gMessageStringTable.getString(var), d, blocknum);
+}
+
+void LLMessageSystem::getU64Fast(const char *block, const char *var, U64 &d,
+ S32 blocknum)
+{
+ mMessageReader->getU64(block, var, d, blocknum);
+}
+
+void LLMessageSystem::getU64(const char *block, const char *var, U64 &d,
+ S32 blocknum)
+{
+
+ getU64Fast(gMessageStringTable.getString(block),
+ gMessageStringTable.getString(var), d, blocknum);
+}
+
+void LLMessageSystem::getBinaryDataFast(const char *blockname,
+ const char *varname,
+ void *datap, S32 size,
+ S32 blocknum, S32 max_size)
+{
+ mMessageReader->getBinaryData(blockname, varname, datap, size, blocknum,
+ max_size);
+}
+
+void LLMessageSystem::getBinaryData(const char *blockname,
+ const char *varname,
+ void *datap, S32 size,
+ S32 blocknum, S32 max_size)
+{
+ getBinaryDataFast(gMessageStringTable.getString(blockname),
+ gMessageStringTable.getString(varname),
+ datap, size, blocknum, max_size);
+}
+
+void LLMessageSystem::getF32Fast(const char *block, const char *var, F32 &d,
+ S32 blocknum)
+{
+ mMessageReader->getF32(block, var, d, blocknum);
+}
+
+void LLMessageSystem::getF32(const char *block, const char *var, F32 &d,
+ S32 blocknum)
+{
+ getF32Fast(gMessageStringTable.getString(block),
+ gMessageStringTable.getString(var), d, blocknum);
+}
+
+void LLMessageSystem::getF64Fast(const char *block, const char *var, F64 &d,
+ S32 blocknum)
+{
+ mMessageReader->getF64(block, var, d, blocknum);
+}
+
+void LLMessageSystem::getF64(const char *block, const char *var, F64 &d,
+ S32 blocknum)
+{
+ getF64Fast(gMessageStringTable.getString(block),
+ gMessageStringTable.getString(var), d, blocknum);
+}
+
+
+void LLMessageSystem::getVector3Fast(const char *block, const char *var,
+ LLVector3 &v, S32 blocknum )
+{
+ mMessageReader->getVector3(block, var, v, blocknum);
+}
+
+void LLMessageSystem::getVector3(const char *block, const char *var,
+ LLVector3 &v, S32 blocknum )
+{
+ getVector3Fast(gMessageStringTable.getString(block),
+ gMessageStringTable.getString(var), v, blocknum);
+}
+
+void LLMessageSystem::getVector4Fast(const char *block, const char *var,
+ LLVector4 &v, S32 blocknum )
+{
+ mMessageReader->getVector4(block, var, v, blocknum);
+}
+
+void LLMessageSystem::getVector4(const char *block, const char *var,
+ LLVector4 &v, S32 blocknum )
+{
+ getVector4Fast(gMessageStringTable.getString(block),
+ gMessageStringTable.getString(var), v, blocknum);
+}
+
+void LLMessageSystem::getVector3dFast(const char *block, const char *var,
+ LLVector3d &v, S32 blocknum )
+{
+ mMessageReader->getVector3d(block, var, v, blocknum);
+}
+
+void LLMessageSystem::getVector3d(const char *block, const char *var,
+ LLVector3d &v, S32 blocknum )
+{
+ getVector3dFast(gMessageStringTable.getString(block),
+ gMessageStringTable.getString(var), v, blocknum);
+}
+
+void LLMessageSystem::getQuatFast(const char *block, const char *var,
+ LLQuaternion &q, S32 blocknum )
+{
+ mMessageReader->getQuat(block, var, q, blocknum);
+}
+
+void LLMessageSystem::getQuat(const char *block, const char *var,
+ LLQuaternion &q, S32 blocknum)
+{
+ getQuatFast(gMessageStringTable.getString(block),
+ gMessageStringTable.getString(var), q, blocknum);
+}
+
+void LLMessageSystem::getUUIDFast(const char *block, const char *var,
+ LLUUID &u, S32 blocknum )
+{
+ mMessageReader->getUUID(block, var, u, blocknum);
+}
+
+void LLMessageSystem::getUUID(const char *block, const char *var, LLUUID &u,
+ S32 blocknum )
+{
+ getUUIDFast(gMessageStringTable.getString(block),
+ gMessageStringTable.getString(var), u, blocknum);
+}
+
+void LLMessageSystem::getIPAddrFast(const char *block, const char *var,
+ U32 &u, S32 blocknum)
+{
+ mMessageReader->getIPAddr(block, var, u, blocknum);
+}
+
+void LLMessageSystem::getIPAddr(const char *block, const char *var, U32 &u,
+ S32 blocknum)
+{
+ getIPAddrFast(gMessageStringTable.getString(block),
+ gMessageStringTable.getString(var), u, blocknum);
+}
+
+void LLMessageSystem::getIPPortFast(const char *block, const char *var,
+ U16 &u, S32 blocknum)
+{
+ mMessageReader->getIPPort(block, var, u, blocknum);
+}
+
+void LLMessageSystem::getIPPort(const char *block, const char *var, U16 &u,
+ S32 blocknum)
+{
+ getIPPortFast(gMessageStringTable.getString(block),
+ gMessageStringTable.getString(var), u,
+ blocknum);
+}
+
+
+void LLMessageSystem::getStringFast(const char *block, const char *var,
+ S32 buffer_size, char *s, S32 blocknum)
+{
+ mMessageReader->getString(block, var, buffer_size, s, blocknum);
+}
+
+void LLMessageSystem::getString(const char *block, const char *var,
+ S32 buffer_size, char *s, S32 blocknum )
+{
+ getStringFast(gMessageStringTable.getString(block),
+ gMessageStringTable.getString(var), buffer_size, s,
+ blocknum);
+}
+
+S32 LLMessageSystem::getNumberOfBlocksFast(const char *blockname)
+{
+ return mMessageReader->getNumberOfBlocks(blockname);
+}
+
+S32 LLMessageSystem::getNumberOfBlocks(const char *blockname)
+{
+ return getNumberOfBlocksFast(gMessageStringTable.getString(blockname));
+}
+
+S32 LLMessageSystem::getSizeFast(const char *blockname, const char *varname)
+{
+ return mMessageReader->getSize(blockname, varname);
+}
+
+S32 LLMessageSystem::getSize(const char *blockname, const char *varname)
+{
+ return getSizeFast(gMessageStringTable.getString(blockname),
+ gMessageStringTable.getString(varname));
+}
+
+// size in bytes of variable length data
+S32 LLMessageSystem::getSizeFast(const char *blockname, S32 blocknum,
+ const char *varname)
+{
+ return mMessageReader->getSize(blockname, blocknum, varname);
+}
+
+S32 LLMessageSystem::getSize(const char *blockname, S32 blocknum,
+ const char *varname)
+{
+ return getSizeFast(gMessageStringTable.getString(blockname), blocknum,
+ gMessageStringTable.getString(varname));
+}
+
+S32 LLMessageSystem::getReceiveSize() const
+{
+ return mMessageReader->getMessageSize();
+}
+
+//static
+void LLMessageSystem::setTimeDecodes( BOOL b )
+{
+ LLMessageReader::setTimeDecodes(b);
+}
+
+//static
+void LLMessageSystem::setTimeDecodesSpamThreshold( F32 seconds )
+{
+ LLMessageReader::setTimeDecodesSpamThreshold(seconds);
+}
+
+// HACK! babbage: return true if message rxed via either UDP or HTTP
+// TODO: babbage: move gServicePump in to LLMessageSystem?
+bool LLMessageSystem::checkAllMessages(S64 frame_count, LLPumpIO* http_pump)
+{
+ if(checkMessages(frame_count))
+ {
+ return true;
+ }
+ U32 packetsIn = mPacketsIn;
+ http_pump->pump();
+ http_pump->callback();
+ return (mPacketsIn - packetsIn) > 0;
+}
diff --git a/linden/indra/llmessage/message.h b/linden/indra/llmessage/message.h
index 5cc3ec1..0a55485 100644
--- a/linden/indra/llmessage/message.h
+++ b/linden/indra/llmessage/message.h
@@ -1,9 +1,10 @@
/**
- * @file message.h
+ * @FILE message.h
* @brief LLMessageSystem class header file
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -45,16 +46,15 @@
#include "llerror.h"
#include "net.h"
#include "string_table.h"
-#include "llptrskipmap.h"
#include "llcircuit.h"
#include "lltimer.h"
#include "llpacketring.h"
#include "llhost.h"
+#include "llhttpnode.h"
#include "llpacketack.h"
-#include "doublelinkedlist.h"
#include "message_prehash.h"
#include "llstl.h"
-#include "lldarray.h"
+#include "llmsgvariabletype.h"
const U32 MESSAGE_MAX_STRINGS_LENGTH = 64;
const U32 MESSAGE_NUMBER_OF_HASH_BUCKETS = 8192;
@@ -153,39 +153,10 @@ class LLQuaternion;
class LLSD;
class LLUUID;
class LLMessageSystem;
+class LLPumpIO;
// message data pieces are used to collect the data called for by the message template
-// iterator typedefs precede each class as needed
-typedef enum e_message_variable_type
-{
- MVT_NULL,
- MVT_FIXED,
- MVT_VARIABLE,
- MVT_U8,
- MVT_U16,
- MVT_U32,
- MVT_U64,
- MVT_S8,
- MVT_S16,
- MVT_S32,
- MVT_S64,
- MVT_F32,
- MVT_F64,
- MVT_LLVector3,
- MVT_LLVector3d,
- MVT_LLVector4,
- MVT_LLQuaternion,
- MVT_LLUUID,
- MVT_BOOL,
- MVT_IP_ADDR,
- MVT_IP_PORT,
- MVT_U16Vec3,
- MVT_U16Quat,
- MVT_S16Array,
- MVT_EOL
-} EMsgVariableType;
-
// message system exceptional condition handlers.
enum EMessageException
{
@@ -197,25 +168,34 @@ enum EMessageException
typedef void (*msg_exception_callback)(LLMessageSystem*,void*,EMessageException);
-
class LLMsgData;
class LLMsgBlkData;
class LLMessageTemplate;
class LLMessagePollInfo;
+class LLMessageBuilder;
+class LLTemplateMessageBuilder;
+class LLSDMessageBuilder;
+class LLMessageReader;
+class LLTemplateMessageReader;
+class LLSDMessageReader;
-class LLMessageSystem
+class LLUseCircuitCodeResponder
{
LOG_CLASS(LLMessageSystem);
public:
+ virtual ~LLUseCircuitCodeResponder();
+ virtual void complete(const LLHost& host, const LLUUID& agent) const = 0;
+};
+
+class LLMessageSystem
+{
+ private:
U8 mSendBuffer[MAX_BUFFER_SIZE];
- // Encoded send buffer needs to be slightly larger since the zero
- // coding can potentially increase the size of the send data.
- U8 mEncodedSendBuffer[2 * MAX_BUFFER_SIZE];
S32 mSendSize;
- S32 mCurrentSendTotal;
+ public:
LLPacketRing mPacketRing;
LLReliablePacketParams mReliablePacketParams;
@@ -294,12 +274,7 @@ public:
LLMessageSystem(const char *filename, U32 port, S32 version_major,
S32 version_minor, S32 version_patch);
-public:
- // Subclass use.
- LLMessageSystem();
-
-public:
- virtual ~LLMessageSystem();
+ ~LLMessageSystem();
BOOL isOK() const { return !mbError; }
S32 getErrorCode() const { return mErrorCode; }
@@ -317,15 +292,26 @@ public:
setHandlerFuncFast(gMessageStringTable.getString(name), handler_func, user_data);
}
- bool callHandler(const char *name, bool trustedSource,
- LLMessageSystem* msg);
-
// Set a callback function for a message system exception.
void setExceptionFunc(EMessageException exception, msg_exception_callback func, void* data = NULL);
// Call the specified exception func, and return TRUE if a
// function was found and called. Otherwise return FALSE.
BOOL callExceptionFunc(EMessageException exception);
+ // Set a function that will be called once per packet processed with the
+ // hashed message name and the time spent in the processing handler function
+ // measured in seconds. JC
+ typedef void (*msg_timing_callback)(const char* hashed_name, F32 time, void* data);
+ void setTimingFunc(msg_timing_callback func, void* data = NULL);
+ msg_timing_callback getTimingCallback()
+ {
+ return mTimingCallback;
+ }
+ void* getTimingCallbackData()
+ {
+ return mTimingCallbackData;
+ }
+
// This method returns true if the code is in the circuit codes map.
BOOL isCircuitCodeKnown(U32 code) const;
@@ -364,42 +350,21 @@ public:
void setMySessionID(const LLUUID& session_id) { mSessionID = session_id; }
const LLUUID& getMySessionID() { return mSessionID; }
- virtual void newMessageFast(const char *name);
- void newMessage(const char *name)
- {
- newMessageFast(gMessageStringTable.getString(name));
- }
+ void newMessageFast(const char *name);
+ void newMessage(const char *name);
void copyMessageRtoS();
void clearMessage();
- virtual void nextBlockFast(const char *blockname);
+ void nextBlockFast(const char *blockname);
void nextBlock(const char *blockname)
{
nextBlockFast(gMessageStringTable.getString(blockname));
}
-private:
- void addDataFast(const char *varname, const void *data, EMsgVariableType type, S32 size); // Use only for types not in system already
- void addData(const char *varname, const void *data, EMsgVariableType type, S32 size)
- {
- addDataFast(gMessageStringTable.getString(varname), data, type, size);
- }
-
- void addDataFast(const char *varname, const void *data, EMsgVariableType type); // DEPRECATED - not typed, doesn't check storage space
- void addData(const char *varname, const void *data, EMsgVariableType type)
- {
- addDataFast(gMessageStringTable.getString(varname), data, type);
- }
public:
- void addBinaryDataFast(const char *varname, const void *data, S32 size)
- {
- addDataFast(varname, data, MVT_FIXED, size);
- }
- void addBinaryData(const char *varname, const void *data, S32 size)
- {
- addDataFast(gMessageStringTable.getString(varname), data, MVT_FIXED, size);
- }
+ void addBinaryDataFast(const char *varname, const void *data, S32 size);
+ void addBinaryData(const char *varname, const void *data, S32 size);
void addBOOLFast( const char* varname, BOOL b); // typed, checks storage space
void addBOOL( const char* varname, BOOL b); // typed, checks storage space
@@ -415,7 +380,7 @@ public:
void addF32( const char *varname, F32 f); // typed, checks storage space
void addS32Fast( const char *varname, S32 s); // typed, checks storage space
void addS32( const char *varname, S32 s); // typed, checks storage space
- virtual void addU32Fast( const char *varname, U32 u); // typed, checks storage space
+ void addU32Fast( const char *varname, U32 u); // typed, checks storage space
void addU32( const char *varname, U32 u); // typed, checks storage space
void addU64Fast( const char *varname, U64 lu); // typed, checks storage space
void addU64( const char *varname, U64 lu); // typed, checks storage space
@@ -429,7 +394,7 @@ public:
void addVector3d( const char *varname, const LLVector3d& vec); // typed, checks storage space
void addQuatFast( const char *varname, const LLQuaternion& quat); // typed, checks storage space
void addQuat( const char *varname, const LLQuaternion& quat); // typed, checks storage space
- virtual void addUUIDFast( const char *varname, const LLUUID& uuid); // typed, checks storage space
+ void addUUIDFast( const char *varname, const LLUUID& uuid); // typed, checks storage space
void addUUID( const char *varname, const LLUUID& uuid); // typed, checks storage space
void addIPAddrFast( const char *varname, const U32 ip); // typed, checks storage space
void addIPAddr( const char *varname, const U32 ip); // typed, checks storage space
@@ -440,8 +405,8 @@ public:
void addStringFast( const char* varname, const std::string& s); // typed, checks storage space
void addString( const char* varname, const std::string& s); // typed, checks storage space
+ S32 getCurrentSendTotal() const;
TPACKETID getCurrentRecvPacketID() { return mCurrentRecvPacketID; }
- S32 getCurrentSendTotal() const { return mCurrentSendTotal; }
// This method checks for current send total and returns true if
// you need to go to the next block type or need to start a new
@@ -450,16 +415,16 @@ public:
BOOL isSendFull(const char* blockname = NULL);
BOOL isSendFullFast(const char* blockname = NULL);
- BOOL removeLastBlock();
+ BOOL removeLastBlock();
- void buildMessage();
+ //void buildMessage();
S32 zeroCode(U8 **data, S32 *data_size);
S32 zeroCodeExpand(U8 **data, S32 *data_size);
S32 zeroCodeAdjustCurrentSendTotal();
// Uses ping-based retry
- virtual S32 sendReliable(const LLHost &host);
+ S32 sendReliable(const LLHost &host);
// Uses ping-based retry
S32 sendReliable(const U32 circuit) { return sendReliable(findHost(circuit)); }
@@ -488,28 +453,10 @@ public:
S32 sendMessage(const LLHost &host);
S32 sendMessage(const U32 circuit);
- BOOL decodeData(const U8 *buffer, const LLHost &host);
-
- // TODO: Consolide these functions
- // TODO: Make these private, force use of typed functions.
- // If size is not 0, an error is generated if size doesn't exactly match the size of the data.
- // At all times, the number if bytes written to *datap is <= max_size.
-private:
- void getDataFast(const char *blockname, const char *varname, void *datap, S32 size = 0, S32 blocknum = 0, S32 max_size = S32_MAX);
- void getData(const char *blockname, const char *varname, void *datap, S32 size = 0, S32 blocknum = 0, S32 max_size = S32_MAX)
- {
- getDataFast(gMessageStringTable.getString(blockname), gMessageStringTable.getString(varname), datap, size, blocknum, max_size);
- }
-public:
- void getBinaryDataFast(const char *blockname, const char *varname, void *datap, S32 size, S32 blocknum = 0, S32 max_size = S32_MAX)
- {
- getDataFast(blockname, varname, datap, size, blocknum, max_size);
- }
- void getBinaryData(const char *blockname, const char *varname, void *datap, S32 size, S32 blocknum = 0, S32 max_size = S32_MAX)
- {
- getDataFast(gMessageStringTable.getString(blockname), gMessageStringTable.getString(varname), datap, size, blocknum, max_size);
- }
+ // BOOL decodeData(const U8 *buffer, const LLHost &host);
+ void getBinaryDataFast(const char *blockname, const char *varname, void *datap, S32 size, S32 blocknum = 0, S32 max_size = S32_MAX);
+ void getBinaryData(const char *blockname, const char *varname, void *datap, S32 size, S32 blocknum = 0, S32 max_size = S32_MAX);
void getBOOLFast( const char *block, const char *var, BOOL &data, S32 blocknum = 0);
void getBOOL( const char *block, const char *var, BOOL &data, S32 blocknum = 0);
void getS8Fast( const char *block, const char *var, S8 &data, S32 blocknum = 0);
@@ -524,9 +471,9 @@ public:
void getS32( const char *block, const char *var, S32 &data, S32 blocknum = 0);
void getF32Fast( const char *block, const char *var, F32 &data, S32 blocknum = 0);
void getF32( const char *block, const char *var, F32 &data, S32 blocknum = 0);
- virtual void getU32Fast( const char *block, const char *var, U32 &data, S32 blocknum = 0);
+ void getU32Fast( const char *block, const char *var, U32 &data, S32 blocknum = 0);
void getU32( const char *block, const char *var, U32 &data, S32 blocknum = 0);
- virtual void getU64Fast( const char *block, const char *var, U64 &data, S32 blocknum = 0);
+ void getU64Fast( const char *block, const char *var, U64 &data, S32 blocknum = 0);
void getU64( const char *block, const char *var, U64 &data, S32 blocknum = 0);
void getF64Fast( const char *block, const char *var, F64 &data, S32 blocknum = 0);
void getF64( const char *block, const char *var, F64 &data, S32 blocknum = 0);
@@ -538,13 +485,13 @@ public:
void getVector3d(const char *block, const char *var, LLVector3d &vec, S32 blocknum = 0);
void getQuatFast( const char *block, const char *var, LLQuaternion &q, S32 blocknum = 0);
void getQuat( const char *block, const char *var, LLQuaternion &q, S32 blocknum = 0);
- virtual void getUUIDFast( const char *block, const char *var, LLUUID &uuid, S32 blocknum = 0);
+ void getUUIDFast( const char *block, const char *var, LLUUID &uuid, S32 blocknum = 0);
void getUUID( const char *block, const char *var, LLUUID &uuid, S32 blocknum = 0);
- virtual void getIPAddrFast( const char *block, const char *var, U32 &ip, S32 blocknum = 0);
+ void getIPAddrFast( const char *block, const char *var, U32 &ip, S32 blocknum = 0);
void getIPAddr( const char *block, const char *var, U32 &ip, S32 blocknum = 0);
- virtual void getIPPortFast( const char *block, const char *var, U16 &port, S32 blocknum = 0);
+ void getIPPortFast( const char *block, const char *var, U16 &port, S32 blocknum = 0);
void getIPPort( const char *block, const char *var, U16 &port, S32 blocknum = 0);
- virtual void getStringFast( const char *block, const char *var, S32 buffer_size, char *buffer, S32 blocknum = 0);
+ void getStringFast( const char *block, const char *var, S32 buffer_size, char *buffer, S32 blocknum = 0);
void getString( const char *block, const char *var, S32 buffer_size, char *buffer, S32 blocknum = 0);
@@ -566,7 +513,7 @@ public:
void showCircuitInfo();
LLString getCircuitInfoString();
- virtual U32 getOurCircuitCode();
+ U32 getOurCircuitCode();
void enableCircuit(const LLHost &host, BOOL trusted);
void disableCircuit(const LLHost &host);
@@ -612,20 +559,12 @@ public:
void sanityCheck();
S32 getNumberOfBlocksFast(const char *blockname);
- S32 getNumberOfBlocks(const char *blockname)
- {
- return getNumberOfBlocksFast(gMessageStringTable.getString(blockname));
- }
+ S32 getNumberOfBlocks(const char *blockname);
S32 getSizeFast(const char *blockname, const char *varname);
- S32 getSize(const char *blockname, const char *varname)
- {
- return getSizeFast(gMessageStringTable.getString(blockname), gMessageStringTable.getString(varname));
- }
- S32 getSizeFast(const char *blockname, S32 blocknum, const char *varname); // size in bytes of variable length data
- S32 getSize(const char *blockname, S32 blocknum, const char *varname)
- {
- return getSizeFast(gMessageStringTable.getString(blockname), blocknum, gMessageStringTable.getString(varname));
- }
+ S32 getSize(const char *blockname, const char *varname);
+ S32 getSizeFast(const char *blockname, S32 blocknum,
+ const char *varname); // size in bytes of data
+ S32 getSize(const char *blockname, S32 blocknum, const char *varname);
void resetReceiveCounts(); // resets receive counts for all message types to 0
void dumpReceiveCounts(); // dumps receive count for each message type to llinfos
@@ -640,14 +579,14 @@ public:
void stopLogging(); // flush and close file
void summarizeLogs(std::ostream& str); // log statistics
- S32 getReceiveSize() const { return mReceiveSize; }
- S32 getReceiveCompressedSize() const { return mIncomingCompressedSize; }
+ S32 getReceiveSize() const;
+ S32 getReceiveCompressedSize() const { return mIncomingCompressedSize; }
S32 getReceiveBytes() const;
S32 getUnackedListSize() const { return mUnackedListSize; }
- const char* getCurrentSMessageName() const { return mCurrentSMessageName; }
- const char* getCurrentSBlockName() const { return mCurrentSBlockName; }
+ //const char* getCurrentSMessageName() const { return mCurrentSMessageName; }
+ //const char* getCurrentSBlockName() const { return mCurrentSBlockName; }
// friends
friend std::ostream& operator<<(std::ostream& s, LLMessageSystem &msg);
@@ -656,25 +595,41 @@ public:
void setMaxMessageCounts(const S32 num); // Max number of messages before dumping (neg to disable)
// statics
-public:
+ static BOOL isTemplateConfirmed();
+ static BOOL doesTemplateMatch();
+ static void sendMessageTemplateChecksum(const LLHost&);
+ static void processMessageTemplateChecksumReply(LLMessageSystem *msg,
+ void** user_data);
+ static void sendSecureMessageTemplateChecksum(const LLHost&);
+ static void processSecureTemplateChecksumReply(LLMessageSystem *msg,
+ void** user_data);
static U64 getMessageTimeUsecs(const BOOL update = FALSE); // Get the current message system time in microseconds
static F64 getMessageTimeSeconds(const BOOL update = FALSE); // Get the current message system time in seconds
- static void setTimeDecodes( BOOL b )
- { LLMessageSystem::mTimeDecodes = b; }
-
- static void setTimeDecodesSpamThreshold( F32 seconds )
- { LLMessageSystem::mTimeDecodesSpamThreshold = seconds; }
+ static void setTimeDecodes(BOOL b);
+ static void setTimeDecodesSpamThreshold(F32 seconds);
// message handlers internal to the message systesm
//static void processAssignCircuitCode(LLMessageSystem* msg, void**);
static void processAddCircuitCode(LLMessageSystem* msg, void**);
static void processUseCircuitCode(LLMessageSystem* msg, void**);
+ // dispatch llsd message to http node tree
+ static void dispatch(const std::string& msg_name,
+ const LLSD& message);
+ static void dispatch(const std::string& msg_name,
+ const LLSD& message,
+ LLHTTPNode::ResponsePtr responsep);
+
void setMessageBans(const LLSD& trusted, const LLSD& untrusted);
+
+ // Check UDP messages and pump http_pump to receive HTTP messages.
+ bool checkAllMessages(S64 frame_count, LLPumpIO* http_pump);
private:
// data used in those internal handlers
+ BOOL mTemplateConfirmed;
+ BOOL mTemplateMatches;
// The mCircuitCodes is a map from circuit codes to session
// ids. This allows us to verify sessions on connect.
@@ -685,7 +640,6 @@ private:
// that no one gives them a bad circuit code.
LLUUID mSessionID;
-private:
void addTemplate(LLMessageTemplate *templatep);
void clearReceiveState();
BOOL decodeTemplate( const U8* buffer, S32 buffer_size, LLMessageTemplate** msg_template );
@@ -695,7 +649,6 @@ private:
void logValidMsg(LLCircuitData *cdp, const LLHost& sender, BOOL recv_reliable, BOOL recv_resent, BOOL recv_acks );
void logRanOffEndOfPacket( const LLHost& sender );
-private:
class LLMessageCountInfo
{
public:
@@ -711,26 +664,10 @@ private:
S32 mTrueReceiveSize;
// Must be valid during decode
- S32 mReceiveSize;
- TPACKETID mCurrentRecvPacketID; // packet ID of current receive packet (for reporting)
- LLMessageTemplate *mCurrentRMessageTemplate;
- LLMsgData *mCurrentRMessageData;
- S32 mIncomingCompressedSize; // original size of compressed msg (0 if uncomp.)
- LLHost mLastSender;
-
- // send message storage
- LLMsgData *mCurrentSMessageData;
- LLMessageTemplate *mCurrentSMessageTemplate;
- LLMsgBlkData *mCurrentSDataBlock;
- char *mCurrentSMessageName;
- char *mCurrentSBlockName;
-
+
BOOL mbError;
S32 mErrorCode;
- BOOL mbSBuilt; // is send message built?
- BOOL mbSClear; // is the send message clear?
-
F64 mResendDumpTime; // The last time we dumped resends
LLMessageCountInfo mMessageCountList[MAX_MESSAGE_COUNT_NUM];
@@ -753,16 +690,31 @@ private:
static F32 mTimeDecodesSpamThreshold; // If mTimeDecodes is on, all this many seconds for each msg decode before spamming
static BOOL mTimeDecodes; // Measure time for all message decodes if TRUE;
+ msg_timing_callback mTimingCallback;
+ void* mTimingCallbackData;
+
void init(); // ctor shared initialisation.
+
+ LLHost mLastSender;
+ S32 mIncomingCompressedSize; // original size of compressed msg (0 if uncomp.)
+ TPACKETID mCurrentRecvPacketID; // packet ID of current receive packet (for reporting)
+
+ LLMessageBuilder* mMessageBuilder;
+ LLTemplateMessageBuilder* mTemplateMessageBuilder;
+ LLSDMessageBuilder* mLLSDMessageBuilder;
+ LLMessageReader* mMessageReader;
+ LLTemplateMessageReader* mTemplateMessageReader;
+ LLSDMessageReader* mLLSDMessageReader;
+
+ friend class LLMessageHandlerBridge;
+
+ bool callHandler(const char *name, bool trustedSource,
+ LLMessageSystem* msg);
};
// external hook into messaging system
extern LLMessageSystem *gMessageSystem;
-//extern const char* MESSAGE_LOG_FILENAME;
-
-void encrypt_template(const char *src_name, const char *dest_name);
-BOOL decrypt_template(const char *src_name, const char *dest_name);
// Must specific overall system version, which is used to determine
// if a patch is available in the message template checksum verification.
@@ -774,7 +726,8 @@ BOOL start_messaging_system(
S32 version_minor,
S32 version_patch,
BOOL b_dump_prehash_file,
- const std::string& secret);
+ const std::string& secret,
+ const LLUseCircuitCodeResponder* responder = NULL);
void end_messaging_system();
@@ -950,12 +903,9 @@ inline void *ntohmemcpy(void *s, const void *ct, EMsgVariableType type, size_t n
}
-inline const LLHost& LLMessageSystem::getSender() const
-{
- return mLastSender;
-}
+inline const LLHost& LLMessageSystem::getSender() const {return mLastSender;}
-inline U32 LLMessageSystem::getSenderIP() const
+inline U32 LLMessageSystem::getSenderIP() const
{
return mLastSender.getAddress();
}
@@ -965,308 +915,13 @@ inline U32 LLMessageSystem::getSenderPort() const
return mLastSender.getPort();
}
-inline void LLMessageSystem::addS8Fast(const char *varname, S8 s)
-{
- addDataFast(varname, &s, MVT_S8, sizeof(s));
-}
-
-inline void LLMessageSystem::addS8(const char *varname, S8 s)
-{
- addDataFast(gMessageStringTable.getString(varname), &s, MVT_S8, sizeof(s));
-}
-
-inline void LLMessageSystem::addU8Fast(const char *varname, U8 u)
-{
- addDataFast(varname, &u, MVT_U8, sizeof(u));
-}
-
-inline void LLMessageSystem::addU8(const char *varname, U8 u)
-{
- addDataFast(gMessageStringTable.getString(varname), &u, MVT_U8, sizeof(u));
-}
-
-inline void LLMessageSystem::addS16Fast(const char *varname, S16 i)
-{
- addDataFast(varname, &i, MVT_S16, sizeof(i));
-}
-
-inline void LLMessageSystem::addS16(const char *varname, S16 i)
-{
- addDataFast(gMessageStringTable.getString(varname), &i, MVT_S16, sizeof(i));
-}
-
-inline void LLMessageSystem::addU16Fast(const char *varname, U16 i)
-{
- addDataFast(varname, &i, MVT_U16, sizeof(i));
-}
-
-inline void LLMessageSystem::addU16(const char *varname, U16 i)
-{
- addDataFast(gMessageStringTable.getString(varname), &i, MVT_U16, sizeof(i));
-}
-
-inline void LLMessageSystem::addF32Fast(const char *varname, F32 f)
-{
- addDataFast(varname, &f, MVT_F32, sizeof(f));
-}
-
-inline void LLMessageSystem::addF32(const char *varname, F32 f)
-{
- addDataFast(gMessageStringTable.getString(varname), &f, MVT_F32, sizeof(f));
-}
-
-inline void LLMessageSystem::addS32Fast(const char *varname, S32 s)
-{
- addDataFast(varname, &s, MVT_S32, sizeof(s));
-}
-
-inline void LLMessageSystem::addS32(const char *varname, S32 s)
-{
- addDataFast(gMessageStringTable.getString(varname), &s, MVT_S32, sizeof(s));
-}
-
-inline void LLMessageSystem::addU32Fast(const char *varname, U32 u)
-{
- addDataFast(varname, &u, MVT_U32, sizeof(u));
-}
-
-inline void LLMessageSystem::addU32(const char *varname, U32 u)
-{
- addDataFast(gMessageStringTable.getString(varname), &u, MVT_U32, sizeof(u));
-}
-
-inline void LLMessageSystem::addU64Fast(const char *varname, U64 lu)
-{
- addDataFast(varname, &lu, MVT_U64, sizeof(lu));
-}
-
-inline void LLMessageSystem::addU64(const char *varname, U64 lu)
-{
- addDataFast(gMessageStringTable.getString(varname), &lu, MVT_U64, sizeof(lu));
-}
-
-inline void LLMessageSystem::addF64Fast(const char *varname, F64 d)
-{
- addDataFast(varname, &d, MVT_F64, sizeof(d));
-}
-
-inline void LLMessageSystem::addF64(const char *varname, F64 d)
-{
- addDataFast(gMessageStringTable.getString(varname), &d, MVT_F64, sizeof(d));
-}
-
-inline void LLMessageSystem::addIPAddrFast(const char *varname, U32 u)
-{
- addDataFast(varname, &u, MVT_IP_ADDR, sizeof(u));
-}
-
-inline void LLMessageSystem::addIPAddr(const char *varname, U32 u)
-{
- addDataFast(gMessageStringTable.getString(varname), &u, MVT_IP_ADDR, sizeof(u));
-}
-
-inline void LLMessageSystem::addIPPortFast(const char *varname, U16 u)
-{
- u = htons(u);
- addDataFast(varname, &u, MVT_IP_PORT, sizeof(u));
-}
-
-inline void LLMessageSystem::addIPPort(const char *varname, U16 u)
-{
- u = htons(u);
- addDataFast(gMessageStringTable.getString(varname), &u, MVT_IP_PORT, sizeof(u));
-}
-
-inline void LLMessageSystem::addBOOLFast(const char* varname, BOOL b)
-{
- // Can't just cast a BOOL (actually a U32) to a U8.
- // In some cases the low order bits will be zero.
- U8 temp = (b != 0);
- addDataFast(varname, &temp, MVT_BOOL, sizeof(temp));
-}
-
-inline void LLMessageSystem::addBOOL(const char* varname, BOOL b)
-{
- // Can't just cast a BOOL (actually a U32) to a U8.
- // In some cases the low order bits will be zero.
- U8 temp = (b != 0);
- addDataFast(gMessageStringTable.getString(varname), &temp, MVT_BOOL, sizeof(temp));
-}
-
-inline void LLMessageSystem::addStringFast(const char* varname, const char* s)
-{
- if (s)
- addDataFast( varname, (void *)s, MVT_VARIABLE, (S32)strlen(s) + 1); /* Flawfinder: ignore */
- else
- addDataFast( varname, NULL, MVT_VARIABLE, 0);
-}
-
-inline void LLMessageSystem::addString(const char* varname, const char* s)
-{
- if (s)
- addDataFast( gMessageStringTable.getString(varname), (void *)s, MVT_VARIABLE, (S32)strlen(s) + 1); /* Flawfinder: ignore */
- else
- addDataFast( gMessageStringTable.getString(varname), NULL, MVT_VARIABLE, 0);
-}
-
-inline void LLMessageSystem::addStringFast(const char* varname, const std::string& s)
-{
- if (s.size())
- addDataFast( varname, (void *)s.c_str(), MVT_VARIABLE, (S32)(s.size()) + 1);
- else
- addDataFast( varname, NULL, MVT_VARIABLE, 0);
-}
-
-inline void LLMessageSystem::addString(const char* varname, const std::string& s)
-{
- if (s.size())
- addDataFast( gMessageStringTable.getString(varname), (void *)s.c_str(), MVT_VARIABLE, (S32)(s.size()) + 1);
- else
- addDataFast( gMessageStringTable.getString(varname), NULL, MVT_VARIABLE, 0);
-}
-
-
-//-----------------------------------------------------------------------------
-// Retrieval aliases
-//-----------------------------------------------------------------------------
-inline void LLMessageSystem::getS8Fast(const char *block, const char *var, S8 &u, S32 blocknum)
-{
- getDataFast(block, var, &u, sizeof(S8), blocknum);
-}
-
-inline void LLMessageSystem::getS8(const char *block, const char *var, S8 &u, S32 blocknum)
-{
- getDataFast(gMessageStringTable.getString(block), gMessageStringTable.getString(var), &u, sizeof(S8), blocknum);
-}
-
-inline void LLMessageSystem::getU8Fast(const char *block, const char *var, U8 &u, S32 blocknum)
-{
- getDataFast(block, var, &u, sizeof(U8), blocknum);
-}
-
-inline void LLMessageSystem::getU8(const char *block, const char *var, U8 &u, S32 blocknum)
-{
- getDataFast(gMessageStringTable.getString(block), gMessageStringTable.getString(var), &u, sizeof(U8), blocknum);
-}
-
-inline void LLMessageSystem::getBOOLFast(const char *block, const char *var, BOOL &b, S32 blocknum )
-{
- U8 value;
- getDataFast(block, var, &value, sizeof(U8), blocknum);
- b = (BOOL) value;
-}
-
-inline void LLMessageSystem::getBOOL(const char *block, const char *var, BOOL &b, S32 blocknum )
-{
- U8 value;
- getDataFast(gMessageStringTable.getString(block), gMessageStringTable.getString(var), &value, sizeof(U8), blocknum);
- b = (BOOL) value;
-}
-
-inline void LLMessageSystem::getS16Fast(const char *block, const char *var, S16 &d, S32 blocknum)
-{
- getDataFast(block, var, &d, sizeof(S16), blocknum);
-}
-
-inline void LLMessageSystem::getS16(const char *block, const char *var, S16 &d, S32 blocknum)
-{
- getDataFast(gMessageStringTable.getString(block), gMessageStringTable.getString(var), &d, sizeof(S16), blocknum);
-}
-
-inline void LLMessageSystem::getU16Fast(const char *block, const char *var, U16 &d, S32 blocknum)
-{
- getDataFast(block, var, &d, sizeof(U16), blocknum);
-}
-
-inline void LLMessageSystem::getU16(const char *block, const char *var, U16 &d, S32 blocknum)
-{
- getDataFast(gMessageStringTable.getString(block), gMessageStringTable.getString(var), &d, sizeof(U16), blocknum);
-}
-
-inline void LLMessageSystem::getS32Fast(const char *block, const char *var, S32 &d, S32 blocknum)
-{
- getDataFast(block, var, &d, sizeof(S32), blocknum);
-}
-
-inline void LLMessageSystem::getS32(const char *block, const char *var, S32 &d, S32 blocknum)
-{
- getDataFast(gMessageStringTable.getString(block), gMessageStringTable.getString(var), &d, sizeof(S32), blocknum);
-}
-
-inline void LLMessageSystem::getU32Fast(const char *block, const char *var, U32 &d, S32 blocknum)
-{
- getDataFast(block, var, &d, sizeof(U32), blocknum);
-}
-
-inline void LLMessageSystem::getU32(const char *block, const char *var, U32 &d, S32 blocknum)
-{
- getDataFast(gMessageStringTable.getString(block), gMessageStringTable.getString(var), &d, sizeof(U32), blocknum);
-}
-
-inline void LLMessageSystem::getU64Fast(const char *block, const char *var, U64 &d, S32 blocknum)
-{
- getDataFast(block, var, &d, sizeof(U64), blocknum);
-}
-
-inline void LLMessageSystem::getU64(const char *block, const char *var, U64 &d, S32 blocknum)
-{
- getDataFast(gMessageStringTable.getString(block), gMessageStringTable.getString(var), &d, sizeof(U64), blocknum);
-}
-
-
-inline void LLMessageSystem::getIPAddrFast(const char *block, const char *var, U32 &u, S32 blocknum)
-{
- getDataFast(block, var, &u, sizeof(U32), blocknum);
-}
-
-inline void LLMessageSystem::getIPAddr(const char *block, const char *var, U32 &u, S32 blocknum)
-{
- getDataFast(gMessageStringTable.getString(block), gMessageStringTable.getString(var), &u, sizeof(U32), blocknum);
-}
-
-inline void LLMessageSystem::getIPPortFast(const char *block, const char *var, U16 &u, S32 blocknum)
-{
- getDataFast(block, var, &u, sizeof(U16), blocknum);
- u = ntohs(u);
-}
-
-inline void LLMessageSystem::getIPPort(const char *block, const char *var, U16 &u, S32 blocknum)
-{
- getDataFast(gMessageStringTable.getString(block), gMessageStringTable.getString(var), &u, sizeof(U16), blocknum);
- u = ntohs(u);
-}
-
-
-inline void LLMessageSystem::getStringFast(const char *block, const char *var, S32 buffer_size, char *s, S32 blocknum )
-{
- s[0] = '\0';
- getDataFast(block, var, s, 0, blocknum, buffer_size);
- s[buffer_size - 1] = '\0';
-}
-
-inline void LLMessageSystem::getString(const char *block, const char *var, S32 buffer_size, char *s, S32 blocknum )
-{
- s[0] = '\0';
- getDataFast(gMessageStringTable.getString(block), gMessageStringTable.getString(var), s, 0, blocknum, buffer_size);
- s[buffer_size - 1] = '\0';
-}
-
//-----------------------------------------------------------------------------
// Transmission aliases
//-----------------------------------------------------------------------------
-//inline S32 LLMessageSystem::sendMessage(U32 ip, U32 port, BOOL zero_code)
-//{
-// return sendMessage(LLHost(ip, port), zero_code);
-//}
-
-//inline S32 LLMessageSystem::sendMessage(const char *ip_str, U32 port, BOOL zero_code)
-//{
-// return sendMessage(LLHost(ip_str, port), zero_code);
-//}
-inline S32 LLMessageSystem::sendMessage(const U32 circuit)//, BOOL zero_code)
+inline S32 LLMessageSystem::sendMessage(const U32 circuit)
{
- return sendMessage(findHost(circuit));//, zero_code);
+ return sendMessage(findHost(circuit));
}
#endif
diff --git a/linden/indra/llmessage/message_prehash.cpp b/linden/indra/llmessage/message_prehash.cpp
index ef01c82..39b3737 100644
--- a/linden/indra/llmessage/message_prehash.cpp
+++ b/linden/indra/llmessage/message_prehash.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -39,7 +40,6 @@ char * _PREHASH_X;
char * _PREHASH_Y;
char * _PREHASH_Z;
char * _PREHASH_AddFlags;
-char * _PREHASH_ReservedNewbie;
char * _PREHASH_FailureInfo;
char * _PREHASH_MapData;
char * _PREHASH_AddItem;
@@ -108,7 +108,6 @@ char * _PREHASH_RelatedRights;
char * _PREHASH_RedirectGridX;
char * _PREHASH_RedirectGridY;
char * _PREHASH_TransferID;
-char * _PREHASH_Transacted;
char * _PREHASH_TexturesChanged;
char * _PREHASH_UserLookAt;
char * _PREHASH_TestBlock1;
@@ -135,7 +134,6 @@ char * _PREHASH_SetSimStatusInDatabase;
char * _PREHASH_SetSimPresenceInDatabase;
char * _PREHASH_CameraProperty;
char * _PREHASH_BrushSize;
-char * _PREHASH_StartExpungeProcess;
char * _PREHASH_SimulatorSetMap;
char * _PREHASH_RegionPresenceRequestByRegionID;
char * _PREHASH_ParcelObjectOwnersReply;
@@ -229,8 +227,8 @@ char * _PREHASH_SimName;
char * _PREHASH_UserReport;
char * _PREHASH_DownloadPriority;
char * _PREHASH_ToAgentId;
-char * _PREHASH_Mag;
char * _PREHASH_DirPopularQuery;
+char * _PREHASH_Mag;
char * _PREHASH_ParcelPropertiesRequestByID;
char * _PREHASH_ObjectLink;
char * _PREHASH_RpcScriptReplyInbound;
@@ -439,7 +437,6 @@ char * _PREHASH_TerminateFriendship;
char * _PREHASH_TaskData;
char * _PREHASH_SimWideMaxPrims;
char * _PREHASH_TotalPrims;
-char * _PREHASH_SourceFilename;
char * _PREHASH_ProfileBegin;
char * _PREHASH_MoneyDetailsRequest;
char * _PREHASH_Request;
@@ -486,7 +483,6 @@ char * _PREHASH_ParamInUse;
char * _PREHASH_GodKickUser;
char * _PREHASH_PickName;
char * _PREHASH_TaskName;
-char * _PREHASH_ParcelGodReserveForNewbie;
char * _PREHASH_SubType;
char * _PREHASH_ObjectCount;
char * _PREHASH_RegionPresenceRequestByHandle;
@@ -505,10 +501,13 @@ char * _PREHASH_UpdateParcel;
char * _PREHASH_ClearAgentSessions;
char * _PREHASH_SetAlwaysRun;
char * _PREHASH_NVPair;
+char * _PREHASH_SearchType;
char * _PREHASH_ObjectSpinStart;
char * _PREHASH_UseEstateSun;
char * _PREHASH_LogoutBlock;
+char * _PREHASH_RelayLogControl;
char * _PREHASH_RegionID;
+char * _PREHASH_AbuseRegionID;
char * _PREHASH_Creator;
char * _PREHASH_ProposalText;
char * _PREHASH_DirEventsReply;
@@ -553,7 +552,6 @@ char * _PREHASH_MaxY;
char * _PREHASH_TextureAnim;
char * _PREHASH_ReturnIDs;
char * _PREHASH_Date;
-char * _PREHASH_GestureUpdate;
char * _PREHASH_AgentWearablesUpdate;
char * _PREHASH_AgentDataUpdate;
char * _PREHASH_Hash;
@@ -575,7 +573,6 @@ char * _PREHASH_HistoryItemData;
char * _PREHASH_AgentCachedTexture;
char * _PREHASH_Subject;
char * _PREHASH_East;
-char * _PREHASH_GodExpungeUser;
char * _PREHASH_QueryReplies;
char * _PREHASH_ObjectCategory;
char * _PREHASH_Time;
@@ -802,6 +799,7 @@ char * _PREHASH_UnsubscribeLoad;
char * _PREHASH_Packet;
char * _PREHASH_UndoLand;
char * _PREHASH_SimAccess;
+char * _PREHASH_AbuserID;
char * _PREHASH_MembershipFee;
char * _PREHASH_InviteGroupResponse;
char * _PREHASH_CreateInventoryFolder;
@@ -939,6 +937,7 @@ char * _PREHASH_ImageNotInDatabase;
char * _PREHASH_StartDate;
char * _PREHASH_AnimID;
char * _PREHASH_Serial;
+char * _PREHASH_AbuseRegionName;
char * _PREHASH_ControlPort;
char * _PREHASH_ModifyLand;
char * _PREHASH_Digest;
@@ -1003,11 +1002,11 @@ char * _PREHASH_EventFlags;
char * _PREHASH_TallyVotes;
char * _PREHASH_Result;
char * _PREHASH_LookAt;
+char * _PREHASH_SearchOrder;
char * _PREHASH_PayButton;
char * _PREHASH_SelfCount;
char * _PREHASH_PacketCount;
char * _PREHASH_ParcelBuyPass;
-char * _PREHASH_Identified;
char * _PREHASH_OldItemID;
char * _PREHASH_RegionPort;
char * _PREHASH_PriceEnergyUnit;
@@ -1043,7 +1042,6 @@ char * _PREHASH_EconomyDataRequest;
char * _PREHASH_TeleportLureRequest;
char * _PREHASH_FolderID;
char * _PREHASH_RegionHandleRequest;
-char * _PREHASH_GestureRequest;
char * _PREHASH_ScriptDataRequest;
char * _PREHASH_GroupRoleDataRequest;
char * _PREHASH_GroupTitlesRequest;
@@ -1187,11 +1185,9 @@ char * _PREHASH_Ratio;
char * _PREHASH_JoinGroupReply;
char * _PREHASH_LiveHelpGroupReply;
char * _PREHASH_Score;
-char * _PREHASH_ExpungeData;
char * _PREHASH_Image;
char * _PREHASH_ObjectClickAction;
char * _PREHASH_Delta;
-char * _PREHASH_InitiateUpload;
char * _PREHASH_Parameter;
char * _PREHASH_Flags;
char * _PREHASH_Plane;
@@ -1227,7 +1223,6 @@ char * _PREHASH_Disconnect;
char * _PREHASH_SimPosition;
char * _PREHASH_SimWideTotalPrims;
char * _PREHASH_Index;
-char * _PREHASH_BaseFilename;
char * _PREHASH_SimFilename;
char * _PREHASH_LastOwnerID;
char * _PREHASH_GroupNoticeRequest;
@@ -1312,6 +1307,7 @@ char * _PREHASH_AssetBlock;
char * _PREHASH_AcceptNotices;
char * _PREHASH_SetGroupAcceptNotices;
char * _PREHASH_CloseCircuit;
+char * _PREHASH_LogControl;
char * _PREHASH_TeleportFinish;
char * _PREHASH_PathRevolutions;
char * _PREHASH_ClassifiedInfoReply;
@@ -1491,7 +1487,6 @@ char * _PREHASH_DirLandReply;
char * _PREHASH_SpaceLocationTeleportReply;
char * _PREHASH_MuteType;
char * _PREHASH_IMViaEMail;
-char * _PREHASH_StartExpungeProcessAck;
char * _PREHASH_RentPrice;
char * _PREHASH_GenericMessage;
char * _PREHASH_ChildAgentAlive;
@@ -1511,7 +1506,6 @@ void init_prehash_data()
_PREHASH_Y = gMessageStringTable.getString("Y");
_PREHASH_Z = gMessageStringTable.getString("Z");
_PREHASH_AddFlags = gMessageStringTable.getString("AddFlags");
- _PREHASH_ReservedNewbie = gMessageStringTable.getString("ReservedNewbie");
_PREHASH_FailureInfo = gMessageStringTable.getString("FailureInfo");
_PREHASH_MapData = gMessageStringTable.getString("MapData");
_PREHASH_AddItem = gMessageStringTable.getString("AddItem");
@@ -1580,7 +1574,6 @@ void init_prehash_data()
_PREHASH_RedirectGridX = gMessageStringTable.getString("RedirectGridX");
_PREHASH_RedirectGridY = gMessageStringTable.getString("RedirectGridY");
_PREHASH_TransferID = gMessageStringTable.getString("TransferID");
- _PREHASH_Transacted = gMessageStringTable.getString("Transacted");
_PREHASH_TexturesChanged = gMessageStringTable.getString("TexturesChanged");
_PREHASH_UserLookAt = gMessageStringTable.getString("UserLookAt");
_PREHASH_TestBlock1 = gMessageStringTable.getString("TestBlock1");
@@ -1607,7 +1600,6 @@ void init_prehash_data()
_PREHASH_SetSimPresenceInDatabase = gMessageStringTable.getString("SetSimPresenceInDatabase");
_PREHASH_CameraProperty = gMessageStringTable.getString("CameraProperty");
_PREHASH_BrushSize = gMessageStringTable.getString("BrushSize");
- _PREHASH_StartExpungeProcess = gMessageStringTable.getString("StartExpungeProcess");
_PREHASH_SimulatorSetMap = gMessageStringTable.getString("SimulatorSetMap");
_PREHASH_RegionPresenceRequestByRegionID = gMessageStringTable.getString("RegionPresenceRequestByRegionID");
_PREHASH_ParcelObjectOwnersReply = gMessageStringTable.getString("ParcelObjectOwnersReply");
@@ -1701,8 +1693,8 @@ void init_prehash_data()
_PREHASH_UserReport = gMessageStringTable.getString("UserReport");
_PREHASH_DownloadPriority = gMessageStringTable.getString("DownloadPriority");
_PREHASH_ToAgentId = gMessageStringTable.getString("ToAgentId");
- _PREHASH_Mag = gMessageStringTable.getString("Mag");
_PREHASH_DirPopularQuery = gMessageStringTable.getString("DirPopularQuery");
+ _PREHASH_Mag = gMessageStringTable.getString("Mag");
_PREHASH_ParcelPropertiesRequestByID = gMessageStringTable.getString("ParcelPropertiesRequestByID");
_PREHASH_ObjectLink = gMessageStringTable.getString("ObjectLink");
_PREHASH_RpcScriptReplyInbound = gMessageStringTable.getString("RpcScriptReplyInbound");
@@ -1911,7 +1903,6 @@ void init_prehash_data()
_PREHASH_TaskData = gMessageStringTable.getString("TaskData");
_PREHASH_SimWideMaxPrims = gMessageStringTable.getString("SimWideMaxPrims");
_PREHASH_TotalPrims = gMessageStringTable.getString("TotalPrims");
- _PREHASH_SourceFilename = gMessageStringTable.getString("SourceFilename");
_PREHASH_ProfileBegin = gMessageStringTable.getString("ProfileBegin");
_PREHASH_MoneyDetailsRequest = gMessageStringTable.getString("MoneyDetailsRequest");
_PREHASH_Request = gMessageStringTable.getString("Request");
@@ -1958,7 +1949,6 @@ void init_prehash_data()
_PREHASH_GodKickUser = gMessageStringTable.getString("GodKickUser");
_PREHASH_PickName = gMessageStringTable.getString("PickName");
_PREHASH_TaskName = gMessageStringTable.getString("TaskName");
- _PREHASH_ParcelGodReserveForNewbie = gMessageStringTable.getString("ParcelGodReserveForNewbie");
_PREHASH_SubType = gMessageStringTable.getString("SubType");
_PREHASH_ObjectCount = gMessageStringTable.getString("ObjectCount");
_PREHASH_RegionPresenceRequestByHandle = gMessageStringTable.getString("RegionPresenceRequestByHandle");
@@ -1977,10 +1967,13 @@ void init_prehash_data()
_PREHASH_ClearAgentSessions = gMessageStringTable.getString("ClearAgentSessions");
_PREHASH_SetAlwaysRun = gMessageStringTable.getString("SetAlwaysRun");
_PREHASH_NVPair = gMessageStringTable.getString("NVPair");
+ _PREHASH_SearchType = gMessageStringTable.getString("SearchType");
_PREHASH_ObjectSpinStart = gMessageStringTable.getString("ObjectSpinStart");
_PREHASH_UseEstateSun = gMessageStringTable.getString("UseEstateSun");
_PREHASH_LogoutBlock = gMessageStringTable.getString("LogoutBlock");
+ _PREHASH_RelayLogControl = gMessageStringTable.getString("RelayLogControl");
_PREHASH_RegionID = gMessageStringTable.getString("RegionID");
+ _PREHASH_AbuseRegionID = gMessageStringTable.getString("AbuseRegionID");
_PREHASH_Creator = gMessageStringTable.getString("Creator");
_PREHASH_ProposalText = gMessageStringTable.getString("ProposalText");
_PREHASH_DirEventsReply = gMessageStringTable.getString("DirEventsReply");
@@ -2025,7 +2018,6 @@ void init_prehash_data()
_PREHASH_TextureAnim = gMessageStringTable.getString("TextureAnim");
_PREHASH_ReturnIDs = gMessageStringTable.getString("ReturnIDs");
_PREHASH_Date = gMessageStringTable.getString("Date");
- _PREHASH_GestureUpdate = gMessageStringTable.getString("GestureUpdate");
_PREHASH_AgentWearablesUpdate = gMessageStringTable.getString("AgentWearablesUpdate");
_PREHASH_AgentDataUpdate = gMessageStringTable.getString("AgentDataUpdate");
_PREHASH_Hash = gMessageStringTable.getString("Hash");
@@ -2047,7 +2039,6 @@ void init_prehash_data()
_PREHASH_AgentCachedTexture = gMessageStringTable.getString("AgentCachedTexture");
_PREHASH_Subject = gMessageStringTable.getString("Subject");
_PREHASH_East = gMessageStringTable.getString("East");
- _PREHASH_GodExpungeUser = gMessageStringTable.getString("GodExpungeUser");
_PREHASH_QueryReplies = gMessageStringTable.getString("QueryReplies");
_PREHASH_ObjectCategory = gMessageStringTable.getString("ObjectCategory");
_PREHASH_Time = gMessageStringTable.getString("Time");
@@ -2274,6 +2265,7 @@ void init_prehash_data()
_PREHASH_Packet = gMessageStringTable.getString("Packet");
_PREHASH_UndoLand = gMessageStringTable.getString("UndoLand");
_PREHASH_SimAccess = gMessageStringTable.getString("SimAccess");
+ _PREHASH_AbuserID = gMessageStringTable.getString("AbuserID");
_PREHASH_MembershipFee = gMessageStringTable.getString("MembershipFee");
_PREHASH_InviteGroupResponse = gMessageStringTable.getString("InviteGroupResponse");
_PREHASH_CreateInventoryFolder = gMessageStringTable.getString("CreateInventoryFolder");
@@ -2411,6 +2403,7 @@ void init_prehash_data()
_PREHASH_StartDate = gMessageStringTable.getString("StartDate");
_PREHASH_AnimID = gMessageStringTable.getString("AnimID");
_PREHASH_Serial = gMessageStringTable.getString("Serial");
+ _PREHASH_AbuseRegionName = gMessageStringTable.getString("AbuseRegionName");
_PREHASH_ControlPort = gMessageStringTable.getString("ControlPort");
_PREHASH_ModifyLand = gMessageStringTable.getString("ModifyLand");
_PREHASH_Digest = gMessageStringTable.getString("Digest");
@@ -2475,11 +2468,11 @@ void init_prehash_data()
_PREHASH_TallyVotes = gMessageStringTable.getString("TallyVotes");
_PREHASH_Result = gMessageStringTable.getString("Result");
_PREHASH_LookAt = gMessageStringTable.getString("LookAt");
+ _PREHASH_SearchOrder = gMessageStringTable.getString("SearchOrder");
_PREHASH_PayButton = gMessageStringTable.getString("PayButton");
_PREHASH_SelfCount = gMessageStringTable.getString("SelfCount");
_PREHASH_PacketCount = gMessageStringTable.getString("PacketCount");
_PREHASH_ParcelBuyPass = gMessageStringTable.getString("ParcelBuyPass");
- _PREHASH_Identified = gMessageStringTable.getString("Identified");
_PREHASH_OldItemID = gMessageStringTable.getString("OldItemID");
_PREHASH_RegionPort = gMessageStringTable.getString("RegionPort");
_PREHASH_PriceEnergyUnit = gMessageStringTable.getString("PriceEnergyUnit");
@@ -2515,7 +2508,6 @@ void init_prehash_data()
_PREHASH_TeleportLureRequest = gMessageStringTable.getString("TeleportLureRequest");
_PREHASH_FolderID = gMessageStringTable.getString("FolderID");
_PREHASH_RegionHandleRequest = gMessageStringTable.getString("RegionHandleRequest");
- _PREHASH_GestureRequest = gMessageStringTable.getString("GestureRequest");
_PREHASH_ScriptDataRequest = gMessageStringTable.getString("ScriptDataRequest");
_PREHASH_GroupRoleDataRequest = gMessageStringTable.getString("GroupRoleDataRequest");
_PREHASH_GroupTitlesRequest = gMessageStringTable.getString("GroupTitlesRequest");
@@ -2659,11 +2651,9 @@ void init_prehash_data()
_PREHASH_JoinGroupReply = gMessageStringTable.getString("JoinGroupReply");
_PREHASH_LiveHelpGroupReply = gMessageStringTable.getString("LiveHelpGroupReply");
_PREHASH_Score = gMessageStringTable.getString("Score");
- _PREHASH_ExpungeData = gMessageStringTable.getString("ExpungeData");
_PREHASH_Image = gMessageStringTable.getString("Image");
_PREHASH_ObjectClickAction = gMessageStringTable.getString("ObjectClickAction");
_PREHASH_Delta = gMessageStringTable.getString("Delta");
- _PREHASH_InitiateUpload = gMessageStringTable.getString("InitiateUpload");
_PREHASH_Parameter = gMessageStringTable.getString("Parameter");
_PREHASH_Flags = gMessageStringTable.getString("Flags");
_PREHASH_Plane = gMessageStringTable.getString("Plane");
@@ -2699,7 +2689,6 @@ void init_prehash_data()
_PREHASH_SimPosition = gMessageStringTable.getString("SimPosition");
_PREHASH_SimWideTotalPrims = gMessageStringTable.getString("SimWideTotalPrims");
_PREHASH_Index = gMessageStringTable.getString("Index");
- _PREHASH_BaseFilename = gMessageStringTable.getString("BaseFilename");
_PREHASH_SimFilename = gMessageStringTable.getString("SimFilename");
_PREHASH_LastOwnerID = gMessageStringTable.getString("LastOwnerID");
_PREHASH_GroupNoticeRequest = gMessageStringTable.getString("GroupNoticeRequest");
@@ -2784,6 +2773,7 @@ void init_prehash_data()
_PREHASH_AcceptNotices = gMessageStringTable.getString("AcceptNotices");
_PREHASH_SetGroupAcceptNotices = gMessageStringTable.getString("SetGroupAcceptNotices");
_PREHASH_CloseCircuit = gMessageStringTable.getString("CloseCircuit");
+ _PREHASH_LogControl = gMessageStringTable.getString("LogControl");
_PREHASH_TeleportFinish = gMessageStringTable.getString("TeleportFinish");
_PREHASH_PathRevolutions = gMessageStringTable.getString("PathRevolutions");
_PREHASH_ClassifiedInfoReply = gMessageStringTable.getString("ClassifiedInfoReply");
@@ -2963,7 +2953,6 @@ void init_prehash_data()
_PREHASH_SpaceLocationTeleportReply = gMessageStringTable.getString("SpaceLocationTeleportReply");
_PREHASH_MuteType = gMessageStringTable.getString("MuteType");
_PREHASH_IMViaEMail = gMessageStringTable.getString("IMViaEMail");
- _PREHASH_StartExpungeProcessAck = gMessageStringTable.getString("StartExpungeProcessAck");
_PREHASH_RentPrice = gMessageStringTable.getString("RentPrice");
_PREHASH_GenericMessage = gMessageStringTable.getString("GenericMessage");
_PREHASH_ChildAgentAlive = gMessageStringTable.getString("ChildAgentAlive");
diff --git a/linden/indra/llmessage/message_prehash.h b/linden/indra/llmessage/message_prehash.h
index 9cb4884..84c769e 100644
--- a/linden/indra/llmessage/message_prehash.h
+++ b/linden/indra/llmessage/message_prehash.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -39,7 +40,6 @@ extern char * _PREHASH_X;
extern char * _PREHASH_Y;
extern char * _PREHASH_Z;
extern char * _PREHASH_AddFlags;
-extern char * _PREHASH_ReservedNewbie;
extern char * _PREHASH_FailureInfo;
extern char * _PREHASH_MapData;
extern char * _PREHASH_AddItem;
@@ -108,7 +108,6 @@ extern char * _PREHASH_RelatedRights;
extern char * _PREHASH_RedirectGridX;
extern char * _PREHASH_RedirectGridY;
extern char * _PREHASH_TransferID;
-extern char * _PREHASH_Transacted;
extern char * _PREHASH_TexturesChanged;
extern char * _PREHASH_UserLookAt;
extern char * _PREHASH_TestBlock1;
@@ -135,7 +134,6 @@ extern char * _PREHASH_SetSimStatusInDatabase;
extern char * _PREHASH_SetSimPresenceInDatabase;
extern char * _PREHASH_CameraProperty;
extern char * _PREHASH_BrushSize;
-extern char * _PREHASH_StartExpungeProcess;
extern char * _PREHASH_SimulatorSetMap;
extern char * _PREHASH_RegionPresenceRequestByRegionID;
extern char * _PREHASH_ParcelObjectOwnersReply;
@@ -229,8 +227,8 @@ extern char * _PREHASH_SimName;
extern char * _PREHASH_UserReport;
extern char * _PREHASH_DownloadPriority;
extern char * _PREHASH_ToAgentId;
-extern char * _PREHASH_Mag;
extern char * _PREHASH_DirPopularQuery;
+extern char * _PREHASH_Mag;
extern char * _PREHASH_ParcelPropertiesRequestByID;
extern char * _PREHASH_ObjectLink;
extern char * _PREHASH_RpcScriptReplyInbound;
@@ -439,7 +437,6 @@ extern char * _PREHASH_TerminateFriendship;
extern char * _PREHASH_TaskData;
extern char * _PREHASH_SimWideMaxPrims;
extern char * _PREHASH_TotalPrims;
-extern char * _PREHASH_SourceFilename;
extern char * _PREHASH_ProfileBegin;
extern char * _PREHASH_MoneyDetailsRequest;
extern char * _PREHASH_Request;
@@ -486,7 +483,6 @@ extern char * _PREHASH_ParamInUse;
extern char * _PREHASH_GodKickUser;
extern char * _PREHASH_PickName;
extern char * _PREHASH_TaskName;
-extern char * _PREHASH_ParcelGodReserveForNewbie;
extern char * _PREHASH_SubType;
extern char * _PREHASH_ObjectCount;
extern char * _PREHASH_RegionPresenceRequestByHandle;
@@ -505,10 +501,13 @@ extern char * _PREHASH_UpdateParcel;
extern char * _PREHASH_ClearAgentSessions;
extern char * _PREHASH_SetAlwaysRun;
extern char * _PREHASH_NVPair;
+extern char * _PREHASH_SearchType;
extern char * _PREHASH_ObjectSpinStart;
extern char * _PREHASH_UseEstateSun;
extern char * _PREHASH_LogoutBlock;
+extern char * _PREHASH_RelayLogControl;
extern char * _PREHASH_RegionID;
+extern char * _PREHASH_AbuseRegionID;
extern char * _PREHASH_Creator;
extern char * _PREHASH_ProposalText;
extern char * _PREHASH_DirEventsReply;
@@ -553,7 +552,6 @@ extern char * _PREHASH_MaxY;
extern char * _PREHASH_TextureAnim;
extern char * _PREHASH_ReturnIDs;
extern char * _PREHASH_Date;
-extern char * _PREHASH_GestureUpdate;
extern char * _PREHASH_AgentWearablesUpdate;
extern char * _PREHASH_AgentDataUpdate;
extern char * _PREHASH_Hash;
@@ -575,7 +573,6 @@ extern char * _PREHASH_HistoryItemData;
extern char * _PREHASH_AgentCachedTexture;
extern char * _PREHASH_Subject;
extern char * _PREHASH_East;
-extern char * _PREHASH_GodExpungeUser;
extern char * _PREHASH_QueryReplies;
extern char * _PREHASH_ObjectCategory;
extern char * _PREHASH_Time;
@@ -802,6 +799,7 @@ extern char * _PREHASH_UnsubscribeLoad;
extern char * _PREHASH_Packet;
extern char * _PREHASH_UndoLand;
extern char * _PREHASH_SimAccess;
+extern char * _PREHASH_AbuserID;
extern char * _PREHASH_MembershipFee;
extern char * _PREHASH_InviteGroupResponse;
extern char * _PREHASH_CreateInventoryFolder;
@@ -939,6 +937,7 @@ extern char * _PREHASH_ImageNotInDatabase;
extern char * _PREHASH_StartDate;
extern char * _PREHASH_AnimID;
extern char * _PREHASH_Serial;
+extern char * _PREHASH_AbuseRegionName;
extern char * _PREHASH_ControlPort;
extern char * _PREHASH_ModifyLand;
extern char * _PREHASH_Digest;
@@ -1003,11 +1002,11 @@ extern char * _PREHASH_EventFlags;
extern char * _PREHASH_TallyVotes;
extern char * _PREHASH_Result;
extern char * _PREHASH_LookAt;
+extern char * _PREHASH_SearchOrder;
extern char * _PREHASH_PayButton;
extern char * _PREHASH_SelfCount;
extern char * _PREHASH_PacketCount;
extern char * _PREHASH_ParcelBuyPass;
-extern char * _PREHASH_Identified;
extern char * _PREHASH_OldItemID;
extern char * _PREHASH_RegionPort;
extern char * _PREHASH_PriceEnergyUnit;
@@ -1043,7 +1042,6 @@ extern char * _PREHASH_EconomyDataRequest;
extern char * _PREHASH_TeleportLureRequest;
extern char * _PREHASH_FolderID;
extern char * _PREHASH_RegionHandleRequest;
-extern char * _PREHASH_GestureRequest;
extern char * _PREHASH_ScriptDataRequest;
extern char * _PREHASH_GroupRoleDataRequest;
extern char * _PREHASH_GroupTitlesRequest;
@@ -1187,11 +1185,9 @@ extern char * _PREHASH_Ratio;
extern char * _PREHASH_JoinGroupReply;
extern char * _PREHASH_LiveHelpGroupReply;
extern char * _PREHASH_Score;
-extern char * _PREHASH_ExpungeData;
extern char * _PREHASH_Image;
extern char * _PREHASH_ObjectClickAction;
extern char * _PREHASH_Delta;
-extern char * _PREHASH_InitiateUpload;
extern char * _PREHASH_Parameter;
extern char * _PREHASH_Flags;
extern char * _PREHASH_Plane;
@@ -1227,7 +1223,6 @@ extern char * _PREHASH_Disconnect;
extern char * _PREHASH_SimPosition;
extern char * _PREHASH_SimWideTotalPrims;
extern char * _PREHASH_Index;
-extern char * _PREHASH_BaseFilename;
extern char * _PREHASH_SimFilename;
extern char * _PREHASH_LastOwnerID;
extern char * _PREHASH_GroupNoticeRequest;
@@ -1312,6 +1307,7 @@ extern char * _PREHASH_AssetBlock;
extern char * _PREHASH_AcceptNotices;
extern char * _PREHASH_SetGroupAcceptNotices;
extern char * _PREHASH_CloseCircuit;
+extern char * _PREHASH_LogControl;
extern char * _PREHASH_TeleportFinish;
extern char * _PREHASH_PathRevolutions;
extern char * _PREHASH_ClassifiedInfoReply;
@@ -1491,7 +1487,6 @@ extern char * _PREHASH_DirLandReply;
extern char * _PREHASH_SpaceLocationTeleportReply;
extern char * _PREHASH_MuteType;
extern char * _PREHASH_IMViaEMail;
-extern char * _PREHASH_StartExpungeProcessAck;
extern char * _PREHASH_RentPrice;
extern char * _PREHASH_GenericMessage;
extern char * _PREHASH_ChildAgentAlive;
diff --git a/linden/indra/llmessage/message_string_table.cpp b/linden/indra/llmessage/message_string_table.cpp
index 7fea048..2ae269b 100644
--- a/linden/indra/llmessage/message_string_table.cpp
+++ b/linden/indra/llmessage/message_string_table.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/net.cpp b/linden/indra/llmessage/net.cpp
index de19ef8..c61f4a2 100644
--- a/linden/indra/llmessage/net.cpp
+++ b/linden/indra/llmessage/net.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -241,6 +242,12 @@ S32 start_net(S32& socket_out, int& nPort)
return 4;
}
}
+
+ sockaddr_in socket_address;
+ S32 socket_address_size = sizeof(socket_address);
+ getsockname(hSocket, (SOCKADDR*) &socket_address, &socket_address_size);
+ attempt_port = ntohs(socket_address.sin_port);
+
llinfos << "connected on port " << attempt_port << llendl;
nPort = attempt_port;
diff --git a/linden/indra/llmessage/net.h b/linden/indra/llmessage/net.h
index d406006..b2f931f 100644
--- a/linden/indra/llmessage/net.h
+++ b/linden/indra/llmessage/net.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/network.cpp b/linden/indra/llmessage/network.cpp
index 46e9893..03aad63 100644
--- a/linden/indra/llmessage/network.cpp
+++ b/linden/indra/llmessage/network.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/network.h b/linden/indra/llmessage/network.h
index 8a20e32..6c6577b 100644
--- a/linden/indra/llmessage/network.h
+++ b/linden/indra/llmessage/network.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/partsyspacket.cpp b/linden/indra/llmessage/partsyspacket.cpp
index d6ba11e..4750faa 100644
--- a/linden/indra/llmessage/partsyspacket.cpp
+++ b/linden/indra/llmessage/partsyspacket.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/partsyspacket.h b/linden/indra/llmessage/partsyspacket.h
index 8e10e56..5dbc41c 100644
--- a/linden/indra/llmessage/partsyspacket.h
+++ b/linden/indra/llmessage/partsyspacket.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/patch_code.cpp b/linden/indra/llmessage/patch_code.cpp
index 3eb2be6..c996899 100644
--- a/linden/indra/llmessage/patch_code.cpp
+++ b/linden/indra/llmessage/patch_code.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/patch_code.h b/linden/indra/llmessage/patch_code.h
index 28b1839..ba3dea4 100644
--- a/linden/indra/llmessage/patch_code.h
+++ b/linden/indra/llmessage/patch_code.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/patch_dct.cpp b/linden/indra/llmessage/patch_dct.cpp
index b404c75..0e8aa25 100644
--- a/linden/indra/llmessage/patch_dct.cpp
+++ b/linden/indra/llmessage/patch_dct.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/patch_dct.h b/linden/indra/llmessage/patch_dct.h
index 5d98921..b69249e 100644
--- a/linden/indra/llmessage/patch_dct.h
+++ b/linden/indra/llmessage/patch_dct.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/patch_idct.cpp b/linden/indra/llmessage/patch_idct.cpp
index a20641f..680003a 100644
--- a/linden/indra/llmessage/patch_idct.cpp
+++ b/linden/indra/llmessage/patch_idct.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llmessage/sound_ids.h b/linden/indra/llmessage/sound_ids.h
index 11452c0..2652778 100644
--- a/linden/indra/llmessage/sound_ids.h
+++ b/linden/indra/llmessage/sound_ids.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llprimitive/legacy_object_types.h b/linden/indra/llprimitive/legacy_object_types.h
index 19af9e6..9cdc632 100644
--- a/linden/indra/llprimitive/legacy_object_types.h
+++ b/linden/indra/llprimitive/legacy_object_types.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llprimitive/llmaterialtable.cpp b/linden/indra/llprimitive/llmaterialtable.cpp
index 201d0c9..d7ac57a 100644
--- a/linden/indra/llprimitive/llmaterialtable.cpp
+++ b/linden/indra/llprimitive/llmaterialtable.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llprimitive/llmaterialtable.h b/linden/indra/llprimitive/llmaterialtable.h
index a472274..d9596e1 100644
--- a/linden/indra/llprimitive/llmaterialtable.h
+++ b/linden/indra/llprimitive/llmaterialtable.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llprimitive/llprimitive.cpp b/linden/indra/llprimitive/llprimitive.cpp
index 859a34f..e2cf7e3 100644
--- a/linden/indra/llprimitive/llprimitive.cpp
+++ b/linden/indra/llprimitive/llprimitive.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -733,7 +734,7 @@ const char * LLPrimitive::pCodeToString(const LLPCode pcode)
snprintf(pcode_string, sizeof(pcode_string), "text bubble"); /* Flawfinder: ignore */
break;
case LL_PCODE_LEGACY_TREE:
- snprintf(pcode_string, sizeof(pcode_string), "tree"); /* Flawfinder: ignore */
+ snprintf(pcode_string, sizeof(pcode_string), "tree"); /* Flawfinder: ignore */
break;
case LL_PCODE_TREE_NEW:
snprintf(pcode_string, sizeof(pcode_string), "tree_new"); /* Flawfinder: ignore */
@@ -764,23 +765,23 @@ const char * LLPrimitive::pCodeToString(const LLPCode pcode)
}
else if (base_code == LL_PCODE_PYRAMID)
{
- snprintf(shape, sizeof(shape), "pyramid"); /* Flawfinder: ignore */
+ snprintf(shape, sizeof(shape), "pyramid"); /* Flawfinder: ignore */
}
else if (base_code == LL_PCODE_SPHERE)
{
- snprintf(shape, sizeof(shape), "sphere"); /* Flawfinder: ignore */
+ snprintf(shape, sizeof(shape), "sphere"); /* Flawfinder: ignore */
}
else if (base_code == LL_PCODE_TETRAHEDRON)
{
- snprintf(shape, sizeof(shape), "tetrahedron"); /* Flawfinder: ignore */
+ snprintf(shape, sizeof(shape), "tetrahedron"); /* Flawfinder: ignore */
}
else if (base_code == LL_PCODE_VOLUME)
{
- snprintf(shape, sizeof(shape), "volume"); /* Flawfinder: ignore */
+ snprintf(shape, sizeof(shape), "volume"); /* Flawfinder: ignore */
}
else if (base_code == LL_PCODE_APP)
{
- snprintf(shape, sizeof(shape), "app"); /* Flawfinder: ignore */
+ snprintf(shape, sizeof(shape), "app"); /* Flawfinder: ignore */
}
else
{
@@ -790,15 +791,15 @@ const char * LLPrimitive::pCodeToString(const LLPCode pcode)
U8 mask_code = pcode & (~LL_PCODE_BASE_MASK);
if (base_code == LL_PCODE_APP)
{
- snprintf(mask, sizeof(mask), "%x", mask_code); /* Flawfinder: ignore */
+ snprintf(mask, sizeof(mask), "%x", mask_code); /* Flawfinder: ignore */
}
else if (mask_code & LL_PCODE_HEMI_MASK)
{
- snprintf(mask, sizeof(mask), "hemi"); /* Flawfinder: ignore */
+ snprintf(mask, sizeof(mask), "hemi"); /* Flawfinder: ignore */
}
else if (mask != 0)
{
- snprintf(mask, sizeof(mask), "%x", mask_code); /* Flawfinder: ignore */
+ snprintf(mask, sizeof(mask), "%x", mask_code); /* Flawfinder: ignore */
}
else
{
@@ -807,11 +808,11 @@ const char * LLPrimitive::pCodeToString(const LLPCode pcode)
if (mask[0])
{
- snprintf(pcode_string, sizeof(pcode_string), "%s-%s", shape, mask); /* Flawfinder: ignore */
+ snprintf(pcode_string, sizeof(pcode_string), "%s-%s", shape, mask); /* Flawfinder: ignore */
}
else
{
- snprintf(pcode_string, sizeof(pcode_string), "%s", shape); /* Flawfinder: ignore */
+ snprintf(pcode_string, sizeof(pcode_string), "%s", shape); /* Flawfinder: ignore */
}
}
return pcode_string;
@@ -1279,8 +1280,8 @@ BOOL LLPrimitive::packTEMessage(LLMessageSystem *mesgsys) const
U8 image_ids[MAX_TES*16];
U8 colors[MAX_TES*4];
- S16 scale_s[MAX_TES];
- S16 scale_t[MAX_TES];
+ F32 scale_s[MAX_TES];
+ F32 scale_t[MAX_TES];
S16 offset_s[MAX_TES];
S16 offset_t[MAX_TES];
S16 image_rot[MAX_TES];
@@ -1315,8 +1316,8 @@ BOOL LLPrimitive::packTEMessage(LLMessageSystem *mesgsys) const
colors[4*face_index + 3] = 255 - coloru.mV[3];
const LLTextureEntry* te = getTE(face_index);
- scale_s[face_index] = (S16) llround(((llclamp(te->mScaleS,-LL_MAX_SCALE_S, LL_MAX_SCALE_S)-1.0f)/(LL_MAX_SCALE_S+1.f) * (F32)0x7FFF));
- scale_t[face_index] = (S16) llround(((llclamp(te->mScaleT,-LL_MAX_SCALE_T, LL_MAX_SCALE_T)-1.0f)/(LL_MAX_SCALE_T+1.f) * (F32)0x7FFF));
+ scale_s[face_index] = (F32) te->mScaleS;
+ scale_t[face_index] = (F32) te->mScaleT;
offset_s[face_index] = (S16) llround((llclamp(te->mOffsetS,-1.0f,1.0f) * (F32)0x7FFF)) ;
offset_t[face_index] = (S16) llround((llclamp(te->mOffsetT,-1.0f,1.0f) * (F32)0x7FFF)) ;
image_rot[face_index] = (S16) llround(((fmod(te->mRotation, F_TWO_PI)/F_TWO_PI) * (F32)0x7FFF));
@@ -1329,9 +1330,9 @@ BOOL LLPrimitive::packTEMessage(LLMessageSystem *mesgsys) const
*cur_ptr++ = 0;
cur_ptr += packTEField(cur_ptr, (U8 *)colors, 4 ,last_face_index, MVT_U8);
*cur_ptr++ = 0;
- cur_ptr += packTEField(cur_ptr, (U8 *)scale_s, 2 ,last_face_index, MVT_S16Array);
+ cur_ptr += packTEField(cur_ptr, (U8 *)scale_s, 4 ,last_face_index, MVT_F32);
*cur_ptr++ = 0;
- cur_ptr += packTEField(cur_ptr, (U8 *)scale_t, 2 ,last_face_index, MVT_S16Array);
+ cur_ptr += packTEField(cur_ptr, (U8 *)scale_t, 4 ,last_face_index, MVT_F32);
*cur_ptr++ = 0;
cur_ptr += packTEField(cur_ptr, (U8 *)offset_s, 2 ,last_face_index, MVT_S16Array);
*cur_ptr++ = 0;
@@ -1355,8 +1356,8 @@ BOOL LLPrimitive::packTEMessage(LLDataPacker &dp) const
U8 image_ids[MAX_TES*16];
U8 colors[MAX_TES*4];
- S16 scale_s[MAX_TES];
- S16 scale_t[MAX_TES];
+ F32 scale_s[MAX_TES];
+ F32 scale_t[MAX_TES];
S16 offset_s[MAX_TES];
S16 offset_t[MAX_TES];
S16 image_rot[MAX_TES];
@@ -1391,8 +1392,8 @@ BOOL LLPrimitive::packTEMessage(LLDataPacker &dp) const
colors[4*face_index + 3] = 255 - coloru.mV[3];
const LLTextureEntry* te = getTE(face_index);
- scale_s[face_index] = (S16) llround(((llclamp(te->mScaleS,-LL_MAX_SCALE_S, LL_MAX_SCALE_S)-1.0f)/(LL_MAX_SCALE_S+1.f) * (F32)0x7FFF));
- scale_t[face_index] = (S16) llround(((llclamp(te->mScaleT,-LL_MAX_SCALE_T, LL_MAX_SCALE_T)-1.0f)/(LL_MAX_SCALE_T+1.f) * (F32)0x7FFF));
+ scale_s[face_index] = (F32) te->mScaleS;
+ scale_t[face_index] = (F32) te->mScaleT;
offset_s[face_index] = (S16) llround((llclamp(te->mOffsetS,-1.0f,1.0f) * (F32)0x7FFF)) ;
offset_t[face_index] = (S16) llround((llclamp(te->mOffsetT,-1.0f,1.0f) * (F32)0x7FFF)) ;
image_rot[face_index] = (S16) llround(((fmod(te->mRotation, F_TWO_PI)/F_TWO_PI) * (F32)0x7FFF));
@@ -1406,9 +1407,9 @@ BOOL LLPrimitive::packTEMessage(LLDataPacker &dp) const
*cur_ptr++ = 0;
cur_ptr += packTEField(cur_ptr, (U8 *)colors, 4 ,last_face_index, MVT_U8);
*cur_ptr++ = 0;
- cur_ptr += packTEField(cur_ptr, (U8 *)scale_s, 2 ,last_face_index, MVT_S16Array);
+ cur_ptr += packTEField(cur_ptr, (U8 *)scale_s, 4 ,last_face_index, MVT_F32);
*cur_ptr++ = 0;
- cur_ptr += packTEField(cur_ptr, (U8 *)scale_t, 2 ,last_face_index, MVT_S16Array);
+ cur_ptr += packTEField(cur_ptr, (U8 *)scale_t, 4 ,last_face_index, MVT_F32);
*cur_ptr++ = 0;
cur_ptr += packTEField(cur_ptr, (U8 *)offset_s, 2 ,last_face_index, MVT_S16Array);
*cur_ptr++ = 0;
@@ -1440,8 +1441,8 @@ S32 LLPrimitive::unpackTEMessage(LLMessageSystem *mesgsys, char *block_name, con
U8 image_data[MAX_TES*16];
U8 colors[MAX_TES*4];
- S16 scale_s[MAX_TES];
- S16 scale_t[MAX_TES];
+ F32 scale_s[MAX_TES];
+ F32 scale_t[MAX_TES];
S16 offset_s[MAX_TES];
S16 offset_t[MAX_TES];
S16 image_rot[MAX_TES];
@@ -1484,9 +1485,9 @@ S32 LLPrimitive::unpackTEMessage(LLMessageSystem *mesgsys, char *block_name, con
cur_ptr++;
cur_ptr += unpackTEField(cur_ptr, packed_buffer+size, (U8 *)colors, 4, face_count, MVT_U8);
cur_ptr++;
- cur_ptr += unpackTEField(cur_ptr, packed_buffer+size, (U8 *)scale_s, 2, face_count, MVT_S16Array);
+ cur_ptr += unpackTEField(cur_ptr, packed_buffer+size, (U8 *)scale_s, 4, face_count, MVT_F32);
cur_ptr++;
- cur_ptr += unpackTEField(cur_ptr, packed_buffer+size, (U8 *)scale_t, 2, face_count, MVT_S16Array);
+ cur_ptr += unpackTEField(cur_ptr, packed_buffer+size, (U8 *)scale_t, 4, face_count, MVT_F32);
cur_ptr++;
cur_ptr += unpackTEField(cur_ptr, packed_buffer+size, (U8 *)offset_s, 2, face_count, MVT_S16Array);
cur_ptr++;
@@ -1503,9 +1504,7 @@ S32 LLPrimitive::unpackTEMessage(LLMessageSystem *mesgsys, char *block_name, con
for (U32 i = 0; i < face_count; i++)
{
retval |= setTETexture(i, ((LLUUID*)image_data)[i]);
- retval |= setTEScale(i,
- floor((1.0f + ((((F32)scale_s[i] / (F32)0x7FFF)) * (LL_MAX_SCALE_S+1.f))) * 100.f + 0.5f) / 100.f,
- floor((1.0f + ((((F32)scale_t[i] / (F32)0x7FFF)) * (LL_MAX_SCALE_T+1.f))) * 100.f + 0.5f) / 100.f);
+ retval |= setTEScale(i, scale_s[i], scale_t[i]);
retval |= setTEOffset(i, (F32)offset_s[i] / (F32)0x7FFF, (F32) offset_t[i] / (F32) 0x7FFF);
retval |= setTERotation(i, ((F32)image_rot[i]/ (F32)0x7FFF) * F_TWO_PI);
retval |= setTEBumpShinyFullbright(i, bump[i]);
@@ -1537,8 +1536,8 @@ S32 LLPrimitive::unpackTEMessage(LLDataPacker &dp)
U8 image_data[MAX_TES*16];
U8 colors[MAX_TES*4];
- S16 scale_s[MAX_TES];
- S16 scale_t[MAX_TES];
+ F32 scale_s[MAX_TES];
+ F32 scale_t[MAX_TES];
S16 offset_s[MAX_TES];
S16 offset_t[MAX_TES];
S16 image_rot[MAX_TES];
@@ -1571,9 +1570,9 @@ S32 LLPrimitive::unpackTEMessage(LLDataPacker &dp)
cur_ptr++;
cur_ptr += unpackTEField(cur_ptr, packed_buffer+size, (U8 *)colors, 4, face_count, MVT_U8);
cur_ptr++;
- cur_ptr += unpackTEField(cur_ptr, packed_buffer+size, (U8 *)scale_s, 2, face_count, MVT_S16Array);
+ cur_ptr += unpackTEField(cur_ptr, packed_buffer+size, (U8 *)scale_s, 4, face_count, MVT_F32);
cur_ptr++;
- cur_ptr += unpackTEField(cur_ptr, packed_buffer+size, (U8 *)scale_t, 2, face_count, MVT_S16Array);
+ cur_ptr += unpackTEField(cur_ptr, packed_buffer+size, (U8 *)scale_t, 4, face_count, MVT_F32);
cur_ptr++;
cur_ptr += unpackTEField(cur_ptr, packed_buffer+size, (U8 *)offset_s, 2, face_count, MVT_S16Array);
cur_ptr++;
@@ -1596,9 +1595,7 @@ S32 LLPrimitive::unpackTEMessage(LLDataPacker &dp)
for (i = 0; i < face_count; i++)
{
retval |= setTETexture(i, image_ids[i]);
- retval |= setTEScale(i,
- floor((1.0f + ((((F32)scale_s[i] / (F32)0x7FFF)) * (LL_MAX_SCALE_S+1.f))) * 100.f + 0.5f) / 100.f,
- floor((1.0f + ((((F32)scale_t[i] / (F32)0x7FFF)) * (LL_MAX_SCALE_T+1.f))) * 100.f + 0.5f) / 100.f);
+ retval |= setTEScale(i, scale_s[i], scale_t[i]);
retval |= setTEOffset(i, (F32)offset_s[i] / (F32)0x7FFF, (F32) offset_t[i] / (F32) 0x7FFF);
retval |= setTERotation(i, ((F32)image_rot[i]/ (F32)0x7FFF) * F_TWO_PI);
retval |= setTEBumpShinyFullbright(i, bump[i]);
diff --git a/linden/indra/llprimitive/llprimitive.h b/linden/indra/llprimitive/llprimitive.h
index 953d284..89e6623 100644
--- a/linden/indra/llprimitive/llprimitive.h
+++ b/linden/indra/llprimitive/llprimitive.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llprimitive/lltextureanim.cpp b/linden/indra/llprimitive/lltextureanim.cpp
index b496463..e373a29 100644
--- a/linden/indra/llprimitive/lltextureanim.cpp
+++ b/linden/indra/llprimitive/lltextureanim.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llprimitive/lltextureanim.h b/linden/indra/llprimitive/lltextureanim.h
index b47d492..502cf54 100644
--- a/linden/indra/llprimitive/lltextureanim.h
+++ b/linden/indra/llprimitive/lltextureanim.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llprimitive/lltextureentry.cpp b/linden/indra/llprimitive/lltextureentry.cpp
index 5099eef..81bfd6f 100644
--- a/linden/indra/llprimitive/lltextureentry.cpp
+++ b/linden/indra/llprimitive/lltextureentry.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llprimitive/lltextureentry.h b/linden/indra/llprimitive/lltextureentry.h
index b06f9a1..861b585 100644
--- a/linden/indra/llprimitive/lltextureentry.h
+++ b/linden/indra/llprimitive/lltextureentry.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llprimitive/lltree_common.h b/linden/indra/llprimitive/lltree_common.h
index 0904f9d..f9594e2 100644
--- a/linden/indra/llprimitive/lltree_common.h
+++ b/linden/indra/llprimitive/lltree_common.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llprimitive/lltreeparams.cpp b/linden/indra/llprimitive/lltreeparams.cpp
index ce52cae..fde21f0 100644
--- a/linden/indra/llprimitive/lltreeparams.cpp
+++ b/linden/indra/llprimitive/lltreeparams.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llprimitive/lltreeparams.h b/linden/indra/llprimitive/lltreeparams.h
index 7822d31..29bbc9a 100644
--- a/linden/indra/llprimitive/lltreeparams.h
+++ b/linden/indra/llprimitive/lltreeparams.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llprimitive/llvolumemessage.cpp b/linden/indra/llprimitive/llvolumemessage.cpp
index b00bbc5..650e0cd 100644
--- a/linden/indra/llprimitive/llvolumemessage.cpp
+++ b/linden/indra/llprimitive/llvolumemessage.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -42,23 +43,25 @@ bool LLVolumeMessage::packProfileParams(
LLMessageSystem *mesgsys)
{
// Default to cylinder
- static LLProfileParams defaultparams(LL_PCODE_PROFILE_CIRCLE, U8(0), U8(0), U8(0));
+ static LLProfileParams defaultparams(LL_PCODE_PROFILE_CIRCLE, U16(0), U16(0), U16(0));
if (!params)
params = &defaultparams;
U8 tempU8;
+ U16 tempU16;
+
tempU8 = params->getCurveType();
mesgsys->addU8Fast(_PREHASH_ProfileCurve, tempU8);
- tempU8 = (U8) llround( params->getBegin() / CUT_QUANTA);
- mesgsys->addU8Fast(_PREHASH_ProfileBegin, tempU8);
+ tempU16 = (U16) llround( params->getBegin() / CUT_QUANTA);
+ mesgsys->addU16Fast(_PREHASH_ProfileBegin, tempU16);
- tempU8 = 200 - (U8) llround(params->getEnd() / CUT_QUANTA);
- mesgsys->addU8Fast(_PREHASH_ProfileEnd, tempU8);
+ tempU16 = 50000 - (U16) llround(params->getEnd() / CUT_QUANTA);
+ mesgsys->addU16Fast(_PREHASH_ProfileEnd, tempU16);
- tempU8 = (S8) llround(params->getHollow() / SHEAR_QUANTA);
- mesgsys->addU8Fast(_PREHASH_ProfileHollow, tempU8);
+ tempU16 = (U16) llround(params->getHollow() / HOLLOW_QUANTA);
+ mesgsys->addU16Fast(_PREHASH_ProfileHollow, tempU16);
return true;
}
@@ -68,23 +71,25 @@ bool LLVolumeMessage::packProfileParams(
LLDataPacker &dp)
{
// Default to cylinder
- static LLProfileParams defaultparams(LL_PCODE_PROFILE_CIRCLE, U8(0), U8(0), U8(0));
+ static LLProfileParams defaultparams(LL_PCODE_PROFILE_CIRCLE, U16(0), U16(0), U16(0));
if (!params)
params = &defaultparams;
U8 tempU8;
+ U16 tempU16;
+
tempU8 = params->getCurveType();
dp.packU8(tempU8, "Curve");
- tempU8 = (U8) llround( params->getBegin() / CUT_QUANTA);
- dp.packU8(tempU8, "Begin");
+ tempU16 = (U16) llround( params->getBegin() / CUT_QUANTA);
+ dp.packU16(tempU16, "Begin");
- tempU8 = 200 - (U8) llround(params->getEnd() / CUT_QUANTA);
- dp.packU8(tempU8, "End");
+ tempU16 = 50000 - (U16) llround(params->getEnd() / CUT_QUANTA);
+ dp.packU16(tempU16, "End");
- tempU8 = (S8) llround(params->getHollow() / SHEAR_QUANTA);
- dp.packU8(tempU8, "Hollow");
+ tempU16 = (U16) llround(params->getHollow() / HOLLOW_QUANTA);
+ dp.packU16(tempU16, "Hollow");
return true;
}
@@ -96,13 +101,14 @@ bool LLVolumeMessage::unpackProfileParams(
{
bool ok = true;
U8 temp_u8;
+ U16 temp_u16;
F32 temp_f32;
mesgsys->getU8Fast(block_name, _PREHASH_ProfileCurve, temp_u8, block_num);
params->setCurveType(temp_u8);
- mesgsys->getU8Fast(block_name, _PREHASH_ProfileBegin, temp_u8, block_num);
- temp_f32 = temp_u8 * CUT_QUANTA;
+ mesgsys->getU16Fast(block_name, _PREHASH_ProfileBegin, temp_u16, block_num);
+ temp_f32 = temp_u16 * CUT_QUANTA;
if (temp_f32 > 1.f)
{
llwarns << "Profile begin out of range: " << temp_f32
@@ -112,8 +118,8 @@ bool LLVolumeMessage::unpackProfileParams(
}
params->setBegin(temp_f32);
- mesgsys->getU8Fast(block_name, _PREHASH_ProfileEnd, temp_u8, block_num);
- temp_f32 = temp_u8 * CUT_QUANTA;
+ mesgsys->getU16Fast(block_name, _PREHASH_ProfileEnd, temp_u16, block_num);
+ temp_f32 = temp_u16 * CUT_QUANTA;
if (temp_f32 > 1.f)
{
llwarns << "Profile end out of range: " << 1.f - temp_f32
@@ -123,8 +129,8 @@ bool LLVolumeMessage::unpackProfileParams(
}
params->setEnd(1.f - temp_f32);
- mesgsys->getU8Fast(block_name, _PREHASH_ProfileHollow, temp_u8, block_num);
- temp_f32 = temp_u8 * SCALE_QUANTA;
+ mesgsys->getU16Fast(block_name, _PREHASH_ProfileHollow, temp_u16, block_num);
+ temp_f32 = temp_u16 * HOLLOW_QUANTA;
if (temp_f32 > 1.f)
{
llwarns << "Profile hollow out of range: " << temp_f32
@@ -151,13 +157,14 @@ bool LLVolumeMessage::unpackProfileParams(
{
bool ok = true;
U8 temp_u8;
+ U16 temp_u16;
F32 temp_f32;
dp.unpackU8(temp_u8, "Curve");
params->setCurveType(temp_u8);
- dp.unpackU8(temp_u8, "Begin");
- temp_f32 = temp_u8 * CUT_QUANTA;
+ dp.unpackU16(temp_u16, "Begin");
+ temp_f32 = temp_u16 * CUT_QUANTA;
if (temp_f32 > 1.f)
{
llwarns << "Profile begin out of range: " << temp_f32 << llendl;
@@ -167,8 +174,8 @@ bool LLVolumeMessage::unpackProfileParams(
}
params->setBegin(temp_f32);
- dp.unpackU8(temp_u8, "End");
- temp_f32 = temp_u8 * CUT_QUANTA;
+ dp.unpackU16(temp_u16, "End");
+ temp_f32 = temp_u16 * CUT_QUANTA;
if (temp_f32 > 1.f)
{
llwarns << "Profile end out of range: " << 1.f - temp_f32 << llendl;
@@ -178,8 +185,8 @@ bool LLVolumeMessage::unpackProfileParams(
}
params->setEnd(1.f - temp_f32);
- dp.unpackU8(temp_u8, "Hollow");
- temp_f32 = temp_u8 * SCALE_QUANTA;
+ dp.unpackU16(temp_u16, "Hollow");
+ temp_f32 = temp_u16 * HOLLOW_QUANTA;
if (temp_f32 > 1.f)
{
llwarns << "Profile hollow out of range: " << temp_f32 << llendl;
@@ -212,11 +219,11 @@ bool LLVolumeMessage::packPathParams(
U8 curve = params->getCurveType();
mesgsys->addU8Fast(_PREHASH_PathCurve, curve);
- U8 begin = (U8) llround(params->getBegin() / SCALE_QUANTA);
- mesgsys->addU8Fast(_PREHASH_PathBegin, begin);
+ U16 begin = (U16) llround(params->getBegin() / CUT_QUANTA);
+ mesgsys->addU16Fast(_PREHASH_PathBegin, begin);
- U8 end = 100 - (U8) llround(params->getEnd() / SCALE_QUANTA);
- mesgsys->addU8Fast(_PREHASH_PathEnd, end);
+ U16 end = 50000 - (U16) llround(params->getEnd() / CUT_QUANTA);
+ mesgsys->addU16Fast(_PREHASH_PathEnd, end);
// Avoid truncation problem with direct F32->U8 cast.
// (e.g., (U8) (0.50 / 0.01) = (U8) 49.9999999 = 49 not 50.
@@ -269,11 +276,11 @@ bool LLVolumeMessage::packPathParams(
U8 curve = params->getCurveType();
dp.packU8(curve, "Curve");
- U8 begin = (U8) llround(params->getBegin() / SCALE_QUANTA);
- dp.packU8(begin, "Begin");
+ U16 begin = (U16) llround(params->getBegin() / CUT_QUANTA);
+ dp.packU16(begin, "Begin");
- U8 end = 100 - (U8) llround(params->getEnd() / SCALE_QUANTA);
- dp.packU8(end, "End");
+ U16 end = 50000 - (U16) llround(params->getEnd() / CUT_QUANTA);
+ dp.packU16(end, "End");
// Avoid truncation problem with direct F32->U8 cast.
// (e.g., (U8) (0.50 / 0.01) = (U8) 49.9999999 = 49 not 50.
@@ -324,13 +331,13 @@ bool LLVolumeMessage::unpackPathParams(
mesgsys->getU8Fast(block_name, _PREHASH_PathCurve, curve, block_num);
params->setCurveType(curve);
- U8 begin;
- mesgsys->getU8Fast(block_name, _PREHASH_PathBegin, begin, block_num);
- params->setBegin((F32)(begin * SCALE_QUANTA));
+ U16 begin;
+ mesgsys->getU16Fast(block_name, _PREHASH_PathBegin, begin, block_num);
+ params->setBegin((F32)(begin * CUT_QUANTA));
- U8 end;
- mesgsys->getU8Fast(block_name, _PREHASH_PathEnd, end, block_num);
- params->setEnd((F32)((100 - end) * SCALE_QUANTA));
+ U16 end;
+ mesgsys->getU16Fast(block_name, _PREHASH_PathEnd, end, block_num);
+ params->setEnd((F32)((50000 - end) * CUT_QUANTA));
U8 pack_scale_x, pack_scale_y;
mesgsys->getU8Fast(block_name, _PREHASH_PathScaleX, pack_scale_x, block_num);
@@ -390,14 +397,16 @@ bool LLVolumeMessage::unpackPathParams(LLPathParams* params, LLDataPacker &dp)
{
U8 value;
S8 svalue;
+ U16 temp_u16;
+
dp.unpackU8(value, "Curve");
params->setCurveType( value );
- dp.unpackU8(value, "Begin");
- params->setBegin((F32)(value * SCALE_QUANTA));
+ dp.unpackU16(temp_u16, "Begin");
+ params->setBegin((F32)(temp_u16 * CUT_QUANTA));
- dp.unpackU8(value, "End");
- params->setEnd((F32)((100 - value) * SCALE_QUANTA));
+ dp.unpackU16(temp_u16, "End");
+ params->setEnd((F32)((50000 - temp_u16) * CUT_QUANTA));
dp.unpackU8(value, "ScaleX");
F32 x = (F32) (200 - value) * SCALE_QUANTA;
diff --git a/linden/indra/llprimitive/llvolumemessage.h b/linden/indra/llprimitive/llvolumemessage.h
index ad062a9..e626a04 100644
--- a/linden/indra/llprimitive/llvolumemessage.h
+++ b/linden/indra/llprimitive/llvolumemessage.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llprimitive/llvolumexml.cpp b/linden/indra/llprimitive/llvolumexml.cpp
index 101eace..370f152 100644
--- a/linden/indra/llprimitive/llvolumexml.cpp
+++ b/linden/indra/llprimitive/llvolumexml.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llprimitive/llvolumexml.h b/linden/indra/llprimitive/llvolumexml.h
index c6ae480..0a3d1c5 100644
--- a/linden/indra/llprimitive/llvolumexml.h
+++ b/linden/indra/llprimitive/llvolumexml.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llprimitive/material_codes.h b/linden/indra/llprimitive/material_codes.h
index fe55344..01a5573 100644
--- a/linden/indra/llprimitive/material_codes.h
+++ b/linden/indra/llprimitive/material_codes.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llprimitive/object_flags.h b/linden/indra/llprimitive/object_flags.h
index 7c8a66c..e7bf023 100644
--- a/linden/indra/llprimitive/object_flags.h
+++ b/linden/indra/llprimitive/object_flags.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llrender/files.lst b/linden/indra/llrender/files.lst
index a813342..a4d541e 100644
--- a/linden/indra/llrender/files.lst
+++ b/linden/indra/llrender/files.lst
@@ -3,4 +3,3 @@ llrender/llfontgl.cpp
llrender/llgldbg.cpp
llrender/llimagegl.cpp
llrender/llvertexbuffer.cpp
-llrender/text_out.cpp
diff --git a/linden/indra/llrender/llfont.cpp b/linden/indra/llrender/llfont.cpp
index c64744e..ed787e0 100644
--- a/linden/indra/llrender/llfont.cpp
+++ b/linden/indra/llrender/llfont.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -135,6 +136,7 @@ LLFont::LLFont(LLImageRaw *imagep)
mNumComponents = 0;
mFallbackFontp = NULL;
mIsFallback = FALSE;
+ mFTFace = NULL;
}
@@ -143,7 +145,8 @@ LLFont::~LLFont()
mRawImagep = NULL; // dereferences or deletes image
// Clean up freetype libs.
- FT_Done_Face(mFTFace);
+ if (mFTFace)
+ FT_Done_Face(mFTFace);
mFTFace = NULL;
// Delete glyph info
@@ -200,6 +203,7 @@ BOOL LLFont::loadFace(const std::string& filename, const F32 point_size, const F
{
// Clean up freetype libs.
FT_Done_Face(mFTFace);
+ mFTFace = NULL;
return FALSE;
}
diff --git a/linden/indra/llrender/llfont.h b/linden/indra/llrender/llfont.h
index a84a302..f10f7bb 100644
--- a/linden/indra/llrender/llfont.h
+++ b/linden/indra/llrender/llfont.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llrender/llfontgl.cpp b/linden/indra/llrender/llfontgl.cpp
index f72a7de..7ee89c7 100644
--- a/linden/indra/llrender/llfontgl.cpp
+++ b/linden/indra/llrender/llfontgl.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -69,6 +70,7 @@ const F32 PIXEL_BORDER_THRESHOLD = 0.0001f;
const F32 PIXEL_CORRECTION_DISTANCE = 0.01f;
const F32 PAD_AMT = 0.5f;
+const F32 DROP_SHADOW_STRENGTH = 0.3f;
F32 llfont_round_x(F32 x)
{
@@ -133,7 +135,8 @@ void LLFontGL::init()
mImageGLp = new LLImageGL(FALSE);
//RN: use nearest mipmap filtering to obviate the need to do pixel-accurate positioning
mImageGLp->bind();
- mImageGLp->setMipFilterNearest(TRUE, TRUE);
+ // we allow bilinear filtering to get sub-pixel positioning for drop shadows
+ //mImageGLp->setMipFilterNearest(TRUE, TRUE);
}
if (mRawImageGLp.isNull())
{
@@ -549,28 +552,8 @@ S32 LLFontGL::render(const LLWString &wstr,
return 0;
}
- if (style & DROP_SHADOW)
- {
- LLColor4 shadow_color = sShadowColor;
- shadow_color[3] = color[3];
- render(wstr, begin_offset,
- x + 1.f / sScaleX,
- y - 1.f / sScaleY,
- shadow_color,
- halign,
- valign,
- style & (~DROP_SHADOW),
- max_chars,
- max_pixels,
- right_x,
- use_embedded,
- use_ellipses);
- }
-
S32 scaled_max_pixels = max_pixels == S32_MAX ? S32_MAX : llceil((F32)max_pixels * sScaleX);
- BOOL render_bold = FALSE;
-
// HACK for better bolding
if (style & BOLD)
{
@@ -585,9 +568,17 @@ S32 LLFontGL::render(const LLWString &wstr,
max_chars, max_pixels,
right_x, use_embedded);
}
- else
+ }
+
+ F32 drop_shadow_strength = 0.f;
+ if (style & DROP_SHADOW)
+ {
+ F32 luminance;
+ color.calcHSL(NULL, NULL, &luminance);
+ drop_shadow_strength = clamp_rescale(luminance, 0.35f, 0.6f, 0.f, DROP_SHADOW_STRENGTH);
+ if (luminance < 0.35f)
{
- render_bold = TRUE;
+ style = style & ~DROP_SHADOW;
}
}
@@ -631,9 +622,6 @@ S32 LLFontGL::render(const LLWString &wstr,
}
F32 cur_x, cur_y, cur_render_x, cur_render_y;
- F32 slant_offset;
-
- slant_offset = ((style & ITALIC) ? ( -mAscender * 0.25f) : 0.f);
// Bind the font texture
@@ -696,7 +684,7 @@ S32 LLFontGL::render(const LLWString &wstr,
if (use_ellipses && halign == LEFT)
{
// check for too long of a string
- if (getWidthF32(wstr.c_str(), 0, max_chars) > scaled_max_pixels)
+ if (getWidthF32(wstr.c_str(), 0, max_chars) * sScaleX > scaled_max_pixels)
{
// use four dots for ellipsis width to generate padding
const LLWString dots(utf8str_to_wstring(LLString("....")));
@@ -706,7 +694,6 @@ S32 LLFontGL::render(const LLWString &wstr,
}
- glBegin(GL_QUADS);
for (i = begin_offset; i < begin_offset + length; i++)
{
llwchar wch = wstr[i];
@@ -735,36 +722,13 @@ S32 LLFontGL::render(const LLWString &wstr,
break;
}
- glEnd();
-
- glColor3f(1.f, 1.f, 1.f);
-
ext_image->bind();
const F32 ext_x = cur_render_x + (EXT_X_BEARING * sScaleX);
const F32 ext_y = cur_render_y + (EXT_Y_BEARING * sScaleY + mAscender - mLineHeight);
- glBegin(GL_QUADS);
- {
- S32 num_passes = render_bold ? 2 : 1;
- for (S32 pass = 0; pass < num_passes; pass++)
- {
- glTexCoord2f(1.f, 1.f);
- glVertex2f(llfont_round_x(ext_x + ext_width + (F32)(pass * BOLD_OFFSET)),
- llfont_round_y(ext_y + ext_height));
-
- glTexCoord2f(0.f, 1.f);
- glVertex2f(llfont_round_x(ext_x + (F32)(pass * BOLD_OFFSET)),
- llfont_round_y(ext_y + ext_height));
-
- glTexCoord2f(0.f, 0.f);
- glVertex2f(llfont_round_x(ext_x + (F32)(pass * BOLD_OFFSET)), llfont_round_y(ext_y));
-
- glTexCoord2f(1.f, 0.f);
- glVertex2f(llfont_round_x(ext_x + ext_width + (F32)(pass * BOLD_OFFSET)),
- llfont_round_y(ext_y));
- }
- }
- glEnd();
+ LLRectf uv_rect(0.f, 1.f, 1.f, 0.f);
+ LLRectf screen_rect(ext_x, ext_y + ext_height, ext_x + ext_width, ext_y);
+ drawGlyph(screen_rect, uv_rect, LLColor4::white, style, drop_shadow_strength);
if (!label.empty())
{
@@ -793,15 +757,12 @@ S32 LLFontGL::render(const LLWString &wstr,
// Bind the font texture
mImageGLp->bind();
- glBegin(GL_QUADS);
}
else
{
if (!hasGlyph(wch))
{
- glEnd();
(const_cast(this))->addChar(wch);
- glBegin(GL_QUADS);
}
const LLFontGlyphInfo* fgi= getGlyphInfo(wch);
@@ -817,40 +778,28 @@ S32 LLFontGL::render(const LLWString &wstr,
// Draw the text at the appropriate location
//Specify vertices and texture coordinates
- S32 num_passes = render_bold ? 2 : 1;
- for (S32 pass = 0; pass < num_passes; pass++)
- {
- glTexCoord2f((fgi->mXBitmapOffset - PAD_AMT) * inv_width,
- (fgi->mYBitmapOffset + fgi->mHeight + PAD_AMT) * inv_height);
- glVertex2f(llfont_round_x(cur_render_x + (F32)fgi->mXBearing + (F32)(pass * BOLD_OFFSET) - PAD_AMT),
- llfont_round_y(cur_render_y + (F32)fgi->mYBearing + PAD_AMT));
- glTexCoord2f((fgi->mXBitmapOffset - PAD_AMT) * inv_width,
- (fgi->mYBitmapOffset - PAD_AMT) * inv_height);
- glVertex2f(llfont_round_x(cur_render_x + (F32)fgi->mXBearing + slant_offset + (F32)(pass * BOLD_OFFSET) - PAD_AMT),
- llfont_round_y(cur_render_y + (F32)fgi->mYBearing - (F32)fgi->mHeight - PAD_AMT));
- glTexCoord2f((fgi->mXBitmapOffset + fgi->mWidth + PAD_AMT) * inv_width,
- (fgi->mYBitmapOffset - PAD_AMT) * inv_height);
- glVertex2f(llfont_round_x(cur_render_x + (F32)fgi->mXBearing + slant_offset + (F32)fgi->mWidth + (F32)(pass * BOLD_OFFSET) + PAD_AMT),
- llfont_round_y(cur_render_y + (F32)fgi->mYBearing - (F32)fgi->mHeight - PAD_AMT));
- glTexCoord2f((fgi->mXBitmapOffset + fgi->mWidth + PAD_AMT) * inv_width,
- (fgi->mYBitmapOffset + fgi->mHeight + PAD_AMT) * inv_height);
- glVertex2f(llfont_round_x(cur_render_x + (F32)fgi->mXBearing + (F32)fgi->mWidth + (F32)(pass * BOLD_OFFSET) + PAD_AMT),
- llfont_round_y(cur_render_y + (F32)fgi->mYBearing + PAD_AMT));
- }
+ LLRectf uv_rect((fgi->mXBitmapOffset - PAD_AMT) * inv_width,
+ (fgi->mYBitmapOffset + fgi->mHeight + PAD_AMT) * inv_height,
+ (fgi->mXBitmapOffset + fgi->mWidth + PAD_AMT) * inv_width,
+ (fgi->mYBitmapOffset - PAD_AMT) * inv_height);
+ LLRectf screen_rect(cur_render_x + (F32)fgi->mXBearing - PAD_AMT,
+ cur_render_y + (F32)fgi->mYBearing + PAD_AMT,
+ cur_render_x + (F32)fgi->mXBearing + (F32)fgi->mWidth + PAD_AMT,
+ cur_render_y + (F32)fgi->mYBearing - (F32)fgi->mHeight - PAD_AMT);
- chars_drawn++;
+ drawGlyph(screen_rect, uv_rect, color, style, drop_shadow_strength);
+ chars_drawn++;
cur_x += fgi->mXAdvance;
cur_y += fgi->mYAdvance;
+
llwchar next_char = wstr[i+1];
if (next_char && (next_char < LAST_CHARACTER))
{
// Kern this puppy.
if (!hasGlyph(next_char))
{
- glEnd();
(const_cast(this))->addChar(next_char);
- glBegin(GL_QUADS);
}
cur_x += getXKerning(wch, next_char);
}
@@ -867,8 +816,6 @@ S32 LLFontGL::render(const LLWString &wstr,
}
}
- glEnd();
-
if (right_x)
{
*right_x = cur_x / sScaleX;
@@ -1347,6 +1294,89 @@ void LLFontGL::removeEmbeddedChar( llwchar wc )
}
}
+
+void LLFontGL::renderQuad(const LLRectf& screen_rect, const LLRectf& uv_rect, F32 slant_amt) const
+{
+ glTexCoord2f(uv_rect.mRight, uv_rect.mTop);
+ glVertex2f(llfont_round_x(screen_rect.mRight),
+ llfont_round_y(screen_rect.mTop));
+
+ glTexCoord2f(uv_rect.mLeft, uv_rect.mTop);
+ glVertex2f(llfont_round_x(screen_rect.mLeft),
+ llfont_round_y(screen_rect.mTop));
+
+ glTexCoord2f(uv_rect.mLeft, uv_rect.mBottom);
+ glVertex2f(llfont_round_x(screen_rect.mLeft + slant_amt),
+ llfont_round_y(screen_rect.mBottom));
+
+ glTexCoord2f(uv_rect.mRight, uv_rect.mBottom);
+ glVertex2f(llfont_round_x(screen_rect.mRight + slant_amt),
+ llfont_round_y(screen_rect.mBottom));
+}
+
+void LLFontGL::drawGlyph(const LLRectf& screen_rect, const LLRectf& uv_rect, const LLColor4& color, U8 style, F32 drop_shadow_strength) const
+{
+ F32 slant_offset;
+ slant_offset = ((style & ITALIC) ? ( -mAscender * 0.2f) : 0.f);
+
+ glBegin(GL_QUADS);
+ {
+ //FIXME: bold and drop shadow are mutually exclusive only for convenience
+ //Allow both when we need them.
+ if (style & BOLD)
+ {
+ glColor4fv(color.mV);
+ for (S32 pass = 0; pass < 2; pass++)
+ {
+ LLRectf screen_rect_offset = screen_rect;
+
+ screen_rect_offset.translate((F32)(pass * BOLD_OFFSET), 0.f);
+ renderQuad(screen_rect_offset, uv_rect, slant_offset);
+ }
+ }
+ else if (style & DROP_SHADOW)
+ {
+ LLColor4 shadow_color = LLFontGL::sShadowColor;
+ shadow_color.mV[VALPHA] = color.mV[VALPHA] * drop_shadow_strength;
+ glColor4fv(shadow_color.mV);
+ for (S32 pass = 0; pass < 5; pass++)
+ {
+ LLRectf screen_rect_offset = screen_rect;
+
+ switch(pass)
+ {
+ case 0:
+ screen_rect_offset.translate(-1.f, -1.f);
+ break;
+ case 1:
+ screen_rect_offset.translate(1.f, -1.f);
+ break;
+ case 2:
+ screen_rect_offset.translate(1.f, 1.f);
+ break;
+ case 3:
+ screen_rect_offset.translate(-1.f, 1.f);
+ break;
+ case 4:
+ screen_rect_offset.translate(0, -2.f);
+ break;
+ }
+
+ renderQuad(screen_rect_offset, uv_rect, slant_offset);
+ }
+ glColor4fv(color.mV);
+ renderQuad(screen_rect, uv_rect, slant_offset);
+ }
+ else // normal rendering
+ {
+ glColor4fv(color.mV);
+ renderQuad(screen_rect, uv_rect, slant_offset);
+ }
+
+ }
+ glEnd();
+}
+
// static
LLString LLFontGL::nameFromFont(const LLFontGL* fontp)
{
diff --git a/linden/indra/llrender/llfontgl.h b/linden/indra/llrender/llfontgl.h
index bcb8dfb..98a7a55 100644
--- a/linden/indra/llrender/llfontgl.h
+++ b/linden/indra/llrender/llfontgl.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -33,6 +34,7 @@
#include "llimagegl.h"
#include "v2math.h"
#include "llcoord.h"
+#include "llrect.h"
class LLColor4;
@@ -206,6 +208,8 @@ protected:
const embedded_data_t* getEmbeddedCharData(const llwchar wch) const;
F32 getEmbeddedCharAdvance(const embedded_data_t* ext_data) const;
void clearEmbeddedChars();
+ void renderQuad(const LLRectf& screen_rect, const LLRectf& uv_rect, F32 slant_amt) const;
+ void drawGlyph(const LLRectf& screen_rect, const LLRectf& uv_rect, const LLColor4& color, U8 style, F32 drop_shadow_fade) const;
public:
static F32 sVertDPI;
diff --git a/linden/indra/llrender/llgldbg.cpp b/linden/indra/llrender/llgldbg.cpp
index ab35353..84f0082 100644
--- a/linden/indra/llrender/llgldbg.cpp
+++ b/linden/indra/llrender/llgldbg.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -100,7 +101,7 @@ char *fv3(F32 *f)
char *fv1(F32 *f)
{
static char str[128]; /* Flawfinder: ignore */
- snprintf(str, sizeof(str), "%8.3f", f[0]); /* Flawfinder: ignore */
+ snprintf(str, sizeof(str), "%8.3f", f[0]); /* Flawfinder: ignore */
return str;
}
diff --git a/linden/indra/llrender/llgldbg.h b/linden/indra/llrender/llgldbg.h
index 39be147..4483fb9 100644
--- a/linden/indra/llrender/llgldbg.h
+++ b/linden/indra/llrender/llgldbg.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llrender/llimagegl.cpp b/linden/indra/llrender/llimagegl.cpp
index 8386e95..464507e 100644
--- a/linden/indra/llrender/llimagegl.cpp
+++ b/linden/indra/llrender/llimagegl.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -176,7 +177,7 @@ void LLImageGL::destroyGL(BOOL save_state)
if (save_state)
{
glimage->mSaveData = new LLImageRaw;
- glimage->readBackRaw(glimage->mCurrentDiscardLevel, glimage->mSaveData);
+ glimage->readBackRaw(glimage->mCurrentDiscardLevel, glimage->mSaveData, false);
}
glimage->destroyGLTexture();
stop_glerror();
@@ -939,7 +940,7 @@ BOOL LLImageGL::setDiscardLevel(S32 discard_level)
LLPointer imageraw = new LLImageRaw;
while(discard_level > mCurrentDiscardLevel)
{
- if (readBackRaw(discard_level, imageraw))
+ if (readBackRaw(discard_level, imageraw, false))
{
break;
}
@@ -961,7 +962,7 @@ BOOL LLImageGL::setDiscardLevel(S32 discard_level)
}
}
-BOOL LLImageGL::readBackRaw(S32 discard_level, LLImageRaw* imageraw)
+BOOL LLImageGL::readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compressed_ok)
{
if (discard_level < 0)
{
@@ -999,7 +1000,10 @@ BOOL LLImageGL::readBackRaw(S32 discard_level, LLImageRaw* imageraw)
}
LLGLint is_compressed = 0;
- glGetTexLevelParameteriv(mTarget, is_compressed, GL_TEXTURE_COMPRESSED, (GLint*)&is_compressed);
+ if (compressed_ok)
+ {
+ glGetTexLevelParameteriv(mTarget, is_compressed, GL_TEXTURE_COMPRESSED, (GLint*)&is_compressed);
+ }
if (is_compressed)
{
LLGLint glbytes;
diff --git a/linden/indra/llrender/llimagegl.h b/linden/indra/llrender/llimagegl.h
index 20c31d1..16315ee 100644
--- a/linden/indra/llrender/llimagegl.h
+++ b/linden/indra/llrender/llimagegl.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -91,7 +92,8 @@ public:
BOOL setSubImage(const U8* datap, S32 data_width, S32 data_height, S32 x_pos, S32 y_pos, S32 width, S32 height);
BOOL setSubImageFromFrameBuffer(S32 fb_x, S32 fb_y, S32 x_pos, S32 y_pos, S32 width, S32 height);
BOOL setDiscardLevel(S32 discard_level);
- BOOL readBackRaw(S32 discard_level, LLImageRaw* imageraw); // Read back a raw image for this discard level, if it exists
+ // Read back a raw image for this discard level, if it exists
+ BOOL readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compressed_ok);
void destroyGLTexture();
void setClamp(BOOL clamps, BOOL clampt);
diff --git a/linden/indra/llrender/llrender.vcproj b/linden/indra/llrender/llrender.vcproj
index d13384d..86ab1c8 100644
--- a/linden/indra/llrender/llrender.vcproj
+++ b/linden/indra/llrender/llrender.vcproj
@@ -168,9 +168,6 @@
-
-
-
-
-
-
-
-
MAX_TEXT_LINES) return;
-
- TEXT_LINE *linep = &gTextLine[gNumTextLines++];
-
- strcpy(linep->line, text); /* Flawfinder: ignore */
- linep->x = x;
- linep->y = y;
-}
-
-
-// Writes text on the screen. Deprecated, don't write new code using this.
-void show_text_gl(void)
-{
- S32 i;
-
- TEXT_LINE *linep;
-
- if (gNumTextLines > MAX_TEXT_LINES)
- {
- gNumTextLines = MAX_TEXT_LINES;
- }
-
- for (i = 0; i < gNumTextLines; i++)
- {
- linep = &gTextLine[i];
-
- LLFontGL::sMonospace->renderUTF8(linep->line, 0, (F32)linep->x, (F32)linep->y, gCurrentColor,
- LLFontGL::LEFT, LLFontGL::TOP,
- LLFontGL::NORMAL, S32_MAX, S32_MAX, NULL, FALSE);
- }
- gNumTextLines = 0;
-}
-
diff --git a/linden/indra/llrender/text_out.h b/linden/indra/llrender/text_out.h
deleted file mode 100644
index 5080bd5..0000000
--- a/linden/indra/llrender/text_out.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * @file text_out.h
- * @brief Text rendering implementation
- *
- * Copyright (c) 2000-2007, Linden Research, Inc.
- *
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlife.com/developers/opensource/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at http://secondlife.com/developers/opensource/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#ifndef LL_TEXT_OUT_H
-#define LL_TEXT_OUT_H
-
-// DEPRECATED - Use LLFontGL for raw rendering, or make an LLTextBox to hold the text
-
-class LLColor4;
-
-void set_text_color(const LLColor4& color);
-void add_text(S32 x, S32 y, char *text);
-void show_text_gl(void);
-void reset_num_text_lines(void);
-
-#endif
diff --git a/linden/indra/llui/files.lst b/linden/indra/llui/files.lst
index 96bb170..5a62573 100644
--- a/linden/indra/llui/files.lst
+++ b/linden/indra/llui/files.lst
@@ -8,6 +8,7 @@ llui/lldraghandle.cpp
llui/lleditmenuhandler.cpp
llui/llfloater.cpp
llui/llfocusmgr.cpp
+llui/llhtmlhelp.h
llui/lliconctrl.cpp
llui/llkeywords.cpp
llui/lllineeditor.cpp
diff --git a/linden/indra/llui/llalertdialog.cpp b/linden/indra/llui/llalertdialog.cpp
index 6523e44..547efae 100644
--- a/linden/indra/llui/llalertdialog.cpp
+++ b/linden/indra/llui/llalertdialog.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llalertdialog.h b/linden/indra/llui/llalertdialog.h
index 1085f23..d389236 100644
--- a/linden/indra/llui/llalertdialog.h
+++ b/linden/indra/llui/llalertdialog.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llbutton.cpp b/linden/indra/llui/llbutton.cpp
index 41c2269..d35dd57 100644
--- a/linden/indra/llui/llbutton.cpp
+++ b/linden/indra/llui/llbutton.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -65,7 +66,9 @@ LLButton::LLButton( const LLString& name, const LLRect& rect, const LLString& co
mMouseUpCallback( NULL ),
mHeldDownCallback( NULL ),
mGLFont( NULL ),
+ mMouseDownFrame( 0 ),
mHeldDownDelay( 0.5f ), // seconds until held-down callback is called
+ mHeldDownFrameDelay( 0 ),
mImageUnselected( NULL ),
mImageSelected( NULL ),
mImageHoverSelected( NULL ),
@@ -118,7 +121,9 @@ LLButton::LLButton(const LLString& name, const LLRect& rect,
mMouseUpCallback( NULL ),
mHeldDownCallback( NULL ),
mGLFont( NULL ),
+ mMouseDownFrame( 0 ),
mHeldDownDelay( 0.5f ), // seconds until held-down callback is called
+ mHeldDownFrameDelay( 0 ),
mImageUnselected( NULL ),
mImageSelected( NULL ),
mImageHoverSelected( NULL ),
@@ -215,9 +220,9 @@ void LLButton::init(void (*click_callback)(void*), void *callback_data, const LL
LLButton::~LLButton()
{
- if( this == gFocusMgr.getMouseCapture() )
+ if( hasMouseCapture() )
{
- gFocusMgr.setMouseCapture( NULL, NULL );
+ gFocusMgr.setMouseCapture( NULL );
}
}
@@ -303,7 +308,7 @@ BOOL LLButton::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent )
BOOL LLButton::handleMouseDown(S32 x, S32 y, MASK mask)
{
// Route future Mouse messages here preemptively. (Release on mouse up.)
- gFocusMgr.setMouseCapture( this, &LLButton::onMouseCaptureLost );
+ gFocusMgr.setMouseCapture( this );
if (hasTabStop() && !getIsChrome())
{
@@ -316,6 +321,7 @@ BOOL LLButton::handleMouseDown(S32 x, S32 y, MASK mask)
}
mMouseDownTimer.start();
+ mMouseDownFrame = LLFrameTimer::getFrameCount();
if (mSoundFlags & MOUSE_DOWN)
{
@@ -329,19 +335,17 @@ BOOL LLButton::handleMouseDown(S32 x, S32 y, MASK mask)
BOOL LLButton::handleMouseUp(S32 x, S32 y, MASK mask)
{
// We only handle the click if the click both started and ended within us
- if( this == gFocusMgr.getMouseCapture() )
+ if( hasMouseCapture() )
{
+ // Always release the mouse
+ gFocusMgr.setMouseCapture( NULL );
+
// Regardless of where mouseup occurs, handle callback
if (mMouseUpCallback)
{
(*mMouseUpCallback)(mCallbackUserData);
}
- mMouseDownTimer.stop();
-
- // Always release the mouse
- gFocusMgr.setMouseCapture( NULL, NULL );
-
// DO THIS AT THE VERY END to allow the button to be destroyed as a result of being clicked.
// If mouseup in the widget, it's been clicked
if (pointInView(x, y))
@@ -356,6 +360,9 @@ BOOL LLButton::handleMouseUp(S32 x, S32 y, MASK mask)
(*mClickedCallback)( mCallbackUserData );
}
}
+
+ mMouseDownTimer.stop();
+ mMouseDownTimer.reset();
}
return TRUE;
@@ -375,14 +382,14 @@ BOOL LLButton::handleHover(S32 x, S32 y, MASK mask)
if (mMouseDownTimer.getStarted() && NULL != mHeldDownCallback)
{
F32 elapsed = mMouseDownTimer.getElapsedTimeF32();
- if( mHeldDownDelay < elapsed )
+ if( mHeldDownDelay <= elapsed && mHeldDownFrameDelay <= LLFrameTimer::getFrameCount() - mMouseDownFrame)
{
mHeldDownCallback( mCallbackUserData );
}
}
// We only handle the click if the click both started and ended within us
- if( this == gFocusMgr.getMouseCapture() )
+ if( hasMouseCapture() )
{
handled = TRUE;
}
@@ -431,7 +438,7 @@ void LLButton::draw()
cursor_pos_gl.mY = llround((F32)cursor_pos_gl.mY / LLUI::sGLScaleFactor.mV[VY]);
screenPointToLocal(cursor_pos_gl.mX, cursor_pos_gl.mY, &local_mouse_x, &local_mouse_y);
- BOOL pressed = pressed_by_keyboard || (this == gFocusMgr.getMouseCapture() && pointInView(local_mouse_x, local_mouse_y));
+ BOOL pressed = pressed_by_keyboard || (hasMouseCapture() && pointInView(local_mouse_x, local_mouse_y));
BOOL display_state = FALSE;
if( pressed )
@@ -819,11 +826,10 @@ void LLButton::setHoverImages( const LLString& image_name, const LLString& selec
setImageHoverSelected(selected_name);
}
-// static
-void LLButton::onMouseCaptureLost( LLMouseHandler* old_captor )
+void LLButton::onMouseCaptureLost()
{
- LLButton* self = (LLButton*) old_captor;
- self->mMouseDownTimer.stop();
+ mMouseDownTimer.stop();
+ mMouseDownTimer.reset();
}
//-------------------------------------------------------------------------
@@ -947,6 +953,19 @@ LLXMLNodePtr LLButton::getXML(bool save_children) const
return node;
}
+void clicked_help(void* data)
+{
+ LLButton* self = (LLButton*)data;
+ if (!self) return;
+
+ if (!LLUI::sHtmlHelp)
+ {
+ return;
+ }
+
+ LLUI::sHtmlHelp->show(self->getHelpURL());
+}
+
// static
LLView* LLButton::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory)
{
@@ -1023,9 +1042,21 @@ LLView* LLButton::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *fa
{
button->setLabelSelected(node->getTextContents());
}
+
+ if (node->hasAttribute("help_url"))
+ {
+ LLString help_url;
+ node->getAttributeString("help_url",help_url);
+ button->setHelpURLCallback(help_url);
+ }
button->initFromXML(node, parent);
return button;
}
+void LLButton::setHelpURLCallback(std::string help_url)
+{
+ mHelpURL = help_url;
+ setClickedCallback(clicked_help,this);
+}
diff --git a/linden/indra/llui/llbutton.h b/linden/indra/llui/llbutton.h
index fe906a6..44e8776 100644
--- a/linden/indra/llui/llbutton.h
+++ b/linden/indra/llui/llbutton.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -94,6 +95,8 @@ public:
virtual BOOL handleHover(S32 x, S32 y, MASK mask);
virtual void draw();
+ virtual void onMouseCaptureLost();
+
// HACK: "committing" a button is the same as clicking on it.
virtual void onCommit();
@@ -104,7 +107,7 @@ public:
void setMouseDownCallback( void (*cb)(void *data) ) { mMouseDownCallback = cb; } // mouse down within button
void setMouseUpCallback( void (*cb)(void *data) ) { mMouseUpCallback = cb; } // mouse up, EVEN IF NOT IN BUTTON
void setHeldDownCallback( void (*cb)(void *data) ) { mHeldDownCallback = cb; } // Mouse button held down and in button
- void setHeldDownDelay( F32 seconds) { mHeldDownDelay = seconds; }
+ void setHeldDownDelay( F32 seconds, S32 frames = 0) { mHeldDownDelay = seconds; mHeldDownFrameDelay = frames; }
F32 getHeldDownTime() const { return mMouseDownTimer.getElapsedTimeF32(); }
@@ -159,7 +162,6 @@ public:
void setBorderEnabled(BOOL b) { mBorderEnabled = b; }
static void onHeldDown(void *userdata); // to be called by gIdleCallbacks
- static void onMouseCaptureLost(LLMouseHandler* old_captor);
void setFixedBorder(S32 width, S32 height) { mFixedWidth = width; mFixedHeight = height; }
void setHoverGlowStrength(F32 strength) { mHoverGlowStrength = strength; }
@@ -181,6 +183,8 @@ public:
void setCommitOnReturn(BOOL commit) { mCommitOnReturn = commit; }
BOOL getCommitOnReturn() { return mCommitOnReturn; }
+ void setHelpURLCallback(std::string help_url);
+ LLString getHelpURL() { return mHelpURL; }
protected:
virtual void drawBorder(const LLColor4& color, S32 size);
@@ -194,7 +198,9 @@ protected:
const LLFontGL *mGLFont;
LLFrameTimer mMouseDownTimer;
+ S32 mMouseDownFrame;
F32 mHeldDownDelay; // seconds, after which held-down callbacks get called
+ S32 mHeldDownFrameDelay; // frames, after which held-down callbacks get called
LLPointer mImageUnselected;
LLUIString mUnselectedLabel;
@@ -259,6 +265,8 @@ protected:
BOOL mNeedsHighlight;
BOOL mCommitOnReturn;
+ LLString mHelpURL;
+
LLPointer mImagep;
static LLFrameTimer sFlashingTimer;
diff --git a/linden/indra/llui/llcallbackmap.h b/linden/indra/llui/llcallbackmap.h
index 3a0e3b3..4a47f60 100644
--- a/linden/indra/llui/llcallbackmap.h
+++ b/linden/indra/llui/llcallbackmap.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llcheckboxctrl.cpp b/linden/indra/llui/llcheckboxctrl.cpp
index 9f11ff8..5f3350e 100644
--- a/linden/indra/llui/llcheckboxctrl.cpp
+++ b/linden/indra/llui/llcheckboxctrl.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -175,7 +176,7 @@ void LLCheckBoxCtrl::onCommit()
void LLCheckBoxCtrl::setEnabled(BOOL b)
{
- LLUICtrl::setEnabled(b);
+ LLView::setEnabled(b);
mButton->setEnabled(b);
}
diff --git a/linden/indra/llui/llcheckboxctrl.h b/linden/indra/llui/llcheckboxctrl.h
index 77dc39d..1b895cb 100644
--- a/linden/indra/llui/llcheckboxctrl.h
+++ b/linden/indra/llui/llcheckboxctrl.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llclipboard.cpp b/linden/indra/llui/llclipboard.cpp
index d7c25fb..19f0188 100644
--- a/linden/indra/llui/llclipboard.cpp
+++ b/linden/indra/llui/llclipboard.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llclipboard.h b/linden/indra/llui/llclipboard.h
index 00bd73e..dc4cb32 100644
--- a/linden/indra/llui/llclipboard.h
+++ b/linden/indra/llui/llclipboard.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llcombobox.cpp b/linden/indra/llui/llcombobox.cpp
index 7c3755a..983dd43 100644
--- a/linden/indra/llui/llcombobox.cpp
+++ b/linden/indra/llui/llcombobox.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -59,7 +60,7 @@ LLComboBox::LLComboBox( const LLString& name, const LLRect &rect, const LLString
)
: LLUICtrl(name, rect, TRUE, commit_callback, callback_userdata,
FOLLOWS_LEFT | FOLLOWS_TOP),
- mDrawButton(TRUE),
+ mDrawArrow(TRUE),
mTextEntry(NULL),
mArrowImage(NULL),
mArrowImageWidth(8),
@@ -67,8 +68,8 @@ LLComboBox::LLComboBox( const LLString& name, const LLRect &rect, const LLString
mMaxChars(20),
mTextEntryTentative(TRUE),
mPrearrangeCallback( NULL ),
- mTextEntryCallback( NULL ),
- mListWidth(list_width)
+ mListPosition(BELOW),
+ mTextEntryCallback( NULL )
{
// For now, all comboboxes don't take keyboard focus when clicked.
// This might change if it is part of a modal dialog.
@@ -76,7 +77,7 @@ LLComboBox::LLComboBox( const LLString& name, const LLRect &rect, const LLString
// Revert to standard behavior. When this control's parent is hidden, it needs to
// hide this ctrl--which won't just happen automatically since when LLComboBox is
- // showing its list, it's also set to TopView. When keyboard focus is cleared all
+ // showing its list, it's also set to TopCtrl. When keyboard focus is cleared all
// controls (including this one) know that they are no longer editing.
mKeyboardFocusOnClick = TRUE;
@@ -87,7 +88,8 @@ LLComboBox::LLComboBox( const LLString& name, const LLRect &rect, const LLString
// Text label button
mButton = new LLSquareButton("comboxbox button",
r, label, NULL, LLString::null,
- &LLComboBox::onButtonClick, this);
+ NULL, this);
+ mButton->setMouseDownCallback(onButtonDown);
mButton->setFont(LLFontGL::sSansSerifSmall);
mButton->setFollows(FOLLOWS_LEFT | FOLLOWS_BOTTOM | FOLLOWS_RIGHT);
mButton->setHAlign( LLFontGL::LEFT );
@@ -110,6 +112,7 @@ LLComboBox::LLComboBox( const LLString& name, const LLRect &rect, const LLString
mList->setVisible(FALSE);
mList->setBgWriteableColor( LLColor4(1,1,1,1) );
mList->setCommitOnKeyboardMovement(FALSE);
+ mList->setFocusChangedCallback(onListFocusChanged);
addChild(mList);
LLRect border_rect(0, mRect.getHeight(), mRect.getWidth(), 0);
@@ -119,7 +122,7 @@ LLComboBox::LLComboBox( const LLString& name, const LLRect &rect, const LLString
LLUUID arrow_image_id( LLUI::sAssetsGroup->getString("combobox_arrow.tga") );
mArrowImage = LLUI::sImageProvider->getUIImageByID(arrow_image_id);
- mArrowImageWidth = llmax(8,mArrowImage->getWidth()); // In case image hasn't loaded yet
+ mArrowImageWidth = llmax(8,mArrowImage->getWidth(0)); // In case image hasn't loaded yet
}
@@ -219,115 +222,10 @@ LLView* LLComboBox::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *
void LLComboBox::setEnabled(BOOL enabled)
{
- LLUICtrl::setEnabled(enabled);
+ LLView::setEnabled(enabled);
mButton->setEnabled(enabled);
}
-// *HACK: these are all hacks to support the fact that the combobox
-// has mouse capture so we can hide the list when we don't handle the
-// mouse up event
-BOOL LLComboBox::handleHover(S32 x, S32 y, MASK mask)
-{
- if (mList->getVisible())
- {
- S32 local_x, local_y;
- LLView::localPointToOtherView(x, y, &local_x, &local_y, mList);
- if (mList->pointInView(local_x, local_y))
- {
- return mList->handleHover(local_x, local_y, mask);
- }
- }
- return LLUICtrl::handleHover(x, y, mask);
-}
-
-BOOL LLComboBox::handleMouseDown(S32 x, S32 y, MASK mask)
-{
- if (mList->getVisible())
- {
- S32 local_x, local_y;
- LLView::localPointToOtherView(x, y, &local_x, &local_y, mList);
- if (mList->pointInView(local_x, local_y))
- {
- return mList->handleMouseDown(local_x, local_y, mask);
- }
- }
- BOOL has_focus_now = hasFocus();
- BOOL handled = LLUICtrl::handleMouseDown(x, y, mask);
- if (handled && !has_focus_now)
- {
- onFocusReceived();
- }
-
- return handled;
-}
-
-BOOL LLComboBox::handleRightMouseDown(S32 x, S32 y, MASK mask)
-{
- if (mList->getVisible())
- {
- S32 local_x, local_y;
- LLView::localPointToOtherView(x, y, &local_x, &local_y, mList);
- if (mList->pointInView(local_x, local_y))
- {
- return mList->handleRightMouseDown(local_x, local_y, mask);
- }
- }
- return LLUICtrl::handleRightMouseDown(x, y, mask);
-}
-
-BOOL LLComboBox::handleRightMouseUp(S32 x, S32 y, MASK mask)
-{
- if (mList->getVisible())
- {
- S32 local_x, local_y;
- LLView::localPointToOtherView(x, y, &local_x, &local_y, mList);
- if (mList->pointInView(local_x, local_y))
- {
- return mList->handleRightMouseUp(local_x, local_y, mask);
- }
- }
- return LLUICtrl::handleRightMouseUp(x, y, mask);
-}
-
-BOOL LLComboBox::handleDoubleClick(S32 x, S32 y, MASK mask)
-{
- if (mList->getVisible())
- {
- S32 local_x, local_y;
- LLView::localPointToOtherView(x, y, &local_x, &local_y, mList);
- if (mList->pointInView(local_x, local_y))
- {
- return mList->handleDoubleClick(local_x, local_y, mask);
- }
- }
- return LLUICtrl::handleDoubleClick(x, y, mask);
-}
-
-BOOL LLComboBox::handleMouseUp(S32 x, S32 y, MASK mask)
-{
- BOOL handled = childrenHandleMouseUp(x, y, mask) != NULL;
-
- if (!handled && mList->getVisible())
- {
- S32 local_x, local_y;
- LLView::localPointToOtherView(x, y, &local_x, &local_y, mList);
- if (mList->pointInView(local_x, local_y))
- {
- handled = mList->handleMouseUp(local_x, local_y, mask);
- }
- }
-
- if( !handled && gFocusMgr.getMouseCapture() == this )
- {
- // Mouse events that we didn't handle cause the list to be hidden.
- // Eat mouse event, regardless of where on the screen it happens.
- hideList();
- handled = TRUE;
- }
-
- return handled;
-}
-
void LLComboBox::clear()
{
if (mTextEntry)
@@ -512,12 +410,13 @@ void LLComboBox::onFocusLost()
{
mTextEntry->selectAll();
}
+ LLUICtrl::onFocusLost();
}
void LLComboBox::setButtonVisible(BOOL visible)
{
mButton->setVisible(visible);
- mDrawButton = visible;
+ mDrawArrow = visible;
if (mTextEntry)
{
LLRect text_entry_rect(0, mRect.getHeight(), mRect.getWidth(), 0);
@@ -541,15 +440,17 @@ void LLComboBox::draw()
// Draw children
LLUICtrl::draw();
- if (mDrawButton)
+ if (mDrawArrow)
{
// Paste the graphic on the right edge
if (!mArrowImage.isNull())
{
- S32 left = mRect.getWidth() - mArrowImageWidth - LLUI::sConfigGroup->getS32("DropShadowButton");
+ S32 arrow_height = llmin(mRect.getHeight(), mArrowImage->getHeight());
+ S32 arrow_width = llround((F32)mArrowImage->getWidth() * ((F32)arrow_height / (F32)mArrowImage->getHeight()));
+
+ S32 left = mRect.getWidth() - mArrowImage->getWidth() - LLUI::sConfigGroup->getS32("DropShadowButton");
- gl_draw_image( left, 0, mArrowImage,
- LLColor4::white);
+ gl_draw_scaled_image( left, 0, arrow_width, arrow_height, mArrowImage, LLColor4::white);
}
}
}
@@ -595,18 +496,61 @@ void LLComboBox::showList()
//HACK: shouldn't have to know about scale here
mList->arrange( 192, llfloor((F32)window_size.mY / LLUI::sGLScaleFactor.mV[VY]) - 50 );
- // Move rect so it hangs off the bottom of this view
+ // Make sure that we can see the whole list
+ LLRect root_view_local;
+ LLView* root_view = getRootView();
+ root_view->localRectToOtherView(root_view->getLocalRect(), &root_view_local, this);
+
LLRect rect = mList->getRect();
- rect.setLeftTopAndSize(0, 0, rect.getWidth(), rect.getHeight() );
- mList->setRect(rect);
+ if (mListPosition == BELOW)
+ {
+ if (rect.getHeight() <= -root_view_local.mBottom)
+ {
+ // Move rect so it hangs off the bottom of this view
+ rect.setLeftTopAndSize(0, 0, rect.getWidth(), rect.getHeight() );
+ }
+ else
+ {
+ // stack on top or bottom, depending on which has more room
+ if (-root_view_local.mBottom > root_view_local.mTop - mRect.getHeight())
+ {
+ // Move rect so it hangs off the bottom of this view
+ rect.setLeftTopAndSize(0, 0, rect.getWidth(), llmin(-root_view_local.mBottom, rect.getHeight()));
+ }
+ else
+ {
+ // move rect so it stacks on top of this view (clipped to size of screen)
+ rect.setOriginAndSize(0, mRect.getHeight(), rect.getWidth(), llmin(root_view_local.mTop - mRect.getHeight(), rect.getHeight()));
+ }
+ }
+ }
+ else // ABOVE
+ {
+ if (rect.getHeight() <= root_view_local.mTop - mRect.getHeight())
+ {
+ // move rect so it stacks on top of this view (clipped to size of screen)
+ rect.setOriginAndSize(0, mRect.getHeight(), rect.getWidth(), llmin(root_view_local.mTop - mRect.getHeight(), rect.getHeight()));
+ }
+ else
+ {
+ // stack on top or bottom, depending on which has more room
+ if (-root_view_local.mBottom > root_view_local.mTop - mRect.getHeight())
+ {
+ // Move rect so it hangs off the bottom of this view
+ rect.setLeftTopAndSize(0, 0, rect.getWidth(), llmin(-root_view_local.mBottom, rect.getHeight()));
+ }
+ else
+ {
+ // move rect so it stacks on top of this view (clipped to size of screen)
+ rect.setOriginAndSize(0, mRect.getHeight(), rect.getWidth(), llmin(root_view_local.mTop - mRect.getHeight(), rect.getHeight()));
+ }
+ }
- // Make sure that we can see the whole list
- LLRect floater_area_screen;
- LLRect floater_area_local;
- gFloaterView->getParent()->localRectToScreen( gFloaterView->getRect(), &floater_area_screen );
- screenRectToLocal( floater_area_screen, &floater_area_local );
- mList->translateIntoRect( floater_area_local, FALSE );
+ }
+ mList->setOrigin(rect.mLeft, rect.mBottom);
+ mList->reshape(rect.getWidth(), rect.getHeight());
+ mList->translateIntoRect(root_view_local, FALSE);
// Make sure we didn't go off bottom of screen
S32 x, y;
@@ -617,7 +561,12 @@ void LLComboBox::showList()
mList->translate(0, -y);
}
- gFocusMgr.setMouseCapture( this, LLComboBox::onMouseCaptureLost );
+ // pass mouse capture on to list if button is depressed
+ if (mButton->hasMouseCapture())
+ {
+ gFocusMgr.setMouseCapture(mList);
+ }
+
// NB: this call will trigger the focuslost callback which will hide the list, so do it first
// before finally showing the list
@@ -627,14 +576,13 @@ void LLComboBox::showList()
// so that the callback is not immediately triggered on setFocus()
mList->selectFirstItem();
}
- gFocusMgr.setKeyboardFocus(mList, onListFocusLost);
+ mList->setFocus(TRUE);
// Show the list and push the button down
mButton->setToggleState(TRUE);
mList->setVisible(TRUE);
- gFocusMgr.setTopView(mList, LLComboBox::onTopViewLost );
-
+ gFocusMgr.setTopCtrl(mList);
}
void LLComboBox::hideList()
@@ -643,37 +591,21 @@ void LLComboBox::hideList()
mList->setVisible(FALSE);
mList->highlightNthItem(-1);
- if( gFocusMgr.getTopView() == mList )
- {
- gFocusMgr.setTopView(NULL, NULL);
- }
-
- if( gFocusMgr.getMouseCapture() == this )
+ if( gFocusMgr.getTopCtrl() == mList )
{
- gFocusMgr.setMouseCapture( NULL, NULL );
+ gFocusMgr.setTopCtrl(NULL);
}
- if( gFocusMgr.getKeyboardFocus() == mList )
- {
- if (mAllowTextEntry)
- {
- mTextEntry->setFocus(TRUE);
- }
- else
- {
- setFocus(TRUE);
- }
- }
+ //mList->setFocus(FALSE);
}
-
//------------------------------------------------------------------
// static functions
//------------------------------------------------------------------
// static
-void LLComboBox::onButtonClick(void *userdata)
+void LLComboBox::onButtonDown(void *userdata)
{
LLComboBox *self = (LLComboBox *)userdata;
@@ -720,50 +652,47 @@ void LLComboBox::onItemSelected(LLUICtrl* item, void *userdata)
const LLString& name = self->mList->getSimpleSelectedItem();
- self->hideList();
-
S32 cur_id = self->getCurrentIndex();
if (cur_id != -1)
{
- self->setLabel(self->mList->getSimpleSelectedItem());
+ self->setLabel(name);
if (self->mAllowTextEntry)
{
- self->mTextEntry->setText(name);
- self->mTextEntry->setTentative(FALSE);
gFocusMgr.setKeyboardFocus(self->mTextEntry, NULL);
self->mTextEntry->selectAll();
}
- else
- {
- self->mButton->setLabelUnselected( name );
- self->mButton->setLabelSelected( name );
- self->mButton->setDisabledLabel( name );
- self->mButton->setDisabledSelectedLabel( name );
- }
+ }
+ else
+ {
+ // invalid selection, just restore existing value
+ self->mList->selectSimpleItem(self->mButton->getLabelSelected());
}
self->onCommit();
-}
-// static
-void LLComboBox::onTopViewLost(LLView* old_focus)
-{
- LLComboBox *self = (LLComboBox *) old_focus->getParent();
self->hideList();
}
-
// static
-void LLComboBox::onMouseCaptureLost(LLMouseHandler*)
+void LLComboBox::onListFocusChanged(LLUICtrl* list, void* user_data)
{
- // Can't hide the list here. If the list scrolls off the screen,
- // and you click in the arrow buttons of the scroll bar, they must capture
- // the mouse to handle scrolling-while-mouse-down.
+ LLComboBox *self = (LLComboBox *) list->getParent();
+ // user not manipulating list or clicking on drop down button
+ if (!self->mList->hasFocus() && !self->mButton->hasMouseCapture())
+ {
+ //*HACK: store the original value explicitly somewhere, not just in label
+ LLString orig_selection = self->mAllowTextEntry ? self->mTextEntry->getText() : self->mButton->getLabelSelected();
+
+ self->hideList();
+
+ // reassert original selection
+ self->mList->selectSimpleItem(orig_selection, FALSE);
+ }
}
BOOL LLComboBox::handleToolTip(S32 x, S32 y, LLString& msg, LLRect* sticky_rect_screen)
{
-
+
LLString tool_tip;
if (LLUI::sShowXUINames)
@@ -875,6 +804,7 @@ void LLComboBox::setAllowTextEntry(BOOL allow, S32 max_chars, BOOL set_tentative
mTextEntry->setCommitOnFocusLost(FALSE);
mTextEntry->setText(cur_label);
mTextEntry->setIgnoreTab(TRUE);
+ mTextEntry->setFollowsAll();
addChild(mTextEntry);
mMaxChars = max_chars;
}
@@ -882,6 +812,8 @@ void LLComboBox::setAllowTextEntry(BOOL allow, S32 max_chars, BOOL set_tentative
{
mTextEntry->setVisible(TRUE);
}
+
+ mButton->setFollows(FOLLOWS_BOTTOM | FOLLOWS_TOP | FOLLOWS_RIGHT);
}
else if (!allow && mAllowTextEntry)
{
@@ -892,6 +824,7 @@ void LLComboBox::setAllowTextEntry(BOOL allow, S32 max_chars, BOOL set_tentative
{
mTextEntry->setVisible(FALSE);
}
+ mButton->setFollowsAll();
}
mAllowTextEntry = allow;
mTextEntryTentative = set_tentative;
@@ -927,6 +860,7 @@ void LLComboBox::onTextEntry(LLLineEditor* line_editor, void* user_data)
else
{
line_editor->setTentative(self->mTextEntryTentative);
+ self->mList->deselectAllItems();
}
return;
}
@@ -1141,15 +1075,3 @@ BOOL LLComboBox::operateOnAll(EOperation op)
}
return FALSE;
}
-
-//static
-void LLComboBox::onListFocusLost(LLUICtrl* old_focus)
-{
- // if focus is going to nothing (user hit ESC), take it back
- LLComboBox* combo = (LLComboBox*)old_focus->getParent();
- combo->hideList();
- if (gFocusMgr.getKeyboardFocus() == NULL)
- {
- combo->focusFirstItem();
- }
-}
diff --git a/linden/indra/llui/llcombobox.h b/linden/indra/llui/llcombobox.h
index 5de9463..8c317ee 100644
--- a/linden/indra/llui/llcombobox.h
+++ b/linden/indra/llui/llcombobox.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -53,6 +54,12 @@ class LLComboBox
: public LLUICtrl, public LLCtrlListInterface
{
public:
+ typedef enum e_preferred_position
+ {
+ ABOVE,
+ BELOW
+ } EPreferredPosition;
+
LLComboBox(
const LLString& name,
const LLRect &rect,
@@ -77,12 +84,6 @@ public:
virtual BOOL handleToolTip(S32 x, S32 y, LLString& msg, LLRect* sticky_rect);
virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent);
virtual BOOL handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent);
- virtual BOOL handleHover(S32 x, S32 y, MASK mask);
- virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
- virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
- virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
- virtual BOOL handleRightMouseUp(S32 x, S32 y, MASK mask);
- virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
// LLUICtrl interface
virtual void clear(); // select nothing
@@ -165,34 +166,31 @@ public:
void setButtonVisible(BOOL visible);
- static void onButtonClick(void *userdata);
+ static void onButtonDown(void *userdata);
static void onItemSelected(LLUICtrl* item, void *userdata);
- static void onTopViewLost(LLView* old_focus);
- static void onMouseCaptureLost(LLMouseHandler* old_captor);
+ static void onListFocusChanged(LLUICtrl* item, void *userdata);
static void onTextEntry(LLLineEditor* line_editor, void* user_data);
static void onTextCommit(LLUICtrl* caller, void* user_data);
void updateSelection();
- void showList();
- void hideList();
-
- static void onListFocusLost(LLUICtrl* old_focus);
-
+ virtual void showList();
+ virtual void hideList();
+
protected:
LLButton* mButton;
LLScrollListCtrl* mList;
LLViewBorder* mBorder;
BOOL mKeyboardFocusOnClick;
- BOOL mDrawButton;
+ BOOL mDrawArrow;
LLLineEditor* mTextEntry;
LLPointer mArrowImage;
S32 mArrowImageWidth;
BOOL mAllowTextEntry;
S32 mMaxChars;
BOOL mTextEntryTentative;
+ EPreferredPosition mListPosition;
void (*mPrearrangeCallback)(LLUICtrl*,void*);
void (*mTextEntryCallback)(LLLineEditor*, void*);
- S32 mListWidth; // width of pop-up list, 0 = use combobox width
};
#endif
diff --git a/linden/indra/llui/llctrlselectioninterface.cpp b/linden/indra/llui/llctrlselectioninterface.cpp
index 446eb63..3b71942 100644
--- a/linden/indra/llui/llctrlselectioninterface.cpp
+++ b/linden/indra/llui/llctrlselectioninterface.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llctrlselectioninterface.h b/linden/indra/llui/llctrlselectioninterface.h
index 189d2e1..878648d 100644
--- a/linden/indra/llui/llctrlselectioninterface.h
+++ b/linden/indra/llui/llctrlselectioninterface.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/lldraghandle.cpp b/linden/indra/llui/lldraghandle.cpp
index 261d149..9e80c99 100644
--- a/linden/indra/llui/lldraghandle.cpp
+++ b/linden/indra/llui/lldraghandle.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -288,7 +289,7 @@ BOOL LLDragHandle::handleMouseDown(S32 x, S32 y, MASK mask)
{
// Route future Mouse messages here preemptively. (Release on mouse up.)
// No handler needed for focus lost since this clas has no state that depends on it.
- gFocusMgr.setMouseCapture(this, NULL );
+ gFocusMgr.setMouseCapture(this);
localPointToScreen(x, y, &mDragLastScreenX, &mDragLastScreenY);
mLastMouseScreenX = mDragLastScreenX;
@@ -301,10 +302,10 @@ BOOL LLDragHandle::handleMouseDown(S32 x, S32 y, MASK mask)
BOOL LLDragHandle::handleMouseUp(S32 x, S32 y, MASK mask)
{
- if( gFocusMgr.getMouseCapture() == this )
+ if( hasMouseCapture() )
{
// Release the mouse
- gFocusMgr.setMouseCapture( NULL, NULL );
+ gFocusMgr.setMouseCapture( NULL );
}
// Note: don't pass on to children
@@ -317,7 +318,7 @@ BOOL LLDragHandle::handleHover(S32 x, S32 y, MASK mask)
BOOL handled = FALSE;
// We only handle the click if the click both started and ended within us
- if( gFocusMgr.getMouseCapture() == this )
+ if( hasMouseCapture() )
{
S32 screen_x;
S32 screen_y;
diff --git a/linden/indra/llui/lldraghandle.h b/linden/indra/llui/lldraghandle.h
index 5344358..691851d 100644
--- a/linden/indra/llui/lldraghandle.h
+++ b/linden/indra/llui/lldraghandle.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/lleditmenuhandler.cpp b/linden/indra/llui/lleditmenuhandler.cpp
index 7425aa8..85b4464 100644
--- a/linden/indra/llui/lleditmenuhandler.cpp
+++ b/linden/indra/llui/lleditmenuhandler.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/lleditmenuhandler.h b/linden/indra/llui/lleditmenuhandler.h
index 35e223b..ec3d246 100644
--- a/linden/indra/llui/lleditmenuhandler.h
+++ b/linden/indra/llui/lleditmenuhandler.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llfloater.cpp b/linden/indra/llui/llfloater.cpp
index 02a410e..12758b3 100644
--- a/linden/indra/llui/llfloater.cpp
+++ b/linden/indra/llui/llfloater.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -57,6 +58,8 @@ extern BOOL gNoRender;
const S32 MINIMIZED_WIDTH = 160;
const S32 CLOSE_BOX_FROM_TOP = 1;
+// use this to control "jumping" behavior when Ctrl-Tabbing
+const S32 TABBED_FLOATER_OFFSET = 0;
LLString LLFloater::sButtonActiveImageNames[BUTTON_COUNT] =
{
@@ -298,7 +301,6 @@ void LLFloater::init(const LLString& title,
mRect.getHeight() - LLPANEL_BORDER_WIDTH - close_box_size);
mDragHandle = new LLDragHandleLeft("drag", drag_handle_rect, title );
}
- mDragHandle->setSaveToXML(false);
addChild(mDragHandle);
// Resize Handle
@@ -314,28 +316,24 @@ void LLFloater::init(const LLString& title,
"resizebar_left",
LLRect( 0, mRect.getHeight(), RESIZE_BAR_THICKNESS, 0),
min_width, min_height, LLResizeBar::LEFT );
- mResizeBar[0]->setSaveToXML(false);
addChild( mResizeBar[0] );
mResizeBar[1] = new LLResizeBar(
"resizebar_top",
LLRect( 0, mRect.getHeight(), mRect.getWidth(), mRect.getHeight() - RESIZE_BAR_THICKNESS),
min_width, min_height, LLResizeBar::TOP );
- mResizeBar[1]->setSaveToXML(false);
addChild( mResizeBar[1] );
mResizeBar[2] = new LLResizeBar(
"resizebar_right",
LLRect( mRect.getWidth() - RESIZE_BAR_THICKNESS, mRect.getHeight(), mRect.getWidth(), 0),
min_width, min_height, LLResizeBar::RIGHT );
- mResizeBar[2]->setSaveToXML(false);
addChild( mResizeBar[2] );
mResizeBar[3] = new LLResizeBar(
"resizebar_bottom",
LLRect( 0, RESIZE_BAR_THICKNESS, mRect.getWidth(), 0),
min_width, min_height, LLResizeBar::BOTTOM );
- mResizeBar[3]->setSaveToXML(false);
addChild( mResizeBar[3] );
@@ -346,7 +344,6 @@ void LLFloater::init(const LLString& title,
min_width,
min_height,
LLResizeHandle::RIGHT_BOTTOM);
- mResizeHandle[0]->setSaveToXML(false);
addChild(mResizeHandle[0]);
mResizeHandle[1] = new LLResizeHandle( "resize",
@@ -354,7 +351,6 @@ void LLFloater::init(const LLString& title,
min_width,
min_height,
LLResizeHandle::RIGHT_TOP );
- mResizeHandle[1]->setSaveToXML(false);
addChild(mResizeHandle[1]);
mResizeHandle[2] = new LLResizeHandle( "resize",
@@ -362,7 +358,6 @@ void LLFloater::init(const LLString& title,
min_width,
min_height,
LLResizeHandle::LEFT_BOTTOM );
- mResizeHandle[2]->setSaveToXML(false);
addChild(mResizeHandle[2]);
mResizeHandle[3] = new LLResizeHandle( "resize",
@@ -370,7 +365,6 @@ void LLFloater::init(const LLString& title,
min_width,
min_height,
LLResizeHandle::LEFT_TOP );
- mResizeHandle[3]->setSaveToXML(false);
addChild(mResizeHandle[3]);
}
else
@@ -482,14 +476,14 @@ void LLFloater::setVisible( BOOL visible )
if( !visible )
{
- if( gFocusMgr.childIsTopView( this ) )
+ if( gFocusMgr.childIsTopCtrl( this ) )
{
- gFocusMgr.setTopView(NULL, NULL);
+ gFocusMgr.setTopCtrl(NULL);
}
if( gFocusMgr.childHasMouseCapture( this ) )
{
- gFocusMgr.setMouseCapture(NULL, NULL);
+ gFocusMgr.setMouseCapture(NULL);
}
}
@@ -603,9 +597,9 @@ void LLFloater::close(bool app_quitting)
void LLFloater::releaseFocus()
{
- if( gFocusMgr.childIsTopView( this ) )
+ if( gFocusMgr.childIsTopCtrl( this ) )
{
- gFocusMgr.setTopView(NULL, NULL);
+ gFocusMgr.setTopCtrl(NULL);
}
if( gFocusMgr.childHasKeyboardFocus( this ) )
@@ -615,7 +609,7 @@ void LLFloater::releaseFocus()
if( gFocusMgr.childHasMouseCapture( this ) )
{
- gFocusMgr.setMouseCapture(NULL, NULL);
+ gFocusMgr.setMouseCapture(NULL);
}
}
@@ -1483,28 +1477,24 @@ void LLFloater::setCanResize(BOOL can_resize)
"resizebar_left",
LLRect( 0, mRect.getHeight(), RESIZE_BAR_THICKNESS, 0),
mMinWidth, mMinHeight, LLResizeBar::LEFT );
- mResizeBar[0]->setSaveToXML(false);
addChild( mResizeBar[0] );
mResizeBar[1] = new LLResizeBar(
"resizebar_top",
LLRect( 0, mRect.getHeight(), mRect.getWidth(), mRect.getHeight() - RESIZE_BAR_THICKNESS),
mMinWidth, mMinHeight, LLResizeBar::TOP );
- mResizeBar[1]->setSaveToXML(false);
addChild( mResizeBar[1] );
mResizeBar[2] = new LLResizeBar(
"resizebar_right",
LLRect( mRect.getWidth() - RESIZE_BAR_THICKNESS, mRect.getHeight(), mRect.getWidth(), 0),
mMinWidth, mMinHeight, LLResizeBar::RIGHT );
- mResizeBar[2]->setSaveToXML(false);
addChild( mResizeBar[2] );
mResizeBar[3] = new LLResizeBar(
"resizebar_bottom",
LLRect( 0, RESIZE_BAR_THICKNESS, mRect.getWidth(), 0),
mMinWidth, mMinHeight, LLResizeBar::BOTTOM );
- mResizeBar[3]->setSaveToXML(false);
addChild( mResizeBar[3] );
@@ -1515,7 +1505,6 @@ void LLFloater::setCanResize(BOOL can_resize)
mMinWidth,
mMinHeight,
LLResizeHandle::RIGHT_BOTTOM);
- mResizeHandle[0]->setSaveToXML(false);
addChild(mResizeHandle[0]);
mResizeHandle[1] = new LLResizeHandle( "resize",
@@ -1523,7 +1512,6 @@ void LLFloater::setCanResize(BOOL can_resize)
mMinWidth,
mMinHeight,
LLResizeHandle::RIGHT_TOP );
- mResizeHandle[1]->setSaveToXML(false);
addChild(mResizeHandle[1]);
mResizeHandle[2] = new LLResizeHandle( "resize",
@@ -1531,7 +1519,6 @@ void LLFloater::setCanResize(BOOL can_resize)
mMinWidth,
mMinHeight,
LLResizeHandle::LEFT_BOTTOM );
- mResizeHandle[2]->setSaveToXML(false);
addChild(mResizeHandle[2]);
mResizeHandle[3] = new LLResizeHandle( "resize",
@@ -1539,7 +1526,6 @@ void LLFloater::setCanResize(BOOL can_resize)
mMinWidth,
mMinHeight,
LLResizeHandle::LEFT_TOP );
- mResizeHandle[3]->setSaveToXML(false);
addChild(mResizeHandle[3]);
}
mResizable = can_resize;
@@ -2041,8 +2027,7 @@ void LLFloaterView::focusFrontFloater()
void LLFloaterView::getMinimizePosition(S32 *left, S32 *bottom)
{
S32 col = 0;
- LLRect snap_rect_local = getSnapRect();
- snap_rect_local.translate(-mRect.mLeft, -mRect.mBottom);
+ LLRect snap_rect_local = getLocalSnapRect();
for(S32 row = snap_rect_local.mBottom;
row < snap_rect_local.getHeight() - LLFLOATER_HEADER_SIZE;
row += LLFLOATER_HEADER_SIZE ) //loop rows
@@ -2165,8 +2150,7 @@ void LLFloaterView::adjustToFitScreen(LLFloater* floater, BOOL allow_partial_out
S32 screen_width = getSnapRect().getWidth();
S32 screen_height = getSnapRect().getHeight();
// convert to local coordinate frame
- LLRect snap_rect_local = getSnapRect();
- snap_rect_local.translate(-mRect.mLeft, -mRect.mBottom);
+ LLRect snap_rect_local = getLocalSnapRect();
if( floater->isResizable() )
{
@@ -2207,32 +2191,27 @@ void LLFloaterView::adjustToFitScreen(LLFloater* floater, BOOL allow_partial_out
void LLFloaterView::draw()
{
- if( getVisible() )
- {
- refresh();
-
- // hide focused floater if in cycle mode, so that it can be drawn on top
- LLFloater* focused_floater = getFocusedFloater();
- BOOL floater_visible = FALSE;
- if (mFocusCycleMode && focused_floater)
- {
- floater_visible = focused_floater->getVisible();
- focused_floater->setVisible(FALSE);
- }
+ refresh();
- // And actually do the draw
- LLView::draw();
+ // hide focused floater if in cycle mode, so that it can be drawn on top
+ LLFloater* focused_floater = getFocusedFloater();
- // manually draw focused floater on top when in cycle mode
- if (mFocusCycleMode && focused_floater)
+ if (mFocusCycleMode && focused_floater)
+ {
+ child_list_const_iter_t child_it = getChildList()->begin();
+ for (;child_it != getChildList()->end(); ++child_it)
{
- // draw focused item on top for better feedback
- focused_floater->setVisible(floater_visible);
- if (floater_visible)
+ if ((*child_it) != focused_floater)
{
- drawChild(focused_floater);
+ drawChild(*child_it);
}
}
+
+ drawChild(focused_floater, -TABBED_FLOATER_OFFSET, TABBED_FLOATER_OFFSET);
+ }
+ else
+ {
+ LLView::draw();
}
}
diff --git a/linden/indra/llui/llfloater.h b/linden/indra/llui/llfloater.h
index 25b2697..e752d8b 100644
--- a/linden/indra/llui/llfloater.h
+++ b/linden/indra/llui/llfloater.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llfocusmgr.cpp b/linden/indra/llui/llfocusmgr.cpp
index f02996b..f79164e 100644
--- a/linden/indra/llui/llfocusmgr.cpp
+++ b/linden/indra/llui/llfocusmgr.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -40,18 +41,16 @@ LLFocusMgr::LLFocusMgr()
mLockedView( NULL ),
mKeyboardLockedFocusLostCallback( NULL ),
mMouseCaptor( NULL ),
- mMouseCaptureLostCallback( NULL ),
mKeyboardFocus( NULL ),
mDefaultKeyboardFocus( NULL ),
mKeyboardFocusLostCallback( NULL ),
- mTopView( NULL ),
- mTopViewLostCallback( NULL ),
+ mTopCtrl( NULL ),
mFocusWeight(0.f),
mAppHasFocus(TRUE) // Macs don't seem to notify us that we've gotten focus, so default to true
#ifdef _DEBUG
, mMouseCaptorName("none")
, mKeyboardFocusName("none")
- , mTopViewName("none")
+ , mTopCtrlName("none")
#endif
{
}
@@ -65,7 +64,7 @@ void LLFocusMgr::releaseFocusIfNeeded( LLView* view )
{
if( childHasMouseCapture( view ) )
{
- setMouseCapture( NULL, NULL );
+ setMouseCapture( NULL );
}
if( childHasKeyboardFocus( view ))
@@ -82,9 +81,9 @@ void LLFocusMgr::releaseFocusIfNeeded( LLView* view )
}
}
- if( childIsTopView( view ) )
+ if( childIsTopCtrl( view ) )
{
- setTopView( NULL, NULL );
+ setTopCtrl( NULL );
}
}
@@ -127,13 +126,13 @@ void LLFocusMgr::setKeyboardFocus(LLUICtrl* new_focus, FocusLostCallback on_focu
// If we've got a default keyboard focus, and the caller is
// releasing keyboard focus, move to the default.
- if (mDefaultKeyboardFocus != NULL && new_focus == NULL)
+ if (mDefaultKeyboardFocus != NULL && mKeyboardFocus == NULL)
{
mDefaultKeyboardFocus->setFocus(TRUE);
}
- LLView* focus_subtree = new_focus;
- LLView* viewp = new_focus;
+ LLView* focus_subtree = mKeyboardFocus;
+ LLView* viewp = mKeyboardFocus;
// find root-most focus root
while(viewp)
{
@@ -147,13 +146,13 @@ void LLFocusMgr::setKeyboardFocus(LLUICtrl* new_focus, FocusLostCallback on_focu
if (focus_subtree)
{
- mFocusHistory[focus_subtree->mViewHandle] = new_focus ? new_focus->mViewHandle : LLViewHandle::sDeadHandle;
+ mFocusHistory[focus_subtree->mViewHandle] = mKeyboardFocus ? mKeyboardFocus->mViewHandle : LLViewHandle::sDeadHandle;
}
}
if (lock)
{
- mLockedView = new_focus;
+ mLockedView = mKeyboardFocus;
mKeyboardLockedFocusLostCallback = on_focus_lost;
}
}
@@ -217,16 +216,13 @@ void LLFocusMgr::removeKeyboardFocusWithoutCallback( LLView* focus )
}
-void LLFocusMgr::setMouseCapture( LLMouseHandler* new_captor, void (*on_capture_lost)(LLMouseHandler* old_captor) )
+void LLFocusMgr::setMouseCapture( LLMouseHandler* new_captor )
{
//if (mFocusLocked)
//{
// return;
//}
- void (*old_callback)(LLMouseHandler*) = mMouseCaptureLostCallback;
- mMouseCaptureLostCallback = on_capture_lost;
-
if( new_captor != mMouseCaptor )
{
LLMouseHandler* old_captor = mMouseCaptor;
@@ -249,9 +245,9 @@ void LLFocusMgr::setMouseCapture( LLMouseHandler* new_captor, void (*on_capture_
}
*/
- if( old_callback )
+ if( old_captor )
{
- old_callback( old_captor );
+ old_captor->onMouseCaptureLost();
}
#ifdef _DEBUG
@@ -269,7 +265,6 @@ void LLFocusMgr::removeMouseCaptureWithoutCallback( LLMouseHandler* captor )
if( mMouseCaptor == captor )
{
mMouseCaptor = NULL;
- mMouseCaptureLostCallback = NULL;
#ifdef _DEBUG
mMouseCaptorName = "none";
#endif
@@ -277,9 +272,9 @@ void LLFocusMgr::removeMouseCaptureWithoutCallback( LLMouseHandler* captor )
}
-BOOL LLFocusMgr::childIsTopView( LLView* parent )
+BOOL LLFocusMgr::childIsTopCtrl( LLView* parent )
{
- LLView* top_view = mTopView;
+ LLView* top_view = (LLView*)mTopCtrl;
while( top_view )
{
if( top_view == parent )
@@ -294,36 +289,25 @@ BOOL LLFocusMgr::childIsTopView( LLView* parent )
// set new_top = NULL to release top_view.
-void LLFocusMgr::setTopView( LLView* new_top, void (*on_top_lost)(LLView* old_top) )
+void LLFocusMgr::setTopCtrl( LLUICtrl* new_top )
{
- void (*old_callback)(LLView*) = mTopViewLostCallback;
- mTopViewLostCallback = on_top_lost;
-
- if( new_top != mTopView )
+ if( new_top != mTopCtrl )
{
- LLView* old_top = mTopView;
- mTopView = new_top;
- if( old_callback )
- {
- old_callback( old_top );
- }
-
- mTopView = new_top;
+ mTopCtrl = new_top;
#ifdef _DEBUG
- mTopViewName = new_top ? new_top->getName() : "none";
+ mTopCtrlName = new_top ? new_top->getName() : "none";
#endif
}
}
-void LLFocusMgr::removeTopViewWithoutCallback( LLView* top_view )
+void LLFocusMgr::removeTopCtrlWithoutCallback( LLUICtrl* top_view )
{
- if( mTopView == top_view )
+ if( mTopCtrl == top_view )
{
- mTopView = NULL;
- mTopViewLostCallback = NULL;
+ mTopCtrl = NULL;
#ifdef _DEBUG
- mTopViewName = "none";
+ mTopCtrlName = "none";
#endif
}
}
@@ -362,6 +346,12 @@ void LLFocusMgr::setAppHasFocus(BOOL focus)
{
triggerFocusFlash();
}
+
+ // release focus from "top ctrl"s, which generally hides them
+ if (!focus && mTopCtrl && mTopCtrl->hasFocus())
+ {
+ mTopCtrl->setFocus(FALSE);
+ }
mAppHasFocus = focus;
}
diff --git a/linden/indra/llui/llfocusmgr.h b/linden/indra/llui/llfocusmgr.h
index 5687b99..e189945 100644
--- a/linden/indra/llui/llfocusmgr.h
+++ b/linden/indra/llui/llfocusmgr.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -46,7 +47,7 @@ public:
~LLFocusMgr();
// Mouse Captor
- void setMouseCapture(LLMouseHandler* new_captor,void (*on_capture_lost)(LLMouseHandler* old_captor)); // new_captor = NULL to release the mouse.
+ void setMouseCapture(LLMouseHandler* new_captor); // new_captor = NULL to release the mouse.
LLMouseHandler* getMouseCapture() { return mMouseCaptor; }
void removeMouseCaptureWithoutCallback( LLMouseHandler* captor );
BOOL childHasMouseCapture( LLView* parent );
@@ -73,10 +74,10 @@ public:
// Top View
- void setTopView(LLView* new_top, void (*on_top_lost)(LLView* old_top));
- LLView* getTopView() const { return mTopView; }
- void removeTopViewWithoutCallback( LLView* top_view );
- BOOL childIsTopView( LLView* parent );
+ void setTopCtrl(LLUICtrl* new_top);
+ LLUICtrl* getTopCtrl() const { return mTopCtrl; }
+ void removeTopCtrlWithoutCallback( LLUICtrl* top_view );
+ BOOL childIsTopCtrl( LLView* parent );
// All Three
void releaseFocusIfNeeded( LLView* top_view );
@@ -89,7 +90,6 @@ protected:
// Mouse Captor
LLMouseHandler* mMouseCaptor; // Mouse events are premptively routed to this object
- void (*mMouseCaptureLostCallback)(LLMouseHandler*); // The object to which mouse events are routed is called before another object takes its place
// Keyboard Focus
LLUICtrl* mKeyboardFocus; // Keyboard events are preemptively routed to this object
@@ -97,8 +97,7 @@ protected:
FocusLostCallback mKeyboardFocusLostCallback; // The object to which keyboard events are routed is called before another object takes its place
// Top View
- LLView* mTopView;
- void (*mTopViewLostCallback)(LLView*);
+ LLUICtrl* mTopCtrl;
LLFrameTimer mFocusTimer;
F32 mFocusWeight;
@@ -111,7 +110,7 @@ protected:
#ifdef _DEBUG
LLString mMouseCaptorName;
LLString mKeyboardFocusName;
- LLString mTopViewName;
+ LLString mTopCtrlName;
#endif
};
diff --git a/linden/indra/llui/llhtmlhelp.h b/linden/indra/llui/llhtmlhelp.h
new file mode 100644
index 0000000..4b2a43a
--- /dev/null
+++ b/linden/indra/llui/llhtmlhelp.h
@@ -0,0 +1,40 @@
+/**
+ * @file llhtmlhelp.h
+ * @brief HTML Help floater interface
+ *
+ * Copyright (c) 2006-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ */
+
+#ifndef LL_LLHTMLHELP_H
+#define LL_LLHTMLHELP_H
+
+class LLHtmlHelp
+{
+public:
+ virtual ~LLHtmlHelp() {}
+ virtual void show(std::string start_url = "")=0;
+ virtual BOOL getFloaterOpened()=0;
+};
+
+#endif // LL_LLFLOATERHTMLHELP_H
diff --git a/linden/indra/llui/lliconctrl.cpp b/linden/indra/llui/lliconctrl.cpp
index 7dbd2bf..2d3071b 100644
--- a/linden/indra/llui/lliconctrl.cpp
+++ b/linden/indra/llui/lliconctrl.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/lliconctrl.h b/linden/indra/llui/lliconctrl.h
index e0a2df0..8dbe6db 100644
--- a/linden/indra/llui/lliconctrl.h
+++ b/linden/indra/llui/lliconctrl.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llkeywords.cpp b/linden/indra/llui/llkeywords.cpp
index 05ec652..8997bd6 100644
--- a/linden/indra/llui/llkeywords.cpp
+++ b/linden/indra/llui/llkeywords.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llkeywords.h b/linden/indra/llui/llkeywords.h
index dc2745e..040df53 100644
--- a/linden/indra/llui/llkeywords.h
+++ b/linden/indra/llui/llkeywords.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/lllineeditor.cpp b/linden/indra/llui/lllineeditor.cpp
index 1ca17fe..ec156ba 100644
--- a/linden/indra/llui/lllineeditor.cpp
+++ b/linden/indra/llui/lllineeditor.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -115,7 +116,7 @@ LLLineEditor::LLLineEditor(const LLString& name, const LLRect& rect,
S32 max_length_bytes,
void (*commit_callback)(LLUICtrl* caller, void* user_data ),
void (*keystroke_callback)(LLLineEditor* caller, void* user_data ),
- void (*focus_lost_callback)(LLLineEditor* caller, void* user_data ),
+ void (*focus_lost_callback)(LLUICtrl* caller, void* user_data ),
void* userdata,
LLLinePrevalidateFunc prevalidate_func,
LLViewBorder::EBevel border_bevel,
@@ -132,7 +133,6 @@ LLLineEditor::LLLineEditor(const LLString& name, const LLRect& rect,
mCommitOnFocusLost( TRUE ),
mRevertOnEsc( TRUE ),
mKeystrokeCallback( keystroke_callback ),
- mFocusLostCallback( focus_lost_callback ),
mIsSelecting( FALSE ),
mSelectionStart( 0 ),
mSelectionEnd( 0 ),
@@ -166,6 +166,8 @@ LLLineEditor::LLLineEditor(const LLString& name, const LLRect& rect,
mGLFont = LLFontGL::sSansSerifSmall;
}
+ setFocusLostCallback(focus_lost_callback);
+
mMinHPixels = mBorderThickness + UI_LINEEDITOR_H_PAD + mBorderLeft;
mMaxHPixels = mRect.getWidth() - mMinHPixels - mBorderThickness - mBorderRight;
@@ -186,7 +188,6 @@ LLLineEditor::LLLineEditor(const LLString& name, const LLRect& rect,
LLLineEditor::~LLLineEditor()
{
- mFocusLostCallback = NULL;
mCommitOnFocusLost = FALSE;
gFocusMgr.releaseFocusIfNeeded( this );
@@ -211,11 +212,8 @@ LLString LLLineEditor::getWidgetTag() const
void LLLineEditor::onFocusLost()
{
- if( mFocusLostCallback )
- {
- mFocusLostCallback( this, mCallbackUserData );
- }
-
+ LLUICtrl::onFocusLost();
+
if( mCommitOnFocusLost && mText.getString() != mPrevText)
{
onCommit();
@@ -502,7 +500,7 @@ BOOL LLLineEditor::handleMouseDown(S32 x, S32 y, MASK mask)
startSelection();
}
- gFocusMgr.setMouseCapture( this, &LLLineEditor::onMouseCaptureLost );
+ gFocusMgr.setMouseCapture( this );
}
// delay cursor flashing
@@ -515,14 +513,14 @@ BOOL LLLineEditor::handleMouseDown(S32 x, S32 y, MASK mask)
BOOL LLLineEditor::handleHover(S32 x, S32 y, MASK mask)
{
BOOL handled = FALSE;
- if (gFocusMgr.getMouseCapture() != this && (x < mBorderLeft || x > (mRect.getWidth() - mBorderRight)))
+ if (!hasMouseCapture() && (x < mBorderLeft || x > (mRect.getWidth() - mBorderRight)))
{
return LLUICtrl::handleHover(x, y, mask);
}
if( getVisible() )
{
- if( (gFocusMgr.getMouseCapture() == this) && mIsSelecting )
+ if( (hasMouseCapture()) && mIsSelecting )
{
if (x != mLastSelectionX || y != mLastSelectionY)
{
@@ -580,9 +578,9 @@ BOOL LLLineEditor::handleMouseUp(S32 x, S32 y, MASK mask)
{
BOOL handled = FALSE;
- if( gFocusMgr.getMouseCapture() == this )
+ if( hasMouseCapture() )
{
- gFocusMgr.setMouseCapture( NULL, NULL );
+ gFocusMgr.setMouseCapture( NULL );
handled = TRUE;
}
@@ -1916,11 +1914,9 @@ BOOL LLLineEditor::prevalidateASCII(const LLWString &str)
return rv;
}
-//static
-void LLLineEditor::onMouseCaptureLost( LLMouseHandler* old_captor )
+void LLLineEditor::onMouseCaptureLost()
{
- LLLineEditor* self = (LLLineEditor*) old_captor;
- self->endSelection();
+ endSelection();
}
@@ -1935,11 +1931,6 @@ void LLLineEditor::setKeystrokeCallback(void (*keystroke_callback)(LLLineEditor*
mKeystrokeCallback = keystroke_callback;
}
-void LLLineEditor::setFocusLostCallback(void (*keystroke_callback)(LLLineEditor* caller, void* user_data))
-{
- mFocusLostCallback = keystroke_callback;
-}
-
// virtual
LLXMLNodePtr LLLineEditor::getXML(bool save_children) const
{
diff --git a/linden/indra/llui/lllineeditor.h b/linden/indra/llui/lllineeditor.h
index 427860d..65c75ab 100644
--- a/linden/indra/llui/lllineeditor.h
+++ b/linden/indra/llui/lllineeditor.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -70,7 +71,7 @@ public:
S32 max_length_bytes = 254,
void (*commit_callback)(LLUICtrl* caller, void* user_data) = NULL,
void (*keystroke_callback)(LLLineEditor* caller, void* user_data) = NULL,
- void (*focus_lost_callback)(LLLineEditor* caller, void* user_data) = NULL,
+ void (*focus_lost_callback)(LLUICtrl* caller, void* user_data) = NULL,
void* userdata = NULL,
LLLinePrevalidateFunc prevalidate_func = NULL,
LLViewBorder::EBevel border_bevel = LLViewBorder::BEVEL_IN,
@@ -91,6 +92,7 @@ public:
/*virtual*/ BOOL handleDoubleClick(S32 x,S32 y,MASK mask);
/*virtual*/ BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent );
/*virtual*/ BOOL handleUnicodeCharHere(llwchar uni_char, BOOL called_from_parent);
+ /*virtual*/ void onMouseCaptureLost();
// LLEditMenuHandler overrides
virtual void cut();
@@ -185,7 +187,6 @@ public:
void setSelectAllonFocusReceived(BOOL b);
void setKeystrokeCallback(void (*keystroke_callback)(LLLineEditor* caller, void* user_data));
- void setFocusLostCallback(void (*keystroke_callback)(LLLineEditor* caller, void* user_data));
void setMaxTextLength(S32 max_text_length);
void setBorderWidth(S32 left, S32 right);
@@ -205,8 +206,6 @@ public:
static BOOL postvalidateFloat(const LLString &str);
- static void onMouseCaptureLost( LLMouseHandler* old_captor );
-
protected:
void removeChar();
void addChar(const llwchar c);
@@ -241,7 +240,6 @@ protected:
BOOL mRevertOnEsc;
void (*mKeystrokeCallback)( LLLineEditor* caller, void* userdata );
- void (*mFocusLostCallback)( LLLineEditor* caller, void* userdata );
BOOL mIsSelecting; // Selection for clipboard operations
S32 mSelectionStart;
diff --git a/linden/indra/llui/llmemberlistener.h b/linden/indra/llui/llmemberlistener.h
index 93bcff5..92e7278 100755
--- a/linden/indra/llui/llmemberlistener.h
+++ b/linden/indra/llui/llmemberlistener.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llmenugl.cpp b/linden/indra/llui/llmenugl.cpp
index 1748956..1920aac 100644
--- a/linden/indra/llui/llmenugl.cpp
+++ b/linden/indra/llui/llmenugl.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -3254,6 +3255,7 @@ LLPieMenu::LLPieMenu(const LLString& name, const LLString& label)
mUseInfiniteRadius(FALSE),
mHoverItem(NULL),
mHoverThisFrame(FALSE),
+ mHoveredAnyItem(FALSE),
mOuterRingAlpha(1.f),
mCurRadius(0.f),
mRightMouseDown(FALSE)
@@ -3268,6 +3270,7 @@ LLPieMenu::LLPieMenu(const LLString& name)
mUseInfiniteRadius(FALSE),
mHoverItem(NULL),
mHoverThisFrame(FALSE),
+ mHoveredAnyItem(FALSE),
mOuterRingAlpha(1.f),
mCurRadius(0.f),
mRightMouseDown(FALSE)
@@ -3338,12 +3341,12 @@ BOOL LLPieMenu::handleHover( S32 x, S32 y, MASK mask )
// release mouse capture after short period of visibility if we're using a finite boundary
// so that right click outside of boundary will trigger new pie menu
- if (gFocusMgr.getMouseCapture() == this &&
+ if (hasMouseCapture() &&
!mRightMouseDown &&
mShrinkBorderTimer.getStarted() &&
mShrinkBorderTimer.getElapsedTimeF32() >= PIE_SHRINK_TIME)
{
- gFocusMgr.setMouseCapture(NULL, NULL);
+ gFocusMgr.setMouseCapture(NULL);
mUseInfiniteRadius = FALSE;
}
@@ -3395,6 +3398,7 @@ BOOL LLPieMenu::handleHover( S32 x, S32 y, MASK mask )
break;
}
}
+ mHoveredAnyItem = TRUE;
}
else
{
@@ -3456,7 +3460,7 @@ BOOL LLPieMenu::handleRightMouseDown(S32 x, S32 y, MASK mask)
if (clicked_in_pie)
{
// capture mouse cursor as if on initial menu show
- gFocusMgr.setMouseCapture(this, NULL);
+ gFocusMgr.setMouseCapture(this);
mShrinkBorderTimer.stop();
mUseInfiniteRadius = TRUE;
handled = TRUE;
@@ -3482,11 +3486,22 @@ BOOL LLPieMenu::handleRightMouseUp( S32 x, S32 y, MASK mask )
mShrinkBorderTimer.getElapsedTimeF32() > PIE_SHRINK_TIME)
{
mUseInfiniteRadius = FALSE;
- gFocusMgr.setMouseCapture(NULL, NULL);
+ gFocusMgr.setMouseCapture(NULL);
}
+ S32 delta_x = x /*+ mShiftHoriz*/ - getLocalRect().getCenterX();
+ S32 delta_y = y /*+ mShiftVert*/ - getLocalRect().getCenterY();
+ if (!mHoveredAnyItem && !mFirstMouseDown && (delta_x * delta_x) + (delta_y * delta_y) < PIE_CENTER_SIZE * PIE_CENTER_SIZE)
+ {
+ // user released right mouse button in middle of pie, interpret this as closing the menu
+ sMenuContainer->hideMenus();
+ return TRUE;
+ }
+
+
BOOL result = handleMouseUp( x, y, mask );
mRightMouseDown = FALSE;
+ mHoveredAnyItem = FALSE;
return result;
}
@@ -3893,6 +3908,8 @@ void LLPieMenu::show(S32 x, S32 y, BOOL mouse_down)
mRightMouseDown = mouse_down;
mFirstMouseDown = mouse_down;
mUseInfiniteRadius = TRUE;
+ mHoveredAnyItem = FALSE;
+
if (!mFirstMouseDown)
{
make_ui_sound("UISndPieMenuAppear");
@@ -3902,7 +3919,7 @@ void LLPieMenu::show(S32 x, S32 y, BOOL mouse_down)
// we want all mouse events in case user does quick right click again off of pie menu
// rectangle, to support gestural menu traversal
- gFocusMgr.setMouseCapture(this, NULL);
+ gFocusMgr.setMouseCapture(this);
if (mouse_down)
{
@@ -3929,10 +3946,11 @@ void LLPieMenu::hide(BOOL item_selected)
mFirstMouseDown = FALSE;
mRightMouseDown = FALSE;
mUseInfiniteRadius = FALSE;
+ mHoveredAnyItem = FALSE;
LLView::setVisible(FALSE);
- gFocusMgr.setMouseCapture(NULL, NULL);
+ gFocusMgr.setMouseCapture(NULL);
}
///============================================================================
@@ -4529,6 +4547,7 @@ void LLTearOffMenu::onFocusLost()
{
// remove highlight from parent item and our own menu
mMenu->clearHoverItem();
+ LLFloater::onFocusLost();
}
BOOL LLTearOffMenu::handleUnicodeChar(llwchar uni_char, BOOL called_from_parent)
diff --git a/linden/indra/llui/llmenugl.h b/linden/indra/llui/llmenugl.h
index c4a0043..6051a26 100644
--- a/linden/indra/llui/llmenugl.h
+++ b/linden/indra/llui/llmenugl.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -691,6 +692,7 @@ private:
BOOL mUseInfiniteRadius; // allow picking pie menu items anywhere outside of center circle
LLMenuItemGL* mHoverItem;
BOOL mHoverThisFrame;
+ BOOL mHoveredAnyItem;
LLFrameTimer mShrinkBorderTimer;
F32 mOuterRingAlpha; // for rendering pie menus as both bounded and unbounded
F32 mCurRadius;
diff --git a/linden/indra/llui/llmodaldialog.cpp b/linden/indra/llui/llmodaldialog.cpp
index c875e7c..788dead 100644
--- a/linden/indra/llui/llmodaldialog.cpp
+++ b/linden/indra/llui/llmodaldialog.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -84,8 +85,8 @@ void LLModalDialog::startModal()
}
// This is a modal dialog. It sucks up all mouse and keyboard operations.
- gFocusMgr.setMouseCapture( this, NULL );
- gFocusMgr.setTopView( this, NULL );
+ gFocusMgr.setMouseCapture( this );
+ gFocusMgr.setTopCtrl( this );
setFocus(TRUE);
sModalStack.push_front( this );
@@ -126,10 +127,10 @@ void LLModalDialog::setVisible( BOOL visible )
if( visible )
{
// This is a modal dialog. It sucks up all mouse and keyboard operations.
- gFocusMgr.setMouseCapture( this, NULL );
+ gFocusMgr.setMouseCapture( this );
// The dialog view is a root view
- gFocusMgr.setTopView( this, NULL );
+ gFocusMgr.setTopCtrl( this );
setFocus( TRUE );
}
else
@@ -241,9 +242,9 @@ void LLModalDialog::draw()
if (mModal)
{
// If we've lost focus to a non-child, get it back ASAP.
- if( gFocusMgr.getTopView() != this )
+ if( gFocusMgr.getTopCtrl() != this )
{
- gFocusMgr.setTopView( this, NULL);
+ gFocusMgr.setTopCtrl( this );
}
if( !gFocusMgr.childHasKeyboardFocus( this ) )
@@ -253,7 +254,7 @@ void LLModalDialog::draw()
if( !gFocusMgr.childHasMouseCapture( this ) )
{
- gFocusMgr.setMouseCapture( this, NULL );
+ gFocusMgr.setMouseCapture( this );
}
}
}
@@ -278,7 +279,7 @@ void LLModalDialog::onAppFocusLost()
LLModalDialog* instance = LLModalDialog::sModalStack.front();
if( gFocusMgr.childHasMouseCapture( instance ) )
{
- gFocusMgr.setMouseCapture( NULL, NULL );
+ gFocusMgr.setMouseCapture( NULL );
}
if( gFocusMgr.childHasKeyboardFocus( instance ) )
@@ -296,9 +297,9 @@ void LLModalDialog::onAppFocusGained()
LLModalDialog* instance = LLModalDialog::sModalStack.front();
// This is a modal dialog. It sucks up all mouse and keyboard operations.
- gFocusMgr.setMouseCapture( instance, NULL );
+ gFocusMgr.setMouseCapture( instance );
instance->setFocus(TRUE);
- gFocusMgr.setTopView( instance, NULL );
+ gFocusMgr.setTopCtrl( instance );
instance->centerOnScreen();
}
diff --git a/linden/indra/llui/llmodaldialog.h b/linden/indra/llui/llmodaldialog.h
index 2fc101c..c2564af 100644
--- a/linden/indra/llui/llmodaldialog.h
+++ b/linden/indra/llui/llmodaldialog.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llpanel.cpp b/linden/indra/llui/llpanel.cpp
index 8d3fba6..9e444c1 100644
--- a/linden/indra/llui/llpanel.cpp
+++ b/linden/indra/llui/llpanel.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llpanel.h b/linden/indra/llui/llpanel.h
index d9bd19c..9da942e 100644
--- a/linden/indra/llui/llpanel.h
+++ b/linden/indra/llui/llpanel.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llradiogroup.cpp b/linden/indra/llui/llradiogroup.cpp
index f52faf9..eda54b1 100644
--- a/linden/indra/llui/llradiogroup.cpp
+++ b/linden/indra/llui/llradiogroup.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llradiogroup.h b/linden/indra/llui/llradiogroup.h
index 9324113..0cd5901 100644
--- a/linden/indra/llui/llradiogroup.h
+++ b/linden/indra/llui/llradiogroup.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llresizebar.cpp b/linden/indra/llui/llresizebar.cpp
index 1298b75..79127a8 100644
--- a/linden/indra/llui/llresizebar.cpp
+++ b/linden/indra/llui/llresizebar.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -40,8 +41,8 @@
LLResizeBar::LLResizeBar( const LLString& name, const LLRect& rect, S32 min_width, S32 min_height, Side side )
:
LLView( name, rect, TRUE ),
- mDragStartScreenX( 0 ),
- mDragStartScreenY( 0 ),
+ mDragLastScreenX( 0 ),
+ mDragLastScreenY( 0 ),
mLastMouseScreenX( 0 ),
mLastMouseScreenY( 0 ),
mMinWidth( min_width ),
@@ -74,6 +75,8 @@ LLResizeBar::LLResizeBar( const LLString& name, const LLRect& rect, S32 min_widt
default:
break;
}
+ // this is just a decorator
+ setSaveToXML(FALSE);
}
@@ -83,12 +86,11 @@ BOOL LLResizeBar::handleMouseDown(S32 x, S32 y, MASK mask)
{
// Route future Mouse messages here preemptively. (Release on mouse up.)
// No handler needed for focus lost since this clas has no state that depends on it.
- gFocusMgr.setMouseCapture( this, NULL );
+ gFocusMgr.setMouseCapture( this );
- //localPointToScreen(x, y, &mDragStartScreenX, &mDragStartScreenX);
- localPointToOtherView(x, y, &mDragStartScreenX, &mDragStartScreenY, getParent()->getParent());
- mLastMouseScreenX = mDragStartScreenX;
- mLastMouseScreenY = mDragStartScreenY;
+ localPointToScreen(x, y, &mDragLastScreenX, &mDragLastScreenY);
+ mLastMouseScreenX = mDragLastScreenX;
+ mLastMouseScreenY = mDragLastScreenY;
}
return TRUE;
@@ -99,10 +101,10 @@ BOOL LLResizeBar::handleMouseUp(S32 x, S32 y, MASK mask)
{
BOOL handled = FALSE;
- if( gFocusMgr.getMouseCapture() == this )
+ if( hasMouseCapture() )
{
// Release the mouse
- gFocusMgr.setMouseCapture( NULL, NULL );
+ gFocusMgr.setMouseCapture( NULL );
handled = TRUE;
}
else
@@ -127,74 +129,73 @@ BOOL LLResizeBar::handleHover(S32 x, S32 y, MASK mask)
BOOL handled = FALSE;
// We only handle the click if the click both started and ended within us
- if( gFocusMgr.getMouseCapture() == this )
+ if( hasMouseCapture() )
{
- // *NOTE: this, of course, is fragile
- LLView* floater_view = getParent()->getParent();
- S32 floater_view_x;
- S32 floater_view_y;
- localPointToOtherView(x, y, &floater_view_x, &floater_view_y, floater_view);
+ S32 screen_x;
+ S32 screen_y;
+ localPointToScreen(x, y, &screen_x, &screen_y);
- S32 delta_x = floater_view_x - mDragStartScreenX;
- S32 delta_y = floater_view_y - mDragStartScreenY;
+ S32 delta_x = screen_x - mDragLastScreenX;
+ S32 delta_y = screen_y - mDragLastScreenY;
LLCoordGL mouse_dir;
// use hysteresis on mouse motion to preserve user intent when mouse stops moving
- mouse_dir.mX = (floater_view_x == mLastMouseScreenX) ? mLastMouseDir.mX : floater_view_x - mLastMouseScreenX;
- mouse_dir.mY = (floater_view_y == mLastMouseScreenY) ? mLastMouseDir.mY : floater_view_y - mLastMouseScreenY;
+ mouse_dir.mX = (screen_x == mLastMouseScreenX) ? mLastMouseDir.mX : screen_x - mLastMouseScreenX;
+ mouse_dir.mY = (screen_y == mLastMouseScreenY) ? mLastMouseDir.mY : screen_y - mLastMouseScreenY;
mLastMouseDir = mouse_dir;
- mLastMouseScreenX = floater_view_x;
- mLastMouseScreenY = floater_view_y;
+ mLastMouseScreenX = screen_x;
+ mLastMouseScreenY = screen_y;
// Make sure the mouse in still over the application. We don't want to make the parent
// so big that we can't see the resize handle any more.
- LLRect valid_rect = floater_view->getRect();
- LLView* parentView = getParent();
- if( valid_rect.localPointInRect( floater_view_x, floater_view_y ) && parentView )
+ LLRect valid_rect = getRootView()->getRect();
+ LLView* resizing_view = getParent();
+
+ if( valid_rect.localPointInRect( screen_x, screen_y ) && resizing_view )
{
// Resize the parent
- LLRect parent_rect = parentView->getRect();
- LLRect scaled_rect = parent_rect;
+ LLRect orig_rect = resizing_view->getRect();
+ LLRect scaled_rect = orig_rect;
- S32 new_width = parent_rect.getWidth();
- S32 new_height = parent_rect.getHeight();
+ S32 new_width = orig_rect.getWidth();
+ S32 new_height = orig_rect.getHeight();
switch( mSide )
{
case LEFT:
- new_width = parent_rect.getWidth() - delta_x;
+ new_width = orig_rect.getWidth() - delta_x;
if( new_width < mMinWidth )
{
new_width = mMinWidth;
- delta_x = parent_rect.getWidth() - mMinWidth;
+ delta_x = orig_rect.getWidth() - mMinWidth;
}
scaled_rect.translate(delta_x, 0);
break;
case TOP:
- new_height = parent_rect.getHeight() + delta_y;
+ new_height = orig_rect.getHeight() + delta_y;
if( new_height < mMinHeight )
{
new_height = mMinHeight;
- delta_y = mMinHeight - parent_rect.getHeight();
+ delta_y = mMinHeight - orig_rect.getHeight();
}
break;
case RIGHT:
- new_width = parent_rect.getWidth() + delta_x;
+ new_width = orig_rect.getWidth() + delta_x;
if( new_width < mMinWidth )
{
new_width = mMinWidth;
- delta_x = mMinWidth - parent_rect.getWidth();
+ delta_x = mMinWidth - orig_rect.getWidth();
}
break;
case BOTTOM:
- new_height = parent_rect.getHeight() - delta_y;
+ new_height = orig_rect.getHeight() - delta_y;
if( new_height < mMinHeight )
{
new_height = mMinHeight;
- delta_y = parent_rect.getHeight() - mMinHeight;
+ delta_y = orig_rect.getHeight() - mMinHeight;
}
scaled_rect.translate(0, delta_y);
break;
@@ -202,56 +203,59 @@ BOOL LLResizeBar::handleHover(S32 x, S32 y, MASK mask)
scaled_rect.mTop = scaled_rect.mBottom + new_height;
scaled_rect.mRight = scaled_rect.mLeft + new_width;
- parentView->setRect(scaled_rect);
-
- S32 snap_delta_x = 0;
- S32 snap_delta_y = 0;
+ resizing_view->setRect(scaled_rect);
LLView* snap_view = NULL;
switch( mSide )
{
case LEFT:
- snap_view = parentView->findSnapEdge(snap_delta_x, mouse_dir, SNAP_LEFT, SNAP_PARENT_AND_SIBLINGS, LLUI::sConfigGroup->getS32("SnapMargin"));
- snap_delta_x -= scaled_rect.mLeft;
- scaled_rect.mLeft += snap_delta_x;
+ snap_view = resizing_view->findSnapEdge(scaled_rect.mLeft, mouse_dir, SNAP_LEFT, SNAP_PARENT_AND_SIBLINGS, LLUI::sConfigGroup->getS32("SnapMargin"));
break;
case TOP:
- snap_view = parentView->findSnapEdge(snap_delta_y, mouse_dir, SNAP_TOP, SNAP_PARENT_AND_SIBLINGS, LLUI::sConfigGroup->getS32("SnapMargin"));
- snap_delta_y -= scaled_rect.mTop;
- scaled_rect.mTop += snap_delta_y;
+ snap_view = resizing_view->findSnapEdge(scaled_rect.mTop, mouse_dir, SNAP_TOP, SNAP_PARENT_AND_SIBLINGS, LLUI::sConfigGroup->getS32("SnapMargin"));
break;
case RIGHT:
- snap_view = parentView->findSnapEdge(snap_delta_x, mouse_dir, SNAP_RIGHT, SNAP_PARENT_AND_SIBLINGS, LLUI::sConfigGroup->getS32("SnapMargin"));
- snap_delta_x -= scaled_rect.mRight;
- scaled_rect.mRight += snap_delta_x;
+ snap_view = resizing_view->findSnapEdge(scaled_rect.mRight, mouse_dir, SNAP_RIGHT, SNAP_PARENT_AND_SIBLINGS, LLUI::sConfigGroup->getS32("SnapMargin"));
break;
case BOTTOM:
- snap_view = parentView->findSnapEdge(snap_delta_y, mouse_dir, SNAP_BOTTOM, SNAP_PARENT_AND_SIBLINGS, LLUI::sConfigGroup->getS32("SnapMargin"));
- snap_delta_y -= scaled_rect.mBottom;
- scaled_rect.mBottom += snap_delta_y;
+ snap_view = resizing_view->findSnapEdge(scaled_rect.mBottom, mouse_dir, SNAP_BOTTOM, SNAP_PARENT_AND_SIBLINGS, LLUI::sConfigGroup->getS32("SnapMargin"));
break;
}
- parentView->snappedTo(snap_view);
+ // register "snap" behavior with snapped view
+ resizing_view->snappedTo(snap_view);
- parentView->setRect(parent_rect);
+ // restore original rectangle so the appropriate changes are detected
+ resizing_view->setRect(orig_rect);
+ // change view shape as user operation
+ resizing_view->userSetShape(scaled_rect);
- parentView->reshape(scaled_rect.getWidth(), scaled_rect.getHeight(), FALSE);
- parentView->translate(scaled_rect.mLeft - parentView->getRect().mLeft, scaled_rect.mBottom - parentView->getRect().mBottom);
-
- floater_view_x = mDragStartScreenX + delta_x;
- floater_view_y = mDragStartScreenY + delta_y;
- mDragStartScreenX = floater_view_x + snap_delta_x;
- mDragStartScreenY = floater_view_y + snap_delta_y;
+ // update last valid mouse cursor position based on resized view's actual size
+ LLRect new_rect = resizing_view->getRect();
+ switch(mSide)
+ {
+ case LEFT:
+ mDragLastScreenX += new_rect.mLeft - orig_rect.mLeft;
+ break;
+ case RIGHT:
+ mDragLastScreenX += new_rect.mRight - orig_rect.mRight;
+ break;
+ case TOP:
+ mDragLastScreenY += new_rect.mTop - orig_rect.mTop;
+ break;
+ case BOTTOM:
+ mDragLastScreenY += new_rect.mBottom- orig_rect.mBottom;
+ break;
+ default:
+ break;
+ }
}
- lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (active)" << llendl;
handled = TRUE;
}
else
{
- lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (inactive)" << llendl;
handled = TRUE;
}
diff --git a/linden/indra/llui/llresizebar.h b/linden/indra/llui/llresizebar.h
index 5862ffc..e1fc0f9 100644
--- a/linden/indra/llui/llresizebar.h
+++ b/linden/indra/llui/llresizebar.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -49,8 +50,8 @@ public:
void setResizeLimits( S32 min_width, S32 min_height ) { mMinWidth = min_width; mMinHeight = min_height; }
protected:
- S32 mDragStartScreenX;
- S32 mDragStartScreenY;
+ S32 mDragLastScreenX;
+ S32 mDragLastScreenY;
S32 mLastMouseScreenX;
S32 mLastMouseScreenY;
LLCoordGL mLastMouseDir;
diff --git a/linden/indra/llui/llresizehandle.cpp b/linden/indra/llui/llresizehandle.cpp
index fc15bcc..d9b8fac 100644
--- a/linden/indra/llui/llresizehandle.cpp
+++ b/linden/indra/llui/llresizehandle.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -42,8 +43,8 @@ const S32 RESIZE_BORDER_WIDTH = 3;
LLResizeHandle::LLResizeHandle( const LLString& name, const LLRect& rect, S32 min_width, S32 min_height, ECorner corner )
:
LLView( name, rect, TRUE ),
- mDragStartScreenX( 0 ),
- mDragStartScreenY( 0 ),
+ mDragLastScreenX( 0 ),
+ mDragLastScreenY( 0 ),
mLastMouseScreenX( 0 ),
mLastMouseScreenY( 0 ),
mImage( NULL ),
@@ -66,6 +67,9 @@ LLResizeHandle::LLResizeHandle( const LLString& name, const LLRect& rect, S32 mi
case RIGHT_TOP: setFollows( FOLLOWS_RIGHT | FOLLOWS_TOP ); break;
case RIGHT_BOTTOM: setFollows( FOLLOWS_RIGHT | FOLLOWS_BOTTOM ); break;
}
+
+ // decorator object, don't serialize
+ setSaveToXML(FALSE);
}
EWidgetType LLResizeHandle::getWidgetType() const
@@ -88,11 +92,11 @@ BOOL LLResizeHandle::handleMouseDown(S32 x, S32 y, MASK mask)
{
// Route future Mouse messages here preemptively. (Release on mouse up.)
// No handler needed for focus lost since this clas has no state that depends on it.
- gFocusMgr.setMouseCapture( this, NULL );
+ gFocusMgr.setMouseCapture( this );
- localPointToScreen(x, y, &mDragStartScreenX, &mDragStartScreenY);
- mLastMouseScreenX = mDragStartScreenX;
- mLastMouseScreenY = mDragStartScreenY;
+ localPointToScreen(x, y, &mDragLastScreenX, &mDragLastScreenY);
+ mLastMouseScreenX = mDragLastScreenX;
+ mLastMouseScreenY = mDragLastScreenY;
}
}
@@ -104,10 +108,10 @@ BOOL LLResizeHandle::handleMouseUp(S32 x, S32 y, MASK mask)
{
BOOL handled = FALSE;
- if( gFocusMgr.getMouseCapture() == this )
+ if( hasMouseCapture() )
{
// Release the mouse
- gFocusMgr.setMouseCapture( NULL, NULL );
+ gFocusMgr.setMouseCapture( NULL );
handled = TRUE;
}
else
@@ -125,7 +129,7 @@ BOOL LLResizeHandle::handleHover(S32 x, S32 y, MASK mask)
BOOL handled = FALSE;
// We only handle the click if the click both started and ended within us
- if( gFocusMgr.getMouseCapture() == this )
+ if( hasMouseCapture() )
{
// Make sure the mouse in still over the application. We don't want to make the parent
// so big that we can't see the resize handle any more.
@@ -133,18 +137,18 @@ BOOL LLResizeHandle::handleHover(S32 x, S32 y, MASK mask)
S32 screen_x;
S32 screen_y;
localPointToScreen(x, y, &screen_x, &screen_y);
- const LLRect& valid_rect = gFloaterView->getRect(); // Assumes that the parent is a floater.
+ const LLRect valid_rect = getRootView()->getRect();
screen_x = llclamp( screen_x, valid_rect.mLeft, valid_rect.mRight );
screen_y = llclamp( screen_y, valid_rect.mBottom, valid_rect.mTop );
- LLView* parentView = getParent();
- if( parentView )
+ LLView* resizing_view = getParent();
+ if( resizing_view )
{
// Resize the parent
- LLRect parent_rect = parentView->getRect();
- LLRect scaled_rect = parent_rect;
- S32 delta_x = screen_x - mDragStartScreenX;
- S32 delta_y = screen_y - mDragStartScreenY;
+ LLRect orig_rect = resizing_view->getRect();
+ LLRect scaled_rect = orig_rect;
+ S32 delta_x = screen_x - mDragLastScreenX;
+ S32 delta_y = screen_y - mDragLastScreenY;
LLCoordGL mouse_dir;
// use hysteresis on mouse motion to preserve user intent when mouse stops moving
mouse_dir.mX = (screen_x == mLastMouseScreenX) ? mLastMouseDir.mX : screen_x - mLastMouseScreenX;
@@ -175,18 +179,18 @@ BOOL LLResizeHandle::handleHover(S32 x, S32 y, MASK mask)
break;
}
- S32 new_width = parent_rect.getWidth() + x_multiple * delta_x;
+ S32 new_width = orig_rect.getWidth() + x_multiple * delta_x;
if( new_width < mMinWidth )
{
new_width = mMinWidth;
- delta_x = x_multiple * (mMinWidth - parent_rect.getWidth());
+ delta_x = x_multiple * (mMinWidth - orig_rect.getWidth());
}
- S32 new_height = parent_rect.getHeight() + y_multiple * delta_y;
+ S32 new_height = orig_rect.getHeight() + y_multiple * delta_y;
if( new_height < mMinHeight )
{
new_height = mMinHeight;
- delta_y = y_multiple * (mMinHeight - parent_rect.getHeight());
+ delta_y = y_multiple * (mMinHeight - orig_rect.getHeight());
}
switch( mCorner )
@@ -207,10 +211,7 @@ BOOL LLResizeHandle::handleHover(S32 x, S32 y, MASK mask)
// temporarily set new parent rect
scaled_rect.mRight = scaled_rect.mLeft + new_width;
scaled_rect.mTop = scaled_rect.mBottom + new_height;
- parentView->setRect(scaled_rect);
-
- S32 snap_delta_x = 0;
- S32 snap_delta_y = 0;
+ resizing_view->setRect(scaled_rect);
LLView* snap_view = NULL;
LLView* test_view = NULL;
@@ -219,77 +220,78 @@ BOOL LLResizeHandle::handleHover(S32 x, S32 y, MASK mask)
switch(mCorner)
{
case LEFT_TOP:
- snap_view = parentView->findSnapEdge(snap_delta_x, mouse_dir, SNAP_LEFT, SNAP_PARENT_AND_SIBLINGS, LLUI::sConfigGroup->getS32("SnapMargin"));
- snap_delta_x -= scaled_rect.mLeft;
- test_view = parentView->findSnapEdge(snap_delta_y, mouse_dir, SNAP_TOP, SNAP_PARENT_AND_SIBLINGS, LLUI::sConfigGroup->getS32("SnapMargin"));
- snap_delta_y -= scaled_rect.mTop;
+ snap_view = resizing_view->findSnapEdge(scaled_rect.mLeft, mouse_dir, SNAP_LEFT, SNAP_PARENT_AND_SIBLINGS, LLUI::sConfigGroup->getS32("SnapMargin"));
+ test_view = resizing_view->findSnapEdge(scaled_rect.mTop, mouse_dir, SNAP_TOP, SNAP_PARENT_AND_SIBLINGS, LLUI::sConfigGroup->getS32("SnapMargin"));
if (!snap_view)
{
snap_view = test_view;
}
- scaled_rect.mLeft += snap_delta_x;
- scaled_rect.mTop += snap_delta_y;
break;
case LEFT_BOTTOM:
- snap_view = parentView->findSnapEdge(snap_delta_x, mouse_dir, SNAP_LEFT, SNAP_PARENT_AND_SIBLINGS, LLUI::sConfigGroup->getS32("SnapMargin"));
- snap_delta_x -= scaled_rect.mLeft;
- test_view = parentView->findSnapEdge(snap_delta_y, mouse_dir, SNAP_BOTTOM, SNAP_PARENT_AND_SIBLINGS, LLUI::sConfigGroup->getS32("SnapMargin"));
- snap_delta_y -= scaled_rect.mBottom;
+ snap_view = resizing_view->findSnapEdge(scaled_rect.mLeft, mouse_dir, SNAP_LEFT, SNAP_PARENT_AND_SIBLINGS, LLUI::sConfigGroup->getS32("SnapMargin"));
+ test_view = resizing_view->findSnapEdge(scaled_rect.mBottom, mouse_dir, SNAP_BOTTOM, SNAP_PARENT_AND_SIBLINGS, LLUI::sConfigGroup->getS32("SnapMargin"));
if (!snap_view)
{
snap_view = test_view;
}
- scaled_rect.mLeft += snap_delta_x;
- scaled_rect.mBottom += snap_delta_y;
break;
case RIGHT_TOP:
- snap_view = parentView->findSnapEdge(snap_delta_x, mouse_dir, SNAP_RIGHT, SNAP_PARENT_AND_SIBLINGS, LLUI::sConfigGroup->getS32("SnapMargin"));
- snap_delta_x -= scaled_rect.mRight;
- test_view = parentView->findSnapEdge(snap_delta_y, mouse_dir, SNAP_TOP, SNAP_PARENT_AND_SIBLINGS, LLUI::sConfigGroup->getS32("SnapMargin"));
- snap_delta_y -= scaled_rect.mTop;
+ snap_view = resizing_view->findSnapEdge(scaled_rect.mRight, mouse_dir, SNAP_RIGHT, SNAP_PARENT_AND_SIBLINGS, LLUI::sConfigGroup->getS32("SnapMargin"));
+ test_view = resizing_view->findSnapEdge(scaled_rect.mTop, mouse_dir, SNAP_TOP, SNAP_PARENT_AND_SIBLINGS, LLUI::sConfigGroup->getS32("SnapMargin"));
if (!snap_view)
{
snap_view = test_view;
}
- scaled_rect.mRight += snap_delta_x;
- scaled_rect.mTop += snap_delta_y;
break;
case RIGHT_BOTTOM:
- snap_view = parentView->findSnapEdge(snap_delta_x, mouse_dir, SNAP_RIGHT, SNAP_PARENT_AND_SIBLINGS, LLUI::sConfigGroup->getS32("SnapMargin"));
- snap_delta_x -= scaled_rect.mRight;
- test_view = parentView->findSnapEdge(snap_delta_y, mouse_dir, SNAP_BOTTOM, SNAP_PARENT_AND_SIBLINGS, LLUI::sConfigGroup->getS32("SnapMargin"));
- snap_delta_y -= scaled_rect.mBottom;
+ snap_view = resizing_view->findSnapEdge(scaled_rect.mRight, mouse_dir, SNAP_RIGHT, SNAP_PARENT_AND_SIBLINGS, LLUI::sConfigGroup->getS32("SnapMargin"));
+ test_view = resizing_view->findSnapEdge(scaled_rect.mBottom, mouse_dir, SNAP_BOTTOM, SNAP_PARENT_AND_SIBLINGS, LLUI::sConfigGroup->getS32("SnapMargin"));
if (!snap_view)
{
snap_view = test_view;
}
- scaled_rect.mRight += snap_delta_x;
- scaled_rect.mBottom += snap_delta_y;
break;
}
- parentView->snappedTo(snap_view);
+ // register "snap" behavior with snapped view
+ resizing_view->snappedTo(snap_view);
// reset parent rect
- parentView->setRect(parent_rect);
+ resizing_view->setRect(orig_rect);
// translate and scale to new shape
- parentView->reshape(scaled_rect.getWidth(), scaled_rect.getHeight(), FALSE);
- parentView->translate(scaled_rect.mLeft - parentView->getRect().mLeft, scaled_rect.mBottom - parentView->getRect().mBottom);
+ resizing_view->userSetShape(scaled_rect);
- screen_x = mDragStartScreenX + delta_x + snap_delta_x;
- screen_y = mDragStartScreenY + delta_y + snap_delta_y;
- mDragStartScreenX = screen_x;
- mDragStartScreenY = screen_y;
+ // update last valid mouse cursor position based on resized view's actual size
+ LLRect new_rect = resizing_view->getRect();
+ switch(mCorner)
+ {
+ case LEFT_TOP:
+ mDragLastScreenX += new_rect.mLeft - orig_rect.mLeft;
+ mDragLastScreenY += new_rect.mTop - orig_rect.mTop;
+ break;
+ case LEFT_BOTTOM:
+ mDragLastScreenX += new_rect.mLeft - orig_rect.mLeft;
+ mDragLastScreenY += new_rect.mBottom- orig_rect.mBottom;
+ break;
+ case RIGHT_TOP:
+ mDragLastScreenX += new_rect.mRight - orig_rect.mRight;
+ mDragLastScreenY += new_rect.mTop - orig_rect.mTop;
+ break;
+ case RIGHT_BOTTOM:
+ mDragLastScreenX += new_rect.mRight - orig_rect.mRight;
+ mDragLastScreenY += new_rect.mBottom- orig_rect.mBottom;
+ break;
+ default:
+ break;
+ }
}
- lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (active) " << llendl;
handled = TRUE;
}
else
if( getVisible() && pointInHandle( x, y ) )
{
- lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (inactive) " << llendl;
handled = TRUE;
}
diff --git a/linden/indra/llui/llresizehandle.h b/linden/indra/llui/llresizehandle.h
index dcde8e6..b091f1f 100644
--- a/linden/indra/llui/llresizehandle.h
+++ b/linden/indra/llui/llresizehandle.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -56,8 +57,8 @@ protected:
BOOL pointInHandle( S32 x, S32 y );
protected:
- S32 mDragStartScreenX;
- S32 mDragStartScreenY;
+ S32 mDragLastScreenX;
+ S32 mDragLastScreenY;
S32 mLastMouseScreenX;
S32 mLastMouseScreenY;
LLCoordGL mLastMouseDir;
diff --git a/linden/indra/llui/llresmgr.cpp b/linden/indra/llui/llresmgr.cpp
index a73b487..2350093 100644
--- a/linden/indra/llui/llresmgr.cpp
+++ b/linden/indra/llui/llresmgr.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -440,8 +441,8 @@ const LLString LLLocale::SYSTEM_LOCALE("English_United States.1252");
const LLString LLLocale::USER_LOCALE("en_US.iso8859-1");// = LLString::null;
const LLString LLLocale::SYSTEM_LOCALE("en_US.iso8859-1");
#else // LL_LINUX likes this
-const LLString LLLocale::USER_LOCALE("en_US.utf8");// = LLString::null;
-const LLString LLLocale::SYSTEM_LOCALE("en_US.utf8");
+const LLString LLLocale::USER_LOCALE("en_US.utf8");
+const LLString LLLocale::SYSTEM_LOCALE("C");
#endif
diff --git a/linden/indra/llui/llresmgr.h b/linden/indra/llui/llresmgr.h
index 0bb4e0d..836d352 100644
--- a/linden/indra/llui/llresmgr.h
+++ b/linden/indra/llui/llresmgr.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llrootview.cpp b/linden/indra/llui/llrootview.cpp
index 49e512c..d78244d 100644
--- a/linden/indra/llui/llrootview.cpp
+++ b/linden/indra/llui/llrootview.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llrootview.h b/linden/indra/llui/llrootview.h
index 84a989b..ce98006 100644
--- a/linden/indra/llui/llrootview.h
+++ b/linden/indra/llui/llrootview.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llscrollbar.cpp b/linden/indra/llui/llscrollbar.cpp
index 578fdb1..4edf81e 100644
--- a/linden/indra/llui/llscrollbar.cpp
+++ b/linden/indra/llui/llscrollbar.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -233,7 +234,7 @@ BOOL LLScrollbar::handleMouseDown(S32 x, S32 y, MASK mask)
{
// Start dragging the thumb
// No handler needed for focus lost since this clas has no state that depends on it.
- gFocusMgr.setMouseCapture( this, NULL );
+ gFocusMgr.setMouseCapture( this );
mDragStartX = x;
mDragStartY = y;
mOrigRect.mTop = mThumbRect.mTop;
@@ -274,7 +275,7 @@ BOOL LLScrollbar::handleHover(S32 x, S32 y, MASK mask)
// because they'll capture the mouse whenever they need hover events.
BOOL handled = FALSE;
- if( gFocusMgr.getMouseCapture() == this )
+ if( hasMouseCapture() )
{
S32 height = mRect.getHeight();
S32 width = mRect.getWidth();
@@ -427,9 +428,9 @@ BOOL LLScrollbar::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
BOOL LLScrollbar::handleMouseUp(S32 x, S32 y, MASK mask)
{
BOOL handled = FALSE;
- if( gFocusMgr.getMouseCapture() == this )
+ if( hasMouseCapture() )
{
- gFocusMgr.setMouseCapture( NULL, NULL );
+ gFocusMgr.setMouseCapture( NULL );
handled = TRUE;
}
else
@@ -461,7 +462,7 @@ void LLScrollbar::draw()
screenPointToLocal(cursor_pos_gl.mX, cursor_pos_gl.mY, &local_mouse_x, &local_mouse_y);
BOOL other_captor = gFocusMgr.getMouseCapture() && gFocusMgr.getMouseCapture() != this;
- BOOL hovered = mEnabled && !other_captor && (gFocusMgr.getMouseCapture() == this || mThumbRect.pointInRect(local_mouse_x, local_mouse_y));
+ BOOL hovered = mEnabled && !other_captor && (hasMouseCapture() || mThumbRect.pointInRect(local_mouse_x, local_mouse_y));
if (hovered)
{
mCurGlowStrength = lerp(mCurGlowStrength, mHoverGlowStrength, LLCriticalDamp::getInterpolant(0.05f));
diff --git a/linden/indra/llui/llscrollbar.h b/linden/indra/llui/llscrollbar.h
index b7689ea..f6ac17d 100644
--- a/linden/indra/llui/llscrollbar.h
+++ b/linden/indra/llui/llscrollbar.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llscrollcontainer.cpp b/linden/indra/llui/llscrollcontainer.cpp
index 73be607..cf43ee1 100644
--- a/linden/indra/llui/llscrollcontainer.cpp
+++ b/linden/indra/llui/llscrollcontainer.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -456,7 +457,7 @@ void LLScrollableContainerView::draw()
// auto-focus when scrollbar active
// this allows us to capture user intent (i.e. stop automatically scrolling the view/etc)
if (!gFocusMgr.childHasKeyboardFocus(this) &&
- (gFocusMgr.getMouseCapture() == mScrollbar[VERTICAL] || gFocusMgr.getMouseCapture() == mScrollbar[HORIZONTAL]))
+ (mScrollbar[VERTICAL]->hasMouseCapture() || mScrollbar[HORIZONTAL]->hasMouseCapture()))
{
focusFirstItem();
}
diff --git a/linden/indra/llui/llscrollcontainer.h b/linden/indra/llui/llscrollcontainer.h
index f6bacda..3b3bbef 100644
--- a/linden/indra/llui/llscrollcontainer.h
+++ b/linden/indra/llui/llscrollcontainer.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llscrollingpanellist.cpp b/linden/indra/llui/llscrollingpanellist.cpp
index 209785e..eb806e4 100644
--- a/linden/indra/llui/llscrollingpanellist.cpp
+++ b/linden/indra/llui/llscrollingpanellist.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llscrollingpanellist.h b/linden/indra/llui/llscrollingpanellist.h
index 94e34e6..29e3d41 100644
--- a/linden/indra/llui/llscrollingpanellist.h
+++ b/linden/indra/llui/llscrollingpanellist.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llscrolllistctrl.cpp b/linden/indra/llui/llscrolllistctrl.cpp
index 4d5c49f..22987dc 100644
--- a/linden/indra/llui/llscrolllistctrl.cpp
+++ b/linden/indra/llui/llscrolllistctrl.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -48,8 +49,11 @@
#include "llwindow.h"
#include "llcontrol.h"
#include "llkeyboard.h"
+#include "llresizebar.h"
const S32 LIST_BORDER_PAD = 2; // white space inside the border and to the left of the scrollbar
+const S32 MIN_COLUMN_WIDTH = 20;
+const S32 LIST_SNAP_PADDING = 5;
// local structures & classes.
struct SortScrollListItem
@@ -152,6 +156,19 @@ BOOL LLScrollListCheck::handleClick()
}
//
+// LLScrollListSeparator
+//
+LLScrollListSeparator::LLScrollListSeparator(S32 width) : mWidth(width)
+{
+}
+
+void LLScrollListSeparator::drawToWidth(S32 width, const LLColor4& color, const LLColor4& highlight_color) const
+{
+ //*FIXME: use dynamic item heights and make separators narrow, and inactive
+ gl_line_2d(5, 8, llmax(5, width - 5), 8, color);
+}
+
+//
// LLScrollListText
//
U32 LLScrollListText::sCount = 0;
@@ -273,7 +290,7 @@ LLScrollListItem::~LLScrollListItem()
std::for_each(mColumns.begin(), mColumns.end(), DeletePointer());
}
-BOOL LLScrollListItem::handleMouseDown(S32 x, S32 y, MASK mask)
+BOOL LLScrollListItem::handleClick(S32 x, S32 y, MASK mask)
{
BOOL handled = FALSE;
@@ -374,14 +391,13 @@ LLScrollListCtrl::LLScrollListCtrl(const LLString& name, const LLRect& rect,
mPageLines(0),
mHeadingHeight(20),
mMaxSelectable(0),
- mHeadingFont(NULL),
mAllowMultipleSelection( allow_multiple_selection ),
mAllowKeyboardMovement(TRUE),
mCommitOnKeyboardMovement(TRUE),
mCommitOnSelectionChange(FALSE),
mSelectionChanged(FALSE),
mCanSelect(TRUE),
- mDisplayColumnButtons(FALSE),
+ mDisplayColumnHeaders(FALSE),
mCollapseEmptyColumns(FALSE),
mIsPopup(FALSE),
mMaxItemCount(INT_MAX),
@@ -396,21 +412,21 @@ LLScrollListCtrl::LLScrollListCtrl(const LLString& name, const LLRect& rect,
mFgUnselectedColor( LLUI::sColorsGroup->getColor("ScrollUnselectedColor") ),
mFgDisabledColor( LLUI::sColorsGroup->getColor("ScrollDisabledColor") ),
mHighlightedColor( LLUI::sColorsGroup->getColor("ScrollHighlightedColor") ),
+ mHighlightedItem(-1),
mBorderThickness( 2 ),
mOnDoubleClickCallback( NULL ),
mOnMaximumSelectCallback( NULL ),
mOnSortChangedCallback( NULL ),
- mHighlightedItem(-1),
+ mDrewSelected(FALSE),
mBorder(NULL),
- mDefaultColumn("SIMPLE"),
mSearchColumn(0),
+ mDefaultColumn("SIMPLE"),
mNumDynamicWidthColumns(0),
mTotalStaticColumnWidth(0),
- mSortColumn(0),
- mSortAscending(TRUE),
-
- mDrewSelected(FALSE)
+ mSortColumn(-1),
+ mSorted(TRUE),
+ mSortAscending(TRUE)
{
mItemListRect.setOriginAndSize(
mBorderThickness + LIST_BORDER_PAD,
@@ -497,6 +513,7 @@ void LLScrollListCtrl::clearRows()
mScrollLines = 0;
mLastSelected = NULL;
+ updateMaxContentWidth(NULL);
}
@@ -546,7 +563,6 @@ S32 LLScrollListCtrl::getFirstSelectedIndex()
return -1;
}
-
LLScrollListItem* LLScrollListCtrl::getFirstData() const
{
if (mItemList.size() == 0)
@@ -556,6 +572,15 @@ LLScrollListItem* LLScrollListCtrl::getFirstData() const
return mItemList[0];
}
+LLScrollListItem* LLScrollListCtrl::getLastData() const
+{
+ if (mItemList.size() == 0)
+ {
+ return NULL;
+ }
+ return mItemList[mItemList.size() - 1];
+}
+
std::vector LLScrollListCtrl::getAllData() const
{
std::vector ret;
@@ -573,7 +598,7 @@ void LLScrollListCtrl::reshape( S32 width, S32 height, BOOL called_from_parent )
{
LLUICtrl::reshape( width, height, called_from_parent );
- S32 heading_size = (mDisplayColumnButtons ? mHeadingHeight : 0);
+ S32 heading_size = (mDisplayColumnHeaders ? mHeadingHeight : 0);
mItemListRect.setOriginAndSize(
mBorderThickness + LIST_BORDER_PAD,
@@ -586,10 +611,8 @@ void LLScrollListCtrl::reshape( S32 width, S32 height, BOOL called_from_parent )
mScrollbar->setPageSize( mPageLines );
updateColumns();
- updateColumnButtons();
}
-
// Attempt to size the control to show all items.
// Do not make larger than width or height.
void LLScrollListCtrl::arrange(S32 max_width, S32 max_height)
@@ -621,35 +644,83 @@ BOOL LLScrollListCtrl::addItem( LLScrollListItem* item, EAddPosition pos )
{
case ADD_TOP:
mItemList.push_front(item);
+ setSorted(FALSE);
break;
case ADD_SORTED:
- mSortColumn = 0;
- mSortAscending = TRUE;
+ if (mSortColumn == -1)
+ {
+ mSortColumn = 0;
+ mSortAscending = TRUE;
+ }
mItemList.push_back(item);
std::sort(mItemList.begin(), mItemList.end(), SortScrollListItem(mSortColumn, mSortAscending));
break;
case ADD_BOTTOM:
mItemList.push_back(item);
+ setSorted(FALSE);
break;
default:
llassert(0);
mItemList.push_back(item);
+ setSorted(FALSE);
break;
}
updateLineHeight();
mPageLines = mLineHeight ? mItemListRect.getHeight() / mLineHeight : 0;
- mScrollbar->setVisible(mPageLines < getItemCount());
+ BOOL scrollbar_visible = mPageLines < getItemCount();
+
+ if (scrollbar_visible != mScrollbar->getVisible())
+ {
+ mScrollbar->setVisible(mPageLines < getItemCount());
+ updateColumns();
+ }
mScrollbar->setPageSize( mPageLines );
mScrollbar->setDocSize( getItemCount() );
+
+ updateMaxContentWidth(item);
}
+
return not_too_big;
}
+void LLScrollListCtrl::updateMaxContentWidth(LLScrollListItem* added_item)
+{
+ const S32 HEADING_TEXT_PADDING = 30;
+ const S32 COLUMN_TEXT_PADDING = 20;
+
+ std::map::iterator column_itor;
+ for (column_itor = mColumns.begin(); column_itor != mColumns.end(); ++column_itor)
+ {
+ LLScrollListColumn* column = &column_itor->second;
+
+ if (!added_item)
+ {
+ // update on all items
+ column->mMaxContentWidth = column->mHeader ? LLFontGL::sSansSerifSmall->getWidth(column->mLabel) + mColumnPadding + HEADING_TEXT_PADDING : 0;
+ item_list::iterator iter;
+ for (iter = mItemList.begin(); iter != mItemList.end(); iter++)
+ {
+ LLScrollListCell* cellp = (*iter)->getColumn(column->mIndex);
+ if (!cellp) continue;
+
+ column->mMaxContentWidth = llmax(LLFontGL::sSansSerifSmall->getWidth(cellp->getText()) + mColumnPadding + COLUMN_TEXT_PADDING, column->mMaxContentWidth);
+ }
+ }
+ else
+ {
+ LLScrollListCell* cellp = added_item->getColumn(column->mIndex);
+ if (!cellp) continue;
+
+ column->mMaxContentWidth = llmax(LLFontGL::sSansSerifSmall->getWidth(cellp->getText()) + mColumnPadding + COLUMN_TEXT_PADDING, column->mMaxContentWidth);
+ }
+ }
+}
+
// Line height is the max height of all the cells in all the items.
void LLScrollListCtrl::updateLineHeight()
@@ -678,60 +749,82 @@ void LLScrollListCtrl::updateColumns()
for (column_itor = mColumns.begin(); column_itor != mColumns.end(); ++column_itor)
{
LLScrollListColumn *column = &column_itor->second;
+ S32 new_width = column->mWidth;
if (column->mRelWidth >= 0)
{
- column->mWidth = (S32)llround(column->mRelWidth*mItemListRect.getWidth());
+ new_width = (S32)llround(column->mRelWidth*mItemListRect.getWidth());
}
else if (column->mDynamicWidth)
{
- column->mWidth = (mItemListRect.getWidth() - mTotalStaticColumnWidth) / mNumDynamicWidthColumns;
-
+ new_width = (mItemListRect.getWidth() - mTotalStaticColumnWidth) / mNumDynamicWidthColumns;
+ }
+
+ if (new_width != column->mWidth)
+ {
+ column->mWidth = new_width;
}
mColumnsIndexed[column_itor->second.mIndex] = column;
}
-}
-void LLScrollListCtrl::updateColumnButtons()
-{
- std::map::iterator column_itor;
- for (column_itor = mColumns.begin(); column_itor != mColumns.end(); ++column_itor)
+ item_list::iterator iter;
+ for (iter = mItemList.begin(); iter != mItemList.end(); iter++)
{
- LLScrollListColumn* column = &column_itor->second;
- LLButton *button = column->mButton;
-
- if (button)
+ LLScrollListItem *itemp = *iter;
+ S32 num_cols = itemp->getNumColumns();
+ S32 i = 0;
+ for (LLScrollListCell* cell = itemp->getColumn(i); i < num_cols; cell = itemp->getColumn(++i))
{
- mColumnsIndexed[column->mIndex] = column;
+ if (i >= (S32)mColumnsIndexed.size()) break;
+
+ cell->setWidth(mColumnsIndexed[i]->mWidth);
+ }
+ }
+ // update headers
+ std::vector::iterator column_ordered_it;
+ S32 left = mItemListRect.mLeft;
+ LLColumnHeader* last_header = NULL;
+ for (column_ordered_it = mColumnsIndexed.begin(); column_ordered_it != mColumnsIndexed.end(); ++column_ordered_it)
+ {
+ if ((*column_ordered_it)->mWidth <= 0)
+ {
+ // skip hidden columns
+ }
+ LLScrollListColumn* column = *column_ordered_it;
+
+ if (column->mHeader)
+ {
+ last_header = column->mHeader;
S32 top = mItemListRect.mTop;
- S32 left = mItemListRect.mLeft;
- {
- std::map::iterator itor;
- for (itor = mColumns.begin(); itor != mColumns.end(); ++itor)
- {
- if (itor->second.mIndex < column->mIndex &&
- itor->second.mWidth > 0)
- {
- left += itor->second.mWidth + mColumnPadding;
- }
- }
- }
- S32 right = left+column->mWidth;
- if (column->mIndex != (S32)mColumns.size()-1)
+ S32 right = left + column->mWidth;
+
+ if (column->mIndex != (S32)mColumnsIndexed.size()-1)
{
right += mColumnPadding;
}
- LLRect temp_rect = LLRect(left,top+mHeadingHeight,right,top);
- button->setRect(temp_rect);
- button->setFont(mHeadingFont);
- button->setVisible(mDisplayColumnButtons);
+ right = llmax(left, llmin(mItemListRect.getWidth(), right));
+
+ S32 header_width = right - left;
+
+ last_header->reshape(header_width, mHeadingHeight);
+ last_header->translate(left - last_header->getRect().mLeft, top - last_header->getRect().mBottom);
+ last_header->setVisible(mDisplayColumnHeaders && header_width > 0);
+ left = right;
}
}
+
+ // expand last column header we encountered to full list width
+ if (last_header)
+ {
+ S32 header_strip_width = mItemListRect.getWidth() + (mScrollbar->getVisible() ? 0 : SCROLLBAR_SIZE);
+ S32 new_width = llmax(0, mItemListRect.mLeft + header_strip_width - last_header->getRect().mLeft);
+ last_header->reshape(new_width, last_header->getRect().getHeight());
+ }
}
void LLScrollListCtrl::setDisplayHeading(BOOL display)
{
- mDisplayColumnButtons = display;
+ mDisplayColumnHeaders = display;
updateColumns();
@@ -745,15 +838,7 @@ void LLScrollListCtrl::setHeadingHeight(S32 heading_height)
reshape(mRect.getWidth(), mRect.getHeight());
// Resize
- mScrollbar->reshape(SCROLLBAR_SIZE, mItemListRect.getHeight());
-
- updateColumnButtons();
-}
-
-void LLScrollListCtrl::setHeadingFont(const LLFontGL* heading_font)
-{
- mHeadingFont = heading_font;
- updateColumnButtons();
+ mScrollbar->reshape(SCROLLBAR_SIZE, mItemListRect.getHeight() + (mDisplayColumnHeaders ? mHeadingHeight : 0));
}
void LLScrollListCtrl::setCollapseEmptyColumns(BOOL collapse)
@@ -873,6 +958,7 @@ void LLScrollListCtrl::deleteSingleItem(S32 target_index)
}
delete itemp;
mItemList.erase(mItemList.begin() + target_index);
+ updateMaxContentWidth(NULL);
}
void LLScrollListCtrl::deleteSelectedItems()
@@ -892,6 +978,7 @@ void LLScrollListCtrl::deleteSelectedItems()
}
}
mLastSelected = NULL;
+ updateMaxContentWidth(NULL);
}
void LLScrollListCtrl::highlightNthItem(S32 target_index)
@@ -1033,7 +1120,7 @@ void LLScrollListCtrl::selectNextItem( BOOL extend_selection)
}
}
- if ((mCommitOnSelectionChange || mCommitOnKeyboardMovement))
+ if (mCommitOnKeyboardMovement)
{
onCommit();
}
@@ -1486,109 +1573,153 @@ BOOL LLScrollListCtrl::handleScrollWheel(S32 x, S32 y, S32 clicks)
return handled;
}
-
-BOOL LLScrollListCtrl::handleMouseDown(S32 x, S32 y, MASK mask)
+BOOL LLScrollListCtrl::selectItemAt(S32 x, S32 y, MASK mask)
{
- BOOL handled = LLView::childrenHandleMouseDown(x, y, mask) != NULL;
+ if (!mCanSelect) return FALSE;
- // set keyboard focus first, in case click action wants to move focus elsewhere
- setFocus(TRUE);
+ BOOL selection_changed = FALSE;
- if( !handled && mCanSelect)
+ LLScrollListItem* hit_item = hitItem(x, y);
+ if( hit_item )
{
- LLScrollListItem* hit_item = hitItem(x, y);
- if( hit_item )
+ if( mAllowMultipleSelection )
{
- if( mAllowMultipleSelection )
+ if (mask & MASK_SHIFT)
{
- if (mask & MASK_SHIFT)
+ if (mLastSelected == NULL)
{
- if (mLastSelected == NULL)
- {
- selectItem(hit_item);
- }
- else
+ selectItem(hit_item);
+ }
+ else
+ {
+ // Select everthing between mLastSelected and hit_item
+ bool selecting = false;
+ item_list::iterator itor;
+ // If we multiselect backwards, we'll stomp on mLastSelected,
+ // meaning that we never stop selecting until hitting max or
+ // the end of the list.
+ LLScrollListItem* lastSelected = mLastSelected;
+ for (itor = mItemList.begin(); itor != mItemList.end(); ++itor)
{
- // Select everthing between mLastSelected and hit_item
- bool selecting = false;
- item_list::iterator itor;
- // If we multiselect backwards, we'll stomp on mLastSelected,
- // meaning that we never stop selecting until hitting max or
- // the end of the list.
- LLScrollListItem* lastSelected = mLastSelected;
- for (itor = mItemList.begin(); itor != mItemList.end(); ++itor)
+ if(mMaxSelectable > 0 && getAllSelected().size() >= mMaxSelectable)
{
- if(mMaxSelectable > 0 && getAllSelected().size() >= mMaxSelectable)
- {
- if(mOnMaximumSelectCallback)
- {
- mOnMaximumSelectCallback(mCallbackUserData);
- }
- break;
- }
- LLScrollListItem *item = *itor;
- if (item == hit_item || item == lastSelected)
- {
- selectItem(item, FALSE);
- selecting = !selecting;
- }
- if (selecting)
+ if(mOnMaximumSelectCallback)
{
- selectItem(item, FALSE);
+ mOnMaximumSelectCallback(mCallbackUserData);
}
+ break;
+ }
+ LLScrollListItem *item = *itor;
+ if (item == hit_item || item == lastSelected)
+ {
+ selectItem(item, FALSE);
+ selecting = !selecting;
+ }
+ if (selecting)
+ {
+ selectItem(item, FALSE);
}
}
}
- else if (mask & MASK_CONTROL)
+ }
+ else if (mask & MASK_CONTROL)
+ {
+ if (hit_item->getSelected())
+ {
+ deselectItem(hit_item);
+ }
+ else
{
- if (hit_item->getSelected())
+ if(!(mMaxSelectable > 0 && getAllSelected().size() >= mMaxSelectable))
{
- deselectItem(hit_item);
+ selectItem(hit_item, FALSE);
}
else
{
- if(!(mMaxSelectable > 0 && getAllSelected().size() >= mMaxSelectable))
+ if(mOnMaximumSelectCallback)
{
- selectItem(hit_item, FALSE);
- }
- else
- {
- if(mOnMaximumSelectCallback)
- {
- mOnMaximumSelectCallback(mCallbackUserData);
- }
+ mOnMaximumSelectCallback(mCallbackUserData);
}
}
}
- else
- {
- deselectAllItems(TRUE);
- selectItem(hit_item);
- }
}
else
{
+ deselectAllItems(TRUE);
selectItem(hit_item);
}
-
- hit_item->handleMouseDown(x - mBorderThickness - LIST_BORDER_PAD,
- 1, mask);
- // always commit on mousedown
- onCommit();
- mSelectionChanged = FALSE;
-
- // clear search string on mouse operations
- mSearchString.clear();
}
else
{
- mLastSelected = NULL;
+ selectItem(hit_item);
}
+
+ hit_item->handleClick(x - mBorderThickness - LIST_BORDER_PAD,
+ 1, mask);
+
+ selection_changed = mSelectionChanged;
+ if (mCommitOnSelectionChange)
+ {
+ commitIfChanged();
+ }
+
+ // clear search string on mouse operations
+ mSearchString.clear();
+ }
+ else
+ {
+ //mLastSelected = NULL;
+ //deselectAllItems(TRUE);
+ }
+
+ return selection_changed;
+}
+
+
+BOOL LLScrollListCtrl::handleMouseDown(S32 x, S32 y, MASK mask)
+{
+ BOOL handled = LLView::childrenHandleMouseDown(x, y, mask) != NULL;
+
+ if( !handled )
+ {
+ // set keyboard focus first, in case click action wants to move focus elsewhere
+ setFocus(TRUE);
+
+ // clear selection changed flag so because user is starting a selection operation
+ mSelectionChanged = FALSE;
+
+ gFocusMgr.setMouseCapture(this);
+ selectItemAt(x, y, mask);
}
return TRUE;
}
+BOOL LLScrollListCtrl::handleMouseUp(S32 x, S32 y, MASK mask)
+{
+ if (hasMouseCapture())
+ {
+ if(mask == MASK_NONE)
+ {
+ selectItemAt(x, y, mask);
+ }
+ }
+
+ if (hasMouseCapture())
+ {
+ gFocusMgr.setMouseCapture(NULL);
+ }
+
+ // always commit when mouse operation is completed inside list
+ if (mItemListRect.pointInRect(x,y))
+ {
+ mSelectionChanged = FALSE;
+ onCommit();
+ }
+
+ return LLUICtrl::handleMouseUp(x, y, mask);
+}
+
BOOL LLScrollListCtrl::handleDoubleClick(S32 x, S32 y, MASK mask)
{
//BOOL handled = FALSE;
@@ -1647,31 +1778,35 @@ BOOL LLScrollListCtrl::handleHover(S32 x,S32 y,MASK mask)
{
BOOL handled = FALSE;
- if(getVisible())
+ if (hasMouseCapture())
{
- if (mCanSelect)
+ if(mask == MASK_NONE)
{
- LLScrollListItem* item = hitItem(x, y);
- if (item)
- {
- highlightNthItem(getItemIndex(item));
- }
- else
- {
- highlightNthItem(-1);
- }
+ selectItemAt(x, y, mask);
}
-
- handled = LLView::handleHover( x, y, mask );
-
- if( !handled )
+ }
+ else if (mCanSelect)
+ {
+ LLScrollListItem* item = hitItem(x, y);
+ if (item)
+ {
+ highlightNthItem(getItemIndex(item));
+ }
+ else
{
- // Opaque
- getWindow()->setCursor(UI_CURSOR_ARROW);
- lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << llendl;
- handled = TRUE;
+ highlightNthItem(-1);
}
}
+
+ handled = LLUICtrl::handleHover( x, y, mask );
+
+ //if( !handled )
+ //{
+ // // Opaque
+ // getWindow()->setCursor(UI_CURSOR_ARROW);
+ // lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << llendl;
+ // handled = TRUE;
+ //}
return handled;
}
@@ -1980,6 +2115,16 @@ void LLScrollListCtrl::commitIfChanged()
}
}
+void LLScrollListCtrl::setSorted(BOOL sorted)
+{
+ mSorted = sorted;
+}
+
+BOOL LLScrollListCtrl::isSorted()
+{
+ return mSorted;
+}
+
// Called by scrollbar
//static
void LLScrollListCtrl::onScrollChange( S32 new_pos, LLScrollbar* scrollbar, void* userdata )
@@ -1992,9 +2137,19 @@ void LLScrollListCtrl::onScrollChange( S32 new_pos, LLScrollbar* scrollbar, void
// First column is column 0
void LLScrollListCtrl::sortByColumn(U32 column, BOOL ascending)
{
- mSortColumn = column;
- mSortAscending = ascending;
- std::sort(mItemList.begin(), mItemList.end(), SortScrollListItem(mSortColumn, mSortAscending));
+ if (!mSorted || mSortColumn != column)
+ {
+ mSortColumn = column;
+ std::sort(mItemList.begin(), mItemList.end(), SortScrollListItem(mSortColumn, mSortAscending));
+ setSorted(TRUE);
+ }
+
+ // just reverse the list if changing sort order
+ if(mSortAscending != ascending)
+ {
+ std::reverse(mItemList.begin(), mItemList.end());
+ mSortAscending = ascending;
+ }
}
void LLScrollListCtrl::sortByColumn(LLString name, BOOL ascending)
@@ -2066,7 +2221,7 @@ LLXMLNodePtr LLScrollListCtrl::getXML(bool save_children) const
node->createChild("draw_border", TRUE)->setBoolValue((mBorder != NULL));
- node->createChild("draw_heading", TRUE)->setBoolValue(mDisplayColumnButtons);
+ node->createChild("draw_heading", TRUE)->setBoolValue(mDisplayColumnHeaders);
node->createChild("background_visible", TRUE)->setBoolValue(mBackgroundVisible);
@@ -2215,13 +2370,6 @@ LLView* LLScrollListCtrl::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFac
node->getAttributeS32("heading_height", heading_height);
scroll_list->setHeadingHeight(heading_height);
}
- if (node->hasAttribute("heading_font"))
- {
- LLString heading_font("");
- node->getAttributeString("heading_font", heading_font);
- LLFontGL* gl_font = LLFontGL::fontFromName(heading_font.c_str());
- scroll_list->setHeadingFont(gl_font);
- }
scroll_list->setCollapseEmptyColumns(collapse_empty_columns);
scroll_list->setScrollListParameters(node);
@@ -2246,6 +2394,9 @@ LLView* LLScrollListCtrl::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFac
LLString sortname(columnname);
child->getAttributeString("sort", sortname);
+
+ BOOL sort_ascending = TRUE;
+ child->getAttributeBOOL("sort_ascending", sort_ascending);
LLString imagename;
child->getAttributeString("image", imagename);
@@ -2267,6 +2418,7 @@ LLView* LLScrollListCtrl::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFac
columns[index]["name"] = columnname;
columns[index]["sort"] = sortname;
+ columns[index]["sort_ascending"] = sort_ascending;
columns[index]["image"] = imagename;
columns[index]["label"] = labelname;
columns[index]["width"] = columnwidth;
@@ -2427,10 +2579,17 @@ BOOL LLScrollListCtrl::canDeselect()
void LLScrollListCtrl::addColumn(const LLSD& column, EAddPosition pos)
{
LLString name = column["name"].asString();
- if (mColumns.size() == 0)
+ if (mColumns.empty())
{
mDefaultColumn = 0;
}
+ // if no column name provided, just use ordinal as name
+ if (name.empty())
+ {
+ std::ostringstream new_name;
+ new_name << mColumnsIndexed.size();
+ name = new_name.str();
+ }
if (mColumns.find(name) == mColumns.end())
{
// Add column
@@ -2470,30 +2629,28 @@ void LLScrollListCtrl::addColumn(const LLSD& column, EAddPosition pos)
right += mColumnPadding;
}
LLRect temp_rect = LLRect(left,top+mHeadingHeight,right,top);
- new_column->mButton = new LLSquareButton(button_name, temp_rect, "", mHeadingFont, "", onClickColumn, NULL);
+ new_column->mHeader = new LLColumnHeader(button_name, temp_rect, new_column);
if(column["image"].asString() != "")
{
- //new_column->mButton->setScaleImage(false);
- new_column->mButton->setImageSelected(column["image"].asString());
- new_column->mButton->setImageUnselected(column["image"].asString());
+ //new_column->mHeader->setScaleImage(false);
+ new_column->mHeader->setImage(column["image"].asString());
}
else
{
- new_column->mButton->setLabelSelected(new_column->mLabel);
- new_column->mButton->setLabelUnselected(new_column->mLabel);
+ new_column->mHeader->setLabel(new_column->mLabel);
+ //new_column->mHeader->setLabel(new_column->mLabel);
}
//RN: although it might be useful to change sort order with the keyboard,
// mixing tab stops on child items along with the parent item is not supported yet
- new_column->mButton->setTabStop(FALSE);
- addChild(new_column->mButton);
- new_column->mButton->setVisible(mDisplayColumnButtons);
+ new_column->mHeader->setTabStop(FALSE);
+ addChild(new_column->mHeader);
+ new_column->mHeader->setVisible(mDisplayColumnHeaders);
// Move scroll to front
removeChild(mScrollbar);
addChild(mScrollbar);
-
- new_column->mButton->setCallbackUserData(new_column);
+
}
}
updateColumns();
@@ -2511,6 +2668,7 @@ void LLScrollListCtrl::onClickColumn(void *userdata)
U32 column_index = info->mIndex;
LLScrollListColumn* column = parent->mColumnsIndexed[info->mIndex];
+ bool ascending = column->mSortAscending;
if (column->mSortingColumn != column->mName)
{
if (parent->mColumns.find(column->mSortingColumn) != parent->mColumns.end())
@@ -2520,7 +2678,6 @@ void LLScrollListCtrl::onClickColumn(void *userdata)
}
}
- bool ascending = true;
if (column_index == parent->mSortColumn)
{
ascending = !parent->mSortAscending;
@@ -2536,7 +2693,7 @@ void LLScrollListCtrl::onClickColumn(void *userdata)
std::string LLScrollListCtrl::getSortColumnName()
{
- LLScrollListColumn* column = mColumnsIndexed[mSortColumn];
+ LLScrollListColumn* column = mSortColumn >= 0 ? mColumnsIndexed[mSortColumn] : NULL;
if (column) return column->mName;
else return "";
@@ -2547,11 +2704,11 @@ void LLScrollListCtrl::clearColumns()
std::map::iterator itor;
for (itor = mColumns.begin(); itor != mColumns.end(); ++itor)
{
- LLButton *button = itor->second.mButton;
- if (button)
+ LLColumnHeader *header = itor->second.mHeader;
+ if (header)
{
- removeChild(button);
- delete button;
+ removeChild(header);
+ delete header;
}
}
mColumns.clear();
@@ -2563,14 +2720,22 @@ void LLScrollListCtrl::setColumnLabel(const LLString& column, const LLString& la
if (itor != mColumns.end())
{
itor->second.mLabel = label;
- if (itor->second.mButton)
+ if (itor->second.mHeader)
{
- itor->second.mButton->setLabelSelected(label);
- itor->second.mButton->setLabelUnselected(label);
+ itor->second.mHeader->setLabel(label);
}
}
}
+LLScrollListColumn* LLScrollListCtrl::getColumn(S32 index)
+{
+ if (index < 0 || index >= (S32)mColumnsIndexed.size())
+ {
+ return NULL;
+ }
+ return mColumnsIndexed[index];
+}
+
void LLScrollListCtrl::setColumnHeadings(LLSD headings)
{
mColumns.clear();
@@ -2597,6 +2762,7 @@ LLScrollListItem* LLScrollListCtrl::addElement(const LLSD& value, EAddPosition p
// Add any columns we don't already have
LLSD columns = value["columns"];
LLSD::array_const_iterator itor;
+ S32 col_index = 0 ;
for (itor = columns.beginArray(); itor != columns.endArray(); ++itor)
{
LLString column = (*itor)["column"].asString();
@@ -2605,21 +2771,39 @@ LLScrollListItem* LLScrollListCtrl::addElement(const LLSD& value, EAddPosition p
{
mDefaultColumn = 0;
}
- std::map::iterator column_itor = mColumns.find(column);
- if (column_itor == mColumns.end())
+
+ LLScrollListColumn* columnp = NULL;
+
+ // empty columns strings index by ordinal
+ if (column.empty())
+ {
+ std::ostringstream new_name;
+ new_name << col_index;
+ column = new_name.str();
+ }
+
+ std::map::iterator column_itor;
+ column_itor = mColumns.find(column);
+ if (column_itor != mColumns.end())
+ {
+ columnp = &column_itor->second;
+ }
+
+ // create new column on demand
+ if (!columnp)
{
LLSD new_column;
new_column["name"] = column;
new_column["label"] = column;
- new_column["width"] = 0;
+ new_column["width"] = (*itor)["width"];
addColumn(new_column);
- column_itor = mColumns.find(column);
+ columnp = &mColumns.find(column)->second;
new_item->setNumColumns(mColumns.size());
}
- S32 index = column_itor->second.mIndex;
- S32 width = column_itor->second.mWidth;
- LLFontGL::HAlign font_alignment = column_itor->second.mFontAlignment;
+ S32 index = columnp->mIndex;
+ S32 width = columnp->mWidth;
+ LLFontGL::HAlign font_alignment = columnp->mFontAlignment;
LLSD value = (*itor)["value"];
LLString fontname = (*itor)["font"].asString();
@@ -2645,10 +2829,20 @@ LLScrollListItem* LLScrollListCtrl::addElement(const LLSD& value, EAddPosition p
LLRect(0, 0, width, width), "label");
new_item->setColumn(index, new LLScrollListCheck(ctrl,width));
}
+ else if (type == "separator")
+ {
+ new_item->setColumn(index, new LLScrollListSeparator(width));
+ }
else
{
new_item->setColumn(index, new LLScrollListText(value.asString(), font, width, font_style, font_alignment));
+ if (columnp->mHeader && !value.asString().empty())
+ {
+ columnp->mHeader->setHasResizableElement(TRUE);
+ }
}
+
+ col_index++;
}
S32 num_columns = mColumns.size();
@@ -2744,6 +2938,14 @@ void LLScrollListCtrl::setFocus(BOOL b)
}
LLUICtrl::setFocus(b);
}
+
+//virtual
+void LLScrollListCtrl::onFocusReceived()
+{
+ // forget latent selection changes when getting focus
+ mSelectionChanged = FALSE;
+}
+
//virtual
void LLScrollListCtrl::onFocusLost()
{
@@ -2754,5 +2956,411 @@ void LLScrollListCtrl::onFocusLost()
getParent()->onFocusLost();
}
}
+ if (hasMouseCapture())
+ {
+ gFocusMgr.setMouseCapture(NULL);
+ }
+ LLUICtrl::onFocusLost();
}
+LLColumnHeader::LLColumnHeader(const LLString& label, const LLRect &rect, LLScrollListColumn* column, const LLFontGL* fontp) :
+ LLComboBox(label, rect, label, NULL, NULL),
+ mColumn(column),
+ mOrigLabel(label),
+ mShowSortOptions(FALSE),
+ mHasResizableElement(FALSE)
+{
+ mListPosition = LLComboBox::ABOVE;
+ setCommitCallback(onSelectSort);
+ setCallbackUserData(this);
+ mButton->setTabStop(FALSE);
+ // require at least two frames between mouse down and mouse up event to capture intentional "hold" not just bad framerate
+ mButton->setHeldDownDelay(LLUI::sConfigGroup->getF32("ColumnHeaderDropDownDelay"), 2);
+ mButton->setHeldDownCallback(onHeldDown);
+ mButton->setClickedCallback(onClick);
+ mButton->setMouseDownCallback(onMouseDown);
+
+ mButton->setCallbackUserData(this);
+
+ mAscendingText = "[LOW]...[HIGH](Ascending)";
+ mDescendingText = "[HIGH]...[LOW](Descending)";
+
+ mList->reshape(llmax(mList->getRect().getWidth(), 110, mRect.getWidth()), mList->getRect().getHeight());
+
+ // resize handles on left and right
+ const S32 RESIZE_BAR_THICKNESS = 3;
+ mResizeBar = new LLResizeBar(
+ "resizebar",
+ LLRect( mRect.getWidth() - RESIZE_BAR_THICKNESS, mRect.getHeight(), mRect.getWidth(), 0),
+ MIN_COLUMN_WIDTH, mRect.getHeight(), LLResizeBar::RIGHT );
+ addChild(mResizeBar);
+
+ mResizeBar->setEnabled(FALSE);
+}
+
+LLColumnHeader::~LLColumnHeader()
+{
+}
+
+void LLColumnHeader::draw()
+{
+ if( getVisible() )
+ {
+ mDrawArrow = !mColumn->mLabel.empty() && mColumn->mParentCtrl->isSorted() && mColumn->mParentCtrl->getSortColumnName() == mColumn->mSortingColumn;
+
+ BOOL is_ascending = mColumn->mParentCtrl->getSortAscending();
+ mArrowImage = is_ascending ? LLUI::sImageProvider->getUIImageByID(LLUUID(LLUI::sAssetsGroup->getString("up_arrow.tga")))
+ : LLUI::sImageProvider->getUIImageByID(LLUUID(LLUI::sAssetsGroup->getString("down_arrow.tga")));
+
+ //BOOL clip = mRect.mRight > mColumn->mParentCtrl->getItemListRect().getWidth();
+ //LLGLEnable scissor_test(clip ? GL_SCISSOR_TEST : GL_FALSE);
+
+ //LLRect column_header_local_rect(-mRect.mLeft, mRect.getHeight(), mColumn->mParentCtrl->getItemListRect().getWidth() - mRect.mLeft, 0);
+ //LLUI::setScissorRegionLocal(column_header_local_rect);
+
+ // Draw children
+ LLComboBox::draw();
+
+ if (mList->getVisible())
+ {
+ // sync sort order with list selection every frame
+ mColumn->mParentCtrl->sortByColumn(mColumn->mSortingColumn, getCurrentIndex() == 0);
+ }
+
+ }
+}
+
+BOOL LLColumnHeader::handleDoubleClick(S32 x, S32 y, MASK mask)
+{
+ if (canResize() && mResizeBar->getRect().pointInRect(x, y))
+ {
+ // reshape column to max content width
+ LLRect column_rect = getRect();
+ column_rect.mRight = column_rect.mLeft + mColumn->mMaxContentWidth;
+ userSetShape(column_rect);
+ }
+ else
+ {
+ onClick(this);
+ }
+ return TRUE;
+}
+
+void LLColumnHeader::setImage(const LLString &image_name)
+{
+ if (mButton)
+ {
+ mButton->setImageSelected(image_name);
+ mButton->setImageUnselected(image_name);
+ }
+}
+
+//static
+void LLColumnHeader::onClick(void* user_data)
+{
+ LLColumnHeader* headerp = (LLColumnHeader*)user_data;
+ if (!headerp) return;
+
+ LLScrollListColumn* column = headerp->mColumn;
+ if (!column) return;
+
+ if (headerp->mList->getVisible())
+ {
+ headerp->hideList();
+ }
+
+ LLScrollListCtrl::onClickColumn(column);
+
+ // propage new sort order to sort order list
+ headerp->mList->selectNthItem(column->mParentCtrl->getSortAscending() ? 0 : 1);
+}
+
+//static
+void LLColumnHeader::onMouseDown(void* user_data)
+{
+ // for now, do nothing but block the normal showList() behavior
+ return;
+}
+
+//static
+void LLColumnHeader::onHeldDown(void* user_data)
+{
+ LLColumnHeader* headerp = (LLColumnHeader*)user_data;
+ headerp->showList();
+}
+
+void LLColumnHeader::showList()
+{
+ if (mShowSortOptions)
+ {
+ //LLSD item_val = mColumn->mParentCtrl->getFirstData()->getValue();
+ mOrigLabel = mButton->getLabelSelected();
+
+ // move sort column over to this column and do initial sort
+ mColumn->mParentCtrl->sortByColumn(mColumn->mSortingColumn, mColumn->mParentCtrl->getSortAscending());
+
+ LLString low_item_text;
+ LLString high_item_text;
+
+ LLScrollListItem* itemp = mColumn->mParentCtrl->getFirstData();
+ if (itemp)
+ {
+ LLScrollListCell* cell = itemp->getColumn(mColumn->mIndex);
+ if (cell && cell->isText())
+ {
+ if (mColumn->mParentCtrl->getSortAscending())
+ {
+ low_item_text = cell->getText();
+ }
+ else
+ {
+ high_item_text = cell->getText();
+ }
+ }
+ }
+
+ itemp = mColumn->mParentCtrl->getLastData();
+ if (itemp)
+ {
+ LLScrollListCell* cell = itemp->getColumn(mColumn->mIndex);
+ if (cell && cell->isText())
+ {
+ if (mColumn->mParentCtrl->getSortAscending())
+ {
+ high_item_text = cell->getText();
+ }
+ else
+ {
+ low_item_text = cell->getText();
+ }
+ }
+ }
+
+ LLString::truncate(low_item_text, 3);
+ LLString::truncate(high_item_text, 3);
+
+ LLString ascending_string;
+ LLString descending_string;
+
+ if (low_item_text.empty() || high_item_text.empty())
+ {
+ ascending_string = "Ascending";
+ descending_string = "Descending";
+ }
+ else
+ {
+ mAscendingText.setArg("[LOW]", low_item_text);
+ mAscendingText.setArg("[HIGH]", high_item_text);
+ mDescendingText.setArg("[LOW]", low_item_text);
+ mDescendingText.setArg("[HIGH]", high_item_text);
+ ascending_string = mAscendingText.getString();
+ descending_string = mDescendingText.getString();
+ }
+
+ S32 text_width = LLFontGL::sSansSerifSmall->getWidth(ascending_string);
+ text_width = llmax(text_width, LLFontGL::sSansSerifSmall->getWidth(descending_string)) + 10;
+ text_width = llmax(text_width, mRect.getWidth() - 30);
+
+ mList->getColumn(0)->mWidth = text_width;
+ ((LLScrollListText*)mList->getFirstData()->getColumn(0))->setText(ascending_string);
+ ((LLScrollListText*)mList->getLastData()->getColumn(0))->setText(descending_string);
+
+ mList->reshape(llmax(text_width + 30, 110, mRect.getWidth()), mList->getRect().getHeight());
+
+ LLComboBox::showList();
+ }
+}
+
+//static
+void LLColumnHeader::onSelectSort(LLUICtrl* ctrl, void* user_data)
+{
+ LLColumnHeader* headerp = (LLColumnHeader*)user_data;
+ if (!headerp) return;
+
+ LLScrollListColumn* column = headerp->mColumn;
+ if (!column) return;
+ LLScrollListCtrl *parent = column->mParentCtrl;
+ if (!parent) return;
+
+ if (headerp->getCurrentIndex() == 0)
+ {
+ // ascending
+ parent->sortByColumn(column->mSortingColumn, TRUE);
+ }
+ else
+ {
+ // descending
+ parent->sortByColumn(column->mSortingColumn, FALSE);
+ }
+
+ // restore original column header
+ headerp->setLabel(headerp->mOrigLabel);
+}
+
+LLView* LLColumnHeader::findSnapEdge(S32& new_edge_val, const LLCoordGL& mouse_dir, ESnapEdge snap_edge, ESnapType snap_type, S32 threshold, S32 padding)
+{
+ // this logic assumes dragging on right
+ llassert(snap_edge == SNAP_RIGHT);
+
+ // use higher snap threshold for column headers
+ threshold = llmin(threshold, 15);
+
+ LLRect snap_rect = getSnapRect();
+
+ S32 snap_delta = mColumn->mMaxContentWidth - snap_rect.getWidth();
+
+ // x coord growing means column growing, so same signs mean we're going in right direction
+ if (llabs(snap_delta) <= threshold && mouse_dir.mX * snap_delta > 0 )
+ {
+ new_edge_val = snap_rect.mRight + snap_delta;
+ }
+ else
+ {
+ LLScrollListColumn* next_column = mColumn->mParentCtrl->getColumn(mColumn->mIndex + 1);
+ while (next_column)
+ {
+ if (next_column->mHeader)
+ {
+ snap_delta = (next_column->mHeader->getSnapRect().mRight - next_column->mMaxContentWidth) - snap_rect.mRight;
+ if (llabs(snap_delta) <= threshold && mouse_dir.mX * snap_delta > 0 )
+ {
+ new_edge_val = snap_rect.mRight + snap_delta;
+ }
+ break;
+ }
+ next_column = mColumn->mParentCtrl->getColumn(next_column->mIndex + 1);
+ }
+ }
+
+ return this;
+}
+
+void LLColumnHeader::userSetShape(const LLRect& new_rect)
+{
+ S32 new_width = new_rect.getWidth();
+ S32 delta_width = new_width - (mRect.getWidth() + mColumn->mParentCtrl->getColumnPadding());
+
+ if (delta_width != 0)
+ {
+ S32 remaining_width = delta_width;
+ S32 col;
+ for (col = mColumn->mIndex + 1; col < mColumn->mParentCtrl->getNumColumns(); col++)
+ {
+ LLScrollListColumn* columnp = mColumn->mParentCtrl->getColumn(col);
+ if (!columnp) break;
+
+ if (columnp->mHeader && columnp->mHeader->canResize())
+ {
+ // how many pixels in width can this column afford to give up?
+ S32 resize_buffer_amt = llmax(0, columnp->mWidth - MIN_COLUMN_WIDTH);
+
+ // user shrinking column, need to add width to other columns
+ if (delta_width < 0)
+ {
+ if (!columnp->mDynamicWidth && columnp->mWidth > 0)
+ {
+ // statically sized column, give all remaining width to this column
+ columnp->mWidth -= remaining_width;
+ if (columnp->mRelWidth > 0.f)
+ {
+ columnp->mRelWidth = (F32)columnp->mWidth / (F32)mColumn->mParentCtrl->getItemListRect().getWidth();
+ }
+ }
+ break;
+ }
+ else
+ {
+ // user growing column, need to take width from other columns
+ remaining_width -= resize_buffer_amt;
+
+ if (!columnp->mDynamicWidth && columnp->mWidth > 0)
+ {
+ columnp->mWidth -= llmin(columnp->mWidth - MIN_COLUMN_WIDTH, delta_width);
+ if (columnp->mRelWidth > 0.f)
+ {
+ columnp->mRelWidth = (F32)columnp->mWidth / (F32)mColumn->mParentCtrl->getItemListRect().getWidth();
+ }
+ }
+
+ if (remaining_width <= 0)
+ {
+ // width sucked up from neighboring columns, done
+ break;
+ }
+ }
+ }
+ }
+
+ // clamp resize amount to maximum that can be absorbed by other columns
+ if (delta_width > 0)
+ {
+ delta_width -= llmax(remaining_width, 0);
+ }
+
+ // propagate constrained delta_width to new width for this column
+ new_width = mRect.getWidth() + delta_width - mColumn->mParentCtrl->getColumnPadding();
+
+ // use requested width
+ mColumn->mWidth = new_width;
+
+ // update proportional spacing
+ if (mColumn->mRelWidth > 0.f)
+ {
+ mColumn->mRelWidth = (F32)new_width / (F32)mColumn->mParentCtrl->getItemListRect().getWidth();
+ }
+
+ // tell scroll list to layout columns again
+ mColumn->mParentCtrl->updateColumns();
+ }
+}
+
+void LLColumnHeader::setHasResizableElement(BOOL resizable)
+{
+ // for now, dynamically spaced columns can't be resized
+ if (mColumn->mDynamicWidth) return;
+
+ if (resizable != mHasResizableElement)
+ {
+ mHasResizableElement = resizable;
+
+ S32 num_resizable_columns = 0;
+ S32 col;
+ for (col = 0; col < mColumn->mParentCtrl->getNumColumns(); col++)
+ {
+ LLScrollListColumn* columnp = mColumn->mParentCtrl->getColumn(col);
+ if (columnp->mHeader && columnp->mHeader->canResize())
+ {
+ num_resizable_columns++;
+ }
+ }
+
+ S32 num_resizers_enabled = 0;
+
+ // now enable/disable resize handles on resizable columns if we have at least two
+ for (col = 0; col < mColumn->mParentCtrl->getNumColumns(); col++)
+ {
+ LLScrollListColumn* columnp = mColumn->mParentCtrl->getColumn(col);
+ if (!columnp->mHeader) continue;
+ BOOL enable = num_resizable_columns >= 2 && num_resizers_enabled < (num_resizable_columns - 1) && columnp->mHeader->canResize();
+ columnp->mHeader->enableResizeBar(enable);
+ if (enable)
+ {
+ num_resizers_enabled++;
+ }
+ }
+ }
+}
+
+void LLColumnHeader::enableResizeBar(BOOL enable)
+{
+ // for now, dynamically spaced columns can't be resized
+ if (!mColumn->mDynamicWidth)
+ {
+ mResizeBar->setEnabled(enable);
+ }
+}
+
+BOOL LLColumnHeader::canResize()
+{
+ return getVisible() && (mHasResizableElement || mColumn->mDynamicWidth);
+}
diff --git a/linden/indra/llui/llscrolllistctrl.h b/linden/indra/llui/llscrolllistctrl.h
index a1c4853..eed07b8 100644
--- a/linden/indra/llui/llscrolllistctrl.h
+++ b/linden/indra/llui/llscrolllistctrl.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -42,9 +43,12 @@
#include "llviewborder.h"
#include "llframetimer.h"
#include "llcheckboxctrl.h"
+#include "llcombobox.h"
class LLScrollbar;
class LLScrollListCtrl;
+class LLColumnHeader;
+class LLResizeBar;
class LLScrollListCell
{
@@ -58,11 +62,27 @@ public:
virtual const BOOL getVisible() const { return TRUE; }
virtual void setWidth(S32 width) = 0;
virtual void highlightText(S32 offset, S32 num_chars) {}
+ virtual BOOL isText() = 0;
virtual BOOL handleClick() { return FALSE; }
virtual void setEnabled(BOOL enable) { }
};
+class LLScrollListSeparator : public LLScrollListCell
+{
+public:
+ LLScrollListSeparator(S32 width);
+ virtual ~LLScrollListSeparator() {};
+ virtual void drawToWidth(S32 width, const LLColor4& color, const LLColor4& highlight_color) const; // truncate to given width, if possible
+ virtual S32 getWidth() const {return mWidth;}
+ virtual S32 getHeight() const { return 5; };
+ virtual void setWidth(S32 width) {mWidth = width; }
+ virtual BOOL isText() { return FALSE; }
+
+protected:
+ S32 mWidth;
+};
+
class LLScrollListText : public LLScrollListCell
{
public:
@@ -77,6 +97,7 @@ public:
virtual const BOOL getVisible() const { return mVisible; }
virtual void highlightText(S32 offset, S32 num_chars) {mHighlightOffset = offset; mHighlightCount = num_chars;}
void setText(const LLString& text);
+ virtual BOOL isText() { return TRUE; }
private:
LLUIString mText;
@@ -105,6 +126,7 @@ public:
virtual const LLString& getText() const { return mImageUUID; }
virtual const LLString& getTextLower() const { return mImageUUID; }
virtual void setWidth(S32 width) { mWidth = width; }
+ virtual BOOL isText() { return FALSE; }
private:
LLPointer mIcon;
@@ -126,6 +148,7 @@ public:
virtual void setEnabled(BOOL enable) { if (mCheckBox) mCheckBox->setEnabled(enable); }
LLCheckBoxCtrl* getCheckBox() { return mCheckBox; }
+ virtual BOOL isText() { return FALSE; }
private:
LLCheckBoxCtrl* mCheckBox;
@@ -136,20 +159,50 @@ class LLScrollListColumn
{
public:
// Default constructor
- LLScrollListColumn() : mName(""), mSortingColumn(""), mLabel(""), mWidth(-1), mRelWidth(-1.0), mDynamicWidth(FALSE), mIndex(-1), mParentCtrl(NULL), mButton(NULL), mFontAlignment(LLFontGL::LEFT)
+ LLScrollListColumn() :
+ mName(""),
+ mSortingColumn(""),
+ mSortAscending(TRUE),
+ mLabel(""),
+ mWidth(-1),
+ mRelWidth(-1.0),
+ mDynamicWidth(FALSE),
+ mMaxContentWidth(0),
+ mIndex(-1),
+ mParentCtrl(NULL),
+ mHeader(NULL),
+ mFontAlignment(LLFontGL::LEFT)
{ }
- LLScrollListColumn(LLString name, LLString label, S32 width, F32 relwidth)
- : mName(name), mSortingColumn(name), mLabel(label), mWidth(width), mRelWidth(relwidth), mDynamicWidth(FALSE), mIndex(-1), mParentCtrl(NULL), mButton(NULL) { }
+ LLScrollListColumn(LLString name, LLString label, S32 width, F32 relwidth) :
+ mName(name),
+ mSortingColumn(name),
+ mSortAscending(TRUE),
+ mLabel(label),
+ mWidth(width),
+ mRelWidth(relwidth),
+ mDynamicWidth(FALSE),
+ mMaxContentWidth(0),
+ mIndex(-1),
+ mParentCtrl(NULL),
+ mHeader(NULL)
+ { }
LLScrollListColumn(const LLSD &sd)
{
+ mMaxContentWidth = 0;
+
mName = sd.get("name").asString();
mSortingColumn = mName;
if (sd.has("sort"))
{
mSortingColumn = sd.get("sort").asString();
}
+ mSortAscending = TRUE;
+ if (sd.has("sort_ascending"))
+ {
+ mSortAscending = sd.get("sort_ascending").asBoolean();
+ }
mLabel = sd.get("label").asString();
if (sd.has("relwidth") && (F32)sd.get("relwidth").asReal() > 0)
{
@@ -179,21 +232,57 @@ public:
mIndex = -1;
mParentCtrl = NULL;
- mButton = NULL;
+ mHeader = NULL;
}
LLString mName;
LLString mSortingColumn;
+ BOOL mSortAscending;
LLString mLabel;
S32 mWidth;
F32 mRelWidth;
BOOL mDynamicWidth;
+ S32 mMaxContentWidth;
S32 mIndex;
LLScrollListCtrl* mParentCtrl;
- LLButton* mButton;
+ LLColumnHeader* mHeader;
LLFontGL::HAlign mFontAlignment;
};
+class LLColumnHeader : public LLComboBox
+{
+public:
+ LLColumnHeader(const LLString& label, const LLRect &rect, LLScrollListColumn* column, const LLFontGL *font = NULL);
+ ~LLColumnHeader();
+
+ /*virtual*/ void draw();
+ /*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
+ /*virtual*/ void showList();
+ /*virtual*/ LLView* findSnapEdge(S32& new_edge_val, const LLCoordGL& mouse_dir, ESnapEdge snap_edge, ESnapType snap_type, S32 threshold, S32 padding);
+ /*virtual*/ void userSetShape(const LLRect& new_rect);
+
+ void setImage(const LLString &image_name);
+ LLScrollListColumn* getColumn() { return mColumn; }
+ void setHasResizableElement(BOOL resizable);
+ BOOL canResize();
+ void enableResizeBar(BOOL enable);
+ LLString getLabel() { return mOrigLabel; }
+
+ static void onSelectSort(LLUICtrl* ctrl, void* user_data);
+ static void onClick(void* user_data);
+ static void onMouseDown(void* user_data);
+ static void onHeldDown(void* user_data);
+
+protected:
+ LLScrollListColumn* mColumn;
+ LLResizeBar* mResizeBar;
+ LLString mOrigLabel;
+ LLUIString mAscendingText;
+ LLUIString mDescendingText;
+ BOOL mShowSortOptions;
+ BOOL mHasResizableElement;
+};
+
class LLScrollListItem
{
public:
@@ -235,7 +324,7 @@ public:
LLScrollListCell *getColumn(const S32 i) const { if (i < (S32)mColumns.size()) { return mColumns[i]; } return NULL; }
- virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
+ virtual BOOL handleClick(S32 x, S32 y, MASK mask);
LLString getContentsCSV();
@@ -282,6 +371,10 @@ public:
virtual void addColumn(const LLSD& column, EAddPosition pos = ADD_BOTTOM);
virtual void clearColumns();
virtual void setColumnLabel(const LLString& column, const LLString& label);
+
+ virtual LLScrollListColumn* getColumn(S32 index);
+ virtual S32 getNumColumns() const { return mColumnsIndexed.size(); }
+
// Adds a single element, from an array of:
// "columns" => [ "column" => column name, "value" => value, "type" => type, "font" => font, "font-style" => style ], "id" => uuid
// Creates missing columns automatically.
@@ -316,11 +409,14 @@ public:
// Returns FALSE if not found.
BOOL setSelectedByValue(LLSD value, BOOL selected);
- virtual BOOL isSelected(LLSD value);
+ BOOL isSorted();
+ virtual BOOL isSelected(LLSD value);
+
BOOL selectFirstItem();
BOOL selectNthItem( S32 index );
-
+ BOOL selectItemAt(S32 x, S32 y, MASK mask);
+
void deleteSingleItem( S32 index ) ;
void deleteSelectedItems();
void deselectAllItems(BOOL no_commit_on_change = FALSE); // by default, go ahead and commit on selection change
@@ -357,23 +453,6 @@ public:
LLScrollListItem* addStringUUIDItem(const LLString& item_text, const LLUUID& id, EAddPosition pos = ADD_BOTTOM, BOOL enabled = TRUE, S32 column_width = 0);
LLUUID getStringUUIDSelectedItem();
- // "Full" interface: use this when you're creating a list that has one or more of the following:
- // * contains icons
- // * contains multiple columns
- // * allows multiple selection
- // * has items that are not guarenteed to have unique names
- // * has additional per-item data (e.g. a UUID or void* userdata)
- //
- // To add items using this approach, create new LLScrollListItems and LLScrollListCells. Add the
- // cells (column entries) to each item, and add the item to the LLScrollListCtrl.
- //
- // The LLScrollListCtrl owns its items and is responsible for deleting them
- // (except in the case that the addItem() call fails, in which case it is up
- // to the caller to delete the item)
-
- // returns FALSE if item faile to be added to list, does NOT delete 'item'
- // TomY TODO - Deprecate this API and remove it
- BOOL addItem( LLScrollListItem* item, EAddPosition pos = ADD_BOTTOM );
LLScrollListItem* getFirstSelected() const;
virtual S32 getFirstSelectedIndex();
std::vector getAllSelected() const;
@@ -382,6 +461,7 @@ public:
// iterate over all items
LLScrollListItem* getFirstData() const;
+ LLScrollListItem* getLastData() const;
std::vector getAllData() const;
void setAllowMultipleSelection(BOOL mult ) { mAllowMultipleSelection = mult; }
@@ -398,6 +478,7 @@ public:
void setBackgroundVisible(BOOL b) { mBackgroundVisible = b; }
void setDrawStripes(BOOL b) { mDrawStripes = b; }
void setColumnPadding(const S32 c) { mColumnPadding = c; }
+ S32 getColumnPadding() { return mColumnPadding; }
void setCommitOnKeyboardMovement(BOOL b) { mCommitOnKeyboardMovement = b; }
void setCommitOnSelectionChange(BOOL b) { mCommitOnSelectionChange = b; }
void setAllowKeyboardMovement(BOOL b) { mAllowKeyboardMovement = b; }
@@ -417,6 +498,7 @@ public:
// Overridden from LLView
virtual void draw();
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
+ virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
virtual BOOL handleHover(S32 x, S32 y, MASK mask);
virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent);
@@ -424,6 +506,7 @@ public:
virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
virtual void setEnabled(BOOL enabled);
virtual void setFocus( BOOL b );
+ virtual void onFocusReceived();
virtual void onFocusLost();
virtual void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
@@ -431,17 +514,18 @@ public:
virtual LLRect getRequiredRect();
static BOOL rowPreceeds(LLScrollListItem *new_row, LLScrollListItem *test_row);
+ LLRect getItemListRect() { return mItemListRect; }
+
// Used "internally" by the scroll bar.
static void onScrollChange( S32 new_pos, LLScrollbar* src, void* userdata );
static void onClickColumn(void *userdata);
void updateColumns();
- void updateColumnButtons();
+ void updateMaxContentWidth(LLScrollListItem* changed_item);
void setDisplayHeading(BOOL display);
void setHeadingHeight(S32 heading_height);
- void setHeadingFont(const LLFontGL* heading_font);
void setCollapseEmptyColumns(BOOL collapse);
void setIsPopup(BOOL is_popup) { mIsPopup = is_popup; }
@@ -473,6 +557,22 @@ public:
S32 selectMultiple( LLDynamicArray ids );
protected:
+ // "Full" interface: use this when you're creating a list that has one or more of the following:
+ // * contains icons
+ // * contains multiple columns
+ // * allows multiple selection
+ // * has items that are not guarenteed to have unique names
+ // * has additional per-item data (e.g. a UUID or void* userdata)
+ //
+ // To add items using this approach, create new LLScrollListItems and LLScrollListCells. Add the
+ // cells (column entries) to each item, and add the item to the LLScrollListCtrl.
+ //
+ // The LLScrollListCtrl owns its items and is responsible for deleting them
+ // (except in the case that the addItem() call fails, in which case it is up
+ // to the caller to delete the item)
+
+ // returns FALSE if item faile to be added to list, does NOT delete 'item'
+ BOOL addItem( LLScrollListItem* item, EAddPosition pos = ADD_BOTTOM );
void selectPrevItem(BOOL extend_selection);
void selectNextItem(BOOL extend_selection);
void drawItems();
@@ -482,6 +582,7 @@ protected:
void selectItem(LLScrollListItem* itemp, BOOL single_select = TRUE);
void deselectItem(LLScrollListItem* itemp);
void commitIfChanged();
+ void setSorted(BOOL sorted);
protected:
S32 mCurIndex; // For get[First/Next]Data
@@ -492,7 +593,6 @@ protected:
S32 mPageLines; // max number of lines is it possible to see on the screen given mRect and mLineHeight
S32 mHeadingHeight; // the height of the column header buttons, if visible
U32 mMaxSelectable;
- const LLFontGL* mHeadingFont; // the font to use for column head buttons, if visible
LLScrollbar* mScrollbar;
BOOL mAllowMultipleSelection;
BOOL mAllowKeyboardMovement;
@@ -500,7 +600,7 @@ protected:
BOOL mCommitOnSelectionChange;
BOOL mSelectionChanged;
BOOL mCanSelect;
- BOOL mDisplayColumnButtons;
+ BOOL mDisplayColumnHeaders;
BOOL mCollapseEmptyColumns;
BOOL mIsPopup;
@@ -544,8 +644,9 @@ protected:
S32 mNumDynamicWidthColumns;
S32 mTotalStaticColumnWidth;
- U32 mSortColumn;
- BOOL mSortAscending;
+ S32 mSortColumn;
+ BOOL mSortAscending;
+ BOOL mSorted;
std::map mColumns;
std::vector mColumnsIndexed;
diff --git a/linden/indra/llui/llslider.cpp b/linden/indra/llui/llslider.cpp
index 20d77bf..8c0d2a1 100644
--- a/linden/indra/llui/llslider.cpp
+++ b/linden/indra/llui/llslider.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -117,7 +118,7 @@ F32 LLSlider::getValueF32() const
BOOL LLSlider::handleHover(S32 x, S32 y, MASK mask)
{
- if( gFocusMgr.getMouseCapture() == this )
+ if( hasMouseCapture() )
{
S32 left_edge = THUMB_WIDTH/2;
S32 right_edge = mRect.getWidth() - (THUMB_WIDTH/2);
@@ -144,9 +145,9 @@ BOOL LLSlider::handleMouseUp(S32 x, S32 y, MASK mask)
{
BOOL handled = FALSE;
- if( gFocusMgr.getMouseCapture() == this )
+ if( hasMouseCapture() )
{
- gFocusMgr.setMouseCapture( NULL, NULL );
+ gFocusMgr.setMouseCapture( NULL );
if( mMouseUpCallback )
{
@@ -194,7 +195,7 @@ BOOL LLSlider::handleMouseDown(S32 x, S32 y, MASK mask)
// Start dragging the thumb
// No handler needed for focus lost since this class has no state that depends on it.
- gFocusMgr.setMouseCapture( this, NULL );
+ gFocusMgr.setMouseCapture( this );
mDragStartThumbRect = mThumbRect;
}
make_ui_sound("UISndClick");
@@ -261,12 +262,12 @@ void LLSlider::draw()
if (!thumb_imagep)
{
gl_rect_2d(mThumbRect, mThumbCenterColor, TRUE);
- if (gFocusMgr.getMouseCapture() == this)
+ if (hasMouseCapture())
{
gl_rect_2d(mDragStartThumbRect, mThumbCenterColor % opacity, FALSE);
}
}
- else if( gFocusMgr.getMouseCapture() == this )
+ else if( hasMouseCapture() )
{
gl_draw_scaled_image_with_border(mDragStartThumbRect.mLeft, mDragStartThumbRect.mBottom, 16, 16, mDragStartThumbRect.getWidth(), mDragStartThumbRect.getHeight(),
thumb_imagep, mThumbCenterColor % 0.3f, TRUE);
diff --git a/linden/indra/llui/llslider.h b/linden/indra/llui/llslider.h
index 1cf1a90..4f42a56 100644
--- a/linden/indra/llui/llslider.h
+++ b/linden/indra/llui/llslider.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llsliderctrl.cpp b/linden/indra/llui/llsliderctrl.cpp
index c62ec9a..9a67bca 100644
--- a/linden/indra/llui/llsliderctrl.cpp
+++ b/linden/indra/llui/llsliderctrl.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -205,7 +206,7 @@ void LLSliderCtrl::clear()
BOOL LLSliderCtrl::isMouseHeldDown()
{
- return gFocusMgr.getMouseCapture() == mSlider;
+ return mSlider->hasMouseCapture();
}
void LLSliderCtrl::updateText()
@@ -319,7 +320,7 @@ void LLSliderCtrl::onSliderCommit( LLUICtrl* caller, void *userdata )
void LLSliderCtrl::setEnabled(BOOL b)
{
- LLUICtrl::setEnabled( b );
+ LLView::setEnabled( b );
if( mLabelBox )
{
diff --git a/linden/indra/llui/llsliderctrl.h b/linden/indra/llui/llsliderctrl.h
index baa0c42..26c9dee 100644
--- a/linden/indra/llui/llsliderctrl.h
+++ b/linden/indra/llui/llsliderctrl.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llspinctrl.cpp b/linden/indra/llui/llspinctrl.cpp
index 1f33279..668ddfa 100644
--- a/linden/indra/llui/llspinctrl.cpp
+++ b/linden/indra/llui/llspinctrl.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -142,6 +143,23 @@ LLSpinCtrl::~LLSpinCtrl()
}
+F32 clamp_precision(F32 value, S32 decimal_precision)
+{
+ // pow() isn't perfect
+
+ F64 clamped_value = value;
+ for (S32 i = 0; i < decimal_precision; i++)
+ clamped_value *= 10.0;
+
+ clamped_value = llround((F32)clamped_value);
+
+ for (S32 i = 0; i < decimal_precision; i++)
+ clamped_value /= 10.0;
+
+ return (F32)clamped_value;
+}
+
+
// static
void LLSpinCtrl::onUpBtn( void *userdata )
{
@@ -150,6 +168,7 @@ void LLSpinCtrl::onUpBtn( void *userdata )
{
// use getValue()/setValue() to force reload from/to control
F32 val = (F32)self->getValue().asReal() + self->mIncrement;
+ val = clamp_precision(val, self->mPrecision);
val = llmin( val, self->mMaxValue );
if( self->mValidateCallback )
@@ -182,6 +201,7 @@ void LLSpinCtrl::onDownBtn( void *userdata )
if( self->getEnabled() )
{
F32 val = (F32)self->getValue().asReal() - self->mIncrement;
+ val = clamp_precision(val, self->mPrecision);
val = llmax( val, self->mMinValue );
if( self->mValidateCallback )
@@ -243,12 +263,13 @@ void LLSpinCtrl::clear()
}
+
void LLSpinCtrl::updateEditor()
{
LLLocale locale(LLLocale::USER_LOCALE);
// Don't display very small negative values as -0.000
- F32 displayed_value = (F32)floor(getValue().asReal() * pow(10.0, (F64)mPrecision) + 0.5) / (F32)pow(10.0, (F64)mPrecision);
+ F32 displayed_value = clamp_precision((F32)getValue().asReal(), mPrecision);
// if( S32( displayed_value * pow( 10, mPrecision ) ) == 0 )
// {
@@ -320,7 +341,7 @@ void LLSpinCtrl::setFocus(BOOL b)
void LLSpinCtrl::setEnabled(BOOL b)
{
- LLUICtrl::setEnabled( b );
+ LLView::setEnabled( b );
mEditor->setEnabled( b );
}
@@ -335,8 +356,8 @@ void LLSpinCtrl::setTentative(BOOL b)
BOOL LLSpinCtrl::isMouseHeldDown()
{
return
- gFocusMgr.getMouseCapture() == mDownBtn ||
- gFocusMgr.getMouseCapture() == mUpBtn;
+ mDownBtn->hasMouseCapture()
+ || mUpBtn->hasMouseCapture();
}
void LLSpinCtrl::onCommit()
diff --git a/linden/indra/llui/llspinctrl.h b/linden/indra/llui/llspinctrl.h
index 46776ed..dcc305e 100644
--- a/linden/indra/llui/llspinctrl.h
+++ b/linden/indra/llui/llspinctrl.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llstyle.cpp b/linden/indra/llui/llstyle.cpp
index aaacb46..1efb4cc 100644
--- a/linden/indra/llui/llstyle.cpp
+++ b/linden/indra/llui/llstyle.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llstyle.h b/linden/indra/llui/llstyle.h
index 424db40..e6e88e7 100644
--- a/linden/indra/llui/llstyle.h
+++ b/linden/indra/llui/llstyle.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/lltabcontainer.cpp b/linden/indra/llui/lltabcontainer.cpp
index 4687414..db09717 100644
--- a/linden/indra/llui/lltabcontainer.cpp
+++ b/linden/indra/llui/lltabcontainer.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -476,6 +477,24 @@ void LLTabContainerCommon::onPrevBtn( void* userdata )
self->mScrolled = FALSE;
}
+
+void LLTabContainerCommon::onJumpFirstBtn( void* userdata )
+{
+ LLTabContainer* self = (LLTabContainer*) userdata;
+
+ self->mScrollPos = 0;
+
+}
+
+
+void LLTabContainerCommon::onJumpLastBtn( void* userdata )
+{
+ LLTabContainer* self = (LLTabContainer*) userdata;
+
+ self->mScrollPos = self->mMaxScrollPos;
+}
+
+
// static
void LLTabContainerCommon::onPrevBtnHeld( void* userdata )
{
@@ -692,6 +711,8 @@ LLTabContainer::LLTabContainer(
LLTabContainerCommon(name, rect, pos, close_callback, callback_userdata, bordered),
mLeftArrowBtn(NULL),
mRightArrowBtn(NULL),
+ mJumpLeftArrowBtn(NULL),
+ mJumpRightArrowBtn(NULL),
mRightTabBtnOffset(0),
mMinTabWidth(TABCNTR_TAB_MIN_WIDTH),
mMaxTabWidth(TABCNTR_TAB_MAX_WIDTH),
@@ -708,6 +729,8 @@ LLTabContainer::LLTabContainer(
LLTabContainerCommon(name, rect_control, pos, close_callback, callback_userdata, bordered),
mLeftArrowBtn(NULL),
mRightArrowBtn(NULL),
+ mJumpLeftArrowBtn(NULL),
+ mJumpRightArrowBtn(NULL),
mRightTabBtnOffset(0),
mMinTabWidth(TABCNTR_TAB_MIN_WIDTH),
mMaxTabWidth(TABCNTR_TAB_MAX_WIDTH),
@@ -739,14 +762,35 @@ void LLTabContainer::initButtons()
S32 btn_top = (mTabPosition == TOP ) ? mRect.getHeight() - mTopBorderHeight : TABCNTR_ARROW_BTN_SIZE + 1;
LLRect left_arrow_btn_rect;
- left_arrow_btn_rect.setLeftTopAndSize( LLPANEL_BORDER_WIDTH+1, btn_top + arrow_fudge, TABCNTR_ARROW_BTN_SIZE, TABCNTR_ARROW_BTN_SIZE );
+ left_arrow_btn_rect.setLeftTopAndSize( LLPANEL_BORDER_WIDTH+1+TABCNTR_ARROW_BTN_SIZE, btn_top + arrow_fudge, TABCNTR_ARROW_BTN_SIZE, TABCNTR_ARROW_BTN_SIZE );
+
+ LLRect jump_left_arrow_btn_rect;
+ jump_left_arrow_btn_rect.setLeftTopAndSize( LLPANEL_BORDER_WIDTH+1, btn_top + arrow_fudge, TABCNTR_ARROW_BTN_SIZE, TABCNTR_ARROW_BTN_SIZE );
S32 right_pad = TABCNTR_ARROW_BTN_SIZE + LLPANEL_BORDER_WIDTH + 1;
+
LLRect right_arrow_btn_rect;
- right_arrow_btn_rect.setLeftTopAndSize( mRect.getWidth() - mRightTabBtnOffset - right_pad,
+ right_arrow_btn_rect.setLeftTopAndSize( mRect.getWidth() - mRightTabBtnOffset - right_pad - TABCNTR_ARROW_BTN_SIZE,
btn_top + arrow_fudge,
TABCNTR_ARROW_BTN_SIZE, TABCNTR_ARROW_BTN_SIZE );
+
+ LLRect jump_right_arrow_btn_rect;
+ jump_right_arrow_btn_rect.setLeftTopAndSize( mRect.getWidth() - mRightTabBtnOffset - right_pad,
+ btn_top + arrow_fudge,
+ TABCNTR_ARROW_BTN_SIZE, TABCNTR_ARROW_BTN_SIZE );
+
+ out_id = "UIImgBtnJumpLeftOutUUID";
+ in_id = "UIImgBtnJumpLeftInUUID";
+ mJumpLeftArrowBtn = new LLButton(
+ "Jump Left Arrow", jump_left_arrow_btn_rect,
+ out_id, in_id, "",
+ &LLTabContainer::onJumpFirstBtn, this, LLFontGL::sSansSerif );
+ mJumpLeftArrowBtn->setFollowsLeft();
+ mJumpLeftArrowBtn->setSaveToXML(false);
+ mJumpLeftArrowBtn->setTabStop(FALSE);
+ addChild(mJumpLeftArrowBtn);
+
out_id = "UIImgBtnScrollLeftOutUUID";
in_id = "UIImgBtnScrollLeftInUUID";
mLeftArrowBtn = new LLButton(
@@ -758,6 +802,18 @@ void LLTabContainer::initButtons()
mLeftArrowBtn->setSaveToXML(false);
mLeftArrowBtn->setTabStop(FALSE);
addChild(mLeftArrowBtn);
+
+ out_id = "UIImgBtnJumpRightOutUUID";
+ in_id = "UIImgBtnJumpRightInUUID";
+ mJumpRightArrowBtn = new LLButton(
+ "Jump Right Arrow", jump_right_arrow_btn_rect,
+ out_id, in_id, "",
+ &LLTabContainer::onJumpLastBtn, this,
+ LLFontGL::sSansSerif);
+ mJumpRightArrowBtn->setFollowsRight();
+ mJumpRightArrowBtn->setSaveToXML(false);
+ mJumpRightArrowBtn->setTabStop(FALSE);
+ addChild(mJumpRightArrowBtn);
out_id = "UIImgBtnScrollRightOutUUID";
in_id = "UIImgBtnScrollRightInUUID";
@@ -772,15 +828,20 @@ void LLTabContainer::initButtons()
mRightArrowBtn->setTabStop(FALSE);
addChild(mRightArrowBtn);
+
if( mTabPosition == TOP )
{
mRightArrowBtn->setFollowsTop();
mLeftArrowBtn->setFollowsTop();
+ mJumpLeftArrowBtn->setFollowsTop();
+ mJumpRightArrowBtn->setFollowsTop();
}
else
{
mRightArrowBtn->setFollowsBottom();
mLeftArrowBtn->setFollowsBottom();
+ mJumpLeftArrowBtn->setFollowsBottom();
+ mJumpRightArrowBtn->setFollowsBottom();
}
// set default tab group to be panel contents
@@ -971,7 +1032,7 @@ void LLTabContainer::updateMaxScrollPos()
if( tab_space > available_space )
{
- S32 available_width_with_arrows = mRect.getWidth() - mRightTabBtnOffset - 2 * (LLPANEL_BORDER_WIDTH + TABCNTR_ARROW_BTN_SIZE + 1);
+ S32 available_width_with_arrows = mRect.getWidth() - mRightTabBtnOffset - 2 * (LLPANEL_BORDER_WIDTH + TABCNTR_ARROW_BTN_SIZE + TABCNTR_ARROW_BTN_SIZE + 1);
// subtract off reserved portion on left
available_width_with_arrows -= TABCNTR_TAB_PARTIAL_WIDTH;
@@ -1002,7 +1063,7 @@ void LLTabContainer::updateMaxScrollPos()
void LLTabContainer::commitHoveredButton(S32 x, S32 y)
{
- if (gFocusMgr.getMouseCapture() == this)
+ if (hasMouseCapture())
{
for(tuple_list_t::iterator iter = mTabList.begin(); iter != mTabList.end(); ++iter)
{
@@ -1078,7 +1139,7 @@ BOOL LLTabContainer::selectTab(S32 which)
}
else
{
- S32 available_width_with_arrows = mRect.getWidth() - mRightTabBtnOffset - 2 * (LLPANEL_BORDER_WIDTH + TABCNTR_ARROW_BTN_SIZE + 1);
+ S32 available_width_with_arrows = mRect.getWidth() - mRightTabBtnOffset - 2 * (LLPANEL_BORDER_WIDTH + TABCNTR_ARROW_BTN_SIZE + TABCNTR_ARROW_BTN_SIZE + 1);
S32 running_tab_width = tuple->mButton->getRect().getWidth();
S32 j = i - 1;
S32 min_scroll_pos = i;
@@ -1120,7 +1181,7 @@ void LLTabContainer::draw()
S32 cur_scroll_pos = mScrollPos;
if (cur_scroll_pos > 0)
{
- S32 available_width_with_arrows = mRect.getWidth() - mRightTabBtnOffset - 2 * (LLPANEL_BORDER_WIDTH + TABCNTR_ARROW_BTN_SIZE + 1);
+ S32 available_width_with_arrows = mRect.getWidth() - mRightTabBtnOffset - 2 * (LLPANEL_BORDER_WIDTH + TABCNTR_ARROW_BTN_SIZE + TABCNTR_ARROW_BTN_SIZE + 1);
for(tuple_list_t::iterator iter = mTabList.begin(); iter != mTabList.end(); ++iter)
{
if (cur_scroll_pos == 0)
@@ -1141,11 +1202,13 @@ void LLTabContainer::draw()
if( getVisible() )
{
BOOL has_scroll_arrows = (mMaxScrollPos > 0) || (mScrollPosPixels > 0);
+ mJumpLeftArrowBtn->setVisible( has_scroll_arrows );
+ mJumpRightArrowBtn->setVisible( has_scroll_arrows );
mLeftArrowBtn->setVisible( has_scroll_arrows );
mRightArrowBtn->setVisible( has_scroll_arrows );
// Set the leftmost position of the tab buttons.
- S32 left = LLPANEL_BORDER_WIDTH + (has_scroll_arrows ? TABCNTR_ARROW_BTN_SIZE : TABCNTR_TAB_H_PAD);
+ S32 left = LLPANEL_BORDER_WIDTH + (has_scroll_arrows ? (TABCNTR_ARROW_BTN_SIZE * 2) : TABCNTR_TAB_H_PAD);
left -= mScrollPosPixels;
// Hide all the buttons
@@ -1234,7 +1297,19 @@ BOOL LLTabContainer::handleMouseDown( S32 x, S32 y, MASK mask )
BOOL has_scroll_arrows = (mMaxScrollPos > 0);
if (has_scroll_arrows)
- {
+ {
+ if (mJumpLeftArrowBtn->getRect().pointInRect(x, y))
+ {
+ S32 local_x = x - mJumpLeftArrowBtn->getRect().mLeft;
+ S32 local_y = y - mJumpLeftArrowBtn->getRect().mBottom;
+ handled = mJumpLeftArrowBtn->handleMouseDown(local_x, local_y, mask);
+ }
+ if (mJumpRightArrowBtn->getRect().pointInRect(x, y))
+ {
+ S32 local_x = x - mJumpRightArrowBtn->getRect().mLeft;
+ S32 local_y = y - mJumpRightArrowBtn->getRect().mBottom;
+ handled = mJumpRightArrowBtn->handleMouseDown(local_x, local_y, mask);
+ }
if (mLeftArrowBtn->getRect().pointInRect(x, y))
{
S32 local_x = x - mLeftArrowBtn->getRect().mLeft;
@@ -1256,14 +1331,14 @@ BOOL LLTabContainer::handleMouseDown( S32 x, S32 y, MASK mask )
if (mTabList.size() > 0)
{
LLTabTuple* firsttuple = mTabList[0];
- LLRect tab_rect(has_scroll_arrows ? mLeftArrowBtn->getRect().mRight : mLeftArrowBtn->getRect().mLeft,
+ LLRect tab_rect(has_scroll_arrows ? mLeftArrowBtn->getRect().mRight : mJumpLeftArrowBtn->getRect().mLeft,
firsttuple->mButton->getRect().mTop,
- has_scroll_arrows ? mRightArrowBtn->getRect().mLeft : mRightArrowBtn->getRect().mRight,
+ has_scroll_arrows ? mRightArrowBtn->getRect().mLeft : mJumpRightArrowBtn->getRect().mRight,
firsttuple->mButton->getRect().mBottom );
if( tab_rect.pointInRect( x, y ) )
{
LLButton* tab_button = mTabList[getCurrentPanelIndex()]->mButton;
- gFocusMgr.setMouseCapture(this, NULL);
+ gFocusMgr.setMouseCapture(this);
gFocusMgr.setKeyboardFocus(tab_button, NULL);
}
}
@@ -1276,7 +1351,19 @@ BOOL LLTabContainer::handleHover( S32 x, S32 y, MASK mask )
BOOL has_scroll_arrows = (mMaxScrollPos > 0);
if (has_scroll_arrows)
- {
+ {
+ if (mJumpLeftArrowBtn->getRect().pointInRect(x, y))
+ {
+ S32 local_x = x - mJumpLeftArrowBtn->getRect().mLeft;
+ S32 local_y = y - mJumpLeftArrowBtn->getRect().mBottom;
+ handled = mJumpLeftArrowBtn->handleHover(local_x, local_y, mask);
+ }
+ if (mJumpRightArrowBtn->getRect().pointInRect(x, y))
+ {
+ S32 local_x = x - mJumpRightArrowBtn->getRect().mLeft;
+ S32 local_y = y - mJumpRightArrowBtn->getRect().mBottom;
+ handled = mJumpRightArrowBtn->handleHover(local_x, local_y, mask);
+ }
if (mLeftArrowBtn->getRect().pointInRect(x, y))
{
S32 local_x = x - mLeftArrowBtn->getRect().mLeft;
@@ -1306,6 +1393,18 @@ BOOL LLTabContainer::handleMouseUp( S32 x, S32 y, MASK mask )
if (has_scroll_arrows)
{
+ if (mJumpLeftArrowBtn->getRect().pointInRect(x, y))
+ {
+ S32 local_x = x - mJumpLeftArrowBtn->getRect().mLeft;
+ S32 local_y = y - mJumpLeftArrowBtn->getRect().mBottom;
+ handled = mJumpLeftArrowBtn->handleMouseUp(local_x, local_y, mask);
+ }
+ if (mJumpRightArrowBtn->getRect().pointInRect(x, y))
+ {
+ S32 local_x = x - mJumpRightArrowBtn->getRect().mLeft;
+ S32 local_y = y - mJumpRightArrowBtn->getRect().mBottom;
+ handled = mJumpRightArrowBtn->handleMouseUp(local_x, local_y, mask);
+ }
if (mLeftArrowBtn->getRect().pointInRect(x, y))
{
S32 local_x = x - mLeftArrowBtn->getRect().mLeft;
@@ -1326,7 +1425,7 @@ BOOL LLTabContainer::handleMouseUp( S32 x, S32 y, MASK mask )
commitHoveredButton(x, y);
LLPanel* cur_panel = getCurrentPanel();
- if (gFocusMgr.getMouseCapture() == this)
+ if (hasMouseCapture())
{
if (cur_panel)
{
@@ -1337,7 +1436,7 @@ BOOL LLTabContainer::handleMouseUp( S32 x, S32 y, MASK mask )
mTabList[getCurrentPanelIndex()]->mButton->setFocus(TRUE);
}
}
- gFocusMgr.setMouseCapture(NULL, NULL);
+ gFocusMgr.setMouseCapture(NULL);
}
return handled;
}
@@ -1351,7 +1450,7 @@ BOOL LLTabContainer::handleToolTip( S32 x, S32 y, LLString& msg, LLRect* sticky_
BOOL has_scroll_arrows = (mMaxScrollPos > 0);
LLRect clip(
- has_scroll_arrows ? mLeftArrowBtn->getRect().mRight : mLeftArrowBtn->getRect().mLeft,
+ has_scroll_arrows ? mJumpLeftArrowBtn->getRect().mRight : mJumpLeftArrowBtn->getRect().mLeft,
firsttuple->mButton->getRect().mTop,
has_scroll_arrows ? mRightArrowBtn->getRect().mLeft : mRightArrowBtn->getRect().mRight,
0 );
@@ -1457,6 +1556,18 @@ BOOL LLTabContainer::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDrag
if (has_scroll_arrows)
{
+ if (mJumpLeftArrowBtn->getRect().pointInRect(x, y))
+ {
+ S32 local_x = x - mJumpLeftArrowBtn->getRect().mLeft;
+ S32 local_y = y - mJumpLeftArrowBtn->getRect().mBottom;
+ mJumpLeftArrowBtn->handleHover(local_x, local_y, mask);
+ }
+ if (mJumpRightArrowBtn->getRect().pointInRect(x, y))
+ {
+ S32 local_x = x - mJumpRightArrowBtn->getRect().mLeft;
+ S32 local_y = y - mJumpRightArrowBtn->getRect().mBottom;
+ mJumpRightArrowBtn->handleHover(local_x, local_y, mask);
+ }
if (mLeftArrowBtn->getRect().pointInRect(x, y))
{
S32 local_x = x - mLeftArrowBtn->getRect().mLeft;
diff --git a/linden/indra/llui/lltabcontainer.h b/linden/indra/llui/lltabcontainer.h
index c3146a1..5fe6bc5 100644
--- a/linden/indra/llui/lltabcontainer.h
+++ b/linden/indra/llui/lltabcontainer.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -128,6 +129,8 @@ public:
static void onNextBtnHeld(void* userdata);
static void onPrevBtn(void* userdata);
static void onPrevBtnHeld(void* userdata);
+ static void onJumpFirstBtn( void* userdata );
+ static void onJumpLastBtn( void* userdata );
virtual void setRightTabBtnOffset( S32 offset ) { }
virtual void setPanelTitle(S32 index, const LLString& title) { }
@@ -242,7 +245,9 @@ public:
protected:
LLButton* mLeftArrowBtn;
+ LLButton* mJumpLeftArrowBtn;
LLButton* mRightArrowBtn;
+ LLButton* mJumpRightArrowBtn;
S32 mRightTabBtnOffset; // Extra room to the right of the tab buttons.
diff --git a/linden/indra/llui/lltabcontainervertical.cpp b/linden/indra/llui/lltabcontainervertical.cpp
index 121adf1..a921b4b 100644
--- a/linden/indra/llui/lltabcontainervertical.cpp
+++ b/linden/indra/llui/lltabcontainervertical.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -279,7 +280,7 @@ void LLTabContainerVertical::updateMaxScrollPos()
void LLTabContainerVertical::commitHoveredButton(S32 x, S32 y)
{
- if (gFocusMgr.getMouseCapture() == this)
+ if (hasMouseCapture())
{
for(std::vector::iterator iter = mTabList.begin(); iter != mTabList.end(); ++iter)
{
@@ -473,7 +474,7 @@ BOOL LLTabContainerVertical::handleMouseDown( S32 x, S32 y, MASK mask )
if( tab_rect.pointInRect( x, y ) )
{
LLButton* tab_button = mTabList[getCurrentPanelIndex()]->mButton;
- gFocusMgr.setMouseCapture(this, NULL);
+ gFocusMgr.setMouseCapture(this);
gFocusMgr.setKeyboardFocus(tab_button, NULL);
}
}
@@ -536,7 +537,7 @@ BOOL LLTabContainerVertical::handleMouseUp( S32 x, S32 y, MASK mask )
commitHoveredButton(x, y);
LLPanel* cur_panel = getCurrentPanel();
- if (gFocusMgr.getMouseCapture() == this)
+ if (hasMouseCapture())
{
if (cur_panel)
{
@@ -545,7 +546,7 @@ BOOL LLTabContainerVertical::handleMouseUp( S32 x, S32 y, MASK mask )
mTabList[getCurrentPanelIndex()]->mButton->setFocus(TRUE);
}
}
- gFocusMgr.setMouseCapture(NULL, NULL);
+ gFocusMgr.setMouseCapture(NULL);
}
return handled;
diff --git a/linden/indra/llui/lltabcontainervertical.h b/linden/indra/llui/lltabcontainervertical.h
index 81b2331..77817c2 100644
--- a/linden/indra/llui/lltabcontainervertical.h
+++ b/linden/indra/llui/lltabcontainervertical.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/lltextbox.cpp b/linden/indra/llui/lltextbox.cpp
index d70f223..884d638 100644
--- a/linden/indra/llui/lltextbox.cpp
+++ b/linden/indra/llui/lltextbox.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -113,7 +114,7 @@ BOOL LLTextBox::handleMouseDown(S32 x, S32 y, MASK mask)
handled = TRUE;
// Route future Mouse messages here preemptively. (Release on mouse up.)
- gFocusMgr.setMouseCapture( this, NULL );
+ gFocusMgr.setMouseCapture( this );
if (mSoundFlags & MOUSE_DOWN)
{
@@ -134,12 +135,12 @@ BOOL LLTextBox::handleMouseUp(S32 x, S32 y, MASK mask)
// HACK: Only do this if there actually is a click callback, so that
// overly large text boxes in the older UI won't start eating clicks.
if (mClickedCallback
- && this == gFocusMgr.getMouseCapture())
+ && hasMouseCapture())
{
handled = TRUE;
// Release the mouse
- gFocusMgr.setMouseCapture( NULL, NULL );
+ gFocusMgr.setMouseCapture( NULL );
if (mSoundFlags & MOUSE_UP)
{
@@ -347,7 +348,7 @@ void LLTextBox::draw()
void LLTextBox::reshape(S32 width, S32 height, BOOL called_from_parent)
{
// reparse line lengths
- setText(mText);
+ setLineLengths();
LLView::reshape(width, height, called_from_parent);
}
diff --git a/linden/indra/llui/lltextbox.h b/linden/indra/llui/lltextbox.h
index 7e445e1..45d6acb 100644
--- a/linden/indra/llui/lltextbox.h
+++ b/linden/indra/llui/lltextbox.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/lltexteditor.cpp b/linden/indra/llui/lltexteditor.cpp
index 8f22545..787eba5 100644
--- a/linden/indra/llui/lltexteditor.cpp
+++ b/linden/indra/llui/lltexteditor.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -812,6 +813,31 @@ LLWString LLTextEditor::getWSubString(S32 pos, S32 len)
return mWText.substr(pos, len);
}
+LLTextSegment* LLTextEditor::getCurrentSegment()
+{
+ return getSegmentAtOffset(mCursorPos);
+}
+
+LLTextSegment* LLTextEditor::getPreviousSegment()
+{
+ // find segment index at character to left of cursor (or rightmost edge of selection)
+ S32 idx = llmax(0, getSegmentIdxAtOffset(mCursorPos) - 1);
+ return idx >= 0 ? mSegments[idx] : NULL;
+}
+
+void LLTextEditor::getSelectedSegments(std::vector& segments)
+{
+ S32 left = hasSelection() ? llmin(mSelectionStart, mSelectionEnd) : mCursorPos;
+ S32 right = hasSelection() ? llmax(mSelectionStart, mSelectionEnd) : mCursorPos;
+ S32 first_idx = llmax(0, getSegmentIdxAtOffset(left));
+ S32 last_idx = llmax(0, first_idx, getSegmentIdxAtOffset(right));
+
+ for (S32 idx = first_idx; idx <= last_idx; ++idx)
+ {
+ segments.push_back(mSegments[idx]);
+ }
+}
+
S32 LLTextEditor::getCursorPosFromLocalCoord( S32 local_x, S32 local_y, BOOL round )
{
// If round is true, if the position is on the right half of a character, the cursor
@@ -1201,7 +1227,7 @@ BOOL LLTextEditor::handleMouseDown(S32 x, S32 y, MASK mask)
setCursorAtLocalPos( x, y, TRUE );
startSelection();
}
- gFocusMgr.setMouseCapture( this, &LLTextEditor::onMouseCaptureLost );
+ gFocusMgr.setMouseCapture( this );
}
handled = TRUE;
@@ -1227,7 +1253,7 @@ BOOL LLTextEditor::handleHover(S32 x, S32 y, MASK mask)
mHoverSegment = NULL;
if( getVisible() )
{
- if(gFocusMgr.getMouseCapture() == this )
+ if(hasMouseCapture() )
{
if( mIsSelecting )
{
@@ -1360,9 +1386,9 @@ BOOL LLTextEditor::handleMouseUp(S32 x, S32 y, MASK mask)
// Delay cursor flashing
mKeystrokeTimer.reset();
- if( gFocusMgr.getMouseCapture() == this )
+ if( hasMouseCapture() )
{
- gFocusMgr.setMouseCapture( NULL, NULL );
+ gFocusMgr.setMouseCapture( NULL );
handled = TRUE;
}
@@ -2473,6 +2499,8 @@ void LLTextEditor::onFocusLost()
// Make sure cursor is shown again
getWindow()->showCursorFromMouseMove();
+
+ LLUICtrl::onFocusLost();
}
void LLTextEditor::setEnabled(BOOL enabled)
@@ -3753,11 +3781,9 @@ S32 LLTextEditor::getSegmentIdxAtOffset(S32 offset)
}
}
-//static
-void LLTextEditor::onMouseCaptureLost( LLMouseHandler* old_captor )
+void LLTextEditor::onMouseCaptureLost()
{
- LLTextEditor* self = (LLTextEditor*) old_captor;
- self->endSelection();
+ endSelection();
}
void LLTextEditor::setOnScrollEndCallback(void (*callback)(void*), void* userdata)
diff --git a/linden/indra/llui/lltexteditor.h b/linden/indra/llui/lltexteditor.h
index e5ba8ca..32375be 100644
--- a/linden/indra/llui/lltexteditor.h
+++ b/linden/indra/llui/lltexteditor.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -94,6 +95,8 @@ public:
virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
EDragAndDropType cargo_type, void *cargo_data,
EAcceptance *accept, LLString& tooltip_msg);
+ virtual void onMouseCaptureLost();
+
// view overrides
virtual void reshape(S32 width, S32 height, BOOL called_from_parent);
@@ -209,7 +212,6 @@ public:
void setHandleEditKeysDirectly( BOOL b ) { mHandleEditKeysDirectly = b; }
// Callbacks
- static void onMouseCaptureLost( LLMouseHandler* old_captor );
static void setLinkColor(LLColor4 color) { mLinkColor = color; }
static void setURLCallbacks( void (*callback1) (const char* url),
BOOL (*callback2) (LLString url) )
@@ -239,6 +241,10 @@ public:
llwchar getWChar(S32 pos);
LLWString getWSubString(S32 pos, S32 len);
+ LLTextSegment* getCurrentSegment();
+ LLTextSegment* getPreviousSegment();
+ void getSelectedSegments(std::vector& segments);
+
protected:
S32 getLength() const;
void getSegmentAndOffset( S32 startpos, S32* segidxp, S32* offsetp );
diff --git a/linden/indra/llui/llui.cpp b/linden/indra/llui/llui.cpp
index 61dede2..9d689b5 100644
--- a/linden/indra/llui/llui.cpp
+++ b/linden/indra/llui/llui.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -74,6 +75,7 @@ LLImageProviderInterface* LLUI::sImageProvider = NULL;
LLUIAudioCallback LLUI::sAudioCallback = NULL;
LLVector2 LLUI::sGLScaleFactor(1.f, 1.f);
LLWindow* LLUI::sWindow = NULL;
+LLHtmlHelp* LLUI::sHtmlHelp = NULL;
BOOL LLUI::sShowXUINames = FALSE;
//
// Functions
@@ -406,7 +408,7 @@ void gl_corners_2d(S32 left, S32 top, S32 right, S32 bottom, S32 length, F32 max
void gl_draw_image( S32 x, S32 y, LLImageGL* image, const LLColor4& color )
{
- gl_draw_scaled_rotated_image( x, y, image->getWidth(), image->getHeight(), 0.f, image, color );
+ gl_draw_scaled_rotated_image( x, y, image->getWidth(0), image->getHeight(0), 0.f, image, color );
}
void gl_draw_scaled_image(S32 x, S32 y, S32 width, S32 height, LLImageGL* image, const LLColor4& color)
@@ -458,8 +460,8 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 border_width, S32 border
glColor4fv(color.mV);
- F32 border_width_fraction = (F32)border_width / (F32)image->getWidth();
- F32 border_height_fraction = (F32)border_height / (F32)image->getHeight();
+ F32 border_width_fraction = (F32)border_width / (F32)image->getWidth(0);
+ F32 border_height_fraction = (F32)border_height / (F32)image->getHeight(0);
glBegin(GL_QUADS);
{
@@ -592,7 +594,7 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 border_width, S32 border
void gl_draw_rotated_image(S32 x, S32 y, F32 degrees, LLImageGL* image, const LLColor4& color)
{
- gl_draw_scaled_rotated_image( x, y, image->getWidth(), image->getHeight(), degrees, image, color );
+ gl_draw_scaled_rotated_image( x, y, image->getWidth(0), image->getHeight(0), degrees, image, color );
}
void gl_draw_scaled_rotated_image(S32 x, S32 y, S32 width, S32 height, F32 degrees, LLImageGL* image, const LLColor4& color)
@@ -1742,6 +1744,10 @@ LLString LLUI::locateSkin(const LLString& filename)
if (!gDirUtilp->fileExists(found_file))
{
LLString localization(sConfigGroup->getString("Language"));
+ if(localization == "default")
+ {
+ localization = sConfigGroup->getString("SystemLanguage");
+ }
LLString local_skin = "xui" + slash + localization + slash + filename;
found_file = gDirUtilp->getExpandedFilename(LL_PATH_SKINS, local_skin);
}
@@ -1781,3 +1787,9 @@ LLUUID LLUI::findAssetUUIDByName(const LLString &asset_name)
}
return LLUUID( foundValue );
}
+
+// static
+void LLUI::setHtmlHelp(LLHtmlHelp* html_help)
+{
+ LLUI::sHtmlHelp = html_help;
+}
diff --git a/linden/indra/llui/llui.h b/linden/indra/llui/llui.h
index cd57990..6b8a86a 100644
--- a/linden/indra/llui/llui.h
+++ b/linden/indra/llui/llui.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -34,6 +35,7 @@
#include "llcontrol.h"
#include "llrect.h"
#include "llcoord.h"
+#include "llhtmlhelp.h"
class LLColor4;
class LLVector3;
@@ -170,6 +172,7 @@ public:
static void setLineWidth(F32 width);
static LLUUID findAssetUUIDByName(const LLString& name);
static LLVector2 getWindowSize();
+ static void setHtmlHelp(LLHtmlHelp* html_help);
public:
static LLControlGroup* sConfigGroup;
static LLControlGroup* sColorsGroup;
@@ -179,6 +182,7 @@ public:
static LLVector2 sGLScaleFactor;
static LLWindow* sWindow;
static BOOL sShowXUINames;
+ static LLHtmlHelp* sHtmlHelp;
};
// UI widgets
diff --git a/linden/indra/llui/llui.vcproj b/linden/indra/llui/llui.vcproj
index e3d0da6..37428d2 100644
--- a/linden/indra/llui/llui.vcproj
+++ b/linden/indra/llui/llui.vcproj
@@ -310,6 +310,9 @@
RelativePath=".\llfocusmgr.h">
+
+
getString("Language");
+ if(language == "default")
+ {
+ language = LLUI::sConfigGroup->getString("SystemLanguage");
+ }
}
path_val_ui.setArg("[Language]", language);
LLString fullpath = app_dir + path_val_ui.getString();
diff --git a/linden/indra/llui/lluictrlfactory.h b/linden/indra/llui/lluictrlfactory.h
index b96dc5d..18b0ba9 100644
--- a/linden/indra/llui/lluictrlfactory.h
+++ b/linden/indra/llui/lluictrlfactory.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/lluistring.cpp b/linden/indra/llui/lluistring.cpp
index 5029082..49b6fca 100755
--- a/linden/indra/llui/lluistring.cpp
+++ b/linden/indra/llui/lluistring.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/lluistring.h b/linden/indra/llui/lluistring.h
index efd200a..37792aa 100755
--- a/linden/indra/llui/lluistring.h
+++ b/linden/indra/llui/lluistring.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/lluixmltags.h b/linden/indra/llui/lluixmltags.h
index 5de4d90..08c5f67 100644
--- a/linden/indra/llui/lluixmltags.h
+++ b/linden/indra/llui/lluixmltags.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llundo.cpp b/linden/indra/llui/llundo.cpp
index b662a1a..4e62bad 100644
--- a/linden/indra/llui/llundo.cpp
+++ b/linden/indra/llui/llundo.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llundo.h b/linden/indra/llui/llundo.h
index 10d556f..9a4bece 100644
--- a/linden/indra/llui/llundo.h
+++ b/linden/indra/llui/llundo.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llview.cpp b/linden/indra/llui/llview.cpp
index 13f1ddc..d150e10 100644
--- a/linden/indra/llui/llview.cpp
+++ b/linden/indra/llui/llview.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -174,18 +175,12 @@ LLView::~LLView()
gFocusMgr.removeKeyboardFocusWithoutCallback( this );
}
- if( gFocusMgr.getMouseCapture() == this )
+ if( hasMouseCapture() )
{
llwarns << "View holding mouse capture deleted: " << getName() << ". Mouse capture removed." << llendl;
gFocusMgr.removeMouseCaptureWithoutCallback( this );
}
- if( gFocusMgr.getTopView() == this )
- {
- llwarns << "View holding top view deleted: " << getName() << ". Top view removed." << llendl;
- gFocusMgr.removeTopViewWithoutCallback( this );
- }
-
sViewHandleMap.erase(mViewHandle);
deleteAllChildren();
@@ -752,9 +747,9 @@ void LLView::setEnabled(BOOL enabled)
// virtual
void LLView::setVisible(BOOL visible)
{
- if( !visible && (gFocusMgr.getTopView() == this) )
+ if( !visible && (gFocusMgr.getTopCtrl() == this) )
{
- gFocusMgr.setTopView( NULL, NULL );
+ gFocusMgr.setTopCtrl( NULL );
}
if ( mVisible != visible )
@@ -1053,7 +1048,14 @@ LLView* LLView::childrenHandleDragAndDrop(S32 x, S32 y, MASK mask,
return handled_view;
}
+void LLView::onMouseCaptureLost()
+{
+}
+BOOL LLView::hasMouseCapture()
+{
+ return gFocusMgr.getMouseCapture() == this;
+}
BOOL LLView::handleMouseUp(S32 x, S32 y, MASK mask)
{
@@ -1610,6 +1612,13 @@ const LLRect LLView::getLocalRect() const
return local_rect;
}
+const LLRect LLView::getLocalSnapRect() const
+{
+ LLRect local_snap_rect = getSnapRect();
+ local_snap_rect.translate(-mRect.mLeft, -mRect.mBottom);
+ return local_snap_rect;
+}
+
void LLView::updateRect()
{
if (mSpanChildren && mChildList.size())
@@ -2106,6 +2115,12 @@ const LLCtrlQuery & LLView::getFocusRootsQuery()
}
+void LLView::userSetShape(const LLRect& new_rect)
+{
+ reshape(new_rect.getWidth(), new_rect.getHeight());
+ translate(new_rect.mLeft - mRect.mLeft, new_rect.mBottom - mRect.mBottom);
+}
+
LLView* LLView::findSnapRect(LLRect& new_rect, const LLCoordGL& mouse_dir,
LLView::ESnapType snap_type, S32 threshold, S32 padding)
{
@@ -2127,8 +2142,7 @@ LLView* LLView::findSnapRect(LLRect& new_rect, const LLCoordGL& mouse_dir,
BOOL snapped_x = FALSE;
BOOL snapped_y = FALSE;
- LLRect parent_local_snap_rect = mParentView->getSnapRect();
- parent_local_snap_rect.translate(-mParentView->getRect().mLeft, -mParentView->getRect().mBottom);
+ LLRect parent_local_snap_rect = mParentView->getLocalSnapRect();
if (snap_type == SNAP_PARENT || snap_type == SNAP_PARENT_AND_SIBLINGS)
{
@@ -2303,8 +2317,7 @@ LLView* LLView::findSnapEdge(S32& new_edge_val, const LLCoordGL& mouse_dir, ESna
BOOL snapped_x = FALSE;
BOOL snapped_y = FALSE;
- LLRect parent_local_snap_rect = mParentView->getSnapRect();
- parent_local_snap_rect.translate(-mParentView->getRect().mLeft, -mParentView->getRect().mBottom);
+ LLRect parent_local_snap_rect = mParentView->getLocalSnapRect();
if (snap_type == SNAP_PARENT || snap_type == SNAP_PARENT_AND_SIBLINGS)
{
diff --git a/linden/indra/llui/llview.h b/linden/indra/llui/llview.h
index 3885789..cb9a35c 100644
--- a/linden/indra/llui/llview.h
+++ b/linden/indra/llui/llview.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -313,6 +314,7 @@ public:
const LLRect getScreenRect() const;
const LLRect getLocalRect() const;
virtual const LLRect getSnapRect() const { return mRect; }
+ virtual const LLRect getLocalSnapRect() const;
virtual LLRect getRequiredRect(); // Get required size for this object. 0 for width/height means don't care.
virtual void updateRect(); // apply procedural updates to own rectangle
@@ -334,12 +336,13 @@ public:
// Default behavior is to use reshape flags to resize child views
virtual void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
-
virtual void translate( S32 x, S32 y );
virtual void setOrigin( S32 x, S32 y ) { mRect.translate( x - mRect.mLeft, y - mRect.mBottom ); }
BOOL translateIntoRect( const LLRect& constraint, BOOL allow_partial_outside );
- LLView* findSnapRect(LLRect& new_rect, const LLCoordGL& mouse_dir, LLView::ESnapType snap_type, S32 threshold, S32 padding = 0);
- LLView* findSnapEdge(S32& new_edge_val, const LLCoordGL& mouse_dir, ESnapEdge snap_edge, ESnapType snap_type, S32 threshold, S32 padding = 0);
+
+ virtual void userSetShape(const LLRect& new_rect);
+ virtual LLView* findSnapRect(LLRect& new_rect, const LLCoordGL& mouse_dir, LLView::ESnapType snap_type, S32 threshold, S32 padding = 0);
+ virtual LLView* findSnapEdge(S32& new_edge_val, const LLCoordGL& mouse_dir, ESnapEdge snap_edge, ESnapType snap_type, S32 threshold, S32 padding = 0);
// Defaults to other_view->getVisible()
virtual BOOL canSnapTo(LLView* other_view);
@@ -364,6 +367,8 @@ public:
/*virtual*/ BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
/*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
/*virtual*/ BOOL handleRightMouseUp(S32 x, S32 y, MASK mask);
+ /*virtual*/ void onMouseCaptureLost();
+ /*virtual*/ BOOL hasMouseCapture();
// Default behavior is to pass the tooltip event to children,
// then display mToolTipMsg if no child handled it.
diff --git a/linden/indra/llui/llviewborder.cpp b/linden/indra/llui/llviewborder.cpp
index c26a818..4c2b602 100644
--- a/linden/indra/llui/llviewborder.cpp
+++ b/linden/indra/llui/llviewborder.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llviewborder.h b/linden/indra/llui/llviewborder.h
index 2795a71..7e5de4b 100644
--- a/linden/indra/llui/llviewborder.h
+++ b/linden/indra/llui/llviewborder.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llviewquery.cpp b/linden/indra/llui/llviewquery.cpp
index 89b2192..3f9ccf4 100644
--- a/linden/indra/llui/llviewquery.cpp
+++ b/linden/indra/llui/llviewquery.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llui/llviewquery.h b/linden/indra/llui/llviewquery.h
index 7ab401a..a35726a 100644
--- a/linden/indra/llui/llviewquery.h
+++ b/linden/indra/llui/llviewquery.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llvfs/lldir.cpp b/linden/indra/llvfs/lldir.cpp
index 6d0e956..d71224a 100644
--- a/linden/indra/llvfs/lldir.cpp
+++ b/linden/indra/llvfs/lldir.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llvfs/lldir.h b/linden/indra/llvfs/lldir.h
index 60188f3..86d4e15 100644
--- a/linden/indra/llvfs/lldir.h
+++ b/linden/indra/llvfs/lldir.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llvfs/lldir_linux.cpp b/linden/indra/llvfs/lldir_linux.cpp
index f46ccf2..e3aada6 100644
--- a/linden/indra/llvfs/lldir_linux.cpp
+++ b/linden/indra/llvfs/lldir_linux.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -90,7 +91,7 @@ LLDir_Linux::LLDir_Linux()
// *NOTE: /proc/%d/exe doesn't work on FreeBSD. But that's ok,
// because this is the linux implementation.
- snprintf (path, sizeof(path), "/proc/%d/exe", (int) getpid ()); /* Flawfinder: ignore */
+ snprintf (path, sizeof(path), "/proc/%d/exe", (int) getpid ());
int rc = readlink (path, tmp_str, sizeof (tmp_str)-1); /* Flawfinder: ignore */
if ( (rc != -1) && (rc <= ((int) sizeof (tmp_str)-1)) )
{
diff --git a/linden/indra/llvfs/lldir_linux.h b/linden/indra/llvfs/lldir_linux.h
index 488fda0..dd56239 100644
--- a/linden/indra/llvfs/lldir_linux.h
+++ b/linden/indra/llvfs/lldir_linux.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llvfs/lldir_mac.cpp b/linden/indra/llvfs/lldir_mac.cpp
index 7ed7697..d257ce0 100644
--- a/linden/indra/llvfs/lldir_mac.cpp
+++ b/linden/indra/llvfs/lldir_mac.cpp
@@ -1,9 +1,10 @@
/**
* @file lldir_mac.cpp
- * @brief Implementation of directory utilities for linux
+ * @brief Implementation of directory utilities for Mac OS X
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llvfs/lldir_mac.h b/linden/indra/llvfs/lldir_mac.h
index 83c22b3..925691e 100644
--- a/linden/indra/llvfs/lldir_mac.h
+++ b/linden/indra/llvfs/lldir_mac.h
@@ -1,9 +1,10 @@
/**
* @file lldir_mac.h
- * @brief Definition of directory utilities class for Mac OS X
+ * @brief Definition of directory utilities class for Mac OS X
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llvfs/lldir_win32.cpp b/linden/indra/llvfs/lldir_win32.cpp
index fd264a7..9411c71 100644
--- a/linden/indra/llvfs/lldir_win32.cpp
+++ b/linden/indra/llvfs/lldir_win32.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llvfs/lldir_win32.h b/linden/indra/llvfs/lldir_win32.h
index 40eac36..0eacc5e 100644
--- a/linden/indra/llvfs/lldir_win32.h
+++ b/linden/indra/llvfs/lldir_win32.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llvfs/lllfsthread.cpp b/linden/indra/llvfs/lllfsthread.cpp
index 25edb52..fdfb0ce 100644
--- a/linden/indra/llvfs/lllfsthread.cpp
+++ b/linden/indra/llvfs/lllfsthread.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llvfs/lllfsthread.h b/linden/indra/llvfs/lllfsthread.h
index 06c53aa..48c5a5c 100644
--- a/linden/indra/llvfs/lllfsthread.h
+++ b/linden/indra/llvfs/lllfsthread.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llvfs/llvfile.cpp b/linden/indra/llvfs/llvfile.cpp
index e958b33..f3db189 100644
--- a/linden/indra/llvfs/llvfile.cpp
+++ b/linden/indra/llvfs/llvfile.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llvfs/llvfile.h b/linden/indra/llvfs/llvfile.h
index c574cbc..0c4950b 100644
--- a/linden/indra/llvfs/llvfile.h
+++ b/linden/indra/llvfs/llvfile.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llvfs/llvfs.cpp b/linden/indra/llvfs/llvfs.cpp
index 88476eb..a41aa78 100644
--- a/linden/indra/llvfs/llvfs.cpp
+++ b/linden/indra/llvfs/llvfs.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llvfs/llvfs.h b/linden/indra/llvfs/llvfs.h
index 4598c07..2c1b8de 100644
--- a/linden/indra/llvfs/llvfs.h
+++ b/linden/indra/llvfs/llvfs.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llvfs/llvfsthread.cpp b/linden/indra/llvfs/llvfsthread.cpp
index 9226230..d93b312 100644
--- a/linden/indra/llvfs/llvfsthread.cpp
+++ b/linden/indra/llvfs/llvfsthread.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llvfs/llvfsthread.h b/linden/indra/llvfs/llvfsthread.h
index 3c90808..76ce5ee 100644
--- a/linden/indra/llvfs/llvfsthread.h
+++ b/linden/indra/llvfs/llvfsthread.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llwindow/lldxhardware.cpp b/linden/indra/llwindow/lldxhardware.cpp
index b2e1b04..82d80ec 100644
--- a/linden/indra/llwindow/lldxhardware.cpp
+++ b/linden/indra/llwindow/lldxhardware.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llwindow/lldxhardware.h b/linden/indra/llwindow/lldxhardware.h
index 5d8b925..0574880 100644
--- a/linden/indra/llwindow/lldxhardware.h
+++ b/linden/indra/llwindow/lldxhardware.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llwindow/llgl.cpp b/linden/indra/llwindow/llgl.cpp
index aabe9da..07348b7 100644
--- a/linden/indra/llwindow/llgl.cpp
+++ b/linden/indra/llwindow/llgl.cpp
@@ -1,9 +1,10 @@
/**
* @file llgl.cpp
-* @brief LLGL implementation
+ * @brief LLGL implementation
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -44,8 +45,6 @@
#include "llglheaders.h"
-#define LL_DEBUG_GL 1
-
#if LL_LINUX && !LL_MESA_HEADLESS
// The __APPLE__ hack is to make glh_extensions.h not symbol-clash horribly
# define __APPLE__
@@ -123,6 +122,25 @@ PFNGLGETQUERYOBJECTUIVARBPROC glGetQueryObjectuivARB = NULL;
PFNGLPOINTPARAMETERFARBPROC glPointParameterfARB = NULL;
PFNGLPOINTPARAMETERFVARBPROC glPointParameterfvARB = NULL;
+// GL_EXT_framebuffer_object
+PFNGLISRENDERBUFFEREXTPROC glIsRenderbufferEXT = NULL;
+PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT = NULL;
+PFNGLDELETERENDERBUFFERSEXTPROC glDeleteRenderbuffersEXT = NULL;
+PFNGLGENRENDERBUFFERSEXTPROC glGenRenderbuffersEXT = NULL;
+PFNGLRENDERBUFFERSTORAGEEXTPROC glRenderbufferStorageEXT = NULL;
+PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glGetRenderbufferParameterivEXT = NULL;
+PFNGLISFRAMEBUFFEREXTPROC glIsFramebufferEXT = NULL;
+PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT = NULL;
+PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT = NULL;
+PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT = NULL;
+PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT = NULL;
+PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glFramebufferTexture1DEXT = NULL;
+PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT = NULL;
+PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glFramebufferTexture3DEXT = NULL;
+PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbufferEXT = NULL;
+PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glGetFramebufferAttachmentParameterivEXT = NULL;
+PFNGLGENERATEMIPMAPEXTPROC glGenerateMipmapEXT = NULL;
+
//shader object prototypes
PFNGLDELETEOBJECTARBPROC glDeleteObjectARB = NULL;
PFNGLGETHANDLEARBPROC glGetHandleARB = NULL;
@@ -253,17 +271,10 @@ LLGLManager::LLGLManager()
mIsDisabled = FALSE;
mHasCubeMap = FALSE;
mHasMultitexture = FALSE;
- mHasAnyAGP = FALSE;
mHasMipMapGeneration = FALSE;
mHasAnisotropic = FALSE;
mHasCompressedTextures = FALSE;
- mHasNVVertexArrayRange = FALSE;
- mHasNVFence = FALSE;
mHasARBEnvCombine = FALSE;
- mHasATIVAO = FALSE;
- mIsRadeon8500 = FALSE;
- mIsRadeon9700 = FALSE;
- mIsMobilityRadeon9000 = FALSE;
mIsGF2or4MX = FALSE;
mIsGF3 = FALSE;
mIsGFFX = FALSE;
@@ -377,31 +388,8 @@ bool LLGLManager::initGL()
mobile = TRUE;
}
mIsATI = TRUE;
- if ( mGLRenderer.find("9500") != LLString::npos
- || mGLRenderer.find("9600") != LLString::npos
- || mGLRenderer.find("9700") != LLString::npos
- || mGLRenderer.find("9800") != LLString::npos )
- {
- mIsRadeon9700 = TRUE;
- }
- else if (mGLRenderer.find("8500") != LLString::npos
- || mGLRenderer.find( "9000") != LLString::npos
- || mGLRenderer.find("9100") != LLString::npos
- || mGLRenderer.find("9200") != LLString::npos)
- {
- mIsRadeon8500 = TRUE;
- if (mobile && mGLRenderer.find("9000") != LLString::npos)
- {
- mIsMobilityRadeon9000 = TRUE;
- }
- }
#if LL_WINDOWS && !LL_MESA_HEADLESS
- if (mIsRadeon9700 && mDriverVersionRelease < 3833)
- {
- return false; // Unsupported hardware
- }
-
if (mDriverVersionRelease < 3842)
{
mATIOffsetVerticalLines = TRUE;
@@ -532,14 +520,16 @@ void LLGLManager::initExtensions()
# else
mHasVertexBufferObject = FALSE;
# endif
+# if GL_EXT_framebuffer_object
+ mHasFramebufferObject = TRUE;
+# else
+ mHasFramebufferObject = FALSE;
+# endif
mHasMipMapGeneration = FALSE;
mHasPalettedTextures = FALSE;
- mHasNVVertexArrayRange = FALSE;
- mHasNVFence = FALSE;
mHasSeparateSpecularColor = FALSE;
mHasAnisotropic = FALSE;
mHasCubeMap = FALSE;
- mHasATIVAO = FALSE;
mHasOcclusionQuery = FALSE;
mHasPointParameters = FALSE;
mHasShaderObjects = FALSE;
@@ -549,17 +539,15 @@ void LLGLManager::initExtensions()
mHasMultitexture = glh_init_extensions("GL_ARB_multitexture");
mHasMipMapGeneration = glh_init_extensions("GL_SGIS_generate_mipmap");
mHasPalettedTextures = glh_init_extension("GL_EXT_paletted_texture");
- mHasNVVertexArrayRange = glh_init_extensions("GL_NV_vertex_array_range");
- mHasNVFence = glh_init_extensions("GL_NV_fence");
mHasSeparateSpecularColor = glh_init_extensions("GL_EXT_separate_specular_color");
mHasAnisotropic = glh_init_extensions("GL_EXT_texture_filter_anisotropic");
glh_init_extensions("GL_ARB_texture_cube_map");
mHasCubeMap = ExtensionExists("GL_ARB_texture_cube_map", gGLHExts.mSysExts);
mHasARBEnvCombine = ExtensionExists("GL_ARB_texture_env_combine", gGLHExts.mSysExts);
mHasCompressedTextures = glh_init_extensions("GL_ARB_texture_compression");
- mHasATIVAO = ExtensionExists("GL_ATI_vertex_array_object", gGLHExts.mSysExts);
mHasOcclusionQuery = ExtensionExists("GL_ARB_occlusion_query", gGLHExts.mSysExts);
mHasVertexBufferObject = ExtensionExists("GL_ARB_vertex_buffer_object", gGLHExts.mSysExts);
+ mHasFramebufferObject = ExtensionExists("GL_EXT_framebuffer_object", gGLHExts.mSysExts);
#if !LL_DARWIN
mHasPointParameters = !mIsATI && ExtensionExists("GL_ARB_point_parameters", gGLHExts.mSysExts);
#endif
@@ -578,14 +566,12 @@ void LLGLManager::initExtensions()
mHasARBEnvCombine = FALSE;
mHasCompressedTextures = FALSE;
mHasVertexBufferObject = FALSE;
+ mHasFramebufferObject = FALSE;
mHasMipMapGeneration = FALSE;
mHasPalettedTextures = FALSE;
- mHasNVVertexArrayRange = FALSE;
- mHasNVFence = FALSE;
mHasSeparateSpecularColor = FALSE;
mHasAnisotropic = FALSE;
mHasCubeMap = FALSE;
- mHasATIVAO = FALSE;
mHasOcclusionQuery = FALSE;
mHasPointParameters = FALSE;
mHasShaderObjects = FALSE;
@@ -602,11 +588,8 @@ void LLGLManager::initExtensions()
// proper blacklist/whitelist on Linux.
mHasMipMapGeneration = FALSE;
mHasPalettedTextures = FALSE;
- mHasNVVertexArrayRange = FALSE;
- mHasNVFence = FALSE;
mHasAnisotropic = FALSE;
mHasCubeMap = FALSE; // apparently fatal on Intel 915 & similar
- mHasATIVAO = FALSE;
mHasOcclusionQuery = FALSE; // source of many ATI system hangs
mHasShaderObjects = FALSE;
mHasVertexShader = FALSE;
@@ -626,17 +609,18 @@ void LLGLManager::initExtensions()
if (strchr(blacklist,'c')) mHasVertexBufferObject = FALSE;
if (strchr(blacklist,'d')) mHasMipMapGeneration = FALSE;//S
if (strchr(blacklist,'e')) mHasPalettedTextures = FALSE;//S
- if (strchr(blacklist,'f')) mHasNVVertexArrayRange = FALSE;//S
- if (strchr(blacklist,'g')) mHasNVFence = FALSE;//S
+// if (strchr(blacklist,'f')) mHasNVVertexArrayRange = FALSE;//S
+// if (strchr(blacklist,'g')) mHasNVFence = FALSE;//S
if (strchr(blacklist,'h')) mHasSeparateSpecularColor = FALSE;
if (strchr(blacklist,'i')) mHasAnisotropic = FALSE;//S
if (strchr(blacklist,'j')) mHasCubeMap = FALSE;//S
- if (strchr(blacklist,'k')) mHasATIVAO = FALSE;//S
+// if (strchr(blacklist,'k')) mHasATIVAO = FALSE;//S
if (strchr(blacklist,'l')) mHasOcclusionQuery = FALSE;
if (strchr(blacklist,'m')) mHasShaderObjects = FALSE;//S
if (strchr(blacklist,'n')) mHasVertexShader = FALSE;//S
if (strchr(blacklist,'o')) mHasFragmentShader = FALSE;//S
if (strchr(blacklist,'p')) mHasPointParameters = FALSE;//S
+ if (strchr(blacklist,'q')) mHasFramebufferObject = FALSE;//S
}
#endif // LL_LINUX
@@ -663,14 +647,6 @@ void LLGLManager::initExtensions()
{
llinfos << "Couldn't initialize GL_EXT_paletted_texture" << llendl;
}
- if (!mHasNVVertexArrayRange)
- {
- llinfos << "Couldn't initialize GL_NV_vertex_array_range" << llendl;
- }
- if (!mHasNVFence)
- {
- llinfos << "Couldn't initialize GL_NV_fence" << llendl;
- }
if (!mHasSeparateSpecularColor)
{
llinfos << "Couldn't initialize separate specular color" << llendl;
@@ -717,10 +693,6 @@ void LLGLManager::initExtensions()
}
// Misc
- if (mHasNVFence || mHasATIVAO)
- {
- mHasAnyAGP = TRUE;
- }
glGetIntegerv(GL_MAX_ELEMENTS_VERTICES, (GLint*) &mGLMaxVertexRange);
glGetIntegerv(GL_MAX_ELEMENTS_INDICES, (GLint*) &mGLMaxIndexRange);
@@ -744,10 +716,6 @@ void LLGLManager::initExtensions()
llinfos << "Has GL_APPLE_vertex_array_object!" << llendl;
}
- if(mHasAPPLEFence)
- {
- mHasAnyAGP = TRUE;
- }
#endif // LL_DARWIN
#if (LL_WINDOWS || LL_LINUX) && !LL_MESA_HEADLESS
@@ -773,23 +741,25 @@ void LLGLManager::initExtensions()
mHasVertexBufferObject = FALSE;
}
}
- if (mHasATIVAO)
- {
- // Initialize the extension.
- llinfos << "Has ATI_vertex_array_object!" << llendl;
- glNewObjectBufferATI = (PFNGLNEWOBJECTBUFFERATIPROC)GLH_EXT_GET_PROC_ADDRESS("glNewObjectBufferATI");
- glIsObjectBufferATI = (PFNGLISOBJECTBUFFERATIPROC)GLH_EXT_GET_PROC_ADDRESS("glIsObjectBufferATI");
- glUpdateObjectBufferATI = (PFNGLUPDATEOBJECTBUFFERATIPROC)GLH_EXT_GET_PROC_ADDRESS("glUpdateObjectBufferATI");
- glGetObjectBufferfvATI = (PFNGLGETOBJECTBUFFERFVATIPROC)GLH_EXT_GET_PROC_ADDRESS("glGetObjectBufferfvATI");
- glGetObjectBufferivATI = (PFNGLGETOBJECTBUFFERIVATIPROC)GLH_EXT_GET_PROC_ADDRESS("glGetObjectBufferivATI");
- glFreeObjectBufferATI = (PFNGLFREEOBJECTBUFFERATIPROC)GLH_EXT_GET_PROC_ADDRESS("glFreeObjectBufferATI");
- glArrayObjectATI = (PFNGLARRAYOBJECTATIPROC)GLH_EXT_GET_PROC_ADDRESS("glArrayObjectATI");
- glVertexAttribArrayObjectATI = (PFNGLVERTEXATTRIBARRAYOBJECTATIPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttribArrayObjectATI");
- glGetArrayObjectfvATI = (PFNGLGETARRAYOBJECTFVATIPROC)GLH_EXT_GET_PROC_ADDRESS("glGetArrayObjectfvATI");
- glGetArrayObjectivATI = (PFNGLGETARRAYOBJECTIVATIPROC)GLH_EXT_GET_PROC_ADDRESS("glGetArrayObjectivATI");
- glVariantObjectArrayATI = (PFNGLVARIANTARRAYOBJECTATIPROC)GLH_EXT_GET_PROC_ADDRESS("glVariantObjectArrayATI");
- glGetVariantArrayObjectfvATI = (PFNGLGETVARIANTARRAYOBJECTFVATIPROC)GLH_EXT_GET_PROC_ADDRESS("glGetVariantArrayObjectfvATI");
- glGetVariantArrayObjectivATI = (PFNGLGETVARIANTARRAYOBJECTIVATIPROC)GLH_EXT_GET_PROC_ADDRESS("glGetVariantArrayObjectivATI");
+ if (mHasFramebufferObject)
+ {
+ glIsRenderbufferEXT = (PFNGLISRENDERBUFFEREXTPROC) GLH_EXT_GET_PROC_ADDRESS("glIsRenderbufferEXT");
+ glBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC) GLH_EXT_GET_PROC_ADDRESS("glBindRenderbufferEXT");
+ glDeleteRenderbuffersEXT = (PFNGLDELETERENDERBUFFERSEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glDeleteRenderbuffersEXT");
+ glGenRenderbuffersEXT = (PFNGLGENRENDERBUFFERSEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glGenRenderbuffersEXT");
+ glRenderbufferStorageEXT = (PFNGLRENDERBUFFERSTORAGEEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glRenderbufferStorageEXT");
+ glGetRenderbufferParameterivEXT = (PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glGetRenderbufferParameterivEXT");
+ glIsFramebufferEXT = (PFNGLISFRAMEBUFFEREXTPROC) GLH_EXT_GET_PROC_ADDRESS("glIsFramebufferEXT");
+ glBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC) GLH_EXT_GET_PROC_ADDRESS("glBindFramebufferEXT");
+ glDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glDeleteFramebuffersEXT");
+ glGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glGenFramebuffersEXT");
+ glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glCheckFramebufferStatusEXT");
+ glFramebufferTexture1DEXT = (PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glFramebufferTexture1DEXT");
+ glFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glFramebufferTexture2DEXT");
+ glFramebufferTexture3DEXT = (PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glFramebufferTexture3DEXT");
+ glFramebufferRenderbufferEXT = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) GLH_EXT_GET_PROC_ADDRESS("glFramebufferRenderbufferEXT");
+ glGetFramebufferAttachmentParameterivEXT = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glGetFramebufferAttachmentParameterivEXT");
+ glGenerateMipmapEXT = (PFNGLGENERATEMIPMAPEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glGenerateMipmapEXT");
}
#if !LL_LINUX
// This is expected to be a static symbol on Linux GL implementations
@@ -1005,6 +975,20 @@ void LLGLState::restoreGL()
initClass();
}
+//static
+// Really shouldn't be needed, but seems we sometimes do.
+void LLGLState::resetTextureStates()
+{
+ GLint maxTextureUnits;
+ glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &maxTextureUnits);
+ for (S32 j = maxTextureUnits-1; j >=0; j--)
+ {
+ glActiveTextureARB(GL_TEXTURE0_ARB+j);
+ glClientActiveTextureARB(GL_TEXTURE0_ARB+j);
+ j == 0 ? glEnable(GL_TEXTURE_2D) : glDisable(GL_TEXTURE_2D);
+ }
+}
+
void LLGLState::dumpStates()
{
llinfos << "GL States:" << llendl;
diff --git a/linden/indra/llwindow/llgl.h b/linden/indra/llwindow/llgl.h
index 34bf400..c83ccb8 100644
--- a/linden/indra/llwindow/llgl.h
+++ b/linden/indra/llwindow/llgl.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -40,6 +41,8 @@
#include "v4math.h"
#include "llgltypes.h"
+#define LL_DEBUG_GL 1
+
#define LL_GL_ERRS llerrs
// Manage GL extensions...
@@ -62,10 +65,10 @@ public:
BOOL mHasMultitexture;
S32 mNumTextureUnits;
BOOL mHasMipMapGeneration;
- BOOL mHasAnyAGP;
BOOL mHasPalettedTextures;
BOOL mHasCompressedTextures;
-
+ BOOL mHasFramebufferObject;
+
// ARB Extensions
BOOL mHasVertexBufferObject;
BOOL mHasPBuffer;
@@ -75,25 +78,19 @@ public:
BOOL mHasOcclusionQuery;
BOOL mHasPointParameters;
- // nVidia extensions.
+ // Other extensions.
BOOL mHasAnisotropic;
- BOOL mHasNVVertexArrayRange;
- BOOL mHasNVFence;
BOOL mHasARBEnvCombine;
+ BOOL mHasCubeMap;
- // ATI extensions.
- BOOL mHasATIVAO;
- BOOL mIsRadeon8500; // Radeon 8500/9000
- BOOL mIsRadeon9700;
- BOOL mIsMobilityRadeon9000;
+ // Vender specific extensions
+ BOOL mIsATI;
+ BOOL mIsNVIDIA;
+ BOOL mIsIntel;
BOOL mIsGF2or4MX;
BOOL mIsGF3;
BOOL mIsGFFX;
- BOOL mIsATI;
BOOL mATIOffsetVerticalLines;
- BOOL mIsNVIDIA;
- BOOL mIsIntel;
- BOOL mHasCubeMap;
#if LL_WINDOWS
BOOL mHasWGLARBPixelFormat;
@@ -220,6 +217,7 @@ public:
static void initClass();
static void restoreGL();
+ static void resetTextureStates();
static void dumpStates();
static void checkStates();
static void checkTextureChannels();
diff --git a/linden/indra/llwindow/llglheaders.h b/linden/indra/llwindow/llglheaders.h
index 7c4d8fd..1d815ee 100644
--- a/linden/indra/llwindow/llglheaders.h
+++ b/linden/indra/llwindow/llglheaders.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -137,7 +138,7 @@ extern PFNGLGETUNIFORMFVARBPROC glGetUniformfvARB;
extern PFNGLGETUNIFORMIVARBPROC glGetUniformivARB;
extern PFNGLGETSHADERSOURCEARBPROC glGetShaderSourceARB;
-// GL_ARB;_vertex_shader
+// GL_ARB_vertex_shader
extern PFNGLVERTEXATTRIB1DARBPROC glVertexAttrib1dARB;
extern PFNGLVERTEXATTRIB1DVARBPROC glVertexAttrib1dvARB;
extern PFNGLVERTEXATTRIB1FARBPROC glVertexAttrib1fARB;
@@ -209,6 +210,26 @@ extern PFNGLGETCOMPRESSEDTEXIMAGEARBPROC glGetCompressedTexImageARB;
extern PFNGLCOLORTABLEEXTPROC glColorTableEXT;
+//GL_EXT_framebuffer_object
+extern PFNGLISRENDERBUFFEREXTPROC glIsRenderbufferEXT;
+extern PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT;
+extern PFNGLDELETERENDERBUFFERSEXTPROC glDeleteRenderbuffersEXT;
+extern PFNGLGENRENDERBUFFERSEXTPROC glGenRenderbuffersEXT;
+extern PFNGLRENDERBUFFERSTORAGEEXTPROC glRenderbufferStorageEXT;
+extern PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glGetRenderbufferParameterivEXT;
+extern PFNGLISFRAMEBUFFEREXTPROC glIsFramebufferEXT;
+extern PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT;
+extern PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT;
+extern PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT;
+extern PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT;
+extern PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glFramebufferTexture1DEXT;
+extern PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT;
+extern PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glFramebufferTexture3DEXT;
+extern PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbufferEXT;
+extern PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glGetFramebufferAttachmentParameterivEXT;
+extern PFNGLGENERATEMIPMAPEXTPROC glGenerateMipmapEXT;
+
+
#elif LL_WINDOWS
//----------------------------------------------------------------------------
#include
@@ -304,7 +325,7 @@ extern PFNGLGETUNIFORMFVARBPROC glGetUniformfvARB;
extern PFNGLGETUNIFORMIVARBPROC glGetUniformivARB;
extern PFNGLGETSHADERSOURCEARBPROC glGetShaderSourceARB;
-// GL_ARB;_vertex_shader
+// GL_ARB_vertex_shader
extern PFNGLVERTEXATTRIB1DARBPROC glVertexAttrib1dARB;
extern PFNGLVERTEXATTRIB1DVARBPROC glVertexAttrib1dvARB;
extern PFNGLVERTEXATTRIB1FARBPROC glVertexAttrib1fARB;
@@ -371,6 +392,25 @@ extern PFNGLBINDATTRIBLOCATIONARBPROC glBindAttribLocationARB;
extern PFNGLGETACTIVEATTRIBARBPROC glGetActiveAttribARB;
extern PFNGLGETATTRIBLOCATIONARBPROC glGetAttribLocationARB;
+//GL_EXT_framebuffer_object
+extern PFNGLISRENDERBUFFEREXTPROC glIsRenderbufferEXT;
+extern PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT;
+extern PFNGLDELETERENDERBUFFERSEXTPROC glDeleteRenderbuffersEXT;
+extern PFNGLGENRENDERBUFFERSEXTPROC glGenRenderbuffersEXT;
+extern PFNGLRENDERBUFFERSTORAGEEXTPROC glRenderbufferStorageEXT;
+extern PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glGetRenderbufferParameterivEXT;
+extern PFNGLISFRAMEBUFFEREXTPROC glIsFramebufferEXT;
+extern PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT;
+extern PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT;
+extern PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT;
+extern PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT;
+extern PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glFramebufferTexture1DEXT;
+extern PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT;
+extern PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glFramebufferTexture3DEXT;
+extern PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbufferEXT;
+extern PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glGetFramebufferAttachmentParameterivEXT;
+extern PFNGLGENERATEMIPMAPEXTPROC glGenerateMipmapEXT;
+
#elif LL_DARWIN
//----------------------------------------------------------------------------
@@ -384,6 +424,30 @@ extern PFNGLGETATTRIBLOCATIONARBPROC glGetAttribLocationARB;
#include "GL/glh_extensions.h"
+// These symbols don't exist on 10.3.9, so they have to be declared weak. Redeclaring them here fixes the problem.
+// Note that they also must not be called on 10.3.9. This should be taken care of by a runtime check for the existence of the GL extension.
+#include
+
+// GL_EXT_framebuffer_object
+extern GLboolean glIsRenderbufferEXT(GLuint renderbuffer) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
+extern void glBindRenderbufferEXT(GLenum target, GLuint renderbuffer) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
+extern void glDeleteRenderbuffersEXT(GLsizei n, const GLuint *renderbuffers) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
+extern void glGenRenderbuffersEXT(GLsizei n, GLuint *renderbuffers) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
+extern void glRenderbufferStorageEXT(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
+extern void glGetRenderbufferParameterivEXT(GLenum target, GLenum pname, GLint *params) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
+extern GLboolean glIsFramebufferEXT(GLuint framebuffer) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
+extern void glBindFramebufferEXT(GLenum target, GLuint framebuffer) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
+extern void glDeleteFramebuffersEXT(GLsizei n, const GLuint *framebuffers) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
+extern void glGenFramebuffersEXT(GLsizei n, GLuint *framebuffers) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
+extern GLenum glCheckFramebufferStatusEXT(GLenum target) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
+extern void glFramebufferTexture1DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
+extern void glFramebufferTexture2DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
+extern void glFramebufferTexture3DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
+extern void glFramebufferRenderbufferEXT(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
+extern void glGetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment, GLenum pname, GLint *params) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
+extern void glGenerateMipmapEXT(GLenum target) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
+
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/linden/indra/llwindow/llglstates.h b/linden/indra/llwindow/llglstates.h
index 8e67e33..887d099 100644
--- a/linden/indra/llwindow/llglstates.h
+++ b/linden/indra/llwindow/llglstates.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llwindow/llglstubs.h b/linden/indra/llwindow/llglstubs.h
index d7f0d94..1d70400 100644
--- a/linden/indra/llwindow/llglstubs.h
+++ b/linden/indra/llwindow/llglstubs.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llwindow/llgltypes.h b/linden/indra/llwindow/llgltypes.h
index fffa979..d130a42 100644
--- a/linden/indra/llwindow/llgltypes.h
+++ b/linden/indra/llwindow/llgltypes.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llwindow/llkeyboard.cpp b/linden/indra/llwindow/llkeyboard.cpp
index 0da1644..213fe85 100644
--- a/linden/indra/llwindow/llkeyboard.cpp
+++ b/linden/indra/llwindow/llkeyboard.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llwindow/llkeyboard.h b/linden/indra/llwindow/llkeyboard.h
index e262ab6..61ae2ea 100644
--- a/linden/indra/llwindow/llkeyboard.h
+++ b/linden/indra/llwindow/llkeyboard.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llwindow/llkeyboardmacosx.cpp b/linden/indra/llwindow/llkeyboardmacosx.cpp
index 961bb66..6d06d53 100644
--- a/linden/indra/llwindow/llkeyboardmacosx.cpp
+++ b/linden/indra/llwindow/llkeyboardmacosx.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llwindow/llkeyboardmacosx.h b/linden/indra/llwindow/llkeyboardmacosx.h
index a4d9115..899b011 100644
--- a/linden/indra/llwindow/llkeyboardmacosx.h
+++ b/linden/indra/llwindow/llkeyboardmacosx.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llwindow/llkeyboardsdl.cpp b/linden/indra/llwindow/llkeyboardsdl.cpp
index 07db986..027f6a4 100644
--- a/linden/indra/llwindow/llkeyboardsdl.cpp
+++ b/linden/indra/llwindow/llkeyboardsdl.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llwindow/llkeyboardsdl.h b/linden/indra/llwindow/llkeyboardsdl.h
index b582e21..7546496 100644
--- a/linden/indra/llwindow/llkeyboardsdl.h
+++ b/linden/indra/llwindow/llkeyboardsdl.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llwindow/llkeyboardwin32.cpp b/linden/indra/llwindow/llkeyboardwin32.cpp
index 33664b9..f9db941 100644
--- a/linden/indra/llwindow/llkeyboardwin32.cpp
+++ b/linden/indra/llwindow/llkeyboardwin32.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llwindow/llkeyboardwin32.h b/linden/indra/llwindow/llkeyboardwin32.h
index 1501e8f..33233c9 100644
--- a/linden/indra/llwindow/llkeyboardwin32.h
+++ b/linden/indra/llwindow/llkeyboardwin32.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llwindow/llmousehandler.h b/linden/indra/llwindow/llmousehandler.h
index 4e9b882..3091920 100644
--- a/linden/indra/llwindow/llmousehandler.h
+++ b/linden/indra/llwindow/llmousehandler.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -34,8 +35,6 @@
// Intended for use via multiple inheritance.
// A class may have as many interfaces as it likes, but never needs to inherit one more than once.
-#include "llstring.h"
-
class LLMouseHandler
{
public:
@@ -52,11 +51,15 @@ public:
virtual BOOL handleToolTip(S32 x, S32 y, LLString& msg, LLRect* sticky_rect_screen) = 0;
virtual const LLString& getName() const = 0;
+ virtual void onMouseCaptureLost() = 0;
+
// Hack to support LLFocusMgr
virtual BOOL isView() = 0;
virtual void screenPointToLocal(S32 screen_x, S32 screen_y, S32* local_x, S32* local_y) const = 0;
virtual void localPointToScreen(S32 local_x, S32 local_y, S32* screen_x, S32* screen_y) const = 0;
+
+ virtual BOOL hasMouseCapture() = 0;
};
#endif
diff --git a/linden/indra/llwindow/llwindow.cpp b/linden/indra/llwindow/llwindow.cpp
index 20fc84e..134e606 100644
--- a/linden/indra/llwindow/llwindow.cpp
+++ b/linden/indra/llwindow/llwindow.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -232,6 +233,15 @@ LLWindow::LLWindow(BOOL fullscreen, U32 flags)
mHideCursorPermanent(FALSE),
mFlags(flags)
{
+ for (U32 i = 0; i < 6; i++)
+ {
+ mJoyAxis[i] = 0;
+ }
+
+ for (U32 i = 0; i < 16; i++)
+ {
+ mJoyButtonState[i] = 0;
+ }
}
// virtual
@@ -249,6 +259,24 @@ void LLWindow::decBusyCount()
}
}
+F32 LLWindow::getJoystickAxis(U32 axis)
+{
+ if (axis < 6)
+ {
+ return mJoyAxis[axis];
+ }
+ return 0.f;
+}
+
+U8 LLWindow::getJoystickButton(U32 button)
+{
+ if (button < 16)
+ {
+ return mJoyButtonState[button];
+ }
+ return 0;
+}
+
void LLWindow::setCallbacks(LLWindowCallbacks *callbacks)
{
mCallbacks = callbacks;
diff --git a/linden/indra/llwindow/llwindow.h b/linden/indra/llwindow/llwindow.h
index f4bb147..a52aff6 100644
--- a/linden/indra/llwindow/llwindow.h
+++ b/linden/indra/llwindow/llwindow.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -200,6 +201,9 @@ public:
virtual F32 getNativeAspectRatio() = 0;
virtual F32 getPixelAspectRatio() = 0;
virtual void setNativeAspectRatio(F32 aspect) = 0;
+
+ F32 getJoystickAxis(U32 axis);
+ U8 getJoystickButton(U32 button);
void setCallbacks(LLWindowCallbacks *callbacks);
@@ -238,7 +242,9 @@ protected:
ESwapMethod mSwapMethod;
BOOL mHideCursorPermanent;
U32 mFlags;
-
+ F32 mJoyAxis[6];
+ U8 mJoyButtonState[16];
+
friend class LLWindowManager;
};
diff --git a/linden/indra/llwindow/llwindowheadless.cpp b/linden/indra/llwindow/llwindowheadless.cpp
index 821632d..62306f1 100644
--- a/linden/indra/llwindow/llwindowheadless.cpp
+++ b/linden/indra/llwindow/llwindowheadless.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llwindow/llwindowheadless.h b/linden/indra/llwindow/llwindowheadless.h
index cc7fa06..c474a5a 100644
--- a/linden/indra/llwindow/llwindowheadless.h
+++ b/linden/indra/llwindow/llwindowheadless.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llwindow/llwindowlinux.cpp b/linden/indra/llwindow/llwindowlinux.cpp
index e266efc..79f4d48 100644
--- a/linden/indra/llwindow/llwindowlinux.cpp
+++ b/linden/indra/llwindow/llwindowlinux.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llwindow/llwindowlinux.h b/linden/indra/llwindow/llwindowlinux.h
index 9550cdd..0465ef4 100644
--- a/linden/indra/llwindow/llwindowlinux.h
+++ b/linden/indra/llwindow/llwindowlinux.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llwindow/llwindowmacosx-objc.h b/linden/indra/llwindow/llwindowmacosx-objc.h
index d055729..d17fa61 100644
--- a/linden/indra/llwindow/llwindowmacosx-objc.h
+++ b/linden/indra/llwindow/llwindowmacosx-objc.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llwindow/llwindowmacosx-objc.mm b/linden/indra/llwindow/llwindowmacosx-objc.mm
index bde3841..241f821 100644
--- a/linden/indra/llwindow/llwindowmacosx-objc.mm
+++ b/linden/indra/llwindow/llwindowmacosx-objc.mm
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llwindow/llwindowmacosx.cpp b/linden/indra/llwindow/llwindowmacosx.cpp
index 7313fd3..b2a1ccf 100644
--- a/linden/indra/llwindow/llwindowmacosx.cpp
+++ b/linden/indra/llwindow/llwindowmacosx.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -91,7 +92,7 @@ BOOL check_for_card(const char* RENDERER, const char* bad_card)
if (!strnicmp(RENDERER, bad_card, strlen(bad_card)))
{
char buffer[1024];/* Flawfinder: ignore */
- snprintf(buffer, sizeof(buffer), /* Flawfinder: ignore */
+ snprintf(buffer, sizeof(buffer),
"Your video card appears to be a %s, which Second Life does not support.\n"
"\n"
"Second Life requires a video card with 32 Mb of memory or more, as well as\n"
@@ -426,7 +427,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
mFullscreenRefresh = -1;
char error[256]; /* Flawfinder: ignore */
- snprintf(error, sizeof(error), "Unable to run fullscreen at %d x %d.\nRunning in window.", width, height); /* Flawfinder: ignore */
+ snprintf(error, sizeof(error), "Unable to run fullscreen at %d x %d.\nRunning in window.", width, height);
OSMessageBox(error, "Error", OSMB_OK);
}
}
diff --git a/linden/indra/llwindow/llwindowmacosx.h b/linden/indra/llwindow/llwindowmacosx.h
index 7425077..63d846e 100644
--- a/linden/indra/llwindow/llwindowmacosx.h
+++ b/linden/indra/llwindow/llwindowmacosx.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llwindow/llwindowmesaheadless.cpp b/linden/indra/llwindow/llwindowmesaheadless.cpp
index 7e5f4b0..f10d7cd 100644
--- a/linden/indra/llwindow/llwindowmesaheadless.cpp
+++ b/linden/indra/llwindow/llwindowmesaheadless.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llwindow/llwindowmesaheadless.h b/linden/indra/llwindow/llwindowmesaheadless.h
index f8599c6..599db72 100644
--- a/linden/indra/llwindow/llwindowmesaheadless.h
+++ b/linden/indra/llwindow/llwindowmesaheadless.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llwindow/llwindowsdl.cpp b/linden/indra/llwindow/llwindowsdl.cpp
index 85836af..c375e32 100644
--- a/linden/indra/llwindow/llwindowsdl.cpp
+++ b/linden/indra/llwindow/llwindowsdl.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -205,7 +206,7 @@ BOOL check_for_card(const char* RENDERER, const char* bad_card)
if (!strncasecmp(RENDERER, bad_card, strlen(bad_card)))
{
char buffer[1024]; /* Flawfinder: ignore */
- snprintf(buffer, sizeof(buffer), /* Flawfinder: ignore */
+ snprintf(buffer, sizeof(buffer),
"Your video card appears to be a %s, which Second Life does not support.\n"
"\n"
"Second Life requires a video card with 32 Mb of memory or more, as well as\n"
@@ -314,7 +315,7 @@ static SDL_Surface *Load_BMP_Resource(const char *basename)
char path_buffer[PATH_BUFFER_SIZE]; /* Flawfinder: ignore */
// Figure out where our BMP is living on the disk
- snprintf(path_buffer, PATH_BUFFER_SIZE-1, "%s%sres-sdl%s%s", /* Flawfinder: ignore */
+ snprintf(path_buffer, PATH_BUFFER_SIZE-1, "%s%sres-sdl%s%s",
gDirUtilp->getAppRODataDir().c_str(),
gDirUtilp->getDirDelimiter().c_str(),
gDirUtilp->getDirDelimiter().c_str(),
@@ -485,7 +486,7 @@ BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, B
mFullscreenRefresh = -1;
char error[256]; /* Flawfinder: ignore */
- snprintf(error, sizeof(error), "Unable to run fullscreen at %d x %d.\nRunning in window.", width, height); /* Flawfinder: ignore */
+ snprintf(error, sizeof(error), "Unable to run fullscreen at %d x %d.\nRunning in window.", width, height);
OSMessageBox(error, "Error", OSMB_OK);
}
}
@@ -1184,7 +1185,7 @@ x11clipboard_type convert_format(int type)
these right now, and support is skeletal. */
char format[sizeof(FORMAT_PREFIX)+8+1]; /* Flawfinder: ignore */
- snprintf(format, sizeof(format), "%s%08lx", FORMAT_PREFIX, (unsigned long)type); /* Flawfinder: ignore */
+ snprintf(format, sizeof(format), "%s%08lx", FORMAT_PREFIX, (unsigned long)type);
return XInternAtom(gWindowImplementation->mSDL_Display,
format, False);
}
@@ -1871,7 +1872,7 @@ void LLWindowSDL::gatherInput()
// the locale to protect it, as exotic/non-C locales
// causes our code lots of general critical weirdness
// and crashness. (SL-35450)
- char *saved_locale = setlocale(LC_ALL, NULL);
+ std::string saved_locale = setlocale(LC_ALL, NULL);
// Do a limited number of pumps so SL doesn't starve!
// FIXME - this should ideally be time-limited, not count-limited.
@@ -1880,8 +1881,7 @@ void LLWindowSDL::gatherInput()
if (gtk_events_pending())
gtk_main_iteration();
- if (saved_locale)
- setlocale(LC_ALL, saved_locale);
+ setlocale(LC_ALL, saved_locale.c_str() );
}
#endif // LL_GTK && LL_LIBXUL_ENABLED
diff --git a/linden/indra/llwindow/llwindowsdl.h b/linden/indra/llwindow/llwindowsdl.h
index ed529a2..2e75239 100644
--- a/linden/indra/llwindow/llwindowsdl.h
+++ b/linden/indra/llwindow/llwindowsdl.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/llwindow/llwindowwin32.cpp b/linden/indra/llwindow/llwindowwin32.cpp
index 1d084d2..7c3ec01 100644
--- a/linden/indra/llwindow/llwindowwin32.cpp
+++ b/linden/indra/llwindow/llwindowwin32.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -763,8 +764,6 @@ LLWindowWin32::LLWindowWin32(char *title, char *name, S32 x, S32 y, S32 width,
}
SetTimer( mWindowHandle, 0, 1000 / 30, NULL ); // 30 fps timer
- mJoyStickState = 0;
- mJoyButtonState = 0;
}
@@ -2815,89 +2814,16 @@ void LLWindowWin32::updateJoystick( )
if( FAILED( hr = g_pJoystick->GetDeviceState( sizeof(DIJOYSTATE), &js ) ) )
return; // The device should have been acquired during the Poll()
- if (js.lX <= -500)
- {
- if (!(mJoyStickState & 0x1))
- {
- gKeyboard->handleTranslatedKeyDown(KEY_PAD_LEFT, 0);
- mJoyStickState |= 0x1;
- }
- }
- else
- {
- if (mJoyStickState & 0x1)
- {
- gKeyboard->handleTranslatedKeyUp(KEY_PAD_LEFT, 0);
- mJoyStickState &= ~0x1;
- }
- }
- if (js.lX >= 500)
- {
- if (!(mJoyStickState & 0x2))
- {
- gKeyboard->handleTranslatedKeyDown(KEY_PAD_RIGHT, 0);
- mJoyStickState |= 0x2;
- }
- }
- else
- {
- if (mJoyStickState & 0x2)
- {
- gKeyboard->handleTranslatedKeyUp(KEY_PAD_RIGHT, 0);
- mJoyStickState &= ~0x2;
- }
- }
- if (js.lY <= -500)
- {
- if (!(mJoyStickState & 0x4))
- {
- gKeyboard->handleTranslatedKeyDown(KEY_PAD_UP, 0);
- mJoyStickState |= 0x4;
- }
- }
- else
- {
- if (mJoyStickState & 0x4)
- {
- gKeyboard->handleTranslatedKeyUp(KEY_PAD_UP, 0);
- mJoyStickState &= ~0x4;
- }
- }
- if (js.lY >= 500)
- {
- if (!(mJoyStickState & 0x8))
- {
- gKeyboard->handleTranslatedKeyDown(KEY_PAD_DOWN, 0);
- mJoyStickState |= 0x8;
- }
- }
- else
- {
- if (mJoyStickState & 0x8)
- {
- gKeyboard->handleTranslatedKeyUp(KEY_PAD_DOWN, 0);
- mJoyStickState &= ~0x8;
- }
- }
+ mJoyAxis[0] = js.lX/1000.f;
+ mJoyAxis[1] = js.lY/1000.f;
+ mJoyAxis[2] = js.lZ/1000.f;
+ mJoyAxis[3] = js.lRx/1000.f;
+ mJoyAxis[4] = js.lRy/1000.f;
+ mJoyAxis[5] = js.lRz/1000.f;
- for( int i = 0; i < 15; i++ )
+ for (U32 i = 0; i < 16; i++)
{
- if ( js.rgbButtons[i] & 0x80 )
- {
- if (!(mJoyButtonState & (1<handleTranslatedKeyDown(KEY_BUTTON1+i, 0);
- mJoyButtonState |= (1<handleTranslatedKeyUp(KEY_BUTTON1+i, 0);
- mJoyButtonState &= ~(1<recurse(fp, tabs, tabsize, LSCP_TO_STACK, ptype, prunearg, scope, type, basetype, count, chunk, heap, stacksize, entry, entrycount, NULL);
chunk->addByte(LSCRIPTOpCodes[LOPC_JUMPNIF]);
@@ -8067,9 +8067,9 @@ void LLScriptIfElse::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass
case LSCP_EMIT_BYTE_CODE:
{
char jumpname1[32]; /*Flawfinder: ignore*/
- snprintf(jumpname1, sizeof(jumpname1), "##Temp Jump %d##", gTempJumpCount++); /*Flawfinder: ignore*/
+ snprintf(jumpname1, sizeof(jumpname1), "##Temp Jump %d##", gTempJumpCount++); /* Flawfinder: ignore */
char jumpname2[32]; /*Flawfinder: ignore*/
- snprintf(jumpname2, sizeof(jumpname2), "##Temp Jump %d##", gTempJumpCount++); /*Flawfinder: ignore*/
+ snprintf(jumpname2, sizeof(jumpname2), "##Temp Jump %d##", gTempJumpCount++); /* Flawfinder: ignore */
mExpression->recurse(fp, tabs, tabsize, LSCP_TO_STACK, ptype, prunearg, scope, type, basetype, count, chunk, heap, stacksize, entry, entrycount, NULL);
chunk->addByte(LSCRIPTOpCodes[LOPC_JUMPNIF]);
@@ -8170,9 +8170,9 @@ void LLScriptFor::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass pa
case LSCP_EMIT_BYTE_CODE:
{
char jumpname1[32]; /*Flawfinder: ignore*/
- snprintf(jumpname1, sizeof(jumpname1), "##Temp Jump %d##", gTempJumpCount++); /*Flawfinder: ignore*/
+ snprintf(jumpname1, sizeof(jumpname1), "##Temp Jump %d##", gTempJumpCount++); /* Flawfinder: ignore */
char jumpname2[32]; /*Flawfinder: ignore*/
- snprintf(jumpname2, sizeof(jumpname2), "##Temp Jump %d##", gTempJumpCount++); /*Flawfinder: ignore*/
+ snprintf(jumpname2, sizeof(jumpname2), "##Temp Jump %d##", gTempJumpCount++); /* Flawfinder: ignore */
if(mSequence)
mSequence->recurse(fp, tabs, tabsize, LSCP_TO_STACK, ptype, prunearg, scope, type, basetype, count, chunk, heap, stacksize, entry, entrycount, NULL);
@@ -8267,7 +8267,7 @@ void LLScriptDoWhile::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePas
case LSCP_EMIT_BYTE_CODE:
{
char jumpname1[32]; /*Flawfinder: ignore*/
- snprintf(jumpname1, sizeof(jumpname1), "##Temp Jump %d##", gTempJumpCount++); /*Flawfinder: ignore*/
+ snprintf(jumpname1, sizeof(jumpname1), "##Temp Jump %d##", gTempJumpCount++); /* Flawfinder: ignore */
chunk->addLabel(jumpname1);
mStatement->recurse(fp, tabs, tabsize, pass, ptype, prunearg, scope, type, basetype, count, chunk, heap, stacksize, entry, entrycount, NULL);
@@ -8341,9 +8341,9 @@ void LLScriptWhile::recurse(FILE *fp, S32 tabs, S32 tabsize, LSCRIPTCompilePass
case LSCP_EMIT_BYTE_CODE:
{
char jumpname1[32]; /*Flawfinder: ignore*/
- snprintf(jumpname1, sizeof(jumpname1), "##Temp Jump %d##", gTempJumpCount++); /*Flawfinder: ignore*/
+ snprintf(jumpname1, sizeof(jumpname1), "##Temp Jump %d##", gTempJumpCount++); /* Flawfinder: ignore */
char jumpname2[32]; /*Flawfinder: ignore*/
- snprintf(jumpname2, sizeof(jumpname2), "##Temp Jump %d##", gTempJumpCount++); /*Flawfinder: ignore*/
+ snprintf(jumpname2, sizeof(jumpname2), "##Temp Jump %d##", gTempJumpCount++); /* Flawfinder: ignore */
chunk->addLabel(jumpname1);
mExpression->recurse(fp, tabs, tabsize, LSCP_TO_STACK, ptype, prunearg, scope, type, basetype, count, chunk, heap, stacksize, entry, entrycount, NULL);
diff --git a/linden/indra/lscript/lscript_compile/lscript_tree.h b/linden/indra/lscript/lscript_compile/lscript_tree.h
index 11be92d..a70db87 100644
--- a/linden/indra/lscript/lscript_compile/lscript_tree.h
+++ b/linden/indra/lscript/lscript_compile/lscript_tree.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/lscript/lscript_compile/lscript_typecheck.cpp b/linden/indra/lscript/lscript_compile/lscript_typecheck.cpp
index fbef711..9fa7720 100644
--- a/linden/indra/lscript/lscript_compile/lscript_typecheck.cpp
+++ b/linden/indra/lscript/lscript_compile/lscript_typecheck.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/lscript/lscript_compile/lscript_typecheck.h b/linden/indra/lscript/lscript_compile/lscript_typecheck.h
index 4867a25..c10d11b 100644
--- a/linden/indra/lscript/lscript_compile/lscript_typecheck.h
+++ b/linden/indra/lscript/lscript_compile/lscript_typecheck.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/lscript/lscript_execute.h b/linden/indra/lscript/lscript_execute.h
index 736095a..82109fd 100644
--- a/linden/indra/lscript/lscript_execute.h
+++ b/linden/indra/lscript/lscript_execute.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/lscript/lscript_execute/lscript_execute.cpp b/linden/indra/lscript/lscript_execute/lscript_execute.cpp
index b5d395e..cc2c141 100644
--- a/linden/indra/lscript/lscript_execute/lscript_execute.cpp
+++ b/linden/indra/lscript/lscript_execute/lscript_execute.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -3015,7 +3016,7 @@ BOOL run_cast(U8 *buffer, S32 &offset, BOOL b_print, const LLUUID &id)
case LST_STRING:
{
S32 address, source = lscript_pop_int(buffer);
- snprintf(caststr, sizeof(caststr), "%d", source); /*Flawfinder: ignore*/
+ snprintf(caststr, sizeof(caststr), "%d", source); /* Flawfinder: ignore */
address = lsa_heap_add_data(buffer, new LLScriptLibData(caststr), get_max_heap_size(buffer), TRUE);
lscript_push(buffer, address);
}
@@ -3052,7 +3053,7 @@ BOOL run_cast(U8 *buffer, S32 &offset, BOOL b_print, const LLUUID &id)
{
S32 address;
F32 source = lscript_pop_float(buffer);
- snprintf(caststr, sizeof(caststr), "%f", source); /*Flawfinder: ignore*/
+ snprintf(caststr, sizeof(caststr), "%f", source); /* Flawfinder: ignore */
address = lsa_heap_add_data(buffer, new LLScriptLibData(caststr), get_max_heap_size(buffer), TRUE);
lscript_push(buffer, address);
}
@@ -3261,7 +3262,7 @@ BOOL run_cast(U8 *buffer, S32 &offset, BOOL b_print, const LLUUID &id)
S32 address;
LLVector3 source;
lscript_pop_vector(buffer, source);
- snprintf(caststr, sizeof(caststr), "<%5.5f, %5.5f, %5.5f>", source.mV[VX], source.mV[VY], source.mV[VZ]); /*Flawfinder: ignore*/
+ snprintf(caststr, sizeof(caststr), "<%5.5f, %5.5f, %5.5f>", source.mV[VX], source.mV[VY], source.mV[VZ]); /* Flawfinder: ignore */
address = lsa_heap_add_data(buffer, new LLScriptLibData(caststr), get_max_heap_size(buffer), TRUE);
lscript_push(buffer, address);
}
@@ -3294,7 +3295,7 @@ BOOL run_cast(U8 *buffer, S32 &offset, BOOL b_print, const LLUUID &id)
S32 address;
LLQuaternion source;
lscript_pop_quaternion(buffer, source);
- snprintf(caststr, sizeof(caststr), "<%5.5f, %5.5f, %5.5f, %5.5f>", source.mQ[VX], source.mQ[VY], source.mQ[VZ], source.mQ[VS]); /*Flawfinder: ignore*/
+ snprintf(caststr, sizeof(caststr), "<%5.5f, %5.5f, %5.5f, %5.5f>", source.mQ[VX], source.mQ[VY], source.mQ[VZ], source.mQ[VS]); /* Flawfinder: ignore */
address = lsa_heap_add_data(buffer, new LLScriptLibData(caststr), get_max_heap_size(buffer), TRUE);
lscript_push(buffer, address);
}
@@ -3356,6 +3357,7 @@ BOOL run_cast(U8 *buffer, S32 &offset, BOOL b_print, const LLUUID &id)
BOOL run_stacktos(U8 *buffer, S32 &offset, BOOL b_print, const LLUUID &id)
{
+ offset++;
S32 length = lscript_pop_int(buffer);
S32 i;
char *arg = new char[length];
diff --git a/linden/indra/lscript/lscript_execute/lscript_heapruntime.cpp b/linden/indra/lscript/lscript_execute/lscript_heapruntime.cpp
index 791fa1b..073a736 100644
--- a/linden/indra/lscript/lscript_execute/lscript_heapruntime.cpp
+++ b/linden/indra/lscript/lscript_execute/lscript_heapruntime.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/lscript/lscript_execute/lscript_heapruntime.h b/linden/indra/lscript/lscript_execute/lscript_heapruntime.h
index 3e65f58..8431ea5 100644
--- a/linden/indra/lscript/lscript_execute/lscript_heapruntime.h
+++ b/linden/indra/lscript/lscript_execute/lscript_heapruntime.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/lscript/lscript_execute/lscript_readlso.cpp b/linden/indra/lscript/lscript_execute/lscript_readlso.cpp
index ea40892..d750535 100644
--- a/linden/indra/lscript/lscript_execute/lscript_readlso.cpp
+++ b/linden/indra/lscript/lscript_execute/lscript_readlso.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/lscript/lscript_execute/lscript_readlso.h b/linden/indra/lscript/lscript_execute/lscript_readlso.h
index 7f72dfd..8fa5211 100644
--- a/linden/indra/lscript/lscript_execute/lscript_readlso.h
+++ b/linden/indra/lscript/lscript_execute/lscript_readlso.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/lscript/lscript_export.h b/linden/indra/lscript/lscript_export.h
index c53948f..d9f7f18 100644
--- a/linden/indra/lscript/lscript_export.h
+++ b/linden/indra/lscript/lscript_export.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/lscript/lscript_http.h b/linden/indra/lscript/lscript_http.h
index e92148c..c562093 100644
--- a/linden/indra/lscript/lscript_http.h
+++ b/linden/indra/lscript/lscript_http.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/lscript/lscript_library.h b/linden/indra/lscript/lscript_library.h
index 33fc9d6..8c4a3d0 100644
--- a/linden/indra/lscript/lscript_library.h
+++ b/linden/indra/lscript/lscript_library.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -426,11 +427,11 @@ public:
}
}
- LLScriptLibData(LLVector3 &vec) : mType(LST_VECTOR), mInteger(0), mFP(0.f), mKey(NULL), mString(NULL), mVec(vec), mQuat(), mListp(NULL)
+ LLScriptLibData(const LLVector3 &vec) : mType(LST_VECTOR), mInteger(0), mFP(0.f), mKey(NULL), mString(NULL), mVec(vec), mQuat(), mListp(NULL)
{
}
- LLScriptLibData(LLQuaternion &quat) : mType(LST_QUATERNION), mInteger(0), mFP(0.f), mKey(NULL), mString(NULL), mVec(), mQuat(quat), mListp(NULL)
+ LLScriptLibData(const LLQuaternion &quat) : mType(LST_QUATERNION), mInteger(0), mFP(0.f), mKey(NULL), mString(NULL), mVec(), mQuat(quat), mListp(NULL)
{
}
diff --git a/linden/indra/lscript/lscript_library/lscript_alloc.cpp b/linden/indra/lscript/lscript_library/lscript_alloc.cpp
index b39cd1f..99e6917 100644
--- a/linden/indra/lscript/lscript_library/lscript_alloc.cpp
+++ b/linden/indra/lscript/lscript_library/lscript_alloc.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/lscript/lscript_library/lscript_export.cpp b/linden/indra/lscript/lscript_library/lscript_export.cpp
index d0a23aa..be95d30 100644
--- a/linden/indra/lscript/lscript_library/lscript_export.cpp
+++ b/linden/indra/lscript/lscript_library/lscript_export.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/lscript/lscript_library/lscript_library.cpp b/linden/indra/lscript/lscript_library/lscript_library.cpp
index 7263ec3..ec1cc03 100644
--- a/linden/indra/lscript/lscript_library/lscript_library.cpp
+++ b/linden/indra/lscript/lscript_library/lscript_library.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -515,7 +516,7 @@ void LLScriptLibData::print(std::ostream &s, BOOL b_prepend_comma)
s << mInteger;
break;
case LST_FLOATINGPOINT:
- snprintf(tmp, 1024, "%f", mFP); /*Flawfinder: ignore*/
+ snprintf(tmp, 1024, "%f", mFP); /* Flawfinder: ignore */
s << tmp;
break;
case LST_KEY:
diff --git a/linden/indra/lscript/lscript_rt_interface.h b/linden/indra/lscript/lscript_rt_interface.h
index c8dceff..f595cbe 100644
--- a/linden/indra/lscript/lscript_rt_interface.h
+++ b/linden/indra/lscript/lscript_rt_interface.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/mac_crash_logger/mac_crash_logger.cpp b/linden/indra/mac_crash_logger/mac_crash_logger.cpp
index 4af95fe..b1f70e0 100644
--- a/linden/indra/mac_crash_logger/mac_crash_logger.cpp
+++ b/linden/indra/mac_crash_logger/mac_crash_logger.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/mac_updater/FSCopyObject.h b/linden/indra/mac_updater/FSCopyObject.h
index 6cbbf94..c39b2d9 100644
--- a/linden/indra/mac_updater/FSCopyObject.h
+++ b/linden/indra/mac_updater/FSCopyObject.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/mac_updater/GenLinkedList.h b/linden/indra/mac_updater/GenLinkedList.h
index b5aa572..23f2165 100644
--- a/linden/indra/mac_updater/GenLinkedList.h
+++ b/linden/indra/mac_updater/GenLinkedList.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/mac_updater/MoreFilesX.h b/linden/indra/mac_updater/MoreFilesX.h
index ce3be86..6e4718f 100644
--- a/linden/indra/mac_updater/MoreFilesX.h
+++ b/linden/indra/mac_updater/MoreFilesX.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/mac_updater/mac_updater.cpp b/linden/indra/mac_updater/mac_updater.cpp
index d05b73f..58819a2 100644
--- a/linden/indra/mac_updater/mac_updater.cpp
+++ b/linden/indra/mac_updater/mac_updater.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -65,9 +66,8 @@ EventHandlerRef gEventHandler = NULL;
OSStatus gFailure = noErr;
Boolean gCancelled = false;
-char *gUserServer;
+char *gUpdateURL;
char *gProductName;
-char gUpdateURL[2048]; /* Flawfinder: ignore */
void *updatethreadproc(void*);
@@ -324,20 +324,13 @@ int curl_progress_callback_func(void *clientp,
int parse_args(int argc, char **argv)
{
- // Check for old-type arguments.
- if (2 == argc)
- {
- gUserServer = argv[1];
- return 0;
- }
-
int j;
for (j = 1; j < argc; j++)
{
- if ((!strcmp(argv[j], "-userserver")) && (++j < argc))
+ if ((!strcmp(argv[j], "-url")) && (++j < argc))
{
- gUserServer = argv[j];
+ gUpdateURL = argv[j];
}
else if ((!strcmp(argv[j], "-name")) && (++j < argc))
{
@@ -357,17 +350,17 @@ int main(int argc, char **argv)
//
// Process command line arguments
//
- gUserServer = NULL;
+ gUpdateURL = NULL;
gProductName = NULL;
parse_args(argc, argv);
- if (!gUserServer)
+ if (!gUpdateURL)
{
- llinfos << "Usage: mac_updater -userserver [-name ] [-program ]" << llendl;
+ llinfos << "Usage: mac_updater -url [-name ] [-program ]" << llendl;
exit(1);
}
else
{
- llinfos << "User server is: " << gUserServer << llendl;
+ llinfos << "Update url is: " << gUpdateURL << llendl;
if (gProductName)
{
llinfos << "Product name is: " << gProductName << llendl;
@@ -380,9 +373,6 @@ int main(int argc, char **argv)
llinfos << "Starting " << gProductName << " Updater" << llendl;
- // Build the URL to download the update
- snprintf(gUpdateURL, sizeof(gUpdateURL), "http://secondlife.com/update-macos.php?userserver=%s", gUserServer); /* Flawfinder: ignore */
-
// Real UI...
OSStatus err;
IBNibRef nib = NULL;
@@ -390,7 +380,7 @@ int main(int argc, char **argv)
err = CreateNibReference(CFSTR("AutoUpdater"), &nib);
char windowTitle[MAX_PATH]; /* Flawfinder: ignore */
- snprintf(windowTitle, sizeof(windowTitle), "%s Updater", gProductName); /* Flawfinder: ignore */
+ snprintf(windowTitle, sizeof(windowTitle), "%s Updater", gProductName);
CFStringRef windowTitleRef = NULL;
windowTitleRef = CFStringCreateWithCString(NULL, windowTitle, kCFStringEncodingUTF8);
@@ -564,8 +554,8 @@ int restoreObject(const char* aside, const char* target, const char* path, const
{
char source[PATH_MAX]; /* Flawfinder: ignore */
char dest[PATH_MAX]; /* Flawfinder: ignore */
- snprintf(source, sizeof(source), "%s/%s/%s", aside, path, object); /* Flawfinder: ignore */
- snprintf(dest, sizeof(dest), "%s/%s", target, path); /* Flawfinder: ignore */
+ snprintf(source, sizeof(source), "%s/%s/%s", aside, path, object);
+ snprintf(dest, sizeof(dest), "%s/%s", target, path);
FSRef sourceRef;
FSRef destRef;
OSStatus err;
@@ -599,11 +589,11 @@ void filterFile(const char* filename)
{
char temp[PATH_MAX]; /* Flawfinder: ignore */
// First copy the target's version, so we can run it through sed.
- snprintf(temp, sizeof(temp), "cp '%s' '%s.tmp'", filename, filename); /* Flawfinder: ignore */
+ snprintf(temp, sizeof(temp), "cp '%s' '%s.tmp'", filename, filename);
system(temp); /* Flawfinder: ignore */
// Now run it through sed.
- snprintf(temp, sizeof(temp), /* Flawfinder: ignore */
+ snprintf(temp, sizeof(temp),
"sed 's/Second Life/%s/g' '%s.tmp' > '%s'", gProductName, filename, filename);
system(temp); /* Flawfinder: ignore */
}
@@ -759,7 +749,7 @@ void *updatethreadproc(void*)
throw 0;
}
- snprintf(target, sizeof(target), "/Applications/%s.app", gProductName); /* Flawfinder: ignore */
+ snprintf(target, sizeof(target), "/Applications/%s.app", gProductName);
memset(&targetRef, 0, sizeof(targetRef));
err = FSPathMakeRef((UInt8*)target, &targetRef, NULL);
@@ -855,7 +845,7 @@ void *updatethreadproc(void*)
chdir(tempDir);
- snprintf(temp, sizeof(temp), "SecondLife.dmg"); /* Flawfinder: ignore */
+ snprintf(temp, sizeof(temp), "SecondLife.dmg");
downloadFile = fopen(temp, "wb"); /* Flawfinder: ignore */
if(downloadFile == NULL)
@@ -953,7 +943,7 @@ void *updatethreadproc(void*)
// Get an FSRef to the new application on the disk image
FSRef sourceRef;
- snprintf(temp, sizeof(temp), "%s/mnt/Second Life.app", tempDir); /* Flawfinder: ignore */
+ snprintf(temp, sizeof(temp), "%s/mnt/Second Life.app", tempDir);
llinfos << "Source application is: " << temp << llendl;
@@ -986,7 +976,7 @@ void *updatethreadproc(void*)
{
// Construct the name of the target based on the product name
char appName[MAX_PATH]; /* Flawfinder: ignore */
- snprintf(appName, sizeof(appName), "%s.app", gProductName); /* Flawfinder: ignore */
+ snprintf(appName, sizeof(appName), "%s.app", gProductName);
utf8str_to_HFSUniStr255( &appNameUniStr, appName );
}
@@ -1035,7 +1025,7 @@ void *updatethreadproc(void*)
llinfos << "Clearing cache..." << llendl;
char mask[LL_MAX_PATH]; /* Flawfinder: ignore */
- snprintf(mask, LL_MAX_PATH, "%s*.*", gDirUtilp->getDirDelimiter().c_str()); /* Flawfinder: ignore */
+ snprintf(mask, LL_MAX_PATH, "%s*.*", gDirUtilp->getDirDelimiter().c_str());
gDirUtilp->deleteFilesInDir(gDirUtilp->getExpandedFilename(LL_PATH_CACHE,""),mask);
llinfos << "Clear complete." << llendl;
@@ -1067,7 +1057,7 @@ void *updatethreadproc(void*)
{
llinfos << "Detaching disk image." << llendl;
- snprintf(temp, sizeof(temp), "hdiutil detach '%s'", deviceNode); /* Flawfinder: ignore */
+ snprintf(temp, sizeof(temp), "hdiutil detach '%s'", deviceNode);
system(temp); /* Flawfinder: ignore */
}
@@ -1092,12 +1082,12 @@ void *updatethreadproc(void*)
{
llinfos << "Touching application bundle." << llendl;
- snprintf(temp, sizeof(temp), "touch '%s'", target); /* Flawfinder: ignore */
+ snprintf(temp, sizeof(temp), "touch '%s'", target);
system(temp); /* Flawfinder: ignore */
llinfos << "Launching updated application." << llendl;
- snprintf(temp, sizeof(temp), "open '%s'", target); /* Flawfinder: ignore */
+ snprintf(temp, sizeof(temp), "open '%s'", target);
system(temp); /* Flawfinder: ignore */
}
diff --git a/linden/indra/newview/English.lproj/InfoPlist.strings b/linden/indra/newview/English.lproj/InfoPlist.strings
index 6efc60a..54687b1 100644
--- a/linden/indra/newview/English.lproj/InfoPlist.strings
+++ b/linden/indra/newview/English.lproj/InfoPlist.strings
@@ -1,5 +1,5 @@
/* Localized versions of Info.plist keys */
CFBundleName = "Second Life";
-CFBundleShortVersionString = "Second Life version 1.14.0.0";
-CFBundleGetInfoString = "Second Life version 1.14.0.0, Copyright 2004-2007 Linden Research, Inc.";
+CFBundleShortVersionString = "Second Life version 1.15.0.2";
+CFBundleGetInfoString = "Second Life version 1.15.0.2, Copyright 2004-2007 Linden Research, Inc.";
diff --git a/linden/indra/newview/Info-SecondLife.plist b/linden/indra/newview/Info-SecondLife.plist
index fbfd040..0908e18 100644
--- a/linden/indra/newview/Info-SecondLife.plist
+++ b/linden/indra/newview/Info-SecondLife.plist
@@ -32,7 +32,7 @@
CFBundleVersion
- 1.14.0.0
+ 1.15.0.2
CSResourcesFileMapped
diff --git a/linden/indra/newview/VertexCache.h b/linden/indra/newview/VertexCache.h
index 1c9783d..76ad3cc 100644
--- a/linden/indra/newview/VertexCache.h
+++ b/linden/indra/newview/VertexCache.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/VorbisFramework.h b/linden/indra/newview/VorbisFramework.h
index 8d4369d..6af4a14 100644
--- a/linden/indra/newview/VorbisFramework.h
+++ b/linden/indra/newview/VorbisFramework.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/app_settings/keywords.ini b/linden/indra/newview/app_settings/keywords.ini
index bf49c2c..f53a384 100644
--- a/linden/indra/newview/app_settings/keywords.ini
+++ b/linden/indra/newview/app_settings/keywords.ini
@@ -438,6 +438,10 @@ PARCEL_FLAG_USE_BAN_LIST Used with llGetParcelFlags to find if a parcel uses a
PARCEL_FLAG_USE_LAND_PASS_LIST Used with llGetParcelFlags to find if a parcel allows passes to be purchased
PARCEL_FLAG_LOCAL_SOUND_ONLY Used with llGetParcelFlags to find if a parcel restricts spacialized sound to the parcel
PARCEL_FLAG_RESTRICT_PUSHOBJECT Used with llGetParcelFlags to find if a parcel restricts llPushObject() calls
+PARCEL_FLAG_LOCAL_SOUND_ONLY Used with llGetParcelFlags to find if a parcel restricts spacialized sound to the parcel
+PARCEL_FLAG_RESTRICT_PUSHOBJECT Used with llGetParcelFlags to find if a parcel restricts llPushObject() calls
+PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY Used with llGetParcelFlags to find if a parcel allows all objects to enter
+PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY Used with llGetParcelFlags to find if a parcel only allows group (and owner) objects to enter
REGION_FLAG_ALLOW_DAMAGE Used with llGetRegionFlags to find if a region is entirely damage enabled
REGION_FLAG_FIXED_SUN Used with llGetRegionFlags to find if a region has a fixed sun position
diff --git a/linden/indra/newview/app_settings/message.xml b/linden/indra/newview/app_settings/message.xml
new file mode 100644
index 0000000..5402a64
--- /dev/null
+++ b/linden/indra/newview/app_settings/message.xml
@@ -0,0 +1,228 @@
+
+
+
+ serverDefaults
+
+
+ simulator
+ template
+
+ userserver
+ template
+
+ spaceserver
+ template
+
+ dataserver
+ template
+
+ logDataserver
+ template
+
+ inventoryDataserver
+ template
+
+ viewer
+ template
+
+
+ messages
+
+
+
+ PacketAck
+
+ builder
+ template
+ trusted-sender
+ false
+
+
+ OpenCircuit
+
+ builder
+ template
+ trusted-sender
+ false
+
+
+ CloseCircuit
+
+ builder
+ template
+ trusted-sender
+ false
+
+
+ StartPingCheck
+
+ builder
+ template
+ trusted-sender
+ false
+
+
+ CompletePingCheck
+
+ builder
+ template
+ trusted-sender
+ false
+
+
+ AddCircuitCode
+
+ builder
+ template
+ trusted-sender
+ true
+
+
+ UseCircuitCode
+
+ builder
+ template
+ trusted-sender
+ false
+
+
+ CreateTrustedCircuit
+
+ builder
+ template
+ trusted-sender
+ false
+
+
+
+ ConnectAgentToUserserver
+
+ builder
+ template
+ trusted-sender
+ false
+
+
+
+ SecuredTemplateChecksumRequest
+
+ builder
+ template
+ trusted-sender
+ false
+
+
+ CompleteAgentMovement
+
+ builder
+ template
+ trusted-sender
+ false
+
+
+ EconomyDataRequest
+
+ builder
+ template
+ trusted-sender
+ false
+
+
+ ViewerEffect
+
+ builder
+ template
+ trusted-sender
+ false
+
+
+
+ AgentUpdate
+
+ builder
+ template
+ trusted-sender
+ false
+
+
+
+ ImagePacket
+
+ builder
+ template
+ trusted-sender
+ false
+
+
+ LayerData
+
+ builder
+ template
+ trusted-sender
+ false
+
+
+ ObjectUpdateCached
+
+ builder
+ template
+ trusted-sender
+ false
+
+
+ ObjectUpdateCompressed
+
+ builder
+ template
+ trusted-sender
+ false
+
+
+ ObjectUpdate
+
+ builder
+ template
+ trusted-sender
+ false
+
+
+ ImprovedTerseObjectUpdate
+
+ builder
+ template
+ trusted-sender
+ false
+
+
+ AvatarAnimation
+
+ builder
+ template
+ trusted-sender
+ false
+
+
+ AvatarAppearance
+
+ builder
+ template
+ trusted-sender
+ false
+
+
+
+
diff --git a/linden/indra/newview/app_settings/shaders/class1/environment/glowF.glsl b/linden/indra/newview/app_settings/shaders/class1/environment/glowF.glsl
new file mode 100644
index 0000000..670b976
--- /dev/null
+++ b/linden/indra/newview/app_settings/shaders/class1/environment/glowF.glsl
@@ -0,0 +1,14 @@
+uniform sampler2D diffuseMap;
+
+void main()
+{
+ vec4 color1 = texture2D(diffuseMap, gl_TexCoord[0].xy);
+ vec4 color2 = texture2D(diffuseMap, gl_TexCoord[1].xy);
+ vec4 color3 = texture2D(diffuseMap, gl_TexCoord[2].xy);
+ vec4 color4 = texture2D(diffuseMap, gl_TexCoord[3].xy);
+ vec4 color5 = texture2D(diffuseMap, gl_TexCoord[4].xy);
+
+ vec4 col = (color1+color2+color3+color4+color5)*0.21;
+ col = max(col, col*0.25 + color5*0.75);
+ gl_FragColor = col;
+}
diff --git a/linden/indra/newview/app_settings/shaders/class1/environment/glowV.glsl b/linden/indra/newview/app_settings/shaders/class1/environment/glowV.glsl
new file mode 100644
index 0000000..3b1a72e
--- /dev/null
+++ b/linden/indra/newview/app_settings/shaders/class1/environment/glowV.glsl
@@ -0,0 +1,10 @@
+uniform float delta;
+void main()
+{
+ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
+ gl_TexCoord[0].xy = gl_MultiTexCoord0.xy + vec2(delta, delta);
+ gl_TexCoord[1].xy = gl_MultiTexCoord0.xy + vec2(-delta, delta);
+ gl_TexCoord[2].xy = gl_MultiTexCoord0.xy + vec2(-delta, -delta);
+ gl_TexCoord[3].xy = gl_MultiTexCoord0.xy + vec2(delta, -delta);
+ gl_TexCoord[4].xy = gl_MultiTexCoord0.xy;
+}
diff --git a/linden/indra/newview/app_settings/shaders/class2/environment/waterF.glsl b/linden/indra/newview/app_settings/shaders/class2/environment/waterF.glsl
index e0e79e9..11a057b 100644
--- a/linden/indra/newview/app_settings/shaders/class2/environment/waterF.glsl
+++ b/linden/indra/newview/app_settings/shaders/class2/environment/waterF.glsl
@@ -132,5 +132,7 @@ void main()
//apply fog
applyScatter(color.rgb);
+ color.a = spec*0.5+fb.a;
+
gl_FragColor = color;
}
diff --git a/linden/indra/newview/audiosettings.h b/linden/indra/newview/audiosettings.h
index 1bf3129..714d02a 100644
--- a/linden/indra/newview/audiosettings.h
+++ b/linden/indra/newview/audiosettings.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/character/avatar_eye.llm b/linden/indra/newview/character/avatar_eye.llm
deleted file mode 100644
index 8c6e74e..0000000
Binary files a/linden/indra/newview/character/avatar_eye.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_eye_1.llm b/linden/indra/newview/character/avatar_eye_1.llm
deleted file mode 100644
index 7a3b0d6..0000000
Binary files a/linden/indra/newview/character/avatar_eye_1.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_eyelashes.llm b/linden/indra/newview/character/avatar_eyelashes.llm
deleted file mode 100644
index 99995b5..0000000
Binary files a/linden/indra/newview/character/avatar_eyelashes.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_hair.llm b/linden/indra/newview/character/avatar_hair.llm
deleted file mode 100644
index df99de8..0000000
Binary files a/linden/indra/newview/character/avatar_hair.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_hair_1.llm b/linden/indra/newview/character/avatar_hair_1.llm
deleted file mode 100644
index 6de31fd..0000000
Binary files a/linden/indra/newview/character/avatar_hair_1.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_hair_2.llm b/linden/indra/newview/character/avatar_hair_2.llm
deleted file mode 100644
index 47d02ba..0000000
Binary files a/linden/indra/newview/character/avatar_hair_2.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_hair_3.llm b/linden/indra/newview/character/avatar_hair_3.llm
deleted file mode 100644
index 107f9e2..0000000
Binary files a/linden/indra/newview/character/avatar_hair_3.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_hair_4.llm b/linden/indra/newview/character/avatar_hair_4.llm
deleted file mode 100644
index 1b9a12a..0000000
Binary files a/linden/indra/newview/character/avatar_hair_4.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_hair_5.llm b/linden/indra/newview/character/avatar_hair_5.llm
deleted file mode 100644
index 1b9a12a..0000000
Binary files a/linden/indra/newview/character/avatar_hair_5.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_head.llm b/linden/indra/newview/character/avatar_head.llm
deleted file mode 100644
index 9577b4c..0000000
Binary files a/linden/indra/newview/character/avatar_head.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_head_1.llm b/linden/indra/newview/character/avatar_head_1.llm
deleted file mode 100644
index 26291e6..0000000
Binary files a/linden/indra/newview/character/avatar_head_1.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_head_2.llm b/linden/indra/newview/character/avatar_head_2.llm
deleted file mode 100644
index c2b808b..0000000
Binary files a/linden/indra/newview/character/avatar_head_2.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_head_3.llm b/linden/indra/newview/character/avatar_head_3.llm
deleted file mode 100644
index a0676b1..0000000
Binary files a/linden/indra/newview/character/avatar_head_3.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_head_4.llm b/linden/indra/newview/character/avatar_head_4.llm
deleted file mode 100644
index 5035585..0000000
Binary files a/linden/indra/newview/character/avatar_head_4.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_lad.xml b/linden/indra/newview/character/avatar_lad.xml
deleted file mode 100644
index 3b81fa2..0000000
--- a/linden/indra/newview/character/avatar_lad.xml
+++ /dev/null
@@ -1,11223 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/linden/indra/newview/character/avatar_lower_body.llm b/linden/indra/newview/character/avatar_lower_body.llm
deleted file mode 100644
index 0420899..0000000
Binary files a/linden/indra/newview/character/avatar_lower_body.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_lower_body_1.llm b/linden/indra/newview/character/avatar_lower_body_1.llm
deleted file mode 100644
index 1394eb8..0000000
Binary files a/linden/indra/newview/character/avatar_lower_body_1.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_lower_body_2.llm b/linden/indra/newview/character/avatar_lower_body_2.llm
deleted file mode 100644
index 0da9c12..0000000
Binary files a/linden/indra/newview/character/avatar_lower_body_2.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_lower_body_3.llm b/linden/indra/newview/character/avatar_lower_body_3.llm
deleted file mode 100644
index f3c49a1..0000000
Binary files a/linden/indra/newview/character/avatar_lower_body_3.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_lower_body_4.llm b/linden/indra/newview/character/avatar_lower_body_4.llm
deleted file mode 100644
index e717210..0000000
Binary files a/linden/indra/newview/character/avatar_lower_body_4.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_skeleton.xml b/linden/indra/newview/character/avatar_skeleton.xml
deleted file mode 100644
index 5e73804..0000000
--- a/linden/indra/newview/character/avatar_skeleton.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/linden/indra/newview/character/avatar_skirt.llm b/linden/indra/newview/character/avatar_skirt.llm
deleted file mode 100644
index 08ce3d1..0000000
Binary files a/linden/indra/newview/character/avatar_skirt.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_skirt_1.llm b/linden/indra/newview/character/avatar_skirt_1.llm
deleted file mode 100644
index 88076c3..0000000
Binary files a/linden/indra/newview/character/avatar_skirt_1.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_skirt_2.llm b/linden/indra/newview/character/avatar_skirt_2.llm
deleted file mode 100644
index 73b3eff..0000000
Binary files a/linden/indra/newview/character/avatar_skirt_2.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_skirt_3.llm b/linden/indra/newview/character/avatar_skirt_3.llm
deleted file mode 100644
index ded546f..0000000
Binary files a/linden/indra/newview/character/avatar_skirt_3.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_skirt_4.llm b/linden/indra/newview/character/avatar_skirt_4.llm
deleted file mode 100644
index b9d5cb9..0000000
Binary files a/linden/indra/newview/character/avatar_skirt_4.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_upper_body.llm b/linden/indra/newview/character/avatar_upper_body.llm
deleted file mode 100644
index da7d990..0000000
Binary files a/linden/indra/newview/character/avatar_upper_body.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_upper_body_1.llm b/linden/indra/newview/character/avatar_upper_body_1.llm
deleted file mode 100644
index 31e104c..0000000
Binary files a/linden/indra/newview/character/avatar_upper_body_1.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_upper_body_2.llm b/linden/indra/newview/character/avatar_upper_body_2.llm
deleted file mode 100644
index c1f4199..0000000
Binary files a/linden/indra/newview/character/avatar_upper_body_2.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_upper_body_3.llm b/linden/indra/newview/character/avatar_upper_body_3.llm
deleted file mode 100644
index 9e89ed8..0000000
Binary files a/linden/indra/newview/character/avatar_upper_body_3.llm and /dev/null differ
diff --git a/linden/indra/newview/character/avatar_upper_body_4.llm b/linden/indra/newview/character/avatar_upper_body_4.llm
deleted file mode 100644
index ec836d1..0000000
Binary files a/linden/indra/newview/character/avatar_upper_body_4.llm and /dev/null differ
diff --git a/linden/indra/newview/character/blush_alpha.tga b/linden/indra/newview/character/blush_alpha.tga
deleted file mode 100644
index 05be7e7..0000000
Binary files a/linden/indra/newview/character/blush_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/body_skingrain.tga b/linden/indra/newview/character/body_skingrain.tga
deleted file mode 100644
index 7264baa..0000000
Binary files a/linden/indra/newview/character/body_skingrain.tga and /dev/null differ
diff --git a/linden/indra/newview/character/bodyfreckles_alpha.tga b/linden/indra/newview/character/bodyfreckles_alpha.tga
deleted file mode 100644
index d30ab3d..0000000
Binary files a/linden/indra/newview/character/bodyfreckles_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/bump_face_wrinkles.tga b/linden/indra/newview/character/bump_face_wrinkles.tga
deleted file mode 100644
index 54bf7a5..0000000
Binary files a/linden/indra/newview/character/bump_face_wrinkles.tga and /dev/null differ
diff --git a/linden/indra/newview/character/bump_head_base.tga b/linden/indra/newview/character/bump_head_base.tga
deleted file mode 100644
index fa35685..0000000
Binary files a/linden/indra/newview/character/bump_head_base.tga and /dev/null differ
diff --git a/linden/indra/newview/character/bump_lowerbody_base.tga b/linden/indra/newview/character/bump_lowerbody_base.tga
deleted file mode 100644
index 498ea3c..0000000
Binary files a/linden/indra/newview/character/bump_lowerbody_base.tga and /dev/null differ
diff --git a/linden/indra/newview/character/bump_pants_wrinkles.tga b/linden/indra/newview/character/bump_pants_wrinkles.tga
deleted file mode 100644
index cca7241..0000000
Binary files a/linden/indra/newview/character/bump_pants_wrinkles.tga and /dev/null differ
diff --git a/linden/indra/newview/character/bump_shirt_wrinkles.tga b/linden/indra/newview/character/bump_shirt_wrinkles.tga
deleted file mode 100644
index 9e0d757..0000000
Binary files a/linden/indra/newview/character/bump_shirt_wrinkles.tga and /dev/null differ
diff --git a/linden/indra/newview/character/bump_upperbody_base.tga b/linden/indra/newview/character/bump_upperbody_base.tga
deleted file mode 100644
index e57d635..0000000
Binary files a/linden/indra/newview/character/bump_upperbody_base.tga and /dev/null differ
diff --git a/linden/indra/newview/character/eyebrows_alpha.tga b/linden/indra/newview/character/eyebrows_alpha.tga
deleted file mode 100644
index c363e48..0000000
Binary files a/linden/indra/newview/character/eyebrows_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/eyeliner_alpha.tga b/linden/indra/newview/character/eyeliner_alpha.tga
deleted file mode 100644
index 1611eb3..0000000
Binary files a/linden/indra/newview/character/eyeliner_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/eyeshadow_inner_alpha.tga b/linden/indra/newview/character/eyeshadow_inner_alpha.tga
deleted file mode 100644
index 37d7919..0000000
Binary files a/linden/indra/newview/character/eyeshadow_inner_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/eyeshadow_outer_alpha.tga b/linden/indra/newview/character/eyeshadow_outer_alpha.tga
deleted file mode 100644
index 00eef9d..0000000
Binary files a/linden/indra/newview/character/eyeshadow_outer_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/eyewhite.tga b/linden/indra/newview/character/eyewhite.tga
deleted file mode 100644
index a720496..0000000
Binary files a/linden/indra/newview/character/eyewhite.tga and /dev/null differ
diff --git a/linden/indra/newview/character/facehair_chincurtains_alpha.tga b/linden/indra/newview/character/facehair_chincurtains_alpha.tga
deleted file mode 100644
index b103970..0000000
Binary files a/linden/indra/newview/character/facehair_chincurtains_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/facehair_moustache_alpha.tga b/linden/indra/newview/character/facehair_moustache_alpha.tga
deleted file mode 100644
index 4068c4f..0000000
Binary files a/linden/indra/newview/character/facehair_moustache_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/facehair_sideburns_alpha.tga b/linden/indra/newview/character/facehair_sideburns_alpha.tga
deleted file mode 100644
index acddc2d..0000000
Binary files a/linden/indra/newview/character/facehair_sideburns_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/facehair_soulpatch_alpha.tga b/linden/indra/newview/character/facehair_soulpatch_alpha.tga
deleted file mode 100644
index 687091a..0000000
Binary files a/linden/indra/newview/character/facehair_soulpatch_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/freckles_alpha.tga b/linden/indra/newview/character/freckles_alpha.tga
deleted file mode 100644
index a9a4ec0..0000000
Binary files a/linden/indra/newview/character/freckles_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/genepool.xml b/linden/indra/newview/character/genepool.xml
deleted file mode 100644
index 52300c2..0000000
--- a/linden/indra/newview/character/genepool.xml
+++ /dev/null
@@ -1,7107 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/linden/indra/newview/character/glove_length_alpha.tga b/linden/indra/newview/character/glove_length_alpha.tga
deleted file mode 100644
index db89ad5..0000000
Binary files a/linden/indra/newview/character/glove_length_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/gloves_fingers_alpha.tga b/linden/indra/newview/character/gloves_fingers_alpha.tga
deleted file mode 100644
index dba2eec..0000000
Binary files a/linden/indra/newview/character/gloves_fingers_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/head_alpha.tga b/linden/indra/newview/character/head_alpha.tga
deleted file mode 100644
index 8164525..0000000
Binary files a/linden/indra/newview/character/head_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/head_color.tga b/linden/indra/newview/character/head_color.tga
deleted file mode 100644
index 74b1b30..0000000
Binary files a/linden/indra/newview/character/head_color.tga and /dev/null differ
diff --git a/linden/indra/newview/character/head_hair.tga b/linden/indra/newview/character/head_hair.tga
deleted file mode 100644
index 5321f35..0000000
Binary files a/linden/indra/newview/character/head_hair.tga and /dev/null differ
diff --git a/linden/indra/newview/character/head_highlights_alpha.tga b/linden/indra/newview/character/head_highlights_alpha.tga
deleted file mode 100644
index 8dc5239..0000000
Binary files a/linden/indra/newview/character/head_highlights_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/head_shading_alpha.tga b/linden/indra/newview/character/head_shading_alpha.tga
deleted file mode 100644
index e8ea490..0000000
Binary files a/linden/indra/newview/character/head_shading_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/head_skingrain.tga b/linden/indra/newview/character/head_skingrain.tga
deleted file mode 100644
index b42dee0..0000000
Binary files a/linden/indra/newview/character/head_skingrain.tga and /dev/null differ
diff --git a/linden/indra/newview/character/jacket_length_lower_alpha.tga b/linden/indra/newview/character/jacket_length_lower_alpha.tga
deleted file mode 100644
index 722bc19..0000000
Binary files a/linden/indra/newview/character/jacket_length_lower_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/jacket_length_upper_alpha.tga b/linden/indra/newview/character/jacket_length_upper_alpha.tga
deleted file mode 100644
index e9db7e7..0000000
Binary files a/linden/indra/newview/character/jacket_length_upper_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/jacket_open_lower_alpha.tga b/linden/indra/newview/character/jacket_open_lower_alpha.tga
deleted file mode 100644
index db0c2fb..0000000
Binary files a/linden/indra/newview/character/jacket_open_lower_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/jacket_open_upper_alpha.tga b/linden/indra/newview/character/jacket_open_upper_alpha.tga
deleted file mode 100644
index 71b8a0b..0000000
Binary files a/linden/indra/newview/character/jacket_open_upper_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/lipgloss_alpha.tga b/linden/indra/newview/character/lipgloss_alpha.tga
deleted file mode 100644
index 78ceeca..0000000
Binary files a/linden/indra/newview/character/lipgloss_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/lips_mask.tga b/linden/indra/newview/character/lips_mask.tga
deleted file mode 100644
index ae1401c..0000000
Binary files a/linden/indra/newview/character/lips_mask.tga and /dev/null differ
diff --git a/linden/indra/newview/character/lipstick_alpha.tga b/linden/indra/newview/character/lipstick_alpha.tga
deleted file mode 100644
index 2795f1b..0000000
Binary files a/linden/indra/newview/character/lipstick_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/lowerbody_color.tga b/linden/indra/newview/character/lowerbody_color.tga
deleted file mode 100644
index a63aa12..0000000
Binary files a/linden/indra/newview/character/lowerbody_color.tga and /dev/null differ
diff --git a/linden/indra/newview/character/lowerbody_highlights_alpha.tga b/linden/indra/newview/character/lowerbody_highlights_alpha.tga
deleted file mode 100644
index ae3413a..0000000
Binary files a/linden/indra/newview/character/lowerbody_highlights_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/lowerbody_shading_alpha.tga b/linden/indra/newview/character/lowerbody_shading_alpha.tga
deleted file mode 100644
index 0242663..0000000
Binary files a/linden/indra/newview/character/lowerbody_shading_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/nailpolish_alpha.tga b/linden/indra/newview/character/nailpolish_alpha.tga
deleted file mode 100644
index 91af762..0000000
Binary files a/linden/indra/newview/character/nailpolish_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/pants_length_alpha.tga b/linden/indra/newview/character/pants_length_alpha.tga
deleted file mode 100644
index 3c4f21c..0000000
Binary files a/linden/indra/newview/character/pants_length_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/pants_waist_alpha.tga b/linden/indra/newview/character/pants_waist_alpha.tga
deleted file mode 100644
index 35658c0..0000000
Binary files a/linden/indra/newview/character/pants_waist_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/rosyface_alpha.tga b/linden/indra/newview/character/rosyface_alpha.tga
deleted file mode 100644
index a0c8513..0000000
Binary files a/linden/indra/newview/character/rosyface_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/rouge_alpha.tga b/linden/indra/newview/character/rouge_alpha.tga
deleted file mode 100644
index a0c8513..0000000
Binary files a/linden/indra/newview/character/rouge_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/shirt_bottom_alpha.tga b/linden/indra/newview/character/shirt_bottom_alpha.tga
deleted file mode 100644
index 7cce03d..0000000
Binary files a/linden/indra/newview/character/shirt_bottom_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/shirt_collar_alpha.tga b/linden/indra/newview/character/shirt_collar_alpha.tga
deleted file mode 100644
index f55f635..0000000
Binary files a/linden/indra/newview/character/shirt_collar_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/shirt_collar_back_alpha.tga b/linden/indra/newview/character/shirt_collar_back_alpha.tga
deleted file mode 100644
index 43a6453..0000000
Binary files a/linden/indra/newview/character/shirt_collar_back_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/shirt_sleeve_alpha.tga b/linden/indra/newview/character/shirt_sleeve_alpha.tga
deleted file mode 100644
index e3b18f4..0000000
Binary files a/linden/indra/newview/character/shirt_sleeve_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/shoe_height_alpha.tga b/linden/indra/newview/character/shoe_height_alpha.tga
deleted file mode 100644
index d08dd75..0000000
Binary files a/linden/indra/newview/character/shoe_height_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/skirt_length_alpha.tga b/linden/indra/newview/character/skirt_length_alpha.tga
deleted file mode 100644
index c867994..0000000
Binary files a/linden/indra/newview/character/skirt_length_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/skirt_slit_back_alpha.tga b/linden/indra/newview/character/skirt_slit_back_alpha.tga
deleted file mode 100644
index 0e49688..0000000
Binary files a/linden/indra/newview/character/skirt_slit_back_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/skirt_slit_front_alpha.tga b/linden/indra/newview/character/skirt_slit_front_alpha.tga
deleted file mode 100644
index 888bbf7..0000000
Binary files a/linden/indra/newview/character/skirt_slit_front_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/skirt_slit_left_alpha.tga b/linden/indra/newview/character/skirt_slit_left_alpha.tga
deleted file mode 100644
index 210feac..0000000
Binary files a/linden/indra/newview/character/skirt_slit_left_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/skirt_slit_right_alpha.tga b/linden/indra/newview/character/skirt_slit_right_alpha.tga
deleted file mode 100644
index ce11c64..0000000
Binary files a/linden/indra/newview/character/skirt_slit_right_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/underpants_trial_female.tga b/linden/indra/newview/character/underpants_trial_female.tga
deleted file mode 100644
index 96bf732..0000000
Binary files a/linden/indra/newview/character/underpants_trial_female.tga and /dev/null differ
diff --git a/linden/indra/newview/character/underpants_trial_male.tga b/linden/indra/newview/character/underpants_trial_male.tga
deleted file mode 100644
index 095695c..0000000
Binary files a/linden/indra/newview/character/underpants_trial_male.tga and /dev/null differ
diff --git a/linden/indra/newview/character/undershirt_trial_female.tga b/linden/indra/newview/character/undershirt_trial_female.tga
deleted file mode 100644
index e17a309..0000000
Binary files a/linden/indra/newview/character/undershirt_trial_female.tga and /dev/null differ
diff --git a/linden/indra/newview/character/upperbody_color.tga b/linden/indra/newview/character/upperbody_color.tga
deleted file mode 100644
index 85fcc41..0000000
Binary files a/linden/indra/newview/character/upperbody_color.tga and /dev/null differ
diff --git a/linden/indra/newview/character/upperbody_highlights_alpha.tga b/linden/indra/newview/character/upperbody_highlights_alpha.tga
deleted file mode 100644
index 2d8102b..0000000
Binary files a/linden/indra/newview/character/upperbody_highlights_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/upperbody_shading_alpha.tga b/linden/indra/newview/character/upperbody_shading_alpha.tga
deleted file mode 100644
index b420506..0000000
Binary files a/linden/indra/newview/character/upperbody_shading_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/character/upperbodyfreckles_alpha.tga b/linden/indra/newview/character/upperbodyfreckles_alpha.tga
deleted file mode 100644
index 76c7ce8..0000000
Binary files a/linden/indra/newview/character/upperbodyfreckles_alpha.tga and /dev/null differ
diff --git a/linden/indra/newview/featuretable.txt b/linden/indra/newview/featuretable.txt
index 17e2427..28b1ddc 100644
--- a/linden/indra/newview/featuretable.txt
+++ b/linden/indra/newview/featuretable.txt
@@ -153,21 +153,8 @@ RenderLighting 1 0
RenderParticleCount 1 2048
RenderTerrainDetail 1 0
-list GeForce3
-
-list ATI
-
-list Radeon8500
-RenderLighting 1 0
-RenderParticleCount 1 4096
-
-// Hacked to be paranoid "safe"
-list Radeon9700
-RenderParticleCount 1 4096
-
-// Hacked to be paranoid "safe"
-list MobilityRadeon9000
-RenderLighting 1 0
-RenderParticleCount 1 4096
+list ATI_Mobility_Radeon_X3xx
+VertexShaderEnable 1 0
-list GeForceFX
+list ATI_Mobility_Radeon_X6xx
+VertexShaderEnable 1 0
diff --git a/linden/indra/newview/files.lst b/linden/indra/newview/files.lst
index 000799d..8fdd239 100644
--- a/linden/indra/newview/files.lst
+++ b/linden/indra/newview/files.lst
@@ -12,6 +12,7 @@ newview/llbox.cpp
newview/llcallbacklist.cpp
newview/llcallingcard.cpp
newview/llcameraview.cpp
+newview/llcaphttpsender.cpp
newview/llcape.cpp
newview/llchatbar.cpp
newview/llclassifiedinfo.cpp
@@ -97,7 +98,6 @@ newview/llfloaterpermissionsmgr.cpp
newview/llfloaterpostcard.cpp
newview/llfloaterpreference.cpp
newview/llfloaterproperties.cpp
-newview/llfloaterrate.cpp
newview/llfloaterregioninfo.cpp
newview/llfloaterreporter.cpp
newview/llfloatersaveavatar.cpp
@@ -118,6 +118,7 @@ newview/llgenepool.cpp
newview/llgesturemgr.cpp
newview/llgivemoney.cpp
newview/llglsandbox.cpp
+newview/llglslshader.cpp
newview/llgroupmgr.cpp
newview/llgroupnotify.cpp
newview/llhippo.cpp
@@ -268,6 +269,7 @@ newview/llviewerassetstorage.cpp
newview/llviewercamera.cpp
newview/llviewercontrol.cpp
newview/llviewerdisplay.cpp
+newview/llviewergenericmessage.cpp
newview/llviewergesture.cpp
newview/llviewerimage.cpp
newview/llviewerimagelist.cpp
@@ -276,6 +278,7 @@ newview/llviewerjointattachment.cpp
newview/llviewerjoint.cpp
newview/llviewerjointmesh.cpp
newview/llviewerjointshape.cpp
+newview/llviewerjoystick.cpp
newview/llviewerkeyboard.cpp
newview/llviewerlayer.cpp
newview/llviewermenu.cpp
@@ -289,7 +292,6 @@ newview/llviewerpartsim.cpp
newview/llviewerpartsource.cpp
newview/llviewerprecompiledheaders.cpp
newview/llviewerregion.cpp
-newview/llviewerreputation.cpp
newview/llviewerstats.cpp
newview/llviewertexteditor.cpp
newview/llviewertextureanim.cpp
diff --git a/linden/indra/newview/fmod_hidden_symbols.exp b/linden/indra/newview/fmod_hidden_symbols.exp
index c0d5bed..1e79025 100644
--- a/linden/indra/newview/fmod_hidden_symbols.exp
+++ b/linden/indra/newview/fmod_hidden_symbols.exp
@@ -1,3 +1,5 @@
+_CarbonSndPlayDoubleBuffer
+_ConvertFromIeeeExtended
__book_maptype1_quantvals
__book_unquantize
__float32_pack
@@ -138,3 +140,101 @@ _ov_pcm_seek_page_lap
_ov_raw_seek_lap
_ov_time_seek_lap
_ov_time_seek_page_lap
+_II_step_one
+_II_step_two
+_MyRecComp
+_SampleRates
+_Sinfo
+_ValidStepIndex
+__Z11fmodwrapperv
+__Z11fmodwrapperv.eh
+__floor_P
+__mapping_P
+__residue_P
+__ve_envelope_clear
+__ve_envelope_init
+__ve_envelope_mark
+__ve_envelope_search
+__ve_envelope_shift
+__vi_gpsy_free
+__vi_psy_free
+__vorbis_window_init
+__vp_ampmax_decay
+__vp_couple
+__vp_global_free
+__vp_global_look
+__vp_noise_normalize
+__vp_noise_normalize_sort
+__vp_noisemask
+__vp_offset_and_mix
+__vp_psy_clear
+__vp_psy_init
+__vp_quantize_couple_memo
+__vp_quantize_couple_sort
+__vp_remove_floor
+__vp_tonemask
+_alloc_0
+_alloc_1
+_alloc_2
+_alloc_3
+_alloc_4
+_bandInfo
+_cdcallback
+_cdchannel
+_cdmode
+_cdnumtracks
+_cdstream
+_cdtrack
+_drft_backward
+_drft_clear
+_drft_forward
+_drft_init
+_eatwhite
+_floor0_exportbundle
+_floor1_exportbundle
+_gFreeList
+_gNMRecBusy
+_gNMRecPtr
+_gSilenceOnes
+_gSilenceTwos
+_longLimit
+_mapping0_exportbundle
+_mdct_backward
+_mdct_clear
+_mdct_forward
+_mdct_init
+_muls
+_mystrdup
+_res0_free_info
+_res0_free_look
+_res0_inverse
+_res0_look
+_res0_unpack
+_res1_class
+_res1_inverse
+_res2_inverse
+_residue0_exportbundle
+_residue1_exportbundle
+_residue2_exportbundle
+_scale
+_shortLimit
+_tabsel_123
+_F_Free
+_F_Malloc
+_F_ReAlloc
+_F_memcmp
+_F_memmove
+_F_strcat
+_F_strchr
+_F_strcmp
+_F_strcpy
+_F_stricmp
+_F_strlen
+_F_strncat
+_F_strncmp
+_F_strncpy
+_F_strnicmp
+_F_strstr
+_F_strupr
+_F_tolower
+_F_toupper
diff --git a/linden/indra/newview/fmodwrapper.cpp b/linden/indra/newview/fmodwrapper.cpp
index 403a942..6d74325 100644
--- a/linden/indra/newview/fmodwrapper.cpp
+++ b/linden/indra/newview/fmodwrapper.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/fonts/MtBdLfRg.ttf b/linden/indra/newview/fonts/MtBdLfRg.ttf
deleted file mode 100644
index 86c344e..0000000
Binary files a/linden/indra/newview/fonts/MtBdLfRg.ttf and /dev/null differ
diff --git a/linden/indra/newview/fonts/MtBkLfRg.ttf b/linden/indra/newview/fonts/MtBkLfRg.ttf
deleted file mode 100644
index 5940d4d..0000000
Binary files a/linden/indra/newview/fonts/MtBkLfRg.ttf and /dev/null differ
diff --git a/linden/indra/newview/fonts/profontdoc.txt b/linden/indra/newview/fonts/profontdoc.txt
deleted file mode 100644
index 0a7c32d..0000000
--- a/linden/indra/newview/fonts/profontdoc.txt
+++ /dev/null
@@ -1,176 +0,0 @@
-##########################################################################
-# IMPORTANT NOTE #
-# #
-# This is the readme file of the ProFont distribution for #
-# Apple Macintosh. I've added it because it felt wrong to distribute #
-# a Windows version of ProFont without the words of the original #
-# authors. #
-# !! Please note that some of the information provided below is #
-# NOT valid for ProFont/Windows !! Just figure it out ... ;-) #
-# The Windows version was created using the files from the #
-# ÒProFontWindows 2.2 ÄÓ folder mentioned below. #
-# #
-# Comparing Mac + Win version, you'll see that all font sizes are #
-# off by 1. This means that Win 8pt version displays like Mac 9pt #
-# version. #
-# #
-# For questions about the windows version of ProFont, contact: #
-# mail@tobias-jung.de (please write in english or german language) #
-# Tobias Jung, August 2002 #
-##########################################################################
-# Version 2 #
-# This version hopefully fixes the problem that some text editors #
-# (VIM, MultiEdit) wouldn't recognize ProFont as a monospaced font. #
-##########################################################################
-
-
-ProFont Distribution 2.2
-21 July 1997
-SQ Software
-Ê
-
-
-
-
-
-
-¥ What is ProFont?
-
- ProFont began life as a better version of ÒMonaco 9Ó which is especially good for programmers. It was created circa 1987 by Andrew Welch.
-
- In version 1.1 of the ProFont distribution, ProFont ceased being just a 9 point bitmap font. Carl Osterwald contributed bitmaps at several larger sizes and an outline version of ProFont in both TrueType and Adobe Type 1 (ATM) formats.
-
- In version 1.2 of the ProFont distribution, Carl extended ProFont to include the entire Macintosh character set including accented characters with ASCII codes from 0x80 to 0xFF.
-
- In version 2.0 of the ProFont distribution, Carl provided an ISOLatin1 encoded version of ProFont. The shapes of several of the characters have been modified for improved readability, and a 7 pt bitmap version of ProFont is included.
-
- In version 2.2 of the ProFont distribution, Carl produced a version of ProFont that uses the Windows character set. Once again the shapes of several of the characters have been modified for improved readability--especially when the fonts are anti-aliased.
-
-¥ What is the ProFont Distribution?
-
- ProFont was originally released as shareware by Andrew Welch. At that time, it was distributed inside an installer application which could replace AppleÕs Monaco 9 with ProFont 9. This made using ProFont as a substitute for Monaco 9 very easy. When the Mac II and SE came out, the magic used by the original installer became ineffective. Over the years I (Steve Gilardi) have figured out how to install ProFont 9 in place of Monaco 9 through the various releases of the System Software. After a time I asked Andrew for permission to distribute ProFont along with my instructions and he agreed and also decided to change ProFontÕs status from shareware to freeware.
-
- The methods for accomplishing the substitution for Monaco 9 have gone through significant changes over the years as the Macintosh font architecture has evolved. The various releases of what has become the ÒProFont DistributionÓ have been my effort to share my knowledge of how to use ProFont as a replacement for Monaco 9.
-
- Since Carl Osterwald became involved with the project, ProFont has blossomed into a full-fledged font in its own right and most recently into a suite of related fonts. ProFont is unusual among fonts in that the outline version was designed to closely follow the original 9 pt bitmap version. More often, fonts are conceived as outlines and then rendered at the various point sizes.
-
- Earlier versions of the ProFont Distribution have included very involved instructions and utility programs to allow installation of ProFont as a replacement for Monaco 9. Release 2.2 contains none of those instructions. Instead, I have developed a control panel called ÒMonaco TunerÓ which allows you to substitute a font of your choosing for Monaco. The substitution can be just for Monaco 9 or for all sizes of Monaco. Of course, I think the best substitute font to use is ProFont! See the information in the ÒMonaco Tuner 1.1.1 ÄÓ folder for details.
-
-¥ What does ProFont 2.2 look like?
-
-HereÕs a sample:
-[ see "provsmonaco.gif" and "profomac.gif" ]
-
-
-Also, each font folder in the ProFont distribution contains a file showing the fontÕs character set at 9 and 18 point sizes. You donÕt need to install the corresponding font to see the character set.
-
-¥ What is included in this distribution?
-
-The distribution includes 7 items:
-
-+ ÒAbout ProFont Distribution 2.2Ó SimpleText document
- This is the file you are reading now.
-
-+ ÒProFont Quick StartÓ SimpleText document
- Quick instructions for installing ProFont and Monaco Tuner.
-
-+ ÒProFont 2.2 ÄÓ folder
- Version 2.2 of the ÒProFontÓ font. This includes both TrueType and ATM versions of ProFont.
-
-+ ÒProFontISOLatin1 2.2 ÄÓ folder
- Version 2.2 of the ÒProFontISOLatin1Ó font. TrueType and ATM versions of ProFontISOLatin1 are included.
-
-+ ÒProFontClassic 1.2 ÄÓ folder
- ProFontClassic 1.2 is the 9 pt size of ProFont from the 1.2 release of the ProFont distribution. ItÕs included mainly for those who prefer the look of ProFont 1.2 to that of ProFont 2.2 and who are only interested in substituting ProFontClassic for Monaco 9 using Monaco Tuner.
-
-+ ÒProFontWindows 2.2 ÄÓ folder
- Version 2.2 of the ÒProFontWindowsÓ font. This is the first release of this font, but it is version 2.2 to keep its version number in sync with that of the ÒProFontÓ font. TrueType and ATM versions of ProFontWindows are included. This font can be useful for viewing files that originate on Windows machines.
-
-+ ÒMonaco Tuner 1.1.1 ÄÓ folder
- ÒMonaco TunerÓ is a control panel which replaces the complicated instructions for installing ÒProFont(Monaco)Ó included in previous releases. It lets you pick a font (such as ProFont) to be substituted for Monaco in all applications. See the file ÒAbout Monaco TunerÓ inside this folder for details.
-
-¥ What kind of Macintosh and System Software do I need to use ProFont?
-
- The family of ProFont fonts are standard Macintosh fonts and should work on any Macintosh (or compatible) running any version of System 7 or Mac OS 8. The fonts may be compatible with System 6.0.8, but that has not been tested. Monaco Tuner requires System 7 or better and has been tested on several machines including a PowerBook 100 running System 7.0.1 and a PowerMac 8100/100 running System 7.5.3 and Mac OS 8 with and without QuickDraw GX.
-
-¥ What happens if I have problems with ProFont Distribution?
-
- ÒProFont DistributionÓ is provided in the hope that it will be useful. However, it is provided AS IS and carries NO WARRANTY that it will do anything good and NO WARRANTY that it will not do anything bad. Your use of the fonts and software that make up ÒProFont DistributionÓ is ENTIRELY AT YOUR OWN RISK. SQ Software, Stephen C. Gilardi, Carl R. Osterwald and Tobias Jung hereby disclaim any and all liability for any difficulty you may have as a result of using any part of ÒProFont DistributionÓ. If these terms are not acceptable to you, then you must not use any part of ÒProFont DistributionÓ.
-
-That being said, if you do have any difficulties or any suggestions, IÕll be very appreciative if you let me know about them so I can attempt to improve future releases of ProFont Distribution.
-
-¥ How do I install the various versions of ProFont?
-
- The various versions of ProFont included in this release are standard Macintosh fonts. You install them into any version of System 7 or Mac OS 8 by dragging the font suitcase containing the font you want to install onto the System Folder icon on your startup disk.
-
- ÒProFont 2.2Ó, ÒProFontISOLatin1 2.2Ó, and ÒProFontWindows 2.2Ó also include ATM versions. Since the System Software prefers TrueType fonts to ATM fonts, special suitcases are included in the distribution which do not contain the TrueType outline version of the font. These suitcases and the corresponding PostScript font files are inside a folder called ÒATM VersionÓ within each fontÕs folder. To install the ATM version of one of these fonts, drag the two files contained in its ÒATM VersionÓ folder onto the System Folder icon on your startup disk.
-
-Note: During testing it was discovered that some internal tables in ÒProFontISOLatin1Ó suitcase can be damaged if you use the Finder to remove the TrueType version by dragging it out of the suitcase. Fortunately, you donÕt need to do that because ProFont Distribution includes the suitcase called ÒProFontISOLatin1 BitmapsÓ which is does not contain the TrueType version. As the instructions above indicate, please use the ÒProFontISOLatin1 BitmapsÓ suitcase if you want to use ProFontISOLatin1 with ATM.
-
-¥ Can I redistribute ProFont Distribution?
-
-ÒProFont DistributionÓ is Copyright © 1997, SQ Software. The ProFont fonts are Copyright © 1997, Carl R. Osterwald. It is our intention that ÒProFont DistributionÓ get the widest possible distribution. You may redistribute unmodified copies of ÒProFont DistriubtionÓ as long as it is accompanied by an unmodified copy of ÒAbout ProFont Distribution 2.2Ó (this file). You may not charge anyone money for the ÒProFont DistributionÓ package itself. The ÒProFont DistributionÓ package can be distributed for free along with products for which you do charge money. The ÒProFont DistributionÓ package can also be distributed for free as part of collections of more than 10 third party products sold as a collection (such as on the Apprentice CD series). If you do distribute ÒProFont DistributionÓ along with another product or as part of a collection, Stephen C. Gilardi and Carl R. Osterwald would appreciate very much each receiving a complimentary copy of the whole distribution (e.g., any CD-ROM it appears on), but this is not a requirement. If you have questions about redistribution, please contact Stephen C. Gilardi at squeegee@usa.net.
-
-¥ Who is responsible for ProFont?
-
-+ Andrew Welch
- The original ÒProFontÓ was created by Andrew Welch. It was originally shareware. Andrew generously gave his permission for it to be distributed freely: ÒletÕs make it free though [...] just credit me for making the font in the first place, and youÕre good to go!Ó AndrewÕs ProFont 9 font is no longer distributed in the ProFont Distribution, but the fonts included in ProFont Distribution 2.2 are based on it.
-
- Thanks Andrew!
-
-+ Carl Osterwald
- The fonts included in ProFont Distribution 2.2 were created by Carl Osterwald. Carl created the outline versions of ProFont and implemented the Macintosh Extended ASCII Character Set for all versions of ProFont. Most recently Carl created the ProFontWindows font and did the modifications of the character shapes for ProFont 2.2. Please send praise, comments, etc., about the fonts in ÒProFont Distribution 2.2Ó to him.
-
- Thanks Carl!
-
- Carl can be reached at Òcarl_osterwald@usa.netÓ.
-
-+ Steve Gilardi
- I am the author of the ÒmodernÓ (post Mac II/Mac SE era) ProFont distributions. I have gotten ProFont to work with successive System releases for my personal use, and have shared the methods with other folks from time to time through these distributions. Most recently I developed the ÒMonaco TunerÓ control panel to ease the use of ProFont as a replacement for Monaco 9. Please send comments, suggestions, and questions about Monaco Tuner, ProFont in general, or the ProFont Distribution as a whole to me.
-
- I can be reached at Òsqueegee@usa.netÓ.
-
-Enjoy ProFont!
-
---Steve
-
-Stephen C. Gilardi
-SQ Software
-21 July 1997
-
-¥ Version History:
-
- Version 2.2:
- + ProFont 2.2 and ProFontISOLatin1 2.2 include modifications to several characters
- for improved readability especially when anti-aliased.
- + Several small bugs fixed in the fonts.
- + Improved QuickDraw GX compatibility
- + ProFontWindows 2.2 introduced.
- + Monaco Tuner version bumped to 1.1.1 for minor documentation updates.
-
- Version 2.1:
- + Monaco Tuner 1.1 adds ÒResizing of Monaco 9Ó and works around a bug which
- affected desk accessories on Power Macs.
-
- Version 2.0:
- + ProFont 2.0 includes modifications to several characters
- + ProFont 2.0 includes a 7 pt bitmap version
- + ProFontISOLatin1 2.0 released in response to requests from international users
- + Monaco Tuner 1.0 replaces far-too-complicated ÒProFont(Monaco)Ó installation
- instructions
- + ProFontClassic 1.2 is the 9 pt size of ProFont from the version 1.2 release
-
- Version 1.2:
- + Both versions of ProFont now implement the full Macintosh Extended ASCII
- character set.
-
- Version 1.1.1:
- + ÒProFont InfoÓ (this file) now actually prints on LaserWriters. Sorry!
- + Added item labeled ÒWhat about Monaco 12?Ó
- + Minor editing of ÒProFont InfoÓ
-
- Version 1.1:
- + ÒProFont (ProFont)Ó now includes TrueType and Type 1 Outline Fonts!
- + Includes instructions for installation under System 7.5.1.
- + I think ProFont needs an installer. If you agree, please read the bullet item labeled
- ÒArenÕt those instructions a little bit too complicated?Ó.
diff --git a/linden/indra/newview/fonts/profontwindows.ttf b/linden/indra/newview/fonts/profontwindows.ttf
deleted file mode 100644
index b3d66b2..0000000
Binary files a/linden/indra/newview/fonts/profontwindows.ttf and /dev/null differ
diff --git a/linden/indra/newview/gpu_table.txt b/linden/indra/newview/gpu_table.txt
index 92f9b44..4e6373d 100644
--- a/linden/indra/newview/gpu_table.txt
+++ b/linden/indra/newview/gpu_table.txt
@@ -22,6 +22,11 @@ ATI All-in-Wonder X1800 .*ATI.*All-in-Wonder X18.* 3
ATI All-in-Wonder X1900 .*ATI.*All-in-Wonder X19.* 3
ATI ASUS X1xxx .*ASUS X1.* 3
ATI Mobility Radeon X1xxx .*ATI.*Mobility.*X1.* 2
+// HACK: We crash on startup on some Mobility Radeon chips, with 1.15.0
+// in FMOD (!). Try defaulting them to class 0. JC
+ATI Mobility Radeon X3xx .*ATI.*Mobility.*X3.* 0
+ATI Mobility Radeon X6xx .*ATI.*Mobility.*X6.* 0
+ATI Mobility Radeon X7xx .*ATI.*Mobility.*X7.* 0
ATI Radeon OpenGL .*ATI.*Radeon OpenGL.* 3
ATI Diamond X1xxx .*ATI.*Diamond.*X1.* 3
ATI FireGL 5xxx .*ATI.*FireGL V5.* 3
diff --git a/linden/indra/newview/head.cpp b/linden/indra/newview/head.cpp
index 527170b..5bec318 100644
--- a/linden/indra/newview/head.cpp
+++ b/linden/indra/newview/head.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/head.h b/linden/indra/newview/head.h
index 5df0920..234f718 100644
--- a/linden/indra/newview/head.h
+++ b/linden/indra/newview/head.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/installers/windows/installer_template_multilang.nsi b/linden/indra/newview/installers/windows/installer_template_multilang.nsi
new file mode 100644
index 0000000..b722a0f
--- /dev/null
+++ b/linden/indra/newview/installers/windows/installer_template_multilang.nsi
@@ -0,0 +1,938 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; secondlife setup.nsi
+;; Copyright 2004-2007, Linden Research, Inc.
+;; For info, see http://www.nullsoft.com/free/nsis/
+;;
+;; NSIS 2.22 or higher required
+;; Author: James Cook, Don Kjer, Callum Prentice
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Detect NSIS compiler version
+!define "NSIS${NSIS_VERSION}"
+!ifdef "NSISv2.02" | "NSISv2.03" | "NSISv2.04" | "NSISv2.05" | "NSISv2.06"
+ ;; before 2.07 defaulted lzma to solid (whole file)
+ SetCompressor lzma
+!else
+ ;; after 2.07 required /solid for whole file compression
+ SetCompressor /solid lzma
+!endif
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Compiler flags
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+SetOverwrite on ; overwrite files
+SetCompress auto ; compress iff saves space
+SetDatablockOptimize off ; only saves us 0.1%, not worth it
+XPStyle on ; add an XP manifest to the installer
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Project flags
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+%%VERSION%%
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; - language files - one for each language (or flavor thereof)
+;; (these files are in the same place as the nsi template but the python script generates a new nsi file in the
+;; application directory so we have to add a path to these include files)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+!include "installers\windows\lang_de.nsi"
+!include "installers\windows\lang_en-us.nsi"
+!include "installers\windows\lang_ja.nsi"
+!include "installers\windows\lang_ko.nsi"
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Tweak for different servers/builds (this placeholder is replaced by viewer_manifest.py)
+%%GRID_VARS%%
+
+Name ${INSTNAME}
+
+SubCaption 0 $(LicenseSubTitleSetup) ; override "license agreement" text
+
+BrandingText " " ; bottom of window text
+Icon res\install_icon.ico ; our custom icon
+UninstallIcon res\uninstall_icon.ico ; our custom icon
+WindowIcon on ; show our icon in left corner
+BGGradient off ; no big background window
+CRCCheck on ; make sure CRC is OK
+InstProgressFlags smooth colored ; new colored smooth look
+ShowInstDetails nevershow ; no details, no "show" button
+SetOverwrite on ; stomp files by default
+AutoCloseWindow true ; after all files install, close window
+
+!ifdef UPDATE
+LicenseText $(LicenseDescUpdate) $(LicenseDescNext)
+!else
+LicenseText $(LicenseDescSetup) $(LicenseDescNext)
+!endif
+
+LicenseData "releasenotes.txt"
+
+InstallDir "$PROGRAMFILES\${INSTNAME}"
+InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" ""
+!ifdef UPDATE
+DirText $(DirectoryChooseTitle) $(DirectoryChooseUpdate)
+!else
+DirText $(DirectoryChooseTitle) $(DirectoryChooseSetup)
+!endif
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Variables
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Var INSTPROG
+Var INSTEXE
+Var INSTFLAGS
+Var LANGFLAGS
+Var INSTSHORTCUT
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Sections
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Section "" ; (default section)
+
+SetShellVarContext all ; install for all users (if you change this, change it in the uninstall as well)
+
+; Start with some default values.
+StrCpy $INSTFLAGS "${INSTFLAGS}"
+StrCpy $INSTFLAGS "$INSTFLAGS $LANGFLAGS"
+StrCpy $INSTPROG "${INSTNAME}"
+StrCpy $INSTEXE "${INSTEXE}"
+StrCpy $INSTSHORTCUT "${SHORTCUT}"
+
+IfSilent +2
+Goto NOT_SILENT
+ Call CheckStartupParams ; Figure out where, what and how to install.
+NOT_SILENT:
+Call CheckWindowsVersion ; warn if on Windows 98/ME
+Call CheckIfAdministrator ; Make sure the user can install/uninstall
+Call CheckIfAlreadyCurrent ; Make sure that we haven't already installed this version
+Call CloseSecondLife ; Make sure we're not running
+Call RemoveNSIS ; Check for old NSIS install to remove
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Don't remove cache files during a regular install, removing the inventory cache on upgrades results in lots of damage to the servers.
+;Call RemoveCacheFiles ; Installing over removes potentially corrupted
+ ; VFS and cache files.
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Files
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; This placeholder is replaced by the complete list of all the files in the installer, by viewer_manifest.py
+%%INSTALL_FILES%%
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; If this is a silent update, we don't need to re-create these shortcuts or registry entries.
+IfSilent POST_INSTALL
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Shortcuts in start menu
+CreateDirectory "$SMPROGRAMS\$INSTSHORTCUT"
+SetOutPath "$INSTDIR"
+CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT.lnk" \
+ "$INSTDIR\$INSTEXE" "$INSTFLAGS"
+
+!ifdef MUSEUM
+CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT Museum.lnk" \
+
+ "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple"
+CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT Museum Spanish.lnk" \
+
+ "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple -spanish"
+!endif
+
+WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Create Trial Account.url" \
+ "InternetShortcut" "URL" \
+ "http://www.secondlife.com/registration/"
+WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Your Account.url" \
+ "InternetShortcut" "URL" \
+ "http://www.secondlife.com/account/"
+CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\SL Release Notes.lnk" \
+ "$INSTDIR\releasenotes.txt"
+CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\SL Scripting Language Help.lnk" \
+ "$INSTDIR\lsl_guide.html"
+CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\Uninstall $INSTSHORTCUT.lnk" \
+ '"$INSTDIR\uninst.exe"' '/P="$INSTPROG"'
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Other shortcuts
+SetOutPath "$INSTDIR"
+CreateShortCut "$DESKTOP\$INSTSHORTCUT.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS"
+CreateShortCut "$INSTDIR\$INSTSHORTCUT.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS"
+CreateShortCut "$INSTDIR\Uninstall $INSTSHORTCUT.lnk" \
+ '"$INSTDIR\uninst.exe"' '/P="$INSTPROG"'
+
+!ifdef MUSEUM
+CreateShortCut "$DESKTOP\$INSTSHORTCUT Museum.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple"
+
+CreateShortCut "$DESKTOP\$INSTSHORTCUT Museum Spanish.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple -spanish"
+
+CreateShortCut "$INSTDIR\$INSTSHORTCUT Museum.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple"
+
+CreateShortCut "$INSTDIR\$INSTSHORTCUT Museum Spanish.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS -simple -spanish"
+
+!endif
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Write registry
+WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "" "$INSTDIR"
+WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version" "${VERSION_LONG}"
+WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Flags" "$INSTFLAGS"
+WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Shortcut" "$INSTSHORTCUT"
+WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Exe" "$INSTEXE"
+WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "DisplayName" "$INSTPROG (remove only)"
+WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "UninstallString" '"$INSTDIR\uninst.exe" /P="$INSTPROG"'
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Write URL registry info
+WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "(default)" "URL:Second Life"
+WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "URL Protocol" ""
+WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}\DefaultIcon" "" '"$INSTDIR\$INSTEXE"'
+WriteRegExpandStr HKEY_CLASSES_ROOT "${URLNAME}\shell\open\command" "" '"$INSTDIR\$INSTEXE" $INSTFLAGS -url "%1"'
+
+Goto WRITE_UNINST
+
+POST_INSTALL:
+; Run a post-executable script if necessary.
+Call PostInstallExe
+
+WRITE_UNINST:
+; write out uninstaller
+WriteUninstaller "$INSTDIR\uninst.exe"
+
+; end of default section
+SectionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; PostInstallExe
+; This just runs any post installation scripts.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function PostInstallExe
+push $0
+ ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "PostInstallExe"
+ ;MessageBox MB_OK '$0'
+ ExecWait '$0'
+pop $0
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; CheckStartupParameters
+; Sets INSTFLAGS, INSTPROG, and INSTEXE.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function CheckStartupParams
+push $0
+push $R0
+
+ ; Look for a registry entry with info about where to update.
+ Call GetProgramName
+ pop $R0
+ StrCpy $INSTPROG "$R0"
+ StrCpy $INSTEXE "$R0.exe"
+
+ ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" ""
+ ; If key doesn't exist, skip install
+ IfErrors ABORT
+ StrCpy $INSTDIR "$0"
+
+ ; We now have a directory to install to. Get the startup parameters and shortcut as well.
+ ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Flags"
+ IfErrors +2
+ StrCpy $INSTFLAGS "$0"
+ ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Shortcut"
+ IfErrors +2
+ StrCpy $INSTSHORTCUT "$0"
+ ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Exe"
+ IfErrors +2
+ StrCpy $INSTEXE "$0"
+ Goto FINISHED
+
+ABORT:
+ MessageBox MB_OK $(CheckStartupParamsMB)
+ Quit
+
+FINISHED:
+ ;MessageBox MB_OK "INSTPROG: $INSTPROG, INSTEXE: $INSTEXE, INSTFLAGS: $INSTFLAGS"
+pop $R0
+pop $0
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function un.CheckStartupParams
+push $0
+push $R0
+
+ ; Look for a registry entry with info about where to update.
+ Call un.GetProgramName
+ pop $R0
+ StrCpy $INSTPROG "$R0"
+ StrCpy $INSTEXE "$R0.exe"
+
+ ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" ""
+ ; If key doesn't exist, skip install
+ IfErrors ABORT
+ StrCpy $INSTDIR "$0"
+
+ ; We now have a directory to install to. Get the startup parameters and shortcut as well.
+ ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Flags"
+ IfErrors +2
+ StrCpy $INSTFLAGS "$0"
+ ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Shortcut"
+ IfErrors +2
+ StrCpy $INSTSHORTCUT "$0"
+ ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Exe"
+ IfErrors +2
+ StrCpy $INSTEXE "$0"
+ Goto FINISHED
+
+ABORT:
+ MessageBox MB_OK $(CheckStartupParamsMB)
+ Quit
+
+FINISHED:
+ ;MessageBox MB_OK "INSTPROG: $INSTPROG, INSTEXE: $INSTEXE, INSTFLAGS: $INSTFLAGS"
+pop $R0
+pop $0
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; After install completes, offer readme file
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function .onInstSuccess
+ MessageBox MB_YESNO \
+ $(InstSuccesssQuestion) /SD IDYES IDNO NoReadme
+ ; Assumes SetOutPath $INSTDIR
+ Exec '"$INSTDIR\$INSTEXE" $INSTFLAGS'
+ NoReadme:
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Remove old NSIS version. Modifies no variables.
+; Does NOT delete the LindenWorld directory, or any
+; user files in that directory.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function RemoveNSIS
+ Push $0
+ ; Grab the installation directory of the old version
+ DetailPrint $(RemoveOldNSISVersion)
+ ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" ""
+
+ ; If key doesn't exist, skip uninstall
+ IfErrors NO_NSIS
+
+ ; Clean up legacy beta shortcuts
+ Delete "$SMPROGRAMS\Second Life Beta.lnk"
+ Delete "$DESKTOP\Second Life Beta.lnk"
+ Delete "$SMPROGRAMS\Second Life.lnk"
+
+ ; Clean up old newview.exe file
+ Delete "$INSTDIR\newview.exe"
+
+ ; Intentionally don't delete the stuff in
+ ; Documents and Settings, so we keep the user's settings
+
+ NO_NSIS:
+ Pop $0
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Make sure we're not on Windows 98 / ME
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function CheckWindowsVersion
+ DetailPrint "Checking Windows version..."
+ Call GetWindowsVersion
+ Pop $R0
+ ; Just get first two characters, ignore 4.0 part of "NT 4.0"
+ StrCpy $R0 $R0 2
+ ; Blacklist certain OS versions
+ StrCmp $R0 "95" win_ver_bad
+ StrCmp $R0 "98" win_ver_bad
+ StrCmp $R0 "ME" win_ver_bad
+ StrCmp $R0 "NT" win_ver_bad
+ Return
+win_ver_bad:
+ MessageBox MB_YESNO $(CheckWindowsVersionMB) IDNO win_ver_abort
+ Return
+win_ver_abort:
+ Quit
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Make sure the user can install/uninstall
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function CheckIfAdministrator
+ DetailPrint $(CheckAdministratorInstDP)
+ UserInfo::GetAccountType
+ Pop $R0
+ StrCmp $R0 "Admin" is_admin
+ MessageBox MB_OK $(CheckAdministratorInstMB)
+ Quit
+is_admin:
+ Return
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function un.CheckIfAdministrator
+ DetailPrint $(CheckAdministratorUnInstDP)
+ UserInfo::GetAccountType
+ Pop $R0
+ StrCmp $R0 "Admin" is_admin
+ MessageBox MB_OK $(CheckAdministratorUnInstMB)
+ Quit
+is_admin:
+ Return
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Checks to see if the current version has already been installed (according to the registry).
+; If it has, allow user to bail out of install process.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function CheckIfAlreadyCurrent
+ Push $0
+ ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version"
+ StrCmp $0 ${VERSION_LONG} 0 DONE
+ MessageBox MB_OKCANCEL $(CheckIfCurrentMB) /SD IDOK IDOK DONE
+ Quit
+
+ DONE:
+ Pop $0
+ Return
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Close the program, if running. Modifies no variables.
+; Allows user to bail out of install process.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function CloseSecondLife
+ Push $0
+ FindWindow $0 "Second Life" ""
+ IntCmp $0 0 DONE
+ MessageBox MB_OKCANCEL $(CloseSecondLifeInstMB) IDOK CLOSE IDCANCEL CANCEL_INSTALL
+
+ CANCEL_INSTALL:
+ Quit
+
+ CLOSE:
+ DetailPrint $(CloseSecondLifeInstDP)
+ SendMessage $0 16 0 0
+
+ LOOP:
+ FindWindow $0 "Second Life" ""
+ IntCmp $0 0 DONE
+ Sleep 500
+ Goto LOOP
+
+ DONE:
+ Pop $0
+ Return
+FunctionEnd
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Delete files in Documents and Settings\\SecondLife\cache
+; Delete files in Documents and Settings\All Users\SecondLife\cache
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;Function RemoveCacheFiles
+;
+;; Delete files in Documents and Settings\\SecondLife
+;Push $0
+;Push $1
+;Push $2
+; DetailPrint $(RemoveCacheFilesDP)
+;
+; StrCpy $0 0 ; Index number used to iterate via EnumRegKey
+;
+; LOOP:
+; EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
+; StrCmp $1 "" DONE ; no more users
+;
+; ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath"
+; StrCmp $2 "" CONTINUE 0 ; "ProfileImagePath" value is missing
+;
+; ; Required since ProfileImagePath is of type REG_EXPAND_SZ
+; ExpandEnvStrings $2 $2
+;
+; ; When explicitly uninstalling, everything goes away
+; RMDir /r "$2\Application Data\SecondLife\cache"
+;
+; CONTINUE:
+; IntOp $0 $0 + 1
+; Goto LOOP
+; DONE:
+;Pop $2
+;Pop $1
+;Pop $0
+;
+;; Delete files in Documents and Settings\All Users\SecondLife
+;Push $0
+; ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
+; StrCmp $0 "" +2
+; RMDir /r "$0\SecondLife\cache"
+;Pop $0
+;
+;; Delete filse in C:\Windows\Application Data\SecondLife
+;; If the user is running on a pre-NT system, Application Data lives here instead of
+;; in Documents and Settings.
+;RMDir /r "$WINDIR\Application Data\SecondLife\cache"
+;
+;FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Delete files in Documents and Settings\\SecondLife
+; Delete files in Documents and Settings\All Users\SecondLife
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;Function un.DocumentsAndSettingsFolder
+;
+;; Delete files in Documents and Settings\\SecondLife
+;Push $0
+;Push $1
+;Push $2
+;
+; DetailPrint "Deleting files in Documents and Settings folder"
+;
+; StrCpy $0 0 ; Index number used to iterate via EnumRegKey
+;
+; LOOP:
+; EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
+; StrCmp $1 "" DONE ; no more users
+;
+; ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath"
+; StrCmp $2 "" CONTINUE 0 ; "ProfileImagePath" value is missing
+;
+; ; Required since ProfileImagePath is of type REG_EXPAND_SZ
+; ExpandEnvStrings $2 $2
+;
+; ; If uninstalling a normal install remove everything
+; ; Otherwise (preview/dmz etc) just remove cache
+; StrCmp $INSTFLAGS "" RM_ALL RM_CACHE
+; RM_ALL:
+; RMDir /r "$2\Application Data\SecondLife"
+; GoTo CONTINUE
+; RM_CACHE:
+; RMDir /r "$2\Application Data\SecondLife\Cache"
+;
+; CONTINUE:
+; IntOp $0 $0 + 1
+; Goto LOOP
+; DONE:
+;
+;Pop $2
+;Pop $1
+;Pop $0
+;
+;; Delete files in Documents and Settings\All Users\SecondLife
+;Push $0
+; ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
+; StrCmp $0 "" +2
+; RMDir /r "$0\SecondLife"
+;Pop $0
+;
+;; Delete filse in C:\Windows\Application Data\SecondLife
+;; If the user is running on a pre-NT system, Application Data lives here instead of
+;; in Documents and Settings.
+;RMDir /r "$WINDIR\Application Data\SecondLife"
+;
+;FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Close the program, if running. Modifies no variables.
+; Allows user to bail out of uninstall process.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function un.CloseSecondLife
+ Push $0
+ FindWindow $0 "Second Life" ""
+ IntCmp $0 0 DONE
+ MessageBox MB_OKCANCEL $(CloseSecondLifeUnInstMB) IDOK CLOSE IDCANCEL CANCEL_UNINSTALL
+
+ CANCEL_UNINSTALL:
+ Quit
+
+ CLOSE:
+ DetailPrint $(CloseSecondLifeUnInstDP)
+ SendMessage $0 16 0 0
+
+ LOOP:
+ FindWindow $0 "Second Life" ""
+ IntCmp $0 0 DONE
+ Sleep 500
+ Goto LOOP
+
+ DONE:
+ Pop $0
+ Return
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Delete the installed files
+;;; This deletes the uninstall executable, but it works
+;;; because it is copied to temp directory before running
+;;;
+;;; Note: You must list all files here, because we only
+;;; want to delete our files, not things users left in the
+;;; application directories.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function un.ProgramFiles
+
+;; Remove mozilla file first so recursive directory deletion doesn't get hung up
+Delete "$INSTDIR\app_settings\mozilla\components"
+
+;; This placeholder is replaced by the complete list of files to uninstall by viewer_manifest.py
+%%DELETE_FILES%%
+
+;; Optional/obsolete files. Delete won't fail if they don't exist.
+Delete "$INSTDIR\dronesettings.ini"
+Delete "$INSTDIR\message_template.msg"
+Delete "$INSTDIR\newview.pdb"
+Delete "$INSTDIR\newview.map"
+Delete "$INSTDIR\SecondLife.pdb"
+Delete "$INSTDIR\SecondLife.map"
+Delete "$INSTDIR\comm.dat"
+Delete "$INSTDIR\*.glsl"
+Delete "$INSTDIR\motions\*.lla"
+Delete "$INSTDIR\trial\*.html"
+Delete "$INSTDIR\newview.exe"
+;; Remove entire help directory
+Delete "$INSTDIR\help\Advanced\*"
+RMDir "$INSTDIR\help\Advanced"
+Delete "$INSTDIR\help\basics\*"
+RMDir "$INSTDIR\help\basics"
+Delete "$INSTDIR\help\Concepts\*"
+RMDir "$INSTDIR\help\Concepts"
+Delete "$INSTDIR\help\welcome\*"
+RMDir "$INSTDIR\help\welcome"
+Delete "$INSTDIR\help\*"
+RMDir "$INSTDIR\help"
+
+Delete "$INSTDIR\uninst.exe"
+RMDir "$INSTDIR"
+
+IfFileExists "$INSTDIR" FOLDERFOUND NOFOLDER
+
+FOLDERFOUND:
+ MessageBox MB_YESNO $(DeleteProgramFilesMB) IDNO NOFOLDER
+ RMDir /r "$INSTDIR"
+
+NOFOLDER:
+
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Uninstall settings
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+UninstallText $(UninstallTextMsg)
+ShowUninstDetails show
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Uninstall section
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Section Uninstall
+
+; Start with some default values.
+StrCpy $INSTFLAGS ""
+StrCpy $INSTPROG "${INSTNAME}"
+StrCpy $INSTEXE "${INSTEXE}"
+StrCpy $INSTSHORTCUT "${SHORTCUT}"
+Call un.CheckStartupParams ; Figure out where, what and how to uninstall.
+Call un.CheckIfAdministrator ; Make sure the user can install/uninstall
+
+; uninstall for all users (if you change this, change it in the install as well)
+SetShellVarContext all
+
+; Make sure we're not running
+Call un.CloseSecondLife
+
+; Clean up registry keys
+DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG"
+DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG"
+
+; Clean up shortcuts
+Delete "$SMPROGRAMS\$INSTSHORTCUT\*.*"
+RMDir "$SMPROGRAMS\$INSTSHORTCUT"
+
+Delete "$DESKTOP\$INSTSHORTCUT.lnk"
+Delete "$INSTDIR\$INSTSHORTCUT.lnk"
+Delete "$INSTDIR\Uninstall $INSTSHORTCUT.lnk"
+
+; Clean up cache and log files.
+; Leave them in-place for non AGNI installs.
+
+!ifdef UNINSTALL_SETTINGS
+Call un.DocumentsAndSettingsFolder
+!endif
+
+Call un.ProgramFiles
+
+SectionEnd ; end of uninstall section
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; (From the NSIS wiki, DK)
+; GetParameterValue
+;
+; Usage:
+; !insertmacro GetParameterValue "/L=" "1033"
+; pop $R0
+;
+; Returns on top of stack
+;
+; Example command lines:
+; foo.exe /S /L=1033 /D=C:\Program Files\Foo
+; or:
+; foo.exe /S "/L=1033" /D="C:\Program Files\Foo"
+; gpv "/L=" "1033"
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+ !macro GetParameterValue SWITCH DEFAULT
+ Push $0
+ Push $1
+ Push $2
+ Push $3
+ Push $4
+
+ ;$CMDLINE='"My Setup\Setup.exe" /L=1033 /S'
+ Push "$CMDLINE"
+ Push '${SWITCH}"'
+ !insertmacro StrStr
+ Pop $0
+ StrCmp "$0" "" gpv_notquoted
+ ;$0='/L="1033" /S'
+ StrLen $2 "$0"
+ Strlen $1 "${SWITCH}"
+ IntOp $1 $1 + 1
+ StrCpy $0 "$0" $2 $1
+ ;$0='1033" /S'
+ Push "$0"
+ Push '"'
+ !insertmacro StrStr
+ Pop $1
+ StrLen $2 "$0"
+ StrLen $3 "$1"
+ IntOp $4 $2 - $3
+ StrCpy $0 $0 $4 0
+ Goto gpv_done
+
+ gpv_notquoted:
+ Push "$CMDLINE"
+ Push "${SWITCH}"
+ !insertmacro StrStr
+ Pop $0
+ StrCmp "$0" "" gpv_done
+ ;$0='/L="1033" /S'
+ StrLen $2 "$0"
+ Strlen $1 "${SWITCH}"
+ StrCpy $0 "$0" $2 $1
+ ;$0=1033 /S'
+ Push "$0"
+ Push ' '
+ !insertmacro StrStr
+ Pop $1
+ StrLen $2 "$0"
+ StrLen $3 "$1"
+ IntOp $4 $2 - $3
+ StrCpy $0 $0 $4 0
+ Goto gpv_done
+
+ gpv_done:
+ StrCmp "$0" "" 0 +2
+ StrCpy $0 "${DEFAULT}"
+
+ Pop $4
+ Pop $3
+ Pop $2
+ Pop $1
+ Exch $0
+ !macroend
+
+; And I had to modify StrStr a tiny bit.
+; Possible upgrade switch the goto's to use ${__LINE__}
+
+!macro STRSTR
+ Exch $R1 ; st=haystack,old$R1, $R1=needle
+ Exch ; st=old$R1,haystack
+ Exch $R2 ; st=old$R1,old$R2, $R2=haystack
+ Push $R3
+ Push $R4
+ Push $R5
+ StrLen $R3 $R1
+ StrCpy $R4 0
+ ; $R1=needle
+ ; $R2=haystack
+ ; $R3=len(needle)
+ ; $R4=cnt
+ ; $R5=tmp
+ ; loop;
+ StrCpy $R5 $R2 $R3 $R4
+ StrCmp $R5 $R1 +4
+ StrCmp $R5 "" +3
+ IntOp $R4 $R4 + 1
+ Goto -4
+ ; done;
+ StrCpy $R1 $R2 "" $R4
+ Pop $R5
+ Pop $R4
+ Pop $R3
+ Pop $R2
+ Exch $R1
+!macroend
+
+Function GetProgramName
+ !insertmacro GetParameterValue "/P=" "SecondLife"
+FunctionEnd
+
+Function un.GetProgramName
+ !insertmacro GetParameterValue "/P=" "SecondLife"
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; (From the NSIS documentation, JC)
+; GetWindowsVersion
+;
+; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/
+; Updated by Joost Verburg
+;
+; Returns on top of stack
+;
+; Windows Version (95, 98, ME, NT x.x, 2000, XP, 2003)
+; or
+; '' (Unknown Windows Version)
+;
+; Usage:
+; Call GetWindowsVersion
+; Pop $R0
+; ; at this point $R0 is "NT 4.0" or whatnot
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function GetWindowsVersion
+
+ Push $R0
+ Push $R1
+
+ ReadRegStr $R0 HKLM \
+ "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
+
+ IfErrors 0 lbl_winnt
+
+ ; we are not NT
+ ReadRegStr $R0 HKLM \
+ "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber
+
+ StrCpy $R1 $R0 1
+ StrCmp $R1 '4' 0 lbl_error
+
+ StrCpy $R1 $R0 3
+
+ StrCmp $R1 '4.0' lbl_win32_95
+ StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
+
+ lbl_win32_95:
+ StrCpy $R0 '95'
+ Goto lbl_done
+
+ lbl_win32_98:
+ StrCpy $R0 '98'
+ Goto lbl_done
+
+ lbl_win32_ME:
+ StrCpy $R0 'ME'
+ Goto lbl_done
+
+ lbl_winnt:
+
+ StrCpy $R1 $R0 1
+
+ StrCmp $R1 '3' lbl_winnt_x
+ StrCmp $R1 '4' lbl_winnt_x
+
+ StrCpy $R1 $R0 3
+
+ StrCmp $R1 '5.0' lbl_winnt_2000
+ StrCmp $R1 '5.1' lbl_winnt_XP
+ StrCmp $R1 '5.2' lbl_winnt_2003 lbl_error
+
+ lbl_winnt_x:
+ StrCpy $R0 "NT $R0" 6
+ Goto lbl_done
+
+ lbl_winnt_2000:
+ Strcpy $R0 '2000'
+ Goto lbl_done
+
+ lbl_winnt_XP:
+ Strcpy $R0 'XP'
+ Goto lbl_done
+
+ lbl_winnt_2003:
+ Strcpy $R0 '2003'
+ Goto lbl_done
+
+ lbl_error:
+ Strcpy $R0 ''
+ lbl_done:
+
+ Pop $R1
+ Exch $R0
+
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+!define LANGUAGE_SELECTION_REGISTRY_ROOT "HKCU"
+!define LANGUAGE_SELECTION_REGISTRY_KEY "Software\Linden Research, Inc."
+!define LANGUAGE_SELECTION_REGISTRY_VALUENAME "Installer Language"
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Note: to add new languages, add an entry to the menu
+;; and then add an entry to the language ID selector below
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function .onInit
+
+ ; read the language from registry (ok if not there) and set langauge menu
+ ReadRegStr $0 '${LANGUAGE_SELECTION_REGISTRY_ROOT}' '${LANGUAGE_SELECTION_REGISTRY_KEY}' '${LANGUAGE_SELECTION_REGISTRY_VALUENAME}'
+ StrCpy $LANGUAGE $0
+
+ Push ""
+ Push ${LANG_ENGLISH}
+ Push English
+ Push ${LANG_GERMAN}
+ Push German
+ Push ${LANG_JAPANESE}
+ Push Japanese
+ Push ${LANG_KOREAN}
+ Push Korean
+ Push A ; A means auto count languages for the auto count to work the first empty push (Push "") must remain
+ LangDLL::LangDialog "Installer Language" "Please select the language of the installer"
+ Pop $LANGUAGE
+ StrCmp $LANGUAGE "cancel" 0 +2
+ Abort
+
+ ; save language in registry
+ WriteRegStr '${LANGUAGE_SELECTION_REGISTRY_ROOT}' '${LANGUAGE_SELECTION_REGISTRY_KEY}' '${LANGUAGE_SELECTION_REGISTRY_VALUENAME}' $LANGUAGE
+
+ ; generate language ID that will be used as a command line arg
+ StrCmp $LANGUAGE "1042" 0 +3
+ StrCpy $LANGFLAGS " -set SystemLanguage ko"
+ Goto EndOfFunc
+ StrCmp $LANGUAGE "1041" 0 +3
+ StrCpy $LANGFLAGS " -set SystemLanguage ja"
+ Goto EndOfFunc
+ StrCmp $LANGUAGE "1031" 0 +3
+ StrCpy $LANGFLAGS " -set SystemLanguage de"
+ Goto EndOfFunc
+ StrCmp $LANGUAGE "1033" 0 +3
+ StrCpy $LANGFLAGS " -set SystemLanguage en-us"
+ Goto EndOfFunc
+
+ EndOfFunc:
+
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function un.onInit
+
+ ; read language from registry and set for ininstaller
+ ReadRegStr $0 '${LANGUAGE_SELECTION_REGISTRY_ROOT}' '${LANGUAGE_SELECTION_REGISTRY_KEY}' '${LANGUAGE_SELECTION_REGISTRY_VALUENAME}'
+ StrCpy $LANGUAGE $0
+
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; EOF ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
\ No newline at end of file
diff --git a/linden/indra/newview/installers/windows/lang_de.nsi b/linden/indra/newview/installers/windows/lang_de.nsi
new file mode 100644
index 0000000..71d2138
--- /dev/null
+++ b/linden/indra/newview/installers/windows/lang_de.nsi
@@ -0,0 +1,57 @@
+; First is default
+LoadLanguageFile "${NSISDIR}\Contrib\Language files\German.nlf"
+
+; subtitle on license text caption (setup new version or update current one
+LangString LicenseSubTitleUpdate ${LANG_GERMAN} " Update"
+LangString LicenseSubTitleSetup ${LANG_GERMAN} " Setup"
+
+; description on license page
+LangString LicenseDescUpdate ${LANG_GERMAN} "Dieses Paket wird Second Life auf Version ${VERSION_LONG}.updaten"
+LangString LicenseDescSetup ${LANG_GERMAN} "Dieses Paket installiert Second Life auf Ihrem Computer."
+LangString LicenseDescNext ${LANG_GERMAN} "Nächster Schritt"
+
+; installation directory text
+LangString DirectoryChooseTitle ${LANG_GERMAN} "Installations Ordner"
+LangString DirectoryChooseUpdate ${LANG_GERMAN} "Wählen Sie den Second Life Ordner für dieses Update:"
+LangString DirectoryChooseSetup ${LANG_GERMAN} "Wählen Sie den Pfad, in den Sie Second Life installieren möchten:"
+
+; CheckStartupParams message box
+LangString CheckStartupParamsMB ${LANG_GERMAN} "Konnte Programm '$INSTPROG' nicht finden. Stilles Update fehlgeschlagen."
+
+; installation success dialog
+LangString InstSuccesssQuestion ${LANG_GERMAN} "Second Life jetzt starten?"
+
+; remove old NSIS version
+LangString RemoveOldNSISVersion ${LANG_GERMAN} "Überprüfe alte Version..."
+
+; check windows version
+LangString CheckWindowsVersionDP ${LANG_GERMAN} "Überprüfe Windows Version..."
+LangString CheckWindowsVersionMB ${LANG_GERMAN} 'Second Life unterstützt nur Windows XP, Windows 2000 und Mac OS X.$\n$\nDer Versuch es auf Windows $R0 zu installieren, könnte in unvorhersehbaren Abstürtzen und zu Datenverlust führen.$\n$\nTrotzdem installieren?'
+
+; checkifadministrator function (install)
+LangString CheckAdministratorInstDP ${LANG_GERMAN} "Überprüfe nach Genehmigung zur Installation..."
+LangString CheckAdministratorInstMB ${LANG_GERMAN} 'Es scheint so, als würden Sie einen "limited" Account verwenden.$\nSie müssen ein"administrator" sein, um Second Life installieren zu können..'
+
+; checkifadministrator function (uninstall)
+LangString CheckAdministratorUnInstDP ${LANG_GERMAN} "Überprüfe Genehmigung zum Deinstallieren..."
+LangString CheckAdministratorUnInstMB ${LANG_GERMAN} 'Es scheint so, als würden Sie einen "limited" Account verwenden.$\nSie müssen ein"administrator" sein, um Second Life installieren zu können..'
+
+; checkifalreadycurrent
+LangString CheckIfCurrentMB ${LANG_GERMAN} "Es scheint so, als hätten Sie Second Life ${VERSION_LONG} bereits installiert.$\n$\nWürden Sie es gerne erneut installieren?"
+
+; closesecondlife function (install)
+LangString CloseSecondLifeInstDP ${LANG_GERMAN} "Warte darauf, dass Second Life beendet wird..."
+LangString CloseSecondLifeInstMB ${LANG_GERMAN} "Second Life kann nicht installiert werden, wenn es bereits läuft.$\n$\nBeenden Sie, was Sie gerade tun und wählen Sie OK, um Second Life zu beenden oder Continue .$\nSelect CANCEL, um abzubrechen."
+
+; closesecondlife function (uninstall)
+LangString CloseSecondLifeUnInstDP ${LANG_GERMAN} "Warte darauf, dass Second Life beendet wird..."
+LangString CloseSecondLifeUnInstMB ${LANG_GERMAN} "Second Life kann nicht installiert werden, wenn es bereits läuft.$\n$\nBeenden Sie, was Sie gerade tun und wählen Sie OK, um Second Life zu beenden oder Continue .$\nSelect CANCEL, um abzubrechen."
+
+; removecachefiles
+LangString RemoveCacheFilesDP ${LANG_GERMAN} "Lösche alle Cache Files in Dokumente und Einstellungen"
+
+; delete program files
+LangString DeleteProgramFilesMB ${LANG_GERMAN} "Es bestehen weiterhin Dateien in Ihrem SecondLife Programm Ordner.$\n$\nDies sind möglicherweise Dateien, die sie modifiziert oder bewegt haben:$\n$INSTDIR$\n$\nMöchten Sie diese ebenfalls löschen?"
+
+; uninstall text
+LangString UninstallTextMsg ${LANG_GERMAN} "Dies wird Second Life ${VERSION_LONG} von Ihrem System entfernen."
\ No newline at end of file
diff --git a/linden/indra/newview/installers/windows/lang_en-us.nsi b/linden/indra/newview/installers/windows/lang_en-us.nsi
new file mode 100644
index 0000000..c26af12
--- /dev/null
+++ b/linden/indra/newview/installers/windows/lang_en-us.nsi
@@ -0,0 +1,57 @@
+; First is default
+LoadLanguageFile "${NSISDIR}\Contrib\Language files\English.nlf"
+
+; subtitle on license text caption
+LangString LicenseSubTitleUpdate ${LANG_ENGLISH} " Update"
+LangString LicenseSubTitleSetup ${LANG_ENGLISH} " Setup"
+
+; description on license page
+LangString LicenseDescUpdate ${LANG_ENGLISH} "This package will update Second Life to version ${VERSION_LONG}.(XXX)"
+LangString LicenseDescSetup ${LANG_ENGLISH} "This package will install Second Life on your computer."
+LangString LicenseDescNext ${LANG_ENGLISH} "Next"
+
+; installation directory text
+LangString DirectoryChooseTitle ${LANG_ENGLISH} "Installation Directory"
+LangString DirectoryChooseUpdate ${LANG_ENGLISH} "Select the Second Life directory to update:"
+LangString DirectoryChooseSetup ${LANG_ENGLISH} "Select the directory to install Second Life in:"
+
+; CheckStartupParams message box
+LangString CheckStartupParamsMB ${LANG_ENGLISH} "Could not find the program '$INSTPROG'. Silent update failed."
+
+; installation success dialog
+LangString InstSuccesssQuestion ${LANG_ENGLISH} "Start Second Life now?"
+
+; remove old NSIS version
+LangString RemoveOldNSISVersion ${LANG_ENGLISH} "Checking for old version..."
+
+; check windows version
+LangString CheckWindowsVersionDP ${LANG_ENGLISH} "Checking Windows version..."
+LangString CheckWindowsVersionMB ${LANG_ENGLISH} 'Second Life only supports Windows XP, Windows 2000, and Mac OS X.$\n$\nAttempting to install on Windows $R0 can result in crashes and data loss.$\n$\nInstall anyway?'
+
+; checkifadministrator function (install)
+LangString CheckAdministratorInstDP ${LANG_ENGLISH} "Checking for permission to install..."
+LangString CheckAdministratorInstMB ${LANG_ENGLISH} 'You appear to be using a "limited" account.$\nYou must be an "administrator" to install Second Life.'
+
+; checkifadministrator function (uninstall)
+LangString CheckAdministratorUnInstDP ${LANG_ENGLISH} "Checking for permission to uninstall..."
+LangString CheckAdministratorUnInstMB ${LANG_ENGLISH} 'You appear to be using a "limited" account.$\nYou must be an "administrator" to uninstall Second Life.'
+
+; checkifalreadycurrent
+LangString CheckIfCurrentMB ${LANG_ENGLISH} "It appears that Second Life ${VERSION_LONG} is already installed.$\n$\nWould you like to install it again?"
+
+; closesecondlife function (install)
+LangString CloseSecondLifeInstDP ${LANG_ENGLISH} "Waiting for Second Life to shut down..."
+LangString CloseSecondLifeInstMB ${LANG_ENGLISH} "Second Life can't be installed while it is already running.$\n$\nFinish what you're doing then select OK to close Second Life and continue.$\nSelect CANCEL to cancel installation."
+
+; closesecondlife function (uninstall)
+LangString CloseSecondLifeUnInstDP ${LANG_ENGLISH} "Waiting for Second Life to shut down..."
+LangString CloseSecondLifeUnInstMB ${LANG_ENGLISH} "Second Life can't be uninstalled while it is already running.$\n$\nFinish what you're doing then select OK to close Second Life and continue.$\nSelect CANCEL to cancel."
+
+; removecachefiles
+LangString RemoveCacheFilesDP ${LANG_ENGLISH} "Deleting cache files in Documents and Settings folder"
+
+; delete program files
+LangString DeleteProgramFilesMB ${LANG_ENGLISH} "There are still files in your SecondLife program directory.$\n$\nThese are possibly files you created or moved to:$\n$INSTDIR$\n$\nDo you want to remove them?"
+
+; uninstall text
+LangString UninstallTextMsg ${LANG_ENGLISH} "This will uninstall Second Life ${VERSION_LONG} from your system."
diff --git a/linden/indra/newview/installers/windows/lang_ja.nsi b/linden/indra/newview/installers/windows/lang_ja.nsi
new file mode 100644
index 0000000..43cb492
--- /dev/null
+++ b/linden/indra/newview/installers/windows/lang_ja.nsi
@@ -0,0 +1,57 @@
+; First is default
+LoadLanguageFile "${NSISDIR}\Contrib\Language files\Japanese.nlf"
+
+; subtitle on license text caption
+LangString LicenseSubTitleUpdate ${LANG_JAPANESE} " ƒAƒbƒvƒf[ƒg"
+LangString LicenseSubTitleSetup ${LANG_JAPANESE} " ƒZƒbƒgƒAƒbƒv"
+
+; description on license page
+LangString LicenseDescUpdate ${LANG_JAPANESE} "‚±‚̃pƒbƒP[ƒW‚̓ZƒJƒ“ƒhƒ‰ƒCƒt‚ðƒo[ƒWƒ‡ƒ“${VERSION_LONG}.‚ɃAƒbƒvƒf[ƒg‚µ‚Ü‚·B"
+LangString LicenseDescSetup ${LANG_JAPANESE} "‚±‚̃pƒbƒP[ƒW‚Í‚ ‚È‚½‚̃Rƒ“ƒsƒ…[ƒ^‚ɃZƒJƒ“ƒhƒ‰ƒCƒt‚ðƒCƒ“ƒXƒg[ƒ‹‚µ‚Ü‚·B"
+LangString LicenseDescNext ${LANG_JAPANESE} "ŽŸ"
+
+; installation directory text
+LangString DirectoryChooseTitle ${LANG_JAPANESE} "ƒCƒ“ƒXƒg[ƒ‹EƒfƒBƒŒƒNƒgƒŠ"
+LangString DirectoryChooseUpdate ${LANG_JAPANESE} "ƒAƒbƒvƒf[ƒg‚·‚éƒZƒJƒ“ƒhƒ‰ƒCƒt‚̃fƒBƒŒƒNƒgƒŠ‚ð‘I‘ð‚µ‚Ä‚‚¾‚³‚¢B:"
+LangString DirectoryChooseSetup ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚éƒfƒBƒŒƒNƒgƒŠ‚ð‘I‘ð‚µ‚Ä‚‚¾‚³‚¢B: "
+
+; CheckStartupParams message box
+LangString CheckStartupParamsMB ${LANG_JAPANESE} "ƒvƒƒOƒ‰ƒ€–¼'$INSTPROG'‚ªŒ©‚‚©‚è‚Ü‚¹‚ñBƒTƒCƒŒƒ“ƒgEƒAƒbƒvƒf[ƒg‚ÉŽ¸”s‚µ‚Ü‚µ‚½B"
+
+; installation success dialog
+LangString InstSuccesssQuestion ${LANG_JAPANESE} "’¼‚¿‚ɃZƒJƒ“ƒhƒ‰ƒCƒt‚ðŠJŽn‚µ‚Ü‚·‚©H "
+
+; remove old NSIS version
+LangString RemoveOldNSISVersion ${LANG_JAPANESE} "ŒÃ‚¢ƒo[ƒWƒ‡ƒ“î•ñ‚ðƒ`ƒFƒbƒN’†‚Å‚·c"
+
+; check windows version
+LangString CheckWindowsVersionDP ${LANG_JAPANESE} "ƒEƒBƒ“ƒhƒEƒY‚̃o[ƒWƒ‡ƒ“î•ñ‚ðƒ`ƒFƒbƒN’†‚Å‚·..."
+LangString CheckWindowsVersionMB ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt‚ÍWindows XPAWindows 2000AMac OS X‚Ì‚Ý‚ðƒTƒ|[ƒg‚µ‚Ä‚¢‚Ü‚·BWindows $R0‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚鎖‚ÍAƒf[ƒ^‚ÌÁŽ¸‚âƒNƒ‰ƒbƒVƒ…‚ÌŒ´ˆö‚É‚È‚é‰Â”\«‚ª‚ ‚è‚Ü‚·BƒCƒ“ƒXƒg[ƒ‹‚𑱂¯‚Ü‚·‚©H"
+
+; checkifadministrator function (install)
+LangString CheckAdministratorInstDP ${LANG_JAPANESE} "ƒCƒ“ƒXƒg[ƒ‹‚Ì‚½‚ß‚ÌŒ ŒÀ‚ðƒ`ƒFƒbƒN’†‚Å‚·..."
+LangString CheckAdministratorInstMB ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚é‚É‚ÍŠÇ—ŽÒŒ ŒÀ‚ª•K—v‚Å‚·B"
+
+; checkifadministrator function (uninstall)
+LangString CheckAdministratorUnInstDP ${LANG_JAPANESE} "ƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚Ì‚½‚ß‚ÌŒ ŒÀ‚ðƒ`ƒFƒbƒN’†‚Å‚·..."
+LangString CheckAdministratorUnInstMB ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt‚ðƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚·‚é‚É‚ÍŠÇ—ŽÒŒ ŒÀ‚ª•K—v‚Å‚·B"
+
+; checkifalreadycurrent
+LangString CheckIfCurrentMB ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt${VERSION_LONG} ‚̓Cƒ“ƒXƒg[ƒ‹Ï‚Ý‚Å‚·BÄ“xƒCƒ“ƒXƒg[ƒ‹‚µ‚Ü‚·‚©H "
+
+; closesecondlife function (install)
+LangString CloseSecondLifeInstDP ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt‚ðI—¹’†‚Å‚·..."
+LangString CloseSecondLifeInstMB ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt‚Ì‹N“®’†‚ɃCƒ“ƒXƒg[ƒ‹‚Ío—ˆ‚Ü‚¹‚ñB’¼‚¿‚ɃZƒJƒ“ƒhƒ‰ƒCƒt‚ðI—¹‚µ‚ăCƒ“ƒXƒg[ƒ‹‚ðŠJŽn‚·‚éꇂÍOKƒ{ƒ^ƒ“‚ð‰Ÿ‚µ‚Ä‚‚¾‚³‚¢BCANCEL‚ð‰Ÿ‚·‚Æ’†Ž~‚µ‚Ü‚·B"
+
+; closesecondlife function (uninstall)
+LangString CloseSecondLifeUnInstDP ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt‚ðI—¹’†‚Å‚·..."
+LangString CloseSecondLifeUnInstMB ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt‚Ì‹N“®’†‚ɃAƒ“ƒCƒ“ƒXƒg[ƒ‹‚Ío—ˆ‚Ü‚¹‚ñB’¼‚¿‚ɃZƒJƒ“ƒhƒ‰ƒCƒt‚ðI—¹‚µ‚ăAƒ“ƒCƒ“ƒXƒg[ƒ‹‚ðŠJŽn‚·‚éꇂÍOKƒ{ƒ^ƒ“‚ð‰Ÿ‚µ‚Ä‚‚¾‚³‚¢BCANCEL‚ð‰Ÿ‚·‚Æ’†Ž~‚µ‚Ü‚·B"
+
+; removecachefiles
+LangString RemoveCacheFilesDP ${LANG_JAPANESE} " Documents and Settings ƒtƒHƒ‹ƒ_‚̃LƒƒƒbƒVƒ…ƒtƒ@ƒCƒ‹‚ðƒfƒŠ[ƒg’†‚Å‚·B"
+
+; delete program files
+LangString DeleteProgramFilesMB ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt‚̃fƒBƒŒƒNƒgƒŠ‚É‚ÍA‚Ü‚¾ƒtƒ@ƒCƒ‹‚ªŽc‚³‚ê‚Ä‚¢‚Ü‚·B$\n$INSTDIR$\n‚É‚ ‚È‚½‚ªì¬A‚Ü‚½‚͈ړ®‚³‚¹‚½ƒtƒ@ƒCƒ‹‚ª‚ ‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B‘S‚Ä휂µ‚Ü‚·‚©H "
+
+; uninstall text
+LangString UninstallTextMsg ${LANG_JAPANESE} "ƒZƒJƒ“ƒhƒ‰ƒCƒt${VERSION_LONG}‚ðƒAƒ“ƒCƒ“ƒXƒg[ƒ‹‚µ‚Ü‚·B"
diff --git a/linden/indra/newview/installers/windows/lang_ko.nsi b/linden/indra/newview/installers/windows/lang_ko.nsi
new file mode 100644
index 0000000..4e6b5ec
--- /dev/null
+++ b/linden/indra/newview/installers/windows/lang_ko.nsi
@@ -0,0 +1,57 @@
+; First is default
+LoadLanguageFile "${NSISDIR}\Contrib\Language files\Korean.nlf"
+
+; subtitle on license text caption
+LangString LicenseSubTitleUpdate ${LANG_KOREAN} "¾÷µ¥ÀÌÆ®"
+LangString LicenseSubTitleSetup ${LANG_KOREAN} " ¼³Ä¡Çϱâ"
+
+; description on license page
+LangString LicenseDescUpdate ${LANG_KOREAN} "ÀÌ ÆÑÅ°Áö´Â ¼¼ÄÁµå¶óÀÌÇÁ¸¦ ¹öÀü${VERSION_LONG}.À¸·Î ¾÷µ¥ÀÌÆ® ÇÕ´Ï´Ù. "
+LangString LicenseDescSetup ${LANG_KOREAN} "ÀÌ ÆÑÅ°Áö´Â ¼¼ÄÁµå¶óÀÌÇÁ¸¦ ÄÄÇ»ÅÍ¿¡ ¼³Ä¡ÇÕ´Ï´Ù."
+LangString LicenseDescNext ${LANG_KOREAN} "´ÙÀ½"
+
+; installation directory text
+LangString DirectoryChooseTitle ${LANG_KOREAN} "¼³Ä¡ µð·ºÅ丮"
+LangString DirectoryChooseUpdate ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ¸¦ ¾÷µ¥ÀÌÆ®ÇÒ µð·ºÅ丮¸¦ ¼±ÅÃÇϼ¼¿ä. "
+LangString DirectoryChooseSetup ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ¸¦ ¼³Ä¡ÇÒ µð·ºÅ丮¸¦ ¼±ÅÃÇϼ¼¿ä:"
+
+; CheckStartupParams message box
+LangString CheckStartupParamsMB ${LANG_KOREAN} " ¡®$INSTPROG¡¯ ÇÁ·Î±×·¥À» ãÁö ¸øÇß½À´Ï´Ù. ÀÚµ¿ ¾÷µ¥ÀÌÆ®¿¡ ½ÇÆÐÇß½À´Ï´Ù."
+
+; installation success dialog
+LangString InstSuccesssQuestion ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ¸¦ ½ÃÀÛÇÏ°Ú½À´Ï±î?"
+
+; remove old NSIS version
+LangString RemoveOldNSISVersion ${LANG_KOREAN} "ÀÌÀü ¹öÀüÀ» ã°í ÀÖ½À´Ï´Ù¡¦ "
+
+; check windows version
+LangString CheckWindowsVersionDP ${LANG_KOREAN} "À©µµ¿ì ¹öÀüÀ» È®ÀÎÇÏ°í ÀÖ½À´Ï´Ù."
+LangString CheckWindowsVersionMB ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ´Â À©µµ¿ì XP, À©µµ¿ì 2000, ±×¸®°í ¸Æ OS X¸¦ Áö¿øÇÕ´Ï´Ù. À©µµ¿ì $R0¿¡ ¼³Ä¡¸¦ ½ÃµµÇÏ¸é ¿ÀÀÛµ¿°ú µ¥ÀÌÅÍ ºÐ½ÇÀÌ ÀϾ ¼ö ÀÖ½À´Ï´Ù. °è¼Ó ¼³Ä¡ÇÏ°Ú½À´Ï±î? "
+
+; checkifadministrator function (install)
+LangString CheckAdministratorInstDP ${LANG_KOREAN} "¼³Ä¡ ±ÇÇÑÀ» È®ÀÎ ÁßÀÔ´Ï´Ù... "
+LangString CheckAdministratorInstMB ${LANG_KOREAN} "ÇöÀç ¡®¼Õ´Ô¡¯°èÁ¤À» »ç¿ë ÁßÀÔ´Ï´Ù. ¼¼ÄÁµå¶óÀÌÇÁ¸¦ ¼³Ä¡Çϱâ À§Çؼ± ¡®¿î¿µÀÚ¡± °èÁ¤À» »ç¿ëÇØ¾ß ÇÕ´Ï´Ù."
+
+; checkifadministrator function (uninstall)
+LangString CheckAdministratorUnInstDP ${LANG_KOREAN} "Á¦°Å ±ÇÇÑÀ» È®ÀÎ ÁßÀÔ´Ï´Ù. "
+LangString CheckAdministratorUnInstMB ${LANG_KOREAN} " ÇöÀç ¡®¼Õ´Ô¡¯°èÁ¤À» »ç¿ë ÁßÀÔ´Ï´Ù. ¼¼ÄÁµå¶óÀÌÇÁ¸¦ Á¦°ÅÇϱâ À§Çؼ± ¡®¿î¿µÀÚ¡± °èÁ¤À» »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. "
+
+; checkifalreadycurrent
+LangString CheckIfCurrentMB ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ ¹öÀü ${VERSION_LONG}ÀÌ ÀÌ¹Ì ¼³Ä¡µÇ¾î ÀÖ½À´Ï´Ù. ´Ù½Ã ¼³Ä¡ÇϽðڽÀ´Ï±î? "
+
+; closesecondlife function (install)
+LangString CloseSecondLifeInstDP ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ¸¦ Á¾·áÇÒ ¶§ ±îÁö ´ë±â Áß¡¦ "
+LangString CloseSecondLifeInstMB ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ°¡ ÀÌ¹Ì ÀÛµ¿ ÁßÀÏ °æ¿ì ¼³Ä¡¸¦ °è¼Ó ÇÒ ¼ö ¾ø½À´Ï´Ù. ÇöÀç ÀÛ¾÷À» ¸ØÃß°í ¡®È®ÀΡ¯À» ´·¯ ¼¼ÄÁµå¶óÀÌÇÁ¸¦ Á¾·áÇÑ ´ÙÀ½ ÁøÇàÇϱ⠹ٶø´Ï´Ù. ¼³Ä¡¸¦ Ãë¼ÒÇÏ·Á¸é ¡®Ãë¼Ò¡¯¸¦ ´©¸£¼¼¿ä."
+
+; closesecondlife function (uninstall)
+LangString CloseSecondLifeUnInstDP ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ¸¦ Á¾·áÇÒ ¶§ ±îÁö ´ë±â Áß¡¦¡±"
+LangString CloseSecondLifeUnInstMB ${LANG_KOREAN} " ¼¼ÄÁµå¶óÀÌÇÁ°¡ ÀÌ¹Ì ÀÛµ¿ ÁßÀÏ °æ¿ì Á¦°Å¸¦ °è¼Ó ÇÒ ¼ö ¾ø½À´Ï´Ù. ÇöÀç ÀÛ¾÷À» ¸ØÃß°í ¡®È®ÀΡ¯À» ´·¯ ¼¼ÄÁµå¶óÀÌÇÁ¸¦ Á¾·áÇÑ ´ÙÀ½ ÁøÇàÇϱ⠹ٶø´Ï´Ù. ¼³Ä¡¸¦ ÃëÇÏ·Á¸é ¡®Ãë¼Ò¡¯¸¦ ´©¸£¼¼¿ä. "
+
+; removecachefiles
+LangString RemoveCacheFilesDP ${LANG_KOREAN} " Documents and Settings Æú´õ ³»ÀÇ Ä³½Ã ÆÄÀϵéÀ» Áö¿ó´Ï´Ù."
+
+; delete program files
+LangString DeleteProgramFilesMB ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ ÇÁ·Î±×·¥ µð·ºÅ丮¿¡ ¾ÆÁ÷ ÆÄÀϵéÀÌ ³²¾Æ ÀÖ½À´Ï´Ù. ÀÌ ÆÄÀϵéÀº »ç¿ëÀÚ°¡ ¸¸µç °ÍµéÀ̰ųª$\n$INSTDIR$\n$\n·Î À̵¿ÇÑ ÆÄÀϵéÀÏ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ÆÄÀϵéÀ» Á¦°ÅÇÏ°Ú½À´Ï±î?"
+
+; uninstall text
+LangString UninstallTextMsg ${LANG_KOREAN} "¼¼ÄÁµå¶óÀÌÇÁ${VERSION_LONG}À» ½Ã½ºÅÛ¿¡¼ Á¦°ÅÇÕ´Ï´Ù."
diff --git a/linden/indra/newview/licenses-linux.txt b/linden/indra/newview/licenses-linux.txt
index 20b76c8..a0dc048 100644
--- a/linden/indra/newview/licenses-linux.txt
+++ b/linden/indra/newview/licenses-linux.txt
@@ -159,6 +159,20 @@ FreeType License
Portions of this software are copyright (c) 2003 The FreeType
Project (www.freetype.org). All rights reserved.
+==========================
+FSI FontShop International
+==========================
+
+Certain of the fonts in the Meta family of copyrighted typefaces are
+used in Second Life under license from FSI FontShop
+International. Copies of such Meta fonts that are included in the
+Viewer are not themselves open source and are not available under the
+GPL license, and they may not be copied. Developers may use those
+fonts solely to the extent necessary to use or customize the Linden
+Software in Second Life and to develop and distribute content solely
+for use in the Second Life environment, and for no other purposes.
+Second Life developers who wish to make other uses of Meta fonts must
+obtain a license from FSI FontShop International at www.fontfont.com.
==========
GL License
diff --git a/linden/indra/newview/licenses-mac.txt b/linden/indra/newview/licenses-mac.txt
index 77541ba..6fcf461 100644
--- a/linden/indra/newview/licenses-mac.txt
+++ b/linden/indra/newview/licenses-mac.txt
@@ -159,6 +159,20 @@ FreeType License
Portions of this software are copyright (c) 2003 The FreeType
Project (www.freetype.org). All rights reserved.
+==========================
+FSI FontShop International
+==========================
+
+Certain of the fonts in the Meta family of copyrighted typefaces are
+used in Second Life under license from FSI FontShop
+International. Copies of such Meta fonts that are included in the
+Viewer are not themselves open source and are not available under the
+GPL license, and they may not be copied. Developers may use those
+fonts solely to the extent necessary to use or customize the Linden
+Software in Second Life and to develop and distribute content solely
+for use in the Second Life environment, and for no other purposes.
+Second Life developers who wish to make other uses of Meta fonts must
+obtain a license from FSI FontShop International at www.fontfont.com.
==========
GL License
diff --git a/linden/indra/newview/licenses-win32.txt b/linden/indra/newview/licenses-win32.txt
index 77541ba..6fcf461 100644
--- a/linden/indra/newview/licenses-win32.txt
+++ b/linden/indra/newview/licenses-win32.txt
@@ -159,6 +159,20 @@ FreeType License
Portions of this software are copyright (c) 2003 The FreeType
Project (www.freetype.org). All rights reserved.
+==========================
+FSI FontShop International
+==========================
+
+Certain of the fonts in the Meta family of copyrighted typefaces are
+used in Second Life under license from FSI FontShop
+International. Copies of such Meta fonts that are included in the
+Viewer are not themselves open source and are not available under the
+GPL license, and they may not be copied. Developers may use those
+fonts solely to the extent necessary to use or customize the Linden
+Software in Second Life and to develop and distribute content solely
+for use in the Second Life environment, and for no other purposes.
+Second Life developers who wish to make other uses of Meta fonts must
+obtain a license from FSI FontShop International at www.fontfont.com.
==========
GL License
diff --git a/linden/indra/newview/linux_tools/client-readme.txt b/linden/indra/newview/linux_tools/client-readme.txt
index 7c972bb..cabb034 100644
--- a/linden/indra/newview/linux_tools/client-readme.txt
+++ b/linden/indra/newview/linux_tools/client-readme.txt
@@ -10,8 +10,16 @@ Life itself - please see .
3. Installing & Running
4. Known Issues
5. Troubleshooting
+ 5.1. 'Error creating window.'
+ 5.2. System hangs
+ 5.3. 'Shiny' and client performance
+ 5.4. Audio
+ 5.5. 'Alt' key for camera controls doesn't work
6. Advanced Troubleshooting
-7. Getting more help, and reporting problems
+ 6.1. Audio
+ 6.2. OpenGL
+7. Obtaining and working with the client source code
+8. Getting more help, and reporting problems
1. INTRODUCTION
@@ -28,6 +36,11 @@ with your system. Be aware that although the client itself is provided
for testing purposes, any changes you make within the Second Life world
are permanent.
+You will have either obtained this client from secondlife.com (the official
+site) or from a third-party packager; if you encounter any problems then
+we recommend trying the latest official builds from secondlife.com which are
+updated often.
+
Please enjoy!
@@ -37,10 +50,10 @@ Please enjoy!
Minimum requirements:
* Internet Connection: Cable or DSL
* Computer Processor: 800MHz Pentium III or Athlon, or better
- * Computer Memory: 256MB or better
+ * Computer Memory: 256MB or better (strongly recommend more!)
* Linux Operating System: A reasonably modern 32-bit Linux environment
- is required. If you are running a 64-bit Linux distribution, you
- may need a set of 32-bit compatibility libraries.
+ is required. If you are running a 64-bit Linux distribution then
+ you will need its 32-bit compatibility environment installed.
* Video/Graphics Card:
o nVidia GeForce 2, GeForce 4mx, or better
o OR ATI Radeon 8500, 9250, or better
@@ -125,7 +138,7 @@ SOLUTION:- Usually this indicates that your graphics card does not meet
PROBLEM 2:- My whole system seems to hang when running Second Life.
SOLUTION:- This is typically a hardware/driver issue. The first thing to
do is to check that you have the most recent official drivers for your
- graphics card.
+ graphics card (see PROBLEM 1).
SOLUTION:- Some residents with ATI cards have reported that running
'sudo aticonfig --locked-userpages=off' before running Second Life solves
their stability issues.
@@ -147,6 +160,9 @@ SOLUTION:- Some graphics performance features in Second Life are disabled
automatically used, and some new options in Preferences will now be
available to you; there is no guarantee, however, that they will
positively affect performance!
+SOLUTION:- If you are not running an official Second Life client obtained from
+ secondlife.com, you should consider doing so as you may find its
+ performance to be superior to third-party versions.
PROBLEM 4:- Sound effects seem to 'lag' a fraction of a second behind
actions.
@@ -154,6 +170,13 @@ SOLUTION:- You may uncomment the 'LL_BAD_ESD' line in the 'secondlife' script
to get more responsive audio. However, if you do this then you may
encounter audio issues or a hang during login, so beware.
+PROBLEM 5:- Using the 'Alt' key to control the camera doesn't work or just
+ moves the Second Life window.
+SOLUTION:- Some window managers eat the Alt key for their own purposes; you
+ can configure your window manager to use a different key instead (for
+ example, the 'Windows' key!) which will allow the Alt key to function
+ properly with mouse actions in Second Life and other applications.
+
6. ADVANCED TROUBLESHOOTING
-=-=-=-=-=-=-=-=-=-=-=-=-=-
@@ -178,15 +201,28 @@ configuration options for advanced troubleshooters.
LL_GL_BASICEXT and LL_GL_NOEXT should be commented-out for this to be useful.
-7. GETTING MORE HELP AND REPORTING PROBLEMS
+7. OBTAINING AND WORKING WITH THE CLIENT SOURCE CODE
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+We're pleased to have released the Second Life client's source code under
+an Open Source license compatible with the 'GPL'. To get involved with client
+development, please see:
+
+
+
+8. GETTING MORE HELP AND REPORTING PROBLEMS
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
For general help and support with Second Life:
+For problems and discussion concerning unofficial (not secondlife.com)
+releases, please contact your packager or the SLDev mailing list:
+
+
In-world help: Please use the 'Help' menu in the client for general
non-Linux-specific Second Life help including live support from the fabulous
-Live Help team.
+'Help Request' team.
In-world discussion: There is a 'Linux Client Users' group
inside Second Life which is free to join. You can find it by pressing
diff --git a/linden/indra/newview/llagent.cpp b/linden/indra/newview/llagent.cpp
index a6ec948..ff16682 100644
--- a/linden/indra/newview/llagent.cpp
+++ b/linden/indra/newview/llagent.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -222,6 +223,9 @@ BOOL LLAgent::sDebugDisplayTarget = FALSE;
const F32 LLAgent::TYPING_TIMEOUT_SECS = 5.f;
+std::map LLAgent::sTeleportErrorMessages;
+std::map LLAgent::sTeleportProgressMessages;
+
class LLAgentFriendObserver : public LLFriendObserver
{
public:
@@ -328,9 +332,6 @@ LLAgent::LLAgent()
mbJump(FALSE),
- mWanderTimer(),
- mWanderTargetGlobal( LLVector3d::zero ),
-
mAutoPilot(FALSE),
mAutoPilotFlyOnStop(FALSE),
mAutoPilotTargetGlobal(),
@@ -2116,36 +2117,6 @@ BOOL LLAgent::getBusy() const
//-----------------------------------------------------------------------------
-// updateWanderTarget()
-//-----------------------------------------------------------------------------
-void LLAgent::updateWanderTarget()
-{
- S32 num_regions;
- LLViewerRegion* rand_region;
- F32 rand_x;
- F32 rand_y;
-
- if (mWanderTimer.checkExpirationAndReset(ll_frand(MAX_WANDER_TIME)))
- {
- // Pick a random spot to wander towards
- num_regions = gWorldPointer->mActiveRegionList.getLength();
- S32 region_num = llround(ll_frand() * num_regions);
- rand_region = gWorldPointer->mActiveRegionList.getFirstData();
- S32 i = 0;
- while (i < region_num)
- {
- rand_region = gWorldPointer->mActiveRegionList.getNextData();
- i++;
- }
- rand_x = ll_frand(rand_region->getWidth());
- rand_y = ll_frand(rand_region->getWidth());
-
- stopAutoPilot();
- startAutoPilotGlobal(rand_region->getPosGlobalFromRegion(LLVector3(rand_x, rand_y, 0.f)));
- }
-}
-
-//-----------------------------------------------------------------------------
// startAutoPilotGlobal()
//-----------------------------------------------------------------------------
void LLAgent::startAutoPilotGlobal(const LLVector3d &target_global, const std::string& behavior_name, const LLQuaternion *target_rotation, void (*finish_callback)(BOOL, void *), void *callback_data, F32 stop_distance, F32 rot_threshold)
@@ -4062,10 +4033,6 @@ void LLAgent::changeCameraToFollow(BOOL animate)
mbFlagsDirty = TRUE;
}
- //RN: this doesn't seem to be necessary and destroys the UE for script-driven cameras
- //gViewerWindow->setKeyboardFocus( NULL, NULL );
- //gViewerWindow->setMouseCapture( NULL, NULL );
-
if (animate)
{
startCameraAnimation();
@@ -4129,9 +4096,6 @@ void LLAgent::changeCameraToThirdPerson(BOOL animate)
mbFlagsDirty = TRUE;
}
- //RN: this doesn't seem to be necessary and destroys the UE for script-driven cameras
- //gViewerWindow->setKeyboardFocus( NULL, NULL );
- //gViewerWindow->setMouseCapture( NULL, NULL );
}
// Remove any pitch from the avatar
@@ -4204,7 +4168,7 @@ void LLAgent::changeCameraToCustomizeAvatar(BOOL animate)
}
gViewerWindow->setKeyboardFocus( NULL, NULL );
- gViewerWindow->setMouseCapture( NULL, NULL );
+ gViewerWindow->setMouseCapture( NULL );
LLVOAvatar::onCustomizeStart();
}
@@ -5531,6 +5495,8 @@ bool LLAgent::teleportCore(bool is_local)
LLFloaterWorldMap::hide(NULL);
LLFloaterDirectory::hide(NULL);
+ gParcelMgr->deselectLand();
+
// Close all pie menus, deselect land, etc.
// Don't change the camera until we know teleport succeeded. JC
resetView(FALSE);
@@ -7256,4 +7222,57 @@ void LLAgent::observeFriends()
}
}
+void LLAgent::parseTeleportMessages(const LLString& xml_filename)
+{
+ LLXMLNodePtr root;
+ BOOL success = LLUICtrlFactory::getLayeredXMLNode(xml_filename, root);
+
+ if (!success || !root || !root->hasName( "teleport_messages" ))
+ {
+ llerrs << "Problem reading teleport string XML file: "
+ << xml_filename << llendl;
+ return;
+ }
+
+ for (LLXMLNode* message_set = root->getFirstChild();
+ message_set != NULL;
+ message_set = message_set->getNextSibling())
+ {
+ if ( !message_set->hasName("message_set") ) continue;
+
+ std::map *teleport_msg_map = NULL;
+ LLString message_set_name;
+
+ if ( message_set->getAttributeString("name", message_set_name) )
+ {
+ //now we loop over all the string in the set and add them
+ //to the appropriate set
+ if ( message_set_name == "errors" )
+ {
+ teleport_msg_map = &sTeleportErrorMessages;
+ }
+ else if ( message_set_name == "progress" )
+ {
+ teleport_msg_map = &sTeleportProgressMessages;
+ }
+ }
+
+ if ( !teleport_msg_map ) continue;
+
+ LLString message_name;
+ for (LLXMLNode* message_node = message_set->getFirstChild();
+ message_node != NULL;
+ message_node = message_node->getNextSibling())
+ {
+ if ( message_node->hasName("message") &&
+ message_node->getAttributeString("name", message_name) )
+ {
+ (*teleport_msg_map)[message_name] =
+ message_node->getTextContents();
+ } //end if ( message exists and has a name)
+ } //end for (all message in set)
+ }//end for (all message sets in xml file)
+}
+
+
// EOF
diff --git a/linden/indra/newview/llagent.h b/linden/indra/newview/llagent.h
index faf94ab..af593e0 100644
--- a/linden/indra/newview/llagent.h
+++ b/linden/indra/newview/llagent.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -417,8 +418,6 @@ public:
void propagate(const F32 dt); // BUG: should roll into updateAgentPosition
- void updateWanderTarget(); // drones will pick points in the world to autopilot towards
-
void startAutoPilotGlobal(const LLVector3d &pos_global, const std::string& behavior_name = "", const LLQuaternion *target_rotation = NULL,
void (*finish_callback)(BOOL, void *) = NULL, void *callback_data = NULL, F32 stop_distance = 0.f, F32 rotation_threshold = 0.03f);
@@ -693,6 +692,13 @@ public:
BOOL mForceMouselook;
+ static void parseTeleportMessages(const LLString& xml_filename);
+ //we should really define ERROR and PROGRESS enums here
+ //but I don't really feel like doing that, so I am just going
+ //to expose the mappings....yup
+ static std::map sTeleportErrorMessages;
+ static std::map sTeleportProgressMessages;
+
private:
ETeleportState mTeleportState;
LLString mTeleportMessage;
@@ -790,9 +796,6 @@ private:
BOOL mbJump;
- LLFrameTimer mWanderTimer;
- LLVector3d mWanderTargetGlobal;
-
BOOL mAutoPilot;
BOOL mAutoPilotFlyOnStop;
LLVector3d mAutoPilotTargetGlobal;
diff --git a/linden/indra/newview/llagentdata.cpp b/linden/indra/newview/llagentdata.cpp
index c42d0a0..464a37b 100644
--- a/linden/indra/newview/llagentdata.cpp
+++ b/linden/indra/newview/llagentdata.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llagentdata.h b/linden/indra/newview/llagentdata.h
index 7ce43b9..eba2a29 100644
--- a/linden/indra/newview/llagentdata.h
+++ b/linden/indra/newview/llagentdata.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llagentpilot.cpp b/linden/indra/newview/llagentpilot.cpp
index 45d29cc..0ccfd45 100644
--- a/linden/indra/newview/llagentpilot.cpp
+++ b/linden/indra/newview/llagentpilot.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llagentpilot.h b/linden/indra/newview/llagentpilot.h
index cdf505c..9f1a3c9 100644
--- a/linden/indra/newview/llagentpilot.h
+++ b/linden/indra/newview/llagentpilot.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llanimalcontrols.cpp b/linden/indra/newview/llanimalcontrols.cpp
index 2e047ae..da3c6e8 100644
--- a/linden/indra/newview/llanimalcontrols.cpp
+++ b/linden/indra/newview/llanimalcontrols.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llanimalcontrols.h b/linden/indra/newview/llanimalcontrols.h
index a5a62bf..73e8679 100644
--- a/linden/indra/newview/llanimalcontrols.h
+++ b/linden/indra/newview/llanimalcontrols.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llappearance.h b/linden/indra/newview/llappearance.h
index 9c23e90..2a6a95e 100644
--- a/linden/indra/newview/llappearance.h
+++ b/linden/indra/newview/llappearance.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llassetuploadresponders.cpp b/linden/indra/newview/llassetuploadresponders.cpp
index 7c615dd..821bb2a 100644
--- a/linden/indra/newview/llassetuploadresponders.cpp
+++ b/linden/indra/newview/llassetuploadresponders.cpp
@@ -79,7 +79,7 @@ void LLAssetUploadResponder::error(U32 statusNum, const std::string& reason)
default:
args["[FILE]"] = (mFileName.empty() ? mVFileID.asString() : mFileName);
args["[REASON]"] = "The server is experiencing unexpected "
- "difficulties. Please try again later.";
+ "difficulties.";
gViewerWindow->alertXml("CannotUploadReason", args);
break;
}
diff --git a/linden/indra/newview/llasynchostbyname.cpp b/linden/indra/newview/llasynchostbyname.cpp
index 1d660bd..8eebe8b 100644
--- a/linden/indra/newview/llasynchostbyname.cpp
+++ b/linden/indra/newview/llasynchostbyname.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llasynchostbyname.h b/linden/indra/newview/llasynchostbyname.h
index 351fc2a..30dedd0 100644
--- a/linden/indra/newview/llasynchostbyname.h
+++ b/linden/indra/newview/llasynchostbyname.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llaudiosourcevo.cpp b/linden/indra/newview/llaudiosourcevo.cpp
index cbb1c78..084d532 100644
--- a/linden/indra/newview/llaudiosourcevo.cpp
+++ b/linden/indra/newview/llaudiosourcevo.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llaudiosourcevo.h b/linden/indra/newview/llaudiosourcevo.h
index c5649f9..ac208a3 100644
--- a/linden/indra/newview/llaudiosourcevo.h
+++ b/linden/indra/newview/llaudiosourcevo.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llaudiostatus.cpp b/linden/indra/newview/llaudiostatus.cpp
index 397f7e4..f24d939 100644
--- a/linden/indra/newview/llaudiostatus.cpp
+++ b/linden/indra/newview/llaudiostatus.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llaudiostatus.h b/linden/indra/newview/llaudiostatus.h
index e2c8740..fe7b67f 100644
--- a/linden/indra/newview/llaudiostatus.h
+++ b/linden/indra/newview/llaudiostatus.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llbbox.cpp b/linden/indra/newview/llbbox.cpp
index aa3d892..29bcf86 100644
--- a/linden/indra/newview/llbbox.cpp
+++ b/linden/indra/newview/llbbox.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llbbox.h b/linden/indra/newview/llbbox.h
index b8d1d4e..e04de42 100644
--- a/linden/indra/newview/llbbox.h
+++ b/linden/indra/newview/llbbox.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llbox.cpp b/linden/indra/newview/llbox.cpp
index 8f51c4f..4eb5fa2 100644
--- a/linden/indra/newview/llbox.cpp
+++ b/linden/indra/newview/llbox.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llbox.h b/linden/indra/newview/llbox.h
index e7e7164..304916b 100644
--- a/linden/indra/newview/llbox.h
+++ b/linden/indra/newview/llbox.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llcallbacklist.cpp b/linden/indra/newview/llcallbacklist.cpp
index 3931371..c5a7e28 100644
--- a/linden/indra/newview/llcallbacklist.cpp
+++ b/linden/indra/newview/llcallbacklist.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llcallbacklist.h b/linden/indra/newview/llcallbacklist.h
index b2e6f51..84dccfa 100644
--- a/linden/indra/newview/llcallbacklist.h
+++ b/linden/indra/newview/llcallbacklist.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llcallingcard.cpp b/linden/indra/newview/llcallingcard.cpp
index d1fdda6..22e7f23 100644
--- a/linden/indra/newview/llcallingcard.cpp
+++ b/linden/indra/newview/llcallingcard.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llcallingcard.h b/linden/indra/newview/llcallingcard.h
index 1b2a643..2d36324 100644
--- a/linden/indra/newview/llcallingcard.h
+++ b/linden/indra/newview/llcallingcard.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llcameraview.cpp b/linden/indra/newview/llcameraview.cpp
index 6c63359..d9bd282 100644
--- a/linden/indra/newview/llcameraview.cpp
+++ b/linden/indra/newview/llcameraview.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -28,6 +29,7 @@
#include "llviewerprecompiledheaders.h"
#include "llcameraview.h"
+#include "llvieweruictrlfactory.h"
// Library includes
#include "llfontgl.h"
@@ -36,6 +38,8 @@
#include "llagent.h"
#include "lljoystickbutton.h"
#include "llviewercontrol.h"
+#include "llviewerwindow.h"
+#include "viewer.h"
// Constants
const char *CAMERA_TITLE = "";
@@ -158,4 +162,95 @@ BOOL LLFloaterCamera::visible(void*)
}
}
-// EOF
+LLFloaterJoystick *LLFloaterJoystick::sInstance = NULL;
+
+
+LLFloaterJoystick::LLFloaterJoystick( )
+: LLFloater("Joystick floater")
+{
+ sInstance = this;
+}
+
+LLFloaterJoystick::~LLFloaterJoystick()
+{
+ sInstance = NULL;
+}
+
+void LLFloaterJoystick::draw()
+{
+ for (U32 i = 0; i < 6; i++)
+ {
+ F32 value = gViewerWindow->getWindow()->getJoystickAxis(i);
+ mAxis[i]->addValue(value*gFrameIntervalSeconds);
+
+ if (mAxisBar[i]->mMinBar > value)
+ {
+ mAxisBar[i]->mMinBar = value;
+ }
+ if (mAxisBar[i]->mMaxBar < value)
+ {
+ mAxisBar[i]->mMaxBar = value;
+ }
+ }
+
+ LLFloater::draw();
+}
+
+// static
+void LLFloaterJoystick::show(void*)
+{
+ if (sInstance)
+ {
+ sInstance->open(); /*Flawfinder: ignore*/
+ }
+ else
+ {
+ LLFloaterJoystick* floater = new LLFloaterJoystick();
+
+ gUICtrlFactory->buildFloater(floater, "floater_joystick.xml");
+ F32 range = gSavedSettings.getBOOL("FlycamAbsolute") ? 1024.f : 2.f;
+ LLUIString axis = floater->childGetText("Axis");
+ LLUIString joystick = floater->childGetText("JoystickMonitor");
+
+ LLView* child = floater->getChildByName("ZoomLabel");
+ LLRect rect;
+
+ if (child)
+ {
+ LLRect r = child->getRect();
+ LLRect f = floater->getRect();
+ rect = LLRect(150, r.mTop, r.mRight, 0);
+ }
+
+ floater->mAxisStats = new LLStatView("axis values", joystick, "", rect);
+ floater->mAxisStats->setDisplayChildren(TRUE);
+
+ for (U32 i = 0; i < 6; i++)
+ {
+ axis.setArg("[NUM]", llformat("%d", i));
+ floater->mAxis[i] = new LLStat(4);
+ floater->mAxisBar[i] = floater->mAxisStats->addStat(axis, floater->mAxis[i]);
+ floater->mAxisBar[i]->mMinBar = -range;
+ floater->mAxisBar[i]->mMaxBar = range;
+ floater->mAxisBar[i]->mLabelSpacing = range * 0.5f;
+ floater->mAxisBar[i]->mTickSpacing = range * 0.25f;
+ }
+
+
+
+ floater->addChild(floater->mAxisStats);
+ floater->open(); /*Flawfinder: ignore*/
+ }
+}
+
+//static
+LLFloaterJoystick* LLFloaterJoystick::getInstance()
+{
+ return sInstance;
+}
+
+// static
+BOOL LLFloaterJoystick::visible(void*)
+{
+ return (sInstance != NULL);
+}
diff --git a/linden/indra/newview/llcameraview.h b/linden/indra/newview/llcameraview.h
index 9283043..32c29e8 100644
--- a/linden/indra/newview/llcameraview.h
+++ b/linden/indra/newview/llcameraview.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -35,6 +36,7 @@
// Library includes
#include "llfloater.h"
+#include "llstatview.h"
class LLJoystickCameraRotate;
class LLJoystickCameraZoom;
@@ -62,6 +64,26 @@ public:
LLJoystickCameraTrack* mTrack;
};
+class LLFloaterJoystick
+: public LLFloater
+{
+protected:
+ LLFloaterJoystick();
+ ~LLFloaterJoystick();
+
+public:
+ static void show(void*);
+ static LLFloaterJoystick* getInstance();
+ static BOOL visible(void*);
+ virtual void draw();
+
+protected:
+ static LLFloaterJoystick* sInstance;
+ LLStatView* mAxisStats;
+ LLStat* mAxis[6];
+ LLStatBar* mAxisBar[6];
+};
+
extern LLFloaterCamera *gFloaterCamera;
#endif
diff --git a/linden/indra/newview/llcape.cpp b/linden/indra/newview/llcape.cpp
index 327a0d0..91f4ee7 100644
--- a/linden/indra/newview/llcape.cpp
+++ b/linden/indra/newview/llcape.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llcape.h b/linden/indra/newview/llcape.h
index 584cc19..64cf2c4 100644
--- a/linden/indra/newview/llcape.h
+++ b/linden/indra/newview/llcape.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llcaphttpsender.cpp b/linden/indra/newview/llcaphttpsender.cpp
new file mode 100644
index 0000000..cea8198
--- /dev/null
+++ b/linden/indra/newview/llcaphttpsender.cpp
@@ -0,0 +1,50 @@
+/**
+ * @file llcaphttpsender.cpp
+ * @brief Abstracts details of sending messages via UntrustedMessage cap.
+ *
+ * Copyright (c) 2007-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "linden_common.h"
+#include "llcaphttpsender.h"
+
+LLCapHTTPSender::LLCapHTTPSender(const std::string& cap) :
+ mCap(cap)
+{
+}
+
+//virtual
+void LLCapHTTPSender::send(const LLHost& host, const char* message,
+ const LLSD& body,
+ LLHTTPClient::ResponderPtr response) const
+{
+ llinfos << "LLCapHTTPSender::send: message " << message
+ << " to host " << host << llendl;
+ LLSD llsd;
+ llsd["message"] = message;
+ llsd["body"] = body;
+ LLHTTPClient::post(mCap, llsd, response);
+}
diff --git a/linden/indra/newview/llcaphttpsender.h b/linden/indra/newview/llcaphttpsender.h
new file mode 100644
index 0000000..c482c41
--- /dev/null
+++ b/linden/indra/newview/llcaphttpsender.h
@@ -0,0 +1,50 @@
+/**
+ * @file llcaphttpsender.h
+ * @brief Abstracts details of sending messages via the
+ * UntrustedMessage capability.
+ *
+ * Copyright (c) 2007-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ */
+
+#ifndef LL_CAP_HTTP_SENDER_H
+#define LL_CAP_HTTP_SENDER_H
+
+#include "llhttpsender.h"
+
+class LLCapHTTPSender : public LLHTTPSender
+{
+public:
+ LLCapHTTPSender(const std::string& cap);
+
+ /** @brief Send message via UntrustedMessage capability with body,
+ call response when done */
+ virtual void send(const LLHost& host,
+ const char* message, const LLSD& body,
+ LLHTTPClient::ResponderPtr response) const;
+
+private:
+ std::string mCap;
+};
+
+#endif // LL_CAP_HTTP_SENDER_H
diff --git a/linden/indra/newview/llchatbar.cpp b/linden/indra/newview/llchatbar.cpp
index 394399e..02bed33 100644
--- a/linden/indra/newview/llchatbar.cpp
+++ b/linden/indra/newview/llchatbar.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -602,7 +603,7 @@ void LLChatBar::onInputEditorKeystroke( LLLineEditor* caller, void* userdata )
}
// static
-void LLChatBar::onInputEditorFocusLost( LLLineEditor* caller, void* userdata)
+void LLChatBar::onInputEditorFocusLost( LLUICtrl* caller, void* userdata)
{
// stop typing animation
gAgent.stopTyping();
diff --git a/linden/indra/newview/llchatbar.h b/linden/indra/newview/llchatbar.h
index 0af5469..32b0018 100644
--- a/linden/indra/newview/llchatbar.h
+++ b/linden/indra/newview/llchatbar.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -86,7 +87,7 @@ public:
static void onTabClick( void* userdata );
static void onInputEditorKeystroke(LLLineEditor* caller, void* userdata);
- static void onInputEditorFocusLost(LLLineEditor* caller,void* userdata);
+ static void onInputEditorFocusLost(LLUICtrl* caller,void* userdata);
static void onInputEditorGainFocus(LLUICtrl* caller,void* userdata);
static void onCommitGesture(LLUICtrl* ctrl, void* data);
diff --git a/linden/indra/newview/llclassifiedinfo.cpp b/linden/indra/newview/llclassifiedinfo.cpp
index 3115e30..5d35dcc 100644
--- a/linden/indra/newview/llclassifiedinfo.cpp
+++ b/linden/indra/newview/llclassifiedinfo.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llclassifiedinfo.h b/linden/indra/newview/llclassifiedinfo.h
index ed2fa0a..6314fff 100644
--- a/linden/indra/newview/llclassifiedinfo.h
+++ b/linden/indra/newview/llclassifiedinfo.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llcloud.cpp b/linden/indra/newview/llcloud.cpp
index b14f6d5..ec148cc 100644
--- a/linden/indra/newview/llcloud.cpp
+++ b/linden/indra/newview/llcloud.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llcloud.h b/linden/indra/newview/llcloud.h
index 0b670ee..52bbdaf 100644
--- a/linden/indra/newview/llcloud.h
+++ b/linden/indra/newview/llcloud.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llcolorscheme.cpp b/linden/indra/newview/llcolorscheme.cpp
index 1381cad..8b271b0 100644
--- a/linden/indra/newview/llcolorscheme.cpp
+++ b/linden/indra/newview/llcolorscheme.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llcolorscheme.h b/linden/indra/newview/llcolorscheme.h
index 3c5a880..5fd7c93 100644
--- a/linden/indra/newview/llcolorscheme.h
+++ b/linden/indra/newview/llcolorscheme.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llcolorswatch.cpp b/linden/indra/newview/llcolorswatch.cpp
index a7f5ae7..19490a2 100644
--- a/linden/indra/newview/llcolorswatch.cpp
+++ b/linden/indra/newview/llcolorswatch.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -167,7 +168,7 @@ BOOL LLColorSwatchCtrl::handleMouseDown(S32 x, S32 y, MASK mask)
{
// Route future Mouse messages here preemptively. (Release on mouse up.)
// No handler is needed for capture lost since this object has no state that depends on it.
- gViewerWindow->setMouseCapture( this, NULL );
+ gViewerWindow->setMouseCapture( this );
return TRUE;
}
@@ -176,10 +177,10 @@ BOOL LLColorSwatchCtrl::handleMouseDown(S32 x, S32 y, MASK mask)
BOOL LLColorSwatchCtrl::handleMouseUp(S32 x, S32 y, MASK mask)
{
// We only handle the click if the click both started and ended within us
- if( gViewerWindow->hasMouseCapture( this ) )
+ if( hasMouseCapture() )
{
// Release the mouse
- gViewerWindow->setMouseCapture( NULL, NULL );
+ gViewerWindow->setMouseCapture( NULL );
// If mouseup in the widget, it's been clicked
if ( pointInView(x, y) )
@@ -245,7 +246,7 @@ void LLColorSwatchCtrl::draw()
void LLColorSwatchCtrl::setEnabled( BOOL enabled )
{
mCaption->setEnabled( enabled );
- LLUICtrl::setEnabled( enabled );
+ LLView::setEnabled( enabled );
if (!enabled)
{
diff --git a/linden/indra/newview/llcolorswatch.h b/linden/indra/newview/llcolorswatch.h
index b52d6ac..b80a0e6 100644
--- a/linden/indra/newview/llcolorswatch.h
+++ b/linden/indra/newview/llcolorswatch.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llcompass.cpp b/linden/indra/newview/llcompass.cpp
index b3847d6..125ae10 100644
--- a/linden/indra/newview/llcompass.cpp
+++ b/linden/indra/newview/llcompass.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llcompass.h b/linden/indra/newview/llcompass.h
index f454f6c..d23046d 100644
--- a/linden/indra/newview/llcompass.h
+++ b/linden/indra/newview/llcompass.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llcompilequeue.cpp b/linden/indra/newview/llcompilequeue.cpp
index c5ad2b9..12b52c4 100644
--- a/linden/indra/newview/llcompilequeue.cpp
+++ b/linden/indra/newview/llcompilequeue.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -198,7 +199,7 @@ BOOL LLFloaterScriptQueue::start()
{
//llinfos << "LLFloaterCompileQueue::start()" << llendl;
char buffer[MAX_STRING]; /*Flawfinder: ignore*/
- snprintf(buffer, sizeof(buffer), "Starting %s of %d items.", mStartString, mObjectIDs.count()); /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), "Starting %s of %d items.", mStartString, mObjectIDs.count()); /* Flawfinder: ignore */
LLScrollListCtrl* list = LLUICtrlFactory::getScrollListByName(this, "queue output");
list->addSimpleItem(buffer);
@@ -238,7 +239,7 @@ BOOL LLFloaterScriptQueue::nextObject()
mDone = TRUE;
char buffer[MAX_STRING]; /*Flawfinder: ignore*/
- snprintf(buffer, sizeof(buffer), "Done."); /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), "Done."); /* Flawfinder: ignore */
list->addSimpleItem(buffer);
childSetEnabled("close",TRUE);
}
@@ -383,7 +384,7 @@ void LLFloaterCompileQueue::scriptArrived(LLVFS *vfs, const LLUUID& asset_id,
LLVFile file(vfs, asset_id, type);
char uuid_str[UUID_STR_LENGTH]; /*Flawfinder: ignore*/
asset_id.toString(uuid_str);
- snprintf(filename, sizeof(filename), "%s.%s",gDirUtilp->getExpandedFilename(LL_PATH_CACHE,uuid_str).c_str(),LLAssetType::lookup(type)); /*Flawfinder: ignore*/
+ snprintf(filename, sizeof(filename), "%s.%s",gDirUtilp->getExpandedFilename(LL_PATH_CACHE,uuid_str).c_str(),LLAssetType::lookup(type)); /* Flawfinder: ignore */
FILE *fp = LLFile::fopen(filename, "wb"); /*Flawfinder: ignore*/
if (fp)
@@ -403,7 +404,7 @@ void LLFloaterCompileQueue::scriptArrived(LLVFS *vfs, const LLUUID& asset_id,
}
// It's now in the file, now compile it.
- snprintf(buffer, sizeof(buffer), "Downloaded, now compiling '%s'.", data->mScriptName.c_str()); /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), "Downloaded, now compiling '%s'.", data->mScriptName.c_str()); /* Flawfinder: ignore */
queue->compile(filename, asset_id);
// Delete it after we're done compiling?
@@ -420,19 +421,19 @@ void LLFloaterCompileQueue::scriptArrived(LLVFS *vfs, const LLUUID& asset_id,
{
LLChat chat("Script not found on server.");
LLFloaterChat::addChat(chat);
- snprintf(buffer, sizeof(buffer), "Problem downloading %s.", /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), "Problem downloading %s.", /* Flawfinder: ignore */
data->mScriptName.c_str());
}
else if (LL_ERR_INSUFFICIENT_PERMISSIONS == status)
{
LLChat chat("Insufficient permissions to download a script.");
LLFloaterChat::addChat(chat);
- snprintf(buffer, sizeof(buffer), "Insufficient permissions for '%s'.", /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), "Insufficient permissions for '%s'.", /* Flawfinder: ignore */
data->mScriptName.c_str());
}
else
{
- snprintf(buffer, sizeof(buffer), "Unknown failure to download %s.", /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), "Unknown failure to download %s.", /* Flawfinder: ignore */
data->mScriptName.c_str());
}
@@ -496,9 +497,9 @@ void LLFloaterCompileQueue::compile(const char* filename,
char uuid_string[UUID_STR_LENGTH]; /*Flawfinder: ignore*/
new_asset_id.toString(uuid_string);
char dst_filename[LL_MAX_PATH]; /*Flawfinder: ignore*/
- snprintf(dst_filename, sizeof(dst_filename), "%s.lso", gDirUtilp->getExpandedFilename(LL_PATH_CACHE,uuid_string).c_str()); /*Flawfinder: ignore*/
+ snprintf(dst_filename, sizeof(dst_filename), "%s.lso", gDirUtilp->getExpandedFilename(LL_PATH_CACHE,uuid_string).c_str()); /* Flawfinder: ignore */
char err_filename[LL_MAX_PATH]; /*Flawfinder: ignore*/
- snprintf(err_filename, sizeof(err_filename), "%s.out", gDirUtilp->getExpandedFilename(LL_PATH_CACHE,uuid_string).c_str()); /*Flawfinder: ignore*/
+ snprintf(err_filename, sizeof(err_filename), "%s.out", gDirUtilp->getExpandedFilename(LL_PATH_CACHE,uuid_string).c_str()); /* Flawfinder: ignore */
gAssetStorage->storeAssetData(filename, tid,
LLAssetType::AT_LSL_TEXT,
@@ -622,7 +623,7 @@ void LLFloaterResetQueue::handleInventory(LLViewerObject* viewer_obj,
LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it));
LLScrollListCtrl* list = LLUICtrlFactory::getScrollListByName(this, "queue output");
char buffer[MAX_STRING]; /*Flawfinder: ignore*/
- snprintf(buffer, sizeof(buffer), "Resetting '%s'.", item->getName().c_str()); /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), "Resetting '%s'.", item->getName().c_str()); /* Flawfinder: ignore */
list->addSimpleItem(buffer);
LLMessageSystem* msg = gMessageSystem;
msg->newMessageFast(_PREHASH_ScriptReset);
@@ -685,7 +686,7 @@ void LLFloaterRunQueue::handleInventory(LLViewerObject* viewer_obj,
LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it));
LLScrollListCtrl* list = LLUICtrlFactory::getScrollListByName(this, "queue output");
char buffer[MAX_STRING]; /*Flawfinder: ignore*/
- snprintf(buffer, sizeof(buffer), "Running '%s'.", item->getName().c_str()); /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), "Running '%s'.", item->getName().c_str()); /* Flawfinder: ignore */
list->addSimpleItem(buffer);
LLMessageSystem* msg = gMessageSystem;
@@ -750,7 +751,7 @@ void LLFloaterNotRunQueue::handleInventory(LLViewerObject* viewer_obj,
LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it));
LLScrollListCtrl* list = LLUICtrlFactory::getScrollListByName(this, "queue output");
char buffer[MAX_STRING]; /*Flawfinder: ignore*/
- snprintf(buffer, sizeof(buffer), "Not running '%s'.", item->getName().c_str()); /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), "Not running '%s'.", item->getName().c_str()); /* Flawfinder: ignore */
list->addSimpleItem(buffer);
LLMessageSystem* msg = gMessageSystem;
diff --git a/linden/indra/newview/llcompilequeue.h b/linden/indra/newview/llcompilequeue.h
index 72d91ef..c28b92c 100644
--- a/linden/indra/newview/llcompilequeue.h
+++ b/linden/indra/newview/llcompilequeue.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llconfirmationmanager.cpp b/linden/indra/newview/llconfirmationmanager.cpp
index b3a50f0..705e306 100644
--- a/linden/indra/newview/llconfirmationmanager.cpp
+++ b/linden/indra/newview/llconfirmationmanager.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llconfirmationmanager.h b/linden/indra/newview/llconfirmationmanager.h
index 01de803..46d9992 100644
--- a/linden/indra/newview/llconfirmationmanager.h
+++ b/linden/indra/newview/llconfirmationmanager.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llconsole.cpp b/linden/indra/newview/llconsole.cpp
index ce092a7..112f8ab 100644
--- a/linden/indra/newview/llconsole.cpp
+++ b/linden/indra/newview/llconsole.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llconsole.h b/linden/indra/newview/llconsole.h
index 525cab3..20fb545 100644
--- a/linden/indra/newview/llconsole.h
+++ b/linden/indra/newview/llconsole.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llcontainerview.cpp b/linden/indra/newview/llcontainerview.cpp
index 058d19c..3afc63f 100644
--- a/linden/indra/newview/llcontainerview.cpp
+++ b/linden/indra/newview/llcontainerview.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llcontainerview.h b/linden/indra/newview/llcontainerview.h
index bd468d5..a25439c 100644
--- a/linden/indra/newview/llcontainerview.h
+++ b/linden/indra/newview/llcontainerview.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llcontroldef.cpp b/linden/indra/newview/llcontroldef.cpp
index cd4cf4d..7989791 100644
--- a/linden/indra/newview/llcontroldef.cpp
+++ b/linden/indra/newview/llcontroldef.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -239,6 +240,8 @@ void declare_settings()
// Other....
//------------------------------------------------------------------------
+ gSavedSettings.declareBOOL("ScriptHelpFollowsCursor", FALSE, "Scripting help window updates contents based on script editor contents under text cursor");
+
gSavedSettings.declareS32("LastFeatureVersion", 0, "[DO NOT MODIFY] Version number for tracking hardware changes", TRUE);
gSavedSettings.declareS32("NumSessions", 0, "Number of successful logins to Second Life");
gSavedSettings.declareBOOL("ShowInventory", FALSE, "Open inventory window on login");
@@ -272,8 +275,9 @@ void declare_settings()
gSavedSettings.declareS32("LastPrefTab", 0, "Last selected tab in preferences window");
- //gSavedSettings.declareString("LSLHelpURL", "http://www.lslwiki.com/lslwiki/wakka.php?wakka=[LSL_STRING]", "URL that points to LSL help files, with [LSL_STRING] corresponding to the referenced LSL function or keyword");
- //gSavedSettings.declareString("LSLHelpURL", "file://[APP_DIRECTORY]/lsl_guide.html#[LSL_STRING]", "URL that points to LSL help files, with [LSL_STRING] corresponding to the referenced LSL function or keyword");
+ gSavedSettings.declareString("LSLHelpURL", "http://wiki.secondlife.com/wiki/[LSL_STRING]", "URL that points to LSL help files, with [LSL_STRING] corresponding to the referenced LSL function or keyword");
+ // link for editable wiki (https doesn't seem to work right now with our embedded browser)
+ //gSavedSettings.declareString("LSLHelpURL", "https://wiki.secondlife.com/wiki/[LSL_STRING]", "URL that points to LSL help files, with [LSL_STRING] corresponding to the referenced LSL function or keyword");
// Wearable default images
// const char* UI_IMG_BLACK_UUID = "e2244626-f22f-4839-8123-1e7baddeb659";
const char* UI_IMG_WHITE_UUID = "5748decc-f629-461c-9a36-a35a221fe21f";
@@ -447,6 +451,11 @@ void declare_settings()
gSavedSettings.declareString("UIImgBtnScrollRightOutUUID", "3d700d19-e708-465d-87f2-46c8c0ee7938", "", NO_PERSIST);
gSavedSettings.declareString("UIImgBtnScrollRightInUUID", "b749de64-e903-4c3c-ac0b-25fb6fa39cb5", "", NO_PERSIST);
+ gSavedSettings.declareString("UIImgBtnJumpLeftOutUUID", "3c18c87e-5f50-14e2-e744-f44734aa365f", "", NO_PERSIST);
+ gSavedSettings.declareString("UIImgBtnJumpLeftInUUID", "9cad3e6d-2d6d-107d-f8ab-5ba272b5bfe1", "", NO_PERSIST);
+ gSavedSettings.declareString("UIImgBtnJumpRightOutUUID", "ff9a71eb-7414-4cf8-866e-a701deb7c3cf", "", NO_PERSIST);
+ gSavedSettings.declareString("UIImgBtnJumpRightInUUID", "7dabc040-ec13-2309-ddf7-4f161f6de2f4", "", NO_PERSIST);
+
// Spin control
gSavedSettings.declareString("UIImgBtnSpinUpOutUUID", "56576e6e-6710-4e66-89f9-471b59122794", "", NO_PERSIST);
gSavedSettings.declareString("UIImgBtnSpinUpInUUID", "c8450082-96a0-4319-8090-d3ff900b4954", "", NO_PERSIST);
@@ -502,7 +511,8 @@ void declare_settings()
gSavedSettings.declareBOOL("ShowCrosshairs", TRUE, "Display crosshairs when in mouselook mode");
gSavedSettings.declareString("UIImgCrosshairsUUID", "6e1a3980-bf2d-4274-8970-91e60d85fb52", "Image to use for crosshair display (UUID texture reference)");
- gSavedSettings.declareString("Language", "en-us", "Language specifier (for XUI)" );
+ gSavedSettings.declareString("Language", "default", "Language specifier (for XUI)" );
+ gSavedSettings.declareString("SystemLanguage", "en-us", "Language indicated by system settings (for XUI)" );
/////////////////////////////////////////////////
// Other booleans
@@ -625,6 +635,10 @@ void declare_settings()
gSavedSettings.declareBOOL("OpenDebugStatRender", TRUE, "Expand render stats display");
gSavedSettings.declareBOOL("OpenDebugStatSim", TRUE, "Expand simulator performance stats display");
gSavedSettings.declareBOOL("ShowDepthBuffer", FALSE, "Show depth buffer contents");
+
+ gSavedSettings.declareBOOL("DebugShowTime", FALSE, "Show depth buffer contents");
+ gSavedSettings.declareBOOL("DebugShowRenderInfo", FALSE, "Show depth buffer contents");
+
// gSavedSettings.declareBOOL("ShowHUD", TRUE);
//gSavedSettings.declareBOOL("ShowHUDText", TRUE, "[NOT USED]");
//gSavedSettings.declareBOOL("ShowHeadlight", FALSE, "[NOT USED]");
@@ -669,12 +683,18 @@ void declare_settings()
gSavedSettings.declareF32( "RenderBumpmapMinDistanceSquared", 100.f, "Maximum distance at which to render bumpmapped primitives (distance in meters, squared)" );
gSavedSettings.declareS32( "RenderMaxPartCount", 4096, "Maximum number of particles to display on screen");
gSavedSettings.declareBOOL("RenderVBOEnable", TRUE, "Use GL Vertex Buffer Objects" );
+ gSavedSettings.declareS32("RenderReflectionRes", 64, "Reflection map resolution.");
//gSavedSettings.declareBOOL("RenderUseTriStrips", FALSE, "[NOT USED]");
//gSavedSettings.declareBOOL("RenderCullBySize", FALSE, "[NOT USED]" );
gSavedSettings.declareF32("RenderTerrainScale", 12.f, "Terrain detail texture scale");
gSavedSettings.declareBOOL("VertexShaderEnable", FALSE, "Enable/disable all GLSL shaders (debug)");
+ gSavedSettings.declareBOOL("RenderInitError", FALSE, "Error occured while initializing GL");
gSavedSettings.declareBOOL("RenderRippleWater", FALSE, "Display more realistic water, with refraction (requires pixel shader support on your video card)");
gSavedSettings.declareBOOL("RenderDynamicReflections", FALSE, "Generate a dynamic cube map for reflections (objects reflect their environment, experimental).");
+ gSavedSettings.declareBOOL("RenderGlow", FALSE, "Make light sources glow.");
+ gSavedSettings.declareF32("RenderGlowStrength", 1.25f, "Strength of glow");
+ gSavedSettings.declareS32("RenderGlowSize", 5, "Size of glow (in pixels)");
+ gSavedSettings.declareS32("RenderGlowResolution", 256, "Glow map resolution.");
gSavedSettings.declareBOOL("RenderObjectBump", TRUE, "Show bumpmapping on primitives");
gSavedSettings.declareS32("RenderAvatarMode", 1, "Controls how avatars are rendered (0 = normal, 1 = bump mapped, 2 = bump mapped and wavy cloth)");
gSavedSettings.declareBOOL("RenderAvatarVP", TRUE, "Use vertex programs to perform hardware skinning of avatar");
@@ -682,6 +702,7 @@ void declare_settings()
//gSavedSettings.declareBOOL("RenderForceGetTexImage", FALSE, "[NOT USED]");
gSavedSettings.declareBOOL("RenderFastUI", FALSE, "[NOT USED]");
gSavedSettings.declareBOOL("RenderUseSharedDrawables", TRUE, "Collapse transforms on moving linked objects for faster updates");
+ gSavedSettings.declareS32("DebugBeaconLineWidth", 1, "Size of lines for Debug Beacons");
// Snapshot params
gSavedSettings.declareBOOL("RenderUIInSnapshot", FALSE, "Display user interface in snapshot" );
@@ -769,6 +790,8 @@ void declare_settings()
// Build options floater
gSavedSettings.declareRect("FloaterBuildOptionsRect", LLRect(0,0,0,0), "Rectangle for build options window.");
+ gSavedSettings.declareRect("FloaterJoystickRect", LLRect(0,0,0,0), "Rectangle for joystick controls window.");
+
// Map floater
gSavedSettings.declareRect("FloaterMapRect", LLRect(0, 225, 200, 0), "Rectangle for world map");
@@ -810,6 +833,7 @@ void declare_settings()
// Previews - only width and height are used
gSavedSettings.declareRect("PreviewTextureRect", LLRect(0, 400, 400, 0), "Rectangle for texture preview window" ); // Only width and height are used
gSavedSettings.declareRect("PreviewScriptRect", LLRect(0, 550, 500, 0), "Rectangle for script preview window" ); // Only width and height are used
+ gSavedSettings.declareRect("LSLHelpRect", LLRect(0, 500, 600, 0), "Rectangle for LSL help window" ); // Only width and height are used
gSavedSettings.declareRect("PreviewLandmarkRect", LLRect(0, 90, 300, 0), "Rectangle for landmark preview window" ); // Only width and height are used
gSavedSettings.declareRect("PreviewSoundRect", LLRect(0, 85, 300, 0), "Rectangle for sound preview window" ); // Only width and height are used
gSavedSettings.declareRect("PreviewObjectRect", LLRect(0, 85, 300, 0), "Rectangle for object preview window" ); // Only width and height are used
@@ -961,6 +985,10 @@ void declare_settings()
//------------------------------------------------------------------------
gSavedSettings.declareString("HelpHomeURL", "help/index.html", "URL of initial help page");
gSavedSettings.declareString("HelpLastVisitedURL", "help/index.html", "URL of last help page, will be shown next time help is accessed");
+
+ // HTML dialog (general purpose)
+ gSavedSettings.declareRect("HtmlFloaterRect", LLRect(100,460,370,100), "Rectangle for HTML Floater window");
+
// HTML help
gSavedSettings.declareString("HtmlHelpLastPage", "", "Last URL visited via help system");
gSavedSettings.declareRect("HtmlHelpRect", LLRect(16,650,600,128), "Rectangle for HTML help window");
@@ -1161,7 +1189,7 @@ void declare_settings()
//gSavedSettings.declareBOOL("FindLandAuction", TRUE);
// Default for Find -> Land combo box
- gSavedSettings.declareString("FindLandType", "All", "Controls which type of land you are searching for in Find Land interface (\"All\", \"Auction\", \"For Sale\", \"First Land\")");
+ gSavedSettings.declareString("FindLandType", "All", "Controls which type of land you are searching for in Find Land interface (\"All\", \"Auction\", \"For Sale\")");
gSavedSettings.declareBOOL("FindLandPrice", TRUE, "Enables filtering of land search results by price");
gSavedSettings.declareBOOL("FindLandArea", FALSE, "Enables filtering of land search results by area");
@@ -1172,6 +1200,7 @@ void declare_settings()
gSavedSettings.declareBOOL("ShowMatureSims", FALSE, "Display results of find places or find popular that are in mature sims");
gSavedSettings.declareBOOL("ShowMatureEvents", FALSE, "Display results of find events that are flagged as mature");
gSavedSettings.declareBOOL("ShowMatureClassifieds", FALSE, "Display results of find classifieds that are flagged as mature");
+ gSavedSettings.declareBOOL("ShowMatureGroups", TRUE, "Display results of find groups that are in flagged as mature");
gSavedSettings.declareBOOL("FindPlacesPictures", TRUE, "Display only results of find places that have pictures");
@@ -1199,6 +1228,7 @@ void declare_settings()
gSavedSettings.declareBOOL("UseDefaultColorPicker", FALSE, "Use color picker supplied by operating system");
gSavedSettings.declareF32("PickerContextOpacity", 0.35f, "Controls overall opacity of context frustrum connecting color and texture pickers with their swatches");
+ gSavedSettings.declareF32("ColumnHeaderDropDownDelay", 0.3f, "Time in seconds of mouse click before column header shows sort options list");
// support for avatar exporter
//gSavedSettings.declareString("AvExportPath", "", "[NOT USED]");
//gSavedSettings.declareString("AvExportBaseName", "", "[NOT USED]");
@@ -1234,6 +1264,36 @@ void declare_settings()
//cheesy beacon effects
gSavedSettings.declareBOOL("CheesyBeacon", FALSE, "Enable cheesy beacon effects");
+ //flycam controls and joystick mapping
+ gSavedSettings.declareS32("FlycamAxis0", 0, "Flycam hardware axis mapping for internal axis 0 ([0, 5]).");
+ gSavedSettings.declareS32("FlycamAxis1", 1, "Flycam hardware axis mapping for internal axis 1 ([0, 5]).");
+ gSavedSettings.declareS32("FlycamAxis2", 2, "Flycam hardware axis mapping for internal axis 2 ([0, 5]).");
+ gSavedSettings.declareS32("FlycamAxis3", 3, "Flycam hardware axis mapping for internal axis 3 ([0, 5]).");
+ gSavedSettings.declareS32("FlycamAxis4", 4, "Flycam hardware axis mapping for internal axis 4 ([0, 5]).");
+ gSavedSettings.declareS32("FlycamAxis5", 5, "Flycam hardware axis mapping for internal axis 5 ([0, 5]).");
+ gSavedSettings.declareS32("FlycamAxis6", -1, "Flycam hardware axis mapping for internal axis 6 ([0, 5]).");
+
+ gSavedSettings.declareF32("FlycamAxisScale0", 1, "Flycam axis 0 scaler.");
+ gSavedSettings.declareF32("FlycamAxisScale1", 1, "Flycam axis 1 scaler.");
+ gSavedSettings.declareF32("FlycamAxisScale2", 1, "Flycam axis 2 scaler.");
+ gSavedSettings.declareF32("FlycamAxisScale3", 1, "Flycam axis 3 scaler.");
+ gSavedSettings.declareF32("FlycamAxisScale4", 1, "Flycam axis 4 scaler.");
+ gSavedSettings.declareF32("FlycamAxisScale5", 1, "Flycam axis 5 scaler.");
+ gSavedSettings.declareF32("FlycamAxisScale6", 1, "Flycam axis 6 scaler.");
+
+ gSavedSettings.declareF32("FlycamAxisDeadZone0", 0.1f, "Flycam axis 0 dead zone.");
+ gSavedSettings.declareF32("FlycamAxisDeadZone1", 0.1f, "Flycam axis 1 dead zone.");
+ gSavedSettings.declareF32("FlycamAxisDeadZone2", 0.1f, "Flycam axis 2 dead zone.");
+ gSavedSettings.declareF32("FlycamAxisDeadZone3", 0.1f, "Flycam axis 3 dead zone.");
+ gSavedSettings.declareF32("FlycamAxisDeadZone4", 0.1f, "Flycam axis 4 dead zone.");
+ gSavedSettings.declareF32("FlycamAxisDeadZone5", 0.1f, "Flycam axis 5 dead zone.");
+ gSavedSettings.declareF32("FlycamAxisDeadZone6", 0.1f, "Flycam axis 6 dead zone.");
+
+ gSavedSettings.declareF32("FlycamFeathering", 16.f, "Flycam feathering (less is softer)");
+ gSavedSettings.declareBOOL("FlycamAutoLeveling", TRUE, "Keep Flycam level.");
+ gSavedSettings.declareBOOL("FlycamAbsolute", FALSE, "Treat Flycam values as absolute positions (not deltas).");
+ gSavedSettings.declareBOOL("FlycamZoomDirect", FALSE, "Map flycam zoom axis directly to camera zoom.");
+
//
// crash_settings.xml
//
@@ -1243,14 +1303,10 @@ void declare_settings()
"(0 = ask before sending crash report, 1 = always send crash report, 2 = never send crash report)");
}
-void settings_version_fixup()
+void fixup_settings()
{
#if LL_RELEASE_FOR_DOWNLOAD
- if (gCurrentVersion == "1.13.3" || gCurrentVersion == "1.13.4")
- {
- // In case these were set to true in an early 'First Look' version:
- gSavedSettings.setBOOL("RenderDynamicReflections", FALSE);
- gSavedSettings.setBOOL("ImagePipelineUseHTTP", FALSE);
- }
+ // Force some settings on startup
+ gSavedSettings.setBOOL("AnimateTextures", TRUE); // Force AnimateTextures to always be on
#endif
}
diff --git a/linden/indra/newview/llcountdown.cpp b/linden/indra/newview/llcountdown.cpp
index de54c61..42dc440 100644
--- a/linden/indra/newview/llcountdown.cpp
+++ b/linden/indra/newview/llcountdown.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llcountdown.h b/linden/indra/newview/llcountdown.h
index 9daebb0..06f6167 100644
--- a/linden/indra/newview/llcountdown.h
+++ b/linden/indra/newview/llcountdown.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llcubemap.cpp b/linden/indra/newview/llcubemap.cpp
index 415b849..74af3da 100644
--- a/linden/indra/newview/llcubemap.cpp
+++ b/linden/indra/newview/llcubemap.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -166,6 +167,11 @@ void LLCubeMap::init(const std::vector >& rawimages)
}
}
+GLuint LLCubeMap::getGLName()
+{
+ return mImages[0]->getTexName();
+}
+
void LLCubeMap::bind()
{
if (gGLManager.mHasCubeMap)
@@ -206,7 +212,7 @@ void LLCubeMap::disable()
if (gGLManager.mHasCubeMap && mTextureStage >= 0)
{
glActiveTextureARB(GL_TEXTURE0_ARB + mTextureStage);
-
+ glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, 0);
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glDisable(GL_TEXTURE_GEN_R);
@@ -219,13 +225,9 @@ void LLCubeMap::setMatrix(S32 stage)
mMatrixStage = stage;
glActiveTextureARB(GL_TEXTURE0_ARB+stage);
- F32 mat[16];
-
- glGetFloatv(GL_MODELVIEW_MATRIX, mat);
-
- LLVector3 x(mat);
- LLVector3 y(mat+4);
- LLVector3 z(mat+8);
+ LLVector3 x(LLVector3d(gGLModelView+0));
+ LLVector3 y(LLVector3d(gGLModelView+4));
+ LLVector3 z(LLVector3d(gGLModelView+8));
LLMatrix3 mat3;
mat3.setRows(x,y,z);
diff --git a/linden/indra/newview/llcubemap.h b/linden/indra/newview/llcubemap.h
index 7be6706..d75d6e7 100644
--- a/linden/indra/newview/llcubemap.h
+++ b/linden/indra/newview/llcubemap.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -54,6 +55,8 @@ public:
void finishPaint();
+ GLuint getGLName();
+
LLVector3 map(U8 side, U16 v_val, U16 h_val) const;
BOOL project(F32& v_val, F32& h_val, BOOL& outside,
U8 side, const LLVector3& dir) const;
diff --git a/linden/indra/newview/llcurrencyuimanager.cpp b/linden/indra/newview/llcurrencyuimanager.cpp
index 615d9fb..0469d5f 100644
--- a/linden/indra/newview/llcurrencyuimanager.cpp
+++ b/linden/indra/newview/llcurrencyuimanager.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llcurrencyuimanager.h b/linden/indra/newview/llcurrencyuimanager.h
index 39211ab..25e8334 100644
--- a/linden/indra/newview/llcurrencyuimanager.h
+++ b/linden/indra/newview/llcurrencyuimanager.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llcylinder.cpp b/linden/indra/newview/llcylinder.cpp
index 9f76648..e7bb75a 100644
--- a/linden/indra/newview/llcylinder.cpp
+++ b/linden/indra/newview/llcylinder.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llcylinder.h b/linden/indra/newview/llcylinder.h
index fbd1298..ff44128 100644
--- a/linden/indra/newview/llcylinder.h
+++ b/linden/indra/newview/llcylinder.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lldebugmessagebox.cpp b/linden/indra/newview/lldebugmessagebox.cpp
index e6c1bf1..af500da 100644
--- a/linden/indra/newview/lldebugmessagebox.cpp
+++ b/linden/indra/newview/lldebugmessagebox.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -210,14 +211,14 @@ void LLDebugVarMessageBox::draw()
switch(mVarType)
{
case VAR_TYPE_F32:
- snprintf(text, sizeof(text), "%.3f", *((F32*)mVarData)); /*Flawfinder: ignore*/
+ snprintf(text, sizeof(text), "%.3f", *((F32*)mVarData)); /* Flawfinder: ignore */
break;
case VAR_TYPE_S32:
- snprintf(text, sizeof(text), "%d", *((S32*)mVarData)); /*Flawfinder: ignore*/
+ snprintf(text, sizeof(text), "%d", *((S32*)mVarData)); /* Flawfinder: ignore */
break;
case VAR_TYPE_VEC3:
LLVector3* vec_p = (LLVector3*)mVarData;
- snprintf(text, sizeof(text), "%.3f %.3f %.3f", vec_p->mV[VX], vec_p->mV[VY], vec_p->mV[VZ]); /*Flawfinder: ignore*/
+ snprintf(text, sizeof(text), "%.3f %.3f %.3f", vec_p->mV[VX], vec_p->mV[VY], vec_p->mV[VZ]); /* Flawfinder: ignore */
break;
}
mText->setText(text);
diff --git a/linden/indra/newview/lldebugmessagebox.h b/linden/indra/newview/lldebugmessagebox.h
index 5537670..6eb34d2 100644
--- a/linden/indra/newview/lldebugmessagebox.h
+++ b/linden/indra/newview/lldebugmessagebox.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lldebugview.cpp b/linden/indra/newview/lldebugview.cpp
index 871afb7..dc179cc 100644
--- a/linden/indra/newview/lldebugview.cpp
+++ b/linden/indra/newview/lldebugview.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lldebugview.h b/linden/indra/newview/lldebugview.h
index b7e368b..b82fc10 100644
--- a/linden/indra/newview/lldebugview.h
+++ b/linden/indra/newview/lldebugview.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lldirpicker.cpp b/linden/indra/newview/lldirpicker.cpp
index 75f8056..fba3782 100644
--- a/linden/indra/newview/lldirpicker.cpp
+++ b/linden/indra/newview/lldirpicker.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lldirpicker.h b/linden/indra/newview/lldirpicker.h
index 71a65fd..1b9664f 100644
--- a/linden/indra/newview/lldirpicker.h
+++ b/linden/indra/newview/lldirpicker.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lldrawable.cpp b/linden/indra/newview/lldrawable.cpp
index 4d9083e..a39416c 100644
--- a/linden/indra/newview/lldrawable.cpp
+++ b/linden/indra/newview/lldrawable.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -101,7 +102,6 @@ void LLDrawable::init()
mVObjp = NULL;
// mFaces
mSpatialGroupp = NULL;
- mSpatialGroupOffset = -1;
mVisible = 0;
mRadius = 0.f;
mSunShadowFactor = 1.f;
@@ -273,7 +273,8 @@ LLFace* LLDrawable::addFace(LLFacePool *poolp, LLViewerImage *texturep)
LLMemType mt(LLMemType::MTYPE_DRAWABLE);
LLFace *face = new LLFace(this, mVObjp);
-
+ if (!face) llerrs << "Allocating new Face: " << mFaces.size() << llendl;
+
if (face)
{
mFaces.push_back(face);
@@ -1044,18 +1045,13 @@ void LLDrawable::updateUVMinMax()
{
}
-void LLDrawable::setSpatialGroup(LLSpatialGroup *groupp, const S32 offset)
+void LLDrawable::setSpatialGroup(LLSpatialGroup *groupp)
{
- mSpatialGroupp = groupp;
-
- if (mSpatialGroupp)
+ if (mSpatialGroupp && (groupp != mSpatialGroupp))
{
- mSpatialGroupOffset = offset;
+ mSpatialGroupp->setState(LLSpatialGroup::GEOM_DIRTY);
}
- else
- {
- mSpatialGroupOffset = -1;
- }
+ mSpatialGroupp = groupp;
}
LLSpatialPartition* LLDrawable::getSpatialPartition()
@@ -1429,13 +1425,13 @@ void LLSpatialBridge::cleanupReferences()
LLDrawable::cleanupReferences();
if (mDrawable)
{
- mDrawable->setSpatialGroup(NULL, -1);
+ mDrawable->setSpatialGroup(NULL);
for (U32 i = 0; i < mDrawable->getChildCount(); i++)
{
LLDrawable* drawable = mDrawable->getChild(i);
- if (drawable && drawable->getVOVolume())
+ if (drawable)
{
- drawable->setSpatialGroup(NULL, -1);
+ drawable->setSpatialGroup(NULL);
}
}
diff --git a/linden/indra/newview/lldrawable.h b/linden/indra/newview/lldrawable.h
index 6ff4d1e..3bb5525 100644
--- a/linden/indra/newview/lldrawable.h
+++ b/linden/indra/newview/lldrawable.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -189,7 +190,7 @@ public:
// Debugging methods
S32 findReferences(LLDrawable *drawablep); // Not const because of @#$! iterators...
- void setSpatialGroup(LLSpatialGroup *groupp, const S32 offset);
+ void setSpatialGroup(LLSpatialGroup *groupp);
LLSpatialGroup *getSpatialGroup() const { return mSpatialGroupp; }
LLSpatialPartition* getSpatialPartition();
@@ -306,7 +307,6 @@ protected:
face_list_t mFaces;
LLSpatialGroup* mSpatialGroupp;
LLPointer mSpatialBridge;
- S32 mSpatialGroupOffset;
mutable U32 mVisible;
F32 mRadius;
diff --git a/linden/indra/newview/lldrawpool.cpp b/linden/indra/newview/lldrawpool.cpp
index dc2e6ba..4a1794e 100644
--- a/linden/indra/newview/lldrawpool.cpp
+++ b/linden/indra/newview/lldrawpool.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -62,6 +63,9 @@ LLDrawPool *LLDrawPool::createPool(const U32 type, LLViewerImage *tex0)
case POOL_SIMPLE:
poolp = new LLDrawPoolSimple();
break;
+ case POOL_GLOW:
+ poolp = new LLDrawPoolGlow();
+ break;
case POOL_ALPHA:
poolp = new LLDrawPoolAlpha();
break;
diff --git a/linden/indra/newview/lldrawpool.h b/linden/indra/newview/lldrawpool.h
index 6cd5f8e..ecedc4c 100644
--- a/linden/indra/newview/lldrawpool.h
+++ b/linden/indra/newview/lldrawpool.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -57,6 +58,7 @@ public:
POOL_BUMP,
POOL_AVATAR,
POOL_TREE,
+ POOL_GLOW,
POOL_ALPHA,
POOL_WATER,
POOL_ALPHA_POST_WATER,
@@ -105,8 +107,8 @@ public:
enum
{
PASS_SIMPLE = NUM_POOL_TYPES,
- PASS_FULLBRIGHT,
PASS_GLOW,
+ PASS_FULLBRIGHT,
PASS_INVISIBLE,
PASS_SHINY,
PASS_BUMP,
diff --git a/linden/indra/newview/lldrawpoolalpha.cpp b/linden/indra/newview/lldrawpoolalpha.cpp
index b50be95..8866c1e 100644
--- a/linden/indra/newview/lldrawpoolalpha.cpp
+++ b/linden/indra/newview/lldrawpoolalpha.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -45,6 +46,7 @@
#include "llviewerwindow.h"
#include "pipeline.h"
#include "llviewerregion.h"
+#include "llglslshader.h"
BOOL LLDrawPoolAlpha::sShowDebugAlpha = FALSE;
@@ -66,7 +68,7 @@ LLDrawPoolAlpha::~LLDrawPoolAlpha()
void LLDrawPoolAlpha::prerender()
{
- mVertexShaderLevel = gPipeline.getVertexShaderLevel(LLPipeline::SHADER_OBJECT);
+ mVertexShaderLevel = LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_OBJECT);
}
void LLDrawPoolAlpha::beginRenderPass(S32 pass)
@@ -290,12 +292,20 @@ void LLDrawPoolAlpha::renderGroupAlpha(LLSpatialGroup* group, U32 type, U32 mask
{
gPipeline.enableLightsFullbright(LLColor4(1,1,1,1));
light_enabled = FALSE;
+ if (LLPipeline::sRenderGlow)
+ {
+ glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ }
}
}
else if (!light_enabled)
{
gPipeline.enableLightsDynamic(1.f);
light_enabled = TRUE;
+ if (LLPipeline::sRenderGlow)
+ {
+ glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
+ }
}
/*if (params.mParticle)
@@ -328,6 +338,11 @@ void LLDrawPoolAlpha::renderGroupAlpha(LLSpatialGroup* group, U32 type, U32 mask
if (!light_enabled)
{
gPipeline.enableLightsDynamic(1.f);
+
+ if (LLPipeline::sRenderGlow)
+ {
+ glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
+ }
}
/*glPointSize(1.f);
diff --git a/linden/indra/newview/lldrawpoolalpha.h b/linden/indra/newview/lldrawpoolalpha.h
index f7012d6..12a3242 100644
--- a/linden/indra/newview/lldrawpoolalpha.h
+++ b/linden/indra/newview/lldrawpoolalpha.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lldrawpoolavatar.cpp b/linden/indra/newview/lldrawpoolavatar.cpp
index fc4f64b..debcfe2 100644
--- a/linden/indra/newview/lldrawpoolavatar.cpp
+++ b/linden/indra/newview/lldrawpoolavatar.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -40,6 +41,7 @@
#include "llviewerregion.h"
#include "noise.h"
#include "pipeline.h"
+#include "llglslshader.h"
static U32 sDataMask = LLDrawPoolAvatar::VERTEX_DATA_MASK;
static U32 sBufferUsage = GL_STREAM_DRAW_ARB;
@@ -97,16 +99,15 @@ LLDrawPool *LLDrawPoolAvatar::instancePool()
}
BOOL gRenderAvatar = TRUE;
-static LLMatrix4 sModelViewMatrix = LLMatrix4();
S32 LLDrawPoolAvatar::getVertexShaderLevel() const
{
- return (S32) gPipeline.getVertexShaderLevel(LLPipeline::SHADER_AVATAR);
+ return (S32) LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_AVATAR);
}
void LLDrawPoolAvatar::prerender()
{
- mVertexShaderLevel = gPipeline.getVertexShaderLevel(LLPipeline::SHADER_AVATAR);
+ mVertexShaderLevel = LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_AVATAR);
sShaderLevel = mVertexShaderLevel;
if (sShaderLevel > 0)
@@ -121,7 +122,14 @@ void LLDrawPoolAvatar::prerender()
LLMatrix4& LLDrawPoolAvatar::getModelView()
{
- return sModelViewMatrix;
+ static LLMatrix4 ret;
+
+ ret.initRows(LLVector4(gGLModelView+0),
+ LLVector4(gGLModelView+4),
+ LLVector4(gGLModelView+8),
+ LLVector4(gGLModelView+12));
+
+ return ret;
}
//-----------------------------------------------------------------------------
@@ -150,7 +158,6 @@ void LLDrawPoolAvatar::beginRenderPass(S32 pass)
beginFootShadow();
break;
case 1:
- glGetFloatv(GL_MODELVIEW_MATRIX, (F32*) sModelViewMatrix.mMatrix);
beginRigid();
break;
case 2:
@@ -190,15 +197,15 @@ void LLDrawPoolAvatar::endFootShadow()
void LLDrawPoolAvatar::beginRigid()
{
- sVertexProgram = &gPipeline.mAvatarEyeballProgram;
+ sVertexProgram = &gAvatarEyeballProgram;
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
if (sShaderLevel > 0)
{ //eyeballs render with the specular shader
- gPipeline.mAvatarEyeballProgram.bind();
- gPipeline.mMaterialIndex = gPipeline.mAvatarEyeballProgram.mAttribute[LLPipeline::GLSL_MATERIAL_COLOR];
- gPipeline.mSpecularIndex = gPipeline.mAvatarEyeballProgram.mAttribute[LLPipeline::GLSL_SPECULAR_COLOR];
+ gAvatarEyeballProgram.bind();
+ gMaterialIndex = gAvatarEyeballProgram.mAttribute[LLShaderMgr::MATERIAL_COLOR];
+ gSpecularIndex = gAvatarEyeballProgram.mAttribute[LLShaderMgr::SPECULAR_COLOR];
}
}
@@ -213,7 +220,7 @@ void LLDrawPoolAvatar::beginSkinned()
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
- sVertexProgram = &gPipeline.mAvatarProgram;
+ sVertexProgram = &gAvatarProgram;
if (sShaderLevel > 0) // for hardware blending
{
@@ -221,22 +228,22 @@ void LLDrawPoolAvatar::beginSkinned()
glClientActiveTextureARB(GL_TEXTURE1_ARB);
if (sShaderLevel >= SHADER_LEVEL_BUMP)
{
- gPipeline.mMaterialIndex = sVertexProgram->mAttribute[LLPipeline::GLSL_MATERIAL_COLOR];
- gPipeline.mSpecularIndex = sVertexProgram->mAttribute[LLPipeline::GLSL_SPECULAR_COLOR];
+ gMaterialIndex = sVertexProgram->mAttribute[LLShaderMgr::MATERIAL_COLOR];
+ gSpecularIndex = sVertexProgram->mAttribute[LLShaderMgr::SPECULAR_COLOR];
}
sVertexProgram->bind();
if (sShaderLevel >= SHADER_LEVEL_CLOTH)
{
- enable_cloth_weights(sVertexProgram->mAttribute[LLPipeline::GLSL_AVATAR_CLOTHING]);
+ enable_cloth_weights(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_CLOTHING]);
}
- enable_vertex_weighting(sVertexProgram->mAttribute[LLPipeline::GLSL_AVATAR_WEIGHT]);
+ enable_vertex_weighting(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT]);
if (sShaderLevel >= SHADER_LEVEL_BUMP)
{
- enable_binormals(sVertexProgram->mAttribute[LLPipeline::GLSL_BINORMAL]);
+ enable_binormals(sVertexProgram->mAttribute[LLShaderMgr::BINORMAL]);
}
- sVertexProgram->enableTexture(LLPipeline::GLSL_BUMP_MAP);
+ sVertexProgram->enableTexture(LLShaderMgr::BUMP_MAP);
glActiveTextureARB(GL_TEXTURE0_ARB);
}
}
@@ -247,17 +254,17 @@ void LLDrawPoolAvatar::endSkinned()
if (sShaderLevel > 0)
{
sRenderingSkinned = FALSE;
- sVertexProgram->disableTexture(LLPipeline::GLSL_BUMP_MAP);
+ sVertexProgram->disableTexture(LLShaderMgr::BUMP_MAP);
glActiveTextureARB(GL_TEXTURE0_ARB);
glClientActiveTextureARB(GL_TEXTURE0_ARB);
- disable_vertex_weighting(sVertexProgram->mAttribute[LLPipeline::GLSL_AVATAR_WEIGHT]);
+ disable_vertex_weighting(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT]);
if (sShaderLevel >= SHADER_LEVEL_BUMP)
{
- disable_binormals(sVertexProgram->mAttribute[LLPipeline::GLSL_BINORMAL]);
+ disable_binormals(sVertexProgram->mAttribute[LLShaderMgr::BINORMAL]);
}
if ((sShaderLevel >= SHADER_LEVEL_CLOTH))
{
- disable_cloth_weights(sVertexProgram->mAttribute[LLPipeline::GLSL_AVATAR_CLOTHING]);
+ disable_cloth_weights(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_CLOTHING]);
}
sVertexProgram->unbind();
@@ -373,7 +380,7 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
if (sShaderLevel > 0)
{
- gPipeline.mAvatarMatrixParam = sVertexProgram->mUniform[LLPipeline::GLSL_AVATAR_MATRIX];
+ gAvatarMatrixParam = sVertexProgram->mUniform[LLShaderMgr::AVATAR_MATRIX];
}
if ((sShaderLevel >= SHADER_LEVEL_CLOTH))
@@ -389,16 +396,16 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
wind = wind * rot_mat;
wind.mV[VW] = avatarp->mWindVec.mV[VW];
- sVertexProgram->vertexAttrib4fv(LLPipeline::GLSL_AVATAR_WIND, wind.mV);
+ sVertexProgram->vertexAttrib4fv(LLShaderMgr::AVATAR_WIND, wind.mV);
F32 phase = -1.f * (avatarp->mRipplePhase);
F32 freq = 7.f + (noise1(avatarp->mRipplePhase) * 2.f);
LLVector4 sin_params(freq, freq, freq, phase);
- sVertexProgram->vertexAttrib4fv(LLPipeline::GLSL_AVATAR_SINWAVE, sin_params.mV);
+ sVertexProgram->vertexAttrib4fv(LLShaderMgr::AVATAR_SINWAVE, sin_params.mV);
LLVector4 gravity(0.f, 0.f, -CLOTHING_GRAVITY_EFFECT, 0.f);
gravity = gravity * rot_mat;
- sVertexProgram->vertexAttrib4fv(LLPipeline::GLSL_AVATAR_GRAVITY, gravity.mV);
+ sVertexProgram->vertexAttrib4fv(LLShaderMgr::AVATAR_GRAVITY, gravity.mV);
}
if( !single_avatar || (avatarp == single_avatar) )
@@ -525,11 +532,10 @@ void LLDrawPoolAvatar::renderForSelect()
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
- glGetFloatv(GL_MODELVIEW_MATRIX, (F32*) sModelViewMatrix.mMatrix);
- sVertexProgram = &gPipeline.mAvatarPickProgram;
+ sVertexProgram = &gAvatarPickProgram;
if (sShaderLevel > 0)
{
- gPipeline.mAvatarMatrixParam = sVertexProgram->mUniform[LLPipeline::GLSL_AVATAR_MATRIX];
+ gAvatarMatrixParam = sVertexProgram->mUniform[LLShaderMgr::AVATAR_MATRIX];
}
glAlphaFunc(GL_GEQUAL, 0.2f);
glBlendFunc(GL_ONE, GL_ZERO);
@@ -546,7 +552,7 @@ void LLDrawPoolAvatar::renderForSelect()
glClientActiveTextureARB(GL_TEXTURE0_ARB);
sRenderingSkinned = TRUE;
sVertexProgram->bind();
- enable_vertex_weighting(sVertexProgram->mAttribute[LLPipeline::GLSL_AVATAR_WEIGHT]);
+ enable_vertex_weighting(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT]);
}
mIndicesDrawn += avatarp->renderSkinned(AVATAR_RENDER_PASS_SINGLE);
@@ -556,7 +562,7 @@ void LLDrawPoolAvatar::renderForSelect()
{
sRenderingSkinned = FALSE;
sVertexProgram->unbind();
- disable_vertex_weighting(sVertexProgram->mAttribute[LLPipeline::GLSL_AVATAR_WEIGHT]);
+ disable_vertex_weighting(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT]);
}
glAlphaFunc(GL_GREATER, 0.01f);
@@ -596,7 +602,7 @@ LLColor3 LLDrawPoolAvatar::getDebugColor() const
LLVertexBufferAvatar::LLVertexBufferAvatar()
: LLVertexBuffer(sDataMask,
- gPipeline.getVertexShaderLevel(LLPipeline::SHADER_AVATAR) > 0 ?
+ LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_AVATAR) > 0 ?
GL_STATIC_DRAW_ARB :
GL_STREAM_DRAW_ARB)
{
@@ -618,16 +624,16 @@ void LLVertexBufferAvatar::setupVertexBuffer(U32 data_mask) const
glClientActiveTextureARB(GL_TEXTURE0_ARB);
glTexCoordPointer(2,GL_FLOAT, mStride, (void*)(base + mOffsets[TYPE_TEXCOORD]));
- set_vertex_weights(sVertexProgram->mAttribute[LLPipeline::GLSL_AVATAR_WEIGHT], mStride, (F32*)(base + mOffsets[TYPE_WEIGHT]));
+ set_vertex_weights(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT], mStride, (F32*)(base + mOffsets[TYPE_WEIGHT]));
if (sShaderLevel >= LLDrawPoolAvatar::SHADER_LEVEL_BUMP)
{
- set_binormals(sVertexProgram->mAttribute[LLPipeline::GLSL_BINORMAL], mStride, (LLVector3*)(base + mOffsets[TYPE_BINORMAL]));
+ set_binormals(sVertexProgram->mAttribute[LLShaderMgr::BINORMAL], mStride, (LLVector3*)(base + mOffsets[TYPE_BINORMAL]));
}
if (sShaderLevel >= LLDrawPoolAvatar::SHADER_LEVEL_CLOTH)
{
- set_vertex_clothing_weights(sVertexProgram->mAttribute[LLPipeline::GLSL_AVATAR_CLOTHING], mStride, (LLVector4*)(base + mOffsets[TYPE_CLOTHWEIGHT]));
+ set_vertex_clothing_weights(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_CLOTHING], mStride, (LLVector4*)(base + mOffsets[TYPE_CLOTHWEIGHT]));
}
}
else
diff --git a/linden/indra/newview/lldrawpoolavatar.h b/linden/indra/newview/lldrawpoolavatar.h
index 32c02b5..59bc797 100644
--- a/linden/indra/newview/lldrawpoolavatar.h
+++ b/linden/indra/newview/lldrawpoolavatar.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lldrawpoolbump.cpp b/linden/indra/newview/lldrawpoolbump.cpp
index 916454c..b0b8b02 100644
--- a/linden/indra/newview/lldrawpoolbump.cpp
+++ b/linden/indra/newview/lldrawpoolbump.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -35,6 +36,7 @@
#include "llimagegl.h"
#include "m3math.h"
#include "m4math.h"
+#include "v4math.h"
#include "llagent.h"
#include "llcubemap.h"
@@ -46,7 +48,7 @@
#include "llviewercamera.h"
#include "llviewerimagelist.h"
#include "pipeline.h"
-
+#include "llglslshader.h"
//#include "llimagebmp.h"
//#include "../tools/imdebug/imdebug.h"
@@ -160,7 +162,7 @@ LLDrawPoolBump::LLDrawPoolBump()
void LLDrawPoolBump::prerender()
{
- mVertexShaderLevel = gPipeline.getVertexShaderLevel(LLPipeline::SHADER_OBJECT);
+ mVertexShaderLevel = LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_OBJECT);
}
// static
@@ -201,6 +203,11 @@ void LLDrawPoolBump::render(S32 pass)
{
LLFastTimer t(LLFastTimer::FTM_RENDER_BUMP);
+ if (!gPipeline.hasRenderType(LLDrawPool::POOL_SIMPLE))
+ {
+ return;
+ }
+
switch( pass )
{
case 0:
@@ -253,14 +260,17 @@ void LLDrawPoolBump::beginShiny()
cube_map->setMatrix(0);
cube_map->bind();
- if (gPipeline.getVertexShaderLevel(LLPipeline::SHADER_OBJECT) > 0)
+ if (LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_OBJECT) > 0)
{
LLMatrix4 mat;
- glGetFloatv(GL_MODELVIEW_MATRIX, (F32*) mat.mMatrix);
- gPipeline.mObjectShinyProgram.bind();
- LLVector3 vec = LLVector3(gPipeline.mShinyOrigin) * mat;
- LLVector4 vec4(vec, gPipeline.mShinyOrigin.mV[3]);
- glUniform4fvARB(gPipeline.mObjectShinyProgram.mUniform[LLPipeline::GLSL_SHINY_ORIGIN], 1,
+ mat.initRows(LLVector4(gGLModelView+0),
+ LLVector4(gGLModelView+4),
+ LLVector4(gGLModelView+8),
+ LLVector4(gGLModelView+12));
+ gObjectShinyProgram.bind();
+ LLVector3 vec = LLVector3(gShinyOrigin) * mat;
+ LLVector4 vec4(vec, gShinyOrigin.mV[3]);
+ glUniform4fvARB(gObjectShinyProgram.mUniform[LLShaderMgr::SHINY_ORIGIN], 1,
vec4.mV);
}
else
@@ -380,9 +390,9 @@ void LLDrawPoolBump::endShiny()
cube_map->disable();
cube_map->restoreMatrix();
- if (gPipeline.getVertexShaderLevel(LLPipeline::SHADER_OBJECT) > 0)
+ if (LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_OBJECT) > 0)
{
- gPipeline.mObjectShinyProgram.unbind();
+ gObjectShinyProgram.unbind();
}
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
diff --git a/linden/indra/newview/lldrawpoolbump.h b/linden/indra/newview/lldrawpoolbump.h
index bb8de40..c41325c 100644
--- a/linden/indra/newview/lldrawpoolbump.h
+++ b/linden/indra/newview/lldrawpoolbump.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -46,7 +47,7 @@ public:
LLDrawPoolBump();
- /*virtual*/ void render(S32 pass = 0);
+ virtual void render(S32 pass = 0);
/*virtual*/ void beginRenderPass( S32 pass );
/*virtual*/ void endRenderPass( S32 pass );
/*virtual*/ S32 getNumPasses();
diff --git a/linden/indra/newview/lldrawpoolclouds.cpp b/linden/indra/newview/lldrawpoolclouds.cpp
index 83ef2b3..9598f3b 100644
--- a/linden/indra/newview/lldrawpoolclouds.cpp
+++ b/linden/indra/newview/lldrawpoolclouds.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lldrawpoolclouds.h b/linden/indra/newview/lldrawpoolclouds.h
index 795b0a6..00faea3 100644
--- a/linden/indra/newview/lldrawpoolclouds.h
+++ b/linden/indra/newview/lldrawpoolclouds.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lldrawpoolground.cpp b/linden/indra/newview/lldrawpoolground.cpp
index bc66757..d0557d4 100644
--- a/linden/indra/newview/lldrawpoolground.cpp
+++ b/linden/indra/newview/lldrawpoolground.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -40,6 +41,7 @@
#include "pipeline.h"
#include "llagent.h"
#include "llviewerregion.h"
+#include "llglslshader.h"
LLDrawPoolGround::LLDrawPoolGround() :
LLFacePool(POOL_GROUND)
@@ -53,7 +55,7 @@ LLDrawPool *LLDrawPoolGround::instancePool()
void LLDrawPoolGround::prerender()
{
- mVertexShaderLevel = gPipeline.getVertexShaderLevel(LLPipeline::SHADER_ENVIRONMENT);
+ mVertexShaderLevel = LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_ENVIRONMENT);
}
void LLDrawPoolGround::render(S32 pass)
diff --git a/linden/indra/newview/lldrawpoolground.h b/linden/indra/newview/lldrawpoolground.h
index 6bf358e..97938d8 100644
--- a/linden/indra/newview/lldrawpoolground.h
+++ b/linden/indra/newview/lldrawpoolground.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lldrawpoolsimple.cpp b/linden/indra/newview/lldrawpoolsimple.cpp
index ec8929e..3af8bc2 100644
--- a/linden/indra/newview/lldrawpoolsimple.cpp
+++ b/linden/indra/newview/lldrawpoolsimple.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -28,43 +29,92 @@
#include "llviewerprecompiledheaders.h"
#include "lldrawpoolsimple.h"
+#include "lldrawpoolbump.h"
+#include "llviewercamera.h"
#include "llagent.h"
#include "lldrawable.h"
#include "llface.h"
#include "llsky.h"
#include "pipeline.h"
+#include "llglslshader.h"
-class LLRenderPassGlow : public LLRenderPass
+class LLRenderShinyGlow : public LLDrawPoolBump
{
public:
- LLRenderPassGlow(): LLRenderPass(LLRenderPass::PASS_GLOW) { }
+ LLRenderShinyGlow() { }
- enum
+ void render(S32 pass = 0)
{
- VERTEX_DATA_MASK = LLVertexBuffer::MAP_VERTEX |
- LLVertexBuffer::MAP_TEXCOORD
- };
-
- virtual U32 getVertexDataMask() { return VERTEX_DATA_MASK; }
+ LLCubeMap* cube_map = gSky.mVOSkyp->getCubeMap();
+ if( cube_map )
+ {
+ cube_map->enable(0);
+ cube_map->setMatrix(0);
+ cube_map->bind();
+ glEnableClientState(GL_NORMAL_ARRAY);
+
+ glColor4f(1,1,1,1);
+
+ U32 mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL;
+ renderStatic(LLRenderPass::PASS_SHINY, mask);
+ renderActive(LLRenderPass::PASS_SHINY, mask);
+
+ glDisableClientState(GL_NORMAL_ARRAY);
+ cube_map->disable();
+ cube_map->restoreMatrix();
+ }
+ }
+};
- virtual void prerender() { }
+void LLDrawPoolGlow::render(S32 pass)
+{
+ LLGLEnable blend(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE);
+ gPipeline.enableLightsFullbright(LLColor4(1,1,1,1));
+ glEnableClientState(GL_TEXTURE_COORD_ARRAY);
+ glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ renderTexture(LLRenderPass::PASS_GLOW, getVertexDataMask());
+ renderActive(LLRenderPass::PASS_GLOW, getVertexDataMask());
- void render(S32 pass = 0)
+ if (gSky.mVOSkyp)
{
- LLGLEnable blend(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE);
- renderTexture(LLRenderPass::PASS_GLOW, getVertexDataMask());
- renderActive(LLRenderPass::PASS_GLOW, getVertexDataMask());
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glPushMatrix();
+ LLVector3 origin = gCamera->getOrigin();
+ glTranslatef(origin.mV[0], origin.mV[1], origin.mV[2]);
+
+ LLFace* facep = gSky.mVOSkyp->mFace[LLVOSky::FACE_BLOOM];
+
+ if (facep)
+ {
+ LLGLDisable cull(GL_CULL_FACE);
+ facep->getTexture()->bind();
+ glColor4f(1,1,1,1);
+ facep->renderIndexed(getVertexDataMask());
+ }
+
+ glPopMatrix();
}
- void pushBatch(LLDrawInfo& params, U32 mask, BOOL texture = TRUE)
+ glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+
+ if (LLPipeline::sDynamicReflections)
{
- glColor4ubv(params.mGlowColor.mV);
- LLRenderPass::pushBatch(params, mask, texture);
+ LLRenderShinyGlow glow;
+ glow.render();
}
-};
+
+ glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
+}
+
+void LLDrawPoolGlow::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture)
+{
+ glColor4ubv(params.mGlowColor.mV);
+ LLRenderPass::pushBatch(params, mask, texture);
+}
+
LLDrawPoolSimple::LLDrawPoolSimple() :
LLRenderPass(POOL_SIMPLE)
@@ -73,7 +123,7 @@ LLDrawPoolSimple::LLDrawPoolSimple() :
void LLDrawPoolSimple::prerender()
{
- mVertexShaderLevel = gPipeline.getVertexShaderLevel(LLPipeline::SHADER_OBJECT);
+ mVertexShaderLevel = LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_OBJECT);
}
void LLDrawPoolSimple::beginRenderPass(S32 pass)
@@ -117,20 +167,14 @@ void LLDrawPoolSimple::render(S32 pass)
}
{
- LLFastTimer t(LLFastTimer::FTM_RENDER_GLOW);
- glDisableClientState(GL_COLOR_ARRAY);
- LLRenderPassGlow glow;
- glow.render();
- }
-
- {
LLFastTimer t(LLFastTimer::FTM_RENDER_INVISIBLE);
U32 invisi_mask = LLVertexBuffer::MAP_VERTEX;
+ glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
renderInvisible(invisi_mask);
renderActive(LLRenderPass::PASS_INVISIBLE, invisi_mask);
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
}
}
diff --git a/linden/indra/newview/lldrawpoolsimple.h b/linden/indra/newview/lldrawpoolsimple.h
index 85dcacf..a482b28 100644
--- a/linden/indra/newview/lldrawpoolsimple.h
+++ b/linden/indra/newview/lldrawpoolsimple.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -50,4 +51,24 @@ public:
};
+class LLDrawPoolGlow : public LLRenderPass
+{
+public:
+ LLDrawPoolGlow(): LLRenderPass(LLDrawPool::POOL_GLOW) { }
+
+ enum
+ {
+ VERTEX_DATA_MASK = LLVertexBuffer::MAP_VERTEX |
+ LLVertexBuffer::MAP_TEXCOORD
+ };
+
+ virtual U32 getVertexDataMask() { return VERTEX_DATA_MASK; }
+
+ virtual void prerender() { }
+
+ void render(S32 pass = 0);
+ void pushBatch(LLDrawInfo& params, U32 mask, BOOL texture = TRUE);
+
+};
+
#endif // LL_LLDRAWPOOLSIMPLE_H
diff --git a/linden/indra/newview/lldrawpoolsky.cpp b/linden/indra/newview/lldrawpoolsky.cpp
index 8266892..328b802 100644
--- a/linden/indra/newview/lldrawpoolsky.cpp
+++ b/linden/indra/newview/lldrawpoolsky.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -42,6 +43,7 @@
#include "llvosky.h"
#include "llworld.h" // To get water height
#include "pipeline.h"
+#include "llglslshader.h"
LLDrawPoolSky::LLDrawPoolSky() :
LLFacePool(POOL_SKY)
@@ -55,7 +57,7 @@ LLDrawPool *LLDrawPoolSky::instancePool()
void LLDrawPoolSky::prerender()
{
- mVertexShaderLevel = gPipeline.getVertexShaderLevel(LLPipeline::SHADER_ENVIRONMENT);
+ mVertexShaderLevel = LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_ENVIRONMENT);
}
void LLDrawPoolSky::render(S32 pass)
diff --git a/linden/indra/newview/lldrawpoolsky.h b/linden/indra/newview/lldrawpoolsky.h
index b9c1dda..2f11c67 100644
--- a/linden/indra/newview/lldrawpoolsky.h
+++ b/linden/indra/newview/lldrawpoolsky.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lldrawpoolstars.cpp b/linden/indra/newview/lldrawpoolstars.cpp
index 3d4eebb..d5d57e6 100644
--- a/linden/indra/newview/lldrawpoolstars.cpp
+++ b/linden/indra/newview/lldrawpoolstars.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -34,6 +35,7 @@
#include "llvostars.h"
#include "pipeline.h"
#include "llviewercamera.h"
+#include "llglslshader.h"
LLDrawPoolStars::LLDrawPoolStars() :
LLFacePool(POOL_STARS)
@@ -47,7 +49,7 @@ LLDrawPool *LLDrawPoolStars::instancePool()
void LLDrawPoolStars::prerender()
{
- mVertexShaderLevel = gPipeline.getVertexShaderLevel(LLPipeline::SHADER_ENVIRONMENT);
+ mVertexShaderLevel = LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_ENVIRONMENT);
}
void LLDrawPoolStars::render(S32 pass)
@@ -73,9 +75,7 @@ void LLDrawPoolStars::render(S32 pass)
gPipeline.disableLights();
- GLint viewport[4];
-
- glGetIntegerv(GL_VIEWPORT, viewport);
+ GLint* viewport = (GLint*) gGLViewport;
if (viewport[2] > 512 && viewport[3] > 512)
{
diff --git a/linden/indra/newview/lldrawpoolstars.h b/linden/indra/newview/lldrawpoolstars.h
index 1eade29..d4ddcf4 100644
--- a/linden/indra/newview/lldrawpoolstars.h
+++ b/linden/indra/newview/lldrawpoolstars.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lldrawpoolterrain.cpp b/linden/indra/newview/lldrawpoolterrain.cpp
index 8ac053c..7586b76 100644
--- a/linden/indra/newview/lldrawpoolterrain.cpp
+++ b/linden/indra/newview/lldrawpoolterrain.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -47,6 +48,7 @@
#include "llviewerimagelist.h" // To get alpha gradients
#include "llworld.h"
#include "pipeline.h"
+#include "llglslshader.h"
const F32 DETAIL_SCALE = 1.f/16.f;
int DebugDetailMap = 0;
@@ -168,10 +170,10 @@ void LLDrawPoolTerrain::render(S32 pass)
gPipeline.disableLights();
if ((mVertexShaderLevel > 0))
{
- gPipeline.mHighlightProgram.bind();
- gPipeline.mHighlightProgram.vertexAttrib4f(LLPipeline::GLSL_MATERIAL_COLOR,1,1,1,1);
+ gHighlightProgram.bind();
+ gHighlightProgram.vertexAttrib4f(LLShaderMgr::MATERIAL_COLOR,1,1,1,1);
renderOwnership();
- gPipeline.mTerrainProgram.bind();
+ gTerrainProgram.bind();
}
else
{
@@ -222,9 +224,9 @@ void LLDrawPoolTerrain::renderFull4TUShader()
// Stage 0: detail texture 0
//
- S32 detailTex0 = gPipeline.mTerrainProgram.enableTexture(LLPipeline::GLSL_TERRAIN_DETAIL0);
- S32 detailTex1 = gPipeline.mTerrainProgram.enableTexture(LLPipeline::GLSL_TERRAIN_DETAIL1);
- S32 rampTex = gPipeline.mTerrainProgram.enableTexture(LLPipeline::GLSL_TERRAIN_ALPHARAMP);
+ S32 detailTex0 = gTerrainProgram.enableTexture(LLShaderMgr::TERRAIN_DETAIL0);
+ S32 detailTex1 = gTerrainProgram.enableTexture(LLShaderMgr::TERRAIN_DETAIL1);
+ S32 rampTex = gTerrainProgram.enableTexture(LLShaderMgr::TERRAIN_ALPHARAMP);
LLViewerImage::bindTexture(detail_texture0p,detailTex0);
@@ -341,9 +343,9 @@ void LLDrawPoolTerrain::renderFull4TUShader()
}
// Disable multitexture
- gPipeline.mTerrainProgram.disableTexture(LLPipeline::GLSL_TERRAIN_ALPHARAMP);
- gPipeline.mTerrainProgram.disableTexture(LLPipeline::GLSL_TERRAIN_DETAIL0);
- gPipeline.mTerrainProgram.disableTexture(LLPipeline::GLSL_TERRAIN_DETAIL1);
+ gTerrainProgram.disableTexture(LLShaderMgr::TERRAIN_ALPHARAMP);
+ gTerrainProgram.disableTexture(LLShaderMgr::TERRAIN_DETAIL0);
+ gTerrainProgram.disableTexture(LLShaderMgr::TERRAIN_DETAIL1);
glClientActiveTextureARB(GL_TEXTURE3_ARB);
glActiveTextureARB(GL_TEXTURE3_ARB);
@@ -1080,5 +1082,5 @@ LLColor3 LLDrawPoolTerrain::getDebugColor() const
S32 LLDrawPoolTerrain::getMaterialAttribIndex()
{
- return gPipeline.mTerrainProgram.mAttribute[LLPipeline::GLSL_MATERIAL_COLOR];
+ return gTerrainProgram.mAttribute[LLShaderMgr::MATERIAL_COLOR];
}
diff --git a/linden/indra/newview/lldrawpoolterrain.h b/linden/indra/newview/lldrawpoolterrain.h
index 57fab9e..16fb4ab 100644
--- a/linden/indra/newview/lldrawpoolterrain.h
+++ b/linden/indra/newview/lldrawpoolterrain.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lldrawpooltree.cpp b/linden/indra/newview/lldrawpooltree.cpp
index 36a4393..2f380f8 100644
--- a/linden/indra/newview/lldrawpooltree.cpp
+++ b/linden/indra/newview/lldrawpooltree.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -36,6 +37,7 @@
#include "llvotree.h"
#include "pipeline.h"
#include "llviewercamera.h"
+#include "llglslshader.h"
S32 LLDrawPoolTree::sDiffTex = 0;
@@ -286,5 +288,5 @@ LLColor3 LLDrawPoolTree::getDebugColor() const
S32 LLDrawPoolTree::getMaterialAttribIndex()
{
- return gPipeline.mObjectSimpleProgram.mAttribute[LLPipeline::GLSL_MATERIAL_COLOR];
+ return gObjectSimpleProgram.mAttribute[LLShaderMgr::MATERIAL_COLOR];
}
diff --git a/linden/indra/newview/lldrawpooltree.h b/linden/indra/newview/lldrawpooltree.h
index 6e00460..82bc235 100644
--- a/linden/indra/newview/lldrawpooltree.h
+++ b/linden/indra/newview/lldrawpooltree.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lldrawpoolwater.cpp b/linden/indra/newview/lldrawpoolwater.cpp
index cd2a615..343f14c 100644
--- a/linden/indra/newview/lldrawpoolwater.cpp
+++ b/linden/indra/newview/lldrawpoolwater.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -47,21 +48,12 @@
#include "llworld.h"
#include "pipeline.h"
#include "viewer.h" // gSunTextureID, gMoonTextureID
+#include "llglslshader.h"
const LLUUID WATER_TEST("2bfd3884-7e27-69b9-ba3a-3e673f680004");
static float sTime;
-int nhpo2(int v)
-{
- int r = 1;
- while (r < v) {
- r *= 2;
- }
- return r;
-}
-
-static GLuint sScreenTex = 0;
BOOL LLDrawPoolWater::sSkipScreenCopy = FALSE;
LLDrawPoolWater::LLDrawPoolWater() :
@@ -88,30 +80,9 @@ LLDrawPoolWater::~LLDrawPoolWater()
//static
void LLDrawPoolWater::restoreGL()
{
- if (gPipeline.getVertexShaderLevel(LLPipeline::SHADER_ENVIRONMENT) >= SHADER_LEVEL_RIPPLE)
- {
- //build screen texture
- glClientActiveTextureARB(GL_TEXTURE0_ARB);
- glActiveTextureARB(GL_TEXTURE0_ARB);
- glGenTextures(1, &sScreenTex);
- LLGLEnable gl_texture_2d(GL_TEXTURE_2D);
- glBindTexture(GL_TEXTURE_2D, sScreenTex);
- GLint viewport[4];
- glGetIntegerv(GL_VIEWPORT, viewport);
- GLuint resX = nhpo2(viewport[2]);
- GLuint resY = nhpo2(viewport[3]);
-
- gImageList.updateMaxResidentTexMem(-1, resX*resY*3);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, resX, resY, 0, GL_RGB, GL_FLOAT, NULL);
-
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- }
+
}
-
LLDrawPool *LLDrawPoolWater::instancePool()
{
llerrs << "Should never be calling instancePool on a water pool!" << llendl;
@@ -121,12 +92,9 @@ LLDrawPool *LLDrawPoolWater::instancePool()
void LLDrawPoolWater::prerender()
{
-#if 1 // 1.9.1
mVertexShaderLevel = gSavedSettings.getBOOL("RenderRippleWater") ?
- gPipeline.getVertexShaderLevel(LLPipeline::SHADER_ENVIRONMENT) : 0;
-#else
- mVertexShaderLevel = gPipeline.getVertexShaderLevel(LLPipeline::SHADER_ENVIRONMENT);
-#endif
+ LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_ENVIRONMENT) : 0;
+
}
extern LLColor4U MAX_WATER_COLOR;
@@ -149,7 +117,7 @@ void LLDrawPoolWater::render(S32 pass)
std::sort(mDrawFace.begin(), mDrawFace.end(), LLFace::CompareDistanceGreater());
- LLGLSPipelineAlpha alphaState;
+ LLGLEnable blend(GL_BLEND);
if ((mVertexShaderLevel >= SHADER_LEVEL_RIPPLE))
{
@@ -343,7 +311,6 @@ void LLDrawPoolWater::render(S32 pass)
glDisableClientState(GL_NORMAL_ARRAY);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
-
}
@@ -370,7 +337,7 @@ void LLDrawPoolWater::renderShaderSimple()
glEnableClientState(GL_NORMAL_ARRAY);
// Set up second pass first
- S32 bumpTex = gPipeline.mWaterProgram.enableTexture(LLPipeline::GLSL_BUMP_MAP);
+ S32 bumpTex = gWaterProgram.enableTexture(LLShaderMgr::BUMP_MAP);
mWaterImagep->addTextureStats(1024.f*1024.f);
mWaterImagep->bind(bumpTex);
@@ -419,7 +386,7 @@ void LLDrawPoolWater::renderShaderSimple()
if (gSky.mVOSkyp->getCubeMap())
{
- envTex = gPipeline.mWaterProgram.enableTexture(LLPipeline::GLSL_ENVIRONMENT_MAP, GL_TEXTURE_CUBE_MAP_ARB);
+ envTex = gWaterProgram.enableTexture(LLShaderMgr::ENVIRONMENT_MAP, GL_TEXTURE_CUBE_MAP_ARB);
gSky.mVOSkyp->getCubeMap()->bind();
glMatrixMode(GL_TEXTURE);
@@ -433,9 +400,9 @@ void LLDrawPoolWater::renderShaderSimple()
glMatrixMode(GL_MODELVIEW);
}
- S32 diffTex = gPipeline.mWaterProgram.enableTexture(LLPipeline::GLSL_DIFFUSE_MAP);
+ S32 diffTex = gWaterProgram.enableTexture(LLShaderMgr::DIFFUSE_MAP);
- gPipeline.mWaterProgram.bind();
+ gWaterProgram.bind();
for (std::vector::iterator iter = mDrawFace.begin();
iter != mDrawFace.end(); iter++)
@@ -452,21 +419,21 @@ void LLDrawPoolWater::renderShaderSimple()
if (gSky.mVOSkyp->getCubeMap())
{
- gPipeline.mWaterProgram.disableTexture(LLPipeline::GLSL_ENVIRONMENT_MAP, GL_TEXTURE_CUBE_MAP_ARB);
+ gWaterProgram.disableTexture(LLShaderMgr::ENVIRONMENT_MAP, GL_TEXTURE_CUBE_MAP_ARB);
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
}
// Now, disable texture coord generation on texture state 1
- gPipeline.mWaterProgram.disableTexture(LLPipeline::GLSL_BUMP_MAP);
+ gWaterProgram.disableTexture(LLShaderMgr::BUMP_MAP);
LLImageGL::unbindTexture(bumpTex, GL_TEXTURE_2D);
glActiveTextureARB(GL_TEXTURE1_ARB);
glDisable(GL_TEXTURE_GEN_S); //texture unit 1
glDisable(GL_TEXTURE_GEN_T); //texture unit 1
- gPipeline.mWaterProgram.disableTexture(LLPipeline::GLSL_DIFFUSE_MAP);
+ gWaterProgram.disableTexture(LLShaderMgr::DIFFUSE_MAP);
// Disable texture coordinate and color arrays
LLImageGL::unbindTexture(diffTex, GL_TEXTURE_2D);
@@ -527,50 +494,10 @@ void LLDrawPoolWater::renderReflection(LLFace* face)
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
}
-void bindScreenToTexture()
-{
- if (LLDrawPoolWater::sSkipScreenCopy)
- {
- glBindTexture(GL_TEXTURE_2D, 0);
- }
- else
- {
-
- GLint viewport[4];
- glGetIntegerv(GL_VIEWPORT, viewport);
- GLuint resX = nhpo2(viewport[2]);
- GLuint resY = nhpo2(viewport[3]);
-
- glBindTexture(GL_TEXTURE_2D, sScreenTex);
- GLint cResX;
- GLint cResY;
- glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &cResX);
- glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &cResY);
-
- if (cResX != (GLint)resX || cResY != (GLint)resY)
- {
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, resX, resY, 0, GL_RGB, GL_FLOAT, NULL);
- gImageList.updateMaxResidentTexMem(-1, resX*resY*3);
- }
-
- glCopyTexSubImage2D(GL_TEXTURE_2D, 0, viewport[0], viewport[1], 0, 0, viewport[2], viewport[3]);
-
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-
- float scale[2];
- scale[0] = (float) viewport[2]/resX;
- scale[1] = (float) viewport[3]/resY;
- glUniform2fvARB(gPipeline.mWaterProgram.mUniform[LLPipeline::GLSL_WATER_FBSCALE], 1, scale);
-
- LLImageGL::sBoundTextureMemory += resX * resY * 3;
- }
-}
-
void LLDrawPoolWater::shade()
{
+ glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE);
+
static LLVector2 d1( 0.5f, -0.17f );
static LLVector2 d2( 0.58f, -0.67f );
static LLVector2 d3( 0.5f, 0.25f );
@@ -637,31 +564,41 @@ void LLDrawPoolWater::shade()
LLCubeMap* skyMap = gSky.mVOSkyp->getCubeMap();
- gPipeline.mWaterProgram.enableTexture(LLPipeline::GLSL_ENVIRONMENT_MAP, GL_TEXTURE_CUBE_MAP_ARB);
+ gWaterProgram.enableTexture(LLShaderMgr::ENVIRONMENT_MAP, GL_TEXTURE_CUBE_MAP_ARB);
skyMap->bind();
//bind normal map
- S32 bumpTex = gPipeline.mWaterProgram.enableTexture(LLPipeline::GLSL_BUMP_MAP);
+ S32 bumpTex = gWaterProgram.enableTexture(LLShaderMgr::BUMP_MAP);
mWaterNormp->addTextureStats(1024.f*1024.f);
mWaterNormp->bind(bumpTex);
- gPipeline.mWaterProgram.enableTexture(LLPipeline::GLSL_WATER_SCREENTEX);
+ gWaterProgram.enableTexture(LLShaderMgr::WATER_SCREENTEX);
- gPipeline.mWaterProgram.bind();
+ gWaterProgram.bind();
- bindScreenToTexture();
+ if (!sSkipScreenCopy)
+ {
+ gPipeline.bindScreenToTexture();
+ }
+ else
+ {
+ glBindTexture(GL_TEXTURE_2D, 0);
+ }
- S32 diffTex = gPipeline.mWaterProgram.enableTexture(LLPipeline::GLSL_DIFFUSE_MAP);
+ glUniform2fvARB(gWaterProgram.mUniform[LLShaderMgr::WATER_FBSCALE], 1,
+ gPipeline.mScreenScale.mV);
+
+ S32 diffTex = gWaterProgram.enableTexture(LLShaderMgr::DIFFUSE_MAP);
LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
- glUniform1fARB(gPipeline.mWaterProgram.mUniform[LLPipeline::GLSL_WATER_TIME], sTime);
- glUniform3fvARB(gPipeline.mWaterProgram.mUniform[LLPipeline::GLSL_WATER_SPECULAR], 1, light_diffuse.mV);
- glUniform1fARB(gPipeline.mWaterProgram.mUniform[LLPipeline::GLSL_WATER_SPECULAR_EXP], light_exp);
- glUniform3fvARB(gPipeline.mWaterProgram.mUniform[LLPipeline::GLSL_WATER_EYEVEC], 1, gCamera->getOrigin().mV);
- glUniform2fvARB(gPipeline.mWaterProgram.mUniform[LLPipeline::GLSL_WATER_WAVE_DIR1], 1, d1.mV);
- glUniform2fvARB(gPipeline.mWaterProgram.mUniform[LLPipeline::GLSL_WATER_WAVE_DIR2], 1, d2.mV);
- glUniform3fvARB(gPipeline.mWaterProgram.mUniform[LLPipeline::GLSL_WATER_LIGHT_DIR], 1, light_dir.mV);
+ glUniform1fARB(gWaterProgram.mUniform[LLShaderMgr::WATER_TIME], sTime);
+ glUniform3fvARB(gWaterProgram.mUniform[LLShaderMgr::WATER_SPECULAR], 1, light_diffuse.mV);
+ glUniform1fARB(gWaterProgram.mUniform[LLShaderMgr::WATER_SPECULAR_EXP], light_exp);
+ glUniform3fvARB(gWaterProgram.mUniform[LLShaderMgr::WATER_EYEVEC], 1, gCamera->getOrigin().mV);
+ glUniform2fvARB(gWaterProgram.mUniform[LLShaderMgr::WATER_WAVE_DIR1], 1, d1.mV);
+ glUniform2fvARB(gWaterProgram.mUniform[LLShaderMgr::WATER_WAVE_DIR2], 1, d2.mV);
+ glUniform3fvARB(gWaterProgram.mUniform[LLShaderMgr::WATER_LIGHT_DIR], 1, light_dir.mV);
LLColor4 water_color;
LLVector3 camera_up = gCamera->getUpAxis();
@@ -669,12 +606,12 @@ void LLDrawPoolWater::shade()
if (gCamera->cameraUnderWater())
{
water_color.setVec(1.f, 1.f, 1.f, 0.4f);
- glUniform1fARB(gPipeline.mWaterProgram.mUniform[LLPipeline::GLSL_WATER_REFSCALE], 0.25f);
+ glUniform1fARB(gWaterProgram.mUniform[LLShaderMgr::WATER_REFSCALE], 0.25f);
}
else
{
water_color.setVec(1.f, 1.f, 1.f, 0.5f*(1.f + up_dot));
- glUniform1fARB(gPipeline.mWaterProgram.mUniform[LLPipeline::GLSL_WATER_REFSCALE], 0.01f);
+ glUniform1fARB(gWaterProgram.mUniform[LLShaderMgr::WATER_REFSCALE], 0.01f);
}
if (water_color.mV[3] > 0.9f)
{
@@ -701,10 +638,10 @@ void LLDrawPoolWater::shade()
}
}
- gPipeline.mWaterProgram.disableTexture(LLPipeline::GLSL_ENVIRONMENT_MAP, GL_TEXTURE_CUBE_MAP_ARB);
- gPipeline.mWaterProgram.disableTexture(LLPipeline::GLSL_WATER_SCREENTEX);
- gPipeline.mWaterProgram.disableTexture(LLPipeline::GLSL_BUMP_MAP);
- gPipeline.mWaterProgram.disableTexture(LLPipeline::GLSL_DIFFUSE_MAP);
+ gWaterProgram.disableTexture(LLShaderMgr::ENVIRONMENT_MAP, GL_TEXTURE_CUBE_MAP_ARB);
+ gWaterProgram.disableTexture(LLShaderMgr::WATER_SCREENTEX);
+ gWaterProgram.disableTexture(LLShaderMgr::BUMP_MAP);
+ gWaterProgram.disableTexture(LLShaderMgr::DIFFUSE_MAP);
glActiveTextureARB(GL_TEXTURE0_ARB);
glEnable(GL_TEXTURE_2D);
@@ -712,6 +649,7 @@ void LLDrawPoolWater::shade()
glClientActiveTextureARB(GL_TEXTURE0_ARB);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+ glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE);
}
void LLDrawPoolWater::renderForSelect()
diff --git a/linden/indra/newview/lldrawpoolwater.h b/linden/indra/newview/lldrawpoolwater.h
index 2e45868..cdd3e3b 100644
--- a/linden/indra/newview/lldrawpoolwater.h
+++ b/linden/indra/newview/lldrawpoolwater.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lldriverparam.cpp b/linden/indra/newview/lldriverparam.cpp
index 3e0409e..ce42ad5 100644
--- a/linden/indra/newview/lldriverparam.cpp
+++ b/linden/indra/newview/lldriverparam.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lldriverparam.h b/linden/indra/newview/lldriverparam.h
index b40d5d9..e96d5ce 100644
--- a/linden/indra/newview/lldriverparam.h
+++ b/linden/indra/newview/lldriverparam.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lldynamictexture.cpp b/linden/indra/newview/lldynamictexture.cpp
index 90ebd74..4944415 100644
--- a/linden/indra/newview/lldynamictexture.cpp
+++ b/linden/indra/newview/lldynamictexture.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lldynamictexture.h b/linden/indra/newview/lldynamictexture.h
index b11bed3..9833ecc 100644
--- a/linden/indra/newview/lldynamictexture.h
+++ b/linden/indra/newview/lldynamictexture.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llemote.cpp b/linden/indra/newview/llemote.cpp
index 28f56b5..09ba389 100644
--- a/linden/indra/newview/llemote.cpp
+++ b/linden/indra/newview/llemote.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llemote.h b/linden/indra/newview/llemote.h
index 6296b66..a0aa353 100644
--- a/linden/indra/newview/llemote.h
+++ b/linden/indra/newview/llemote.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lleventinfo.cpp b/linden/indra/newview/lleventinfo.cpp
index 103450e..f49b91a 100644
--- a/linden/indra/newview/lleventinfo.cpp
+++ b/linden/indra/newview/lleventinfo.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lleventinfo.h b/linden/indra/newview/lleventinfo.h
index 950e32e..9fd6f99 100644
--- a/linden/indra/newview/lleventinfo.h
+++ b/linden/indra/newview/lleventinfo.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lleventnotifier.cpp b/linden/indra/newview/lleventnotifier.cpp
index 0487223..ec4d95f 100644
--- a/linden/indra/newview/lleventnotifier.cpp
+++ b/linden/indra/newview/lleventnotifier.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lleventnotifier.h b/linden/indra/newview/lleventnotifier.h
index 61b164d..1db2e2f 100644
--- a/linden/indra/newview/lleventnotifier.h
+++ b/linden/indra/newview/lleventnotifier.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lleventpoll.cpp b/linden/indra/newview/lleventpoll.cpp
index 5407ee2..9c5a19d 100644
--- a/linden/indra/newview/lleventpoll.cpp
+++ b/linden/indra/newview/lleventpoll.cpp
@@ -1,9 +1,10 @@
-/**
+/**
* @file lleventpoll.cpp
- * @brief Implementation of the LLEventPoll class.
+ * @brief Implementation of the LLEventPoll class.
*
- * Copyright (c) 2006-2007, Linden Research, Inc.
+ * Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -27,156 +28,160 @@
#include "llviewerprecompiledheaders.h"
+#include "llagent.h"
#include "lleventpoll.h"
#include "llhttpclient.h"
-#include "llhttpnode.h"
#include "llsdserialize.h"
+#include "llviewerregion.h"
+#include "message.h"
+class LLEventPoll::Impl : LLHTTPClient::Responder
+{
+public:
+ static Impl& start(const std::string& pollURL);
+ void stop();
+
+private:
+ Impl(const std::string& pollURL);
+ ~Impl();
+
+ void makeRequest();
+ void handleMessage(const LLSD& content);
+ virtual void error(U32 status, const std::string& reason);
+ virtual void result(const LLSD& content);
+private:
+ typedef LLHTTPClient::ResponderPtr Ptr;
-class LLEventPoll::Impl : LLHTTPClient::Responder
+ Ptr mPtr;
+ bool mDone;
+
+ std::string mPollURL;
+ std::string mSender;
+
+ LLSD mAcknowledge;
+
+ // these are only here for debugging so we can see which poller is which
+ static int sCount;
+ int mCount;
+};
+
+//static
+LLEventPoll::Impl& LLEventPoll::Impl::start(
+ const std::string& pollURL)
{
-public:
- static Impl& start(
- const std::string& pollURL, const LLHTTPNode& treeRoot)
- {
- Impl* i = new Impl(pollURL, treeRoot);
- llinfos << "LLEventPoll::Impl::start <" << i->mCount << "> "
+ Impl* i = new Impl(pollURL);
+ llinfos << "LLEventPoll::Impl::start <" << i->mCount << "> "
<< pollURL << llendl;
- return *i;
- }
-
- void stop()
+ return *i;
+}
+
+void LLEventPoll::Impl::stop()
+{
+ llinfos << "LLEventPoll::Impl::stop <" << mCount << "> "
+ << mPollURL << llendl;
+ // there should be a way to stop a LLHTTPClient request in progress
+ mDone = true;
+ mPtr = NULL;
+}
+
+int LLEventPoll::Impl::sCount = 0;
+
+LLEventPoll::Impl::Impl(const std::string& pollURL)
+ : mPtr(NULL), mDone(false),
+ mPollURL(pollURL),
+ mCount(++sCount)
+{
+ mPtr = this;
+ //extract host and port of simulator to set as sender
+ LLViewerRegion *regionp = gAgent.getRegion();
+ if (!regionp)
{
- lldebugs << "LLEventPoll::Impl::stop <" << mCount << "> "
- << mPollURL << llendl;
- // there should be a way to stop a LLHTTPClient request in progress
- mDone = true;
- mPtr = NULL;
+ llerrs << "LLEventPoll initialized before region is added." << llendl;
}
+ mSender = regionp->getHost().getIPandPort();
+ llinfos << "LLEventPoll initialized with sender " << mSender << llendl;
+ makeRequest();
+}
+
+LLEventPoll::Impl::~Impl()
+{
+ lldebugs << "LLEventPoll::Impl::~Impl <" << mCount << "> "
+ << mPollURL << llendl;
+}
+
+void LLEventPoll::Impl::makeRequest()
+{
+ LLSD request;
+ request["ack"] = mAcknowledge;
+ request["done"] = mDone;
-private:
- Impl(const std::string& pollURL, const LLHTTPNode& treeRoot)
- : mPtr(NULL), mDone(false),
- mPollURL(pollURL), mTreeRoot(treeRoot),
- mCount(++sCount)
- {
- mPtr = this;
- makeRequest();
- }
-
- ~Impl()
- {
- lldebugs << "LLEventPoll::Impl::~Impl <" << mCount << "> "
- << mPollURL << llendl;
- }
+ lldebugs << "LLEventPoll::Impl::makeRequest <" << mCount << "> ack = "
+ << LLSDXMLStreamer(mAcknowledge) << llendl;
+ LLHTTPClient::post(mPollURL, request, mPtr);
+}
+
+void LLEventPoll::Impl::handleMessage(const LLSD& content)
+{
+ std::string msg_name = content["message"];
+ LLSD message;
+ message["sender"] = mSender;
+ message["body"] = content["body"];
+ LLMessageSystem::dispatch(msg_name, message);
+}
+//virtual
+void LLEventPoll::Impl::error(U32 status, const std::string& reason)
+{
+ if (mDone) return;
- void makeRequest()
+ if(status != 499)
{
- LLSD request;
- request["ack"] = mAcknowledge;
- request["done"] = mDone;
-
- lldebugs << "LLEventPoll::Impl::makeRequest <" << mCount << "> ack = "
- << LLSDXMLStreamer(mAcknowledge) << llendl;
- LLHTTPClient::post(mPollURL, request, mPtr);
+ llwarns << "LLEventPoll::Impl::error: <" << mCount << "> got "
+ << status << ": " << reason
+ << (mDone ? " -- done" : "") << llendl;
+ stop();
+ return;
}
+
+ makeRequest();
+}
+
+//virtual
+void LLEventPoll::Impl::result(const LLSD& content)
+{
+ lldebugs << "LLEventPoll::Impl::result <" << mCount << ">"
+ << (mDone ? " -- done" : "") << llendl;
- void handleMessage(const LLSD& content)
- {
- std::string message = content["message"];
- if (message.empty())
- {
- llwarns << "LLEventPoll::Impl::handleMessage <" << mCount
- << "> empty message name" << llendl;
- return;
- }
-
- std::string path = "/message/" + message;
-
- LLSD context;
- const LLHTTPNode* handler = mTreeRoot.traverse(path, context);
- if (!handler)
- {
- llwarns << "LLEventPoll::Impl::handleMessage <" << mCount
- << "> no handler for " << path << llendl;
- return;
- }
- LLPointer responsep = LLSimpleResponse::create();
- handler->post((LLHTTPNode::ResponsePtr)responsep, context, content["body"]);
-
- lldebugs << "LLEventPoll::Impl::handleMessage handled <" << mCount << "> "
- << message << ": " << *responsep << llendl;
- }
+ if (mDone) return;
+
+ mAcknowledge = content["id"];
+ LLSD events = content["events"];
- virtual void error(U32 status, const std::string& reason)
+ if(mAcknowledge.isUndefined())
{
- lldebugs << "LLEventPoll::Impl::error <" << mCount << "> got "
- << status << ": " << reason
- << (mDone ? " -- done" : "") << llendl;
-
- if (mDone) return;
-
- if (status == 404)
- {
- // the capability has been revoked
- stop();
- return;
- }
-
- makeRequest();
+ llwarns << "LLEventPoll::Impl: id undefined" << llendl;
}
+ llinfos << "LLEventPoll::Impl::completed <" << mCount << "> " << events.size() << "events (id "
+ << LLSDXMLStreamer(mAcknowledge) << ")" << llendl;
- virtual void result(const LLSD& content)
+ LLSD::array_const_iterator i = events.beginArray();
+ LLSD::array_const_iterator end = events.endArray();
+ for (; i != end; ++i)
{
- lldebugs << "LLEventPoll::Impl::result <" << mCount << ">"
- << (mDone ? " -- done" : "") << llendl;
-
- if (mDone) return;
-
- mAcknowledge = content["id"];
- LLSD events = content["events"];
-
- lldebugs << "LLEventPoll::Impl::completed <" << mCount << "> ack = "
- << LLSDXMLStreamer(mAcknowledge) << llendl;
-
- LLSD::array_const_iterator i = events.beginArray();
- LLSD::array_const_iterator end = events.endArray();
- for (; i != end; ++i)
+ if (i->has("message"))
{
- if (i->has("message"))
- {
- handleMessage(*i);
- }
+ handleMessage(*i);
}
-
- makeRequest();
}
-
-private:
- typedef LLHTTPClient::ResponderPtr Ptr;
-
- Ptr mPtr;
- bool mDone;
-
- std::string mPollURL;
- const LLHTTPNode& mTreeRoot;
- LLSD mAcknowledge;
-
- // these are only here for debugging so we can see which poller is which
- static int sCount;
- int mCount;
-};
-
-int LLEventPoll::Impl::sCount = 0;
-
+ makeRequest();
+}
-LLEventPoll::LLEventPoll(const std::string& pollURL, const LLHTTPNode& treeRoot)
- : impl(Impl::start(pollURL, treeRoot))
+LLEventPoll::LLEventPoll(const std::string& pollURL)
+ : impl(Impl::start(pollURL))
{ }
LLEventPoll::~LLEventPoll()
diff --git a/linden/indra/newview/lleventpoll.h b/linden/indra/newview/lleventpoll.h
index b12770e..4c06a43 100644
--- a/linden/indra/newview/lleventpoll.h
+++ b/linden/indra/newview/lleventpoll.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -28,20 +29,12 @@
#ifndef LL_LLEVENTPOLL_H
#define LL_LLEVENTPOLL_H
-class LLHTTPNode;
-
-
class LLEventPoll
///< implements the viewer side of server-to-viewer pushed events.
{
public:
- LLEventPoll(const std::string& pollURL, const LLHTTPNode& treeRoot);
- /**< Start polling the URL.
-
- The object will automatically responde to events
- by calling handlers in the tree.
- */
-
+ LLEventPoll(const std::string& pollURL);
+ ///< Start polling the URL.
virtual ~LLEventPoll();
///< will stop polling, cancelling any poll in progress.
diff --git a/linden/indra/newview/llface.cpp b/linden/indra/newview/llface.cpp
index e46fcd3..3b47e21 100644
--- a/linden/indra/newview/llface.cpp
+++ b/linden/indra/newview/llface.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -250,8 +251,6 @@ void LLFace::setDrawable(LLDrawable *drawable)
void LLFace::setSize(const S32 num_vertices, const S32 num_indices)
{
- LLMemType mt1(LLMemType::MTYPE_DRAWABLE);
-
mGeomCount = num_vertices;
mIndicesCount = num_indices;
}
@@ -750,7 +749,18 @@ BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f,
{
size.scaleVec(mDrawablep->getVObj()->getScale());
}
- LLQuaternion rotation = LLQuaternion(mat_normal);
+
+ LLMatrix3 mat = mat_normal;
+ LLVector3 x = mat.getFwdRow();
+ LLVector3 y = mat.getLeftRow();
+ LLVector3 z = mat.getUpRow();
+ x.normVec();
+ y.normVec();
+ z.normVec();
+
+ mat.setRows(x,y,z);
+
+ LLQuaternion rotation = LLQuaternion(mat);
LLVector3 v[4];
//get 4 corners of bounding box
@@ -934,7 +944,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
LLVector2 tmin, tmax;
const LLTextureEntry *tep = mVObjp->getTE(f);
- U8 bump_code = tep ? bump_code = tep->getBumpmap() : 0;
+ U8 bump_code = tep ? tep->getBumpmap() : 0;
if (rebuild_tcoord)
{
@@ -969,20 +979,11 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
}
else
{
- //if (mode & LLViewerTextureAnim::TRANSLATE)
- {
- os = ot = 0.f;
- }
- //if (mode & LLViewerTextureAnim::ROTATE)
- {
- r = 0.f;
- cos_ang = 1.f;
- sin_ang = 0.f;
- }
- //if (mode & LLViewerTextureAnim::SCALE)
- {
- ms = mt = 1.f;
- }
+ os = ot = 0.f;
+ r = 0.f;
+ cos_ang = 1.f;
+ sin_ang = 0.f;
+ ms = mt = 1.f;
}
}
diff --git a/linden/indra/newview/llface.h b/linden/indra/newview/llface.h
index b265b3a..6870789 100644
--- a/linden/indra/newview/llface.h
+++ b/linden/indra/newview/llface.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llface.inl b/linden/indra/newview/llface.inl
index cdf858f..b36577e 100644
--- a/linden/indra/newview/llface.inl
+++ b/linden/indra/newview/llface.inl
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfasttimerview.cpp b/linden/indra/newview/llfasttimerview.cpp
index 5038ed9..c469d8c 100644
--- a/linden/indra/newview/llfasttimerview.cpp
+++ b/linden/indra/newview/llfasttimerview.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfasttimerview.h b/linden/indra/newview/llfasttimerview.h
index 11a8887..f4ecfcd 100644
--- a/linden/indra/newview/llfasttimerview.h
+++ b/linden/indra/newview/llfasttimerview.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfeaturemanager.cpp b/linden/indra/newview/llfeaturemanager.cpp
index c0fd96b..57fbc64 100644
--- a/linden/indra/newview/llfeaturemanager.cpp
+++ b/linden/indra/newview/llfeaturemanager.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -192,7 +193,7 @@ BOOL LLFeatureManager::maskFeatures(const char *name)
LLFeatureList *maskp = findMask(name);
if (!maskp)
{
- llwarns << "Unknown feature mask " << name << llendl;
+// llwarns << "Unknown feature mask " << name << llendl;
return FALSE;
}
llinfos << "Applying Feature Mask: " << name << llendl;
@@ -450,14 +451,6 @@ void LLFeatureManager::initGraphicsFeatureMasks()
{
maskFeatures("ATI");
}
- if (gGLManager.mIsRadeon8500)
- {
- maskFeatures("Radeon8500");
- }
- if (gGLManager.mIsRadeon9700)
- {
- maskFeatures("Radeon9700");
- }
if (gGLManager.mIsGFFX)
{
maskFeatures("GeForceFX");
@@ -470,11 +463,18 @@ void LLFeatureManager::initGraphicsFeatureMasks()
{
maskFeatures("OpenGLPre15");
}
-
- if (gGLManager.mIsMobilityRadeon9000)
+ // Replaces ' ' with '_' in mGPUString to deal with inability for parser to handle spaces
+ std::string gpustr = mGPUString;
+ for (std::string::iterator iter = gpustr.begin(); iter != gpustr.end(); ++iter)
{
- maskFeatures("MobilityRadeon9000");
+ if (*iter == ' ')
+ {
+ *iter = '_';
+ }
}
+// llinfos << "Masking features from gpu table match: " << gpustr << llendl;
+ maskFeatures(gpustr.c_str());
+
if (isSafe())
{
maskFeatures("safe");
diff --git a/linden/indra/newview/llfeaturemanager.h b/linden/indra/newview/llfeaturemanager.h
index a3800da..026b78a 100644
--- a/linden/indra/newview/llfeaturemanager.h
+++ b/linden/indra/newview/llfeaturemanager.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfft.cpp b/linden/indra/newview/llfft.cpp
index 9652786..2b80ad9 100644
--- a/linden/indra/newview/llfft.cpp
+++ b/linden/indra/newview/llfft.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfft.h b/linden/indra/newview/llfft.h
index 5df02ab..07e868b 100644
--- a/linden/indra/newview/llfft.h
+++ b/linden/indra/newview/llfft.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfilepicker.cpp b/linden/indra/newview/llfilepicker.cpp
index d3938e0..971743b 100644
--- a/linden/indra/newview/llfilepicker.cpp
+++ b/linden/indra/newview/llfilepicker.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -279,6 +280,7 @@ BOOL LLFilePicker::getSaveFile(ESaveFilter filter, const char* filename)
wcsncpy( mFilesW,L"untitled.wav", FILENAME_BUFFER_SIZE); /*Flawfinder: ignore*/
}
mOFN.lpstrDefExt = L"wav";
+ mOFN.lpstrFilter =
L"WAV Sounds (*.wav)\0*.wav\0" \
L"\0";
break;
diff --git a/linden/indra/newview/llfilepicker.h b/linden/indra/newview/llfilepicker.h
index c284a42..008c96e 100644
--- a/linden/indra/newview/llfilepicker.h
+++ b/linden/indra/newview/llfilepicker.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfirstuse.cpp b/linden/indra/newview/llfirstuse.cpp
index 1127f8b..74381dc 100644
--- a/linden/indra/newview/llfirstuse.cpp
+++ b/linden/indra/newview/llfirstuse.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfirstuse.h b/linden/indra/newview/llfirstuse.h
index 86992cb..89a58be 100644
--- a/linden/indra/newview/llfirstuse.h
+++ b/linden/indra/newview/llfirstuse.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llflexibleobject.cpp b/linden/indra/newview/llflexibleobject.cpp
index 4ce1614..d4080c5 100644
--- a/linden/indra/newview/llflexibleobject.cpp
+++ b/linden/indra/newview/llflexibleobject.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llflexibleobject.h b/linden/indra/newview/llflexibleobject.h
index 9772c57..3d35dd2 100644
--- a/linden/indra/newview/llflexibleobject.h
+++ b/linden/indra/newview/llflexibleobject.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterabout.cpp b/linden/indra/newview/llfloaterabout.cpp
index cbac9f3..372d7e0 100644
--- a/linden/indra/newview/llfloaterabout.cpp
+++ b/linden/indra/newview/llfloaterabout.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -112,7 +113,7 @@ LLFloaterAbout::LLFloaterAbout()
// CPU
support.append("CPU: ");
- support.append( gSysCPU.getCPUStringTerse() );
+ support.append( gSysCPU.getCPUString() );
support.append("\n");
U32 memory = gSysMemory.getPhysicalMemory() / 1024 / 1024;
diff --git a/linden/indra/newview/llfloaterabout.h b/linden/indra/newview/llfloaterabout.h
index 881cb43..1e7ad4c 100644
--- a/linden/indra/newview/llfloaterabout.h
+++ b/linden/indra/newview/llfloaterabout.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloateranimpreview.cpp b/linden/indra/newview/llfloateranimpreview.cpp
index 3661ea2..6802fb2 100644
--- a/linden/indra/newview/llfloateranimpreview.cpp
+++ b/linden/indra/newview/llfloateranimpreview.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -281,7 +282,7 @@ BOOL LLFloaterAnimPreview::postBuild()
childSetValue("ease_out_time", LLSD(motionp->getEaseOutDuration()));
mEnabled = TRUE;
char seconds_string[128]; /*Flawfinder: ignore*/
- snprintf(seconds_string, sizeof(seconds_string), " - %.2f seconds", motionp->getDuration()); /*Flawfinder: ignore*/
+ snprintf(seconds_string, sizeof(seconds_string), " - %.2f seconds", motionp->getDuration()); /* Flawfinder: ignore */
setTitle(mFilename + LLString(seconds_string));
}
@@ -303,7 +304,7 @@ BOOL LLFloaterAnimPreview::postBuild()
{
char output_str[256]; /*Flawfinder: ignore*/
- snprintf(output_str, sizeof(output_str), "Animation file is %.1f seconds in length.\n\nMaximum animation length is %.1f seconds.\n", /*Flawfinder: ignore*/
+ snprintf(output_str, sizeof(output_str), "Animation file is %.1f seconds in length.\n\nMaximum animation length is %.1f seconds.\n", /* Flawfinder: ignore */
loaderp->getDuration(), MAX_ANIM_DURATION);
childSetValue("bad_animation_text", LLSD(output_str));
}
@@ -409,7 +410,7 @@ BOOL LLFloaterAnimPreview::handleMouseDown(S32 x, S32 y, MASK mask)
if (mPreviewRect.pointInRect(x, y))
{
bringToFront( x, y );
- gViewerWindow->setMouseCapture(this, onMouseCaptureLost);
+ gViewerWindow->setMouseCapture(this);
gViewerWindow->hideCursor();
mLastMouseX = x;
mLastMouseY = y;
@@ -424,7 +425,7 @@ BOOL LLFloaterAnimPreview::handleMouseDown(S32 x, S32 y, MASK mask)
//-----------------------------------------------------------------------------
BOOL LLFloaterAnimPreview::handleMouseUp(S32 x, S32 y, MASK mask)
{
- gViewerWindow->setMouseCapture(FALSE, NULL);
+ gViewerWindow->setMouseCapture(FALSE);
gViewerWindow->showCursor();
return LLFloater::handleMouseUp(x, y, mask);
}
@@ -436,7 +437,7 @@ BOOL LLFloaterAnimPreview::handleHover(S32 x, S32 y, MASK mask)
{
MASK local_mask = mask & ~MASK_ALT;
- if (mAnimPreview && gViewerWindow->hasMouseCapture(this))
+ if (mAnimPreview && hasMouseCapture())
{
if (local_mask == MASK_PAN)
{
@@ -498,7 +499,7 @@ BOOL LLFloaterAnimPreview::handleScrollWheel(S32 x, S32 y, S32 clicks)
//-----------------------------------------------------------------------------
// onMouseCaptureLost()
//-----------------------------------------------------------------------------
-void LLFloaterAnimPreview::onMouseCaptureLost(LLMouseHandler* handler)
+void LLFloaterAnimPreview::onMouseCaptureLost()
{
gViewerWindow->showCursor();
}
diff --git a/linden/indra/newview/llfloateranimpreview.h b/linden/indra/newview/llfloateranimpreview.h
index fea10d7..f6d9589 100644
--- a/linden/indra/newview/llfloateranimpreview.h
+++ b/linden/indra/newview/llfloateranimpreview.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -75,10 +76,10 @@ public:
BOOL handleMouseUp(S32 x, S32 y, MASK mask);
BOOL handleHover(S32 x, S32 y, MASK mask);
BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
+ void onMouseCaptureLost();
void refresh();
- static void onMouseCaptureLost(LLMouseHandler*);
static void onBtnPlay(void*);
static void onBtnStop(void*);
static void setUploadAmount(S32 amount) { sUploadAmount = amount; }
diff --git a/linden/indra/newview/llfloaterauction.cpp b/linden/indra/newview/llfloaterauction.cpp
index 8e7124a..49da8ba 100644
--- a/linden/indra/newview/llfloaterauction.cpp
+++ b/linden/indra/newview/llfloaterauction.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -76,12 +77,6 @@ LLFloaterAuction::LLFloaterAuction() :
childSetCommitCallback("fence_check",
LLSavedSettingsGlue::setBOOL, (void*)"AuctionShowFence");
- LLComboBox* combo = LLUICtrlFactory::getComboBoxByName(this, "saletype_combo");
- if (combo)
- {
- combo->selectFirstItem();
- }
-
childSetAction("snapshot_btn", onClickSnapshot, this);
childSetAction("ok_btn", onClickOK, this);
}
@@ -215,28 +210,18 @@ void LLFloaterAuction::onClickSnapshot(void* data)
void LLFloaterAuction::onClickOK(void* data)
{
LLFloaterAuction* self = (LLFloaterAuction*)(data);
- bool is_auction = false;
- LLComboBox* combo = LLUICtrlFactory::getComboBoxByName(self, "saletype_combo");
- if (combo
- && combo->getCurrentIndex() == 0)
- {
- is_auction = true;
- }
+
if(self->mImageID.notNull())
{
LLSD parcel_name = self->childGetValue("parcel_text");
- // create the asset
- if(is_auction)
- {
- // only need the tga if it is an auction.
- LLString* name = new LLString(parcel_name.asString());
- gAssetStorage->storeAssetData(self->mTransactionID, LLAssetType::AT_IMAGE_TGA,
- &auction_tga_upload_done,
- (void*)name,
- FALSE);
- self->getWindow()->incBusyCount();
- }
+ // create the asset
+ LLString* name = new LLString(parcel_name.asString());
+ gAssetStorage->storeAssetData(self->mTransactionID, LLAssetType::AT_IMAGE_TGA,
+ &auction_tga_upload_done,
+ (void*)name,
+ FALSE);
+ self->getWindow()->incBusyCount();
LLString* j2c_name = new LLString(parcel_name.asString());
gAssetStorage->storeAssetData(self->mTransactionID, LLAssetType::AT_TEXTURE,
@@ -245,24 +230,13 @@ void LLFloaterAuction::onClickOK(void* data)
FALSE);
self->getWindow()->incBusyCount();
- if(is_auction)
- {
- LLNotifyBox::showXml("UploadingAuctionSnapshot");
- }
- else
- {
- LLNotifyBox::showXml("UploadingSnapshot");
- }
+ LLNotifyBox::showXml("UploadingAuctionSnapshot");
+
}
LLMessageSystem* msg = gMessageSystem;
- if(is_auction)
- {
- msg->newMessage("ViewerStartAuction");
- }
- else
- {
- msg->newMessage("ParcelGodReserveForNewbie");
- }
+
+ msg->newMessage("ViewerStartAuction");
+
msg->nextBlock("AgentData");
msg->addUUID("AgentID", gAgent.getID());
msg->addUUID("SessionID", gAgent.getSessionID());
diff --git a/linden/indra/newview/llfloaterauction.h b/linden/indra/newview/llfloaterauction.h
index 7ff932f..51936bc 100644
--- a/linden/indra/newview/llfloaterauction.h
+++ b/linden/indra/newview/llfloaterauction.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloateravatarinfo.cpp b/linden/indra/newview/llfloateravatarinfo.cpp
index ef34542..c0351ee 100644
--- a/linden/indra/newview/llfloateravatarinfo.cpp
+++ b/linden/indra/newview/llfloateravatarinfo.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -52,7 +53,6 @@
#include "llcheckboxctrl.h"
#include "llfloaterworldmap.h"
#include "llfloatermute.h"
-#include "llfloaterrate.h"
#include "llinventoryview.h"
#include "lllineeditor.h"
#include "llmutelist.h"
@@ -205,10 +205,6 @@ void LLFloaterAvatarInfo::showFromDirectory(const LLUUID &avatar_id)
floater->mPanelAvatarp->setAvatarID(avatar_id, "", ONLINE_STATUS_NO);
floater->open(); /*Flawfinder: ignore*/
}
- if(floater)
- {
- floater->mPanelAvatarp->disableRate();
- }
}
diff --git a/linden/indra/newview/llfloateravatarinfo.h b/linden/indra/newview/llfloateravatarinfo.h
index 4879309..7ca6882 100644
--- a/linden/indra/newview/llfloateravatarinfo.h
+++ b/linden/indra/newview/llfloateravatarinfo.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloateravatarpicker.cpp b/linden/indra/newview/llfloateravatarpicker.cpp
index cb9af67..6989084 100644
--- a/linden/indra/newview/llfloateravatarpicker.cpp
+++ b/linden/indra/newview/llfloateravatarpicker.cpp
@@ -3,6 +3,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -43,7 +44,7 @@
const S32 MIN_WIDTH = 200;
const S32 MIN_HEIGHT = 340;
const LLRect FLOATER_RECT(0, 380, 240, 0);
-const char FLOATER_TITLE[] = "Choose Person";
+const char FLOATER_TITLE[] = "Choose Resident";
// static
LLFloaterAvatarPicker* LLFloaterAvatarPicker::sInstance = NULL;
@@ -108,9 +109,7 @@ BOOL LLFloaterAvatarPicker::postBuild()
if (mListNames)
{
- LLScrollListItem* row = new LLScrollListItem( TRUE, NULL, LLUUID::null );
- row->addColumn("No results", LLFontGL::sSansSerif);
- mListNames->addItem(row);
+ mListNames->addSimpleElement("No results");
}
mInventoryPanel = (LLInventoryPanel*)this->getCtrlByNameAndType("Inventory Panel", WIDGET_TYPE_INVENTORY_PANEL);
@@ -188,11 +187,12 @@ void LLFloaterAvatarPicker::onList(LLUICtrl* ctrl, void* userdata)
}
std::vector items = self->mListNames->getAllSelected();
- std::vector::iterator itor;
- for (itor = items.begin(); itor != items.end(); ++itor)
+ for (std::vector::iterator iter = items.begin();
+ iter != items.end(); ++iter)
{
- self->mAvatarNames.push_back((*itor)->getColumn(0)->getText());
- self->mAvatarIDs.push_back((*itor)->getUUID());
+ LLScrollListItem* item = *iter;
+ self->mAvatarNames.push_back(item->getColumn(0)->getText());
+ self->mAvatarIDs.push_back(item->getUUID());
self->childSetEnabled("Select", TRUE);
}
}
@@ -256,10 +256,7 @@ void LLFloaterAvatarPicker::find()
if (mListNames)
{
mListNames->deleteAllItems();
-
- LLScrollListItem* row = new LLScrollListItem( TRUE, NULL, LLUUID::null );
- row->addColumn("Searching...", LLFontGL::sSansSerif);
- mListNames->addItem(row);
+ mListNames->addSimpleElement("Searching...");
}
childSetEnabled("Select", FALSE);
@@ -324,23 +321,23 @@ void LLFloaterAvatarPicker::processAvatarPickerReply(LLMessageSystem* msg, void*
msg->getStringFast(_PREHASH_Data,_PREHASH_FirstName, DB_FIRST_NAME_BUF_SIZE, first_name, i);
msg->getStringFast(_PREHASH_Data,_PREHASH_LastName, DB_LAST_NAME_BUF_SIZE, last_name, i);
- LLScrollListItem* row = new LLScrollListItem( TRUE, NULL, avatar_id );
-
+ LLString avatar_name;
if (avatar_id.isNull())
{
self->childSetTextArg("NotFound", "[TEXT]", self->childGetText("Edit"));
- LLString msg = self->childGetValue("NotFound").asString();
- row->addColumn(msg, LLFontGL::sSansSerif);
+ avatar_name = self->childGetValue("NotFound").asString();
self->mListNames->setEnabled(FALSE);
}
else
{
- LLString buffer = LLString(first_name) + " " + last_name;
- row->addColumn(buffer, LLFontGL::sSansSerif);
+ avatar_name = LLString(first_name) + " " + last_name;
self->mListNames->setEnabled(TRUE);
found_one = TRUE;
}
- self->mListNames->addItem(row);
+ LLSD element;
+ element["id"] = avatar_id; // value
+ element["columns"][0]["value"] = avatar_name;
+ self->mListNames->addElement(element);
}
if (found_one)
diff --git a/linden/indra/newview/llfloateravatarpicker.h b/linden/indra/newview/llfloateravatarpicker.h
index a8ed5ef..9089c9a 100644
--- a/linden/indra/newview/llfloateravatarpicker.h
+++ b/linden/indra/newview/llfloateravatarpicker.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloateravatartextures.cpp b/linden/indra/newview/llfloateravatartextures.cpp
index d7d7dfc..5d53107 100644
--- a/linden/indra/newview/llfloateravatartextures.cpp
+++ b/linden/indra/newview/llfloateravatartextures.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -97,6 +98,7 @@ void LLFloaterAvatarTextures::draw()
LLFloater::draw();
}
+#if !LL_RELEASE_FOR_DOWNLOAD
static void update_texture_ctrl(LLVOAvatar* avatarp,
LLTextureCtrl* ctrl,
LLVOAvatar::ETextureIndex te)
@@ -134,7 +136,6 @@ static LLVOAvatar* find_avatar(const LLUUID& id)
void LLFloaterAvatarTextures::refresh()
{
-#if !LL_RELEASE_FOR_DOWNLOAD
LLVOAvatar *avatarp = find_avatar(mID);
if (avatarp)
{
@@ -177,9 +178,16 @@ void LLFloaterAvatarTextures::refresh()
{
setTitle(mTitle + ": INVALID AVATAR (" + mID.asString() + ")");
}
-#endif
}
+#else
+
+void LLFloaterAvatarTextures::refresh()
+{
+}
+
+#endif
+
// static
void LLFloaterAvatarTextures::onClickDump(void* data)
{
diff --git a/linden/indra/newview/llfloateravatartextures.h b/linden/indra/newview/llfloateravatartextures.h
index c908935..bd67859 100644
--- a/linden/indra/newview/llfloateravatartextures.h
+++ b/linden/indra/newview/llfloateravatartextures.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterbuildoptions.cpp b/linden/indra/newview/llfloaterbuildoptions.cpp
index be5cd4e..1bec048 100644
--- a/linden/indra/newview/llfloaterbuildoptions.cpp
+++ b/linden/indra/newview/llfloaterbuildoptions.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterbuildoptions.h b/linden/indra/newview/llfloaterbuildoptions.h
index b31ddcb..a34aa2c 100644
--- a/linden/indra/newview/llfloaterbuildoptions.h
+++ b/linden/indra/newview/llfloaterbuildoptions.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterbump.cpp b/linden/indra/newview/llfloaterbump.cpp
index ead50e8..ee26d6a 100644
--- a/linden/indra/newview/llfloaterbump.cpp
+++ b/linden/indra/newview/llfloaterbump.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -82,9 +83,10 @@ void LLFloaterBump::show(void *contents)
if (gMeanCollisionList.isEmpty())
{
LLString none_detected = sInstance->childGetText("none_detected");
- LLScrollListItem *item = new LLScrollListItem();
- item->addColumn(none_detected, LLFontGL::sSansSerifBold);
- list->addItem(item);
+ LLSD row;
+ row["columns"][0]["value"] = none_detected;
+ row["columns"][0]["font"] = "SansSerifBold";
+ list->addElement(row);
}
else
{
@@ -151,7 +153,9 @@ void LLFloaterBump::add(LLScrollListCtrl* list, LLMeanCollisionData* mcd)
text.setArg("[FIRST]", mcd->mFirstName);
text.setArg("[LAST]", mcd->mLastName);
- LLScrollListItem *item = new LLScrollListItem(TRUE, NULL, mcd->mPerp);
- item->addColumn(text, LLFontGL::sSansSerifBold);
- list->addItem(item);
+ LLSD row;
+ row["id"] = mcd->mPerp;
+ row["columns"][0]["value"] = text;
+ row["columns"][0]["font"] = "SansSerifBold";
+ list->addElement(row);
}
diff --git a/linden/indra/newview/llfloaterbump.h b/linden/indra/newview/llfloaterbump.h
index d944443..476220a 100644
--- a/linden/indra/newview/llfloaterbump.h
+++ b/linden/indra/newview/llfloaterbump.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterbuy.cpp b/linden/indra/newview/llfloaterbuy.cpp
index 2266845..be52084 100644
--- a/linden/indra/newview/llfloaterbuy.cpp
+++ b/linden/indra/newview/llfloaterbuy.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -147,7 +148,8 @@ void LLFloaterBuy::show(const LLSaleInfo& sale_info)
// Compute icon for this item
LLUUID icon_id = get_item_icon_uuid(LLAssetType::AT_OBJECT,
LLInventoryType::IT_OBJECT,
- 0x0);
+ 0x0, FALSE);
+
row["columns"][0]["column"] = "icon";
row["columns"][0]["type"] = "icon";
row["columns"][0]["value"] = icon_id;
@@ -243,9 +245,16 @@ void LLFloaterBuy::inventoryChanged(LLViewerObject* obj,
LLSD row;
// Compute icon for this item
+ BOOL item_is_multi = FALSE;
+ if ( inv_item->getFlags() & LLInventoryItem::II_FLAGS_LANDMARK_VISITED )
+ {
+ item_is_multi = TRUE;
+ }
+
LLUUID icon_id = get_item_icon_uuid(inv_item->getType(),
inv_item->getInventoryType(),
- inv_item->getFlags());
+ inv_item->getFlags(),
+ item_is_multi);
row["columns"][0]["column"] = "icon";
row["columns"][0]["type"] = "icon";
row["columns"][0]["value"] = icon_id;
diff --git a/linden/indra/newview/llfloaterbuy.h b/linden/indra/newview/llfloaterbuy.h
index 1642aaa..a4428fe 100644
--- a/linden/indra/newview/llfloaterbuy.h
+++ b/linden/indra/newview/llfloaterbuy.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterbuycontents.cpp b/linden/indra/newview/llfloaterbuycontents.cpp
index 1deb1ab..5e8d921 100644
--- a/linden/indra/newview/llfloaterbuycontents.cpp
+++ b/linden/indra/newview/llfloaterbuycontents.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -214,9 +215,17 @@ void LLFloaterBuyContents::inventoryChanged(LLViewerObject* obj,
// Create the line in the list
LLSD row;
+
+ BOOL item_is_multi = FALSE;
+ if ( inv_item->getFlags() & LLInventoryItem::II_FLAGS_LANDMARK_VISITED )
+ {
+ item_is_multi = TRUE;
+ }
+
LLUUID icon_id = get_item_icon_uuid(inv_item->getType(),
inv_item->getInventoryType(),
- inv_item->getFlags());
+ inv_item->getFlags(),
+ item_is_multi);
row["columns"][0]["column"] = "icon";
row["columns"][0]["type"] = "icon";
row["columns"][0]["value"] = icon_id;
diff --git a/linden/indra/newview/llfloaterbuycontents.h b/linden/indra/newview/llfloaterbuycontents.h
index a30de0e..2553e09 100644
--- a/linden/indra/newview/llfloaterbuycontents.h
+++ b/linden/indra/newview/llfloaterbuycontents.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterbuycurrency.cpp b/linden/indra/newview/llfloaterbuycurrency.cpp
index 388a8aa..2ce46f7 100644
--- a/linden/indra/newview/llfloaterbuycurrency.cpp
+++ b/linden/indra/newview/llfloaterbuycurrency.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterbuycurrency.h b/linden/indra/newview/llfloaterbuycurrency.h
index 4dfb61f..633a7b7 100644
--- a/linden/indra/newview/llfloaterbuycurrency.h
+++ b/linden/indra/newview/llfloaterbuycurrency.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterbuyland.cpp b/linden/indra/newview/llfloaterbuyland.cpp
index 1b72d4e..ed7f619 100644
--- a/linden/indra/newview/llfloaterbuyland.cpp
+++ b/linden/indra/newview/llfloaterbuyland.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -94,7 +95,6 @@ private:
// information about the parcel
bool mParcelValid;
bool mParcelIsForSale;
- bool mParcelIsFirstLand;
bool mParcelIsGroupLand;
S32 mParcelGroupContribution;
S32 mParcelPrice;
@@ -371,7 +371,6 @@ void LLFloaterBuyLandUI::updateParcelInfo()
LLParcel* parcel = mParcel->getParcel();
mParcelValid = parcel && mRegion;
mParcelIsForSale = false;
- mParcelIsFirstLand = false;
mParcelIsGroupLand = false;
mParcelGroupContribution = 0;
mParcelPrice = 0;
@@ -405,7 +404,6 @@ void LLFloaterBuyLandUI::updateParcelInfo()
{
mParcelActualArea = parcel->getArea();
mParcelIsForSale = parcel->getForSale();
- mParcelIsFirstLand = parcel->getReservedForNewbie();
mParcelIsGroupLand = parcel->getIsGroupOwned();
mParcelPrice = mParcelIsForSale ? parcel->getSalePrice() : 0;
@@ -512,36 +510,6 @@ void LLFloaterBuyLandUI::updateParcelInfo()
}
}
- /*
- if ((mRegion->getRegionFlags() & REGION_FLAGS_BLOCK_LAND_RESELL)
- && !gAgent.isGodlike())
- {
- mCannotBuyReason = llformat(
- "The region %s does not allow transfer of land.",
- mRegion->getName().c_str() );
- return;
- }
- */
-
- if (parcel->getReservedForNewbie())
- {
- if (mIsForGroup)
- {
- mCannotBuyReason = childGetText("first_time_group");
- return;
- }
-
- if (gStatusBar->getSquareMetersCommitted() > 0)
- {
- mCannotBuyReason == childGetText("first_time");
- return;
- }
-
- // *TODO: There should be a check based on the database value
- // indra.user.ever_owned_land, only that value never makes it
- // to the viewer, see SL-10728
- }
-
mCanBuy = true;
}
@@ -1162,17 +1130,6 @@ void LLFloaterBuyLandUI::refreshUI()
message += childGetText("insufficient_land_credits");
}
- else if (mAgentHasNeverOwnedLand)
- {
- if (mParcelIsFirstLand)
- {
- message += childGetText("first_purchase");
- }
- else
- {
- message += childGetText("first_time_but_not_first_land");
- }
- }
else
{
@@ -1280,14 +1237,12 @@ void LLFloaterBuyLandUI::refreshUI()
}
- //remove_contribution not in XML - ?!
childSetValue("remove_contribution", LLSD(groupContributionEnough));
childSetEnabled("remove_contribution", groupContributionEnough);
bool showRemoveContribution = mParcelIsGroupLand
&& (mParcelGroupContribution > 0);
- childSetText("remove_contribution",
- llformat("Remove %d square meters of contribution from group",
- minContribution));
+ childSetLabelArg("remove_contribution", "[AMOUNT]",
+ llformat("%d", minContribution));
childSetVisible("remove_contribution", showRemoveContribution);
childShow("step_3");
diff --git a/linden/indra/newview/llfloaterbuyland.h b/linden/indra/newview/llfloaterbuyland.h
index a91c6d6..328eaec 100644
--- a/linden/indra/newview/llfloaterbuyland.h
+++ b/linden/indra/newview/llfloaterbuyland.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterchat.cpp b/linden/indra/newview/llfloaterchat.cpp
index 2b27d15..d31532f 100644
--- a/linden/indra/newview/llfloaterchat.cpp
+++ b/linden/indra/newview/llfloaterchat.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterchat.h b/linden/indra/newview/llfloaterchat.h
index 2b150a2..54df738 100644
--- a/linden/indra/newview/llfloaterchat.h
+++ b/linden/indra/newview/llfloaterchat.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterclothing.cpp b/linden/indra/newview/llfloaterclothing.cpp
index 627b2c6..8df90bc 100644
--- a/linden/indra/newview/llfloaterclothing.cpp
+++ b/linden/indra/newview/llfloaterclothing.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -263,9 +264,15 @@ void LLFloaterClothing::buildClothingList()
LLSD row;
row["id"] = item->getUUID();
+ BOOL item_is_multi = FALSE;
+ if ( item->getFlags() & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS )
+ {
+ item_is_multi = TRUE;
+ }
+
LLUUID image_id = get_item_icon_uuid(item->getType(),
item->getInventoryType(),
- item->getFlags()); // flags = wearable type
+ item->getFlags(), item_is_multi); // flags = wearable type
row["columns"][0]["column"] = "icon";
row["columns"][0]["type"] = "icon";
row["columns"][0]["value"] = image_id;
diff --git a/linden/indra/newview/llfloaterclothing.h b/linden/indra/newview/llfloaterclothing.h
index 85fbc18..6c2015a 100644
--- a/linden/indra/newview/llfloaterclothing.h
+++ b/linden/indra/newview/llfloaterclothing.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloatercolorpicker.cpp b/linden/indra/newview/llfloatercolorpicker.cpp
index 84df754..973fe75 100644
--- a/linden/indra/newview/llfloatercolorpicker.cpp
+++ b/linden/indra/newview/llfloatercolorpicker.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -294,59 +295,6 @@ destroyUI ()
}
}
-//////////////////////////////////////////////////////////////////////////////
-//
-void
-LLFloaterColorPicker::
-rgbToHsl ( F32 rValIn, F32 gValIn, F32 bValIn, F32& hValOut, F32& sValOut, F32& lValOut )
-{
- F32 var_R = ( rValIn );
- F32 var_G = ( gValIn );
- F32 var_B = ( bValIn );
-
- F32 var_Min = ( var_R < ( var_G < var_B ? var_G : var_B ) ? var_R : ( var_G < var_B ? var_G : var_B ) );
- F32 var_Max = ( var_R > ( var_G > var_B ? var_G : var_B ) ? var_R : ( var_G > var_B ? var_G : var_B ) );
-
- F32 del_Max = var_Max - var_Min;
-
- F32 L = ( var_Max + var_Min ) / 2.0f;
- F32 H = 0.0f;
- F32 S = 0.0f;
-
- if ( del_Max == 0.0f )
- {
- H = 0.0f;
- S = 0.0f;
- }
- else
- {
- if ( L < 0.5 )
- S = del_Max / ( var_Max + var_Min );
- else
- S = del_Max / ( 2.0f - var_Max - var_Min );
-
- F32 del_R = ( ( ( var_Max - var_R ) / 6.0f ) + ( del_Max / 2.0f ) ) / del_Max;
- F32 del_G = ( ( ( var_Max - var_G ) / 6.0f ) + ( del_Max / 2.0f ) ) / del_Max;
- F32 del_B = ( ( ( var_Max - var_B ) / 6.0f ) + ( del_Max / 2.0f ) ) / del_Max;
-
- if ( var_R >= var_Max )
- H = del_B - del_G;
- else
- if ( var_G >= var_Max )
- H = ( 1.0f / 3.0f ) + del_R - del_B;
- else
- if ( var_B >= var_Max )
- H = ( 2.0f / 3.0f ) + del_G - del_R;
-
- if ( H < 0.0f ) H += 1.0f;
- if ( H > 1.0f ) H -= 1.0f;
- }
-
- // scale to meet calculation requirements
- hValOut = H * 360.0f / 360.0f;
- sValOut = S * 100.0f / 100.0f;
- lValOut = L * 100.0f / 100.0f;
-}
//////////////////////////////////////////////////////////////////////////////
//
@@ -426,7 +374,7 @@ setCurRgb ( F32 curRIn, F32 curGIn, F32 curBIn )
curB = curBIn;
// update corresponding HSL values and
- rgbToHsl ( curR, curG, curB, curH, curS, curL );
+ LLColor3(curRIn, curGIn, curBIn).calcHSL(&curH, &curS, &curL);
// color changed so update text fields (fixes SL-16968)
// HACK: turn off the call back wilst we update the text or we recurse ourselves into oblivion
@@ -573,11 +521,10 @@ void LLFloaterColorPicker::onColorSelect( const LLTextureEntry& te, void *data )
}
}
-void LLFloaterColorPicker::onMouseCaptureLost(LLMouseHandler *old_captor)
+void LLFloaterColorPicker::onMouseCaptureLost()
{
- LLFloaterColorPicker* self = (LLFloaterColorPicker*)old_captor;
- self->setMouseDownInHueRegion(FALSE);
- self->setMouseDownInLumRegion(FALSE);
+ setMouseDownInHueRegion(FALSE);
+ setMouseDownInLumRegion(FALSE);
}
//////////////////////////////////////////////////////////////////////////////
@@ -726,7 +673,10 @@ getComplimentaryColor ( LLColor4& backgroundColor )
{
// going to base calculation on luminance
F32 hVal, sVal, lVal;
- rgbToHsl ( backgroundColor [ 0 ], backgroundColor [ 1 ], backgroundColor [ 2 ], hVal, sVal, lVal );
+ backgroundColor.calcHSL(&hVal, &sVal, &lVal);
+ hVal *= 360.f;
+ sVal *= 100.f;
+ lVal *= 100.f;
// fairly simple heuristic for now...!
if ( lVal < 0.5f )
@@ -961,7 +911,7 @@ handleMouseDown ( S32 x, S32 y, MASK mask )
if ( rgbAreaRect.pointInRect ( x, y ) )
{
- gViewerWindow->setMouseCapture(this, onMouseCaptureLost);
+ gViewerWindow->setMouseCapture(this);
// mouse button down
setMouseDownInHueRegion ( TRUE );
@@ -980,7 +930,7 @@ handleMouseDown ( S32 x, S32 y, MASK mask )
if ( lumAreaRect.pointInRect ( x, y ) )
{
- gViewerWindow->setMouseCapture(this, onMouseCaptureLost);
+ gViewerWindow->setMouseCapture(this);
// mouse button down
setMouseDownInLumRegion ( TRUE );
@@ -1193,9 +1143,9 @@ handleMouseUp ( S32 x, S32 y, MASK mask )
// mouse button not down in color swatch anymore
mMouseDownInSwatch = false;
- if (gViewerWindow->hasMouseCapture(this))
+ if (hasMouseCapture())
{
- gViewerWindow->setMouseCapture(NULL, NULL);
+ gViewerWindow->setMouseCapture(NULL);
}
// dispatch to base class for the rest of things
diff --git a/linden/indra/newview/llfloatercolorpicker.h b/linden/indra/newview/llfloatercolorpicker.h
index 953b402..6c5fc85 100644
--- a/linden/indra/newview/llfloatercolorpicker.h
+++ b/linden/indra/newview/llfloatercolorpicker.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -55,6 +56,7 @@ class LLFloaterColorPicker
virtual BOOL handleMouseDown ( S32 x, S32 y, MASK mask );
virtual BOOL handleMouseUp ( S32 x, S32 y, MASK mask );
virtual BOOL handleHover ( S32 x, S32 y, MASK mask );
+ virtual void onMouseCaptureLost();
virtual void onClose(bool app_quitting);
// implicit methods
@@ -109,11 +111,9 @@ class LLFloaterColorPicker
// convert RGB to HSL and vice-versa
void hslToRgb ( F32 hValIn, F32 sValIn, F32 lValIn, F32& rValOut, F32& gValOut, F32& bValOut );
- void rgbToHsl ( F32 rValIn, F32 gValIn, F32 bValIn, F32& hValOut, F32& sValOut, F32& lValOut );
F32 hueToRgb ( F32 val1In, F32 val2In, F32 valHUeIn );
void setActive(BOOL active);
- static void onMouseCaptureLost(LLMouseHandler* old_captor);
protected:
// callbacks
diff --git a/linden/indra/newview/llfloatercustomize.cpp b/linden/indra/newview/llfloatercustomize.cpp
index 7ac50ae..ee83bf9 100644
--- a/linden/indra/newview/llfloatercustomize.cpp
+++ b/linden/indra/newview/llfloatercustomize.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloatercustomize.h b/linden/indra/newview/llfloatercustomize.h
index 47419e2..6eccdcc 100644
--- a/linden/indra/newview/llfloatercustomize.h
+++ b/linden/indra/newview/llfloatercustomize.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterdirectory.cpp b/linden/indra/newview/llfloaterdirectory.cpp
index 846a2fb..aea55f7 100644
--- a/linden/indra/newview/llfloaterdirectory.cpp
+++ b/linden/indra/newview/llfloaterdirectory.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterdirectory.h b/linden/indra/newview/llfloaterdirectory.h
index 34cf43d..b57dc14 100644
--- a/linden/indra/newview/llfloaterdirectory.h
+++ b/linden/indra/newview/llfloaterdirectory.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloatereditui.cpp b/linden/indra/newview/llfloatereditui.cpp
index 3af5741..81c93ce 100644
--- a/linden/indra/newview/llfloatereditui.cpp
+++ b/linden/indra/newview/llfloatereditui.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloatereditui.h b/linden/indra/newview/llfloatereditui.h
index 0f57e7d..054339f 100644
--- a/linden/indra/newview/llfloatereditui.h
+++ b/linden/indra/newview/llfloatereditui.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterfriends.cpp b/linden/indra/newview/llfloaterfriends.cpp
index 8a36620..8d39890 100644
--- a/linden/indra/newview/llfloaterfriends.cpp
+++ b/linden/indra/newview/llfloaterfriends.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -520,14 +521,11 @@ void LLFloaterFriends::onClickIM(void* user_data)
}
else
{
- LLUUID session_id;
- session_id.generate();
gIMView->setFloaterOpen(TRUE);
- gIMView->addSession(
- "Friends Conference",
- IM_SESSION_ADD,
- session_id,
- ids);
+ gIMView->addSession("Friends Conference",
+ IM_SESSION_CONFERENCE_START,
+ ids[0],
+ ids);
}
}
}
@@ -545,38 +543,51 @@ void LLFloaterFriends::requestFriendship(const LLUUID& target_id, const LLString
IM_FRIENDSHIP_OFFERED);
}
+struct LLAddFriendData
+{
+ LLUUID mID;
+ std::string mName;
+};
+
// static
-void LLFloaterFriends::callbackAddFriend(S32 option, void* user_data)
+void LLFloaterFriends::callbackAddFriend(S32 option, void* data)
{
+ LLAddFriendData* add = (LLAddFriendData*)data;
if (option == 0)
{
- LLFloaterFriends* self = (LLFloaterFriends*)user_data;
- requestFriendship(self->mAddFriendID, self->mAddFriendName);
+ requestFriendship(add->mID, add->mName);
}
+ delete add;
}
// static
void LLFloaterFriends::onPickAvatar(const std::vector& names,
const std::vector& ids,
- void* user_data)
+ void* )
{
if (names.empty()) return;
if (ids.empty()) return;
+ requestFriendshipDialog(ids[0], names[0]);
+}
- LLFloaterFriends* self = (LLFloaterFriends*)user_data;
- self->mAddFriendID = ids[0];
- self->mAddFriendName = names[0];
-
- if(ids[0] == gAgentID)
+// static
+void LLFloaterFriends::requestFriendshipDialog(const LLUUID& id,
+ const std::string& name)
+{
+ if(id == gAgentID)
{
LLNotifyBox::showXml("AddSelfFriend");
return;
}
+ LLAddFriendData* data = new LLAddFriendData();
+ data->mID = id;
+ data->mName = name;
+
// TODO: accept a line of text with this dialog
LLString::format_map_t args;
- args["[NAME]"] = names[0];
- gViewerWindow->alertXml("AddFriend", args, callbackAddFriend, user_data);
+ args["[NAME]"] = name;
+ gViewerWindow->alertXml("AddFriend", args, callbackAddFriend, data);
}
// static
diff --git a/linden/indra/newview/llfloaterfriends.h b/linden/indra/newview/llfloaterfriends.h
index 236ac34..327a8cf 100644
--- a/linden/indra/newview/llfloaterfriends.h
+++ b/linden/indra/newview/llfloaterfriends.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -72,7 +73,14 @@ public:
// Toggles visibility of floater
static void toggle(void* unused = NULL);
- static void requestFriendship(const LLUUID& target_id, const LLString& target_name);
+ // Show a dialog explaining what friendship entails, then request
+ // friendship. JC
+ static void requestFriendshipDialog(const LLUUID& target_id,
+ const std::string& target_name);
+
+ // Just request friendship, no dialog.
+ static void requestFriendship(const LLUUID& target_id,
+ const LLString& target_name);
private:
diff --git a/linden/indra/newview/llfloatergesture.cpp b/linden/indra/newview/llfloatergesture.cpp
index 313dccf..5b191e4 100644
--- a/linden/indra/newview/llfloatergesture.cpp
+++ b/linden/indra/newview/llfloatergesture.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloatergesture.h b/linden/indra/newview/llfloatergesture.h
index 51f7566..d463e09 100644
--- a/linden/indra/newview/llfloatergesture.h
+++ b/linden/indra/newview/llfloatergesture.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloatergodtools.cpp b/linden/indra/newview/llfloatergodtools.cpp
index e1d12d2..7376bba 100644
--- a/linden/indra/newview/llfloatergodtools.cpp
+++ b/linden/indra/newview/llfloatergodtools.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -1344,11 +1345,10 @@ void LLPanelRequestTools::refresh()
list->operateOnAll(LLCtrlListInterface::OP_DELETE);
list->addSimpleElement(SELECTION);
list->addSimpleElement(AGENT_REGION);
- LLViewerRegion* regionp;
- for(regionp = gWorldp->mActiveRegionList.getFirstData();
- regionp != NULL;
- regionp = gWorldp->mActiveRegionList.getNextData())
+ for (LLWorld::region_list_t::iterator iter = gWorldp->mActiveRegionList.begin();
+ iter != gWorldp->mActiveRegionList.end(); ++iter)
{
+ LLViewerRegion* regionp = *iter;
LLString name = regionp->getName();
if (!name.empty())
{
@@ -1406,11 +1406,10 @@ void LLPanelRequestTools::onClickRequest(void* data)
else
{
// find region by name
- LLViewerRegion* regionp;
- for(regionp = gWorldp->mActiveRegionList.getFirstData();
- regionp != NULL;
- regionp = gWorldp->mActiveRegionList.getNextData())
+ for (LLWorld::region_list_t::iterator iter = gWorldp->mActiveRegionList.begin();
+ iter != gWorldp->mActiveRegionList.end(); ++iter)
{
+ LLViewerRegion* regionp = *iter;
if(dest == regionp->getName())
{
// found it
diff --git a/linden/indra/newview/llfloatergodtools.h b/linden/indra/newview/llfloatergodtools.h
index 876d5e4..908ef63 100644
--- a/linden/indra/newview/llfloatergodtools.h
+++ b/linden/indra/newview/llfloatergodtools.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloatergroupinfo.cpp b/linden/indra/newview/llfloatergroupinfo.cpp
index a807774..348f31f 100644
--- a/linden/indra/newview/llfloatergroupinfo.cpp
+++ b/linden/indra/newview/llfloatergroupinfo.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloatergroupinfo.h b/linden/indra/newview/llfloatergroupinfo.h
index 00ecca5..b89fdc9 100644
--- a/linden/indra/newview/llfloatergroupinfo.h
+++ b/linden/indra/newview/llfloatergroupinfo.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloatergroupinvite.cpp b/linden/indra/newview/llfloatergroupinvite.cpp
index 0c8b526..a6d81ec 100644
--- a/linden/indra/newview/llfloatergroupinvite.cpp
+++ b/linden/indra/newview/llfloatergroupinvite.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloatergroupinvite.h b/linden/indra/newview/llfloatergroupinvite.h
index 6ee294c..c61adee 100644
--- a/linden/indra/newview/llfloatergroupinvite.h
+++ b/linden/indra/newview/llfloatergroupinvite.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloatergroups.cpp b/linden/indra/newview/llfloatergroups.cpp
index 11b58d5..53d5147 100644
--- a/linden/indra/newview/llfloatergroups.cpp
+++ b/linden/indra/newview/llfloatergroups.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloatergroups.h b/linden/indra/newview/llfloatergroups.h
index ed382f0..9c51d2f 100644
--- a/linden/indra/newview/llfloatergroups.h
+++ b/linden/indra/newview/llfloatergroups.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterhtml.cpp b/linden/indra/newview/llfloaterhtml.cpp
index 8a10cfe..519a031 100644
--- a/linden/indra/newview/llfloaterhtml.cpp
+++ b/linden/indra/newview/llfloaterhtml.cpp
@@ -1,9 +1,10 @@
/**
* @file llfloaterhtml.cpp
- * @brief In-world web browser
+ * @brief In-world HTML dialog
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -27,68 +28,127 @@
#include "llviewerprecompiledheaders.h"
-#include "llfloaterhtml.h"
-
-#include "lldir.h"
-
-#include "llbutton.h"
-#include "llviewertexteditor.h"
-#include "lllineeditor.h"
-#include "lltextbox.h"
#include "llvieweruictrlfactory.h"
+#include "llviewerwindow.h"
#include "llviewercontrol.h"
-#include "llwebbrowserctrl.h"
-#include "llviewerwindow.h" // incBusyCount()
-#include "llfloaterworldmap.h" //for sl urls
-#include "viewer.h"
+#include "llfloaterhtml.h"
+#include "llfloaterhtmlhelp.h"
-const S32 LINE = 16;
-const S32 HPAD = 4;
-const S32 HPAD_SMALL = 2;
-const S32 HSEPARATOR = 3 * HPAD;
-const S32 VPAD = 4;
+LLFloaterHtml* LLFloaterHtml::sInstance = 0;
-const S32 SCROLLER_HPAD = 3;
+////////////////////////////////////////////////////////////////////////////////
+//
+LLFloaterHtml* LLFloaterHtml::getInstance()
+{
+ if ( ! sInstance )
+ sInstance = new LLFloaterHtml;
-BOOL process_secondlife_url(LLString url)
+ return sInstance;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//
+LLFloaterHtml::LLFloaterHtml()
+: LLFloater( "HTML Floater" ),
+ mWebBrowser( 0 )
{
- S32 strpos, strpos2;
+ // create floater from its XML definition
+ gUICtrlFactory->buildFloater( this, "floater_html.xml" );
- LLString slurlID = "slurl.com/secondlife/";
- strpos = url.find(slurlID);
-
- if (strpos < 0)
- {
- slurlID="secondlife://";
- strpos = url.find(slurlID);
- }
-
- if (strpos >= 0)
+ // reposition floater from saved settings
+ LLRect rect = gSavedSettings.getRect( "HtmlFloaterRect" );
+ reshape( rect.getWidth(), rect.getHeight(), FALSE );
+ setRect( rect );
+
+ mWebBrowser = LLViewerUICtrlFactory::getWebBrowserByName(this, "html_floater_browser" );
+ if ( mWebBrowser )
{
- LLString simname;
+ // observe browser events
+ mWebBrowser->addObserver( this );
+
+ // make links open in external browser
+ mWebBrowser->setOpenInExternalBrowser( true );
+
+ // don't automatically open secondlife links since we want to catch
+ // special ones that do other stuff (like open F1 Help)
+ mWebBrowser->setOpenSecondLifeLinksInMap( false );
+ };
+
+ childSetAction("close_btn", onClickClose, this);
+ setDefaultBtn("close_btn");
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//
+LLFloaterHtml::~LLFloaterHtml()
+{
+ // stop observing browser events
+ if ( mWebBrowser )
+ mWebBrowser->remObserver( this );
+
+ // save position of floater
+ gSavedSettings.setRect( "HtmlFloaterRect", mRect );
+
+ sInstance = 0;
+}
- strpos+=slurlID.length();
- strpos2=url.find("/",strpos);
- if (strpos2 < strpos) strpos2=url.length();
- simname="secondlife://" + url.substr(strpos,url.length() - strpos);
+////////////////////////////////////////////////////////////////////////////////
+//
+void LLFloaterHtml::show( LLString content_id )
+{
+ // calculate the XML labels we'll need (if only XML folders worked)
+ LLString title_str = content_id + "_title";
+ LLString url_str = content_id + "_url";
+
+ // set the title
+ setTitle( childGetValue( title_str ).asString() );
+
+ // navigate to the URL
+ if ( mWebBrowser )
+ mWebBrowser->navigateTo( childGetValue( url_str ).asString() );
+
+ // make floater appear
+ setVisibleAndFrontmost();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//
+void LLFloaterHtml::onClose( bool app_quitting )
+{
+ setVisible( false );
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//
+void LLFloaterHtml::onClickClose( void* data )
+{
+ LLFloaterHtml* self = ( LLFloaterHtml* )data;
- LLURLSimString::setString( simname );
- LLURLSimString::parse();
+ self->setVisible( false );
+}
- // if there is a world map
- if ( gFloaterWorldMap )
+////////////////////////////////////////////////////////////////////////////////
+//
+void LLFloaterHtml::onClickLinkSecondLife( const EventType& eventIn )
+{
+ const std::string protocol( "secondlife://app." );
+
+ // special 'app' secondlife link (using a different protocol - one that isn't registered in the browser) causes bad
+ // things to happen and Mozilla stops responding because it can't display the "invalid protocol dialog)
+ if ( LLString::compareInsensitive( eventIn.getStringValue().substr( 0, protocol.length() ).c_str(), protocol.c_str() ) == 0 )
+ {
+ // extract the command string
+ LLString cmd = eventIn.getStringValue().substr( protocol.length() );
+
+ // command is open the F1 Help floater
+ if ( LLString::compareInsensitive( cmd.c_str() , "floater.html.help" ) == 0 )
{
- // mark where the destination is
- gFloaterWorldMap->trackURL( LLURLSimString::sInstance.mSimName.c_str(),
- LLURLSimString::sInstance.mX,
- LLURLSimString::sInstance.mY,
- LLURLSimString::sInstance.mZ );
-
- // display map
- LLFloaterWorldMap::show( NULL, TRUE );
+ gViewerHtmlHelp.show();
};
-
- return TRUE;
}
- return FALSE;
-}
+ else
+ // regular secondlife link - just open the map as normal
+ {
+ mWebBrowser->openMapAtlocation( eventIn.getStringValue() );
+ };
+};
\ No newline at end of file
diff --git a/linden/indra/newview/llfloaterhtml.h b/linden/indra/newview/llfloaterhtml.h
index daef04b..9a09baf 100644
--- a/linden/indra/newview/llfloaterhtml.h
+++ b/linden/indra/newview/llfloaterhtml.h
@@ -1,10 +1,11 @@
/**
* @file llfloaterhtml.h
* @author James Cook
- * @brief In-world web browser
+ * @brief In-world HTML dialog
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -29,6 +30,30 @@
#ifndef LL_LLFLOATERHTML_H
#define LL_LLFLOATERHTML_H
-BOOL process_secondlife_url(LLString url);
+#include "llwebbrowserctrl.h"
+#include "llfloater.h"
-#endif
+class LLFloaterHtml :
+ public LLFloater,
+ public LLWebBrowserCtrlObserver
+{
+ public:
+ static LLFloaterHtml* getInstance();
+ virtual ~LLFloaterHtml();
+
+ virtual void onClose( bool app_quitting );
+
+ void show( LLString content_id );
+ static void onClickClose( void* data );
+
+ // observable browser events
+ virtual void onClickLinkSecondLife( const EventType& eventIn );
+
+ private:
+ LLFloaterHtml();
+ LLWebBrowserCtrl* mWebBrowser;
+ static LLFloaterHtml* sInstance;
+ LLButton* mCloseButton;
+};
+
+#endif
\ No newline at end of file
diff --git a/linden/indra/newview/llfloaterhtmlfind.cpp b/linden/indra/newview/llfloaterhtmlfind.cpp
index b233c1b..4aeea21 100644
--- a/linden/indra/newview/llfloaterhtmlfind.cpp
+++ b/linden/indra/newview/llfloaterhtmlfind.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterhtmlfind.h b/linden/indra/newview/llfloaterhtmlfind.h
index 39a6737..89f2138 100644
--- a/linden/indra/newview/llfloaterhtmlfind.h
+++ b/linden/indra/newview/llfloaterhtmlfind.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterhtmlhelp.cpp b/linden/indra/newview/llfloaterhtmlhelp.cpp
index 50dd14c..4612674 100644
--- a/linden/indra/newview/llfloaterhtmlhelp.cpp
+++ b/linden/indra/newview/llfloaterhtmlhelp.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -36,18 +37,21 @@
#if LL_LIBXUL_ENABLED
+LLViewerHtmlHelp gViewerHtmlHelp;
+
class LLFloaterHtmlHelp :
public LLFloater,
public LLWebBrowserCtrlObserver
{
public:
- LLFloaterHtmlHelp();
+ LLFloaterHtmlHelp(std::string start_url = "");
virtual ~LLFloaterHtmlHelp();
virtual void onClose( bool app_quitting );
virtual void draw();
- static void show( void* url_string = NULL );
+ static void show();
+ static void show(std::string url);
static void onClickBack( void* data );
static void onClickHome( void* data );
static void onClickForward( void* data );
@@ -77,7 +81,7 @@ BOOL LLFloaterHtmlHelp::sFloaterOpened = FALSE;
////////////////////////////////////////////////////////////////////////////////
//
-LLFloaterHtmlHelp::LLFloaterHtmlHelp()
+LLFloaterHtmlHelp::LLFloaterHtmlHelp(std::string start_url)
: LLFloater( "HTML Help" ),
mWebBrowser( 0 ),
mStatusTextContents( "" ),
@@ -100,16 +104,22 @@ LLFloaterHtmlHelp::LLFloaterHtmlHelp()
{
// observe browser control events
mWebBrowser->addObserver( this );
-
- // if the last page we were at before the client was closed is valid, go there and
- // override what is in the XML file
- // (not when the window was closed - it's only ever hidden - not closed)
- LLString lastPageUrl = gSavedSettings.getString( "HtmlHelpLastPage" );
- if ( lastPageUrl != "" )
+ if (start_url != "")
{
- mWebBrowser->navigateTo( lastPageUrl );
- };
+ mWebBrowser->navigateTo( start_url );
+ }
+ else
+ {
+ // if the last page we were at before the client was closed is valid, go there and
+ // override what is in the XML file
+ // (not when the window was closed - it's only ever hidden - not closed)
+ LLString lastPageUrl = gSavedSettings.getString( "HtmlHelpLastPage" );
+ if ( lastPageUrl != "" )
+ {
+ mWebBrowser->navigateTo( lastPageUrl );
+ };
+ }
};
}
@@ -151,17 +161,21 @@ void LLFloaterHtmlHelp::draw()
////////////////////////////////////////////////////////////////////////////////
//
-void LLFloaterHtmlHelp::show( void* url_string )
+void LLFloaterHtmlHelp::show(std::string url)
{
sFloaterOpened = true;
if ( sInstance )
{
+ if (sInstance->mWebBrowser)
+ {
+ sInstance->mWebBrowser->navigateTo(url);
+ }
sInstance->setVisibleAndFrontmost();
return;
}
- LLFloaterHtmlHelp* self = new LLFloaterHtmlHelp;
+ LLFloaterHtmlHelp* self = new LLFloaterHtmlHelp(url);
// reposition floater from saved settings
LLRect rect = gSavedSettings.getRect( "HtmlHelpRect" );
@@ -248,14 +262,22 @@ void LLFloaterHtmlHelp::onLocationChange( const EventType& eventIn )
////////////////////////////////////////////////////////////////////////////////
//
-// static
-void LLHtmlHelp::show(void* url_string)
+LLViewerHtmlHelp::LLViewerHtmlHelp()
+{
+ LLUI::setHtmlHelp(this);
+}
+
+LLViewerHtmlHelp::~LLViewerHtmlHelp()
+{
+ LLUI::setHtmlHelp(NULL);
+}
+
+void LLViewerHtmlHelp::show(std::string url)
{
- LLFloaterHtmlHelp::show(url_string);
+ LLFloaterHtmlHelp::show(url);
}
-// static
-BOOL LLHtmlHelp::getFloaterOpened()
+BOOL LLViewerHtmlHelp::getFloaterOpened()
{
return LLFloaterHtmlHelp::sFloaterOpened;
}
diff --git a/linden/indra/newview/llfloaterhtmlhelp.h b/linden/indra/newview/llfloaterhtmlhelp.h
index 5868db0..9e9c88d 100644
--- a/linden/indra/newview/llfloaterhtmlhelp.h
+++ b/linden/indra/newview/llfloaterhtmlhelp.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -30,14 +31,20 @@
#ifndef LL_LLFLOATERHTMLHELP_H
#define LL_LLFLOATERHTMLHELP_H
-class LLHtmlHelp
+#include "llhtmlhelp.h"
+
+class LLViewerHtmlHelp : public LLHtmlHelp
{
public:
- static void show(void* url_string = NULL);
- static BOOL getFloaterOpened();
+ LLViewerHtmlHelp();
+ virtual ~LLViewerHtmlHelp();
+
+ /*virtual*/ void show(std::string start_url = "");
+ /*virtual*/ BOOL getFloaterOpened();
};
+extern LLViewerHtmlHelp gViewerHtmlHelp;
+
#endif // LL_LLFLOATERHTMLHELP_H
#endif // LL_LIBXUL_ENABLED
-
diff --git a/linden/indra/newview/llfloaterimagepreview.cpp b/linden/indra/newview/llfloaterimagepreview.cpp
index 9c68ca8..9237380 100644
--- a/linden/indra/newview/llfloaterimagepreview.cpp
+++ b/linden/indra/newview/llfloaterimagepreview.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -375,7 +376,7 @@ BOOL LLFloaterImagePreview::handleMouseDown(S32 x, S32 y, MASK mask)
if (mPreviewRect.pointInRect(x, y))
{
bringToFront( x, y );
- gViewerWindow->setMouseCapture(this, onMouseCaptureLost);
+ gViewerWindow->setMouseCapture(this);
gViewerWindow->hideCursor();
mLastMouseX = x;
mLastMouseY = y;
@@ -390,7 +391,7 @@ BOOL LLFloaterImagePreview::handleMouseDown(S32 x, S32 y, MASK mask)
//-----------------------------------------------------------------------------
BOOL LLFloaterImagePreview::handleMouseUp(S32 x, S32 y, MASK mask)
{
- gViewerWindow->setMouseCapture(FALSE, NULL);
+ gViewerWindow->setMouseCapture(FALSE);
gViewerWindow->showCursor();
return LLFloater::handleMouseUp(x, y, mask);
}
@@ -402,7 +403,7 @@ BOOL LLFloaterImagePreview::handleHover(S32 x, S32 y, MASK mask)
{
MASK local_mask = mask & ~MASK_ALT;
- if (mAvatarPreview && gViewerWindow->hasMouseCapture(this))
+ if (mAvatarPreview && hasMouseCapture())
{
if (local_mask == MASK_PAN)
{
diff --git a/linden/indra/newview/llfloaterimagepreview.h b/linden/indra/newview/llfloaterimagepreview.h
index a53cd88..57874f1 100644
--- a/linden/indra/newview/llfloaterimagepreview.h
+++ b/linden/indra/newview/llfloaterimagepreview.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterimport.cpp b/linden/indra/newview/llfloaterimport.cpp
index 478b5d7..72cf2e0 100644
--- a/linden/indra/newview/llfloaterimport.cpp
+++ b/linden/indra/newview/llfloaterimport.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -148,9 +149,6 @@ BOOL LLFloaterImport::postBuild()
setDefaultBtn(mOKBtn);
mImageLabel = LLViewerUICtrlFactory::getTextBoxByName(this, "preview_label");
-
- LLFontGL *default_font = LLFontGL::sSansSerif;
-
mImportList = LLViewerUICtrlFactory::getScrollListByName(this, "upload_list");
bool object_file_read = false;
@@ -180,17 +178,20 @@ BOOL LLFloaterImport::postBuild()
task_name_node->getStringValue(1, &task_name);
}
{
- LLScrollListItem *new_item = new LLScrollListItem(TRUE, task);
- new_item->addColumn("OBJECT", default_font, 60);
LLString output_line;
char buffer[20]; /*Flawfinder: ignore*/
- snprintf(buffer, sizeof(buffer), "%d", (S32)tasks_list.size()); /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), "%d", (S32)tasks_list.size()); /* Flawfinder: ignore */
output_line.append(buffer);
output_line.append(" prims");
- new_item->addColumn(output_line, default_font, 80);
- new_item->addColumn(task_name, default_font);
- new_item->setEnabled(FALSE);
- mImportList->addItem(new_item);
+
+ LLSD row;
+ row["columns"][0]["value"] = "OBJECT";
+ row["columns"][0]["width"] = 60;
+ row["columns"][1]["value"] = output_line;
+ row["columns"][1]["width"] = 80;
+ row["columns"][2]["value"] = task_name;
+ row["enabled"] = false;
+ mImportList->addElement(row);
}
mImportList->setCanSelect(TRUE);
mImportList->setAllowMultipleSelection(TRUE);
@@ -286,12 +287,13 @@ BOOL LLFloaterImport::postBuild()
}
for (U32 image_num=0; image_numaddColumn("IMAGE", default_font, 60);
- new_item->addColumn(image_changed[image_num]?"NEW":"NOT NEW", default_font, 80);
- new_item->addColumn(unique_images[image_num].c_str(), default_font);
- mImportList->addItem(new_item);
+ LLSD row;
+ row["columns"][0]["value"] = "IMAGE";
+ row["columns"][0]["width"] = 60;
+ row["columns"][1]["value"] = image_changed[image_num]?"NEW":"NOT NEW";
+ row["columns"][1]["width"] = 80;
+ row["columns"][2]["value"] = unique_images[image_num];
+ mImportList->addElement(row);
mImportList->setCanSelect(TRUE);
image_count++;
}
diff --git a/linden/indra/newview/llfloaterimport.h b/linden/indra/newview/llfloaterimport.h
index b12eff7..518ddc4 100644
--- a/linden/indra/newview/llfloaterimport.h
+++ b/linden/indra/newview/llfloaterimport.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterinspect.cpp b/linden/indra/newview/llfloaterinspect.cpp
index 8bb73e3..1548c0e 100644
--- a/linden/indra/newview/llfloaterinspect.cpp
+++ b/linden/indra/newview/llfloaterinspect.cpp
@@ -218,4 +218,3 @@ void LLFloaterInspect::draw()
LLFloater::draw();
}
-
diff --git a/linden/indra/newview/llfloaterinspect.h b/linden/indra/newview/llfloaterinspect.h
index 51549ad..ab453b4 100644
--- a/linden/indra/newview/llfloaterinspect.h
+++ b/linden/indra/newview/llfloaterinspect.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterland.cpp b/linden/indra/newview/llfloaterland.cpp
index 6bb6aff..9ff44f4 100644
--- a/linden/indra/newview/llfloaterland.cpp
+++ b/linden/indra/newview/llfloaterland.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -411,8 +412,8 @@ BOOL LLPanelLandGeneral::postBuild()
mBtnDeedToGroup->setClickedCallback(onClickDeed, this);
- mCheckContributeWithDeed = LLUICtrlFactory::getCheckBoxByName(this, "check contib");
- childSetCommitCallback("check contib", onCommitAny, this);
+ mCheckContributeWithDeed = LLUICtrlFactory::getCheckBoxByName(this, "check contrib");
+ childSetCommitCallback("check contrib", onCommitAny, this);
@@ -589,7 +590,7 @@ void LLPanelLandGeneral::refresh()
else if(parcel->getAuctionID())
{
char auction_str[MAX_STRING]; /*Flawfinder: ignore*/
- snprintf(auction_str, sizeof(auction_str), "Auction ID: %u", parcel->getAuctionID()); /*Flawfinder: ignore*/
+ snprintf(auction_str, sizeof(auction_str), "Auction ID: %u", parcel->getAuctionID()); /* Flawfinder: ignore */
mTextSalePending->setText(auction_str);
mTextSalePending->setEnabled(TRUE);
}
@@ -729,13 +730,13 @@ void LLPanelLandGeneral::refresh()
&dwell);
// Area
- snprintf(price, sizeof(price), "%d sq. m.", area); /*Flawfinder: ignore*/
+ snprintf(price, sizeof(price), "%d sq. m.", area); /* Flawfinder: ignore */
label = AREA;
mTextPriceLabel->setText(label);
mTextPrice->setText(price);
- snprintf(price, sizeof(price), "%.0f", dwell); /*Flawfinder: ignore*/
+ snprintf(price, sizeof(price), "%.0f", dwell); /* Flawfinder: ignore */
mTextDwell->setText(price);
if(region_owner)
@@ -780,7 +781,7 @@ void LLPanelLandGeneral::refreshNames()
char owner_first[MAX_STRING]; /*Flawfinder: ignore*/
char owner_last[MAX_STRING]; /*Flawfinder: ignore*/
gCacheName->getName(parcel->getOwnerID(), owner_first, owner_last);
- snprintf(buffer, sizeof(buffer), "%s %s", owner_first, owner_last); /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), "%s %s", owner_first, owner_last); /* Flawfinder: ignore */
}
if(LLParcel::OS_LEASE_PENDING == parcel->getOwnershipStatus())
@@ -812,10 +813,6 @@ void LLPanelLandGeneral::refreshNames()
mSaleInfoForSale2->setTextArg("[BUYER]", name);
}
- else if(parcel->getReservedForNewbie())
- {
- mSaleInfoForSale2->setTextArg("[BUYER]", childGetText("new users only"));
- }
else
{
mSaleInfoForSale2->setTextArg("[BUYER]", childGetText("anyone"));
@@ -941,8 +938,8 @@ void LLPanelLandGeneral::onClickBuyPass(void* data)
F32 pass_hours = parcel->getPassHours();
char cost[256], time[256]; /*Flawfinder: ignore*/
- snprintf(cost, sizeof(cost), "%d", pass_price); /*Flawfinder: ignore*/
- snprintf(time, sizeof(time), "%.2f", pass_hours); /*Flawfinder: ignore*/
+ snprintf(cost, sizeof(cost), "%d", pass_price); /* Flawfinder: ignore */
+ snprintf(time, sizeof(time), "%.2f", pass_hours); /* Flawfinder: ignore */
LLStringBase::format_map_t args;
args["[COST]"] = cost;
@@ -1054,65 +1051,39 @@ BOOL LLPanelLandObjects::postBuild()
mFirstReply = TRUE;
mParcelObjectBonus = LLUICtrlFactory::getTextBoxByName(this, "Simulator Primitive Bonus Factor: 1.00");
-
- mSWTotalObjectsLabel = LLUICtrlFactory::getTextBoxByName(this, "Simulator primitive usage:");
mSWTotalObjects = LLUICtrlFactory::getTextBoxByName(this, "0 out of 0 available");
-
- mObjectContributionLabel = LLUICtrlFactory::getTextBoxByName(this, "Primitives parcel supports:");
mObjectContribution = LLUICtrlFactory::getTextBoxByName(this, "object_contrib_text");
-
-
- mTotalObjectsLabel = LLUICtrlFactory::getTextBoxByName(this, "Primitives on parcel:");
mTotalObjects = LLUICtrlFactory::getTextBoxByName(this, "total_objects_text");
-
-
- mOwnerObjectsLabel = LLUICtrlFactory::getTextBoxByName(this, "Owned by parcel owner:");
mOwnerObjects = LLUICtrlFactory::getTextBoxByName(this, "owner_objects_text");
-
mBtnShowOwnerObjects = LLUICtrlFactory::getButtonByName(this, "ShowOwner");
mBtnShowOwnerObjects->setClickedCallback(onClickShowOwnerObjects, this);
-
+
mBtnReturnOwnerObjects = LLUICtrlFactory::getButtonByName(this, "ReturnOwner...");
mBtnReturnOwnerObjects->setClickedCallback(onClickReturnOwnerObjects, this);
-
- mGroupObjectsLabel = LLUICtrlFactory::getTextBoxByName(this, "Set to group:");
mGroupObjects = LLUICtrlFactory::getTextBoxByName(this, "group_objects_text");
-
-
mBtnShowGroupObjects = LLUICtrlFactory::getButtonByName(this, "ShowGroup");
mBtnShowGroupObjects->setClickedCallback(onClickShowGroupObjects, this);
-
+
mBtnReturnGroupObjects = LLUICtrlFactory::getButtonByName(this, "ReturnGroup...");
mBtnReturnGroupObjects->setClickedCallback(onClickReturnGroupObjects, this);
-
- mOtherObjectsLabel = LLUICtrlFactory::getTextBoxByName(this, "Owned by others:");
mOtherObjects = LLUICtrlFactory::getTextBoxByName(this, "other_objects_text");
-
mBtnShowOtherObjects = LLUICtrlFactory::getButtonByName(this, "ShowOther");
mBtnShowOtherObjects->setClickedCallback(onClickShowOtherObjects, this);
-
+
mBtnReturnOtherObjects = LLUICtrlFactory::getButtonByName(this, "ReturnOther...");
mBtnReturnOtherObjects->setClickedCallback(onClickReturnOtherObjects, this);
-
- mSelectedObjectsLabel = LLUICtrlFactory::getTextBoxByName(this, "Selected / sat upon:");
- mSelectedObjects = LLUICtrlFactory::getTextBoxByName(this, "selected_objects_text");
- mCleanOtherObjectsLabel = LLUICtrlFactory::getTextBoxByName(this, "Autoreturn other resident's objects (minutes, 0 for off):");
-
+ mSelectedObjects = LLUICtrlFactory::getTextBoxByName(this, "selected_objects_text");
mCleanOtherObjectsTime = LLUICtrlFactory::getLineEditorByName(this, "clean other time");
mCleanOtherObjectsTime->setFocusLostCallback(onLostFocus);
childSetPrevalidate("clean other time", LLLineEditor::prevalidateNonNegativeS32);
childSetUserData("clean other time", this);
- mOwnerListText = LLUICtrlFactory::getTextBoxByName(this, "Object Owners:");
-
-
mBtnRefresh = LLUICtrlFactory::getButtonByName(this, "Refresh List");
mBtnRefresh->setClickedCallback(onClickRefresh, this);
-
mBtnReturnOwnerList = LLUICtrlFactory::getButtonByName(this, "Return objects...");
mBtnReturnOwnerList->setClickedCallback(onClickReturnOwnerList, this);
@@ -1266,7 +1237,7 @@ void LLPanelLandObjects::refresh()
if (parcel_object_bonus != 1.0f)
{
- snprintf(count, sizeof(count), "Region Object Bonus Factor: %.2f", /*Flawfinder: ignore*/
+ snprintf(count, sizeof(count), "Region Object Bonus Factor: %.2f", /* Flawfinder: ignore */
parcel_object_bonus);
mParcelObjectBonus->setText(count);
}
@@ -1277,35 +1248,35 @@ void LLPanelLandObjects::refresh()
if (sw_total > sw_max)
{
- snprintf(count, sizeof(count), "%d out of %d (%d will be deleted)", /*Flawfinder: ignore*/
+ snprintf(count, sizeof(count), "%d out of %d (%d will be deleted)", /* Flawfinder: ignore */
sw_total, sw_max, sw_total - sw_max);
}
else
{
- snprintf(count, sizeof(count), "%d out of %d (%d available)", /*Flawfinder: ignore*/
+ snprintf(count, sizeof(count), "%d out of %d (%d available)", /* Flawfinder: ignore */
sw_total, sw_max, sw_max - sw_total);
}
mSWTotalObjects->setText(count);
- snprintf(count, sizeof(count), "%d", max); /*Flawfinder: ignore*/
+ snprintf(count, sizeof(count), "%d", max); /* Flawfinder: ignore */
mObjectContribution->setText(count);
- snprintf(count, sizeof(count), "%d", total); /*Flawfinder: ignore*/
+ snprintf(count, sizeof(count), "%d", total); /* Flawfinder: ignore */
mTotalObjects->setText(count);
- snprintf(count, sizeof(count), "%d", owned); /*Flawfinder: ignore*/
+ snprintf(count, sizeof(count), "%d", owned); /* Flawfinder: ignore */
mOwnerObjects->setText(count);
- snprintf(count, sizeof(count), "%d", group); /*Flawfinder: ignore*/
+ snprintf(count, sizeof(count), "%d", group); /* Flawfinder: ignore */
mGroupObjects->setText(count);
- snprintf(count, sizeof(count), "%d", other); /*Flawfinder: ignore*/
+ snprintf(count, sizeof(count), "%d", other); /* Flawfinder: ignore */
mOtherObjects->setText(count);
- snprintf(count, sizeof(count), "%d", selected); /*Flawfinder: ignore*/
+ snprintf(count, sizeof(count), "%d", selected); /* Flawfinder: ignore */
mSelectedObjects->setText(count);
- snprintf(count, sizeof(count), "%d", mOtherTime); /*Flawfinder: ignore*/
+ snprintf(count, sizeof(count), "%d", mOtherTime); /* Flawfinder: ignore */
mCleanOtherObjectsTime->setText(count);
BOOL can_return_owned = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_RETURN_GROUP_OWNED);
@@ -1636,7 +1607,7 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo
// Placeholder for name.
row->addColumn("", FONT, self->mColWidth[2]);
- snprintf(object_count_str, sizeof(object_count_str), "%d", object_count); /*Flawfinder: ignore*/
+ snprintf(object_count_str, sizeof(object_count_str), "%d", object_count); /* Flawfinder: ignore */
row->addColumn(object_count_str, FONT, self->mColWidth[3]);
if (is_group_owned)
@@ -1884,7 +1855,7 @@ void LLPanelLandObjects::onClickReturnOtherObjects(void* userdata)
}
// static
-void LLPanelLandObjects::onLostFocus(LLLineEditor *caller, void* user_data)
+void LLPanelLandObjects::onLostFocus(LLUICtrl *caller, void* user_data)
{
LLPanelLandObjects *lop = (LLPanelLandObjects *)user_data;
LLParcel* parcel = lop->mParcel->getParcel();
@@ -2194,7 +2165,7 @@ void LLPanelLandOptions::refresh()
else
{
char buffer[256]; /*Flawfinder: ignore*/
- snprintf(buffer, sizeof(buffer), "Landing Point: %d, %d, %d", /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), "Landing Point: %d, %d, %d", /* Flawfinder: ignore */
llround(pos.mV[VX]),
llround(pos.mV[VY]),
llround(pos.mV[VZ]));
@@ -2534,6 +2505,7 @@ BOOL LLPanelLandAccess::postBuild()
childSetCommitCallback("AccessCheck", onCommitAny, this);
mListAccess = LLUICtrlFactory::getNameListByName(this, "AccessList");
+ mListAccess->sortByColumn(0, TRUE); // ascending
mBtnAddAccess = LLUICtrlFactory::getButtonByName(this, "Add...");
@@ -2578,14 +2550,14 @@ void LLPanelLandAccess::refresh()
char group_name[MAX_STRING]; /*Flawfinder: ignore*/
gCacheName->getGroupName(parcel->getGroupID(), group_name);
- snprintf(label, sizeof(label), "Group: %s", group_name); /*Flawfinder: ignore*/
+ snprintf(label, sizeof(label), "Group: %s", group_name); /* Flawfinder: ignore */
mCheckGroup->setLabel( label );
S32 count = parcel->mAccessList.size();
BOOL use_list = parcel->getParcelFlag(PF_USE_ACCESS_LIST);
mCheckAccess->set( use_list );
- snprintf(label, sizeof(label), "Avatars: (%d listed, %d max)", /*Flawfinder: ignore*/
+ snprintf(label, sizeof(label), "Avatars: (%d listed, %d max)", /* Flawfinder: ignore */
count, PARCEL_MAX_ACCESS_LIST);
mCheckAccess->setLabel( label );
@@ -2605,7 +2577,7 @@ void LLPanelLandAccess::refresh()
if (seconds >= 120)
{
char buf[30]; /*Flawfinder: ignore*/
- snprintf(buf, sizeof(buf), "%d minutes", (seconds/60)); /*Flawfinder: ignore*/
+ snprintf(buf, sizeof(buf), "%d minutes", (seconds/60)); /* Flawfinder: ignore */
suffix.append(buf);
}
else if (seconds >= 60)
@@ -2615,14 +2587,14 @@ void LLPanelLandAccess::refresh()
else
{
char buf[30]; /*Flawfinder: ignore*/
- snprintf(buf, sizeof(buf), "%d seconds", seconds); /*Flawfinder: ignore*/
+ snprintf(buf, sizeof(buf), "%d seconds", seconds); /* Flawfinder: ignore */
suffix.append(buf);
}
suffix.append(" remaining)");
}
- mListAccess->addNameItem(entry.mID, ADD_BOTTOM, TRUE, suffix);
+ mListAccess->addNameItem(entry.mID, ADD_SORTED, TRUE, suffix);
}
-
+
BOOL can_manage_allowed = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_MANAGE_ALLOWED);
BOOL enable_add = can_manage_allowed && (count < PARCEL_MAX_ACCESS_LIST);
@@ -2680,7 +2652,7 @@ void LLPanelLandAccess::refreshNames()
gCacheName->getGroupName(parcel->getGroupID(), group_name);
}
char label[MAX_STRING]; /*Flawfinder: ignore*/
- snprintf(label, sizeof(label), "Group: %s", group_name); /*Flawfinder: ignore*/
+ snprintf(label, sizeof(label), "Group: %s", group_name); /* Flawfinder: ignore */
mCheckGroup->setLabel(label);
}
@@ -2812,6 +2784,7 @@ BOOL LLPanelLandBan::postBuild()
childSetCommitCallback("LandBanCheck", onCommitAny, this);
mList = LLUICtrlFactory::getNameListByName(this, "LandBanList");
+ mList->sortByColumn(0, TRUE); // ascending
mBtnAdd = LLUICtrlFactory::getButtonByName(this, "Add...");
@@ -2855,7 +2828,7 @@ void LLPanelLandBan::refresh()
BOOL use_ban = parcel->getParcelFlag(PF_USE_BAN_LIST);
mCheck->set( use_ban );
- snprintf(label, sizeof(label), "Ban these avatars: (%d listed, %d max)", /*Flawfinder: ignore*/
+ snprintf(label, sizeof(label), "Ban these avatars: (%d listed, %d max)", /* Flawfinder: ignore */
count, PARCEL_MAX_ACCESS_LIST);
mCheck->setLabel( label );
@@ -2874,7 +2847,7 @@ void LLPanelLandBan::refresh()
if (seconds >= 120)
{
char buf[30]; /*Flawfinder: ignore*/
- snprintf(buf, sizeof(buf), "%d minutes", (seconds/60)); /*Flawfinder: ignore*/
+ snprintf(buf, sizeof(buf), "%d minutes", (seconds/60)); /* Flawfinder: ignore */
suffix.append(buf);
}
else if (seconds >= 60)
@@ -2884,12 +2857,12 @@ void LLPanelLandBan::refresh()
else
{
char buf[30]; /*Flawfinder: ignore*/
- snprintf(buf, sizeof(buf), "%d seconds", seconds); /*Flawfinder: ignore*/
+ snprintf(buf, sizeof(buf), "%d seconds", seconds); /* Flawfinder: ignore */
suffix.append(buf);
}
suffix.append(" remaining)");
}
- mList->addNameItem(entry.mID, ADD_BOTTOM, TRUE, suffix);
+ mList->addNameItem(entry.mID, ADD_SORTED, TRUE, suffix);
}
BOOL can_manage_banned = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_MANAGE_BANNED);
diff --git a/linden/indra/newview/llfloaterland.h b/linden/indra/newview/llfloaterland.h
index 4301306..3cc0b27 100644
--- a/linden/indra/newview/llfloaterland.h
+++ b/linden/indra/newview/llfloaterland.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -253,7 +254,7 @@ public:
static void onDoubleClickOwner(void*);
static void onCommitList(LLUICtrl* ctrl, void* data);
- static void onLostFocus(LLLineEditor* caller, void* user_data);
+ static void onLostFocus(LLUICtrl* caller, void* user_data);
static void processParcelObjectOwnersReply(LLMessageSystem *msg, void **);
@@ -262,39 +263,22 @@ public:
protected:
void sortBtnCore(S32 column);
- LLTextBox *mSWTotalObjectsLabel;
- LLTextBox *mSWTotalObjects;
-
LLTextBox *mParcelObjectBonus;
-
- LLTextBox *mObjectContributionLabel;
+ LLTextBox *mSWTotalObjects;
LLTextBox *mObjectContribution;
- LLTextBox *mTotalObjectsLabel;
LLTextBox *mTotalObjects;
-
- LLTextBox *mOwnerObjectsLabel;
LLTextBox *mOwnerObjects;
LLButton *mBtnShowOwnerObjects;
LLButton *mBtnReturnOwnerObjects;
-
- LLTextBox *mGroupObjectsLabel;
LLTextBox *mGroupObjects;
LLButton *mBtnShowGroupObjects;
LLButton *mBtnReturnGroupObjects;
-
- LLTextBox *mOtherObjectsLabel;
LLTextBox *mOtherObjects;
LLButton *mBtnShowOtherObjects;
LLButton *mBtnReturnOtherObjects;
-
- LLTextBox *mSelectedObjectsLabel;
LLTextBox *mSelectedObjects;
-
- LLTextBox *mCleanOtherObjectsLabel;
LLLineEditor *mCleanOtherObjectsTime;
S32 mOtherTime;
-
- LLTextBox *mOwnerListText;
LLButton *mBtnRefresh;
LLButton *mBtnReturnOwnerList;
LLButton *mBtnType; // column 0
diff --git a/linden/indra/newview/llfloaterlandholdings.cpp b/linden/indra/newview/llfloaterlandholdings.cpp
index e34e84c..3bdfdd9 100644
--- a/linden/indra/newview/llfloaterlandholdings.cpp
+++ b/linden/indra/newview/llfloaterlandholdings.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -207,20 +208,20 @@ void LLFloaterLandHoldings::processPlacesReply(LLMessageSystem* msg, void**)
S32 region_y = llround(global_y) % REGION_WIDTH_UNITS;
char location[MAX_STRING]; /* Flawfinder: ignore */
- snprintf(location, MAX_STRING, "%s (%d, %d)", sim_name, region_x, region_y); /* Flawfinder: ignore */
+ snprintf(location, MAX_STRING, "%s (%d, %d)", sim_name, region_x, region_y); /* Flawfinder: ignore */
char area[MAX_STRING]; /* Flawfinder: ignore */
if(billable_area == actual_area)
{
- snprintf(area, MAX_STRING, "%d", billable_area); /* Flawfinder: ignore */
+ snprintf(area, MAX_STRING, "%d", billable_area); /* Flawfinder: ignore */
}
else
{
- snprintf(area, MAX_STRING, "%d / %d", billable_area, actual_area); /* Flawfinder: ignore */
+ snprintf(area, MAX_STRING, "%d / %d", billable_area, actual_area); /* Flawfinder: ignore */
}
char hidden[MAX_STRING]; /* Flawfinder: ignore */
- snprintf(hidden, MAX_STRING, "%f %f", global_x, global_y); /* Flawfinder: ignore */
+ snprintf(hidden, MAX_STRING, "%f %f", global_x, global_y); /* Flawfinder: ignore */
LLSD element;
element["columns"][0]["column"] = "name";
@@ -313,12 +314,12 @@ void LLFloaterLandHoldings::refreshAggregates()
char buffer[MAX_STRING]; /* Flawfinder: ignore */
- snprintf(buffer, MAX_STRING, "%d sq. meters", allowed_area); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "%d sq. meters", allowed_area); /* Flawfinder: ignore */
childSetValue("allowed_text", LLSD(buffer));
- snprintf(buffer, MAX_STRING, "%d sq. meters", current_area); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "%d sq. meters", current_area); /* Flawfinder: ignore */
childSetValue("current_text", LLSD(buffer));
- snprintf(buffer, MAX_STRING, "%d sq. meters", available_area); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "%d sq. meters", available_area); /* Flawfinder: ignore */
childSetValue("available_text", LLSD(buffer));
}
diff --git a/linden/indra/newview/llfloaterlandholdings.h b/linden/indra/newview/llfloaterlandholdings.h
index f2d750f..30c4aea 100644
--- a/linden/indra/newview/llfloaterlandholdings.h
+++ b/linden/indra/newview/llfloaterlandholdings.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloatermap.cpp b/linden/indra/newview/llfloatermap.cpp
index 2d549db..97d0041 100644
--- a/linden/indra/newview/llfloatermap.cpp
+++ b/linden/indra/newview/llfloatermap.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -216,3 +217,47 @@ void LLFloaterMap::toggle(void*)
}
}
}
+
+
+BOOL process_secondlife_url(LLString url)
+{
+ S32 strpos, strpos2;
+
+ LLString slurlID = "slurl.com/secondlife/";
+ strpos = url.find(slurlID);
+
+ if (strpos < 0)
+ {
+ slurlID="secondlife://";
+ strpos = url.find(slurlID);
+ }
+
+ if (strpos >= 0)
+ {
+ LLString simname;
+
+ strpos+=slurlID.length();
+ strpos2=url.find("/",strpos);
+ if (strpos2 < strpos) strpos2=url.length();
+ simname="secondlife://" + url.substr(strpos,url.length() - strpos);
+
+ LLURLSimString::setString( simname );
+ LLURLSimString::parse();
+
+ // if there is a world map
+ if ( gFloaterWorldMap )
+ {
+ // mark where the destination is
+ gFloaterWorldMap->trackURL( LLURLSimString::sInstance.mSimName.c_str(),
+ LLURLSimString::sInstance.mX,
+ LLURLSimString::sInstance.mY,
+ LLURLSimString::sInstance.mZ );
+
+ // display map
+ LLFloaterWorldMap::show( NULL, TRUE );
+ };
+
+ return TRUE;
+ }
+ return FALSE;
+}
diff --git a/linden/indra/newview/llfloatermap.h b/linden/indra/newview/llfloatermap.h
index 170c138..0f96cc7 100644
--- a/linden/indra/newview/llfloatermap.h
+++ b/linden/indra/newview/llfloatermap.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -65,5 +66,6 @@ protected:
extern LLFloaterMap *gFloaterMap;
+BOOL process_secondlife_url(LLString url);
#endif // LL_LLFLOATERMAP_H
diff --git a/linden/indra/newview/llfloatermute.cpp b/linden/indra/newview/llfloatermute.cpp
index f71b58f..696f9fe 100644
--- a/linden/indra/newview/llfloatermute.cpp
+++ b/linden/indra/newview/llfloatermute.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloatermute.h b/linden/indra/newview/llfloatermute.h
index 92fec11..4f26412 100644
--- a/linden/indra/newview/llfloatermute.h
+++ b/linden/indra/newview/llfloatermute.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaternamedesc.cpp b/linden/indra/newview/llfloaternamedesc.cpp
index b39a2eb..f5ef7dc 100644
--- a/linden/indra/newview/llfloaternamedesc.cpp
+++ b/linden/indra/newview/llfloaternamedesc.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaternamedesc.h b/linden/indra/newview/llfloaternamedesc.h
index b72f0d4..9f2d545 100644
--- a/linden/indra/newview/llfloaternamedesc.h
+++ b/linden/indra/newview/llfloaternamedesc.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaternewim.cpp b/linden/indra/newview/llfloaternewim.cpp
index 4288209..2fa2b51 100644
--- a/linden/indra/newview/llfloaternewim.cpp
+++ b/linden/indra/newview/llfloaternewim.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -96,18 +97,44 @@ void LLFloaterNewIM::clearAllTargets()
mSelectionList->deleteAllItems();
}
-void LLFloaterNewIM::addTarget(const LLUUID& uuid, const std::string& name,
+void LLFloaterNewIM::addSpecial(const LLUUID& uuid, const std::string& name,
void* data, BOOL bold, BOOL online)
{
- LLScrollListItem* item = new LLScrollListItem(TRUE, data, uuid);
+ LLSD row;
+ row["id"] = uuid;
+ row["name"] = name;
+ row["target"] = "SPECIAL";
+ row["columns"][0]["value"] = name;
+ row["columns"][0]["width"] = COL_1_WIDTH;
+ row["columns"][0]["font"] = "SANSSERIF";
+ row["columns"][0]["font-style"] = bold ? "BOLD" : "NORMAL";
+ row["columns"][1]["value"] = online ? sOnlineDescriptor : "";
+ row["columns"][1]["font"] = "SANSSERIF";
+ row["columns"][1]["font-style"] = "BOLD";
+ LLScrollListItem* itemp = mSelectionList->addElement(row);
+ itemp->setUserdata(data);
- item->addColumn(name, bold ? LLFontGL::sSansSerifBold : LLFontGL::sSansSerif, COL_1_WIDTH);
- if( online )
+ if (mSelectionList->getFirstSelectedIndex() == -1)
{
- item->addColumn(sOnlineDescriptor, LLFontGL::sSansSerifBold);
+ mSelectionList->selectFirstItem();
}
+}
+
+void LLFloaterNewIM::addGroup(const LLUUID& uuid, void* data, BOOL bold, BOOL online)
+{
+ LLSD row;
+ row["id"] = uuid;
+ row["target"] = "GROUP";
+ row["columns"][0]["value"] = ""; // name will be looked up
+ row["columns"][0]["width"] = COL_1_WIDTH;
+ row["columns"][0]["font"] = "SANSSERIF";
+ row["columns"][0]["font-style"] = bold ? "BOLD" : "NORMAL";
+ row["columns"][1]["value"] = online ? sOnlineDescriptor : "";
+ row["columns"][1]["font"] = "SANSSERIF";
+ row["columns"][1]["font-style"] = "BOLD";
+ LLScrollListItem* itemp = mSelectionList->addElement(row);
+ itemp->setUserdata(data);
- mSelectionList->addItem(item);
if (mSelectionList->getFirstSelectedIndex() == -1)
{
mSelectionList->selectFirstItem();
@@ -116,7 +143,6 @@ void LLFloaterNewIM::addTarget(const LLUUID& uuid, const std::string& name,
void LLFloaterNewIM::addAgent(const LLUUID& uuid, void* data, BOOL online)
{
- LLScrollListItem* item = new LLScrollListItem(TRUE, data, uuid);
char first[DB_FIRST_NAME_BUF_SIZE]; /* Flawfinder: ignore */
first[0] = '\0';
char last[DB_LAST_NAME_BUF_SIZE]; /* Flawfinder: ignore */
@@ -125,16 +151,19 @@ void LLFloaterNewIM::addAgent(const LLUUID& uuid, void* data, BOOL online)
LLUIString fullname = sNameFormat;
fullname.setArg("[FIRST]", first);
fullname.setArg("[LAST]", last);
- item->addColumn(
- fullname,
- online ? LLFontGL::sSansSerifBold : LLFontGL::sSansSerif,
- COL_1_WIDTH,
- FALSE);
- if(online)
- {
- item->addColumn(sOnlineDescriptor, LLFontGL::sSansSerifBold);
- }
- mSelectionList->addItem(item, ADD_BOTTOM);
+
+ LLSD row;
+ row["id"] = uuid;
+ row["columns"][0]["value"] = fullname;
+ row["columns"][0]["width"] = COL_1_WIDTH;
+ row["columns"][0]["font"] = "SANSSERIF";
+ row["columns"][0]["font-style"] = online ? "BOLD" : "NORMAL";
+ row["columns"][1]["value"] = online ? sOnlineDescriptor : "";
+ row["columns"][1]["font"] = "SANSSERIF";
+ row["columns"][1]["font-style"] = "BOLD";
+ LLScrollListItem* itemp = mSelectionList->addElement(row);
+ itemp->setUserdata(data);
+
if (mSelectionList->getFirstSelectedIndex() == -1)
{
mSelectionList->selectFirstItem();
diff --git a/linden/indra/newview/llfloaternewim.h b/linden/indra/newview/llfloaternewim.h
index 2e3aa3a..06765b1 100644
--- a/linden/indra/newview/llfloaternewim.h
+++ b/linden/indra/newview/llfloaternewim.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -51,12 +52,13 @@ public:
// add a scroll list item which has everything specified - useful
// for special IM targets like everyone.
- void addTarget(const LLUUID& uuid, const std::string& name,
- void* data, BOOL bold, BOOL online);
+ void addSpecial(const LLUUID& uuid, const std::string& name,
+ void* data, BOOL bold, BOOL online);
// add a scroll list item for an agent - the name will be autoupdated
// as it appears
void addAgent(const LLUUID& uuid, void* data, BOOL online);
+ void addGroup(const LLUUID& uuid, void* data, BOOL bold, BOOL online);
void addDefaultTargets();
BOOL isUUIDAvailable(const LLUUID& uuid);
diff --git a/linden/indra/newview/llfloateropenobject.cpp b/linden/indra/newview/llfloateropenobject.cpp
index 22b4292..b907c39 100644
--- a/linden/indra/newview/llfloateropenobject.cpp
+++ b/linden/indra/newview/llfloateropenobject.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloateropenobject.h b/linden/indra/newview/llfloateropenobject.h
index 4772982..46954da 100644
--- a/linden/indra/newview/llfloateropenobject.h
+++ b/linden/indra/newview/llfloateropenobject.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterpermissionsmgr.cpp b/linden/indra/newview/llfloaterpermissionsmgr.cpp
index 1c13cf2..f98c200 100644
--- a/linden/indra/newview/llfloaterpermissionsmgr.cpp
+++ b/linden/indra/newview/llfloaterpermissionsmgr.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterpermissionsmgr.h b/linden/indra/newview/llfloaterpermissionsmgr.h
index ecd268e..1c87e04 100644
--- a/linden/indra/newview/llfloaterpermissionsmgr.h
+++ b/linden/indra/newview/llfloaterpermissionsmgr.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterpostcard.cpp b/linden/indra/newview/llfloaterpostcard.cpp
index 036ce38..2c80300 100644
--- a/linden/indra/newview/llfloaterpostcard.cpp
+++ b/linden/indra/newview/llfloaterpostcard.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -237,7 +238,7 @@ public:
{
}
// *TODO define custom uploadFailed here so it's not such a generic message
- void LLSendPostcardResponder::uploadComplete(const LLSD& content)
+ void uploadComplete(const LLSD& content)
{
// we don't care about what the server returns from this post, just clean up the UI
LLUploadDialog::modalUploadFinished();
diff --git a/linden/indra/newview/llfloaterpostcard.h b/linden/indra/newview/llfloaterpostcard.h
index b5d691b..bd44e22 100644
--- a/linden/indra/newview/llfloaterpostcard.h
+++ b/linden/indra/newview/llfloaterpostcard.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterpreference.cpp b/linden/indra/newview/llfloaterpreference.cpp
index ad1990e..dceadf9 100644
--- a/linden/indra/newview/llfloaterpreference.cpp
+++ b/linden/indra/newview/llfloaterpreference.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterpreference.h b/linden/indra/newview/llfloaterpreference.h
index 70e8fb3..dcef6a0 100644
--- a/linden/indra/newview/llfloaterpreference.h
+++ b/linden/indra/newview/llfloaterpreference.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterproperties.cpp b/linden/indra/newview/llfloaterproperties.cpp
index 0beea67..546270e 100644
--- a/linden/indra/newview/llfloaterproperties.cpp
+++ b/linden/indra/newview/llfloaterproperties.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -434,27 +435,27 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
char perm_string[11]; /* Flawfinder: ignore */
- snprintf(perm_string, sizeof(perm_string), "B: "); /* Flawfinder: ignore */
+ snprintf(perm_string, sizeof(perm_string), "B: "); /* Flawfinder: ignore */
mask_to_string(base_mask, perm_string+3);
childSetText("BaseMaskDebug",perm_string);
childSetVisible("BaseMaskDebug",TRUE);
- snprintf(perm_string, sizeof(perm_string), "O: "); /* Flawfinder: ignore */
+ snprintf(perm_string, sizeof(perm_string), "O: "); /* Flawfinder: ignore */
mask_to_string(owner_mask, perm_string+3);
childSetText("OwnerMaskDebug",perm_string);
childSetVisible("OwnerMaskDebug",TRUE);
- snprintf(perm_string, sizeof(perm_string), "G%s: ", overwrite_group ? "*" : ""); /* Flawfinder: ignore */
+ snprintf(perm_string, sizeof(perm_string), "G%s: ", overwrite_group ? "*" : ""); /* Flawfinder: ignore */
mask_to_string(group_mask, perm_string + (overwrite_group ? 4 : 3));
childSetText("GroupMaskDebug",perm_string);
childSetVisible("GroupMaskDebug",TRUE);
- snprintf(perm_string, sizeof(perm_string), "E%s: ", overwrite_everyone ? "*" : ""); /* Flawfinder: ignore */
+ snprintf(perm_string, sizeof(perm_string), "E%s: ", overwrite_everyone ? "*" : ""); /* Flawfinder: ignore */
mask_to_string(everyone_mask, perm_string + (overwrite_everyone ? 4 : 3));
childSetText("EveryoneMaskDebug",perm_string);
childSetVisible("EveryoneMaskDebug",TRUE);
- snprintf(perm_string, sizeof(perm_string), "N%s: ", slam_perm ? "*" : ""); /* Flawfinder: ignore */
+ snprintf(perm_string, sizeof(perm_string), "N%s: ", slam_perm ? "*" : ""); /* Flawfinder: ignore */
mask_to_string(next_owner_mask, perm_string + (slam_perm ? 4 : 3));
childSetText("NextMaskDebug",perm_string);
childSetVisible("NextMaskDebug",TRUE);
@@ -568,7 +569,7 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
{
radioSaleType->setSelectedIndex((S32)sale_info.getSaleType() - 1);
char numerical_price[MAX_STRING]; /* Flawfinder: ignore */
- snprintf(numerical_price, MAX_STRING, "%d", sale_info.getSalePrice()); /* Flawfinder: ignore */
+ snprintf(numerical_price, MAX_STRING, "%d", sale_info.getSalePrice()); /* Flawfinder: ignore */
childSetText("EditPrice",numerical_price);
}
else
diff --git a/linden/indra/newview/llfloaterproperties.h b/linden/indra/newview/llfloaterproperties.h
index ab70354..deaf1d4 100644
--- a/linden/indra/newview/llfloaterproperties.h
+++ b/linden/indra/newview/llfloaterproperties.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterrate.cpp b/linden/indra/newview/llfloaterrate.cpp
deleted file mode 100644
index a057374..0000000
--- a/linden/indra/newview/llfloaterrate.cpp
+++ /dev/null
@@ -1,277 +0,0 @@
-/**
- * @file llfloaterrate.cpp
- * @brief Dialog for rating avatars. She's a ten!
- *
- * Copyright (c) 2002-2007, Linden Research, Inc.
- *
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlife.com/developers/opensource/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at http://secondlife.com/developers/opensource/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#include "llviewerprecompiledheaders.h"
-
-#include "llfloaterrate.h"
-
-#include "llcachename.h"
-#include "llfontgl.h"
-#include "lluuid.h"
-#include "message.h"
-
-#include "llagent.h"
-#include "lltextbox.h"
-#include "llbutton.h"
-#include "lllineeditor.h"
-#include "llradiogroup.h"
-#include "llselectmgr.h"
-#include "llvieweruictrlfactory.h"
-#include "llviewermessage.h"
-#include "llviewernetwork.h"
-#include "llviewerregion.h"
-#include "llviewerreputation.h"
-#include "llviewerwindow.h"
-
-// Dollar cost to change your rating of someone
-const S32 RATING_COST = 25;
-
-//static
-LLFloaterRate::instance_map_t LLFloaterRate::sInstanceMap;
-
-//-----------------------------------------------------------------------------
-// Methods
-//-----------------------------------------------------------------------------
-LLFloaterRate::LLFloaterRate(const std::string& name, const LLUUID &id)
-: LLFloater(name),
- mAvatarID( id ),
- mLastBehavior( 0.f ),
- mLastAppearance( 0.f ),
- mLastBuilding( 0.f ),
- mReputationRequested( FALSE )
-{
- gUICtrlFactory->buildFloater(this, "floater_rate.xml");
-
- childSetAction("OK", onClickOK, this);
- childSetAction("Cancel", onClickCancel, this);
-
- mObjectSelection = gSelectMgr->getEditSelection();
-}
-
-
-LLFloaterRate::~LLFloaterRate()
-{
- sInstanceMap.erase(mAvatarID);
-}
-
-
-void LLFloaterRate::draw()
-{
- LLString name;
-
- // Construct the name, if possible
- char firstname[MAX_STRING]; /* Flawfinder: ignore */
- char lastname[MAX_STRING]; /* Flawfinder: ignore */
- gCacheName->getName(mAvatarID, firstname, lastname);
- name.assign(firstname);
- name.append(" ");
- name.append(lastname);
-
- // Request the current data, if we haven't already
- if (!mReputationRequested)
- {
- sendReputationIndividualRequest(mAvatarID);
- }
-
- LLString title("Your Rating of ");
- title.append( name );
-
- setTitle(title);
-
- F32 behavior = childGetValue("behavior").asString() == "Positive" ? 1.0f : 0.0f;
- F32 appearance = childGetValue("appearance").asString() == "Positive" ? 1.0f : 0.0f;
- F32 building = childGetValue("building").asString() == "Positive" ? 1.0f : 0.0f;
-
- S32 change_count = 0;
- if (behavior != mLastBehavior) change_count++;
- if (appearance != mLastAppearance) change_count++;
- if (building != mLastBuilding) change_count++;
-
- childSetTextArg("cost", "[COST]", llformat("%d",RATING_COST));
- childSetTextArg("cost", "[TOTAL]", llformat("%d",RATING_COST * change_count));
-
- BOOL can_afford = can_afford_transaction(RATING_COST * change_count);
- BOOL changed = (change_count > 0);
- childSetEnabled("OK", changed && can_afford );
-
- LLFloater::draw();
-}
-
-
-// static
-void LLFloaterRate::show(const LLUUID &avatar_id)
-{
- instance_map_t::iterator iter = sInstanceMap.find(avatar_id);
- if (iter != sInstanceMap.end())
- {
- iter->second->setFocus(TRUE);
- iter->second->open(); /* Flawfinder: ignore */
- }
- else if (avatar_id != LLUUID::null)
- {
- LLFloaterRate *f = new LLFloaterRate("rate", avatar_id);
- sInstanceMap[avatar_id] = f;
- f->center();
- f->setFocus(TRUE);
- f->sendReputationIndividualRequest(avatar_id);
- f->open(); /* Flawfinder: ignore */
- }
-}
-
-
-// static
-void LLFloaterRate::show(ERateSelection which)
-{
- LLUUID avatarid;
- LLString avatarname;
- switch(which)
- {
- case RS_CREATOR:
- gSelectMgr->selectGetCreator(avatarid, avatarname);
- break;
-
- case RS_OWNER:
- default:
- gSelectMgr->selectGetOwner(avatarid, avatarname);
- break;
- }
-
- if (avatarid != LLUUID::null)
- {
- show(avatarid);
- }
- else
- {
- gViewerWindow->alertXml("SelectSingleRate");
- }
-}
-
-
-// static
-void LLFloaterRate::onClickOK(void *data)
-{
- LLFloaterRate *self = (LLFloaterRate *)data;
-
- F32 behavior = self->childGetValue("behavior").asString() == "Positive" ? 1.0f : 0.0f;
- F32 appearance = self->childGetValue("appearance").asString() == "Positive" ? 1.0f : 0.0f;
- F32 building = self->childGetValue("building").asString() == "Positive" ? 1.0f : 0.0f;
- std::string text = self->childGetValue("mesg editor").asString();
-
- S32 change_count = 0;
- if (behavior != self->mLastBehavior) change_count++;
- if (appearance != self->mLastAppearance) change_count++;
- if (building != self->mLastBuilding) change_count++;
-
- if (change_count > 0)
- {
- send_reputation_agent_assign(gAgent.getID(), self->mAvatarID,
- behavior, appearance, building, text.c_str() );
-
- give_money(LLUUID::null, gAgent.getRegion(), change_count * RATING_COST);
-
- self->mLastBehavior = behavior;
- self->mLastAppearance = appearance;
- self->mLastBuilding = building;
- }
-
- self->close();
-}
-
-
-// static
-void LLFloaterRate::onClickCancel(void *data)
-{
- LLFloaterRate *self = (LLFloaterRate *)data;
- self->close();
-}
-
-
-void LLFloaterRate::sendReputationIndividualRequest(const LLUUID &avatar_id)
-{
- mReputationRequested = TRUE;
-
- LLMessageSystem *msg = gMessageSystem;
- msg->newMessageFast(_PREHASH_ReputationIndividualRequest);
- msg->nextBlockFast(_PREHASH_ReputationData);
- msg->addUUIDFast(_PREHASH_FromID, gAgent.getID() );
- msg->addUUIDFast(_PREHASH_ToID, avatar_id );
- msg->sendReliable( gUserServer );
-}
-
-
-// static
-void LLFloaterRate::processReputationIndividualReply(LLMessageSystem *msg, void** data)
-{
- LLUUID from_id;
- LLUUID to_id;
- F32 behavior = 0.f;
- F32 appearance = 0.f;
- F32 building = 0.f;
-
- msg->getUUIDFast(_PREHASH_ReputationData, _PREHASH_FromID, from_id );
- msg->getUUIDFast(_PREHASH_ReputationData, _PREHASH_ToID, to_id );
- msg->getF32Fast(_PREHASH_ReputationData, _PREHASH_Behavior, behavior );
- msg->getF32Fast(_PREHASH_ReputationData, _PREHASH_Appearance, appearance );
- msg->getF32Fast(_PREHASH_ReputationData, _PREHASH_Building, building );
-
- instance_map_t::iterator iter = sInstanceMap.find(to_id);
- if (iter != sInstanceMap.end())
- {
- LLFloaterRate* f = iter->second;
-
- f->mLastBehavior = behavior;
- f->mLastAppearance = appearance;
- f->mLastBuilding = building;
-
- if (behavior > 0.f)
- {
- f->childSetValue("behavior", "Positive");
- }
- else
- {
- f->childSetValue("behavior", "No Rating");
- }
-
- if (appearance > 0.f)
- {
- f->childSetValue("appearance", "Positive");
- }
- else
- {
- f->childSetValue("appearance", "No Rating");
- }
-
- if (building > 0.f)
- {
- f->childSetValue("building", "Positive");
- }
- else
- {
- f->childSetValue("building", "No Rating");
- }
- }
-}
diff --git a/linden/indra/newview/llfloaterrate.h b/linden/indra/newview/llfloaterrate.h
deleted file mode 100644
index 1b24383..0000000
--- a/linden/indra/newview/llfloaterrate.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- * @file llfloaterrate.h
- * @brief Dialog for rating avatars. He's a ten!
- *
- * Copyright (c) 2002-2007, Linden Research, Inc.
- *
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlife.com/developers/opensource/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at http://secondlife.com/developers/opensource/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#ifndef LL_LLFLOATERRATE_H
-#define LL_LLFLOATERRATE_H
-
-#ifndef LL_LLFLOATER_H
-#include "llfloater.h"
-#endif
-
-#include "lluuid.h"
-#include
-
-class LLTextBox;
-class LLRadioGroup;
-class LLButton;
-class LLMessageSystem;
-class LLLineEditor;
-class LLObjectSelection;
-
-class LLFloaterRate
-: public LLFloater
-{
-public:
- virtual void draw();
-
- // Call this if you have the avatar id
- static void show(const LLUUID &avatar_id);
-
- // Types for show() below
- enum ERateSelection {
- RS_CREATOR,
- RS_OWNER
- };
-
- // Call this to rate the currently selected object, either
- // the creator or the owner.
- static void show(ERateSelection which);
-
- static void processReputationIndividualReply(LLMessageSystem *msg, void**);
-
-protected:
- LLFloaterRate(const std::string& name, const LLUUID &id);
- virtual ~LLFloaterRate();
-
- void sendReputationIndividualRequest(const LLUUID &avatar_id);
-
- static void onClickOK(void *data);
- static void onClickCancel(void *data);
-
-protected:
- typedef std::map instance_map_t;
- static instance_map_t sInstanceMap;
-
-protected:
- LLUUID mAvatarID;
- F32 mLastBehavior;
- F32 mLastAppearance;
- F32 mLastBuilding;
- BOOL mReputationRequested;
- LLHandle mObjectSelection;
-};
-
-#endif
diff --git a/linden/indra/newview/llfloaterregioninfo.cpp b/linden/indra/newview/llfloaterregioninfo.cpp
index b758777..7fa5f6a 100644
--- a/linden/indra/newview/llfloaterregioninfo.cpp
+++ b/linden/indra/newview/llfloaterregioninfo.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -697,34 +698,34 @@ BOOL LLPanelRegionGeneralInfo::sendUpdate()
strings_t strings;
//integers_t integers;
char buffer[MAX_STRING]; /* Flawfinder: ignore*/
- snprintf(buffer, MAX_STRING, "%s", (childGetValue("block_terraform_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "%s", (childGetValue("block_terraform_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */
strings.push_back(strings_t::value_type(buffer));
- snprintf(buffer, MAX_STRING, "%s", (childGetValue("block_fly_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "%s", (childGetValue("block_fly_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */
strings.push_back(strings_t::value_type(buffer));
- snprintf(buffer, MAX_STRING, "%s", (childGetValue("allow_damage_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "%s", (childGetValue("allow_damage_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */
strings.push_back(strings_t::value_type(buffer));
- snprintf(buffer, MAX_STRING, "%s", (childGetValue("allow_land_resell_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "%s", (childGetValue("allow_land_resell_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */
strings.push_back(strings_t::value_type(buffer));
F32 value = (F32)childGetValue("agent_limit_spin").asReal();
- snprintf(buffer, MAX_STRING, "%f", value); /* Flawfinder: ignore*/
+ snprintf(buffer, MAX_STRING, "%f", value); /* Flawfinder: ignore */
strings.push_back(strings_t::value_type(buffer));
value = (F32)childGetValue("object_bonus_spin").asReal();
- snprintf(buffer, MAX_STRING, "%f", value); /* Flawfinder: ignore*/
+ snprintf(buffer, MAX_STRING, "%f", value); /* Flawfinder: ignore */
strings.push_back(strings_t::value_type(buffer));
U8 access = LLViewerRegion::stringToAccess(childGetValue("access_combo").asString().c_str());
- snprintf(buffer, MAX_STRING, "%d", (S32)access); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "%d", (S32)access); /* Flawfinder: ignore */
strings.push_back(strings_t::value_type(buffer));
- snprintf(buffer, MAX_STRING, "%s", (childGetValue("restrict_pushobject").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "%s", (childGetValue("restrict_pushobject").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */
strings.push_back(strings_t::value_type(buffer));
- snprintf(buffer, MAX_STRING, "%s", (childGetValue("allow_parcel_changes_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "%s", (childGetValue("allow_parcel_changes_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */
strings.push_back(strings_t::value_type(buffer));
LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
@@ -793,13 +794,13 @@ BOOL LLPanelRegionDebugInfo::sendUpdate()
strings_t strings;
char buffer[MAX_STRING]; /* Flawfinder: ignore */
- snprintf(buffer, MAX_STRING, "%s", (childGetValue("disable_scripts_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "%s", (childGetValue("disable_scripts_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */
strings.push_back(buffer);
- snprintf(buffer, MAX_STRING, "%s", (childGetValue("disable_collisions_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "%s", (childGetValue("disable_collisions_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */
strings.push_back(buffer);
- snprintf(buffer, MAX_STRING, "%s", (childGetValue("disable_physics_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "%s", (childGetValue("disable_physics_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */
strings.push_back(buffer);
LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
@@ -957,7 +958,7 @@ bool LLPanelRegionTextureInfo::refreshFromRegion(LLViewerRegion* region)
char buffer[MAX_STRING]; /* Flawfinder: ignore */
for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i)
{
- snprintf(buffer, MAX_STRING, "texture_detail_%d", i); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "texture_detail_%d", i); /* Flawfinder: ignore */
texture_ctrl = LLViewerUICtrlFactory::getTexturePickerByName(this, buffer);
if(texture_ctrl)
{
@@ -970,9 +971,9 @@ bool LLPanelRegionTextureInfo::refreshFromRegion(LLViewerRegion* region)
for(S32 i = 0; i < CORNER_COUNT; ++i)
{
- snprintf(buffer, MAX_STRING, "height_start_spin_%d", i); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "height_start_spin_%d", i); /* Flawfinder: ignore */
childSetValue(buffer, LLSD(compp->getStartHeight(i)));
- snprintf(buffer, MAX_STRING, "height_range_spin_%d", i); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "height_range_spin_%d", i); /* Flawfinder: ignore */
childSetValue(buffer, LLSD(compp->getHeightRange(i)));
}
@@ -987,15 +988,15 @@ BOOL LLPanelRegionTextureInfo::postBuild()
char buffer[MAX_STRING]; /* Flawfinder: ignore */
for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i)
{
- snprintf(buffer, MAX_STRING, "texture_detail_%d", i); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "texture_detail_%d", i); /* Flawfinder: ignore */
initCtrl(buffer);
}
for(S32 i = 0; i < CORNER_COUNT; ++i)
{
- snprintf(buffer, MAX_STRING, "height_start_spin_%d", i); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "height_start_spin_%d", i); /* Flawfinder: ignore */
initCtrl(buffer);
- snprintf(buffer, MAX_STRING, "height_range_spin_%d", i); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "height_range_spin_%d", i); /* Flawfinder: ignore */
initCtrl(buffer);
}
@@ -1035,13 +1036,13 @@ BOOL LLPanelRegionTextureInfo::sendUpdate()
for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i)
{
- snprintf(buffer, MAX_STRING, "texture_detail_%d", i); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "texture_detail_%d", i); /* Flawfinder: ignore */
texture_ctrl = LLViewerUICtrlFactory::getTexturePickerByName(this, buffer);
if(texture_ctrl)
{
LLUUID tmp_id(texture_ctrl->getImageAssetID());
tmp_id.toString(id_str);
- snprintf(buffer, MAX_STRING, "%d %s", i, id_str); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "%d %s", i, id_str); /* Flawfinder: ignore */
strings.push_back(strings_t::value_type(buffer));
}
}
@@ -1049,9 +1050,9 @@ BOOL LLPanelRegionTextureInfo::sendUpdate()
strings.clear();
for(S32 i = 0; i < CORNER_COUNT; ++i)
{
- snprintf(buffer, MAX_STRING, "height_start_spin_%d", i); /* Flawfinder: ignore */
- snprintf(buffer2, MAX_STRING, "height_range_spin_%d", i); /* Flawfinder: ignore */
- snprintf(buffer, MAX_STRING, "%d %f %f", i, (F32)childGetValue(buffer).asReal(), (F32)childGetValue(buffer2).asReal()); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "height_start_spin_%d", i); /* Flawfinder: ignore */
+ snprintf(buffer2, MAX_STRING, "height_range_spin_%d", i); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "%d %f %f", i, (F32)childGetValue(buffer).asReal(), (F32)childGetValue(buffer2).asReal()); /* Flawfinder: ignore */
strings.push_back(strings_t::value_type(buffer));
}
sendEstateOwnerMessage(msg, "textureheights", invoice, strings);
@@ -1065,7 +1066,7 @@ BOOL LLPanelRegionTextureInfo::validateTextureSizes()
for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i)
{
char buffer[MAX_STRING]; /* Flawfinder: ignore */
- snprintf(buffer, MAX_STRING, "texture_detail_%d", i); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "texture_detail_%d", i); /* Flawfinder: ignore */
LLTextureCtrl* texture_ctrl = LLViewerUICtrlFactory::getTexturePickerByName(this, buffer);
if (!texture_ctrl) continue;
@@ -1170,17 +1171,17 @@ BOOL LLPanelRegionTerrainInfo::sendUpdate()
strings_t strings;
LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
- snprintf(buffer, MAX_STRING, "%f", (F32)childGetValue("water_height_spin").asReal()); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "%f", (F32)childGetValue("water_height_spin").asReal()); /* Flawfinder: ignore */
strings.push_back(buffer);
- snprintf(buffer, MAX_STRING, "%f", (F32)childGetValue("terrain_raise_spin").asReal()); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "%f", (F32)childGetValue("terrain_raise_spin").asReal()); /* Flawfinder: ignore */
strings.push_back(buffer);
- snprintf(buffer, MAX_STRING, "%f", (F32)childGetValue("terrain_lower_spin").asReal()); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "%f", (F32)childGetValue("terrain_lower_spin").asReal()); /* Flawfinder: ignore */
strings.push_back(buffer);
- snprintf(buffer, MAX_STRING, "%s", (childGetValue("use_estate_sun_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore*/
+ snprintf(buffer, MAX_STRING, "%s", (childGetValue("use_estate_sun_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */
strings.push_back(buffer);
- snprintf(buffer, MAX_STRING, "%s", (childGetValue("fixed_sun_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore*/
+ snprintf(buffer, MAX_STRING, "%s", (childGetValue("fixed_sun_check").asBoolean() ? "Y" : "N")); /* Flawfinder: ignore */
strings.push_back(buffer);
- snprintf(buffer, MAX_STRING, "%f", (F32)childGetValue("sun_hour_slider").asReal() ); /* Flawfinder: ignore*/
+ snprintf(buffer, MAX_STRING, "%f", (F32)childGetValue("sun_hour_slider").asReal() ); /* Flawfinder: ignore */
strings.push_back(buffer);
// Grab estate information in case the user decided to set the
@@ -1206,11 +1207,11 @@ BOOL LLPanelRegionTerrainInfo::sendUpdate()
estate_sun_hour = panel->getSunHour();
}
- snprintf(buffer, MAX_STRING, "%s", (estate_global_time ? "Y" : "N") ); /* Flawfinder: ignore*/
+ snprintf(buffer, MAX_STRING, "%s", (estate_global_time ? "Y" : "N") ); /* Flawfinder: ignore */
strings.push_back(buffer);
- snprintf(buffer, MAX_STRING, "%s", (estate_fixed_sun ? "Y" : "N") ); /* Flawfinder: ignore*/
+ snprintf(buffer, MAX_STRING, "%s", (estate_fixed_sun ? "Y" : "N") ); /* Flawfinder: ignore */
strings.push_back(buffer);
- snprintf(buffer, MAX_STRING, "%f", estate_sun_hour); /* Flawfinder: ignore*/
+ snprintf(buffer, MAX_STRING, "%f", estate_sun_hour); /* Flawfinder: ignore */
strings.push_back(buffer);
sendEstateOwnerMessage(gMessageSystem, "setregionterrain", invoice, strings);
@@ -1827,7 +1828,7 @@ void LLPanelEstateInfo::sendEstateAccessDelta(U32 flags, const LLUUID& agent_or_
msg->nextBlock("ParamList");
msg->addString("Parameter", buf);
- snprintf(buf, MAX_STRING, "%u", flags); /* Flawfinder: ignore*/
+ snprintf(buf, MAX_STRING, "%u", flags); /* Flawfinder: ignore */
msg->nextBlock("ParamList");
msg->addString("Parameter", buf);
@@ -2084,7 +2085,7 @@ void LLPanelEstateInfo::commitEstateInfo()
msg->addString("Parameter", getEstateName());
char buf[MAX_STRING]; /* Flawfinder: ignore*/
- snprintf(buf, MAX_STRING, "%u", computeEstateFlags()); /* Flawfinder: ignore*/
+ snprintf(buf, MAX_STRING, "%u", computeEstateFlags()); /* Flawfinder: ignore */
msg->nextBlock("ParamList");
msg->addString("Parameter", buf);
@@ -2094,7 +2095,7 @@ void LLPanelEstateInfo::commitEstateInfo()
sun_hour = 0.f; // 0 = global time
}
- snprintf(buf, MAX_STRING, "%d", (S32)(sun_hour*1024.0f)); /* Flawfinder: ignore*/
+ snprintf(buf, MAX_STRING, "%d", (S32)(sun_hour*1024.0f)); /* Flawfinder: ignore */
msg->nextBlock("ParamList");
msg->addString("Parameter", buf);
diff --git a/linden/indra/newview/llfloaterregioninfo.h b/linden/indra/newview/llfloaterregioninfo.h
index fda23e8..cd550ff 100644
--- a/linden/indra/newview/llfloaterregioninfo.h
+++ b/linden/indra/newview/llfloaterregioninfo.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterreporter.cpp b/linden/indra/newview/llfloaterreporter.cpp
index 0337dd0..2e44191 100644
--- a/linden/indra/newview/llfloaterreporter.cpp
+++ b/linden/indra/newview/llfloaterreporter.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -59,7 +60,6 @@
#include "llviewerobject.h"
#include "llviewerregion.h"
#include "llcombobox.h"
-#include "llfloaterrate.h"
#include "lltooldraganddrop.h"
#include "llfloatermap.h"
#include "lluiconstants.h"
@@ -726,7 +726,7 @@ LLSD LLFloaterReporter::gatherReport()
details << childGetValue("details_edit").asString();
char version_string[MAX_STRING]; /* Flawfinder: ignore */
- snprintf(version_string, /* Flawfinder: ignore */
+ snprintf(version_string, /* Flawfinder: ignore */
MAX_STRING,
"%d.%d.%d %s %s %s %s",
LL_VERSION_MAJOR,
diff --git a/linden/indra/newview/llfloaterreporter.h b/linden/indra/newview/llfloaterreporter.h
index 5e25d59..4cb72b9 100644
--- a/linden/indra/newview/llfloaterreporter.h
+++ b/linden/indra/newview/llfloaterreporter.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloatersaveavatar.cpp b/linden/indra/newview/llfloatersaveavatar.cpp
index 3b8439e..edc740d 100644
--- a/linden/indra/newview/llfloatersaveavatar.cpp
+++ b/linden/indra/newview/llfloatersaveavatar.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloatersaveavatar.h b/linden/indra/newview/llfloatersaveavatar.h
index 5957531..50cdb12 100644
--- a/linden/indra/newview/llfloatersaveavatar.h
+++ b/linden/indra/newview/llfloatersaveavatar.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterscriptdebug.cpp b/linden/indra/newview/llfloaterscriptdebug.cpp
index 94047cb..5ad2dc9 100644
--- a/linden/indra/newview/llfloaterscriptdebug.cpp
+++ b/linden/indra/newview/llfloaterscriptdebug.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterscriptdebug.h b/linden/indra/newview/llfloaterscriptdebug.h
index c9d0b51..891ec3b 100644
--- a/linden/indra/newview/llfloaterscriptdebug.h
+++ b/linden/indra/newview/llfloaterscriptdebug.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloatersellland.cpp b/linden/indra/newview/llfloatersellland.cpp
index cc7df3b..49cb14e 100755
--- a/linden/indra/newview/llfloatersellland.cpp
+++ b/linden/indra/newview/llfloatersellland.cpp
@@ -3,6 +3,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloatersellland.h b/linden/indra/newview/llfloatersellland.h
index 4131011..1f0af61 100755
--- a/linden/indra/newview/llfloatersellland.h
+++ b/linden/indra/newview/llfloatersellland.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloatersnapshot.cpp b/linden/indra/newview/llfloatersnapshot.cpp
index cfa94a5..af58cd9 100644
--- a/linden/indra/newview/llfloatersnapshot.cpp
+++ b/linden/indra/newview/llfloatersnapshot.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -523,7 +524,7 @@ void LLSnapshotLivePreview::onIdle( void* snapshot_preview )
previewp->mSnapshotDelayTimer.hasExpired());
// don't take snapshots while ALT-zoom active
- if (gFocusMgr.getMouseCapture() == gToolCamera)
+ if (gToolCamera->hasMouseCapture())
{
previewp->mSnapshotActive = FALSE;
}
diff --git a/linden/indra/newview/llfloatersnapshot.h b/linden/indra/newview/llfloatersnapshot.h
index 6b7a847..deefc6d 100644
--- a/linden/indra/newview/llfloatersnapshot.h
+++ b/linden/indra/newview/llfloatersnapshot.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloatertelehub.cpp b/linden/indra/newview/llfloatertelehub.cpp
index 150e369..e48b6ca 100644
--- a/linden/indra/newview/llfloatertelehub.cpp
+++ b/linden/indra/newview/llfloatertelehub.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -244,7 +245,7 @@ void LLFloaterTelehub::onClickRemoveSpawnPoint(void* data)
msg->addString("Parameter", "spawnpoint remove");
char buffer[MAX_STRING]; /* Flawfinder: ignore */
- snprintf(buffer, MAX_STRING, "%d", spawn_index); /* Flawfinder: ignore */
+ snprintf(buffer, MAX_STRING, "%d", spawn_index); /* Flawfinder: ignore */
msg->nextBlock("ParamList");
msg->addString("Parameter", buffer);
diff --git a/linden/indra/newview/llfloatertelehub.h b/linden/indra/newview/llfloatertelehub.h
index 3458998..33e9516 100644
--- a/linden/indra/newview/llfloatertelehub.h
+++ b/linden/indra/newview/llfloatertelehub.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloatertest.cpp b/linden/indra/newview/llfloatertest.cpp
index 29c897d..510072d 100644
--- a/linden/indra/newview/llfloatertest.cpp
+++ b/linden/indra/newview/llfloatertest.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -65,7 +66,7 @@ private:
static void onCommitCombo(LLUICtrl*, void*);
static void onCommitLine(LLUICtrl*, void*);
static void onKeyLine(LLLineEditor*, void*);
- static void onFocusLostLine(LLLineEditor*, void*);
+ static void onFocusLostLine(LLUICtrl*, void*);
static void onChangeRadioGroup(LLUICtrl*, void*);
LLButton* mBtnSimple;
@@ -359,7 +360,7 @@ void LLFloaterTestImpl::onKeyLine(LLLineEditor*, void*)
}
// static
-void LLFloaterTestImpl::onFocusLostLine(LLLineEditor*, void*)
+void LLFloaterTestImpl::onFocusLostLine(LLUICtrl*, void*)
{
llinfos << "focus lost line editor" << llendl;
}
diff --git a/linden/indra/newview/llfloatertest.h b/linden/indra/newview/llfloatertest.h
index 3634161..93869ef 100644
--- a/linden/indra/newview/llfloatertest.h
+++ b/linden/indra/newview/llfloatertest.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloatertools.cpp b/linden/indra/newview/llfloatertools.cpp
index f777581..0480628 100644
--- a/linden/indra/newview/llfloatertools.cpp
+++ b/linden/indra/newview/llfloatertools.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -947,7 +948,7 @@ void LLFloaterTools::setObjectType( void* data )
LLPCode pcode = *(LLPCode*) data;
LLToolPlacer::setObjectType( pcode );
gSavedSettings.setBOOL("CreateToolCopySelection", FALSE);
- gViewerWindow->setMouseCapture(NULL, NULL);
+ gViewerWindow->setMouseCapture(NULL);
}
// static
diff --git a/linden/indra/newview/llfloatertools.h b/linden/indra/newview/llfloatertools.h
index 664aa62..27d7f56 100644
--- a/linden/indra/newview/llfloatertools.h
+++ b/linden/indra/newview/llfloatertools.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloatertopobjects.cpp b/linden/indra/newview/llfloatertopobjects.cpp
index 7c86e83..6212ce9 100644
--- a/linden/indra/newview/llfloatertopobjects.cpp
+++ b/linden/indra/newview/llfloatertopobjects.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloatertopobjects.h b/linden/indra/newview/llfloatertopobjects.h
index a1494a3..3d8a1e6 100644
--- a/linden/indra/newview/llfloatertopobjects.h
+++ b/linden/indra/newview/llfloatertopobjects.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloatertos.cpp b/linden/indra/newview/llfloatertos.cpp
index 26346d5..6b38ca8 100644
--- a/linden/indra/newview/llfloatertos.cpp
+++ b/linden/indra/newview/llfloatertos.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -181,6 +182,7 @@ BOOL LLFloaterTOS::postBuild()
childSetValue("tos_text", LLSD(mMessage));
#endif
+
return TRUE;
}
diff --git a/linden/indra/newview/llfloatertos.h b/linden/indra/newview/llfloatertos.h
index 16f5d95..5dfd939 100644
--- a/linden/indra/newview/llfloatertos.h
+++ b/linden/indra/newview/llfloatertos.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterworldmap.cpp b/linden/indra/newview/llfloaterworldmap.cpp
index 967e6d0..dc42a40 100644
--- a/linden/indra/newview/llfloaterworldmap.cpp
+++ b/linden/indra/newview/llfloaterworldmap.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfloaterworldmap.h b/linden/indra/newview/llfloaterworldmap.h
index 4b812b6..f383754 100644
--- a/linden/indra/newview/llfloaterworldmap.h
+++ b/linden/indra/newview/llfloaterworldmap.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfolderview.cpp b/linden/indra/newview/llfolderview.cpp
index 1007bc4..7bc9cd8 100644
--- a/linden/indra/newview/llfolderview.cpp
+++ b/linden/indra/newview/llfolderview.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -90,7 +91,7 @@ void copy_selected_item(void* user_data);
void open_selected_items(void* user_data);
void properties_selected_items(void* user_data);
void paste_items(void* user_data);
-void top_view_lost( LLView* handler );
+void renamer_focus_lost( LLUICtrl* handler, void* user_data );
///----------------------------------------------------------------------------
/// Class LLFolderViewItem
@@ -607,7 +608,7 @@ BOOL LLFolderViewItem::handleMouseDown( S32 x, S32 y, MASK mask )
{
// No handler needed for focus lost since this class has no
// state that depends on it.
- gViewerWindow->setMouseCapture( this, NULL );
+ gViewerWindow->setMouseCapture( this );
if (!mIsSelected)
{
@@ -642,7 +643,7 @@ BOOL LLFolderViewItem::handleMouseDown( S32 x, S32 y, MASK mask )
BOOL LLFolderViewItem::handleHover( S32 x, S32 y, MASK mask )
{
- if( gViewerWindow->hasMouseCapture( this ) && isMovable() )
+ if( hasMouseCapture() && isMovable() )
{
S32 screen_x;
S32 screen_y;
@@ -742,10 +743,10 @@ BOOL LLFolderViewItem::handleMouseUp( S32 x, S32 y, MASK mask )
mSelectPending = FALSE;
- if( gViewerWindow->hasMouseCapture( this ) )
+ if( hasMouseCapture() )
{
getRoot()->setShowSelectionContext(FALSE);
- gViewerWindow->setMouseCapture( NULL, NULL );
+ gViewerWindow->setMouseCapture( NULL );
}
return TRUE;
}
@@ -2615,9 +2616,9 @@ LLFolderView::~LLFolderView( void )
LLView::deleteViewByHandle(mPopupMenuHandle);
- if(gViewerWindow->hasTopView(mRenamer))
+ if(gViewerWindow->hasTopCtrl(mRenamer))
{
- gViewerWindow->setTopView(NULL, NULL);
+ gViewerWindow->setTopCtrl(NULL);
}
mAutoOpenItems.removeAllNodes();
@@ -3194,7 +3195,7 @@ void LLFolderView::finishRenamingItem( void )
mRenamer->setFocus( FALSE );
mRenamer->setVisible( FALSE );
mRenamer->setCommitOnFocusLost( TRUE );
- gViewerWindow->setTopView( NULL, NULL );
+ gViewerWindow->setTopCtrl( NULL );
if( mRenameItem )
{
@@ -3212,7 +3213,7 @@ void LLFolderView::revertRenamingItem( void )
mRenamer->setFocus( FALSE );
mRenamer->setVisible( FALSE );
mRenamer->setCommitOnFocusLost( TRUE );
- gViewerWindow->setTopView( NULL, NULL );
+ gViewerWindow->setTopCtrl( NULL );
if( mRenameItem )
{
@@ -3610,7 +3611,8 @@ void LLFolderView::startRenamingSelectedItem( void )
mRenamer->setVisible( TRUE );
// set focus will fail unless item is visible
mRenamer->setFocus( TRUE );
- gViewerWindow->setTopView( mRenamer, top_view_lost );
+ mRenamer->setFocusLostCallback(renamer_focus_lost);
+ gViewerWindow->setTopCtrl( mRenamer );
}
}
@@ -3939,6 +3941,7 @@ void LLFolderView::onFocusLost( )
{
gEditMenuHandler = NULL;
}
+ LLUICtrl::onFocusLost();
}
BOOL LLFolderView::search(LLFolderViewItem* first_item, const LLString &search_string, BOOL backward)
@@ -4096,9 +4099,9 @@ BOOL LLFolderView::handleScrollWheel(S32 x, S32 y, S32 clicks)
void LLFolderView::deleteAllChildren()
{
- if(gViewerWindow->hasTopView(mRenamer))
+ if(gViewerWindow->hasTopCtrl(mRenamer))
{
- gViewerWindow->setTopView(NULL, NULL);
+ gViewerWindow->setTopCtrl(NULL);
}
LLView::deleteViewByHandle(mPopupMenuHandle);
mPopupMenuHandle = LLViewHandle::sDeadHandle;
@@ -4334,9 +4337,12 @@ bool sort_item_date(LLFolderViewItem* a, LLFolderViewItem* b)
}
}
-void top_view_lost( LLView* view )
+void renamer_focus_lost( LLUICtrl* ctrl, void* userdata)
{
- if( view ) view->setVisible( FALSE );
+ if( ctrl )
+ {
+ ctrl->setVisible( FALSE );
+ }
}
void delete_selected_item(void* user_data)
diff --git a/linden/indra/newview/llfolderview.h b/linden/indra/newview/llfolderview.h
index eb67373..8acbc8f 100644
--- a/linden/indra/newview/llfolderview.h
+++ b/linden/indra/newview/llfolderview.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfollowcam.cpp b/linden/indra/newview/llfollowcam.cpp
index d9e1d4a..b18b0d2 100644
--- a/linden/indra/newview/llfollowcam.cpp
+++ b/linden/indra/newview/llfollowcam.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llfollowcam.h b/linden/indra/newview/llfollowcam.h
index c8a5c88..a199dbb 100644
--- a/linden/indra/newview/llfollowcam.h
+++ b/linden/indra/newview/llfollowcam.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llframestats.cpp b/linden/indra/newview/llframestats.cpp
index 237f59b..9ae7667 100644
--- a/linden/indra/newview/llframestats.cpp
+++ b/linden/indra/newview/llframestats.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -178,11 +179,11 @@ void LLFrameStats::dump()
static S32 dump_count = 0;
char file_with_num[256]; /* Flawfinder: ignore */
- snprintf(file_with_num, sizeof(file_with_num), "fs%d.txt", dump_count); /* Flawfinder: ignore */
+ snprintf(file_with_num, sizeof(file_with_num), "fs%d.txt", dump_count); /* Flawfinder: ignore */
dump_count++;
char filename[LL_MAX_PATH]; /* Flawfinder: ignore */
- snprintf(filename, LL_MAX_PATH, "%s", gDirUtilp->getExpandedFilename(LL_PATH_LOGS, file_with_num).c_str()); /* Flawfinder: ignore */
+ snprintf(filename, LL_MAX_PATH, "%s", gDirUtilp->getExpandedFilename(LL_PATH_LOGS, file_with_num).c_str()); /* Flawfinder: ignore */
FILE *fp = LLFile::fopen(filename, "w"); /* Flawfinder: ignore */
if (!fp)
{
@@ -224,7 +225,7 @@ void LLFrameStats::dump()
fclose(fp);
// Now dump cumulative stats
- snprintf(filename, LL_MAX_PATH, "%s", gDirUtilp->getExpandedFilename(LL_PATH_LOGS, mSummaryFilename.c_str()).c_str()); /* Flawfinder: ignore */
+ snprintf(filename, LL_MAX_PATH, "%s", gDirUtilp->getExpandedFilename(LL_PATH_LOGS, mSummaryFilename.c_str()).c_str()); /* Flawfinder: ignore */
fp = LLFile::fopen(filename, "a"); /* Flawfinder: ignore */
if (!fp)
{
diff --git a/linden/indra/newview/llframestats.h b/linden/indra/newview/llframestats.h
index faaaa91..2f83061 100644
--- a/linden/indra/newview/llframestats.h
+++ b/linden/indra/newview/llframestats.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llframestatview.cpp b/linden/indra/newview/llframestatview.cpp
index e0c1cc7..af9162d 100644
--- a/linden/indra/newview/llframestatview.cpp
+++ b/linden/indra/newview/llframestatview.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -215,7 +216,7 @@ void LLFrameStatView::draw()
right = left + 1;
gl_rect_2d(left, top, right, bottom, LLColor4(1.f, 1.f, 1.f, 0.2f));
- snprintf(tick_label, sizeof(tick_label), "%.2f", tick_value); /* Flawfinder: ignore */
+ snprintf(tick_label, sizeof(tick_label), "%.2f", tick_value); /* Flawfinder: ignore */
// draw labels for the tick marks
LLFontGL::sMonospace->renderUTF8(tick_label, 0, left, bottom,
LLColor4(1.f, 1.f, 1.f, 0.5f),
@@ -265,7 +266,7 @@ void LLFrameStatView::draw()
right = left + 1;
gl_rect_2d(left, top, right, bottom, LLColor4(1.f, 1.f, 1.f, 0.25f));
- snprintf(tick_label, sizeof(tick_label), "%.2f", tick_value); /* Flawfinder: ignore */
+ snprintf(tick_label, sizeof(tick_label), "%.2f", tick_value); /* Flawfinder: ignore */
// draw labels for the tick marks
LLFontGL::sMonospace->renderUTF8(tick_label, 0, left, bottom,
LLColor4(1.f, 1.f, 1.f, 0.5f),
@@ -290,7 +291,7 @@ void LLFrameStatView::draw()
right = left + 1;
gl_rect_2d(left, top, right, bottom, LLColor4(1.f, 1.f, 1.f, 0.25f));
- snprintf(tick_label, sizeof(tick_label), "%.2f", tick_value); /* Flawfinder: ignore */
+ snprintf(tick_label, sizeof(tick_label), "%.2f", tick_value); /* Flawfinder: ignore */
// draw labels for the tick marks
LLFontGL::sMonospace->renderUTF8(tick_label, 0, left, bottom,
LLColor4(1.f, 1.f, 1.f, 0.5f),
diff --git a/linden/indra/newview/llframestatview.h b/linden/indra/newview/llframestatview.h
index 465b238..7bcc041 100644
--- a/linden/indra/newview/llframestatview.h
+++ b/linden/indra/newview/llframestatview.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llgenepool.cpp b/linden/indra/newview/llgenepool.cpp
index 2a2c864..95b15f3 100644
--- a/linden/indra/newview/llgenepool.cpp
+++ b/linden/indra/newview/llgenepool.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llgenepool.h b/linden/indra/newview/llgenepool.h
index 268c374..dfe54bb 100644
--- a/linden/indra/newview/llgenepool.h
+++ b/linden/indra/newview/llgenepool.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llgesturemgr.cpp b/linden/indra/newview/llgesturemgr.cpp
index 76a2ca7..c94e9e2 100644
--- a/linden/indra/newview/llgesturemgr.cpp
+++ b/linden/indra/newview/llgesturemgr.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llgesturemgr.h b/linden/indra/newview/llgesturemgr.h
index 1351e3a..8544599 100644
--- a/linden/indra/newview/llgesturemgr.h
+++ b/linden/indra/newview/llgesturemgr.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llgivemoney.cpp b/linden/indra/newview/llgivemoney.cpp
index 0baf1f3..3722682 100644
--- a/linden/indra/newview/llgivemoney.cpp
+++ b/linden/indra/newview/llgivemoney.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llgivemoney.h b/linden/indra/newview/llgivemoney.h
index cff4fb7..664d1c8 100644
--- a/linden/indra/newview/llgivemoney.h
+++ b/linden/indra/newview/llgivemoney.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llglsandbox.cpp b/linden/indra/newview/llglsandbox.cpp
index decbdd9..e14cebe 100644
--- a/linden/indra/newview/llglsandbox.cpp
+++ b/linden/indra/newview/llglsandbox.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llglslshader.cpp b/linden/indra/newview/llglslshader.cpp
new file mode 100644
index 0000000..3f23a66
--- /dev/null
+++ b/linden/indra/newview/llglslshader.cpp
@@ -0,0 +1,1221 @@
+/**
+ * @file llglslshader.cpp
+ * @brief GLSL helper functions and state.
+ *
+ * Copyright (c) 2005-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llviewerwindow.h"
+#include "llglslshader.h"
+#include "llviewercontrol.h"
+#include "pipeline.h"
+#include "llworld.h"
+
+//utility shader objects (not shader programs)
+GLhandleARB gLightVertex;
+GLhandleARB gLightFragment;
+GLhandleARB gScatterVertex;
+GLhandleARB gScatterFragment;
+
+LLVector4 gShinyOrigin;
+
+//object shaders
+LLGLSLShader gObjectSimpleProgram;
+LLGLSLShader gObjectAlphaProgram;
+LLGLSLShader gObjectBumpProgram;
+LLGLSLShader gObjectShinyProgram;
+
+//environment shaders
+LLGLSLShader gTerrainProgram;
+LLGLSLShader gGlowProgram;
+LLGLSLShader gGroundProgram;
+LLGLSLShader gWaterProgram;
+
+//interface shaders
+LLGLSLShader gHighlightProgram;
+
+//avatar skinning utility shader object
+GLhandleARB gAvatarSkinVertex;
+
+//avatar shader handles
+LLGLSLShader gAvatarProgram;
+LLGLSLShader gAvatarEyeballProgram;
+LLGLSLShader gAvatarPickProgram;
+
+//current avatar shader parameter pointer
+GLint gAvatarMatrixParam;
+GLint gMaterialIndex;
+GLint gSpecularIndex;
+
+S32 LLShaderMgr::sVertexShaderLevel[SHADER_COUNT] = { 0 };
+S32 LLShaderMgr::sMaxVertexShaderLevel[SHADER_COUNT] = { 0 };
+
+//glsl parameter tables
+const char* LLShaderMgr::sReservedAttribs[] =
+{
+ "materialColor",
+ "specularColor",
+ "binormal"
+};
+
+U32 LLShaderMgr::sReservedAttribCount = LLShaderMgr::END_RESERVED_ATTRIBS;
+
+const char* LLShaderMgr::sAvatarAttribs[] =
+{
+ "weight",
+ "clothing",
+ "gWindDir",
+ "gSinWaveParams",
+ "gGravity"
+};
+
+U32 LLShaderMgr::sAvatarAttribCount = sizeof(LLShaderMgr::sAvatarAttribs)/sizeof(char*);
+
+const char* LLShaderMgr::sAvatarUniforms[] =
+{
+ "matrixPalette"
+};
+
+U32 LLShaderMgr::sAvatarUniformCount = 1;
+
+const char* LLShaderMgr::sReservedUniforms[] =
+{
+ "diffuseMap",
+ "specularMap",
+ "bumpMap",
+ "environmentMap",
+ "scatterMap"
+};
+
+U32 LLShaderMgr::sReservedUniformCount = LLShaderMgr::END_RESERVED_UNIFORMS;
+
+const char* LLShaderMgr::sTerrainUniforms[] =
+{
+ "detail0",
+ "detail1",
+ "alphaRamp"
+};
+
+U32 LLShaderMgr::sTerrainUniformCount = sizeof(LLShaderMgr::sTerrainUniforms)/sizeof(char*);
+
+const char* LLShaderMgr::sGlowUniforms[] =
+{
+ "delta"
+};
+
+U32 LLShaderMgr::sGlowUniformCount = sizeof(LLShaderMgr::sGlowUniforms)/sizeof(char*);
+
+const char* LLShaderMgr::sShinyUniforms[] =
+{
+ "origin"
+};
+
+U32 LLShaderMgr::sShinyUniformCount = sizeof(LLShaderMgr::sShinyUniforms)/sizeof(char*);
+
+const char* LLShaderMgr::sWaterUniforms[] =
+{
+ "screenTex",
+ "eyeVec",
+ "time",
+ "d1",
+ "d2",
+ "lightDir",
+ "specular",
+ "lightExp",
+ "fbScale",
+ "refScale"
+};
+
+U32 LLShaderMgr::sWaterUniformCount = sizeof(LLShaderMgr::sWaterUniforms)/sizeof(char*);
+
+
+//============================================================================
+// Set Levels
+
+S32 LLShaderMgr::getVertexShaderLevel(S32 type)
+{
+ return sVertexShaderLevel[type];
+}
+
+S32 LLShaderMgr::getMaxVertexShaderLevel(S32 type)
+{
+ return sMaxVertexShaderLevel[type];
+}
+
+//============================================================================
+// Load Shader
+
+static LLString get_object_log(GLhandleARB ret)
+{
+ LLString res;
+
+ //get log length
+ GLint length;
+ glGetObjectParameterivARB(ret, GL_OBJECT_INFO_LOG_LENGTH_ARB, &length);
+ if (length > 0)
+ {
+ //the log could be any size, so allocate appropriately
+ GLcharARB* log = new GLcharARB[length];
+ glGetInfoLogARB(ret, length, &length, log);
+ res = LLString(log);
+ delete[] log;
+ }
+ return res;
+}
+
+void LLShaderMgr::dumpObjectLog(GLhandleARB ret, BOOL warns)
+{
+ LLString log = get_object_log(ret);
+ if (warns)
+ {
+ llwarns << log << llendl;
+ }
+ else
+ {
+ llinfos << log << llendl;
+ }
+}
+
+GLhandleARB LLShaderMgr::loadShader(const LLString& filename, S32 cls, GLenum type)
+{
+ GLenum error;
+ error = glGetError();
+ if (error != GL_NO_ERROR)
+ {
+ llwarns << "GL ERROR entering loadShader(): " << error << llendl;
+ }
+
+ llinfos << "Loading shader file: " << filename << llendl;
+
+ if (filename.empty())
+ {
+ return 0;
+ }
+
+
+ //read in from file
+ FILE* file = NULL;
+
+ S32 try_gpu_class = sVertexShaderLevel[cls];
+ S32 gpu_class;
+
+ //find the most relevant file
+ for (gpu_class = try_gpu_class; gpu_class > 0; gpu_class--)
+ { //search from the current gpu class down to class 1 to find the most relevant shader
+ std::stringstream fname;
+ fname << gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "shaders/class");
+ fname << gpu_class << "/" << filename;
+
+// llinfos << "Looking in " << fname.str().c_str() << llendl;
+ file = fopen(fname.str().c_str(), "r"); /* Flawfinder: ignore */
+ if (file)
+ {
+ break; // done
+ }
+ }
+
+ if (file == NULL)
+ {
+ llinfos << "GLSL Shader file not found: " << filename << llendl;
+ return 0;
+ }
+
+ //we can't have any lines longer than 1024 characters
+ //or any shaders longer than 1024 lines... deal - DaveP
+ GLcharARB buff[1024];
+ GLcharARB* text[1024];
+ GLuint count = 0;
+
+ //copy file into memory
+ while(fgets(buff, 1024, file) != NULL)
+ {
+ text[count++] = strdup(buff);
+ }
+ fclose(file);
+
+ //create shader object
+ GLhandleARB ret = glCreateShaderObjectARB(type);
+ error = glGetError();
+ if (error != GL_NO_ERROR)
+ {
+ llwarns << "GL ERROR in glCreateShaderObjectARB: " << error << llendl;
+ }
+ else
+ {
+ //load source
+ glShaderSourceARB(ret, count, (const GLcharARB**) text, NULL);
+ error = glGetError();
+ if (error != GL_NO_ERROR)
+ {
+ llwarns << "GL ERROR in glShaderSourceARB: " << error << llendl;
+ }
+ else
+ {
+ //compile source
+ glCompileShaderARB(ret);
+ error = glGetError();
+ if (error != GL_NO_ERROR)
+ {
+ llwarns << "GL ERROR in glCompileShaderARB: " << error << llendl;
+ }
+ }
+ }
+ //free memory
+ for (GLuint i = 0; i < count; i++)
+ {
+ free(text[i]);
+ }
+ if (error == GL_NO_ERROR)
+ {
+ //check for errors
+ GLint success = GL_TRUE;
+ glGetObjectParameterivARB(ret, GL_OBJECT_COMPILE_STATUS_ARB, &success);
+ error = glGetError();
+ if (error != GL_NO_ERROR || success == GL_FALSE)
+ {
+ //an error occured, print log
+ llwarns << "GLSL Compilation Error: (" << error << ") in " << filename << llendl;
+ dumpObjectLog(ret);
+ ret = 0;
+ }
+ }
+ else
+ {
+ ret = 0;
+ }
+ stop_glerror();
+
+ //successfully loaded, save results
+#if 1 // 1.9.1
+ if (ret)
+ {
+ sVertexShaderLevel[cls] = try_gpu_class;
+ }
+ else
+ {
+ if (sVertexShaderLevel[cls] > 1)
+ {
+ sVertexShaderLevel[cls] = sVertexShaderLevel[cls] - 1;
+ ret = loadShader(filename,cls,type);
+ if (ret && sMaxVertexShaderLevel[cls] > sVertexShaderLevel[cls])
+ {
+ sMaxVertexShaderLevel[cls] = sVertexShaderLevel[cls];
+ }
+ }
+ }
+#else
+ if (ret)
+ {
+ S32 max = -1;
+ /*if (try_gpu_class == sMaxVertexShaderLevel[cls])
+ {
+ max = gpu_class;
+ }*/
+ saveVertexShaderLevel(cls,try_gpu_class,max);
+ }
+ else
+ {
+ if (sVertexShaderLevel[cls] > 1)
+ {
+ sVertexShaderLevel[cls] = sVertexShaderLevel[cls] - 1;
+ ret = loadShader(f,cls,type);
+ if (ret && sMaxVertexShaderLevel[cls] > sVertexShaderLevel[cls])
+ {
+ saveVertexShaderLevel(cls, sVertexShaderLevel[cls], sVertexShaderLevel[cls]);
+ }
+ }
+ }
+#endif
+ return ret;
+}
+
+BOOL LLShaderMgr::linkProgramObject(GLhandleARB obj, BOOL suppress_errors)
+{
+ //check for errors
+ glLinkProgramARB(obj);
+ GLint success = GL_TRUE;
+ glGetObjectParameterivARB(obj, GL_OBJECT_LINK_STATUS_ARB, &success);
+ if (!suppress_errors && success == GL_FALSE)
+ {
+ //an error occured, print log
+ llwarns << "GLSL Linker Error:" << llendl;
+ }
+
+ LLString log = get_object_log(obj);
+ LLString::toLower(log);
+ if (log.find("software") != LLString::npos)
+ {
+ llwarns << "GLSL Linker: Running in Software:" << llendl;
+ success = GL_FALSE;
+ suppress_errors = FALSE;
+ }
+ if (!suppress_errors)
+ {
+ dumpObjectLog(obj, !success);
+ }
+
+ return success;
+}
+
+BOOL LLShaderMgr::validateProgramObject(GLhandleARB obj)
+{
+ //check program validity against current GL
+ glValidateProgramARB(obj);
+ GLint success = GL_TRUE;
+ glGetObjectParameterivARB(obj, GL_OBJECT_VALIDATE_STATUS_ARB, &success);
+ if (success == GL_FALSE)
+ {
+ llwarns << "GLSL program not valid: " << llendl;
+ dumpObjectLog(obj);
+ }
+ else
+ {
+ dumpObjectLog(obj, FALSE);
+ }
+
+ return success;
+}
+
+//============================================================================
+// Shader Management
+
+void LLShaderMgr::setShaders()
+{
+ if (!gPipeline.mInitialized)
+ {
+ return;
+ }
+
+ if (gGLManager.mHasFramebufferObject)
+ {
+ LLPipeline::sDynamicReflections = gSavedSettings.getBOOL("RenderDynamicReflections");
+ LLPipeline::sRenderGlow = gSavedSettings.getBOOL("RenderGlow");
+ }
+ else
+ {
+ LLPipeline::sDynamicReflections = LLPipeline::sRenderGlow = FALSE;
+ }
+
+ //hack to reset buffers that change behavior with shaders
+ gPipeline.resetVertexBuffers();
+
+ if (gViewerWindow)
+ {
+ gViewerWindow->setCursor(UI_CURSOR_WAIT);
+ }
+
+ // Lighting
+ gPipeline.setLightingDetail(-1);
+
+ // Shaders
+ for (S32 i=0; isetCursor(UI_CURSOR_ARROW);
+ }
+}
+
+void LLShaderMgr::unloadShaders()
+{
+ gObjectSimpleProgram.unload();
+ gObjectShinyProgram.unload();
+ gObjectBumpProgram.unload();
+ gObjectAlphaProgram.unload();
+ gWaterProgram.unload();
+ gTerrainProgram.unload();
+ gGlowProgram.unload();
+ gGroundProgram.unload();
+ gAvatarProgram.unload();
+ gAvatarEyeballProgram.unload();
+ gAvatarPickProgram.unload();
+ gHighlightProgram.unload();
+
+ sVertexShaderLevel[SHADER_LIGHTING] = 0;
+ sVertexShaderLevel[SHADER_OBJECT] = 0;
+ sVertexShaderLevel[SHADER_AVATAR] = 0;
+ sVertexShaderLevel[SHADER_ENVIRONMENT] = 0;
+ sVertexShaderLevel[SHADER_INTERFACE] = 0;
+
+ gLightVertex = gLightFragment = gScatterVertex = gScatterFragment = 0;
+ gPipeline.mVertexShadersLoaded = 0;
+}
+
+BOOL LLShaderMgr::loadShadersLighting()
+{
+ // Load light dependency shaders first
+ // All of these have to load for any shaders to function
+
+ std::string lightvertex = "lighting/lightV.glsl";
+ //get default light function implementation
+ gLightVertex = loadShader(lightvertex, SHADER_LIGHTING, GL_VERTEX_SHADER_ARB);
+ if( !gLightVertex )
+ {
+ llwarns << "Failed to load " << lightvertex << llendl;
+ return FALSE;
+ }
+
+ std::string lightfragment = "lighting/lightF.glsl";
+ gLightFragment = loadShader(lightfragment, SHADER_LIGHTING, GL_FRAGMENT_SHADER_ARB);
+ if ( !gLightFragment )
+ {
+ llwarns << "Failed to load " << lightfragment << llendl;
+ return FALSE;
+ }
+
+ // NOTE: Scatter shaders use the ENVIRONMENT detail level
+
+ std::string scattervertex = "environment/scatterV.glsl";
+ gScatterVertex = loadShader(scattervertex, SHADER_ENVIRONMENT, GL_VERTEX_SHADER_ARB);
+ if ( !gScatterVertex )
+ {
+ llwarns << "Failed to load " << scattervertex << llendl;
+ return FALSE;
+ }
+
+ std::string scatterfragment = "environment/scatterF.glsl";
+ gScatterFragment = loadShader(scatterfragment, SHADER_ENVIRONMENT, GL_FRAGMENT_SHADER_ARB);
+ if ( !gScatterFragment )
+ {
+ llwarns << "Failed to load " << scatterfragment << llendl;
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+BOOL LLShaderMgr::loadShadersEnvironment()
+{
+ GLhandleARB baseObjects[] =
+ {
+ gLightFragment,
+ gLightVertex,
+ gScatterFragment,
+ gScatterVertex
+ };
+ S32 baseCount = 4;
+
+ BOOL success = TRUE;
+
+ if (sVertexShaderLevel[SHADER_ENVIRONMENT] == 0)
+ {
+ gWaterProgram.unload();
+ gGroundProgram.unload();
+ gTerrainProgram.unload();
+ gGlowProgram.unload();
+ return FALSE;
+ }
+
+ if (success)
+ {
+ //load water vertex shader
+ std::string waterfragment = "environment/waterF.glsl";
+ std::string watervertex = "environment/waterV.glsl";
+ gWaterProgram.mProgramObject = glCreateProgramObjectARB();
+ gWaterProgram.attachObjects(baseObjects, baseCount);
+ gWaterProgram.attachObject(loadShader(watervertex, SHADER_ENVIRONMENT, GL_VERTEX_SHADER_ARB));
+ gWaterProgram.attachObject(loadShader(waterfragment, SHADER_ENVIRONMENT, GL_FRAGMENT_SHADER_ARB));
+
+ success = gWaterProgram.mapAttributes();
+ if (success)
+ {
+ success = gWaterProgram.mapUniforms(sWaterUniforms, sWaterUniformCount);
+ }
+ if (!success)
+ {
+ llwarns << "Failed to load " << watervertex << llendl;
+ }
+ }
+ if (success)
+ {
+ //load ground vertex shader
+ std::string groundvertex = "environment/groundV.glsl";
+ std::string groundfragment = "environment/groundF.glsl";
+ gGroundProgram.mProgramObject = glCreateProgramObjectARB();
+ gGroundProgram.attachObjects(baseObjects, baseCount);
+ gGroundProgram.attachObject(loadShader(groundvertex, SHADER_ENVIRONMENT, GL_VERTEX_SHADER_ARB));
+ gGroundProgram.attachObject(loadShader(groundfragment, SHADER_ENVIRONMENT, GL_FRAGMENT_SHADER_ARB));
+
+ success = gGroundProgram.mapAttributes();
+ if (success)
+ {
+ success = gGroundProgram.mapUniforms();
+ }
+ if (!success)
+ {
+ llwarns << "Failed to load " << groundvertex << llendl;
+ }
+ }
+
+ if (success)
+ {
+ //load terrain vertex shader
+ std::string terrainvertex = "environment/terrainV.glsl";
+ std::string terrainfragment = "environment/terrainF.glsl";
+ gTerrainProgram.mProgramObject = glCreateProgramObjectARB();
+ gTerrainProgram.attachObjects(baseObjects, baseCount);
+ gTerrainProgram.attachObject(loadShader(terrainvertex, SHADER_ENVIRONMENT, GL_VERTEX_SHADER_ARB));
+ gTerrainProgram.attachObject(loadShader(terrainfragment, SHADER_ENVIRONMENT, GL_FRAGMENT_SHADER_ARB));
+ success = gTerrainProgram.mapAttributes();
+ if (success)
+ {
+ success = gTerrainProgram.mapUniforms(sTerrainUniforms, sTerrainUniformCount);
+ }
+ if (!success)
+ {
+ llwarns << "Failed to load " << terrainvertex << llendl;
+ }
+ }
+
+ if (success)
+ {
+ //load glow shader
+ std::string glowvertex = "environment/glowV.glsl";
+ std::string glowfragment = "environment/glowF.glsl";
+ gGlowProgram.mProgramObject = glCreateProgramObjectARB();
+ gGlowProgram.attachObjects(baseObjects, baseCount);
+ gGlowProgram.attachObject(loadShader(glowvertex, SHADER_ENVIRONMENT, GL_VERTEX_SHADER_ARB));
+ gGlowProgram.attachObject(loadShader(glowfragment, SHADER_ENVIRONMENT, GL_FRAGMENT_SHADER_ARB));
+ success = gGlowProgram.mapAttributes();
+ if (success)
+ {
+ success = gGlowProgram.mapUniforms(sGlowUniforms, sGlowUniformCount);
+ }
+ if (!success)
+ {
+ llwarns << "Failed to load " << glowvertex << llendl;
+ }
+ }
+
+ if( !success )
+ {
+ sVertexShaderLevel[SHADER_ENVIRONMENT] = 0;
+ sMaxVertexShaderLevel[SHADER_ENVIRONMENT] = 0;
+ return FALSE;
+ }
+
+ if (gWorldPointer)
+ {
+ gWorldPointer->updateWaterObjects();
+ }
+
+ return TRUE;
+}
+
+BOOL LLShaderMgr::loadShadersObject()
+{
+ GLhandleARB baseObjects[] =
+ {
+ gLightFragment,
+ gLightVertex,
+ gScatterFragment,
+ gScatterVertex
+ };
+ S32 baseCount = 4;
+
+ BOOL success = TRUE;
+
+ if (sVertexShaderLevel[SHADER_OBJECT] == 0)
+ {
+ gObjectShinyProgram.unload();
+ gObjectSimpleProgram.unload();
+ gObjectBumpProgram.unload();
+ gObjectAlphaProgram.unload();
+ return FALSE;
+ }
+
+#if 0
+ if (success)
+ {
+ //load object (volume/tree) vertex shader
+ std::string simplevertex = "objects/simpleV.glsl";
+ std::string simplefragment = "objects/simpleF.glsl";
+ gObjectSimpleProgram.mProgramObject = glCreateProgramObjectARB();
+ gObjectSimpleProgram.attachObjects(baseObjects, baseCount);
+ gObjectSimpleProgram.attachObject(loadShader(simplevertex, SHADER_OBJECT, GL_VERTEX_SHADER_ARB));
+ gObjectSimpleProgram.attachObject(loadShader(simplefragment, SHADER_OBJECT, GL_FRAGMENT_SHADER_ARB));
+ success = gObjectSimpleProgram.mapAttributes();
+ if (success)
+ {
+ success = gObjectSimpleProgram.mapUniforms();
+ }
+ if( !success )
+ {
+ llwarns << "Failed to load " << simplevertex << llendl;
+ }
+ }
+
+ if (success)
+ {
+ //load object bumpy vertex shader
+ std::string bumpshinyvertex = "objects/bumpshinyV.glsl";
+ std::string bumpshinyfragment = "objects/bumpshinyF.glsl";
+ gObjectBumpProgram.mProgramObject = glCreateProgramObjectARB();
+ gObjectBumpProgram.attachObjects(baseObjects, baseCount);
+ gObjectBumpProgram.attachObject(loadShader(bumpshinyvertex, SHADER_OBJECT, GL_VERTEX_SHADER_ARB));
+ gObjectBumpProgram.attachObject(loadShader(bumpshinyfragment, SHADER_OBJECT, GL_FRAGMENT_SHADER_ARB));
+ success = gObjectBumpProgram.mapAttributes();
+ if (success)
+ {
+ success = gObjectBumpProgram.mapUniforms();
+ }
+ if( !success )
+ {
+ llwarns << "Failed to load " << bumpshinyvertex << llendl;
+ }
+ }
+
+ if (success)
+ {
+ //load object alpha vertex shader
+ std::string alphavertex = "objects/alphaV.glsl";
+ std::string alphafragment = "objects/alphaF.glsl";
+ gObjectAlphaProgram.mProgramObject = glCreateProgramObjectARB();
+ gObjectAlphaProgram.attachObjects(baseObjects, baseCount);
+ gObjectAlphaProgram.attachObject(loadShader(alphavertex, SHADER_OBJECT, GL_VERTEX_SHADER_ARB));
+ gObjectAlphaProgram.attachObject(loadShader(alphafragment, SHADER_OBJECT, GL_FRAGMENT_SHADER_ARB));
+
+ success = gObjectAlphaProgram.mapAttributes();
+ if (success)
+ {
+ success = gObjectAlphaProgram.mapUniforms();
+ }
+ if( !success )
+ {
+ llwarns << "Failed to load " << alphavertex << llendl;
+ }
+ }
+#endif
+
+ if (success)
+ {
+ //load shiny vertex shader
+ std::string shinyvertex = "objects/shinyV.glsl";
+ std::string shinyfragment = "objects/shinyF.glsl";
+ gObjectShinyProgram.mProgramObject = glCreateProgramObjectARB();
+ gObjectShinyProgram.attachObjects(baseObjects, baseCount);
+ gObjectShinyProgram.attachObject(loadShader(shinyvertex, SHADER_OBJECT, GL_VERTEX_SHADER_ARB));
+ gObjectShinyProgram.attachObject(loadShader(shinyfragment, SHADER_OBJECT, GL_FRAGMENT_SHADER_ARB));
+
+ success = gObjectShinyProgram.mapAttributes();
+ if (success)
+ {
+ success = gObjectShinyProgram.mapUniforms(sShinyUniforms, sShinyUniformCount);
+ }
+ if( !success )
+ {
+ llwarns << "Failed to load " << shinyvertex << llendl;
+ }
+ }
+
+ if( !success )
+ {
+ sVertexShaderLevel[SHADER_OBJECT] = 0;
+ sMaxVertexShaderLevel[SHADER_OBJECT] = 0;
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+BOOL LLShaderMgr::loadShadersAvatar()
+{
+ GLhandleARB baseObjects[] =
+ {
+ gLightFragment,
+ gLightVertex,
+ gScatterFragment,
+ gScatterVertex
+ };
+ S32 baseCount = 4;
+
+ BOOL success = TRUE;
+
+ if (sVertexShaderLevel[SHADER_AVATAR] == 0)
+ {
+ gAvatarProgram.unload();
+ gAvatarEyeballProgram.unload();
+ gAvatarPickProgram.unload();
+ return FALSE;
+ }
+
+ if (success)
+ {
+ //load specular (eyeball) vertex program
+ std::string eyeballvertex = "avatar/eyeballV.glsl";
+ std::string eyeballfragment = "avatar/eyeballF.glsl";
+ gAvatarEyeballProgram.mProgramObject = glCreateProgramObjectARB();
+ gAvatarEyeballProgram.attachObjects(baseObjects, baseCount);
+ gAvatarEyeballProgram.attachObject(loadShader(eyeballvertex, SHADER_AVATAR, GL_VERTEX_SHADER_ARB));
+ gAvatarEyeballProgram.attachObject(loadShader(eyeballfragment, SHADER_AVATAR, GL_FRAGMENT_SHADER_ARB));
+ success = gAvatarEyeballProgram.mapAttributes();
+ if (success)
+ {
+ success = gAvatarEyeballProgram.mapUniforms();
+ }
+ if( !success )
+ {
+ llwarns << "Failed to load " << eyeballvertex << llendl;
+ }
+ }
+
+ if (success)
+ {
+ gAvatarSkinVertex = loadShader("avatar/avatarSkinV.glsl", SHADER_AVATAR, GL_VERTEX_SHADER_ARB);
+ //load avatar vertex shader
+ std::string avatarvertex = "avatar/avatarV.glsl";
+ std::string avatarfragment = "avatar/avatarF.glsl";
+
+ gAvatarProgram.mProgramObject = glCreateProgramObjectARB();
+ gAvatarProgram.attachObjects(baseObjects, baseCount);
+ gAvatarProgram.attachObject(gAvatarSkinVertex);
+ gAvatarProgram.attachObject(loadShader(avatarvertex, SHADER_AVATAR, GL_VERTEX_SHADER_ARB));
+ gAvatarProgram.attachObject(loadShader(avatarfragment, SHADER_AVATAR, GL_FRAGMENT_SHADER_ARB));
+
+ success = gAvatarProgram.mapAttributes(sAvatarAttribs, sAvatarAttribCount);
+ if (success)
+ {
+ success = gAvatarProgram.mapUniforms(sAvatarUniforms, sAvatarUniformCount);
+ }
+ if( !success )
+ {
+ llwarns << "Failed to load " << avatarvertex << llendl;
+ }
+ }
+
+ if (success)
+ {
+ //load avatar picking shader
+ std::string pickvertex = "avatar/pickAvatarV.glsl";
+ std::string pickfragment = "avatar/pickAvatarF.glsl";
+ gAvatarPickProgram.mProgramObject = glCreateProgramObjectARB();
+ gAvatarPickProgram.attachObject(loadShader(pickvertex, SHADER_AVATAR, GL_VERTEX_SHADER_ARB));
+ gAvatarPickProgram.attachObject(loadShader(pickfragment, SHADER_AVATAR, GL_FRAGMENT_SHADER_ARB));
+ gAvatarPickProgram.attachObject(gAvatarSkinVertex);
+
+ success = gAvatarPickProgram.mapAttributes(sAvatarAttribs, sAvatarAttribCount);
+ if (success)
+ {
+ success = gAvatarPickProgram.mapUniforms(sAvatarUniforms, sAvatarUniformCount);
+ }
+ if( !success )
+ {
+ llwarns << "Failed to load " << pickvertex << llendl;
+ }
+ }
+
+ if( !success )
+ {
+ sVertexShaderLevel[SHADER_AVATAR] = 0;
+ sMaxVertexShaderLevel[SHADER_AVATAR] = 0;
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+BOOL LLShaderMgr::loadShadersInterface()
+{
+ BOOL success = TRUE;
+
+ if (sVertexShaderLevel[SHADER_INTERFACE] == 0)
+ {
+ gHighlightProgram.unload();
+ return FALSE;
+ }
+
+ if (success)
+ {
+ //load highlighting shader
+ std::string highlightvertex = "interface/highlightV.glsl";
+ std::string highlightfragment = "interface/highlightF.glsl";
+ gHighlightProgram.mProgramObject = glCreateProgramObjectARB();
+ gHighlightProgram.attachObject(loadShader(highlightvertex, SHADER_INTERFACE, GL_VERTEX_SHADER_ARB));
+ gHighlightProgram.attachObject(loadShader(highlightfragment, SHADER_INTERFACE, GL_FRAGMENT_SHADER_ARB));
+
+ success = gHighlightProgram.mapAttributes();
+ if (success)
+ {
+ success = gHighlightProgram.mapUniforms();
+ }
+ if( !success )
+ {
+ llwarns << "Failed to load " << highlightvertex << llendl;
+ }
+ }
+
+ if( !success )
+ {
+ sVertexShaderLevel[SHADER_INTERFACE] = 0;
+ sMaxVertexShaderLevel[SHADER_INTERFACE] = 0;
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
+//===============================
+// LLGLSL Shader implementation
+//===============================
+LLGLSLShader::LLGLSLShader()
+: mProgramObject(0)
+{ }
+
+void LLGLSLShader::unload()
+{
+ stop_glerror();
+ mAttribute.clear();
+ mTexture.clear();
+ mUniform.clear();
+
+ if (mProgramObject)
+ {
+ GLhandleARB obj[1024];
+ GLsizei count;
+
+ glGetAttachedObjectsARB(mProgramObject, 1024, &count, obj);
+ for (GLsizei i = 0; i < count; i++)
+ {
+ glDeleteObjectARB(obj[i]);
+ }
+
+ glDeleteObjectARB(mProgramObject);
+
+ mProgramObject = 0;
+ }
+
+ //hack to make apple not complain
+ glGetError();
+
+ stop_glerror();
+}
+
+void LLGLSLShader::attachObject(GLhandleARB object)
+{
+ if (object != 0)
+ {
+ stop_glerror();
+ glAttachObjectARB(mProgramObject, object);
+ stop_glerror();
+ }
+ else
+ {
+ llwarns << "Attempting to attach non existing shader object. " << llendl;
+ }
+}
+
+void LLGLSLShader::attachObjects(GLhandleARB* objects, S32 count)
+{
+ for (S32 i = 0; i < count; i++)
+ {
+ attachObject(objects[i]);
+ }
+}
+
+BOOL LLGLSLShader::mapAttributes(const char** attrib_names, S32 count)
+{
+ //link the program
+ BOOL res = link();
+
+ mAttribute.clear();
+ mAttribute.resize(LLShaderMgr::sReservedAttribCount + count, -1);
+
+ if (res)
+ { //read back channel locations
+
+ //read back reserved channels first
+ for (S32 i = 0; i < (S32) LLShaderMgr::sReservedAttribCount; i++)
+ {
+ const char* name = LLShaderMgr::sReservedAttribs[i];
+ S32 index = glGetAttribLocationARB(mProgramObject, name);
+ if (index != -1)
+ {
+ mAttribute[i] = index;
+ llinfos << "Attribute " << name << " assigned to channel " << index << llendl;
+ }
+ }
+
+ for (S32 i = 0; i < count; i++)
+ {
+ const char* name = attrib_names[i];
+ S32 index = glGetAttribLocationARB(mProgramObject, name);
+ if (index != -1)
+ {
+ mAttribute[LLShaderMgr::sReservedAttribCount + i] = index;
+ llinfos << "Attribute " << name << " assigned to channel " << index << llendl;
+ }
+ }
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+void LLGLSLShader::mapUniform(GLint index, const char** uniform_names, S32 count)
+{
+ if (index == -1)
+ {
+ return;
+ }
+
+ GLenum type;
+ GLsizei length;
+ GLint size;
+ char name[1024]; /* Flawfinder: ignore */
+ name[0] = 0;
+
+ glGetActiveUniformARB(mProgramObject, index, 1024, &length, &size, &type, name);
+
+ //find the index of this uniform
+ for (S32 i = 0; i < (S32) LLShaderMgr::sReservedUniformCount; i++)
+ {
+ if (mUniform[i] == -1 && !strncmp(LLShaderMgr::sReservedUniforms[i],name, strlen(LLShaderMgr::sReservedUniforms[i]))) /* Flawfinder: ignore */
+ {
+ //found it
+ S32 location = glGetUniformLocationARB(mProgramObject, name);
+ mUniform[i] = location;
+ llinfos << "Uniform " << name << " is at location " << location << llendl;
+ mTexture[i] = mapUniformTextureChannel(location, type);
+ return;
+ }
+ }
+
+ for (S32 i = 0; i < count; i++)
+ {
+ if (mUniform[i+LLShaderMgr::sReservedUniformCount] == -1 &&
+ !strncmp(uniform_names[i],name, strlen(uniform_names[i]))) /* Flawfinder: ignore */
+ {
+ //found it
+ S32 location = glGetUniformLocationARB(mProgramObject, name);
+ mUniform[i+LLShaderMgr::sReservedUniformCount] = location;
+ llinfos << "Uniform " << name << " is at location " << location << " stored in index " <<
+ (i+LLShaderMgr::sReservedUniformCount) << llendl;
+ mTexture[i+LLShaderMgr::sReservedUniformCount] = mapUniformTextureChannel(location, type);
+ return;
+ }
+ }
+
+ //llinfos << "Unknown uniform: " << name << llendl;
+ }
+
+GLint LLGLSLShader::mapUniformTextureChannel(GLint location, GLenum type)
+{
+ if (type >= GL_SAMPLER_1D_ARB && type <= GL_SAMPLER_2D_RECT_SHADOW_ARB)
+ { //this here is a texture
+ glUniform1iARB(location, mActiveTextureChannels);
+ llinfos << "Assigned to texture channel " << mActiveTextureChannels << llendl;
+ return mActiveTextureChannels++;
+ }
+ return -1;
+}
+
+BOOL LLGLSLShader::mapUniforms(const char** uniform_names, S32 count)
+{
+ BOOL res = TRUE;
+
+ mActiveTextureChannels = 0;
+ mUniform.clear();
+ mTexture.clear();
+
+ //initialize arrays
+ mUniform.resize(count + LLShaderMgr::sReservedUniformCount, -1);
+ mTexture.resize(count + LLShaderMgr::sReservedUniformCount, -1);
+
+ bind();
+
+ //get the number of active uniforms
+ GLint activeCount;
+ glGetObjectParameterivARB(mProgramObject, GL_OBJECT_ACTIVE_UNIFORMS_ARB, &activeCount);
+
+ for (S32 i = 0; i < activeCount; i++)
+ {
+ mapUniform(i, uniform_names, count);
+ }
+
+ unbind();
+
+ return res;
+}
+
+BOOL LLGLSLShader::link(BOOL suppress_errors)
+{
+ return LLShaderMgr::linkProgramObject(mProgramObject, suppress_errors);
+}
+
+void LLGLSLShader::bind()
+{
+ glUseProgramObjectARB(mProgramObject);
+ if (mAttribute.size() > 0)
+ {
+ gMaterialIndex = mAttribute[0];
+ }
+}
+
+void LLGLSLShader::unbind()
+{
+ for (U32 i = 0; i < mAttribute.size(); ++i)
+ {
+ vertexAttrib4f(i, 0,0,0,1);
+ }
+ glUseProgramObjectARB(0);
+}
+
+S32 LLGLSLShader::enableTexture(S32 uniform, S32 mode)
+{
+ if (uniform < 0 || uniform >= (S32)mTexture.size())
+ {
+ llerrs << "LLGLSLShader::enableTexture: uniform out of range: " << uniform << llendl;
+ }
+ S32 index = mTexture[uniform];
+ if (index != -1)
+ {
+ glActiveTextureARB(GL_TEXTURE0_ARB+index);
+ glEnable(mode);
+ }
+ return index;
+}
+
+S32 LLGLSLShader::disableTexture(S32 uniform, S32 mode)
+{
+ S32 index = mTexture[uniform];
+ if (index != -1)
+ {
+ glActiveTextureARB(GL_TEXTURE0_ARB+index);
+ glDisable(mode);
+ }
+ return index;
+}
+
+void LLGLSLShader::vertexAttrib4f(U32 index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+{
+ if (mAttribute[index] > 0)
+ {
+ glVertexAttrib4fARB(mAttribute[index], x, y, z, w);
+ }
+}
+
+void LLGLSLShader::vertexAttrib4fv(U32 index, GLfloat* v)
+{
+ if (mAttribute[index] > 0)
+ {
+ glVertexAttrib4fvARB(mAttribute[index], v);
+ }
+}
+
+void LLScatterShader::init(GLhandleARB shader, int map_stage)
+{
+ glUseProgramObjectARB(shader);
+ glUniform1iARB(glGetUniformLocationARB(shader, "scatterMap"), map_stage);
+ glUseProgramObjectARB(0);
+}
+
diff --git a/linden/indra/newview/llglslshader.h b/linden/indra/newview/llglslshader.h
new file mode 100644
index 0000000..bbf91a8
--- /dev/null
+++ b/linden/indra/newview/llglslshader.h
@@ -0,0 +1,232 @@
+/**
+ * @file llglslshader.h
+ * @brief GLSL shader wrappers
+ *
+ * Copyright (c) 2001-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ */
+
+#ifndef LL_LLGLSLSHADER_H
+#define LL_LLGLSLSHADER_H
+
+#include "llgl.h"
+
+class LLGLSLShader
+{
+public:
+ LLGLSLShader();
+
+ void unload();
+ void attachObject(GLhandleARB object);
+ void attachObjects(GLhandleARB* objects = NULL, S32 count = 0);
+ BOOL mapAttributes(const char** attrib_names = NULL, S32 count = 0);
+ BOOL mapUniforms(const char** uniform_names = NULL, S32 count = 0);
+ void mapUniform(GLint index, const char** uniform_names = NULL, S32 count = 0);
+ void vertexAttrib4f(U32 index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+ void vertexAttrib4fv(U32 index, GLfloat* v);
+
+ GLint mapUniformTextureChannel(GLint location, GLenum type);
+
+
+ //enable/disable texture channel for specified uniform
+ //if given texture uniform is active in the shader,
+ //the corresponding channel will be active upon return
+ //returns channel texture is enabled in from [0-MAX)
+ S32 enableTexture(S32 uniform, S32 mode = GL_TEXTURE_2D);
+ S32 disableTexture(S32 uniform, S32 mode = GL_TEXTURE_2D);
+
+ BOOL link(BOOL suppress_errors = FALSE);
+ void bind();
+ void unbind();
+
+ GLhandleARB mProgramObject;
+ std::vector mAttribute;
+ std::vector mUniform;
+ std::vector mTexture;
+ S32 mActiveTextureChannels;
+};
+
+class LLScatterShader
+{
+public:
+ static void init(GLhandleARB shader, int map_stage);
+};
+
+class LLShaderMgr
+{
+public:
+ static void setShaders();
+ static void unloadShaders();
+ static void dumpObjectLog(GLhandleARB ret, BOOL warns = TRUE);
+ static BOOL linkProgramObject(GLhandleARB obj, BOOL suppress_errors = FALSE);
+ static BOOL validateProgramObject(GLhandleARB obj);
+ static GLhandleARB loadShader(const LLString& filename, S32 cls, GLenum type);
+ static S32 getVertexShaderLevel(S32 type);
+ static S32 getMaxVertexShaderLevel(S32 type);
+ static BOOL loadShadersLighting();
+ static BOOL loadShadersObject();
+ static BOOL loadShadersAvatar();
+ static BOOL loadShadersEnvironment();
+ static BOOL loadShadersInterface();
+ static S32 sVertexShaderLevel[];
+ static S32 sMaxVertexShaderLevel[];
+ //global (reserved slot) shader parameters
+ static const char* sReservedAttribs[];
+ static U32 sReservedAttribCount;
+
+ enum EShaderClass
+ {
+ SHADER_LIGHTING,
+ SHADER_OBJECT,
+ SHADER_AVATAR,
+ SHADER_ENVIRONMENT,
+ SHADER_INTERFACE,
+ SHADER_COUNT
+ };
+
+ typedef enum
+ {
+ MATERIAL_COLOR = 0,
+ SPECULAR_COLOR,
+ BINORMAL,
+ END_RESERVED_ATTRIBS
+ } eGLSLReservedAttribs;
+
+ static const char* sReservedUniforms[];
+ static U32 sReservedUniformCount;
+
+ typedef enum
+ {
+ DIFFUSE_MAP = 0,
+ SPECULAR_MAP,
+ BUMP_MAP,
+ ENVIRONMENT_MAP,
+ END_RESERVED_UNIFORMS
+ } eGLSLReservedUniforms;
+
+ static const char* sShinyUniforms[];
+ static U32 sShinyUniformCount;
+
+ typedef enum
+ {
+ SHINY_ORIGIN = END_RESERVED_UNIFORMS
+ } eShinyUniforms;
+
+ //water parameters
+ static const char* sWaterUniforms[];
+ static U32 sWaterUniformCount;
+
+ typedef enum
+ {
+ WATER_SCREENTEX = END_RESERVED_UNIFORMS,
+ WATER_EYEVEC,
+ WATER_TIME,
+ WATER_WAVE_DIR1,
+ WATER_WAVE_DIR2,
+ WATER_LIGHT_DIR,
+ WATER_SPECULAR,
+ WATER_SPECULAR_EXP,
+ WATER_FBSCALE,
+ WATER_REFSCALE
+ } eWaterUniforms;
+
+ //terrain parameters
+ static const char* sTerrainUniforms[];
+ static U32 sTerrainUniformCount;
+
+ typedef enum
+ {
+ TERRAIN_DETAIL0 = END_RESERVED_UNIFORMS,
+ TERRAIN_DETAIL1,
+ TERRAIN_ALPHARAMP
+ } eTerrainUniforms;
+
+ //glow parameters
+ static const char* sGlowUniforms[];
+ static U32 sGlowUniformCount;
+
+ typedef enum
+ {
+ GLOW_DELTA = END_RESERVED_UNIFORMS
+ } eGlowUniforms;
+
+ //avatar shader parameter tables
+ static const char* sAvatarAttribs[];
+ static U32 sAvatarAttribCount;
+
+ typedef enum
+ {
+ AVATAR_WEIGHT = END_RESERVED_ATTRIBS,
+ AVATAR_CLOTHING,
+ AVATAR_WIND,
+ AVATAR_SINWAVE,
+ AVATAR_GRAVITY
+ } eAvatarAttribs;
+
+ static const char* sAvatarUniforms[];
+ static U32 sAvatarUniformCount;
+
+ typedef enum
+ {
+ AVATAR_MATRIX = END_RESERVED_UNIFORMS
+ } eAvatarUniforms;
+
+}; //LLSL
+
+//utility shader objects (not shader programs)
+extern GLhandleARB gLightVertex;
+extern GLhandleARB gLightFragment;
+extern GLhandleARB gScatterVertex;
+extern GLhandleARB gScatterFragment;
+
+extern LLVector4 gShinyOrigin;
+
+//object shaders
+extern LLGLSLShader gObjectSimpleProgram;
+extern LLGLSLShader gObjectAlphaProgram;
+extern LLGLSLShader gObjectBumpProgram;
+extern LLGLSLShader gObjectShinyProgram;
+
+//environment shaders
+extern LLGLSLShader gTerrainProgram;
+extern LLGLSLShader gGlowProgram;
+extern LLGLSLShader gGroundProgram;
+extern LLGLSLShader gWaterProgram;
+
+//interface shaders
+extern LLGLSLShader gHighlightProgram;
+
+//avatar skinning utility shader object
+extern GLhandleARB gAvatarSkinVertex;
+
+//avatar shader handles
+extern LLGLSLShader gAvatarProgram;
+extern LLGLSLShader gAvatarEyeballProgram;
+extern LLGLSLShader gAvatarPickProgram;
+
+//current avatar shader parameter pointer
+extern GLint gAvatarMatrixParam;
+extern GLint gMaterialIndex;
+extern GLint gSpecularIndex;
+
+#endif
diff --git a/linden/indra/newview/llgroupmgr.cpp b/linden/indra/newview/llgroupmgr.cpp
index d020236..fbdcf81 100644
--- a/linden/indra/newview/llgroupmgr.cpp
+++ b/linden/indra/newview/llgroupmgr.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llgroupmgr.h b/linden/indra/newview/llgroupmgr.h
index 506f4e6..bc4fa71 100644
--- a/linden/indra/newview/llgroupmgr.h
+++ b/linden/indra/newview/llgroupmgr.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llgroupnotify.cpp b/linden/indra/newview/llgroupnotify.cpp
index d6e5785..de9b571 100644
--- a/linden/indra/newview/llgroupnotify.cpp
+++ b/linden/indra/newview/llgroupnotify.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -249,7 +250,7 @@ LLGroupNotifyBox::LLGroupNotifyBox(const char* subject,
LLViewerImage* item_icon = get_item_icon(mInventoryOffer->mType,
LLInventoryType::IT_TEXTURE,
- 0);
+ 0, FALSE);
x += LABEL_WIDTH + HPAD;
diff --git a/linden/indra/newview/llgroupnotify.h b/linden/indra/newview/llgroupnotify.h
index b0fdbe8..d465181 100644
--- a/linden/indra/newview/llgroupnotify.h
+++ b/linden/indra/newview/llgroupnotify.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llhippo.cpp b/linden/indra/newview/llhippo.cpp
index b2dd20f..9d4b52b 100644
--- a/linden/indra/newview/llhippo.cpp
+++ b/linden/indra/newview/llhippo.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llhippo.h b/linden/indra/newview/llhippo.h
index 0757e66..ee37dbe 100644
--- a/linden/indra/newview/llhippo.h
+++ b/linden/indra/newview/llhippo.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llhoverview.cpp b/linden/indra/newview/llhoverview.cpp
index 30ee2b0..6807b42 100644
--- a/linden/indra/newview/llhoverview.cpp
+++ b/linden/indra/newview/llhoverview.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -424,7 +425,7 @@ void LLHoverView::updateText()
{
temp_str = new LLString();
temp_str->append("For Sale: ");
- snprintf(cstring, sizeof(cstring), "L$%d", nodep->mSaleInfo.getSalePrice()); /*Flawfinder: ignore*/
+ snprintf(cstring, sizeof(cstring), "L$%d", nodep->mSaleInfo.getSalePrice()); /* Flawfinder: ignore */
temp_str->append(cstring);
mText.addDataAtEnd(temp_str);
suppressObjectHoverDisplay = FALSE; // Show tip
@@ -615,7 +616,7 @@ void LLHoverView::updateText()
if (hover_parcel && hover_parcel->getParcelFlag(PF_FOR_SALE))
{
char buffer[MAX_STRING]; /*Flawfinder: ignore*/
- snprintf(buffer, sizeof(buffer), "For Sale: L$%d", hover_parcel->getSalePrice() ); /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), "For Sale: L$%d", hover_parcel->getSalePrice() ); /* Flawfinder: ignore */
line = new LLString(buffer);
mText.addDataAtEnd(line);
diff --git a/linden/indra/newview/llhoverview.h b/linden/indra/newview/llhoverview.h
index e7fdd6a..ef93eae 100644
--- a/linden/indra/newview/llhoverview.h
+++ b/linden/indra/newview/llhoverview.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llhudconnector.cpp b/linden/indra/newview/llhudconnector.cpp
index 18c1bfc..8739917 100644
--- a/linden/indra/newview/llhudconnector.cpp
+++ b/linden/indra/newview/llhudconnector.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llhudconnector.h b/linden/indra/newview/llhudconnector.h
index 115fe28..4b7bf77 100644
--- a/linden/indra/newview/llhudconnector.h
+++ b/linden/indra/newview/llhudconnector.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llhudeffect.cpp b/linden/indra/newview/llhudeffect.cpp
index 090895e..96035c6 100644
--- a/linden/indra/newview/llhudeffect.cpp
+++ b/linden/indra/newview/llhudeffect.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llhudeffect.h b/linden/indra/newview/llhudeffect.h
index cc86bfa..98a7553 100644
--- a/linden/indra/newview/llhudeffect.h
+++ b/linden/indra/newview/llhudeffect.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llhudeffectbeam.cpp b/linden/indra/newview/llhudeffectbeam.cpp
index db24875..4b74f88 100644
--- a/linden/indra/newview/llhudeffectbeam.cpp
+++ b/linden/indra/newview/llhudeffectbeam.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llhudeffectbeam.h b/linden/indra/newview/llhudeffectbeam.h
index 0148b37..de6d18d 100644
--- a/linden/indra/newview/llhudeffectbeam.h
+++ b/linden/indra/newview/llhudeffectbeam.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llhudeffectlookat.cpp b/linden/indra/newview/llhudeffectlookat.cpp
index 99ae239..5250b57 100644
--- a/linden/indra/newview/llhudeffectlookat.cpp
+++ b/linden/indra/newview/llhudeffectlookat.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llhudeffectlookat.h b/linden/indra/newview/llhudeffectlookat.h
index 3d76df5..8fa1ac2 100644
--- a/linden/indra/newview/llhudeffectlookat.h
+++ b/linden/indra/newview/llhudeffectlookat.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llhudeffectpointat.cpp b/linden/indra/newview/llhudeffectpointat.cpp
index 7644ff8..7218642 100644
--- a/linden/indra/newview/llhudeffectpointat.cpp
+++ b/linden/indra/newview/llhudeffectpointat.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llhudeffectpointat.h b/linden/indra/newview/llhudeffectpointat.h
index 6fd0e62..aba4dc8 100644
--- a/linden/indra/newview/llhudeffectpointat.h
+++ b/linden/indra/newview/llhudeffectpointat.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llhudeffecttrail.cpp b/linden/indra/newview/llhudeffecttrail.cpp
index cf76357..fed3a9e 100644
--- a/linden/indra/newview/llhudeffecttrail.cpp
+++ b/linden/indra/newview/llhudeffecttrail.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llhudeffecttrail.h b/linden/indra/newview/llhudeffecttrail.h
index 5602d23..d14d000 100644
--- a/linden/indra/newview/llhudeffecttrail.h
+++ b/linden/indra/newview/llhudeffecttrail.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llhudicon.cpp b/linden/indra/newview/llhudicon.cpp
index d0d2ea5..93e730e 100644
--- a/linden/indra/newview/llhudicon.cpp
+++ b/linden/indra/newview/llhudicon.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llhudicon.h b/linden/indra/newview/llhudicon.h
index 53837d1..f26abb4 100644
--- a/linden/indra/newview/llhudicon.h
+++ b/linden/indra/newview/llhudicon.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llhudmanager.cpp b/linden/indra/newview/llhudmanager.cpp
index bb1c2da..f4eeb5b 100644
--- a/linden/indra/newview/llhudmanager.cpp
+++ b/linden/indra/newview/llhudmanager.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llhudmanager.h b/linden/indra/newview/llhudmanager.h
index a9567a1..41cf018 100644
--- a/linden/indra/newview/llhudmanager.h
+++ b/linden/indra/newview/llhudmanager.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llhudobject.cpp b/linden/indra/newview/llhudobject.cpp
index 4aef468..6032354 100644
--- a/linden/indra/newview/llhudobject.cpp
+++ b/linden/indra/newview/llhudobject.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llhudobject.h b/linden/indra/newview/llhudobject.h
index d5494ac..bacffce 100644
--- a/linden/indra/newview/llhudobject.h
+++ b/linden/indra/newview/llhudobject.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llhudrender.cpp b/linden/indra/newview/llhudrender.cpp
index 8060318..f85638e 100644
--- a/linden/indra/newview/llhudrender.cpp
+++ b/linden/indra/newview/llhudrender.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llhudrender.h b/linden/indra/newview/llhudrender.h
index bcc202c..1233f46 100644
--- a/linden/indra/newview/llhudrender.h
+++ b/linden/indra/newview/llhudrender.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llhudtext.cpp b/linden/indra/newview/llhudtext.cpp
index bacfaa0..740cce0 100644
--- a/linden/indra/newview/llhudtext.cpp
+++ b/linden/indra/newview/llhudtext.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llhudtext.h b/linden/indra/newview/llhudtext.h
index 962bd1d..033702b 100644
--- a/linden/indra/newview/llhudtext.h
+++ b/linden/indra/newview/llhudtext.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llhudview.cpp b/linden/indra/newview/llhudview.cpp
index 91aa589..2ce9172 100644
--- a/linden/indra/newview/llhudview.cpp
+++ b/linden/indra/newview/llhudview.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llhudview.h b/linden/indra/newview/llhudview.h
index c09f883..d958f9c 100644
--- a/linden/indra/newview/llhudview.h
+++ b/linden/indra/newview/llhudview.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llimpanel.cpp b/linden/indra/newview/llimpanel.cpp
index 088d601..d95abf3 100644
--- a/linden/indra/newview/llimpanel.cpp
+++ b/linden/indra/newview/llimpanel.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -74,40 +75,171 @@ const S32 MIN_HEIGHT = 130;
//
static LLString sTitleString = "Instant Message with [NAME]";
static LLString sTypingStartString = "[NAME]: ...";
+static LLString sSessionStartString = "Starting session with [NAME] please wait.";
+
+void session_starter_helper(const LLUUID& temp_session_id,
+ const LLUUID& other_participant_id,
+ EInstantMessage im_type)
+{
+ LLMessageSystem *msg = gMessageSystem;
+
+ msg->newMessageFast(_PREHASH_ImprovedInstantMessage);
+ msg->nextBlockFast(_PREHASH_AgentData);
+ msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+ msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+
+ msg->nextBlockFast(_PREHASH_MessageBlock);
+ msg->addBOOLFast(_PREHASH_FromGroup, FALSE);
+ msg->addUUIDFast(_PREHASH_ToAgentID, other_participant_id);
+ msg->addU8Fast(_PREHASH_Offline, IM_ONLINE);
+ msg->addU8Fast(_PREHASH_Dialog, im_type);
+ msg->addUUIDFast(_PREHASH_ID, temp_session_id);
+ msg->addU32Fast(_PREHASH_Timestamp, NO_TIMESTAMP); // no timestamp necessary
+
+ std::string name;
+ gAgent.buildFullname(name);
+
+ msg->addStringFast(_PREHASH_FromAgentName, name);
+ msg->addStringFast(_PREHASH_Message, LLString::null);
+ msg->addU32Fast(_PREHASH_ParentEstateID, 0);
+ msg->addUUIDFast(_PREHASH_RegionID, LLUUID::null);
+ msg->addVector3Fast(_PREHASH_Position, gAgent.getPositionAgent());
+}
+
+// Returns true if any messages were sent, false otherwise.
+// Is sort of equivalent to "does the server need to do anything?"
+bool send_start_session_messages(const LLUUID& temp_session_id,
+ const LLUUID& other_participant_id,
+ const LLDynamicArray& ids,
+ EInstantMessage dialog)
+{
+ if ( (dialog == IM_SESSION_911_START) ||
+ (dialog == IM_SESSION_GROUP_START) ||
+ (dialog == IM_SESSION_CONFERENCE_START) )
+ {
+ S32 count = ids.size();
+ S32 bucket_size = UUID_BYTES * count;
+ U8* bucket;
+ U8* pos;
+
+ session_starter_helper(temp_session_id,
+ other_participant_id,
+ dialog);
+
+ switch(dialog)
+ {
+ case IM_SESSION_GROUP_START:
+ case IM_SESSION_911_START:
+ gMessageSystem->addBinaryDataFast(_PREHASH_BinaryBucket,
+ EMPTY_BINARY_BUCKET,
+ EMPTY_BINARY_BUCKET_SIZE);
+ break;
+ case IM_SESSION_CONFERENCE_START:
+ bucket = new U8[bucket_size];
+ pos = bucket;
+
+ // *FIX: this could suffer from endian issues
+ for(S32 i = 0; i < count; ++i)
+ {
+ memcpy(pos, &(ids.get(i)), UUID_BYTES);
+ pos += UUID_BYTES;
+ }
+ gMessageSystem->addBinaryDataFast(_PREHASH_BinaryBucket,
+ bucket,
+ bucket_size);
+ delete[] bucket;
+
+ break;
+ default:
+ break;
+ }
+ gAgent.sendReliableMessage();
+
+ return true;
+ }
+
+ return false;
+}
// Member Functions
//
-LLFloaterIMPanel::LLFloaterIMPanel(const std::string& name, const LLRect& rect,
- const std::string& session_label,
- const LLUUID& session_id,
- const LLUUID& other_participant_id,
- EInstantMessage dialog) :
+LLFloaterIMPanel::LLFloaterIMPanel(const std::string& name,
+ const LLRect& rect,
+ const std::string& session_label,
+ const LLUUID& session_id,
+ const LLUUID& other_participant_id,
+ EInstantMessage dialog) :
+ LLFloater(name, rect, session_label),
+ mInputEditor(NULL),
+ mHistoryEditor(NULL),
+ mSessionUUID(session_id),
+ mOtherParticipantUUID(other_participant_id),
+ mDialog(dialog),
+ mTyping(FALSE),
+ mOtherTyping(FALSE),
+ mTypingLineStartIndex(0),
+ mSentTypingState(TRUE),
+ mFirstKeystrokeTimer(),
+ mLastKeystrokeTimer(),
+ mSessionInitialized(FALSE),
+ mSessionInitRequested(FALSE)
+{
+ init(session_label);
+}
+
+LLFloaterIMPanel::LLFloaterIMPanel(const std::string& name,
+ const LLRect& rect,
+ const std::string& session_label,
+ const LLUUID& session_id,
+ const LLUUID& other_participant_id,
+ const LLDynamicArray& ids,
+ EInstantMessage dialog) :
LLFloater(name, rect, session_label),
mInputEditor(NULL),
mHistoryEditor(NULL),
- mSessionLabel(session_label),
mSessionUUID(session_id),
mOtherParticipantUUID(other_participant_id),
- mLureID(),
mDialog(dialog),
mTyping(FALSE),
mOtherTyping(FALSE),
mTypingLineStartIndex(0),
mSentTypingState(TRUE),
mFirstKeystrokeTimer(),
- mLastKeystrokeTimer()
+ mLastKeystrokeTimer(),
+ mSessionInitialized(FALSE),
+ mSessionInitRequested(FALSE)
+{
+ init(session_label);
+
+ mSessionInitialTargetIDs = ids;
+}
+
+
+void LLFloaterIMPanel::init(const LLString& session_label)
{
- init();
+ gUICtrlFactory->buildFloater(this,
+ "floater_instant_message.xml",
+ NULL,
+ FALSE);
+
setLabel(session_label);
setTitle(session_label);
mInputEditor->setMaxTextLength(1023);
-}
+ if ( gSavedPerAccountSettings.getBOOL("LogShowHistory") )
+ {
+ LLLogChat::loadHistory(session_label,
+ &chatFromLogFile,
+ (void *)this);
+ }
-void LLFloaterIMPanel::init()
-{
- gUICtrlFactory->buildFloater(this, "floater_instant_message.xml", NULL, FALSE);
+ if(IM_SESSION_911_START == mDialog)
+ {
+ LLTextBox* live_help_text =
+ LLUICtrlFactory::getTextBoxByName(this, "live_help_dialog");
+ addHistoryLine(live_help_text->getText());
+ }
}
@@ -120,6 +252,8 @@ BOOL LLFloaterIMPanel::postBuild()
requires("live_help_dialog", WIDGET_TYPE_TEXT_BOX);
requires("title_string", WIDGET_TYPE_TEXT_BOX);
requires("typing_start_string", WIDGET_TYPE_TEXT_BOX);
+ requires("session_start_string", WIDGET_TYPE_TEXT_BOX);
+ requires("teleport_btn", WIDGET_TYPE_BUTTON);
if (checkRequirements())
{
@@ -137,24 +271,19 @@ BOOL LLFloaterIMPanel::postBuild()
LLButton* close_btn = LLUICtrlFactory::getButtonByName(this, "close_btn");
close_btn->setClickedCallback(&LLFloaterIMPanel::onClickClose, this);
+ LLButton* tp_btn = LLUICtrlFactory::getButtonByName(this, "teleport_btn");
+ tp_btn->setClickedCallback(&LLFloaterIMPanel::onTeleport, this);
+ tp_btn->setVisible(FALSE);
+ tp_btn->setEnabled(FALSE);
+
mHistoryEditor = LLViewerUICtrlFactory::getViewerTextEditorByName(this, "im_history");
mHistoryEditor->setParseHTML(TRUE);
- if ( gSavedPerAccountSettings.getBOOL("LogShowHistory") )
- {
- LLLogChat::loadHistory(mSessionLabel, &chatFromLogFile, (void *)this);
- }
if (IM_SESSION_GROUP_START == mDialog
|| IM_SESSION_911_START == mDialog)
{
profile_btn->setEnabled(FALSE);
- if(IM_SESSION_911_START == mDialog)
- {
- LLTextBox* live_help_text = LLUICtrlFactory::getTextBoxByName(this, "live_help_dialog");
- addHistoryLine(live_help_text->getText());
- }
}
-
LLTextBox* title = LLUICtrlFactory::getTextBoxByName(this, "title_string");
sTitleString = title->getText();
@@ -162,6 +291,11 @@ BOOL LLFloaterIMPanel::postBuild()
sTypingStartString = typing_start->getText();
+ LLTextBox* session_start = LLUICtrlFactory::getTextBoxByName(
+ this,
+ "session_start_string");
+ sSessionStartString = session_start->getText();
+
return TRUE;
}
@@ -195,12 +329,14 @@ void LLFloaterIMPanel::draw()
BOOL LLFloaterIMPanel::addParticipants(const LLDynamicArray& ids)
{
- if(isAddAllowed())
+ S32 count = ids.count();
+
+ if( isAddAllowed() && (count > 0) )
{
llinfos << "LLFloaterIMPanel::addParticipants() - adding participants" << llendl;
const S32 MAX_AGENTS = 50;
- S32 count = ids.count();
if(count > MAX_AGENTS) return FALSE;
+
LLMessageSystem *msg = gMessageSystem;
msg->newMessageFast(_PREHASH_ImprovedInstantMessage);
msg->nextBlockFast(_PREHASH_AgentData);
@@ -210,7 +346,7 @@ BOOL LLFloaterIMPanel::addParticipants(const LLDynamicArray& ids)
msg->addBOOLFast(_PREHASH_FromGroup, FALSE);
msg->addUUIDFast(_PREHASH_ToAgentID, mOtherParticipantUUID);
msg->addU8Fast(_PREHASH_Offline, IM_ONLINE);
- msg->addU8Fast(_PREHASH_Dialog, mDialog);
+ msg->addU8Fast(_PREHASH_Dialog, IM_SESSION_ADD);
msg->addUUIDFast(_PREHASH_ID, mSessionUUID);
msg->addU32Fast(_PREHASH_Timestamp, NO_TIMESTAMP); // no timestamp necessary
std::string name;
@@ -220,57 +356,21 @@ BOOL LLFloaterIMPanel::addParticipants(const LLDynamicArray& ids)
msg->addU32Fast(_PREHASH_ParentEstateID, 0);
msg->addUUIDFast(_PREHASH_RegionID, LLUUID::null);
msg->addVector3Fast(_PREHASH_Position, gAgent.getPositionAgent());
- if (IM_SESSION_GROUP_START == mDialog)
- {
- // *HACK: binary bucket contains session label - the server
- // will actually add agents.
- llinfos << "Group IM session name '" << mSessionLabel
- << "'" << llendl;
- msg->addStringFast(_PREHASH_BinaryBucket, mSessionLabel);
- gAgent.sendReliableMessage();
- }
- else if (IM_SESSION_911_START == mDialog)
- {
- // HACK -- we modify the name of the session going out to
- // the helpers to help them easily identify "Help"
- // sessions in their collection of IM panels.
- LLString name;
- gAgent.getName(name);
- LLString buffer = LLString("HELP ") + name;
- llinfos << "LiveHelp IM session '" << buffer << "'." << llendl;
- msg->addStringFast(_PREHASH_BinaryBucket, buffer.c_str());
-
- // automaticaly open a wormhole when this reliable message gets through
- msg->sendReliable(
- gAgent.getRegionHost(),
- 3, // retries
- TRUE, // ping-based
- 5.0f, // timeout
- send_lure_911,
- (void**)&mSessionUUID);
- }
- else
+
+ // *FIX: this could suffer from endian issues
+ S32 bucket_size = UUID_BYTES * count;
+ U8* bucket = new U8[bucket_size];
+ U8* pos = bucket;
+ for(S32 i = 0; i < count; ++i)
{
- if (mDialog != IM_SESSION_ADD
- && mDialog != IM_SESSION_OFFLINE_ADD)
- {
- llwarns << "LLFloaterIMPanel::addParticipants() - dialog type " << mDialog
- << " is not an ADD" << llendl;
- }
- // *FIX: this could suffer from endian issues
- S32 bucket_size = UUID_BYTES * count;
- U8* bucket = new U8[bucket_size];
- U8* pos = bucket;
- for(S32 i = 0; i < count; ++i)
- {
- memcpy(pos, &(ids.get(i)), UUID_BYTES); /* Flawfinder: ignore */
- pos += UUID_BYTES;
- }
- msg->addBinaryDataFast(_PREHASH_BinaryBucket, bucket, bucket_size);
- delete[] bucket;
- gAgent.sendReliableMessage();
+ memcpy(pos, &(ids.get(i)), UUID_BYTES);
+ pos += UUID_BYTES;
}
-
+ msg->addBinaryDataFast(_PREHASH_BinaryBucket,
+ bucket,
+ bucket_size);
+ delete[] bucket;
+ gAgent.sendReliableMessage();
}
else
{
@@ -279,6 +379,7 @@ BOOL LLFloaterIMPanel::addParticipants(const LLDynamicArray& ids)
// successful add, because everyone that needed to get added
// was added.
}
+
return TRUE;
}
@@ -312,7 +413,7 @@ void LLFloaterIMPanel::addHistoryLine(const std::string &utf8msg, const LLColor4
{
LLString histstr = timestring + utf8msg;
- LLLogChat::saveHistory(mSessionLabel,histstr);
+ LLLogChat::saveHistory(getTitle(),histstr);
}
}
@@ -474,11 +575,8 @@ BOOL LLFloaterIMPanel::dropCategory(LLInventoryCategory* category, BOOL drop)
BOOL LLFloaterIMPanel::isAddAllowed() const
{
- return ((IM_SESSION_ADD == mDialog)
- || (IM_SESSION_OFFLINE_ADD == mDialog)
- || (IM_SESSION_GROUP_START == mDialog)
- || (IM_SESSION_911_START == mDialog)
- || (IM_SESSION_CARDLESS_START == mDialog));
+ return ((IM_SESSION_CONFERENCE_START == mDialog)
+ || (IM_SESSION_ADD) );
}
@@ -512,72 +610,36 @@ void LLFloaterIMPanel::onClickClose( void* userdata )
}
}
-void LLFloaterIMPanel::addTeleportButton(const LLUUID& lure_id)
+void LLFloaterIMPanel::addTeleportButton()
{
- LLButton* btn = LLViewerUICtrlFactory::getButtonByName(this, "Teleport Btn");
- if (!btn)
- {
- S32 BTN_VPAD = 2;
- S32 BTN_HPAD = 2;
+ LLButton* btn =
+ LLViewerUICtrlFactory::getButtonByName(this, "teleport_btn");
- const char* teleport_label = "Teleport";
-
- const LLFontGL* font = gResMgr->getRes( LLFONT_SANSSERIF );
- S32 p_btn_width = 75;
- S32 c_btn_width = 60;
- S32 t_btn_width = 75;
-
- // adjust the size of the editor to make room for the new button
+ if ( !btn->getEnabled() )
+ {
+ //it's required, don't need to check for null here
+ // adjust the size of the editor to make room for the button
LLRect rect = mInputEditor->getRect();
- S32 editor_right = rect.mRight - t_btn_width;
+ S32 editor_right = rect.mRight - btn->getRect().getWidth();
rect.mRight = editor_right;
mInputEditor->reshape(rect.getWidth(), rect.getHeight(), FALSE);
mInputEditor->setRect(rect);
-
- const S32 IMPANEL_PAD = 1 + LLPANEL_BORDER_WIDTH;
- const S32 IMPANEL_INPUT_HEIGHT = 20;
-
- rect.setLeftTopAndSize(
- mRect.getWidth() - IMPANEL_PAD - p_btn_width - c_btn_width - t_btn_width - BTN_HPAD - RESIZE_HANDLE_WIDTH,
- IMPANEL_INPUT_HEIGHT + IMPANEL_PAD - BTN_VPAD,
- t_btn_width,
- BTN_HEIGHT);
-
- btn = new LLButton(
- "Teleport Btn", rect,
- "","", "",
- &LLFloaterIMPanel::onTeleport, this,
- font, teleport_label, teleport_label );
-
- btn->setFollowsBottom();
- btn->setFollowsRight();
- addChild( btn );
- }
- btn->setEnabled(TRUE);
- mLureID = lure_id;
-}
-void LLFloaterIMPanel::removeTeleportButton()
-{
- // TODO -- purge the button
- LLButton* btn = LLViewerUICtrlFactory::getButtonByName(this, "Teleport Btn");
- if (btn)
- {
- btn->setEnabled(FALSE);
+ btn->setVisible(TRUE);
+ btn->setEnabled(TRUE);
}
}
-// static
+// static
void LLFloaterIMPanel::onTeleport(void* userdata)
{
LLFloaterIMPanel* self = (LLFloaterIMPanel*) userdata;
if(self)
{
- send_simple_im(self->mLureID,
- "",
- IM_LURE_911,
- LLUUID::null);
- self->removeTeleportButton();
+ send_simple_im(self->mSessionUUID, //to
+ "",
+ IM_TELEPORT_911,
+ self->mSessionUUID);//session
}
}
@@ -589,7 +651,7 @@ void LLFloaterIMPanel::onInputEditorFocusReceived( LLUICtrl* caller, void* userd
}
// static
-void LLFloaterIMPanel::onInputEditorFocusLost(LLLineEditor* caller, void* userdata)
+void LLFloaterIMPanel::onInputEditorFocusLost(LLUICtrl* caller, void* userdata)
{
LLFloaterIMPanel* self = (LLFloaterIMPanel*) userdata;
self->setTyping(FALSE);
@@ -637,6 +699,44 @@ void LLFloaterIMPanel::onClose(bool app_quitting)
destroy();
}
+void deliver_message(const std::string& utf8_text,
+ const LLUUID& im_session_id,
+ const LLUUID& other_participant_id,
+ EInstantMessage dialog)
+{
+ std::string name;
+ gAgent.buildFullname(name);
+
+ const LLRelationship* info = NULL;
+ info = LLAvatarTracker::instance().getBuddyInfo(other_participant_id);
+ U8 offline = (!info || info->isOnline()) ? IM_ONLINE : IM_OFFLINE;
+
+ // default to IM_SESSION_SEND unless it's nothing special - in
+ // which case it's probably an IM to everyone.
+ U8 new_dialog = dialog;
+
+ if ( dialog == IM_SESSION_911_START )
+ {
+ new_dialog = IM_SESSION_911_SEND;
+ }
+ else if ( dialog != IM_NOTHING_SPECIAL )
+ {
+ new_dialog = IM_SESSION_SEND;
+ }
+
+ pack_instant_message(
+ gMessageSystem,
+ gAgent.getID(),
+ FALSE,
+ gAgent.getSessionID(),
+ other_participant_id,
+ name.c_str(),
+ utf8_text.c_str(),
+ offline,
+ (EInstantMessage)new_dialog,
+ im_session_id);
+ gAgent.sendReliableMessage();
+}
void LLFloaterIMPanel::sendMsg()
{
@@ -654,50 +754,82 @@ void LLFloaterIMPanel::sendMsg()
// Truncate and convert to UTF8 for transport
std::string utf8_text = wstring_to_utf8str(text);
utf8_text = utf8str_truncate(utf8_text, MAX_MSG_BUF_SIZE - 1);
- std::string name;
- gAgent.buildFullname(name);
-
- const LLRelationship* info = NULL;
- info = LLAvatarTracker::instance().getBuddyInfo(mOtherParticipantUUID);
- U8 offline = (!info || info->isOnline()) ? IM_ONLINE : IM_OFFLINE;
-
- // default to IM_SESSION_SEND unless it's nothing special - in
- // which case it's probably an IM to everyone.
- U8 dialog = (mDialog == IM_NOTHING_SPECIAL)
- ? (U8)IM_NOTHING_SPECIAL : (U8)IM_SESSION_SEND;
- pack_instant_message(
- gMessageSystem,
- gAgent.getID(),
- FALSE,
- gAgent.getSessionID(),
- mOtherParticipantUUID,
- name.c_str(),
- utf8_text.c_str(),
- offline,
- (EInstantMessage)dialog,
- mSessionUUID);
- gAgent.sendReliableMessage();
- // local echo
- if((mDialog == IM_NOTHING_SPECIAL) && (mOtherParticipantUUID.notNull()))
+ if ( !mSessionInitialized )
{
- std::string history_echo;
- gAgent.buildFullname(history_echo);
-
- // Look for IRC-style emotes here.
- char tmpstr[5]; /* Flawfinder: ignore */
- strncpy(tmpstr,utf8_text.substr(0,4).c_str(), sizeof(tmpstr) -1); /* Flawfinder: ignore */
- tmpstr[sizeof(tmpstr) -1] = '\0';
- if (!strncmp(tmpstr, "/me ", 4) || !strncmp(tmpstr, "/me'", 4))
+ //we send requests (if we need to) to initialize our session
+ if ( !mSessionInitRequested )
{
- utf8_text.replace(0,3,"");
+ mSessionInitRequested = TRUE;
+ if ( !send_start_session_messages(mSessionUUID,
+ mOtherParticipantUUID,
+ mSessionInitialTargetIDs,
+ mDialog) )
+ {
+ //we don't need to need to wait for any responses
+ //so we don't need to disable
+ mSessionInitialized = TRUE;
+ }
+ else
+ {
+ //queue up the message to send once the session is
+ //initialized
+ mQueuedMsgsForInit.append(utf8_text);
+
+ //locally echo a little "starting session" message
+ LLUIString session_start = sSessionStartString;
+
+ session_start.setArg("[NAME]", getTitle());
+ mSessionStartMsgPos =
+ mHistoryEditor->getText().length();
+
+ bool log_to_file = false;
+ addHistoryLine(session_start,
+ LLColor4::grey,
+ log_to_file);
+
+ }
}
else
{
- history_echo += ": ";
+ //queue up the message to send once the session is
+ //initialized
+ mQueuedMsgsForInit.append(utf8_text);
+ }
+ }
+
+ if ( mSessionInitialized )
+ {
+ deliver_message(utf8_text,
+ mSessionUUID,
+ mOtherParticipantUUID,
+ mDialog);
+
+ // local echo
+ if((mDialog == IM_NOTHING_SPECIAL) &&
+ (mOtherParticipantUUID.notNull()))
+ {
+ std::string history_echo;
+ gAgent.buildFullname(history_echo);
+
+ // Look for IRC-style emotes here.
+ char tmpstr[5]; /* Flawfinder: ignore */
+ strncpy(tmpstr,
+ utf8_text.substr(0,4).c_str(),
+ sizeof(tmpstr) -1); /* Flawfinder: ignore */
+ tmpstr[sizeof(tmpstr) -1] = '\0';
+ if (!strncmp(tmpstr, "/me ", 4) ||
+ !strncmp(tmpstr, "/me'", 4))
+ {
+ utf8_text.replace(0,3,"");
+ }
+ else
+ {
+ history_echo += ": ";
+ }
+ history_echo += utf8_text;
+ addHistoryLine(history_echo);
}
- history_echo += utf8_text;
- addHistoryLine(history_echo);
}
gViewerStats->incStat(LLViewerStats::ST_IM_COUNT);
@@ -710,6 +842,31 @@ void LLFloaterIMPanel::sendMsg()
mSentTypingState = TRUE;
}
+void LLFloaterIMPanel::sessionInitReplyReceived(const LLUUID& session_id)
+{
+ mSessionUUID = session_id;
+ mSessionInitialized = TRUE;
+
+ //we assume the history editor hasn't moved at all since
+ //we added the starting session message
+ //so, we count how many characters to remove
+ S32 chars_to_remove = mHistoryEditor->getText().length() -
+ mSessionStartMsgPos;
+ mHistoryEditor->removeTextFromEnd(chars_to_remove);
+
+ //and now, send the queued msg
+ LLSD::array_iterator iter;
+ for ( iter = mQueuedMsgsForInit.beginArray();
+ iter != mQueuedMsgsForInit.endArray();
+ ++iter)
+ {
+ deliver_message(iter->asString(),
+ mSessionUUID,
+ mOtherParticipantUUID,
+ mDialog);
+ }
+}
+
void LLFloaterIMPanel::setTyping(BOOL typing)
{
diff --git a/linden/indra/newview/llimpanel.h b/linden/indra/newview/llimpanel.h
index 877fd88..e760513 100644
--- a/linden/indra/newview/llimpanel.h
+++ b/linden/indra/newview/llimpanel.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -46,10 +47,20 @@ public:
// the default. For example, if you open a session though a
// calling card, a new session id will be generated, but the
// target_id will be the agent referenced by the calling card.
- LLFloaterIMPanel(const std::string& name, const LLRect& rect,
- const std::string& session_label,
- const LLUUID& session_id, const LLUUID& target_id,
- EInstantMessage dialog);
+ LLFloaterIMPanel(const std::string& name,
+ const LLRect& rect,
+ const std::string& session_label,
+ const LLUUID& session_id,
+ const LLUUID& target_id,
+ EInstantMessage dialog);
+ LLFloaterIMPanel(const std::string& name,
+ const LLRect& rect,
+ const std::string& session_label,
+ const LLUUID& session_id,
+ const LLUUID& target_id,
+ const LLDynamicArray& ids,
+ EInstantMessage dialog);
+
/*virtual*/ BOOL postBuild();
@@ -78,21 +89,21 @@ public:
LLString& tooltip_msg);
static void onInputEditorFocusReceived( LLUICtrl* caller, void* userdata );
- static void onInputEditorFocusLost(LLLineEditor* caller, void* userdata);
+ static void onInputEditorFocusLost(LLUICtrl* caller, void* userdata);
static void onInputEditorKeystroke(LLLineEditor* caller, void* userdata);
static void onTabClick( void* userdata );
static void onClickProfile( void* userdata ); // Profile button pressed
static void onClickClose( void* userdata );
- //const LLUUID& getItemUUID() const { return mItemUUID; }
const LLUUID& getSessionID() const { return mSessionUUID; }
const LLUUID& getOtherParticipantID() const { return mOtherParticipantUUID; }
// HACK -- for enabling a teleport button for helpers
static void onTeleport(void* userdata);
- void addTeleportButton(const LLUUID& lure_id);
- void removeTeleportButton();
+ void addTeleportButton();
+
+ void sessionInitReplyReceived(const LLUUID& im_session_id);
// Handle other participant in the session typing.
void processIMTyping(const LLIMInfo* im_info, BOOL typing);
@@ -100,7 +111,7 @@ public:
private:
// called by constructors
- void init();
+ void init(const LLString& session_label);
// Called by UI methods.
void sendMsg();
@@ -129,7 +140,6 @@ private:
private:
LLLineEditor* mInputEditor;
LLViewerTextEditor* mHistoryEditor;
- std::string mSessionLabel;
// The value of the mSessionUUID depends on how the IM session was started:
// one-on-one ==> random id
@@ -138,15 +148,17 @@ private:
// 911 ==> Gaurdian_Angel_Group_ID ^ gAgent.getID()
LLUUID mSessionUUID;
+ BOOL mSessionInitRequested;
+ BOOL mSessionInitialized;
+ LLSD mQueuedMsgsForInit;
+
// The value mOtherParticipantUUID depends on how the IM session was started:
// one-on-one = recipient's id
// group ==> group_id
// inventory folder ==> first target id in list
// 911 ==> sender
LLUUID mOtherParticipantUUID;
-
- // the lure ID for help IM sessions
- LLUUID mLureID;
+ LLDynamicArray mSessionInitialTargetIDs;
EInstantMessage mDialog;
@@ -158,6 +170,8 @@ private:
// Where does the "User is typing..." line start?
S32 mTypingLineStartIndex;
+ //Where does the "Starting session..." line start?
+ S32 mSessionStartMsgPos;
BOOL mSentTypingState;
@@ -168,6 +182,8 @@ private:
// Timer to detect when user has stopped typing.
LLFrameTimer mLastKeystrokeTimer;
+
+ void disableWhileSessionStarting();
};
diff --git a/linden/indra/newview/llimview.cpp b/linden/indra/newview/llimview.cpp
index a4fd729..38471ad 100644
--- a/linden/indra/newview/llimview.cpp
+++ b/linden/indra/newview/llimview.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -42,6 +43,7 @@
#include "llviewerwindow.h"
#include "llresmgr.h"
#include "llfloaternewim.h"
+#include "llhttpnode.h"
#include "llimpanel.h"
#include "llresizebar.h"
#include "lltabcontainer.h"
@@ -54,7 +56,6 @@
#include "llcallingcard.h"
#include "lltoolbar.h"
-const EInstantMessage EVERYONE_DIALOG = IM_NOTHING_SPECIAL;
const EInstantMessage GROUP_DIALOG = IM_SESSION_GROUP_START;
const EInstantMessage DEFAULT_DIALOG = IM_NOTHING_SPECIAL;
@@ -69,6 +70,9 @@ LLIMView* gIMView = NULL;
static LLString sOnlyUserMessage;
static LLString sOfflineMessage;
+static std::map sEventStringsMap;
+static std::map sErrorStringsMap;
+static std::map sForceCloseSessionMap;
//
// Helper Functions
//
@@ -82,7 +86,8 @@ static BOOL group_dictionary_sort( LLGroupData* a, LLGroupData* b )
// the other_participant_id is either an agent_id, a group_id, or an inventory
// folder item_id (collection of calling cards)
-static LLUUID compute_session_id(EInstantMessage dialog, const LLUUID& other_participant_id)
+static LLUUID compute_session_id(EInstantMessage dialog,
+ const LLUUID& other_participant_id)
{
LLUUID session_id;
if (IM_SESSION_GROUP_START == dialog)
@@ -90,6 +95,10 @@ static LLUUID compute_session_id(EInstantMessage dialog, const LLUUID& other_par
// slam group session_id to the group_id (other_participant_id)
session_id = other_participant_id;
}
+ else if (IM_SESSION_CONFERENCE_START == dialog)
+ {
+ session_id.generate();
+ }
else
{
LLUUID agent_id = gAgent.getID();
@@ -121,11 +130,34 @@ BOOL LLFloaterIM::postBuild()
{
requires("only_user_message", WIDGET_TYPE_TEXT_BOX);
requires("offline_message", WIDGET_TYPE_TEXT_BOX);
+ requires("generic_request_error", WIDGET_TYPE_TEXT_BOX);
+ requires("insufficient_perms_error", WIDGET_TYPE_TEXT_BOX);
+ requires("generic_request_error", WIDGET_TYPE_TEXT_BOX);
+ requires("add_session_event", WIDGET_TYPE_TEXT_BOX);
+ requires("message_session_event", WIDGET_TYPE_TEXT_BOX);
+ requires("removed_from_group", WIDGET_TYPE_TEXT_BOX);
if (checkRequirements())
{
sOnlyUserMessage = childGetText("only_user_message");
sOfflineMessage = childGetText("offline_message");
+
+ sErrorStringsMap["generic"] =
+ childGetText("generic_request_error");
+ sErrorStringsMap["unverified"] =
+ childGetText("insufficient_perms_error");
+ sErrorStringsMap["no_user_911"] =
+ childGetText("user_no_help");
+
+ sEventStringsMap["add"] = childGetText("add_session_event");;
+ sEventStringsMap["message"] =
+ childGetText("message_session_event");;
+ sEventStringsMap["teleport"] =
+ childGetText("teleport_session_event");;
+
+ sForceCloseSessionMap["removed"] =
+ childGetText("removed_from_group");
+
return TRUE;
}
return FALSE;
@@ -209,16 +241,12 @@ protected:
// static
EInstantMessage LLIMView::defaultIMTypeForAgent(const LLUUID& agent_id)
{
- EInstantMessage type = IM_SESSION_CARDLESS_START;
+ EInstantMessage type = IM_NOTHING_SPECIAL;
if(is_agent_friend(agent_id))
{
if(LLAvatarTracker::instance().isBuddyOnline(agent_id))
{
- type = IM_SESSION_ADD;
- }
- else
- {
- type = IM_SESSION_OFFLINE_ADD;
+ type = IM_SESSION_CONFERENCE_START;
}
}
return type;
@@ -426,18 +454,25 @@ BOOL LLIMView::isIMSessionOpen(const LLUUID& uuid)
// exists, it is brought forward. Specifying id = NULL results in an
// im session to everyone. Returns the uuid of the session.
LLUUID LLIMView::addSession(const std::string& name,
- EInstantMessage dialog,
- const LLUUID& other_participant_id)
+ EInstantMessage dialog,
+ const LLUUID& other_participant_id)
{
LLUUID session_id = compute_session_id(dialog, other_participant_id);
+
LLFloaterIMPanel* floater = findFloaterBySession(session_id);
if(!floater)
{
- floater = createFloater(session_id, other_participant_id, name, dialog, TRUE);
LLDynamicArray ids;
ids.put(other_participant_id);
+
+ floater = createFloater(session_id,
+ other_participant_id,
+ name,
+ ids,
+ dialog,
+ TRUE);
+
noteOfflineUsers(floater, ids);
- floater->addParticipants(ids);
mTalkFloater->showFloater(floater);
}
else
@@ -452,30 +487,30 @@ LLUUID LLIMView::addSession(const std::string& name,
// Adds a session using the given session_id. If the session already exists
// the dialog type is assumed correct. Returns the uuid of the session.
LLUUID LLIMView::addSession(const std::string& name,
- EInstantMessage dialog,
- const LLUUID& session_id,
- const LLDynamicArray& ids)
+ EInstantMessage dialog,
+ const LLUUID& other_participant_id,
+ const LLDynamicArray& ids)
{
if (0 == ids.getLength())
{
return LLUUID::null;
}
- LLUUID other_participant_id = ids[0];
- LLUUID new_session_id = session_id;
- if (new_session_id.isNull())
- {
- new_session_id = compute_session_id(dialog, other_participant_id);
- }
+ LLUUID session_id = compute_session_id(dialog,
+ other_participant_id);
- LLFloaterIMPanel* floater = findFloaterBySession(new_session_id);
+ LLFloaterIMPanel* floater = findFloaterBySession(session_id);
if(!floater)
{
// On creation, use the first element of ids as the "other_participant_id"
- floater = createFloater(new_session_id, other_participant_id, name, dialog, TRUE);
+ floater = createFloater(session_id,
+ other_participant_id,
+ name,
+ ids,
+ dialog,
+ TRUE);
noteOfflineUsers(floater, ids);
}
- floater->addParticipants(ids);
mTalkFloater->showFloater(floater);
//mTabContainer->selectTabPanel(panel);
floater->setInputFocus(TRUE);
@@ -518,8 +553,7 @@ void LLIMView::refresh()
group;
group = group_list.getNextData())
{
- mNewIMFloater->addTarget(group->mID, group->mName,
- (void*)(&GROUP_DIALOG), TRUE, FALSE);
+ mNewIMFloater->addGroup(group->mID, (void*)(&GROUP_DIALOG), TRUE, FALSE);
}
// build a set of buddies in the current buddy list.
@@ -539,13 +573,6 @@ void LLIMView::refresh()
{
mNewIMFloater->addAgent((*it).second, (void*)(&DEFAULT_DIALOG), FALSE);
}
-
- if(gAgent.isGodlike())
- {
- // XUI:translate
- mNewIMFloater->addTarget(LLUUID::null, "All Residents, All Grids",
- (void*)(&EVERYONE_DIALOG), TRUE, FALSE);
- }
mNewIMFloater->setScrollPos( old_scroll_pos );
}
@@ -619,12 +646,17 @@ void LLIMView::disconnectAllSessions()
std::set::iterator handle_it;
for(handle_it = mFloaters.begin();
handle_it != mFloaters.end();
- ++handle_it)
+ )
{
floater = (LLFloaterIMPanel*)LLFloater::getFloaterByHandle(*handle_it);
+
+ // MUST do this BEFORE calling floater->onClose() because that may remove the item from the set, causing the subsequent increment to crash.
+ ++handle_it;
+
if (floater)
{
floater->setEnabled(FALSE);
+ floater->onClose(TRUE);
}
}
}
@@ -662,11 +694,12 @@ BOOL LLIMView::hasSession(const LLUUID& session_id)
// consistency. Returns the pointer, caller (the class instance since
// it is a private method) is not responsible for deleting the
// pointer. Add the floater to this but do not select it.
-LLFloaterIMPanel* LLIMView::createFloater(const LLUUID& session_id,
- const LLUUID& other_participant_id,
- const std::string& session_label,
- EInstantMessage dialog,
- BOOL user_initiated)
+LLFloaterIMPanel* LLIMView::createFloater(
+ const LLUUID& session_id,
+ const LLUUID& other_participant_id,
+ const std::string& session_label,
+ EInstantMessage dialog,
+ BOOL user_initiated)
{
if (session_id.isNull())
{
@@ -686,6 +719,33 @@ LLFloaterIMPanel* LLIMView::createFloater(const LLUUID& session_id,
return floater;
}
+LLFloaterIMPanel* LLIMView::createFloater(
+ const LLUUID& session_id,
+ const LLUUID& other_participant_id,
+ const std::string& session_label,
+ const LLDynamicArray& ids,
+ EInstantMessage dialog,
+ BOOL user_initiated)
+{
+ if (session_id.isNull())
+ {
+ llwarns << "Creating LLFloaterIMPanel with null session ID" << llendl;
+ }
+ llinfos << "LLIMView::createFloater: from " << other_participant_id
+ << " in session " << session_id << llendl;
+ LLFloaterIMPanel* floater = new LLFloaterIMPanel(session_label,
+ LLRect(),
+ session_label,
+ session_id,
+ other_participant_id,
+ ids,
+ dialog);
+ LLTabContainerCommon::eInsertionPoint i_pt = user_initiated ? LLTabContainerCommon::RIGHT_OF_CURRENT : LLTabContainerCommon::END;
+ mTalkFloater->addFloater(floater, FALSE, i_pt);
+ mFloaters.insert(floater->getHandle());
+ return floater;
+}
+
void LLIMView::noteOfflineUsers(LLFloaterIMPanel* floater,
const LLDynamicArray& ids)
{
@@ -734,3 +794,159 @@ void LLIMView::processIMTypingCore(const LLIMInfo* im_info, BOOL typing)
floater->processIMTyping(im_info, typing);
}
}
+
+void LLIMView::updateFloaterSessionID(const LLUUID& old_session_id,
+ const LLUUID& new_session_id)
+{
+ LLFloaterIMPanel* floater = findFloaterBySession(old_session_id);
+ if (floater)
+ {
+ floater->sessionInitReplyReceived(new_session_id);
+ }
+}
+
+void onConfirmForceCloseError(S32 option, void* data)
+{
+ //only 1 option really
+ LLFloaterIMPanel* floater = ((LLFloaterIMPanel*) data);
+
+ if ( floater ) floater->onClose(FALSE);
+}
+
+class LLViewerIMSessionStartReply : public LLHTTPNode
+{
+public:
+ virtual void describe(Description& desc) const
+ {
+ desc.shortInfo("Used for receiving a reply to a request to initialize an IM session");
+ desc.postAPI();
+ desc.input(
+ "{\"client_session_id\": UUID, \"session_id\": UUID, \"success\" boolean, \"reason\": string");
+ desc.source(__FILE__, __LINE__);
+ }
+
+ virtual void post(ResponsePtr response,
+ const LLSD& context,
+ const LLSD& input) const
+ {
+ LLSD body;
+ LLUUID temp_session_id;
+ LLUUID session_id;
+ bool success;
+
+ body = input["body"];
+ success = body["success"].asBoolean();
+ temp_session_id = body["temp_session_id"].asUUID();
+
+ if ( success )
+ {
+ session_id = body["session_id"].asUUID();
+ gIMView->updateFloaterSessionID(temp_session_id,
+ session_id);
+ }
+ else
+ {
+ //throw an error dialog and close the temp session's
+ //floater
+ LLFloaterIMPanel* floater =
+ gIMView->findFloaterBySession(temp_session_id);
+ if (floater)
+ {
+ LLString::format_map_t args;
+ args["[REASON]"] =
+ sErrorStringsMap[body["error"].asString()];
+ args["[RECIPIENT]"] = floater->getTitle();
+
+ gViewerWindow->alertXml("IMSessionStartError",
+ args,
+ onConfirmForceCloseError,
+ floater);
+
+ }
+ }
+ }
+};
+
+class LLViewerIMSessionEventReply : public LLHTTPNode
+{
+ public:
+ virtual void describe(Description& desc) const
+ {
+ desc.shortInfo("Used for receiving a reply to a IM session event");
+ desc.postAPI();
+ desc.input(
+ "{\"event\": string, \"reason\": string, \"success\": boolean, \"session_id\": UUID");
+ desc.source(__FILE__, __LINE__);
+ }
+
+ virtual void post(ResponsePtr response,
+ const LLSD& context,
+ const LLSD& input) const
+ {
+ LLUUID session_id;
+ bool success;
+
+ LLSD body = input["body"];
+ success = body["success"].asBoolean();
+ session_id = body["session_id"].asUUID();
+
+ if ( !success )
+ {
+ //throw an error dialog
+ LLFloaterIMPanel* floater =
+ gIMView->findFloaterBySession(session_id);
+ if (floater)
+ {
+ LLString::format_map_t args;
+ args["[REASON]"] =
+ sErrorStringsMap[body["error"].asString()];
+ args["[EVENT]"] =
+ sEventStringsMap[body["event"].asString()];
+ args["[RECIPIENT]"] = floater->getTitle();
+
+ gViewerWindow->alertXml("IMSessionEventError",
+ args);
+ }
+ }
+ }
+};
+
+class LLViewerForceCloseIMSession: public LLHTTPNode
+{
+
+ virtual void post(ResponsePtr response,
+ const LLSD& context,
+ const LLSD& input) const
+ {
+ LLUUID session_id;
+ LLString reason;
+
+ session_id = input["body"]["session_id"].asUUID();
+ reason = input["body"]["reason"].asString();
+
+ LLFloaterIMPanel* floater =
+ gIMView ->findFloaterBySession(session_id);
+
+ if ( floater )
+ {
+ LLString::format_map_t args;
+
+ args["[NAME]"] = floater->getTitle();
+ args["[REASON]"] = sForceCloseSessionMap[reason];
+
+ gViewerWindow->alertXml("ForceCloseIMSession",
+ args,
+ onConfirmForceCloseError,
+ floater);
+ }
+ }
+};
+
+LLHTTPRegistration
+ gHTTPRegistrationMessageImsessionstartreply("/message/IMSessionStartReply");
+
+LLHTTPRegistration
+ gHTTPRegistrationMessageImsessioneventreply("/message/IMSessionEventReply");
+
+LLHTTPRegistration
+ gHTTPRegistrationMessageForceCloseImSession("/message/ForceCloseIMSession");
diff --git a/linden/indra/newview/llimview.h b/linden/indra/newview/llimview.h
index 9a0c462..74ea880 100644
--- a/linden/indra/newview/llimview.h
+++ b/linden/indra/newview/llimview.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -74,11 +75,11 @@ public:
EInstantMessage dialog,
const LLUUID& other_participant_id);
- // Adds a session using the given session_id. If the session already exists
+ // Adds a session using a specific group of starting agents
// the dialog type is assumed correct. Returns the uuid of the session.
LLUUID addSession(const std::string& name,
EInstantMessage dialog,
- const LLUUID& session_id,
+ const LLUUID& other_participant_id,
const LLDynamicArray& ids);
// This removes the panel referenced by the uuid, and then
@@ -86,6 +87,12 @@ public:
// deleted.
void removeSession(const LLUUID& session_id);
+ //Updates a given session's session IDs. Does not open,
+ //create or do anything new. If the old session doesn't
+ //exist, then nothing happens.
+ void updateFloaterSessionID(const LLUUID& old_session_id,
+ const LLUUID& new_session_id);
+
void processIMTypingStart(const LLIMInfo* im_info);
void processIMTypingStop(const LLIMInfo* im_info);
@@ -129,8 +136,18 @@ private:
// consistency. Returns the pointer, caller (the class instance
// since it is a private method) is not responsible for deleting
// the pointer.
- LLFloaterIMPanel* createFloater(const LLUUID& session_id, const LLUUID& target_id,
- const std::string& name, EInstantMessage dialog, BOOL user_initiated = FALSE);
+ LLFloaterIMPanel* createFloater(const LLUUID& session_id,
+ const LLUUID& target_id,
+ const std::string& name,
+ EInstantMessage dialog,
+ BOOL user_initiated = FALSE);
+
+ LLFloaterIMPanel* createFloater(const LLUUID& session_id,
+ const LLUUID& target_id,
+ const std::string& name,
+ const LLDynamicArray& ids,
+ EInstantMessage dialog,
+ BOOL user_initiated = FALSE);
// This simple method just iterates through all of the ids, and
// prints a simple message if they are not online. Used to help
diff --git a/linden/indra/newview/llinventoryactions.cpp b/linden/indra/newview/llinventoryactions.cpp
index 756ba63..6452c87 100644
--- a/linden/indra/newview/llinventoryactions.cpp
+++ b/linden/indra/newview/llinventoryactions.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -499,72 +500,104 @@ class LLBeginIMSession : public inventory_panel_listener_t
{
bool handleEvent(LLPointer event, const LLSD& userdata)
{
- LLString who = userdata.asString();
- bool only_online = false;
- if ("everyone" == who)
- {
- only_online = false;
- }
- else // "online"
- {
- only_online = true;
- }
LLInventoryPanel *panel = mPtr;
LLInventoryModel* model = panel->getModel();
if(!model) return true;
std::set selected_items;
panel->getRootFolder()->getSelectionList(selected_items);
- LLUUID item = *selected_items.begin();
- LLFolderViewItem* folder_item = panel->getRootFolder()->getItemByID(item);
- if(!folder_item) return true;
- LLFolderBridge* bridge = (LLFolderBridge*)folder_item->getListener();
- if(!bridge) return true;
- LLViewerInventoryCategory* cat = bridge->getCategory();
- if(!cat) return true;
- LLUniqueBuddyCollector is_buddy;
- LLInventoryModel::cat_array_t cat_array;
- LLInventoryModel::item_array_t item_array;
- model->collectDescendentsIf(bridge->getUUID(),
- cat_array,
- item_array,
- LLInventoryModel::EXCLUDE_TRASH,
- is_buddy);
- S32 count = item_array.count();
- if(count > 0)
+
+ LLString name;
+ static int session_num = 1;
+
+ LLDynamicArray members;
+ EInstantMessage type = IM_SESSION_CONFERENCE_START;
+
+ std::set::const_iterator iter;
+ for (iter = selected_items.begin(); iter != selected_items.end(); iter++)
{
- // create the session
- gIMView->setFloaterOpen(TRUE);
- LLDynamicArray members;
- //members.put(gAgent.getID());
- S32 i;
- EInstantMessage type = IM_SESSION_ADD;
- if(only_online)
+
+ LLUUID item = *iter;
+ LLFolderViewItem* folder_item = panel->getRootFolder()->getItemByID(item);
+
+ if(folder_item)
{
- LLAvatarTracker& at = LLAvatarTracker::instance();
- LLUUID id;
- for(i = 0; i < count; ++i)
+ LLFolderViewEventListener* fve_listener = folder_item->getListener();
+ if (fve_listener && (fve_listener->getInventoryType() == LLInventoryType::IT_CATEGORY))
{
- id = item_array.get(i)->getCreatorUUID();
- if(at.isBuddyOnline(id))
+
+ LLFolderBridge* bridge = (LLFolderBridge*)folder_item->getListener();
+ if(!bridge) return true;
+ LLViewerInventoryCategory* cat = bridge->getCategory();
+ if(!cat) return true;
+ name = cat->getName();
+ LLUniqueBuddyCollector is_buddy;
+ LLInventoryModel::cat_array_t cat_array;
+ LLInventoryModel::item_array_t item_array;
+ model->collectDescendentsIf(bridge->getUUID(),
+ cat_array,
+ item_array,
+ LLInventoryModel::EXCLUDE_TRASH,
+ is_buddy);
+ S32 count = item_array.count();
+ if(count > 0)
{
- members.put(id);
+ // create the session
+ gIMView->setFloaterOpen(TRUE);
+ S32 i;
+
+ LLAvatarTracker& at = LLAvatarTracker::instance();
+ LLUUID id;
+ for(i = 0; i < count; ++i)
+ {
+ id = item_array.get(i)->getCreatorUUID();
+ if(at.isBuddyOnline(id))
+ {
+ members.put(id);
+ }
+ }
}
}
- }
- else
- {
- type = IM_SESSION_OFFLINE_ADD;
- for(i = 0; i < count; ++i)
+ else
{
- members.put(item_array.get(i)->getCreatorUUID());
- }
+ LLFolderViewItem* folder_item = panel->getRootFolder()->getItemByID(item);
+ if(!folder_item) return true;
+ LLInvFVBridge* listenerp = (LLInvFVBridge*)folder_item->getListener();
+
+ if (listenerp->getInventoryType() == LLInventoryType::IT_CALLINGCARD)
+ {
+ LLInventoryItem* inv_item = gInventory.getItem(listenerp->getUUID());
+
+ if (inv_item)
+ {
+ LLAvatarTracker& at = LLAvatarTracker::instance();
+ LLUUID id = inv_item->getCreatorUUID();
+
+ if(at.isBuddyOnline(id))
+ {
+ members.put(id);
+ }
+ }
+ } //if IT_CALLINGCARD
+ } //if !IT_CATEGORY
}
- // the session_id is always the item_id of the inventory folder
- gIMView->addSession(cat->getName(),
- type,
- bridge->getUUID(),
- members);
+ } //for selected_items
+
+ // the session_id is randomly generated UUID which will be replaced later
+ // with a server side generated number
+
+ if (name.empty())
+ {
+ char buffer [50];
+ sprintf(buffer, "Session %d", session_num++);
+ name = buffer;
}
+
+
+ gIMView->addSession(name,
+ type,
+ members[0],
+ members);
+
return true;
}
};
diff --git a/linden/indra/newview/llinventorybridge.cpp b/linden/indra/newview/llinventorybridge.cpp
index baf6638..05334d7 100644
--- a/linden/indra/newview/llinventorybridge.cpp
+++ b/linden/indra/newview/llinventorybridge.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -122,6 +123,7 @@ const char* ICON_NAME[ICON_NAME_COUNT] =
"inv_item_script.tga",
"inv_item_clothing.tga",
"inv_item_object.tga",
+ "inv_item_object_multi.tga",
"inv_item_notecard.tga",
"inv_item_bodypart.tga",
"inv_item_snapshot.tga",
@@ -837,7 +839,7 @@ LLString LLItemBridge::getLabelSuffix() const
if(xfer) sxfer = EMPTY;
else sxfer = NO_XFER;
char buffer[MAX_STRING]; /*Flawfinder: ignore*/
- snprintf( /*Flawfinder: ignore*/
+ snprintf( /* Flawfinder: ignore */
buffer,
MAX_STRING,
"%s%s%s",
@@ -1742,7 +1744,7 @@ void LLFolderBridge::folderOptionsMenu()
if (mCallingCards || checkFolderForContentsOfType(model, is_callingcard))
{
mItems.push_back("Calling Card Separator");
- mItems.push_back("IM Contacts In Folder");
+ mItems.push_back("Conference Chat Folder");
mItems.push_back("IM All Contacts In Folder");
}
@@ -2061,58 +2063,6 @@ void LLFolderBridge::createWearable(LLUUID parent_id, EWearableType type)
LLPointer(NULL));
}
-void LLFolderBridge::beginIMSession(BOOL only_online)
-{
- LLInventoryModel* model = mInventoryPanel->getModel();
- if(!model) return;
- LLViewerInventoryCategory* cat = getCategory();
- if(!cat) return;
- LLUniqueBuddyCollector is_buddy;
- LLInventoryModel::cat_array_t cat_array;
- LLInventoryModel::item_array_t item_array;
- model->collectDescendentsIf(mUUID,
- cat_array,
- item_array,
- LLInventoryModel::EXCLUDE_TRASH,
- is_buddy);
- S32 count = item_array.count();
- if(count > 0)
- {
- // create the session
- gIMView->setFloaterOpen(TRUE);
- LLDynamicArray members;
- //members.put(gAgent.getID());
- S32 i;
- EInstantMessage type = IM_SESSION_ADD;
- if(only_online)
- {
- LLAvatarTracker& at = LLAvatarTracker::instance();
- LLUUID id;
- for(i = 0; i < count; ++i)
- {
- id = item_array.get(i)->getCreatorUUID();
- if(at.isBuddyOnline(id))
- {
- members.put(id);
- }
- }
- }
- else
- {
- type = IM_SESSION_OFFLINE_ADD;
- for(i = 0; i < count; ++i)
- {
- members.put(item_array.get(i)->getCreatorUUID());
- }
- }
- // the session_id is always the item_id of the inventory folder
- gIMView->addSession(cat->getName(),
- type,
- mUUID,
- members);
- }
-}
-
void LLFolderBridge::modifyOutfit(BOOL append)
{
LLInventoryModel* model = mInventoryPanel->getModel();
@@ -2332,7 +2282,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
LLViewerImage* LLScriptBridge::getIcon() const
{
- return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0);
+ return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0, FALSE);
}
// +=================================================+
@@ -2344,7 +2294,7 @@ LLString LLTextureBridge::sPrefix("Texture: ");
LLViewerImage* LLTextureBridge::getIcon() const
{
- return get_item_icon(LLAssetType::AT_TEXTURE, mInvType, 0);
+ return get_item_icon(LLAssetType::AT_TEXTURE, mInvType, 0, FALSE);
}
void open_texture(const LLUUID& item_id,
@@ -2394,7 +2344,7 @@ LLString LLSoundBridge::sPrefix("Sound: ");
LLViewerImage* LLSoundBridge::getIcon() const
{
- return get_item_icon(LLAssetType::AT_SOUND, LLInventoryType::IT_SOUND, 0);
+ return get_item_icon(LLAssetType::AT_SOUND, LLInventoryType::IT_SOUND, 0, FALSE);
}
void LLSoundBridge::openItem()
@@ -2489,7 +2439,7 @@ LLString LLLandmarkBridge::sPrefix("Landmark: ");
LLViewerImage* LLLandmarkBridge::getIcon() const
{
- return get_item_icon(LLAssetType::AT_LANDMARK, LLInventoryType::IT_LANDMARK, mVisited);
+ return get_item_icon(LLAssetType::AT_LANDMARK, LLInventoryType::IT_LANDMARK, mVisited, FALSE);
}
void LLLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
@@ -2650,7 +2600,7 @@ LLViewerImage* LLCallingCardBridge::getIcon() const
{
online = LLAvatarTracker::instance().isBuddyOnline(item->getCreatorUUID());
}
- return get_item_icon(LLAssetType::AT_CALLINGCARD, LLInventoryType::IT_CALLINGCARD, online);
+ return get_item_icon(LLAssetType::AT_CALLINGCARD, LLInventoryType::IT_CALLINGCARD, online, FALSE);
}
LLString LLCallingCardBridge::getLabelSuffix() const
@@ -2707,11 +2657,13 @@ void LLCallingCardBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
items.push_back("Send Instant Message");
items.push_back("Offer Teleport...");
+ items.push_back("Conference Chat");
if (!good_card)
{
disabled_items.push_back("Send Instant Message");
disabled_items.push_back("Offer Teleport...");
+ disabled_items.push_back("Conference Chat");
}
}
hideContextEntries(menu, items, disabled_items);
@@ -2798,7 +2750,7 @@ LLString LLNotecardBridge::sPrefix("Note: ");
LLViewerImage* LLNotecardBridge::getIcon() const
{
- return get_item_icon(LLAssetType::AT_NOTECARD, LLInventoryType::IT_NOTECARD, 0);
+ return get_item_icon(LLAssetType::AT_NOTECARD, LLInventoryType::IT_NOTECARD, 0, FALSE);
}
void open_notecard(const LLUUID& item_id,
@@ -2870,7 +2822,7 @@ LLString LLGestureBridge::sPrefix("Gesture: ");
LLViewerImage* LLGestureBridge::getIcon() const
{
- return get_item_icon(LLAssetType::AT_GESTURE, LLInventoryType::IT_GESTURE, 0);
+ return get_item_icon(LLAssetType::AT_GESTURE, LLInventoryType::IT_GESTURE, 0, FALSE);
}
LLFontGL::StyleFlags LLGestureBridge::getLabelStyle() const
@@ -3003,7 +2955,7 @@ LLString LLAnimationBridge::sPrefix("Animation: ");
LLViewerImage* LLAnimationBridge::getIcon() const
{
- return get_item_icon(LLAssetType::AT_ANIMATION, LLInventoryType::IT_ANIMATION, 0);
+ return get_item_icon(LLAssetType::AT_ANIMATION, LLInventoryType::IT_ANIMATION, 0, FALSE);
}
void LLAnimationBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
@@ -3121,7 +3073,7 @@ BOOL LLObjectBridge::isItemRemovable()
LLViewerImage* LLObjectBridge::getIcon() const
{
- return get_item_icon(LLAssetType::AT_OBJECT, mInvType, mAttachPt);
+ return get_item_icon(LLAssetType::AT_OBJECT, mInvType, mAttachPt, mIsMultiObject );
}
void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attachment);
@@ -3376,7 +3328,7 @@ LLString LLLSLTextBridge::sPrefix("Script: ");
LLViewerImage* LLLSLTextBridge::getIcon() const
{
- return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0);
+ return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0, FALSE);
}
void LLLSLTextBridge::openItem()
@@ -4139,7 +4091,7 @@ LLString LLWearableBridge::getLabelSuffix() const
LLViewerImage* LLWearableBridge::getIcon() const
{
- return get_item_icon(mAssetType, mInvType, mWearableType);
+ return get_item_icon(mAssetType, mInvType, mWearableType, FALSE);
}
// virtual
diff --git a/linden/indra/newview/llinventorybridge.h b/linden/indra/newview/llinventorybridge.h
index 2d2288f..1269fa2 100755
--- a/linden/indra/newview/llinventorybridge.h
+++ b/linden/indra/newview/llinventorybridge.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -41,6 +42,7 @@ enum EInventoryIcon
SCRIPT_ICON_NAME,
CLOTHING_ICON_NAME,
OBJECT_ICON_NAME,
+ OBJECT_MULTI_ICON_NAME,
NOTECARD_ICON_NAME,
BODYPART_ICON_NAME,
SNAPSHOT_ICON_NAME,
@@ -314,7 +316,6 @@ protected:
BOOL checkFolderForContentsOfType(LLInventoryModel* model, LLInventoryCollectFunctor& typeToCheck);
- void beginIMSession(BOOL only_online);
void modifyOutfit(BOOL append);
public:
static LLFolderBridge* sSelf;
@@ -528,6 +529,8 @@ protected:
LLItemBridge(inventory, uuid), mInvType(type)
{
mAttachPt = (flags & 0xff); // low bye of inventory flags
+
+ mIsMultiObject = ( flags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS ) ? TRUE: FALSE;
}
protected:
@@ -535,7 +538,7 @@ protected:
static LLUUID sContextMenuItemID; // Only valid while the context menu is open.
LLInventoryType::EType mInvType;
U32 mAttachPt;
-
+ BOOL mIsMultiObject;
};
diff --git a/linden/indra/newview/llinventoryclipboard.cpp b/linden/indra/newview/llinventoryclipboard.cpp
index fb16912..da067ad 100644
--- a/linden/indra/newview/llinventoryclipboard.cpp
+++ b/linden/indra/newview/llinventoryclipboard.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llinventoryclipboard.h b/linden/indra/newview/llinventoryclipboard.h
index 3b762f2..e706269 100644
--- a/linden/indra/newview/llinventoryclipboard.h
+++ b/linden/indra/newview/llinventoryclipboard.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llinventorymodel.cpp b/linden/indra/newview/llinventorymodel.cpp
index e35f71b..ddd229b 100644
--- a/linden/indra/newview/llinventorymodel.cpp
+++ b/linden/indra/newview/llinventorymodel.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -1155,7 +1156,7 @@ void LLInventoryModel::cache(
char inventory_filename[LL_MAX_PATH]; /*Flawfinder: ignore*/
agent_id.toString(agent_id_str);
std::string path(gDirUtilp->getExpandedFilename(LL_PATH_CACHE, agent_id_str));
- snprintf( /*Flawfinder: ignore*/
+ snprintf( /* Flawfinder: ignore */
inventory_filename,
LL_MAX_PATH,
CACHE_FORMAT_STRING,
@@ -1444,7 +1445,7 @@ bool LLInventoryModel::loadSkeleton(
owner_id.toString(owner_id_str);
std::string path(gDirUtilp->getExpandedFilename(LL_PATH_CACHE, owner_id_str));
char inventory_filename[LL_MAX_PATH]; /*Flawfinder: ignore*/
- snprintf( /*Flawfinder: ignore*/
+ snprintf( /* Flawfinder: ignore */
inventory_filename,
LL_MAX_PATH,
CACHE_FORMAT_STRING,
@@ -1842,7 +1843,7 @@ void LLInventoryModel::buildParentChildMap()
msg->addUUIDFast(_PREHASH_ItemID, (*it));
msg->addUUIDFast(_PREHASH_FolderID, lnf);
msg->addString("NewName", NULL);
- if(msg->mCurrentSendTotal >= MTUBYTES)
+ if(msg->isSendFull(NULL))
{
start_new_message = TRUE;
gAgent.sendReliableMessage();
@@ -3201,7 +3202,7 @@ void LLInventoryFetchObserver::fetchItems(
msg->nextBlockFast(_PREHASH_InventoryData);
msg->addUUIDFast(_PREHASH_OwnerID, owner_id);
msg->addUUIDFast(_PREHASH_ItemID, (*it));
- if(msg->getCurrentSendTotal() >= MTUBYTES)
+ if(msg->isSendFull(NULL))
{
start_new_message = TRUE;
gAgent.sendReliableMessage();
diff --git a/linden/indra/newview/llinventorymodel.h b/linden/indra/newview/llinventorymodel.h
index d0eb2de..9867842 100644
--- a/linden/indra/newview/llinventorymodel.h
+++ b/linden/indra/newview/llinventorymodel.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llinventoryview.cpp b/linden/indra/newview/llinventoryview.cpp
index 162cf9f..900b145 100644
--- a/linden/indra/newview/llinventoryview.cpp
+++ b/linden/indra/newview/llinventoryview.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -942,9 +943,15 @@ void LLInventoryView::onFilterSelected(void* userdata, bool from_click)
LLUUID get_item_icon_uuid(LLAssetType::EType asset_type,
LLInventoryType::EType inventory_type,
- U32 flags)
+ U32 attachment_point,
+ BOOL item_is_multi )
{
EInventoryIcon idx = OBJECT_ICON_NAME;
+ if ( item_is_multi )
+ {
+ idx = OBJECT_MULTI_ICON_NAME;
+ }
+
switch(asset_type)
{
case LLAssetType::AT_TEXTURE:
@@ -957,11 +964,12 @@ LLUUID get_item_icon_uuid(LLAssetType::EType asset_type,
idx = TEXTURE_ICON_NAME;
}
break;
+
case LLAssetType::AT_SOUND:
idx = SOUND_ICON_NAME;
break;
case LLAssetType::AT_CALLINGCARD:
- if(flags != 0)
+ if(attachment_point!= 0)
{
idx = CALLINGCARD_ONLINE_ICON_NAME;
}
@@ -971,7 +979,7 @@ LLUUID get_item_icon_uuid(LLAssetType::EType asset_type,
}
break;
case LLAssetType::AT_LANDMARK:
- if(flags != 0)
+ if(attachment_point!= 0)
{
idx = LANDMARK_VISITED_ICON_NAME;
}
@@ -992,7 +1000,7 @@ LLUUID get_item_icon_uuid(LLAssetType::EType asset_type,
{
idx = BODYPART_ICON_NAME;
}
- switch(flags)
+ switch(attachment_point)
{
case WT_SHAPE:
idx = BODYPART_SHAPE_ICON_NAME;
@@ -1056,9 +1064,10 @@ LLUUID get_item_icon_uuid(LLAssetType::EType asset_type,
LLViewerImage* get_item_icon(LLAssetType::EType asset_type,
LLInventoryType::EType inventory_type,
- U32 flags)
+ U32 attachment_point,
+ BOOL item_is_multi)
{
- LLUUID icon_uuid = get_item_icon_uuid(asset_type, inventory_type, flags);
+ LLUUID icon_uuid = get_item_icon_uuid(asset_type, inventory_type, attachment_point, item_is_multi );
LLViewerImage* imagep = gImageList.getImage(icon_uuid, MIPMAP_FALSE, TRUE);
imagep->setClamp(TRUE, TRUE);
return imagep;
diff --git a/linden/indra/newview/llinventoryview.h b/linden/indra/newview/llinventoryview.h
index 78fa362..7b29864 100644
--- a/linden/indra/newview/llinventoryview.h
+++ b/linden/indra/newview/llinventoryview.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -334,11 +335,13 @@ void open_texture(const LLUUID& item_id, const LLString& title, BOOL show_keep_d
LLUUID get_item_icon_uuid(LLAssetType::EType asset_type,
LLInventoryType::EType inventory_type,
- U32 flags);
+ U32 attachment_point,
+ BOOL item_is_multi );
LLViewerImage* get_item_icon(LLAssetType::EType asset_type,
LLInventoryType::EType inventory_type,
- U32 flags);
+ U32 attachment_point,
+ BOOL item_is_multi );
// Move items from an in-world object's "Contents" folder to a specified
// folder in agent inventory.
diff --git a/linden/indra/newview/lljoystickbutton.cpp b/linden/indra/newview/lljoystickbutton.cpp
index a280ca8..6e62627 100644
--- a/linden/indra/newview/lljoystickbutton.cpp
+++ b/linden/indra/newview/lljoystickbutton.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -134,7 +135,7 @@ BOOL LLJoystick::handleMouseUp(S32 x, S32 y, MASK mask)
{
// llinfos << "joystick mouse up " << x << ", " << y << llendl;
- if( gViewerWindow->hasMouseCapture( this ) )
+ if( hasMouseCapture() )
{
mLastMouse.set(x, y);
mHeldDown = FALSE;
@@ -147,7 +148,7 @@ BOOL LLJoystick::handleMouseUp(S32 x, S32 y, MASK mask)
BOOL LLJoystick::handleHover(S32 x, S32 y, MASK mask)
{
- if( gViewerWindow->hasMouseCapture( this ) )
+ if( hasMouseCapture() )
{
mLastMouse.set(x, y);
}
@@ -172,7 +173,9 @@ void LLJoystick::onHeldDown(void *userdata)
{
LLJoystick *self = (LLJoystick *)userdata;
- llassert( gViewerWindow->hasMouseCapture( self ) );
+ // somebody removed this function without checking the
+ // build. Removed 2007-03-26.
+ //llassert( gViewerWindow->hasMouseCapture( self ) );
self->mHeldDown = TRUE;
self->onHeldDown();
diff --git a/linden/indra/newview/lljoystickbutton.h b/linden/indra/newview/lljoystickbutton.h
index 69baa32..e947559 100644
--- a/linden/indra/newview/lljoystickbutton.h
+++ b/linden/indra/newview/lljoystickbutton.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lllandmarklist.cpp b/linden/indra/newview/lllandmarklist.cpp
index f17a73b..a0ad1ce 100644
--- a/linden/indra/newview/lllandmarklist.cpp
+++ b/linden/indra/newview/lllandmarklist.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lllandmarklist.h b/linden/indra/newview/lllandmarklist.h
index 892dec1..50ccfb6 100644
--- a/linden/indra/newview/lllandmarklist.h
+++ b/linden/indra/newview/lllandmarklist.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lllightconstants.h b/linden/indra/newview/lllightconstants.h
index fe4ba9d..5926229 100644
--- a/linden/indra/newview/lllightconstants.h
+++ b/linden/indra/newview/lllightconstants.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lllocalanimationobject.cpp b/linden/indra/newview/lllocalanimationobject.cpp
index b7cccae..c77b1ed 100644
--- a/linden/indra/newview/lllocalanimationobject.cpp
+++ b/linden/indra/newview/lllocalanimationobject.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lllocalanimationobject.h b/linden/indra/newview/lllocalanimationobject.h
index 51d870f..b834400 100644
--- a/linden/indra/newview/lllocalanimationobject.h
+++ b/linden/indra/newview/lllocalanimationobject.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lllogchat.cpp b/linden/indra/newview/lllogchat.cpp
index 6be5ee1..aaa19ea 100644
--- a/linden/indra/newview/lllogchat.cpp
+++ b/linden/indra/newview/lllogchat.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lllogchat.h b/linden/indra/newview/lllogchat.h
index 6164279..56ea04b 100644
--- a/linden/indra/newview/lllogchat.h
+++ b/linden/indra/newview/lllogchat.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llmanip.cpp b/linden/indra/newview/llmanip.cpp
index a1ff7c3..1db0a6c 100644
--- a/linden/indra/newview/llmanip.cpp
+++ b/linden/indra/newview/llmanip.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -454,25 +455,25 @@ void LLManip::renderXYZ(const LLVector3 &vec)
LLGLDepthTest gls_depth(GL_FALSE);
LLGLEnable tex(GL_TEXTURE_2D);
// render drop shadowed text
- snprintf(feedback_string, sizeof(feedback_string), "X: %.3f", vec.mV[VX]); /*Flawfinder: ignore*/
+ snprintf(feedback_string, sizeof(feedback_string), "X: %.3f", vec.mV[VX]); /* Flawfinder: ignore */
hud_render_text(utf8str_to_wstring(feedback_string), camera_pos, *gResMgr->getRes( LLFONT_SANSSERIF ), LLFontGL::NORMAL, -102.f + 1.f, (F32)vertical_offset - 1.f, LLColor4::black, FALSE);
- snprintf(feedback_string, sizeof(feedback_string), "Y: %.3f", vec.mV[VY]); /*Flawfinder: ignore*/
+ snprintf(feedback_string, sizeof(feedback_string), "Y: %.3f", vec.mV[VY]); /* Flawfinder: ignore */
hud_render_text(utf8str_to_wstring(feedback_string), camera_pos, *gResMgr->getRes( LLFONT_SANSSERIF ), LLFontGL::NORMAL, -27.f + 1.f, (F32)vertical_offset - 1.f, LLColor4::black, FALSE);
- snprintf(feedback_string, sizeof(feedback_string), "Z: %.3f", vec.mV[VZ]); /*Flawfinder: ignore*/
+ snprintf(feedback_string, sizeof(feedback_string), "Z: %.3f", vec.mV[VZ]); /* Flawfinder: ignore */
hud_render_text(utf8str_to_wstring(feedback_string), camera_pos, *gResMgr->getRes( LLFONT_SANSSERIF ), LLFontGL::NORMAL, 48.f + 1.f, (F32)vertical_offset - 1.f, LLColor4::black, FALSE);
// render text on top
- snprintf(feedback_string, sizeof(feedback_string), "X: %.3f", vec.mV[VX]); /*Flawfinder: ignore*/
+ snprintf(feedback_string, sizeof(feedback_string), "X: %.3f", vec.mV[VX]); /* Flawfinder: ignore */
hud_render_text(utf8str_to_wstring(feedback_string), camera_pos, *gResMgr->getRes( LLFONT_SANSSERIF ), LLFontGL::NORMAL, -102.f, (F32)vertical_offset, LLColor4(1.f, 0.5f, 0.5f, 1.f), FALSE);
glColor3f(0.5f, 1.f, 0.5f);
- snprintf(feedback_string, sizeof(feedback_string), "Y: %.3f", vec.mV[VY]); /*Flawfinder: ignore*/
+ snprintf(feedback_string, sizeof(feedback_string), "Y: %.3f", vec.mV[VY]); /* Flawfinder: ignore */
hud_render_text(utf8str_to_wstring(feedback_string), camera_pos, *gResMgr->getRes( LLFONT_SANSSERIF ), LLFontGL::NORMAL, -27.f, (F32)vertical_offset, LLColor4(0.5f, 1.f, 0.5f, 1.f), FALSE);
glColor3f(0.5f, 0.5f, 1.f);
- snprintf(feedback_string, sizeof(feedback_string), "Z: %.3f", vec.mV[VZ]); /*Flawfinder: ignore*/
+ snprintf(feedback_string, sizeof(feedback_string), "Z: %.3f", vec.mV[VZ]); /* Flawfinder: ignore */
hud_render_text(utf8str_to_wstring(feedback_string), camera_pos, *gResMgr->getRes( LLFONT_SANSSERIF ), LLFontGL::NORMAL, 48.f, (F32)vertical_offset, LLColor4(0.5f, 0.5f, 1.f, 1.f), FALSE);
}
}
@@ -521,22 +522,22 @@ void LLManip::renderTickValue(const LLVector3& pos, F32 value, const char* suffi
{
if (fractional_portion == 0)
{
- snprintf(val_string, sizeof(val_string), "-%d%s", lltrunc(llabs(val_to_print)), suffix); /*Flawfinder: ignore*/
+ snprintf(val_string, sizeof(val_string), "-%d%s", lltrunc(llabs(val_to_print)), suffix); /* Flawfinder: ignore */
}
else
{
- snprintf(val_string, sizeof(val_string), "-%d", lltrunc(llabs(val_to_print))); /*Flawfinder: ignore*/
+ snprintf(val_string, sizeof(val_string), "-%d", lltrunc(llabs(val_to_print))); /* Flawfinder: ignore */
}
}
else
{
if (fractional_portion == 0)
{
- snprintf(val_string, sizeof(val_string), "%d%s", lltrunc(llabs(val_to_print)), suffix); /*Flawfinder: ignore*/
+ snprintf(val_string, sizeof(val_string), "%d%s", lltrunc(llabs(val_to_print)), suffix); /* Flawfinder: ignore */
}
else
{
- snprintf(val_string, sizeof(val_string), "%d", lltrunc(val_to_print)); /*Flawfinder: ignore*/
+ snprintf(val_string, sizeof(val_string), "%d", lltrunc(val_to_print)); /* Flawfinder: ignore */
}
}
@@ -559,7 +560,7 @@ void LLManip::renderTickValue(const LLVector3& pos, F32 value, const char* suffi
LLGLEnable tex(GL_TEXTURE_2D);
if (fractional_portion != 0)
{
- snprintf(fraction_string, sizeof(fraction_string), "%c%d%s", gResMgr->getDecimalPoint(), fractional_portion, suffix); /*Flawfinder: ignore*/
+ snprintf(fraction_string, sizeof(fraction_string), "%c%d%s", gResMgr->getDecimalPoint(), fractional_portion, suffix); /* Flawfinder: ignore */
gViewerWindow->setupViewport(1, -1);
hud_render_utf8text(val_string, render_pos, *big_fontp, LLFontGL::NORMAL, -1.f * big_fontp->getWidthF32(val_string), 3.f, shadow_color, hud_selection);
diff --git a/linden/indra/newview/llmanip.h b/linden/indra/newview/llmanip.h
index 7f83ae2..2b1e836 100644
--- a/linden/indra/newview/llmanip.h
+++ b/linden/indra/newview/llmanip.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llmaniprotate.cpp b/linden/indra/newview/llmaniprotate.cpp
index 452e4d4..aaab416 100644
--- a/linden/indra/newview/llmaniprotate.cpp
+++ b/linden/indra/newview/llmaniprotate.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llmaniprotate.h b/linden/indra/newview/llmaniprotate.h
index fb51643..80ff488 100644
--- a/linden/indra/newview/llmaniprotate.h
+++ b/linden/indra/newview/llmaniprotate.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llmanipscale.cpp b/linden/indra/newview/llmanipscale.cpp
index d520fbe..c153339 100644
--- a/linden/indra/newview/llmanipscale.cpp
+++ b/linden/indra/newview/llmanipscale.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llmanipscale.h b/linden/indra/newview/llmanipscale.h
index 2452e6b..40c8a53 100644
--- a/linden/indra/newview/llmanipscale.h
+++ b/linden/indra/newview/llmanipscale.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llmaniptranslate.cpp b/linden/indra/newview/llmaniptranslate.cpp
index bb58a9c..0bdfbb3 100644
--- a/linden/indra/newview/llmaniptranslate.cpp
+++ b/linden/indra/newview/llmaniptranslate.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -1697,7 +1698,7 @@ void LLManipTranslate::highlightIntersection(LLVector3 normal,
LLPipeline::toggleRenderType(LLPipeline::RENDER_TYPE_CLOUDS);
}
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
}
glPushMatrix();
diff --git a/linden/indra/newview/llmaniptranslate.h b/linden/indra/newview/llmaniptranslate.h
index 4937d71..04c3d5a 100644
--- a/linden/indra/newview/llmaniptranslate.h
+++ b/linden/indra/newview/llmaniptranslate.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llmapresponders.cpp b/linden/indra/newview/llmapresponders.cpp
index 2863c0b..ddf5701 100644
--- a/linden/indra/newview/llmapresponders.cpp
+++ b/linden/indra/newview/llmapresponders.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llmapresponders.h b/linden/indra/newview/llmapresponders.h
index cbe21e8..57f54b7 100644
--- a/linden/indra/newview/llmapresponders.h
+++ b/linden/indra/newview/llmapresponders.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llmediaremotectrl.cpp b/linden/indra/newview/llmediaremotectrl.cpp
index c1fec1c..4549c3b 100644
--- a/linden/indra/newview/llmediaremotectrl.cpp
+++ b/linden/indra/newview/llmediaremotectrl.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llmediaremotectrl.h b/linden/indra/newview/llmediaremotectrl.h
index b1694c0..605be04 100644
--- a/linden/indra/newview/llmediaremotectrl.h
+++ b/linden/indra/newview/llmediaremotectrl.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llmemoryview.cpp b/linden/indra/newview/llmemoryview.cpp
index c377560..1d92bff 100644
--- a/linden/indra/newview/llmemoryview.cpp
+++ b/linden/indra/newview/llmemoryview.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llmemoryview.h b/linden/indra/newview/llmemoryview.h
index bbb4f49..6d5b96b 100644
--- a/linden/indra/newview/llmemoryview.h
+++ b/linden/indra/newview/llmemoryview.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llmenucommands.cpp b/linden/indra/newview/llmenucommands.cpp
index 425786e..43f783e 100644
--- a/linden/indra/newview/llmenucommands.cpp
+++ b/linden/indra/newview/llmenucommands.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llmenucommands.h b/linden/indra/newview/llmenucommands.h
index 8e8ae9d..08cee43 100644
--- a/linden/indra/newview/llmenucommands.h
+++ b/linden/indra/newview/llmenucommands.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llmorphview.cpp b/linden/indra/newview/llmorphview.cpp
index f2ac87c..1a28fd7 100644
--- a/linden/indra/newview/llmorphview.cpp
+++ b/linden/indra/newview/llmorphview.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llmorphview.h b/linden/indra/newview/llmorphview.h
index 7bd7847..6abc630 100644
--- a/linden/indra/newview/llmorphview.h
+++ b/linden/indra/newview/llmorphview.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llmoveview.cpp b/linden/indra/newview/llmoveview.cpp
index 755aec9..2f4c8d1 100644
--- a/linden/indra/newview/llmoveview.cpp
+++ b/linden/indra/newview/llmoveview.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llmoveview.h b/linden/indra/newview/llmoveview.h
index bcbfbeb..d0179b2 100644
--- a/linden/indra/newview/llmoveview.h
+++ b/linden/indra/newview/llmoveview.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llmutelist.cpp b/linden/indra/newview/llmutelist.cpp
index e02d6fc..e62bf19 100644
--- a/linden/indra/newview/llmutelist.cpp
+++ b/linden/indra/newview/llmutelist.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -55,7 +56,7 @@
#include "llagent.h"
#include "llfloatermute.h"
-#include "llviewermessage.h" // for gGenericDispatcher
+#include "llviewergenericmessage.h" // for gGenericDispatcher
#include "llviewerwindow.h"
#include "viewer.h"
#include "llworld.h" //for particle system banning
@@ -462,7 +463,7 @@ void LLMuteList::requestFromServer(const LLUUID& agent_id)
char agent_id_string[UUID_STR_LENGTH]; /*Flawfinder: ignore*/
char filename[LL_MAX_PATH]; /*Flawfinder: ignore*/
agent_id.toString(agent_id_string);
- snprintf(filename, sizeof(filename), "%s.cached_mute", gDirUtilp->getExpandedFilename(LL_PATH_CACHE,agent_id_string).c_str()); /*Flawfinder: ignore*/
+ snprintf(filename, sizeof(filename), "%s.cached_mute", gDirUtilp->getExpandedFilename(LL_PATH_CACHE,agent_id_string).c_str()); /* Flawfinder: ignore */
LLCRC crc;
crc.update(filename);
@@ -488,7 +489,7 @@ void LLMuteList::cache(const LLUUID& agent_id)
char agent_id_string[UUID_STR_LENGTH]; /*Flawfinder: ignore*/
char filename[LL_MAX_PATH]; /*Flawfinder: ignore*/
agent_id.toString(agent_id_string);
- snprintf(filename, sizeof(filename), "%s.cached_mute", gDirUtilp->getExpandedFilename(LL_PATH_CACHE,agent_id_string).c_str()); /*Flawfinder: ignore*/
+ snprintf(filename, sizeof(filename), "%s.cached_mute", gDirUtilp->getExpandedFilename(LL_PATH_CACHE,agent_id_string).c_str()); /* Flawfinder: ignore */
saveToFile(filename);
}
}
@@ -531,7 +532,7 @@ void LLMuteList::processUseCachedMuteList(LLMessageSystem* msg, void**)
char agent_id_string[UUID_STR_LENGTH]; /*Flawfinder: ignore*/
gAgent.getID().toString(agent_id_string);
char filename[LL_MAX_PATH]; /*Flawfinder: ignore*/
- snprintf(filename, sizeof(filename), "%s.cached_mute", gDirUtilp->getExpandedFilename(LL_PATH_CACHE,agent_id_string).c_str()); /*Flawfinder: ignore*/
+ snprintf(filename, sizeof(filename), "%s.cached_mute", gDirUtilp->getExpandedFilename(LL_PATH_CACHE,agent_id_string).c_str()); /* Flawfinder: ignore */
gMuteListp->loadFromFile(filename);
}
diff --git a/linden/indra/newview/llmutelist.h b/linden/indra/newview/llmutelist.h
index afd57ad..d8f1bf6 100644
--- a/linden/indra/newview/llmutelist.h
+++ b/linden/indra/newview/llmutelist.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llnamebox.cpp b/linden/indra/newview/llnamebox.cpp
index 8dacf34..a5eee6a 100644
--- a/linden/indra/newview/llnamebox.cpp
+++ b/linden/indra/newview/llnamebox.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llnamebox.h b/linden/indra/newview/llnamebox.h
index 31a09ae..74fd0a2 100644
--- a/linden/indra/newview/llnamebox.h
+++ b/linden/indra/newview/llnamebox.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llnameeditor.cpp b/linden/indra/newview/llnameeditor.cpp
index 5cc5ddd..5362ba7 100644
--- a/linden/indra/newview/llnameeditor.cpp
+++ b/linden/indra/newview/llnameeditor.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -49,7 +50,7 @@ LLNameEditor::LLNameEditor(const std::string& name, const LLRect& rect,
S32 max_text_length,
void (*commit_callback)(LLUICtrl* caller, void* user_data),
void (*keystroke_callback)(LLLineEditor* caller, void* user_data),
- void (*focus_lost_callback)(LLLineEditor* caller, void* user_data),
+ void (*focus_lost_callback)(LLUICtrl* caller, void* user_data),
void* userdata,
LLLinePrevalidateFunc prevalidate_func,
LLViewBorder::EBevel border_bevel,
diff --git a/linden/indra/newview/llnameeditor.h b/linden/indra/newview/llnameeditor.h
index 1ad1e8c..60e0432 100644
--- a/linden/indra/newview/llnameeditor.h
+++ b/linden/indra/newview/llnameeditor.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -49,7 +50,7 @@ public:
S32 max_text_length = 254,
void (*commit_callback)(LLUICtrl* caller, void* user_data) = NULL,
void (*keystroke_callback)(LLLineEditor* caller, void* user_data) = NULL,
- void (*focus_lost_callback)(LLLineEditor* caller, void* user_data) = NULL,
+ void (*focus_lost_callback)(LLUICtrl* caller, void* user_data) = NULL,
void* userdata = NULL,
LLLinePrevalidateFunc prevalidate_func = NULL,
LLViewBorder::EBevel border_bevel = LLViewBorder::BEVEL_IN,
diff --git a/linden/indra/newview/llnamelistctrl.cpp b/linden/indra/newview/llnamelistctrl.cpp
index 90bfb86..98745b4 100644
--- a/linden/indra/newview/llnamelistctrl.cpp
+++ b/linden/indra/newview/llnamelistctrl.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -177,6 +178,13 @@ BOOL LLNameListCtrl::addNameItem(LLScrollListItem* item, EAddPosition pos)
addItem(item, pos);
+ // this column is resizable
+ LLScrollListColumn* columnp = getColumn(mNameColumnIndex);
+ if (columnp && columnp->mHeader)
+ {
+ columnp->mHeader->setHasResizableElement(TRUE);
+ }
+
return result;
}
@@ -187,16 +195,41 @@ LLScrollListItem* LLNameListCtrl::addElement(const LLSD& value, EAddPosition pos
char first[DB_FIRST_NAME_BUF_SIZE]; /*Flawfinder: ignore*/
char last[DB_LAST_NAME_BUF_SIZE]; /*Flawfinder: ignore*/
- gCacheName->getName(item->getUUID(), first, last);
-
- LLString fullname;
- fullname.assign(first);
- fullname.append(1, ' ');
- fullname.append(last);
-
+ // use supplied name by default
+ LLString fullname = value["name"].asString();
+ if (value["target"].asString() == "GROUP")
+ {
+ char group_name[DB_GROUP_NAME_BUF_SIZE]; /*Flawfinder: ignore*/
+ gCacheName->getGroupName(item->getUUID(), group_name);
+ // fullname will be "nobody" if group not found
+ fullname = group_name;
+ }
+ else if (value["target"].asString() == "SPECIAL")
+ {
+ // just use supplied name
+ }
+ else // normal resident
+ {
+ if (gCacheName->getName(item->getUUID(), first, last))
+ {
+ fullname.assign(first);
+ fullname.append(1, ' ');
+ fullname.append(last);
+ }
+ }
+
LLScrollListCell* cell = (LLScrollListCell*)item->getColumn(mNameColumnIndex);
((LLScrollListText*)cell)->setText( fullname );
+ updateMaxContentWidth(item);
+
+ // this column is resizable
+ LLScrollListColumn* columnp = getColumn(mNameColumnIndex);
+ if (columnp && columnp->mHeader)
+ {
+ columnp->mHeader->setHasResizableElement(TRUE);
+ }
+
return item;
}
@@ -241,6 +274,7 @@ void LLNameListCtrl::refresh(const LLUUID& id, const char* first,
cell = (LLScrollListCell*)item->getColumn(mNameColumnIndex);
((LLScrollListText*)cell)->setText( fullname );
+ updateMaxContentWidth(item);
}
}
}
@@ -318,13 +352,6 @@ LLView* LLNameListCtrl::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFacto
node->getAttributeS32("heading_height", heading_height);
name_list->setHeadingHeight(heading_height);
}
- if (node->hasAttribute("heading_font"))
- {
- LLString heading_font("");
- node->getAttributeString("heading_font", heading_font);
- LLFontGL* gl_font = LLFontGL::fontFromName(heading_font.c_str());
- name_list->setHeadingFont(gl_font);
- }
name_list->setCollapseEmptyColumns(collapse_empty_columns);
BOOL allow_calling_card_drop = FALSE;
@@ -363,8 +390,12 @@ LLView* LLNameListCtrl::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFacto
columns[index]["width"] = columnwidth;
}
+ LLFontGL::HAlign h_align = LLFontGL::LEFT;
+ h_align = LLView::selectFontHAlign(child);
+
columns[index]["name"] = columnname;
columns[index]["label"] = labelname;
+ columns[index]["halign"] = (S32)h_align;
index++;
}
}
@@ -426,3 +457,4 @@ LLView* LLNameListCtrl::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFacto
return name_list;
}
+
diff --git a/linden/indra/newview/llnamelistctrl.h b/linden/indra/newview/llnamelistctrl.h
index c0e8034..cded3cf 100644
--- a/linden/indra/newview/llnamelistctrl.h
+++ b/linden/indra/newview/llnamelistctrl.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llnetmap.cpp b/linden/indra/newview/llnetmap.cpp
index dcbf960..35774cb 100644
--- a/linden/indra/newview/llnetmap.cpp
+++ b/linden/indra/newview/llnetmap.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -238,8 +239,6 @@ void LLNetMap::draw()
mCurPanY = lerp(mCurPanY, mTargetPanY, LLCriticalDamp::getInterpolant(0.1f));
// Prepare a scissor region
- // GLint params[4];
- // glGetIntegerv( GL_SCISSOR_BOX, params );
F32 rotation = 0;
{
@@ -274,12 +273,10 @@ void LLNetMap::draw()
// figure out where agent is
S32 region_width = llround(gWorldPointer->getRegionWidthInMeters());
- LLViewerRegion *regionp;
-
- for (regionp = gWorldPointer->mActiveRegionList.getFirstData();
- regionp;
- regionp = gWorldPointer->mActiveRegionList.getNextData())
+ for (LLWorld::region_list_t::iterator iter = gWorldp->mActiveRegionList.begin();
+ iter != gWorldp->mActiveRegionList.end(); ++iter)
{
+ LLViewerRegion* regionp = *iter;
// Find x and y position relative to camera's center.
LLVector3 origin_agent = regionp->getOriginAgent();
LLVector3 rel_region_pos = origin_agent - gAgent.getCameraPositionAgent();
@@ -393,10 +390,10 @@ void LLNetMap::draw()
LLVector3 pos_map;
// Draw avatars
- for (regionp = gWorldPointer->mActiveRegionList.getFirstData();
- regionp;
- regionp = gWorldPointer->mActiveRegionList.getNextData())
+ for (LLWorld::region_list_t::iterator iter = gWorldp->mActiveRegionList.begin();
+ iter != gWorldp->mActiveRegionList.end(); ++iter)
{
+ LLViewerRegion* regionp = *iter;
const LLVector3d& origin_global = regionp->getOriginGlobal();
S32 count = regionp->mMapAvatars.count();
diff --git a/linden/indra/newview/llnetmap.h b/linden/indra/newview/llnetmap.h
index ffc0717..ac5e602 100644
--- a/linden/indra/newview/llnetmap.h
+++ b/linden/indra/newview/llnetmap.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llnotify.cpp b/linden/indra/newview/llnotify.cpp
index 3512e57..a84341d 100644
--- a/linden/indra/newview/llnotify.cpp
+++ b/linden/indra/newview/llnotify.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llnotify.h b/linden/indra/newview/llnotify.h
index cddcc42..013b2d9 100644
--- a/linden/indra/newview/llnotify.h
+++ b/linden/indra/newview/llnotify.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lloverlaybar.cpp b/linden/indra/newview/lloverlaybar.cpp
index a978914..f34dc87 100644
--- a/linden/indra/newview/lloverlaybar.cpp
+++ b/linden/indra/newview/lloverlaybar.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lloverlaybar.h b/linden/indra/newview/lloverlaybar.h
index df69399..1f15023 100644
--- a/linden/indra/newview/lloverlaybar.h
+++ b/linden/indra/newview/lloverlaybar.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelaudioprefs.cpp b/linden/indra/newview/llpanelaudioprefs.cpp
index 4b36069..4a58cea 100644
--- a/linden/indra/newview/llpanelaudioprefs.cpp
+++ b/linden/indra/newview/llpanelaudioprefs.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelaudioprefs.h b/linden/indra/newview/llpanelaudioprefs.h
index ff08d36..63ac77b 100644
--- a/linden/indra/newview/llpanelaudioprefs.h
+++ b/linden/indra/newview/llpanelaudioprefs.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelavatar.cpp b/linden/indra/newview/llpanelavatar.cpp
index 70b18be..fd25775 100644
--- a/linden/indra/newview/llpanelavatar.cpp
+++ b/linden/indra/newview/llpanelavatar.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -29,6 +30,7 @@
#include "llpanelavatar.h"
+#include "llclassifiedflags.h"
#include "llfontgl.h"
#include "llcachename.h"
@@ -43,10 +45,11 @@
#include "llcallingcard.h"
#include "llcheckboxctrl.h"
#include "llfloater.h"
+
+#include "llfloaterfriends.h"
#include "llfloatergroupinfo.h"
#include "llfloaterworldmap.h"
#include "llfloatermute.h"
-#include "llfloaterrate.h"
#include "llfloateravatarinfo.h"
#include "lliconctrl.h"
#include "llinventoryview.h"
@@ -64,7 +67,7 @@
#include "lluiconstants.h"
#include "llvoavatar.h"
#include "llviewermenu.h" // *FIX: for is_agent_friend()
-#include "llviewermessage.h" // send_generic_message
+#include "llviewergenericmessage.h" // send_generic_message
#include "llviewerobjectlist.h"
#include "llviewerregion.h"
#include "llviewborder.h"
@@ -78,7 +81,7 @@
#include "llvieweruictrlfactory.h"
// Statics
-LLLinkedList LLPanelAvatar::sAllPanels;
+std::list LLPanelAvatar::sAllPanels;
BOOL LLPanelAvatar::sAllowFirstLife = FALSE;
//-----------------------------------------------------------------------------
@@ -274,14 +277,13 @@ void LLPanelAvatarTab::draw()
}
}
-void LLPanelAvatarTab::sendAvatarProfileRequestIfNeeded(const char* type)
+void LLPanelAvatarTab::sendAvatarProfileRequestIfNeeded(const char* method)
{
if (!mDataRequested)
{
std::vector strings;
strings.push_back( mPanelAvatar->getAvatarID().asString() );
- strings.push_back( type );
- send_generic_message("avatarprofilerequest", strings);
+ send_generic_message(method, strings);
mDataRequested = true;
}
}
@@ -465,7 +467,8 @@ BOOL LLPanelAvatarSecondLife::postBuild(void)
childSetAction("Show on Map", LLPanelAvatar::onClickTrack, getPanelAvatar());
childSetAction("Instant Message...", LLPanelAvatar::onClickIM, getPanelAvatar());
- childSetAction("Rate...", LLPanelAvatar::onClickRate, getPanelAvatar());
+
+ childSetAction("Add Friend...", LLPanelAvatar::onClickAddFriend, getPanelAvatar());
childSetAction("Pay...", LLPanelAvatar::onClickPay, getPanelAvatar());
childSetAction("Mute", LLPanelAvatar::onClickMute, getPanelAvatar() );
@@ -822,7 +825,7 @@ LLPanelAvatarNotes::LLPanelAvatarNotes(const std::string& name, const LLRect& re
void LLPanelAvatarNotes::refresh()
{
- sendAvatarProfileRequestIfNeeded("notes");
+ sendAvatarProfileRequestIfNeeded("avatarnotesrequest");
}
void LLPanelAvatarNotes::clearControls()
@@ -858,15 +861,15 @@ void LLPanelAvatarClassified::refresh()
S32 tab_count = tabs ? tabs->getTabCount() : 0;
- BOOL allow_new = TRUE; //tab_count < MAX_CLASSIFIEDS;
- BOOL allow_delete = (tab_count > 0);
- BOOL show_help = (tab_count == 0);
+ bool allow_new = tab_count < MAX_CLASSIFIEDS;
+ bool allow_delete = (tab_count > 0);
+ bool show_help = (tab_count == 0);
childSetEnabled("New...",self && allow_new);
childSetEnabled("Delete...",self && allow_delete);
childSetVisible("classified tab",!show_help);
- sendAvatarProfileRequestIfNeeded("classifieds");
+ sendAvatarProfileRequestIfNeeded("avatarclassifiedsrequest");
}
@@ -923,9 +926,8 @@ void LLPanelAvatarClassified::processAvatarClassifiedReply(LLMessageSystem* msg,
LLTabContainerCommon* tabs = LLViewerUICtrlFactory::getTabContainerByName(this,"classified tab");
- // Clear out all the old panels.
- // We'll replace them with the correct number of new panels.
- deleteClassifiedPanels();
+ // Don't remove old panels. We need to be able to process multiple
+ // packets for people who have lots of classifieds. JC
block_count = msg->getNumberOfBlocksFast(_PREHASH_Data);
for (block = 0; block < block_count; block++)
@@ -1068,7 +1070,7 @@ void LLPanelAvatarPicks::refresh()
childSetEnabled("New...",self && allow_new);
childSetEnabled("Delete...",self && allow_delete);
- sendAvatarProfileRequestIfNeeded("picks");
+ sendAvatarProfileRequestIfNeeded("avatarpicksrequest");
}
@@ -1099,6 +1101,9 @@ void LLPanelAvatarPicks::processAvatarPicksReply(LLMessageSystem* msg, void**)
// number of new panels.
deletePickPanels();
+ // The database needs to know for which user to look up picks.
+ LLUUID avatar_id = getPanelAvatar()->getAvatarID();
+
block_count = msg->getNumberOfBlocks("Data");
for (block = 0; block < block_count; block++)
{
@@ -1107,7 +1112,7 @@ void LLPanelAvatarPicks::processAvatarPicksReply(LLMessageSystem* msg, void**)
panel_pick = new LLPanelPick(FALSE);
- panel_pick->setPickID(pick_id);
+ panel_pick->setPickID(pick_id, avatar_id);
// This will request data from the server when the pick is first
// drawn.
@@ -1186,23 +1191,24 @@ void LLPanelAvatarPicks::callbackDelete(S32 option, void* data)
if(gAgent.isGodlike())
{
msg->newMessage("PickGodDelete");
+ msg->nextBlock("AgentData");
+ msg->addUUID("AgentID", gAgent.getID());
+ msg->addUUID("SessionID", gAgent.getSessionID());
+ msg->nextBlock("Data");
+ msg->addUUID("PickID", panel_pick->getPickID());
+ // *HACK: We need to send the pick's creator id to accomplish
+ // the delete, and we don't use the query id for anything. JC
+ msg->addUUID( "QueryID", panel_pick->getPickCreatorID() );
}
else
{
msg->newMessage("PickDelete");
+ msg->nextBlock("AgentData");
+ msg->addUUID("AgentID", gAgent.getID());
+ msg->addUUID("SessionID", gAgent.getSessionID());
+ msg->nextBlock("Data");
+ msg->addUUID("PickID", panel_pick->getPickID());
}
- msg->nextBlock("AgentData");
- msg->addUUID("AgentID", gAgent.getID());
- msg->addUUID("SessionID", gAgent.getSessionID());
- msg->nextBlock("Data");
- msg->addUUID("PickID", panel_pick->getPickID());
-
- //God delete receiving end expects a query ID but we dont need it, so send a null.
- //This is to resolve SL-24170 God Picks Delete results in crash.
- if(gAgent.isGodlike())
- msg->addUUID( "QueryID", LLUUID::null );
-
-
gAgent.sendReliableMessage();
if(tabs)
@@ -1235,11 +1241,10 @@ LLPanelAvatar::LLPanelAvatar(
mAvatarID( LLUUID::null ), // mAvatarID is set with 'setAvatar' or 'setAvatarID'
mHaveProperties(FALSE),
mHaveStatistics(FALSE),
- mAllowEdit(allow_edit),
- mDisableRate(FALSE)
+ mAllowEdit(allow_edit)
{
- sAllPanels.addData(this);
+ sAllPanels.push_back(this);
LLCallbackMap::map_t factory_map;
@@ -1291,7 +1296,7 @@ BOOL LLPanelAvatar::postBuild(void)
LLPanelAvatar::~LLPanelAvatar()
{
- sAllPanels.removeData(this);
+ sAllPanels.remove(this);
}
@@ -1451,8 +1456,8 @@ void LLPanelAvatar::setAvatarID(const LLUUID &avatar_id, const LLString &name,
childSetEnabled("drop target",FALSE);
childSetVisible("Show on Map",FALSE);
childSetEnabled("Show on Map",FALSE);
- childSetVisible("Rate...",FALSE);
- childSetEnabled("Rate...",FALSE);
+ childSetVisible("Add Friend...",FALSE);
+ childSetEnabled("Add Friend...",FALSE);
childSetVisible("Pay...",FALSE);
childSetEnabled("Pay...",FALSE);
}
@@ -1489,8 +1494,8 @@ void LLPanelAvatar::setAvatarID(const LLUUID &avatar_id, const LLString &name,
{
childSetToolTip("Show on Map",childGetValue("ShowOnMapFriendOnline").asString());
}
- childSetVisible("Rate...",TRUE);
- childSetEnabled("Rate...",FALSE);
+ childSetVisible("Add Friend...", true);
+ childSetEnabled("Add Friend...", true);
childSetVisible("Pay...",TRUE);
childSetEnabled("Pay...",FALSE);
}
@@ -1522,7 +1527,6 @@ void LLPanelAvatar::resetGroupList()
if (mPanelSecondLife && group_list)
{
group_list->deleteAllItems();
- LLScrollListItem* item;
S32 count = gAgent.mGroups.count();
LLUUID id;
@@ -1544,9 +1548,12 @@ void LLPanelAvatar::resetGroupList()
*/
group_string += group_data.mName;
- item = new LLScrollListItem(TRUE, NULL, id);
- item->addColumn(group_string, LLFontGL::sSansSerifSmall, 0, LLFontGL::NORMAL);
- group_list->addItem(item);
+
+ LLSD row;
+ row["columns"][0]["value"] = group_string;
+ row["columns"][0]["font"] = "SANSSERIF_SMALL";
+ row["columns"][0]["width"] = 0;
+ group_list->addElement(row);
}
group_list->sortByColumn(0, TRUE);
}
@@ -1586,15 +1593,17 @@ void LLPanelAvatar::onClickTrack(void* userdata)
}
}
+
// static
-//-----------------------------------------------------------------------------
-// onClickRate()
-//-----------------------------------------------------------------------------
-void LLPanelAvatar::onClickRate(void *userdata)
+void LLPanelAvatar::onClickAddFriend(void* userdata)
{
LLPanelAvatar* self = (LLPanelAvatar*) userdata;
-
- LLFloaterRate::show(self->mAvatarID);
+ LLNameEditor* name_edit = LLViewerUICtrlFactory::getNameEditorByName(self->mPanelSecondLife, "name");
+ if (name_edit)
+ {
+ LLFloaterFriends::requestFriendshipDialog(self->getAvatarID(),
+ name_edit->getText());
+ }
}
//-----------------------------------------------------------------------------
@@ -1625,15 +1634,6 @@ void LLPanelAvatar::onClickMute(void *userdata)
}
-void LLPanelAvatar::disableRate()
-{
- // Force off the rate button, but enable IM.
- // Note that these buttons may not exist if it is your own profile.
- childSetEnabled("Rate...",FALSE);
- mDisableRate = TRUE;
-}
-
-
// static
void LLPanelAvatar::onClickOfferTeleport(void *userdata)
{
@@ -1747,8 +1747,6 @@ void LLPanelAvatar::sendAvatarNotesUpdate()
// static
void LLPanelAvatar::processAvatarPropertiesReply(LLMessageSystem *msg, void**)
{
- LLPanelAvatar* self = NULL;
-
LLUUID agent_id; // your id
LLUUID avatar_id; // target of this panel
LLUUID image_id;
@@ -1772,8 +1770,9 @@ void LLPanelAvatar::processAvatarPropertiesReply(LLMessageSystem *msg, void**)
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AvatarID, avatar_id );
- for (self = sAllPanels.getFirstData(); self; self = sAllPanels.getNextData())
+ for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter)
{
+ LLPanelAvatar* self = *iter;
if (self->mAvatarID != avatar_id)
{
continue;
@@ -1782,10 +1781,6 @@ void LLPanelAvatar::processAvatarPropertiesReply(LLMessageSystem *msg, void**)
self->childSetEnabled("Pay...",TRUE);
self->childSetEnabled("Mute",TRUE);
- if (!self->mDisableRate)
- {
- self->childSetEnabled("Rate...",TRUE);
- }
self->childSetEnabled("drop target",TRUE);
self->mHaveProperties = TRUE;
@@ -1895,8 +1890,6 @@ void LLPanelAvatar::processAvatarPropertiesReply(LLMessageSystem *msg, void**)
// static
void LLPanelAvatar::processAvatarInterestsReply(LLMessageSystem *msg, void**)
{
- LLPanelAvatar* self = NULL;
-
LLUUID agent_id; // your id
LLUUID avatar_id; // target of this panel
@@ -1911,8 +1904,9 @@ void LLPanelAvatar::processAvatarInterestsReply(LLMessageSystem *msg, void**)
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AvatarID, avatar_id );
- for (self = sAllPanels.getFirstData(); self; self = sAllPanels.getNextData())
+ for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter)
{
+ LLPanelAvatar* self = *iter;
if (self->mAvatarID != avatar_id)
{
continue;
@@ -1940,15 +1934,15 @@ void LLPanelAvatar::processAvatarGroupsReply(LLMessageSystem *msg, void**)
LLUUID group_id;
char group_name[DB_GROUP_NAME_BUF_SIZE]; /*Flawfinder: ignore*/
LLUUID group_insignia_id;
- const LLFontGL* FONT = LLFontGL::sSansSerifSmall;
llinfos << "groups packet size " << msg->getReceiveSize() << llendl;
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AvatarID, avatar_id );
- for (LLPanelAvatar* self = sAllPanels.getFirstData(); self; self = sAllPanels.getNextData())
+ for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter)
{
+ LLPanelAvatar* self = *iter;
if (self->mAvatarID != avatar_id)
{
continue;
@@ -1996,9 +1990,15 @@ void LLPanelAvatar::processAvatarGroupsReply(LLMessageSystem *msg, void**)
group_list->deleteSingleItem(index);
}
}
- LLScrollListItem *group_item = new LLScrollListItem(TRUE, NULL, group_id);
- group_item->addColumn(group_string, FONT);
- if(group_list) group_list->addItem(group_item);
+
+ LLSD row;
+ row["id"] = group_id;
+ row["columns"][0]["value"] = group_string;
+ row["columns"][0]["font"] = "SANSSERIF_SMALL";
+ if (group_list)
+ {
+ group_list->addElement(row);
+ }
}
}
if(group_list) group_list->sortByColumn(0, TRUE);
@@ -2009,7 +2009,7 @@ void LLPanelAvatar::processAvatarGroupsReply(LLMessageSystem *msg, void**)
// Otherwise you will write blanks back into the database.
void LLPanelAvatar::enableOKIfReady()
{
- if(mHaveProperties && mHaveStatistics && childIsVisible("OK"))
+ if(mHaveProperties && childIsVisible("OK"))
{
childSetEnabled("OK", TRUE);
}
@@ -2115,68 +2115,6 @@ void LLPanelAvatar::selectTabByName(std::string tab_name)
}
-// static
-void LLPanelAvatar::processAvatarStatisticsReply(LLMessageSystem *msg, void**)
-{
- // extract the agent id
- LLUUID agent_id;
- msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id );
-
- LLUUID avatar_id;
- msg->getUUIDFast(_PREHASH_AvatarData, _PREHASH_AvatarID, avatar_id);
-
- // look up all panels which have this avatar
- LLPanelAvatar *self = NULL;
-
- for (self = sAllPanels.getFirstData(); self; self = sAllPanels.getNextData())
- {
- if (self->mAvatarID != avatar_id)
- {
- continue;
- }
-
- self->mHaveStatistics = TRUE;
- self->enableOKIfReady();
-
- // clear out list
- LLScrollListCtrl* ratings_list = LLUICtrlFactory::getScrollListByName(self->mPanelSecondLife,"ratings");
- if (ratings_list)
- {
- ratings_list->deleteAllItems();
- }
- // build the item list
- LLFontGL *font = LLFontGL::sSansSerifSmall;
-
- S32 items = msg->getNumberOfBlocksFast(_PREHASH_StatisticsData);
- for (S32 i = 0; i < items; i++)
- {
- char name[MAX_STRING]; /*Flawfinder: ignore*/
- S32 positive;
- S32 negative;
- char value_string[MAX_STRING]; /*Flawfinder: ignore*/
-
- msg->getStringFast( _PREHASH_StatisticsData,
- _PREHASH_Name, MAX_STRING, name, i);
- msg->getS32( "StatisticsData", "Positive", positive, i);
- msg->getS32( "StatisticsData", "Negative", negative, i);
-
- LLScrollListItem *item = NULL;
-
- const S32 TEXT_WIDTH = 75;
-
- item = new LLScrollListItem();
- item->addColumn( name, font, TEXT_WIDTH );
-
- snprintf( value_string, sizeof(value_string), "+%d", positive); /*Flawfinder: ignore*/
- item->addColumn( value_string, font, 50 );
-
- item->addColumn("", font); // extra column to force striped appearance
- if(ratings_list) ratings_list->addItem( item );
- }
- }
-}
-
-
void LLPanelAvatar::processAvatarNotesReply(LLMessageSystem *msg, void**)
{
// extract the agent id
@@ -2187,10 +2125,9 @@ void LLPanelAvatar::processAvatarNotesReply(LLMessageSystem *msg, void**)
msg->getUUID("Data", "TargetID", target_id);
// look up all panels which have this avatar
- LLPanelAvatar *self = NULL;
-
- for (self = sAllPanels.getFirstData(); self; self = sAllPanels.getNextData())
+ for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter)
{
+ LLPanelAvatar* self = *iter;
if (self->mAvatarID != target_id)
{
continue;
@@ -2206,7 +2143,6 @@ void LLPanelAvatar::processAvatarNotesReply(LLMessageSystem *msg, void**)
void LLPanelAvatar::processAvatarClassifiedReply(LLMessageSystem *msg, void** userdata)
{
- LLPanelAvatar *self = NULL;
LLUUID agent_id;
LLUUID target_id;
@@ -2214,8 +2150,9 @@ void LLPanelAvatar::processAvatarClassifiedReply(LLMessageSystem *msg, void** us
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_TargetID, target_id);
// look up all panels which have this avatar target
- for (self = sAllPanels.getFirstData(); self; self = sAllPanels.getNextData())
+ for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter)
{
+ LLPanelAvatar* self = *iter;
if (self->mAvatarID != target_id)
{
continue;
@@ -2227,7 +2164,6 @@ void LLPanelAvatar::processAvatarClassifiedReply(LLMessageSystem *msg, void** us
void LLPanelAvatar::processAvatarPicksReply(LLMessageSystem *msg, void** userdata)
{
- LLPanelAvatar *self = NULL;
LLUUID agent_id;
LLUUID target_id;
@@ -2235,8 +2171,9 @@ void LLPanelAvatar::processAvatarPicksReply(LLMessageSystem *msg, void** userdat
msg->getUUID("AgentData", "TargetID", target_id);
// look up all panels which have this avatar target
- for (self = sAllPanels.getFirstData(); self; self = sAllPanels.getNextData())
+ for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter)
{
+ LLPanelAvatar* self = *iter;
if (self->mAvatarID != target_id)
{
continue;
diff --git a/linden/indra/newview/llpanelavatar.h b/linden/indra/newview/llpanelavatar.h
index 3e8bffd..8df5df1 100644
--- a/linden/indra/newview/llpanelavatar.h
+++ b/linden/indra/newview/llpanelavatar.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -79,8 +80,9 @@ public:
// If the data for this tab has not yet been requested,
// send the request. Used by tabs that are filled in only
// when they are first displayed.
- // type is one of "notes", "classifieds", "picks"
- void sendAvatarProfileRequestIfNeeded(const char* type);
+ // type is one of "avatarnotesrequest", "avatarpicksrequest",
+ // or "avatarclassifiedsrequest"
+ void sendAvatarProfileRequestIfNeeded(const char* method);
private:
LLPanelAvatar* mPanelAvatar;
@@ -275,8 +277,6 @@ public:
void setOnlineStatus(EOnlineStatus online_status);
const LLUUID& getAvatarID() const { return mAvatarID; }
-
- void disableRate();
void resetGroupList();
@@ -298,7 +298,6 @@ public:
static void processAvatarPropertiesReply(LLMessageSystem *msg, void **);
static void processAvatarInterestsReply(LLMessageSystem *msg, void **);
static void processAvatarGroupsReply(LLMessageSystem* msg, void**);
- static void processAvatarStatisticsReply(LLMessageSystem *msg, void **);
static void processAvatarNotesReply(LLMessageSystem *msg, void **);
static void processAvatarPicksReply(LLMessageSystem *msg, void **);
static void processAvatarClassifiedReply(LLMessageSystem *msg, void **);
@@ -307,7 +306,7 @@ public:
static void onClickIM( void *userdata);
static void onClickOfferTeleport( void *userdata);
static void onClickPay( void *userdata);
- static void onClickRate( void *userdata);
+ static void onClickAddFriend(void* userdata);
static void onClickOK( void *userdata);
static void onClickCancel( void *userdata);
static void onClickKick( void *userdata);
@@ -315,7 +314,6 @@ public:
static void onClickUnfreeze(void *userdata);
static void onClickCSR( void *userdata);
static void onClickMute( void *userdata);
- static void onClickAddFriend(void* data);
static void finishKick(S32 option, const LLString& text, void* userdata);
static void finishFreeze(S32 option, const LLString& text, void* userdata);
@@ -356,9 +354,9 @@ protected:
BOOL mHaveStatistics;
LLTabContainerCommon* mTab;
BOOL mAllowEdit;
- BOOL mDisableRate;
- static LLLinkedList sAllPanels;
+ typedef std::list panel_list_t;
+ static panel_list_t sAllPanels;
};
// helper funcs
diff --git a/linden/indra/newview/llpanelclassified.cpp b/linden/indra/newview/llpanelclassified.cpp
index 11120e0..7a2542d 100644
--- a/linden/indra/newview/llpanelclassified.cpp
+++ b/linden/indra/newview/llpanelclassified.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -57,7 +58,7 @@
#include "llviewerwindow.h"
#include "llworldmap.h"
#include "llfloaterworldmap.h"
-#include "llviewermessage.h" // send_generic_message
+#include "llviewergenericmessage.h" // send_generic_message
#include "llviewerwindow.h" // for window width, height
const S32 MINIMUM_PRICE_FOR_LISTING = 50; // L$
@@ -91,7 +92,7 @@ public:
static LLDispatchClassifiedClickThrough sClassifiedClickThrough;
//static
-LLLinkedList LLPanelClassified::sAllPanels;
+std::list LLPanelClassified::sAllPanels;
LLPanelClassified::LLPanelClassified(BOOL in_finder)
: LLPanel("Classified Panel"),
@@ -118,7 +119,7 @@ LLPanelClassified::LLPanelClassified(BOOL in_finder)
mSetBtn(NULL),
mClickThroughText(NULL)
{
- sAllPanels.addData(this);
+ sAllPanels.push_back(this);
std::string classified_def_file;
if (mInFinder)
@@ -138,7 +139,7 @@ LLPanelClassified::LLPanelClassified(BOOL in_finder)
LLPanelClassified::~LLPanelClassified()
{
- sAllPanels.removeData(this);
+ sAllPanels.remove(this);
}
@@ -319,9 +320,9 @@ void LLPanelClassified::setClickThrough(const LLUUID& classified_id,
S32 map,
S32 profile)
{
- LLPanelClassified *self = NULL;
- for (self = sAllPanels.getFirstData(); self; self = sAllPanels.getNextData())
- {
+ for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter)
+ {
+ LLPanelClassified* self = *iter;
// For top picks, must match pick id
if (self->mClassifiedID != classified_id)
{
@@ -477,7 +478,7 @@ void LLPanelClassified::processClassifiedInfoReply(LLMessageSystem *msg, void **
S32 region_y = llround((F32)pos_global.mdV[VY]) % REGION_WIDTH_UNITS;
S32 region_z = llround((F32)pos_global.mdV[VZ]);
- snprintf(buffer, sizeof(buffer), "%s (%d, %d, %d)", sim_name, region_x, region_y, region_z); /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), "%s (%d, %d, %d)", sim_name, region_x, region_y, region_z); /* Flawfinder: ignore */
location_text.append(buffer);
U8 flags;
@@ -502,9 +503,9 @@ void LLPanelClassified::processClassifiedInfoReply(LLMessageSystem *msg, void **
msg->getS32("Data", "PriceForListing", price_for_listing);
// Look up the panel to fill in
- LLPanelClassified *self = NULL;
- for (self = sAllPanels.getFirstData(); self; self = sAllPanels.getNextData())
- {
+ for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter)
+ {
+ LLPanelClassified* self = *iter;
// For top picks, must match pick id
if (self->mClassifiedID != classified_id)
{
diff --git a/linden/indra/newview/llpanelclassified.h b/linden/indra/newview/llpanelclassified.h
index ee70cae..498f8a5 100644
--- a/linden/indra/newview/llpanelclassified.h
+++ b/linden/indra/newview/llpanelclassified.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -142,7 +143,8 @@ protected:
LLTextBox* mClickThroughText;
LLRect mSnapshotSize;
- static LLLinkedList sAllPanels;
+ typedef std::list panel_list_t;
+ static panel_list_t sAllPanels;
};
diff --git a/linden/indra/newview/llpanelcontents.cpp b/linden/indra/newview/llpanelcontents.cpp
index 47f2d35..2265ed5 100644
--- a/linden/indra/newview/llpanelcontents.cpp
+++ b/linden/indra/newview/llpanelcontents.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelcontents.h b/linden/indra/newview/llpanelcontents.h
index a8d3dfc..da2f5f5 100644
--- a/linden/indra/newview/llpanelcontents.h
+++ b/linden/indra/newview/llpanelcontents.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpaneldebug.cpp b/linden/indra/newview/llpaneldebug.cpp
index 1d2d670..3166a1d 100644
--- a/linden/indra/newview/llpaneldebug.cpp
+++ b/linden/indra/newview/llpaneldebug.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpaneldebug.h b/linden/indra/newview/llpaneldebug.h
index 7ffed82..cfd4db8 100644
--- a/linden/indra/newview/llpaneldebug.h
+++ b/linden/indra/newview/llpaneldebug.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpaneldirbrowser.cpp b/linden/indra/newview/llpaneldirbrowser.cpp
index 7f15a85..b65480b 100644
--- a/linden/indra/newview/llpaneldirbrowser.cpp
+++ b/linden/indra/newview/llpaneldirbrowser.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -323,7 +324,6 @@ void LLPanelDirBrowser::onCommitList(LLUICtrl* ctrl, void* data)
{
self->mFloaterDirectory->mPanelAvatarp->setVisible(TRUE);
self->mFloaterDirectory->mPanelAvatarp->setAvatarID(id, name, ONLINE_STATUS_NO);
- self->mFloaterDirectory->mPanelAvatarp->disableRate();
}
break;
case EVENT_CODE:
@@ -491,7 +491,6 @@ void LLPanelDirBrowser::processDirPlacesReply(LLMessageSystem* msg, void**)
char name[MAX_STRING]; /*Flawfinder: ignore*/
BOOL is_for_sale;
BOOL is_auction;
- BOOL is_newbie;
F32 dwell;
msg->getUUID("AgentData", "AgentID", agent_id);
@@ -528,7 +527,6 @@ void LLPanelDirBrowser::processDirPlacesReply(LLMessageSystem* msg, void**)
msg->getString("QueryReplies", "Name", MAX_STRING, name, i);
msg->getBOOL("QueryReplies", "ForSale", is_for_sale, i);
msg->getBOOL("QueryReplies", "Auction", is_auction, i);
- msg->getBOOL("QueryReplies", "ReservedNewbie", is_newbie, i);
msg->getF32("QueryReplies", "Dwell", dwell, i);
if (parcel_id.isNull())
@@ -539,7 +537,7 @@ void LLPanelDirBrowser::processDirPlacesReply(LLMessageSystem* msg, void**)
LLSD content;
S32 type;
- LLSD row = self->createLandSale(parcel_id, is_auction, is_for_sale, is_newbie, name, &type);
+ LLSD row = self->createLandSale(parcel_id, is_auction, is_for_sale, name, &type);
content["type"] = type;
content["name"] = name;
@@ -767,8 +765,7 @@ void LLPanelDirBrowser::processDirGroupsReply(LLMessageSystem* msg, void**)
LLUUID group_id;
char group_name[DB_GROUP_NAME_BUF_SIZE]; /*Flawfinder: ignore*/
S32 members;
- BOOL open_enrollment;
- S32 membership_fee;
+ F32 search_order;
msg->getUUIDFast(_PREHASH_QueryData,_PREHASH_QueryID, query_id );
@@ -800,8 +797,7 @@ void LLPanelDirBrowser::processDirGroupsReply(LLMessageSystem* msg, void**)
msg->getUUIDFast(_PREHASH_QueryReplies, _PREHASH_GroupID, group_id, i );
msg->getStringFast(_PREHASH_QueryReplies, _PREHASH_GroupName, DB_GROUP_NAME_BUF_SIZE, group_name, i);
msg->getS32Fast(_PREHASH_QueryReplies, _PREHASH_Members, members, i );
- msg->getBOOLFast(_PREHASH_QueryReplies, _PREHASH_OpenEnrollment, open_enrollment, i );
- msg->getS32Fast(_PREHASH_QueryReplies, _PREHASH_MembershipFee, membership_fee, i );
+ msg->getF32Fast(_PREHASH_QueryReplies, _PREHASH_SearchOrder, search_order, i );
if (group_id.isNull())
{
@@ -829,6 +825,9 @@ void LLPanelDirBrowser::processDirGroupsReply(LLMessageSystem* msg, void**)
row["columns"][2]["value"] = members;
row["columns"][2]["font"] = "SANSSERIFSMALL";
+ row["columns"][3]["column"] = "score";
+ row["columns"][3]["value"] = search_order;
+
list->addElement(row);
self->mResultsContents[group_id.asString()] = content;
}
@@ -921,7 +920,6 @@ void LLPanelDirBrowser::processDirLandReply(LLMessageSystem *msg, void**)
BOOL for_sale;
S32 sale_price;
S32 actual_area;
- BOOL is_newbie;
msg->getUUID("AgentData", "AgentID", agent_id);
msg->getUUID("QueryData", "QueryID", query_id );
@@ -965,7 +963,6 @@ void LLPanelDirBrowser::processDirLandReply(LLMessageSystem *msg, void**)
msg->getString( "QueryReplies", "Name", MAX_STRING, name, i);
msg->getBOOL( "QueryReplies", "Auction", auction, i);
msg->getBOOL( "QueryReplies", "ForSale", for_sale, i);
- msg->getBOOL( "QueryReplies", "ReservedNewbie", is_newbie, i);
msg->getS32( "QueryReplies", "SalePrice", sale_price, i);
msg->getS32( "QueryReplies", "ActualArea", actual_area, i);
@@ -978,7 +975,7 @@ void LLPanelDirBrowser::processDirLandReply(LLMessageSystem *msg, void**)
LLSD content;
S32 type;
- LLSD row = self->createLandSale(parcel_id, auction, for_sale, is_newbie, name, &type);
+ LLSD row = self->createLandSale(parcel_id, auction, for_sale, name, &type);
content["type"] = type;
content["name"] = name;
@@ -1065,7 +1062,7 @@ void LLPanelDirBrowser::addClassified(LLCtrlListInterface *list, const LLUUID& p
list->addElement(row);
}
-LLSD LLPanelDirBrowser::createLandSale(const LLUUID& parcel_id, BOOL is_auction, BOOL is_for_sale, BOOL is_newbie, const LLString& name, S32 *type)
+LLSD LLPanelDirBrowser::createLandSale(const LLUUID& parcel_id, BOOL is_auction, BOOL is_for_sale, const LLString& name, S32 *type)
{
LLSD row;
row["id"] = parcel_id;
@@ -1083,24 +1080,12 @@ LLSD LLPanelDirBrowser::createLandSale(const LLUUID& parcel_id, BOOL is_auction,
}
else if (is_for_sale)
{
- if(is_newbie)
- {
- image_id.set( gViewerArt.getString("icon_land_for_landless.tga") );
- row["columns"][0]["column"] = "icon";
- row["columns"][0]["type"] = "icon";
- row["columns"][0]["value"] = image_id;
-
- *type = FOR_SALE_CODE;
- }
- else
- {
- image_id.set( gViewerArt.getString("icon_for_sale.tga") );
- row["columns"][0]["column"] = "icon";
- row["columns"][0]["type"] = "icon";
- row["columns"][0]["value"] = image_id;
+ image_id.set( gViewerArt.getString("icon_for_sale.tga") );
+ row["columns"][0]["column"] = "icon";
+ row["columns"][0]["type"] = "icon";
+ row["columns"][0]["value"] = image_id;
- *type = FOR_SALE_CODE;
- }
+ *type = FOR_SALE_CODE;
}
else
{
diff --git a/linden/indra/newview/llpaneldirbrowser.h b/linden/indra/newview/llpaneldirbrowser.h
index 1d9ff06..bd0f309 100644
--- a/linden/indra/newview/llpaneldirbrowser.h
+++ b/linden/indra/newview/llpaneldirbrowser.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -119,7 +120,7 @@ protected:
void updateResultCount();
void addClassified(LLCtrlListInterface *list, const LLUUID& classified_id, const char* name, const U32 creation_date, const S32 price_for_listing);
- LLSD createLandSale(const LLUUID& parcel_id, BOOL is_auction, BOOL is_for_sale, BOOL is_newbie, const LLString& name, S32 *type);
+ LLSD createLandSale(const LLUUID& parcel_id, BOOL is_auction, BOOL is_for_sale, const LLString& name, S32 *type);
static void onKeystrokeName(LLLineEditor* line, void* data);
diff --git a/linden/indra/newview/llpaneldirclassified.cpp b/linden/indra/newview/llpaneldirclassified.cpp
index f2b8d2d..8b4a49d 100644
--- a/linden/indra/newview/llpaneldirclassified.cpp
+++ b/linden/indra/newview/llpaneldirclassified.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpaneldirclassified.h b/linden/indra/newview/llpaneldirclassified.h
index b273903..f8f3c76 100644
--- a/linden/indra/newview/llpaneldirclassified.h
+++ b/linden/indra/newview/llpaneldirclassified.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpaneldirevents.cpp b/linden/indra/newview/llpaneldirevents.cpp
index f3cd2ce..f60c113 100644
--- a/linden/indra/newview/llpaneldirevents.cpp
+++ b/linden/indra/newview/llpaneldirevents.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -61,10 +62,6 @@ BOOL LLPanelDirEvents::postBuild()
{
LLPanelDirBrowser::postBuild();
- // *HACK: Deal with PST vs. PDT
- LLString buffer = llformat("Time (%s)", (gPacificDaylightTime ? "PDT" : "PST"));
- childSetValue("desc_btn", buffer);
-
childSetCommitCallback("date_mode", onDateModeCallback, this);
childSetAction("<<", onBackBtn, this);
diff --git a/linden/indra/newview/llpaneldirevents.h b/linden/indra/newview/llpaneldirevents.h
index 6a9c24d..d962c5f 100644
--- a/linden/indra/newview/llpaneldirevents.h
+++ b/linden/indra/newview/llpaneldirevents.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpaneldirfind.cpp b/linden/indra/newview/llpaneldirfind.cpp
index 433cb76..38669f8 100644
--- a/linden/indra/newview/llpaneldirfind.cpp
+++ b/linden/indra/newview/llpaneldirfind.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpaneldirfind.h b/linden/indra/newview/llpaneldirfind.h
index 4b7434b..d0a1247 100644
--- a/linden/indra/newview/llpaneldirfind.h
+++ b/linden/indra/newview/llpaneldirfind.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpaneldirgroups.cpp b/linden/indra/newview/llpaneldirgroups.cpp
index 794d7c8..d42cf96 100644
--- a/linden/indra/newview/llpaneldirgroups.cpp
+++ b/linden/indra/newview/llpaneldirgroups.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -30,8 +31,11 @@
#include "llpaneldirgroups.h"
// linden library includes
+#include "llagent.h"
//#include "llfontgl.h"
#include "message.h"
+#include "llqueryflags.h"
+#include "llviewercontrol.h"
// viewer project includes
@@ -60,6 +64,16 @@ LLPanelDirGroups::~LLPanelDirGroups()
// Children all cleaned up by default view destructor.
}
+// virtual
+void LLPanelDirGroups::draw()
+{
+ // You only have a choice if you are mature
+ childSetVisible("incmature", gAgent.mAccess >= SIM_ACCESS_MATURE);
+ childSetValue("incmature", gSavedSettings.getBOOL("ShowMatureGroups"));
+
+ LLPanelDirBrowser::draw();
+}
+
// virtual
void LLPanelDirGroups::performQuery()
@@ -72,7 +86,17 @@ void LLPanelDirGroups::performQuery()
setupNewSearch();
// groups
- U32 scope = 0x10;
+ U32 scope = DFQ_GROUPS;
+
+ // Check group mature filter.
+ if ( !gSavedSettings.getBOOL("ShowMatureGroups")
+ || gAgent.mAccess <= SIM_ACCESS_PG )
+ {
+ scope |= DFQ_FILTER_MATURE;
+ }
+
+ mCurrentSortColumn = "score";
+ mCurrentSortAscending = FALSE;
// send the message
sendDirFindQuery(
diff --git a/linden/indra/newview/llpaneldirgroups.h b/linden/indra/newview/llpaneldirgroups.h
index 75e6eda..e4fe6a5 100644
--- a/linden/indra/newview/llpaneldirgroups.h
+++ b/linden/indra/newview/llpaneldirgroups.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -36,6 +37,8 @@ public:
LLPanelDirGroups(const std::string& name, LLFloaterDirectory* floater);
virtual ~LLPanelDirGroups();
+ /*virtual*/ void draw();
+
/*virtual*/ BOOL postBuild();
/*virtual*/ void performQuery();
diff --git a/linden/indra/newview/llpaneldirland.cpp b/linden/indra/newview/llpaneldirland.cpp
index 9e123d9..d5883dc 100644
--- a/linden/indra/newview/llpaneldirland.cpp
+++ b/linden/indra/newview/llpaneldirland.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -55,7 +56,6 @@ static const char FIND_ALL[] = "All Types";
static const char FIND_AUCTION[] = "Auction";
static const char FIND_MAINLANDSALES[] = "Mainland Sales";
static const char FIND_ESTATESALES[] = "Estate Sales";
-static const char FIND_NEWBIE[] = "First Land";
const char PG_ONLY[] = "PG only";
const char MATURE_ONLY[] = "Mature only";
@@ -150,7 +150,6 @@ void LLPanelDirLand::performQuery()
if (FIND_AUCTION == type) search_type = ST_AUCTION;
else if(FIND_MAINLANDSALES == type) search_type = ST_MAINLAND;
else if(FIND_ESTATESALES == type) search_type = ST_ESTATE;
- else if(FIND_NEWBIE == type) search_type = ST_NEWBIE;
}
U32 query_flags = 0x0;
diff --git a/linden/indra/newview/llpaneldirland.h b/linden/indra/newview/llpaneldirland.h
index c091700..93dbee1 100644
--- a/linden/indra/newview/llpaneldirland.h
+++ b/linden/indra/newview/llpaneldirland.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpaneldirpeople.cpp b/linden/indra/newview/llpaneldirpeople.cpp
index 1fe1570..ba94ea9 100644
--- a/linden/indra/newview/llpaneldirpeople.cpp
+++ b/linden/indra/newview/llpaneldirpeople.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpaneldirpeople.h b/linden/indra/newview/llpaneldirpeople.h
index a9e42fe..ee8ea19 100644
--- a/linden/indra/newview/llpaneldirpeople.h
+++ b/linden/indra/newview/llpaneldirpeople.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpaneldirplaces.cpp b/linden/indra/newview/llpaneldirplaces.cpp
index 0082eea..1a9a61f 100644
--- a/linden/indra/newview/llpaneldirplaces.cpp
+++ b/linden/indra/newview/llpaneldirplaces.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -137,7 +138,7 @@ void LLPanelDirPlaces::queryCore(const LLString& name,
if (pg_only)
{
- flags |= DFQ_PG_SIMS_ONLY;
+ flags |= DFQ_PG_PARCELS_ONLY;
}
// JC: Sorting by dwell severely impacts the performance of the query.
diff --git a/linden/indra/newview/llpaneldirplaces.h b/linden/indra/newview/llpaneldirplaces.h
index ac9b31f..d8a0e4e 100644
--- a/linden/indra/newview/llpaneldirplaces.h
+++ b/linden/indra/newview/llpaneldirplaces.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpaneldirpopular.cpp b/linden/indra/newview/llpaneldirpopular.cpp
index 24f87e4..5577ca0 100644
--- a/linden/indra/newview/llpaneldirpopular.cpp
+++ b/linden/indra/newview/llpaneldirpopular.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpaneldirpopular.h b/linden/indra/newview/llpaneldirpopular.h
index 17eb7e4..1d70f8a 100644
--- a/linden/indra/newview/llpaneldirpopular.h
+++ b/linden/indra/newview/llpaneldirpopular.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpaneldisplay.cpp b/linden/indra/newview/llpaneldisplay.cpp
index a8611b1..d22d1c2 100644
--- a/linden/indra/newview/llpaneldisplay.cpp
+++ b/linden/indra/newview/llpaneldisplay.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -66,6 +67,7 @@
#include "pipeline.h"
#include "llvieweruictrlfactory.h"
#include "llfeaturemanager.h"
+#include "llglslshader.h"
//RN temporary includes for resolution switching
#include "llglheaders.h"
@@ -394,11 +396,11 @@ void LLPanelDisplay::onCommitAutoDetectAspect(LLUICtrl *ctrl, void *data)
if (numerator != 0)
{
- snprintf(aspect, sizeof(aspect), "%d:%d", numerator, denominator); /*Flawfinder: ignore*/
+ snprintf(aspect, sizeof(aspect), "%d:%d", numerator, denominator); /* Flawfinder: ignore */
}
else
{
- snprintf(aspect, sizeof(aspect), "%.3f", gViewerWindow->mWindow->getNativeAspectRatio()); /*Flawfinder: ignore*/
+ snprintf(aspect, sizeof(aspect), "%.3f", gViewerWindow->mWindow->getNativeAspectRatio()); /* Flawfinder: ignore */
}
panel->mCtrlAspectRatio->setLabel(aspect);
@@ -454,6 +456,7 @@ BOOL LLPanelDisplay2::postBuild()
requires("fog", WIDGET_TYPE_SPINNER);
requires("particles", WIDGET_TYPE_SPINNER);
requires("comp limit", WIDGET_TYPE_SPINNER);
+ requires("debug beacon line width", WIDGET_TYPE_SPINNER);
if (!checkRequirements())
{
@@ -486,6 +489,7 @@ void LLPanelDisplay2::refresh()
mFogRatio = gSavedSettings.getF32("RenderFogRatio");
mParticleCount = gSavedSettings.getS32("RenderMaxPartCount");
mCompositeLimit = gSavedSettings.getS32("AvatarCompositeLimit");
+ mDebugBeaconLineWidth = gSavedSettings.getS32("DebugBeaconLineWidth");
refreshEnabledState();
}
@@ -532,6 +536,7 @@ void LLPanelDisplay2::cancel()
gSavedSettings.setF32("RenderFogRatio", mFogRatio);
gSavedSettings.setS32("RenderMaxPartCount", mParticleCount);
gSavedSettings.setS32("AvatarCompositeLimit", mCompositeLimit);
+ gSavedSettings.setS32("DebugBeaconLineWidth", mDebugBeaconLineWidth);
}
//============================================================================
@@ -546,6 +551,7 @@ BOOL LLPanelDisplay3::postBuild()
requires("bumpshiny", WIDGET_TYPE_CHECKBOX);
requires("ripple", WIDGET_TYPE_CHECKBOX);
requires("avatarvp", WIDGET_TYPE_CHECKBOX);
+ requires("shaders", WIDGET_TYPE_CHECKBOX);
requires("Avatar Appearance", WIDGET_TYPE_RADIO_GROUP);
requires("lighting detail radio", WIDGET_TYPE_RADIO_GROUP);
@@ -587,6 +593,13 @@ BOOL LLPanelDisplay3::postBuild()
// radio set for terrain detail mode
mRadioTerrainDetail = LLUICtrlFactory::getRadioGroupByName(this, "terrain detail radio");
+ //----------------------------------------------------------------------------
+ // Global Shader Enable
+ mCtrlShaderEnable = LLUICtrlFactory::getCheckBoxByName(this, "shaders");
+ mCtrlShaderEnable->setCommitCallback(&LLPanelDisplay3::onVertexShaderEnable);
+ mCtrlShaderEnable->setCallbackUserData(this);
+
+
//============================================================================
// Object detail slider
@@ -618,6 +631,7 @@ void LLPanelDisplay3::refresh()
mBumpShiny = gSavedSettings.getBOOL("RenderObjectBump");
mRippleWater = gSavedSettings.getBOOL("RenderRippleWater");
mAvatarVP = gSavedSettings.getBOOL("RenderAvatarVP");
+ mShaderEnable = gSavedSettings.getBOOL("VertexShaderEnable");
mAvatarMode = gSavedSettings.getS32("RenderAvatarMode");
mLightingDetail = gSavedSettings.getS32("RenderLightingDetail");
mTerrainDetail = gSavedSettings.getS32("RenderTerrainDetail");
@@ -632,32 +646,28 @@ void LLPanelDisplay3::refresh()
void LLPanelDisplay3::refreshEnabledState()
{
// Ripple Water
- if (gPipeline.getMaxVertexShaderLevel(LLPipeline::SHADER_ENVIRONMENT) < 2)
- {
- mCtrlRippleWater->setEnabled(FALSE);
- }
+ bool ripple = (LLShaderMgr::getMaxVertexShaderLevel(LLShaderMgr::SHADER_ENVIRONMENT) >= 2);
+ mCtrlRippleWater->setEnabled(ripple ? TRUE : FALSE);
+
// Avatar Mode
- S32 max_avatar_shader = gPipeline.getMaxVertexShaderLevel(LLPipeline::SHADER_AVATAR);
- if (max_avatar_shader == 0)
- {
- mCtrlAvatarVP->setEnabled(FALSE);
- }
- else
- {
- mCtrlAvatarVP->setEnabled(TRUE);
- }
+ S32 max_avatar_shader = LLShaderMgr::getMaxVertexShaderLevel(LLShaderMgr::SHADER_AVATAR);
+ mCtrlAvatarVP->setEnabled((max_avatar_shader > 0) ? TRUE : FALSE);
if (gSavedSettings.getBOOL("RenderAvatarVP") == FALSE)
{
max_avatar_shader = 1;
}
-
max_avatar_shader = llmax(max_avatar_shader, 1);
-
for (S32 i = 0; i < mCtrlAvatarMode->getItemCount(); i++)
{
mCtrlAvatarMode->setIndexEnabled(i, i < max_avatar_shader);
}
+ if (mCtrlAvatarMode->getSelectedIndex() >= max_avatar_shader)
+ {
+ mCtrlAvatarMode->setSelectedIndex(llmax(max_avatar_shader-1,0));
+ }
+ // Vertex Shaders
+ mCtrlShaderEnable->setEnabled(gPipeline.canUseVertexShaders());
}
void LLPanelDisplay3::apply()
diff --git a/linden/indra/newview/llpaneldisplay.h b/linden/indra/newview/llpaneldisplay.h
index 305b290..b4db723 100644
--- a/linden/indra/newview/llpaneldisplay.h
+++ b/linden/indra/newview/llpaneldisplay.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -100,6 +101,7 @@ protected:
F32 mFogRatio;
S32 mParticleCount;
S32 mCompositeLimit;
+ S32 mDebugBeaconLineWidth;
};
@@ -123,6 +125,7 @@ protected:
LLCheckBoxCtrl *mCtrlBumpShiny;
LLCheckBoxCtrl *mCtrlRippleWater;
LLCheckBoxCtrl *mCtrlAvatarVP;
+ LLCheckBoxCtrl *mCtrlShaderEnable;
LLRadioGroup *mCtrlAvatarMode;
LLRadioGroup *mRadioLightingDetail2;
@@ -136,6 +139,7 @@ protected:
BOOL mBumpShiny;
BOOL mRippleWater;
BOOL mAvatarVP;
+ BOOL mShaderEnable;
S32 mAvatarMode;
S32 mLightingDetail;
S32 mTerrainDetail;
diff --git a/linden/indra/newview/llpanelevent.cpp b/linden/indra/newview/llpanelevent.cpp
index 9478ea2..1f2fb37 100644
--- a/linden/indra/newview/llpanelevent.cpp
+++ b/linden/indra/newview/llpanelevent.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -50,17 +51,17 @@
#include "llvieweruictrlfactory.h"
//static
-LLLinkedList LLPanelEvent::sAllPanels;
+std::list LLPanelEvent::sAllPanels;
LLPanelEvent::LLPanelEvent() : LLPanel("Event Panel")
{
- sAllPanels.addData(this);
+ sAllPanels.push_back(this);
}
LLPanelEvent::~LLPanelEvent()
{
- sAllPanels.removeData(this);
+ sAllPanels.remove(this);
}
@@ -156,11 +157,9 @@ void LLPanelEvent::processEventInfoReply(LLMessageSystem *msg, void **)
msg->getU32("EventData", "EventID", event_id);
// look up all panels which have this avatar
- LLPanelEvent *self = NULL;
-
-
- for (self = sAllPanels.getFirstData(); self; self = sAllPanels.getNextData())
+ for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter)
{
+ LLPanelEvent* self = *iter;
// Skip updating panels which aren't for this event
if (self->mEventID != event_id)
{
@@ -174,7 +173,7 @@ void LLPanelEvent::processEventInfoReply(LLMessageSystem *msg, void **)
self->mTBDate->setText(self->mEventInfo.mTimeStr);
self->mTBDesc->setText(self->mEventInfo.mDesc);
- snprintf(buffer, sizeof(buffer), "%d:%.2d", self->mEventInfo.mDuration / 60, self->mEventInfo.mDuration % 60); /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), "%d:%.2d", self->mEventInfo.mDuration / 60, self->mEventInfo.mDuration % 60); /* Flawfinder: ignore */
self->mTBDuration->setText(buffer);
@@ -184,7 +183,7 @@ void LLPanelEvent::processEventInfoReply(LLMessageSystem *msg, void **)
}
else
{
- snprintf(buffer, sizeof(buffer), "%d", self->mEventInfo.mCover); /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), "%d", self->mEventInfo.mCover); /* Flawfinder: ignore */
self->mTBCover->setText(buffer);
}
@@ -195,7 +194,7 @@ void LLPanelEvent::processEventInfoReply(LLMessageSystem *msg, void **)
S32 region_y = llround(global_y) % REGION_WIDTH_UNITS;
S32 region_z = llround((F32)self->mEventInfo.mPosGlobal.mdV[VZ]);
- snprintf(buffer, sizeof(buffer), "%s (%d, %d, %d)", self->mEventInfo.mSimName.c_str(), region_x, region_y, region_z); /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), "%s (%d, %d, %d)", self->mEventInfo.mSimName.c_str(), region_x, region_y, region_z); /* Flawfinder: ignore */
self->mTBLocation->setText(buffer);
if (self->mEventInfo.mEventFlags & EVENT_FLAG_MATURE)
diff --git a/linden/indra/newview/llpanelevent.h b/linden/indra/newview/llpanelevent.h
index dce6a2f..5f92483 100644
--- a/linden/indra/newview/llpanelevent.h
+++ b/linden/indra/newview/llpanelevent.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -87,7 +88,8 @@ protected:
LLButton* mCreateEventBtn;
LLButton* mNotifyBtn;
- static LLLinkedList sAllPanels;
+ typedef std::list panel_list_t;
+ static panel_list_t sAllPanels;
};
#endif // LL_LLPANELEVENT_H
diff --git a/linden/indra/newview/llpanelface.cpp b/linden/indra/newview/llpanelface.cpp
index c69d765..8f24c55 100644
--- a/linden/indra/newview/llpanelface.cpp
+++ b/linden/indra/newview/llpanelface.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelface.h b/linden/indra/newview/llpanelface.h
index c68e996..b41d0e5 100644
--- a/linden/indra/newview/llpanelface.h
+++ b/linden/indra/newview/llpanelface.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelgeneral.cpp b/linden/indra/newview/llpanelgeneral.cpp
index 5db0ee3..900598a 100644
--- a/linden/indra/newview/llpanelgeneral.cpp
+++ b/linden/indra/newview/llpanelgeneral.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelgeneral.h b/linden/indra/newview/llpanelgeneral.h
index f9ee53f..9f70560 100644
--- a/linden/indra/newview/llpanelgeneral.h
+++ b/linden/indra/newview/llpanelgeneral.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelgroup.cpp b/linden/indra/newview/llpanelgroup.cpp
index ce7c67a..6710c43 100644
--- a/linden/indra/newview/llpanelgroup.cpp
+++ b/linden/indra/newview/llpanelgroup.cpp
@@ -3,6 +3,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelgroup.h b/linden/indra/newview/llpanelgroup.h
index d17c200..782f28a 100644
--- a/linden/indra/newview/llpanelgroup.h
+++ b/linden/indra/newview/llpanelgroup.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelgroupgeneral.cpp b/linden/indra/newview/llpanelgroupgeneral.cpp
index e99f341..67a0c31 100644
--- a/linden/indra/newview/llpanelgroupgeneral.cpp
+++ b/linden/indra/newview/llpanelgroupgeneral.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -165,6 +166,7 @@ BOOL LLPanelGroupGeneral::postBuild()
{
mCtrlMature->setCommitCallback(onCommitAny);
mCtrlMature->setCallbackUserData(this);
+ mCtrlMature->setVisible( gAgent.mAccess > SIM_ACCESS_PG );
}
mCtrlOpenEnrollment = (LLCheckBoxCtrl*) getChildByName("open_enrollement", recurse);
@@ -466,7 +468,17 @@ bool LLPanelGroupGeneral::apply(LLString& mesg)
if (mCtrlPublishOnWeb) gdatap->mAllowPublish = mCtrlPublishOnWeb->get();
if (mEditCharter) gdatap->mCharter = mEditCharter->getText();
if (mInsignia) gdatap->mInsigniaID = mInsignia->getImageAssetID();
- if (mCtrlMature) gdatap->mMaturePublish = mCtrlMature->get();
+ if (mCtrlMature)
+ {
+ if (gAgent.mAccess > SIM_ACCESS_PG)
+ {
+ gdatap->mMaturePublish = mCtrlMature->get();
+ }
+ else
+ {
+ gdatap->mMaturePublish = FALSE;
+ }
+ }
if (mCtrlShowInGroupList) gdatap->mShowInList = mCtrlShowInGroupList->get();
}
@@ -617,6 +629,7 @@ void LLPanelGroupGeneral::update(LLGroupChange gc)
{
mCtrlMature->set(gdatap->mMaturePublish);
mCtrlMature->setEnabled(mAllowEdit && can_change_ident);
+ mCtrlMature->setVisible( gAgent.mAccess > SIM_ACCESS_PG );
}
if (mCtrlOpenEnrollment)
{
@@ -646,7 +659,7 @@ void LLPanelGroupGeneral::update(LLGroupChange gc)
if ( visible )
{
- snprintf(fee_buff, sizeof(fee_buff), "Join (L$%d)", gdatap->mMembershipFee); /*Flawfinder: ignore*/
+ snprintf(fee_buff, sizeof(fee_buff), "Join (L$%d)", gdatap->mMembershipFee); /* Flawfinder: ignore */
mBtnJoinGroup->setLabelSelected(std::string(fee_buff));
mBtnJoinGroup->setLabelUnselected(std::string(fee_buff));
}
@@ -702,12 +715,14 @@ void LLPanelGroupGeneral::update(LLGroupChange gc)
}
else
{
- LLScrollListItem* row = new LLScrollListItem( TRUE, NULL, LLUUID::null );
std::stringstream pending;
pending << "Retrieving member list (" << gdatap->mMembers.size() << "\\" << gdatap->mMemberCount << ")";
- row->addColumn(pending.str(), LLFontGL::sSansSerif);
+
+ LLSD row;
+ row["columns"][0]["value"] = pending.str();
+
mListVisibleMembers->setEnabled(FALSE);
- mListVisibleMembers->addItem(row);
+ mListVisibleMembers->addElement(row);
}
}
}
diff --git a/linden/indra/newview/llpanelgroupgeneral.h b/linden/indra/newview/llpanelgroupgeneral.h
index 2bd1100..22990a9 100644
--- a/linden/indra/newview/llpanelgroupgeneral.h
+++ b/linden/indra/newview/llpanelgroupgeneral.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelgroupinvite.cpp b/linden/indra/newview/llpanelgroupinvite.cpp
index bc0d8d1..7e5429f 100644
--- a/linden/indra/newview/llpanelgroupinvite.cpp
+++ b/linden/indra/newview/llpanelgroupinvite.cpp
@@ -3,6 +3,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -118,11 +119,11 @@ void LLPanelGroupInvite::impl::addUsers(const std::vector& names,
}
//add the name to the names list
- const BOOL enabled = TRUE;
- LLScrollListItem* row = new LLScrollListItem(
- enabled, NULL, id);
- row->addColumn(name.c_str(), LLFontGL::sSansSerif);
- mInvitees->addItem(row);
+ LLSD row;
+ row["id"] = id;
+ row["columns"][0]["value"] = name;
+
+ mInvitees->addElement(row);
}
}
diff --git a/linden/indra/newview/llpanelgroupinvite.h b/linden/indra/newview/llpanelgroupinvite.h
index ff4ce62..260b091 100644
--- a/linden/indra/newview/llpanelgroupinvite.h
+++ b/linden/indra/newview/llpanelgroupinvite.h
@@ -3,6 +3,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelgrouplandmoney.cpp b/linden/indra/newview/llpanelgrouplandmoney.cpp
index 21f4d4b..02aaec4 100644
--- a/linden/indra/newview/llpanelgrouplandmoney.cpp
+++ b/linden/indra/newview/llpanelgrouplandmoney.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -242,7 +243,7 @@ void LLPanelGroupLandMoney::impl::setYourMaxContributionTextBox(int max)
char buffer[MAX_STRING]; /*Flawfinder: ignore*/
buffer[0] = '\0';
- snprintf(buffer, sizeof(buffer), "(%d max)", max); /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), "(%d max)", max); /* Flawfinder: ignore */
if ( mYourContributionMaxTextp )
{
mYourContributionMaxTextp->setText(buffer);
@@ -308,14 +309,14 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg)
S32 total_contribution;
msg->getS32("QueryData", "ActualArea", total_contribution, 0);
char buffer[MAX_STRING]; /*Flawfinder: ignore*/
- snprintf(buffer, sizeof(buffer), "%d sq. meters", total_contribution); /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), "%d sq. meters", total_contribution); /* Flawfinder: ignore */
mTotalContributedLandp->setText(buffer);
S32 committed;
msg->getS32("QueryData", "BillableArea", committed, 0);
- snprintf(buffer, sizeof(buffer), "%d sq. meters", committed); /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), "%d sq. meters", committed); /* Flawfinder: ignore */
mTotalLandInUsep->setText(buffer);
S32 available = total_contribution - committed;
- snprintf(buffer, sizeof(buffer), "%d sq. meters", available); /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), "%d sq. meters", available); /* Flawfinder: ignore */
mLandAvailablep->setText(buffer);
buffer[0] = '\0';
if ( mGroupOverLimitTextp && mGroupOverLimitIconp )
@@ -359,18 +360,18 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg)
S32 region_x = llround(global_x) % REGION_WIDTH_UNITS;
S32 region_y = llround(global_y) % REGION_WIDTH_UNITS;
char location[MAX_STRING]; /*Flawfinder: ignore*/
- snprintf(location, MAX_STRING, "%s (%d, %d)", sim_name, region_x, region_y); /*Flawfinder: ignore*/
+ snprintf(location, MAX_STRING, "%s (%d, %d)", sim_name, region_x, region_y); /* Flawfinder: ignore */
char area[MAX_STRING]; /*Flawfinder: ignore*/
if(billable_area == actual_area)
{
- snprintf(area, MAX_STRING, "%d", billable_area); /*Flawfinder: ignore*/
+ snprintf(area, MAX_STRING, "%d", billable_area); /* Flawfinder: ignore */
}
else
{
- snprintf(area, MAX_STRING, "%d / %d", billable_area, actual_area); /*Flawfinder: ignore*/
+ snprintf(area, MAX_STRING, "%d / %d", billable_area, actual_area); /* Flawfinder: ignore */
}
char hidden[MAX_STRING]; /*Flawfinder: ignore*/
- snprintf(hidden, MAX_STRING, "%f %f", global_x, global_y); /*Flawfinder: ignore*/
+ snprintf(hidden, MAX_STRING, "%f %f", global_x, global_y); /* Flawfinder: ignore */
LLSD row;
@@ -996,7 +997,7 @@ void LLGroupMoneyDetailsTabEventHandler::processReply(LLMessageSystem* msg,
return;
}
- snprintf(line, MAX_STRING, "%s\n\n", start_date); /*Flawfinder: ignore*/
+ snprintf(line, MAX_STRING, "%s\n\n", start_date); /* Flawfinder: ignore */
text.append(line);
S32 total_amount = 0;
@@ -1011,7 +1012,7 @@ void LLGroupMoneyDetailsTabEventHandler::processReply(LLMessageSystem* msg,
if (amount != 0)
{
- snprintf(line, MAX_STRING, "%-24s %6d\n", desc, amount ); /*Flawfinder: ignore*/
+ snprintf(line, MAX_STRING, "%-24s %6d\n", desc, amount ); /* Flawfinder: ignore */
text.append(line);
}
else
@@ -1024,7 +1025,7 @@ void LLGroupMoneyDetailsTabEventHandler::processReply(LLMessageSystem* msg,
text.append(1, '\n');
- snprintf(line, MAX_STRING, "%-24s %6d\n", "Total", total_amount ); /*Flawfinder: ignore*/
+ snprintf(line, MAX_STRING, "%-24s %6d\n", "Total", total_amount ); /* Flawfinder: ignore */
text.append(line);
if ( mImplementationp->mTextEditorp )
@@ -1141,7 +1142,7 @@ void LLGroupMoneySalesTabEventHandler::processReply(LLMessageSystem* msg,
{
text.clear();
- snprintf(line, MAX_STRING, "%s\n\n", start_date); /*Flawfinder: ignore*/
+ snprintf(line, MAX_STRING, "%s\n\n", start_date); /* Flawfinder: ignore */
text.append(line);
}
@@ -1196,7 +1197,7 @@ void LLGroupMoneySalesTabEventHandler::processReply(LLMessageSystem* msg,
break;
}
- snprintf(line, sizeof(line), "%s %6d - %s %s %s\n", time, amount, user, verb, item); /*Flawfinder: ignore*/
+ snprintf(line, sizeof(line), "%s %6d - %s %s %s\n", time, amount, user, verb, item); /* Flawfinder: ignore */
text.append(line);
}
}
@@ -1349,26 +1350,26 @@ void LLGroupMoneyPlanningTabEventHandler::processReply(LLMessageSystem* msg,
return;
}
- snprintf(line, MAX_STRING, "Summary for this week, beginning on %s\n", start_date); /*Flawfinder: ignore*/
+ snprintf(line, MAX_STRING, "Summary for this week, beginning on %s\n", start_date); /* Flawfinder: ignore */
text.append(line);
if (current_interval == 0)
{
- snprintf(line, MAX_STRING, "The next stipend day is %s\n\n", next_stipend_date); /*Flawfinder: ignore*/
+ snprintf(line, MAX_STRING, "The next stipend day is %s\n\n", next_stipend_date); /* Flawfinder: ignore */
text.append(line);
- snprintf(line, MAX_STRING, "%-24sL$%6d\n", "Balance", balance ); /*Flawfinder: ignore*/
+ snprintf(line, MAX_STRING, "%-24sL$%6d\n", "Balance", balance ); /* Flawfinder: ignore */
text.append(line);
text.append(1, '\n');
}
- snprintf(line, MAX_STRING, " Group Individual Share\n"); /*Flawfinder: ignore*/
+ snprintf(line, MAX_STRING, " Group Individual Share\n"); /* Flawfinder: ignore */
text.append(line);
- snprintf(line, MAX_STRING, "%-24s %6d %6d \n", "Credits", total_credits, (S32)floor((F32)total_credits/(F32)non_exempt_members)); /*Flawfinder: ignore*/
+ snprintf(line, MAX_STRING, "%-24s %6d %6d \n", "Credits", total_credits, (S32)floor((F32)total_credits/(F32)non_exempt_members)); /* Flawfinder: ignore */
text.append(line);
- snprintf(line, MAX_STRING, "%-24s %6d %6d \n", "Debits", total_debits, (S32)floor((F32)total_debits/(F32)non_exempt_members)); /*Flawfinder: ignore*/
+ snprintf(line, MAX_STRING, "%-24s %6d %6d \n", "Debits", total_debits, (S32)floor((F32)total_debits/(F32)non_exempt_members)); /* Flawfinder: ignore */
text.append(line);
- snprintf(line, MAX_STRING, "%-24s %6d %6d \n", "Total", total_credits + total_debits, (S32)floor((F32)(total_credits + total_debits)/(F32)non_exempt_members)); /*Flawfinder: ignore*/
+ snprintf(line, MAX_STRING, "%-24s %6d %6d \n", "Total", total_credits + total_debits, (S32)floor((F32)(total_credits + total_debits)/(F32)non_exempt_members)); /* Flawfinder: ignore */
text.append(line);
if ( mImplementationp->mTextEditorp )
diff --git a/linden/indra/newview/llpanelgrouplandmoney.h b/linden/indra/newview/llpanelgrouplandmoney.h
index c2d860e..6cd4753 100644
--- a/linden/indra/newview/llpanelgrouplandmoney.h
+++ b/linden/indra/newview/llpanelgrouplandmoney.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelgroupnotices.cpp b/linden/indra/newview/llpanelgroupnotices.cpp
index 2a7cdf5..373f3f2 100644
--- a/linden/indra/newview/llpanelgroupnotices.cpp
+++ b/linden/indra/newview/llpanelgroupnotices.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -323,9 +324,16 @@ void LLPanelGroupNotices::setItem(LLPointer inv_item)
{
mInventoryItem = inv_item;
+ BOOL item_is_multi = FALSE;
+ if ( inv_item->getFlags() & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS )
+ {
+ item_is_multi = TRUE;
+ };
+
LLViewerImage* item_icon = get_item_icon(inv_item->getType(),
inv_item->getInventoryType(),
- inv_item->getFlags());
+ inv_item->getFlags(),
+ item_is_multi );
mCreateInventoryIcon->setImage(item_icon->getID());
mCreateInventoryIcon->setVisible(TRUE);
@@ -482,7 +490,7 @@ void LLPanelGroupNotices::processNotices(LLMessageSystem* msg)
{
LLUUID icon_id = get_item_icon_uuid(
(LLAssetType::EType)asset_type,
- LLInventoryType::IT_NONE,FALSE);
+ LLInventoryType::IT_NONE,FALSE, FALSE);
row["columns"][0]["type"] = "icon";
row["columns"][0]["value"] = icon_id;
}
@@ -498,7 +506,7 @@ void LLPanelGroupNotices::processNotices(LLMessageSystem* msg)
row["columns"][3]["column"] = "date";
row["columns"][3]["value"] = buffer;
- snprintf(buffer, 30, "%u", timestamp); /*Flawfinder: ignore*/
+ snprintf(buffer, 30, "%u", timestamp); /* Flawfinder: ignore */
row["columns"][4]["column"] = "sort";
row["columns"][4]["value"] = buffer;
@@ -550,7 +558,7 @@ void LLPanelGroupNotices::showNotice(const char* subject,
LLViewerImage* item_icon = get_item_icon(mInventoryOffer->mType,
LLInventoryType::IT_TEXTURE,
- 0);
+ 0, FALSE);
mViewInventoryIcon->setImage(item_icon->getID());
mViewInventoryIcon->setVisible(TRUE);
diff --git a/linden/indra/newview/llpanelgroupnotices.h b/linden/indra/newview/llpanelgroupnotices.h
index 194b2b7..ba520e0 100644
--- a/linden/indra/newview/llpanelgroupnotices.h
+++ b/linden/indra/newview/llpanelgroupnotices.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelgrouproles.cpp b/linden/indra/newview/llpanelgrouproles.cpp
index 59ac556..266ff12 100644
--- a/linden/indra/newview/llpanelgrouproles.cpp
+++ b/linden/indra/newview/llpanelgrouproles.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelgrouproles.h b/linden/indra/newview/llpanelgrouproles.h
index fda3d40..c3934c6 100644
--- a/linden/indra/newview/llpanelgrouproles.h
+++ b/linden/indra/newview/llpanelgrouproles.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelgroupvoting.cpp b/linden/indra/newview/llpanelgroupvoting.cpp
index ebe99b1..eca188e 100644
--- a/linden/indra/newview/llpanelgroupvoting.cpp
+++ b/linden/indra/newview/llpanelgroupvoting.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -76,16 +77,14 @@ public:
void setEnableHistoryList();
void updateQuorumText();
- void addPendingActiveScrollListItem(LLFontGL* font,
- unsigned int current,
+ void addPendingActiveScrollListItem(unsigned int current,
unsigned int expected,
EAddPosition pos);
- void addPendingHistoryScrollListItem(LLFontGL* font,
- unsigned int current,
+ void addPendingHistoryScrollListItem(unsigned int current,
unsigned int expected,
EAddPosition pos);
- void addNoActiveScrollListItem(LLFontGL* font, EAddPosition pos);
- void addNoHistoryScrollListItem(LLFontGL* font, EAddPosition pos);
+ void addNoActiveScrollListItem(EAddPosition pos);
+ void addNoHistoryScrollListItem(EAddPosition pos);
static void processGroupActiveProposalItemReply(LLMessageSystem* msg,
@@ -139,8 +138,8 @@ public:
int mNumGroupMembers;
- std::vector mActiveReceived;
- std::vector mHistoryReceived;
+ std::vector mActiveReceived;
+ std::vector mHistoryReceived;
int mProposalColumnWidths[10];
int mHistoryColumnWidths[10];
@@ -331,7 +330,7 @@ void LLPanelGroupVoting::impl::setEnableVoteProposal()
if (already_voted == "Yes")
{
char message[MAX_STRING]; /*Flawfinder: ignore*/
- snprintf(message, MAX_STRING, "You have voted: %s ", vote_cast.c_str()); /*Flawfinder: ignore*/
+ snprintf(message, MAX_STRING, "You have voted: %s ", vote_cast.c_str()); /* Flawfinder: ignore */
mInstructions->setText(message);
mBtnYes->setEnabled(FALSE);
@@ -523,8 +522,7 @@ void LLPanelGroupVoting::impl::sendGroupProposalsRequest(const LLUUID& group_id)
//fill in some text so the user will at least know that
//we're pining the server in high latency situations
- LLFontGL* font = LLFontGL::sSansSerifSmall;
- addPendingActiveScrollListItem(font, 0, 0, ADD_BOTTOM);
+ addPendingActiveScrollListItem(0, 0, ADD_BOTTOM);
mProposals->setCanSelect(FALSE);
LLMessageSystem *msg = gMessageSystem;
@@ -620,8 +618,7 @@ void LLPanelGroupVoting::impl::sendGroupVoteHistoryRequest(const LLUUID& group_i
mHistoryReceived.clear();
//add some text so the user knows we're doing something
- LLFontGL* font = LLFontGL::sSansSerifSmall;
- addPendingHistoryScrollListItem(font, 0, 0, ADD_BOTTOM);
+ addPendingHistoryScrollListItem(0, 0, ADD_BOTTOM);
mVotesHistory->setCanSelect(FALSE);
LLMessageSystem *msg = gMessageSystem;
@@ -642,65 +639,58 @@ void LLPanelGroupVoting::impl::updateQuorumText()
{
//update the quorum count
char quorum_text[MAX_STRING]; /*Flawfinder: ignore*/
- snprintf(quorum_text, MAX_STRING, /*Flawfinder: ignore*/
+ snprintf(quorum_text, MAX_STRING, /* Flawfinder: ignore */
" out of %d members must vote",
mNumGroupMembers);
mQuorumText->setText(quorum_text);
}
}
-void LLPanelGroupVoting::impl::addPendingActiveScrollListItem(LLFontGL* font,
- unsigned int current,
+void LLPanelGroupVoting::impl::addPendingActiveScrollListItem(unsigned int current,
unsigned int expected,
EAddPosition pos)
{
- LLScrollListItem* row = new LLScrollListItem( TRUE, NULL, LLUUID::null);
- if (!row) return;
-
std::stringstream pending;
pending << "Retrieving active proposals ("
<< current
<< "\\" << expected << ")";
- row->addColumn(pending.str(), font);
- mProposals->addItem(row, pos);
+ LLSD row;
+ row["columns"][0]["value"] = pending.str();
+ row["columns"][0]["font"] = "SANSSERIF_SMALL";
+ mProposals->addElement(row, pos);
}
-void LLPanelGroupVoting::impl::addNoActiveScrollListItem(LLFontGL* font,
- EAddPosition pos)
+void LLPanelGroupVoting::impl::addNoActiveScrollListItem(EAddPosition pos)
{
- LLScrollListItem* row = new LLScrollListItem( TRUE, NULL, LLUUID::null);
- if (!row) return;
-
- row->addColumn("There are currently no active proposals", font);
- mProposals->addItem(row, pos);
+ LLSD row;
+ row["columns"][0]["value"] = "There are currently no active proposals";
+ row["columns"][0]["font"] = "SANSSERIF_SMALL";
+ mProposals->addElement(row, pos);
}
-void LLPanelGroupVoting::impl::addNoHistoryScrollListItem(LLFontGL* font,
- EAddPosition pos)
+void LLPanelGroupVoting::impl::addNoHistoryScrollListItem(EAddPosition pos)
{
- LLScrollListItem* row = new LLScrollListItem( TRUE, NULL, LLUUID::null);
- if (!row) return;
-
- row->addColumn("There are currently no archived proposals", font);
- mVotesHistory->addItem(row, pos);
+ LLSD row;
+ row["columns"][0]["value"] = "There are currently no archived proposals";
+ row["columns"][0]["font"] = "SANSSERIF_SMALL";
+ mVotesHistory->addElement(row, pos);
}
-void LLPanelGroupVoting::impl::addPendingHistoryScrollListItem(LLFontGL* font,
- unsigned int current,
+void LLPanelGroupVoting::impl::addPendingHistoryScrollListItem(unsigned int current,
unsigned int expected,
EAddPosition pos)
{
- LLScrollListItem* row = new LLScrollListItem( TRUE, NULL, LLUUID::null);
- if (!row) return;
-
std::stringstream pending;
pending << "Retrieving archived proposals ("
<< current
<< "\\" << expected << ")";
- row->addColumn(pending.str(), font);
- mVotesHistory->addItem(row, pos);
+ LLSD row;
+ row["columns"][0]["value"] = pending.str();
+ row["columns"][0]["font"] = "SANSSERIF_SMALL";
+
+ mVotesHistory->addElement(row, pos);
}
@@ -753,7 +743,6 @@ void LLPanelGroupVoting::impl::processGroupActiveProposalItemReply(LLMessageSyst
F32 majority;
S32 quorum;
BOOL already_voted;
- LLFontGL* font = LLFontGL::sSansSerifSmall;
S32 num_proposals = msg->getNumberOfBlocksFast(_PREHASH_ProposalData);
msg->getU32Fast(_PREHASH_TransactionData,
@@ -762,7 +751,9 @@ void LLPanelGroupVoting::impl::processGroupActiveProposalItemReply(LLMessageSyst
//the first item should be indicative that we
//are currently receiving information or have it all
- self->mProposals->deleteSingleItem(0);
+ self->mProposals->deleteAllItems();
+ // make sure column indices are correct when populating with real data
+ self->mProposals->clearColumns();
for (int i = 0; i < num_proposals; i++)
{
@@ -778,23 +769,62 @@ void LLPanelGroupVoting::impl::processGroupActiveProposalItemReply(LLMessageSyst
msg->getS32Fast(_PREHASH_ProposalData, _PREHASH_Quorum, quorum, i );
vote_initiator.toString(vote_initiator_string);
- snprintf(majority_text, MAX_STRING_NUM_LEN, "%f", majority); /*Flawfinder: ignore*/
- snprintf(quorum_text, MAX_STRING_NUM_LEN, "%i", quorum); /*Flawfinder: ignore*/
+ snprintf(majority_text, MAX_STRING_NUM_LEN, "%f", majority); /* Flawfinder: ignore */
+ snprintf(quorum_text, MAX_STRING_NUM_LEN, "%i", quorum); /* Flawfinder: ignore */
- LLScrollListItem *row = new LLScrollListItem( TRUE, NULL, vote_id );
- if (!row) return;
+ LLSD row;
S32 index = 0;
-
- row->addColumn(item_num_string, font, self->mProposalColumnWidths[index++]); // Use less readable datatime for sorting...
- row->addColumn(proposal_text, font, self->mProposalColumnWidths[index++]);
- row->addColumn(end_datetime, font, self->mProposalColumnWidths[index++]);
- row->addColumn(vote_type, font, self->mProposalColumnWidths[index++]);
- row->addColumn(already_voted ? "Yes" : "No", font, self->mProposalColumnWidths[index++]);
- row->addColumn(start_datetime, font, self->mProposalColumnWidths[index++]);
- row->addColumn(vote_cast, font, self->mProposalColumnWidths[index++]);
- row->addColumn(vote_initiator_string, font, self->mProposalColumnWidths[index++]);
- row->addColumn(quorum_text, font, self->mProposalColumnWidths[index++]);
- row->addColumn(majority_text, font, self->mProposalColumnWidths[index++]);
+ row["id"] = vote_id;
+ row["columns"][0]["column"] = "item_num";
+ row["columns"][0]["value"] = item_num_string;
+ row["columns"][0]["font"] = "SANSSERIF_SMALL";
+ row["columns"][0]["width"] = self->mProposalColumnWidths[index++];
+
+ row["columns"][1]["column"] = "proposal_text";
+ row["columns"][1]["value"] = proposal_text;
+ row["columns"][1]["font"] = "SANSSERIF_SMALL";
+ row["columns"][1]["width"] = self->mProposalColumnWidths[index++];
+
+ row["columns"][2]["column"] = "end_datetime";
+ row["columns"][2]["value"] = end_datetime;
+ row["columns"][2]["font"] = "SANSSERIF_SMALL";
+ row["columns"][2]["width"] = self->mProposalColumnWidths[index++];
+
+ row["columns"][3]["column"] = "vote_type";
+ row["columns"][3]["value"] = vote_type;
+ row["columns"][3]["font"] = "SANSSERIF_SMALL";
+ row["columns"][3]["width"] = self->mProposalColumnWidths[index++];
+
+ row["columns"][4]["column"] = "already_voted";
+ row["columns"][4]["value"] = already_voted ? "Yes" : "No";
+ row["columns"][4]["font"] = "SANSSERIF_SMALL";
+ row["columns"][4]["width"] = self->mProposalColumnWidths[index++];
+
+ row["columns"][5]["column"] = "start_datetime";
+ row["columns"][5]["value"] = start_datetime;
+ row["columns"][5]["font"] = "SANSSERIF_SMALL";
+ row["columns"][5]["width"] = self->mProposalColumnWidths[index++];
+
+ row["columns"][6]["column"] = "vote_cast";
+ row["columns"][6]["value"] = vote_cast;
+ row["columns"][6]["font"] = "SANSSERIF_SMALL";
+ row["columns"][6]["width"] = self->mProposalColumnWidths[index++];
+
+ row["columns"][7]["column"] = "vote_initator_string";
+ row["columns"][7]["value"] = vote_initiator_string;
+ row["columns"][7]["font"] = "SANSSERIF_SMALL";
+ row["columns"][7]["width"] = self->mProposalColumnWidths[index++];
+
+ row["columns"][8]["column"] = "quorum_text";
+ row["columns"][8]["value"] = quorum_text;
+ row["columns"][8]["font"] = "SANSSERIF_SMALL";
+ row["columns"][8]["width"] = self->mProposalColumnWidths[index++];
+
+ row["columns"][9]["column"] = "majority_text";
+ row["columns"][9]["value"] = majority_text;
+ row["columns"][9]["font"] = "SANSSERIF_SMALL";
+ row["columns"][9]["width"] = self->mProposalColumnWidths[index++];
+
self->mActiveReceived.push_back(row);
}
@@ -803,13 +833,12 @@ void LLPanelGroupVoting::impl::processGroupActiveProposalItemReply(LLMessageSyst
{
//we are expecting 0 items, put up a message indicating tehre are
//no active proposals and make the scroll list unselectable
- self->addNoActiveScrollListItem(font, ADD_BOTTOM);
+ self->addNoActiveScrollListItem(ADD_BOTTOM);
self->mProposals->setCanSelect(FALSE);
}
else if ( (U32)received != num_expected )
{
- self->addPendingActiveScrollListItem(font,
- received,
+ self->addPendingActiveScrollListItem(received,
num_expected,
ADD_BOTTOM);
self->mProposals->setCanSelect(FALSE);
@@ -817,12 +846,12 @@ void LLPanelGroupVoting::impl::processGroupActiveProposalItemReply(LLMessageSyst
else
{
//all done display all of the items
- std::vector::iterator it = self->mActiveReceived.begin();
- std::vector::iterator end = self->mActiveReceived.end();
+ std::vector::iterator it = self->mActiveReceived.begin();
+ std::vector::iterator end = self->mActiveReceived.end();
for (; it != end; it++)
{
- self->mProposals->addItem((*it), ADD_SORTED);
+ self->mProposals->addElement((*it), ADD_SORTED);
}
self->mProposals->setCanSelect(TRUE);
@@ -832,7 +861,6 @@ void LLPanelGroupVoting::impl::processGroupActiveProposalItemReply(LLMessageSyst
//static
void LLPanelGroupVoting::impl::processGroupVoteHistoryItemReply(LLMessageSystem *msg, void**)
{
- LLFontGL *font = LLFontGL::sSansSerifSmall;
LLUUID agent_id;
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id );
if (gAgent.getID() != agent_id)
@@ -866,13 +894,15 @@ void LLPanelGroupVoting::impl::processGroupVoteHistoryItemReply(LLMessageSystem
//explaining that we are attempting to receive information
//or are currently receiving information, so we should clear out
//the first line
- self->mVotesHistory->deleteSingleItem(0);
+ self->mVotesHistory->deleteAllItems();
+ // make sure column indices are correct when populating with real data
+ self->mVotesHistory->clearColumns();
if ( num_expected == 0 )
{
//we are expecting 0 items, put up a message indicating tehre are
//no active proposals and make the scroll list unselectable
- self->addNoHistoryScrollListItem(font, ADD_BOTTOM);
+ self->addNoHistoryScrollListItem(ADD_BOTTOM);
self->mVotesHistory->setCanSelect(FALSE);
return;
@@ -911,10 +941,15 @@ void LLPanelGroupVoting::impl::processGroupVoteHistoryItemReply(LLMessageSystem
{
if (!strcmp(vote_type, "Proposal"))
{
- LLScrollListItem *row = new LLScrollListItem( TRUE, NULL, vote_id );
- if (!row) return;
- row->addColumn(item_num_string, font, self->mHistoryColumnWidths[0]);
-
+ LLSD row;
+ row["id"] = vote_id;
+
+ S32 index = 0;
+ row["columns"][0]["column"] = "item_num";
+ row["columns"][0]["value"] = item_num_string;
+ row["columns"][0]["font"] = "SANSSERIF_SMALL";
+ row["columns"][0]["width"] = self->mHistoryColumnWidths[index++];
+
vote_text.assign(proposal_text);
vote_text.append("\n\n--\n");
if (!strcmp(vote_result, "Success"))
@@ -935,7 +970,7 @@ void LLPanelGroupVoting::impl::processGroupVoteHistoryItemReply(LLMessageSystem
{
msg->getStringFast(_PREHASH_VoteItem, _PREHASH_VoteCast, DB_VOTE_RESULT_BUF_SIZE, vote_result, i);
msg->getS32Fast(_PREHASH_VoteItem, _PREHASH_NumVotes, num_votes, i);
- snprintf(result_msg, MAX_STRING, /*Flawfinder: ignore*/
+ snprintf(result_msg, MAX_STRING, /* Flawfinder: ignore */
" %s: %d\n",
vote_result,
num_votes);
@@ -947,11 +982,36 @@ void LLPanelGroupVoting::impl::processGroupVoteHistoryItemReply(LLMessageSystem
LLString vote_text_stripped = vote_text;
LLString::stripNonprintable(vote_text_stripped);
- row->addColumn(vote_text_stripped, font, self->mHistoryColumnWidths[1]);
- row->addColumn(end_datetime, font, self->mHistoryColumnWidths[2]);
- row->addColumn(vote_type, font, self->mHistoryColumnWidths[3]);
- row->addColumn(vote_result, font, self->mHistoryColumnWidths[4]);
- row->addColumn(vote_text, font, self->mHistoryColumnWidths[5]);
+ row["columns"][1]["column"] = "vote_text_stripped";
+ row["columns"][1]["value"] = vote_text_stripped;
+ row["columns"][1]["font"] = "SANSSERIF_SMALL";
+ row["columns"][1]["width"] = self->mHistoryColumnWidths[index++];
+
+ row["columns"][2]["column"] = "end_datetime";
+ row["columns"][2]["value"] = end_datetime;
+ row["columns"][2]["font"] = "SANSSERIF_SMALL";
+ row["columns"][2]["width"] = self->mHistoryColumnWidths[index++];
+
+ row["columns"][3]["column"] = "vote_type";
+ row["columns"][3]["value"] = vote_type;
+ row["columns"][3]["font"] = "SANSSERIF_SMALL";
+ row["columns"][3]["width"] = self->mHistoryColumnWidths[index++];
+
+ row["columns"][4]["column"] = "vote_result";
+ row["columns"][4]["value"] = vote_result;
+ row["columns"][4]["font"] = "SANSSERIF_SMALL";
+ row["columns"][4]["width"] = self->mHistoryColumnWidths[index++];
+
+ row["columns"][5]["column"] = "vote_text";
+ row["columns"][5]["value"] = vote_text;
+ row["columns"][5]["font"] = "SANSSERIF_SMALL";
+ row["columns"][5]["width"] = self->mHistoryColumnWidths[index++];
+
+ //row->addColumn(vote_text_stripped, font, self->mHistoryColumnWidths[1]);
+ //row->addColumn(end_datetime, font, self->mHistoryColumnWidths[2]);
+ //row->addColumn(vote_type, font, self->mHistoryColumnWidths[3]);
+ //row->addColumn(vote_result, font, self->mHistoryColumnWidths[4]);
+ //row->addColumn(vote_text, font, self->mHistoryColumnWidths[5]);
self->mHistoryReceived.push_back(row);
} //end if proposal
@@ -960,8 +1020,7 @@ void LLPanelGroupVoting::impl::processGroupVoteHistoryItemReply(LLMessageSystem
int received = self->mHistoryReceived.size();
if ( (U32)received != num_expected )
{
- self->addPendingHistoryScrollListItem(font,
- received,
+ self->addPendingHistoryScrollListItem(received,
num_expected,
ADD_BOTTOM);
self->mVotesHistory->setCanSelect(FALSE);
@@ -969,12 +1028,12 @@ void LLPanelGroupVoting::impl::processGroupVoteHistoryItemReply(LLMessageSystem
else
{
//all done display all of the items
- std::vector::iterator it = self->mHistoryReceived.begin();
- std::vector::iterator end = self->mHistoryReceived.end();
+ std::vector::iterator it = self->mHistoryReceived.begin();
+ std::vector::iterator end = self->mHistoryReceived.end();
for (; it != end; it++)
{
- self->mVotesHistory->addItem((*it), ADD_SORTED);
+ self->mVotesHistory->addElement((*it), ADD_SORTED);
}
self->mVotesHistory->setCanSelect(TRUE);
diff --git a/linden/indra/newview/llpanelgroupvoting.h b/linden/indra/newview/llpanelgroupvoting.h
index d8802ee..38f8e0a 100644
--- a/linden/indra/newview/llpanelgroupvoting.h
+++ b/linden/indra/newview/llpanelgroupvoting.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelinput.cpp b/linden/indra/newview/llpanelinput.cpp
index 09214d2..ac2b453 100644
--- a/linden/indra/newview/llpanelinput.cpp
+++ b/linden/indra/newview/llpanelinput.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelinput.h b/linden/indra/newview/llpanelinput.h
index a155460..e22f731 100644
--- a/linden/indra/newview/llpanelinput.h
+++ b/linden/indra/newview/llpanelinput.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelinventory.cpp b/linden/indra/newview/llpanelinventory.cpp
index d9638fd..2089a6c 100644
--- a/linden/indra/newview/llpanelinventory.cpp
+++ b/linden/indra/newview/llpanelinventory.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -93,6 +94,7 @@ protected:
LLString mName;
mutable LLString mDisplayName;
LLPanelInventory* mPanel;
+ U32 mFlags;
LLInventoryItem* findItem() const;
@@ -100,7 +102,8 @@ public:
LLTaskInvFVBridge(
LLPanelInventory* panel,
const LLUUID& uuid,
- const LLString& name);
+ const LLString& name,
+ U32 flags=0);
virtual ~LLTaskInvFVBridge( void ) {}
virtual LLFontGL::StyleFlags getLabelStyle() const { return LLFontGL::NORMAL; }
@@ -152,11 +155,14 @@ public:
LLTaskInvFVBridge::LLTaskInvFVBridge(
LLPanelInventory* panel,
const LLUUID& uuid,
- const LLString& name):
+ const LLString& name,
+ U32 flags):
mUUID(uuid),
mName(name),
- mPanel(panel)
+ mPanel(panel),
+ mFlags(flags)
{
+
}
LLInventoryItem* LLTaskInvFVBridge::findItem() const
@@ -322,7 +328,13 @@ U32 LLTaskInvFVBridge::getCreationDate() const
LLViewerImage* LLTaskInvFVBridge::getIcon() const
{
- return get_item_icon(LLAssetType::AT_OBJECT, LLInventoryType::IT_OBJECT, 0);
+ BOOL item_is_multi = FALSE;
+ if ( mFlags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS )
+ {
+ item_is_multi = TRUE;
+ }
+
+ return get_item_icon(LLAssetType::AT_OBJECT, LLInventoryType::IT_OBJECT, 0, item_is_multi );
}
void LLTaskInvFVBridge::openItem()
@@ -867,7 +879,7 @@ LLTaskTextureBridge::LLTaskTextureBridge(
LLViewerImage* LLTaskTextureBridge::getIcon() const
{
- return get_item_icon(LLAssetType::AT_TEXTURE, mInventoryType, 0);
+ return get_item_icon(LLAssetType::AT_TEXTURE, mInventoryType, 0, FALSE);
}
void LLTaskTextureBridge::openItem()
@@ -919,7 +931,7 @@ LLTaskSoundBridge::LLTaskSoundBridge(
LLViewerImage* LLTaskSoundBridge::getIcon() const
{
- return get_item_icon(LLAssetType::AT_SOUND, LLInventoryType::IT_SOUND, 0);
+ return get_item_icon(LLAssetType::AT_SOUND, LLInventoryType::IT_SOUND, 0, FALSE);
}
void LLTaskSoundBridge::openItem()
@@ -1051,7 +1063,7 @@ LLTaskLandmarkBridge::LLTaskLandmarkBridge(
LLViewerImage* LLTaskLandmarkBridge::getIcon() const
{
- return get_item_icon(LLAssetType::AT_LANDMARK, LLInventoryType::IT_LANDMARK, 0);
+ return get_item_icon(LLAssetType::AT_LANDMARK, LLInventoryType::IT_LANDMARK, 0, FALSE);
}
@@ -1082,7 +1094,7 @@ LLTaskCallingCardBridge::LLTaskCallingCardBridge(
LLViewerImage* LLTaskCallingCardBridge::getIcon() const
{
- return get_item_icon(LLAssetType::AT_CALLINGCARD, LLInventoryType::IT_CALLINGCARD, 0);
+ return get_item_icon(LLAssetType::AT_CALLINGCARD, LLInventoryType::IT_CALLINGCARD, 0, FALSE);
}
BOOL LLTaskCallingCardBridge::isItemRenameable() const
@@ -1122,7 +1134,7 @@ LLTaskScriptBridge::LLTaskScriptBridge(
LLViewerImage* LLTaskScriptBridge::getIcon() const
{
- return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0);
+ return get_item_icon(LLAssetType::AT_SCRIPT, LLInventoryType::IT_LSL, 0, FALSE);
}
@@ -1221,9 +1233,14 @@ LLTaskObjectBridge::LLTaskObjectBridge(
LLViewerImage* LLTaskObjectBridge::getIcon() const
{
- return get_item_icon(LLAssetType::AT_OBJECT, LLInventoryType::IT_OBJECT, 0);
-}
+ BOOL item_is_multi = FALSE;
+ if ( mFlags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS )
+ {
+ item_is_multi = TRUE;
+ }
+ return get_item_icon(LLAssetType::AT_OBJECT, LLInventoryType::IT_OBJECT, 0, item_is_multi);
+}
///----------------------------------------------------------------------------
/// Class LLTaskNotecardBridge
@@ -1252,7 +1269,7 @@ LLTaskNotecardBridge::LLTaskNotecardBridge(
LLViewerImage* LLTaskNotecardBridge::getIcon() const
{
- return get_item_icon(LLAssetType::AT_NOTECARD, LLInventoryType::IT_NOTECARD, 0);
+ return get_item_icon(LLAssetType::AT_NOTECARD, LLInventoryType::IT_NOTECARD, 0, FALSE);
}
void LLTaskNotecardBridge::openItem()
@@ -1318,7 +1335,7 @@ LLTaskGestureBridge::LLTaskGestureBridge(
LLViewerImage* LLTaskGestureBridge::getIcon() const
{
- return get_item_icon(LLAssetType::AT_GESTURE, LLInventoryType::IT_GESTURE, 0);
+ return get_item_icon(LLAssetType::AT_GESTURE, LLInventoryType::IT_GESTURE, 0, FALSE);
}
void LLTaskGestureBridge::openItem()
@@ -1378,7 +1395,7 @@ LLTaskAnimationBridge::LLTaskAnimationBridge(
LLViewerImage* LLTaskAnimationBridge::getIcon() const
{
- return get_item_icon(LLAssetType::AT_ANIMATION, LLInventoryType::IT_ANIMATION, 0);
+ return get_item_icon(LLAssetType::AT_ANIMATION, LLInventoryType::IT_ANIMATION, 0, FALSE);
}
void LLTaskAnimationBridge::openItem()
@@ -1447,7 +1464,6 @@ public:
protected:
LLAssetType::EType mAssetType;
- U32 mWearableType;
};
LLTaskWearableBridge::LLTaskWearableBridge(
@@ -1456,15 +1472,14 @@ LLTaskWearableBridge::LLTaskWearableBridge(
const LLString& name,
LLAssetType::EType asset_type,
U32 flags) :
- LLTaskInvFVBridge(panel, uuid, name),
- mAssetType( asset_type ),
- mWearableType(flags)
+ LLTaskInvFVBridge(panel, uuid, name, flags),
+ mAssetType( asset_type )
{
}
LLViewerImage* LLTaskWearableBridge::getIcon() const
{
- return get_item_icon(mAssetType, LLInventoryType::IT_WEARABLE, mWearableType);
+ return get_item_icon(mAssetType, LLInventoryType::IT_WEARABLE, mFlags, FALSE );
}
diff --git a/linden/indra/newview/llpanelinventory.h b/linden/indra/newview/llpanelinventory.h
index e6c000e..e56572b 100644
--- a/linden/indra/newview/llpanelinventory.h
+++ b/linden/indra/newview/llpanelinventory.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelland.cpp b/linden/indra/newview/llpanelland.cpp
index 1b3e146..d49972c 100644
--- a/linden/indra/newview/llpanelland.cpp
+++ b/linden/indra/newview/llpanelland.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelland.h b/linden/indra/newview/llpanelland.h
index 1bf176b..397bf8d 100644
--- a/linden/indra/newview/llpanelland.h
+++ b/linden/indra/newview/llpanelland.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanellandobjects.cpp b/linden/indra/newview/llpanellandobjects.cpp
index 6f7a079..c9992a6 100644
--- a/linden/indra/newview/llpanellandobjects.cpp
+++ b/linden/indra/newview/llpanellandobjects.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanellandobjects.h b/linden/indra/newview/llpanellandobjects.h
index 3e611fd..daf3e35 100644
--- a/linden/indra/newview/llpanellandobjects.h
+++ b/linden/indra/newview/llpanellandobjects.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanellandoptions.cpp b/linden/indra/newview/llpanellandoptions.cpp
index 76e65e5..508954b 100644
--- a/linden/indra/newview/llpanellandoptions.cpp
+++ b/linden/indra/newview/llpanellandoptions.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanellandoptions.h b/linden/indra/newview/llpanellandoptions.h
index 9280b31..40d453e 100644
--- a/linden/indra/newview/llpanellandoptions.h
+++ b/linden/indra/newview/llpanellandoptions.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanellogin.cpp b/linden/indra/newview/llpanellogin.cpp
index 6a0bdb4..5f31216 100644
--- a/linden/indra/newview/llpanellogin.cpp
+++ b/linden/indra/newview/llpanellogin.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -401,7 +402,7 @@ BOOL LLPanelLogin::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent)
if ( KEY_F1 == key )
{
llinfos << "Spawning HTML help window" << llendl;
- LLHtmlHelp::show( );
+ gViewerHtmlHelp.show();
return TRUE;
};
#if ! LL_RELEASE_FOR_DOWNLOAD
diff --git a/linden/indra/newview/llpanellogin.h b/linden/indra/newview/llpanellogin.h
index 6bd825a..2133044 100644
--- a/linden/indra/newview/llpanellogin.h
+++ b/linden/indra/newview/llpanellogin.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelmorph.cpp b/linden/indra/newview/llpanelmorph.cpp
index 94d5779..543e0e6 100644
--- a/linden/indra/newview/llpanelmorph.cpp
+++ b/linden/indra/newview/llpanelmorph.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelmorph.h b/linden/indra/newview/llpanelmorph.h
index f0859db..079f7d7 100644
--- a/linden/indra/newview/llpanelmorph.h
+++ b/linden/indra/newview/llpanelmorph.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelmsgs.cpp b/linden/indra/newview/llpanelmsgs.cpp
index 08ba343..f25d477 100644
--- a/linden/indra/newview/llpanelmsgs.cpp
+++ b/linden/indra/newview/llpanelmsgs.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -69,22 +70,32 @@ void LLPanelMsgs::buildLists()
{
LLAlertDialogTemplate* alert_temp = iter->second;
S32 ignore = alert_temp->getIgnore();
- LLScrollListItem* item = new LLScrollListItem();
- item->setUserdata((void*)&iter->first);
- item->addColumn(alert_temp->mIgnoreListText, LLFontGL::sSansSerifSmall, 300);
+
+ LLSD row;
+ row["columns"][0]["value"] = alert_temp->mIgnoreListText;
+ row["columns"][0]["font"] = "SANSSERIF_SMALL";
+ row["columns"][0]["width"] = 300;
+
+ LLScrollListItem* item = NULL;
+
+
if (ignore)
{
if (ignore == LLAlertDialog::IGNORE_USE_SAVED)
{
S32 arg = LLUI::sConfigGroup->getS32("Default" + alert_temp->mIgnoreLabel);
- item->addColumn(alert_temp->mOptionDefaultText[arg], LLFontGL::sSansSerifSmall, 160);
+ row["columns"][1]["value"] = alert_temp->mOptionDefaultText[arg];
+ row["columns"][1]["font"] = "SANSSERIF_SMALL";
+ row["columns"][1]["width"] = 160;
}
- mDisabledPopups->addItem(item, ADD_SORTED);
+ item = mDisabledPopups->addElement(row, ADD_SORTED);
}
else
{
- mEnabledPopups->addItem(item, ADD_SORTED);
+ item = mEnabledPopups->addElement(row, ADD_SORTED);
}
+
+ item->setUserdata((void*)&iter->first);
}
}
diff --git a/linden/indra/newview/llpanelmsgs.h b/linden/indra/newview/llpanelmsgs.h
index f1231ce..51e0498 100644
--- a/linden/indra/newview/llpanelmsgs.h
+++ b/linden/indra/newview/llpanelmsgs.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelnetwork.cpp b/linden/indra/newview/llpanelnetwork.cpp
index ef538ba..eaf2075 100644
--- a/linden/indra/newview/llpanelnetwork.cpp
+++ b/linden/indra/newview/llpanelnetwork.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelnetwork.h b/linden/indra/newview/llpanelnetwork.h
index 051293a..4d54f88 100644
--- a/linden/indra/newview/llpanelnetwork.h
+++ b/linden/indra/newview/llpanelnetwork.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelobject.cpp b/linden/indra/newview/llpanelobject.cpp
index 590eb63..fb740a4 100644
--- a/linden/indra/newview/llpanelobject.cpp
+++ b/linden/indra/newview/llpanelobject.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -447,17 +448,17 @@ void LLPanelObject::getState( )
// Physics checkbox
mIsPhysical = root_objectp->usePhysics();
mCheckPhysics->set( mIsPhysical );
- mCheckPhysics->setEnabled( roots_selected==1
+ mCheckPhysics->setEnabled( roots_selected>0
&& (editable || gAgent.isGodlike())
&& !is_flexible);
mIsTemporary = root_objectp->flagTemporaryOnRez();
mCheckTemporary->set( mIsTemporary );
- mCheckTemporary->setEnabled( roots_selected==1 && editable );
+ mCheckTemporary->setEnabled( roots_selected>0 && editable );
mIsPhantom = root_objectp->flagPhantom();
mCheckPhantom->set( mIsPhantom );
- mCheckPhantom->setEnabled( roots_selected==1 && editable && !is_flexible );
+ mCheckPhantom->setEnabled( roots_selected>0 && editable && !is_flexible );
#if 0 // 1.9.2
mCastShadows = root_objectp->flagCastShadows();
diff --git a/linden/indra/newview/llpanelobject.h b/linden/indra/newview/llpanelobject.h
index c4f10c5..76b0dab 100644
--- a/linden/indra/newview/llpanelobject.h
+++ b/linden/indra/newview/llpanelobject.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelpermissions.cpp b/linden/indra/newview/llpanelpermissions.cpp
index 8512342..18ec28e 100644
--- a/linden/indra/newview/llpanelpermissions.cpp
+++ b/linden/indra/newview/llpanelpermissions.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -384,7 +385,7 @@ void LLPanelPermissions::refresh()
else
{
char buffer[MAX_STRING]; /*Flawfinder: ignore*/
- snprintf(buffer, MAX_STRING, "%d Objects, ", obj_count); /*Flawfinder: ignore*/
+ snprintf(buffer, MAX_STRING, "%d Objects, ", obj_count); /* Flawfinder: ignore */
object_info_string.assign(buffer);
}
if (1 == prim_count)
@@ -394,7 +395,7 @@ void LLPanelPermissions::refresh()
else
{
char buffer[MAX_STRING]; /*Flawfinder: ignore*/
- snprintf(buffer, MAX_STRING, "%d Primitives", prim_count); /*Flawfinder: ignore*/
+ snprintf(buffer, MAX_STRING, "%d Primitives", prim_count); /* Flawfinder: ignore */
object_info_string.append(buffer);
}
childSetText("prim info",object_info_string);
diff --git a/linden/indra/newview/llpanelpermissions.h b/linden/indra/newview/llpanelpermissions.h
index 5ffba06..9cf7a82 100644
--- a/linden/indra/newview/llpanelpermissions.h
+++ b/linden/indra/newview/llpanelpermissions.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelpick.cpp b/linden/indra/newview/llpanelpick.cpp
index ddd7934..9dc0aea 100644
--- a/linden/indra/newview/llpanelpick.cpp
+++ b/linden/indra/newview/llpanelpick.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -47,6 +48,7 @@
#include "llviewertexteditor.h"
#include "lltexturectrl.h"
#include "lluiconstants.h"
+#include "llviewergenericmessage.h"
#include "llvieweruictrlfactory.h"
#include "llviewerparcelmgr.h"
#include "llworldmap.h"
@@ -55,7 +57,7 @@
#include "llviewerwindow.h"
//static
-LLLinkedList LLPanelPick::sAllPanels;
+std::list LLPanelPick::sAllPanels;
LLPanelPick::LLPanelPick(BOOL top_pick)
: LLPanel("Top Picks Panel"),
@@ -78,7 +80,7 @@ LLPanelPick::LLPanelPick(BOOL top_pick)
mEnabledCheck(NULL),
mSetBtn(NULL)
{
- sAllPanels.addData(this);
+ sAllPanels.push_back(this);
std::string pick_def_file;
if (top_pick)
@@ -94,7 +96,7 @@ LLPanelPick::LLPanelPick(BOOL top_pick)
LLPanelPick::~LLPanelPick()
{
- sAllPanels.removeData(this);
+ sAllPanels.remove(this);
}
@@ -184,9 +186,10 @@ void LLPanelPick::initNewPick()
}
-void LLPanelPick::setPickID(const LLUUID& id)
+void LLPanelPick::setPickID(const LLUUID& pick_id, const LLUUID& creator_id)
{
- mPickID = id;
+ mPickID = pick_id;
+ mCreatorID = creator_id;
}
@@ -207,15 +210,12 @@ std::string LLPanelPick::getPickName()
void LLPanelPick::sendPickInfoRequest()
{
- LLMessageSystem *msg = gMessageSystem;
-
- msg->newMessage("PickInfoRequest");
- msg->nextBlock("AgentData");
- msg->addUUID("AgentID", gAgent.getID() );
- msg->addUUID("SessionID", gAgent.getSessionID());
- msg->nextBlock("Data");
- msg->addUUID("PickID", mPickID);
- gAgent.sendReliableMessage();
+ // Must ask for a pick based on the creator id because
+ // the pick database is distributed to the inventory cluster. JC
+ std::vector strings;
+ strings.push_back( mCreatorID.asString() );
+ strings.push_back( mPickID.asString() );
+ send_generic_message("pickinforequest", strings);
mDataRequested = TRUE;
}
@@ -324,7 +324,7 @@ void LLPanelPick::processPickInfoReply(LLMessageSystem *msg, void **)
S32 region_y = llround((F32)pos_global.mdV[VY]) % REGION_WIDTH_UNITS;
S32 region_z = llround((F32)pos_global.mdV[VZ]);
- snprintf(buffer, sizeof(buffer), "%s (%d, %d, %d)", sim_name, region_x, region_y, region_z); /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), "%s (%d, %d, %d)", sim_name, region_x, region_y, region_z); /* Flawfinder: ignore */
location_text.append(buffer);
S32 sort_order;
@@ -334,9 +334,9 @@ void LLPanelPick::processPickInfoReply(LLMessageSystem *msg, void **)
msg->getBOOL("Data", "Enabled", enabled);
// Look up the panel to fill in
- LLPanelPick *self = NULL;
- for (self = sAllPanels.getFirstData(); self; self = sAllPanels.getNextData())
- {
+ for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter)
+ {
+ LLPanelPick* self = *iter;
// For top picks, must match pick id
if (self->mPickID != pick_id)
{
@@ -359,7 +359,7 @@ void LLPanelPick::processPickInfoReply(LLMessageSystem *msg, void **)
self->mLocationEditor->setText(location_text);
self->mEnabledCheck->set(enabled);
- snprintf(buffer, sizeof(buffer), "%d", sort_order); /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), "%d", sort_order); /* Flawfinder: ignore */
self->mSortOrderEditor->setText(buffer);
}
}
diff --git a/linden/indra/newview/llpanelpick.h b/linden/indra/newview/llpanelpick.h
index 01bf788..21072e4 100644
--- a/linden/indra/newview/llpanelpick.h
+++ b/linden/indra/newview/llpanelpick.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -58,13 +59,15 @@ public:
/*virtual*/ void draw();
- void refresh();
+ /*virtual*/ void refresh();
// Setup a new pick, including creating an id, giving a sane
// initial position, etc.
void initNewPick();
- void setPickID(const LLUUID& id);
+ // We need to know the creator id so the database knows which partition
+ // to query for the pick data.
+ void setPickID(const LLUUID& pick_id, const LLUUID& creator_id);
// Schedules the panel to request data
// from the server next time it is drawn.
@@ -72,6 +75,7 @@ public:
std::string getPickName();
const LLUUID& getPickID() const { return mPickID; }
+ const LLUUID& getPickCreatorID() const { return mCreatorID; }
void sendPickInfoRequest();
void sendPickInfoUpdate();
@@ -112,7 +116,8 @@ protected:
LLCheckBoxCtrl* mEnabledCheck;
LLButton* mSetBtn;
- static LLLinkedList sAllPanels;
+ typedef std::list panel_list_t;
+ static panel_list_t sAllPanels;
};
#endif // LL_LLPANELPICK_H
diff --git a/linden/indra/newview/llpanelplace.cpp b/linden/indra/newview/llpanelplace.cpp
index f373e99..a9f11cc 100644
--- a/linden/indra/newview/llpanelplace.cpp
+++ b/linden/indra/newview/llpanelplace.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -51,7 +52,7 @@
#include "llweb.h"
//static
-LLLinkedList LLPanelPlace::sAllPanels;
+std::list LLPanelPlace::sAllPanels;
LLPanelPlace::LLPanelPlace()
: LLPanel("Places Panel"),
@@ -59,13 +60,13 @@ LLPanelPlace::LLPanelPlace()
mPosGlobal(),
mAuctionID(0)
{
- sAllPanels.addData(this);
+ sAllPanels.push_back(this);
}
LLPanelPlace::~LLPanelPlace()
{
- sAllPanels.removeData(this);
+ sAllPanels.remove(this);
}
@@ -158,10 +159,9 @@ void LLPanelPlace::processParcelInfoReply(LLMessageSystem *msg, void **)
msg->getUUID("Data", "ParcelID", parcel_id);
// look up all panels which have this avatar
- LLPanelPlace *self = NULL;
-
- for (self = sAllPanels.getFirstData(); self; self = sAllPanels.getNextData())
+ for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter)
{
+ LLPanelPlace* self = *iter;
if (self->mParcelID != parcel_id)
{
continue;
@@ -193,16 +193,16 @@ void LLPanelPlace::processParcelInfoReply(LLMessageSystem *msg, void **)
self->mDescEditor->setText(desc);
LLString info;
- snprintf(buffer, sizeof(buffer), "Traffic: %.0f, Area: %d sq. m.", dwell, actual_area); /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), "Traffic: %.0f, Area: %d sq. m.", dwell, actual_area); /* Flawfinder: ignore */
info.append(buffer);
if (flags & DFQ_FOR_SALE)
{
- snprintf(buffer, sizeof(buffer), ", For Sale for L$%d", sale_price); /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), ", For Sale for L$%d", sale_price); /* Flawfinder: ignore */
info.append(buffer);
}
if (auction_id != 0)
{
- snprintf(buffer, sizeof(buffer), ", Auction ID %010d", auction_id); /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), ", Auction ID %010d", auction_id); /* Flawfinder: ignore */
info.append(buffer);
}
self->mInfoEditor->setText(info);
@@ -218,7 +218,7 @@ void LLPanelPlace::processParcelInfoReply(LLMessageSystem *msg, void **)
rating = LLViewerRegion::accessToString(SIM_ACCESS_MATURE);
}
- snprintf(buffer, sizeof(buffer), "%s %d, %d, %d (%s)", /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), "%s %d, %d, %d (%s)", /* Flawfinder: ignore */
sim_name, region_x, region_y, region_z, rating);
self->mLocationEditor->setText(buffer);
@@ -281,7 +281,7 @@ void LLPanelPlace::callbackAuctionWebPage(S32 option, void* data)
if (0 == option)
{
char url[256]; /*Flawfinder: ignore*/
- snprintf(url, sizeof(url), "%s%010d", AUCTION_URL, self->mAuctionID); /*Flawfinder: ignore*/
+ snprintf(url, sizeof(url), "%s%010d", AUCTION_URL, self->mAuctionID); /* Flawfinder: ignore */
llinfos << "Loading auction page " << url << llendl;
diff --git a/linden/indra/newview/llpanelplace.h b/linden/indra/newview/llpanelplace.h
index bd01b8c..65dd591 100644
--- a/linden/indra/newview/llpanelplace.h
+++ b/linden/indra/newview/llpanelplace.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -83,7 +84,8 @@ protected:
//LLButton* mLandmarkBtn;
LLButton* mAuctionBtn;
- static LLLinkedList sAllPanels;
+ typedef std::list panel_list_t;
+ static panel_list_t sAllPanels;
};
#endif // LL_LLPANELPLACE_H
diff --git a/linden/indra/newview/llpanelvolume.cpp b/linden/indra/newview/llpanelvolume.cpp
index 3a8650d..a91eeb7 100644
--- a/linden/indra/newview/llpanelvolume.cpp
+++ b/linden/indra/newview/llpanelvolume.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelvolume.h b/linden/indra/newview/llpanelvolume.h
index 74f9b60..3f254aa 100644
--- a/linden/indra/newview/llpanelvolume.h
+++ b/linden/indra/newview/llpanelvolume.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelweb.cpp b/linden/indra/newview/llpanelweb.cpp
index d5805cd..e1e4247 100644
--- a/linden/indra/newview/llpanelweb.cpp
+++ b/linden/indra/newview/llpanelweb.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpanelweb.h b/linden/indra/newview/llpanelweb.h
index 63922d6..0703f90 100644
--- a/linden/indra/newview/llpanelweb.h
+++ b/linden/indra/newview/llpanelweb.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpatchvertexarray.cpp b/linden/indra/newview/llpatchvertexarray.cpp
index 992423e..bfd4ff4 100644
--- a/linden/indra/newview/llpatchvertexarray.cpp
+++ b/linden/indra/newview/llpatchvertexarray.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpatchvertexarray.h b/linden/indra/newview/llpatchvertexarray.h
index d85760a..f123c87 100644
--- a/linden/indra/newview/llpatchvertexarray.h
+++ b/linden/indra/newview/llpatchvertexarray.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpolymesh.cpp b/linden/indra/newview/llpolymesh.cpp
index 2f3dfce..cf94142 100644
--- a/linden/indra/newview/llpolymesh.cpp
+++ b/linden/indra/newview/llpolymesh.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -745,7 +746,7 @@ LLPolyMesh *LLPolyMesh::getMesh(const LLString &name, LLPolyMesh* reference_mesh
// if not found, create a new one, add it to the list
//-------------------------------------------------------------------------
char full_path[LL_MAX_PATH]; /*Flawfinder: ignore*/
- snprintf(full_path, LL_MAX_PATH, "%s", (gDirUtilp->getExpandedFilename(LL_PATH_CHARACTER,name.c_str())).c_str()); /*Flawfinder: ignore*/
+ snprintf(full_path, LL_MAX_PATH, "%s", (gDirUtilp->getExpandedFilename(LL_PATH_CHARACTER,name.c_str())).c_str()); /* Flawfinder: ignore */
LLPolyMeshSharedData *mesh_data = new LLPolyMeshSharedData();
if (reference_mesh)
@@ -823,7 +824,7 @@ void LLPolyMesh::dumpDiagInfo()
S32 num_faces = mesh.mNumFaces;
U32 num_kb = mesh.getNumKB();
- snprintf(buf, sizeof(buf), "%8d %8d %8d %s", num_verts, num_faces, num_kb, mesh_name_p->c_str()); /*Flawfinder: ignore*/
+ snprintf(buf, sizeof(buf), "%8d %8d %8d %s", num_verts, num_faces, num_kb, mesh_name_p->c_str()); /* Flawfinder: ignore */
llinfos << buf << llendl;
total_verts += num_verts;
@@ -832,7 +833,7 @@ void LLPolyMesh::dumpDiagInfo()
}
llinfos << "-----------------------------------------------------" << llendl;
- snprintf(buf, sizeof(buf), "%8d %8d %8d TOTAL", total_verts, total_faces, total_kb ); /*Flawfinder: ignore*/
+ snprintf(buf, sizeof(buf), "%8d %8d %8d TOTAL", total_verts, total_faces, total_kb ); /* Flawfinder: ignore */
llinfos << buf << llendl;
llinfos << "-----------------------------------------------------" << llendl;
}
diff --git a/linden/indra/newview/llpolymesh.h b/linden/indra/newview/llpolymesh.h
index 0d448ac..f3022f5 100644
--- a/linden/indra/newview/llpolymesh.h
+++ b/linden/indra/newview/llpolymesh.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpolymorph.cpp b/linden/indra/newview/llpolymorph.cpp
index 3937da2..2d1375d 100644
--- a/linden/indra/newview/llpolymorph.cpp
+++ b/linden/indra/newview/llpolymorph.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpolymorph.h b/linden/indra/newview/llpolymorph.h
index b372398..f867d27 100644
--- a/linden/indra/newview/llpolymorph.h
+++ b/linden/indra/newview/llpolymorph.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llprefschat.cpp b/linden/indra/newview/llprefschat.cpp
index 2d98ad5..28434ec 100644
--- a/linden/indra/newview/llprefschat.cpp
+++ b/linden/indra/newview/llprefschat.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llprefschat.h b/linden/indra/newview/llprefschat.h
index 9e19353..71868f7 100644
--- a/linden/indra/newview/llprefschat.h
+++ b/linden/indra/newview/llprefschat.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llprefsim.cpp b/linden/indra/newview/llprefsim.cpp
index 383fe76..8575113 100644
--- a/linden/indra/newview/llprefsim.cpp
+++ b/linden/indra/newview/llprefsim.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llprefsim.h b/linden/indra/newview/llprefsim.h
index 6dd0bd1..411253b 100644
--- a/linden/indra/newview/llprefsim.h
+++ b/linden/indra/newview/llprefsim.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpreview.cpp b/linden/indra/newview/llpreview.cpp
index 534513f..347c6d5 100644
--- a/linden/indra/newview/llpreview.cpp
+++ b/linden/indra/newview/llpreview.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -328,7 +329,7 @@ BOOL LLPreview::handleMouseDown(S32 x, S32 y, MASK mask)
// No handler needed for focus lost since this class has no
// state that depends on it.
bringToFront(x, y);
- gFocusMgr.setMouseCapture(this, NULL);
+ gFocusMgr.setMouseCapture(this);
S32 screen_x;
S32 screen_y;
localPointToScreen(x, y, &screen_x, &screen_y );
@@ -340,9 +341,9 @@ BOOL LLPreview::handleMouseDown(S32 x, S32 y, MASK mask)
BOOL LLPreview::handleMouseUp(S32 x, S32 y, MASK mask)
{
- if(gFocusMgr.getMouseCapture() == this)
+ if(hasMouseCapture())
{
- gFocusMgr.setMouseCapture(NULL, NULL);
+ gFocusMgr.setMouseCapture(NULL);
return TRUE;
}
return LLFloater::handleMouseUp(x, y, mask);
@@ -350,7 +351,7 @@ BOOL LLPreview::handleMouseUp(S32 x, S32 y, MASK mask)
BOOL LLPreview::handleHover(S32 x, S32 y, MASK mask)
{
- if(gFocusMgr.getMouseCapture() == this)
+ if(hasMouseCapture())
{
S32 screen_x;
S32 screen_y;
diff --git a/linden/indra/newview/llpreview.h b/linden/indra/newview/llpreview.h
index 7882b4c..266bdd1 100644
--- a/linden/indra/newview/llpreview.h
+++ b/linden/indra/newview/llpreview.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpreviewanim.cpp b/linden/indra/newview/llpreviewanim.cpp
index bd619b4..ae98fb0 100644
--- a/linden/indra/newview/llpreviewanim.cpp
+++ b/linden/indra/newview/llpreviewanim.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -92,11 +93,14 @@ LLPreviewAnim::LLPreviewAnim(const std::string& name, const LLRect& rect, const
// static
void LLPreviewAnim::endAnimCallback( void *userdata )
{
- LLPreviewAnim* self = (LLPreviewAnim*) userdata;
-
- self->childSetValue("Anim play btn", FALSE);
- self->childSetValue("Anim audition btn", FALSE);
-
+ LLViewHandle* handlep = ((LLViewHandle*)userdata);
+ LLFloater* self = getFloaterByHandle(*handlep);
+ delete handlep; // done with the handle
+ if (self)
+ {
+ self->childSetValue("Anim play btn", FALSE);
+ self->childSetValue("Anim audition btn", FALSE);
+ }
}
// static
@@ -124,7 +128,9 @@ void LLPreviewAnim::playAnim( void *userdata )
LLMotion* motion = avatar->findMotion(itemID);
if (motion)
- motion->setDeactivateCallback(&endAnimCallback, (void *)self);
+ {
+ motion->setDeactivateCallback(&endAnimCallback, (void *)(new LLViewHandle(self->getHandle())));
+ }
}
else
{
@@ -159,7 +165,9 @@ void LLPreviewAnim::auditionAnim( void *userdata )
LLMotion* motion = avatar->findMotion(itemID);
if (motion)
- motion->setDeactivateCallback(&endAnimCallback, (void *)self);
+ {
+ motion->setDeactivateCallback(&endAnimCallback, (void *)(new LLViewHandle(self->getHandle())));
+ }
}
else
{
@@ -209,8 +217,9 @@ void LLPreviewAnim::onClose(bool app_quitting)
LLMotion* motion = avatar->findMotion(item->getAssetUUID());
if (motion)
+ {
motion->setDeactivateCallback(NULL, (void *)NULL);
-
+ }
}
destroy();
}
diff --git a/linden/indra/newview/llpreviewanim.h b/linden/indra/newview/llpreviewanim.h
index 307b617..318d36e 100644
--- a/linden/indra/newview/llpreviewanim.h
+++ b/linden/indra/newview/llpreviewanim.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpreviewgesture.cpp b/linden/indra/newview/llpreviewgesture.cpp
index fdbeb6c..5f657d3 100644
--- a/linden/indra/newview/llpreviewgesture.cpp
+++ b/linden/indra/newview/llpreviewgesture.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -793,7 +794,7 @@ void LLPreviewGesture::refresh()
mWaitTimeCheck->set(wait_step->mFlags & WAIT_FLAG_TIME);
mWaitTimeEditor->setVisible(TRUE);
char buffer[16]; /*Flawfinder: ignore*/
- snprintf(buffer, sizeof(buffer), "%.1f", (double)wait_step->mWaitSeconds); /*Flawfinder: ignore*/
+ snprintf(buffer, sizeof(buffer), "%.1f", (double)wait_step->mWaitSeconds); /* Flawfinder: ignore */
mWaitTimeEditor->setText(buffer);
break;
}
@@ -1042,11 +1043,11 @@ void LLPreviewGesture::loadUIFromGesture(LLMultiGesture* gesture)
if (!new_step) continue;
// Create an enabled item with this step
- LLScrollListItem* item = new LLScrollListItem(TRUE, new_step);
- item->addColumn(new_step->getLabel(), LLFontGL::sSansSerifSmall);
-
- // Add item to bottom of list
- mStepList->addItem(item, ADD_BOTTOM);
+ LLSD row;
+ row["columns"][0]["value"] = new_step->getLabel();
+ row["columns"][0]["font"] = "SANSSERIF_SMALL";
+ LLScrollListItem* item = mStepList->addElement(row);
+ item->setUserdata(new_step);
}
}
@@ -1591,12 +1592,11 @@ LLScrollListItem* LLPreviewGesture::addStep(const std::string& library_text)
}
// Create an enabled item with this step
- LLScrollListItem* step_item = new LLScrollListItem(TRUE, step);
- std::string label = step->getLabel();
- step_item->addColumn(label, LLFontGL::sSansSerifSmall);
-
- // Add item to bottom of list
- mStepList->addItem(step_item, ADD_BOTTOM);
+ LLSD row;
+ row["columns"][0]["value"] = step->getLabel();
+ row["columns"][0]["font"] = "SANSSERIF_SMALL";
+ LLScrollListItem* step_item = mStepList->addElement(row);
+ step_item->setUserdata(step);
// And move selection to the list on the right
mLibraryList->deselectAllItems();
diff --git a/linden/indra/newview/llpreviewgesture.h b/linden/indra/newview/llpreviewgesture.h
index c03fd3e..e0ccffd 100644
--- a/linden/indra/newview/llpreviewgesture.h
+++ b/linden/indra/newview/llpreviewgesture.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpreviewlandmark.cpp b/linden/indra/newview/llpreviewlandmark.cpp
index b56e7a5..f4637dd 100644
--- a/linden/indra/newview/llpreviewlandmark.cpp
+++ b/linden/indra/newview/llpreviewlandmark.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpreviewlandmark.h b/linden/indra/newview/llpreviewlandmark.h
index 98b2c73..76ab452 100644
--- a/linden/indra/newview/llpreviewlandmark.h
+++ b/linden/indra/newview/llpreviewlandmark.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpreviewnotecard.cpp b/linden/indra/newview/llpreviewnotecard.cpp
index fe5ade2..1c59bb4 100644
--- a/linden/indra/newview/llpreviewnotecard.cpp
+++ b/linden/indra/newview/llpreviewnotecard.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -605,7 +606,7 @@ void LLPreviewNotecard::onSaveComplete(const LLUUID& asset_uuid, void* user_data
char uuid_string[UUID_STR_LENGTH]; /*Flawfinder: ignore*/
asset_uuid.toString(uuid_string);
char filename[LL_MAX_PATH]; /*Flawfinder: ignore*/
- snprintf(filename, LL_MAX_PATH, "%s.tmp", gDirUtilp->getExpandedFilename(LL_PATH_CACHE,uuid_string).c_str()); /*Flawfinder: ignore*/
+ snprintf(filename, LL_MAX_PATH, "%s.tmp", gDirUtilp->getExpandedFilename(LL_PATH_CACHE,uuid_string).c_str()); /* Flawfinder: ignore */
LLFile::remove(filename);
delete info;
}
diff --git a/linden/indra/newview/llpreviewnotecard.h b/linden/indra/newview/llpreviewnotecard.h
index 9b72ec8..89352e8 100644
--- a/linden/indra/newview/llpreviewnotecard.h
+++ b/linden/indra/newview/llpreviewnotecard.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpreviewscript.cpp b/linden/indra/newview/llpreviewscript.cpp
index 75371b2..39938d4 100644
--- a/linden/indra/newview/llpreviewscript.cpp
+++ b/linden/indra/newview/llpreviewscript.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -76,6 +77,7 @@
#include "llviewertexteditor.h"
#include "llviewerwindow.h"
#include "llvieweruictrlfactory.h"
+#include "llwebbrowserctrl.h"
#include "lluictrlfactory.h"
#include "viewer.h"
@@ -134,6 +136,9 @@ const S32 SCRIPT_SEARCH_HEIGHT = 120;
const S32 SCRIPT_SEARCH_LABEL_WIDTH = 50;
const S32 SCRIPT_SEARCH_BUTTON_WIDTH = 80;
const S32 TEXT_EDIT_COLUMN_HEIGHT = 16;
+const S32 MAX_HISTORY_COUNT = 10;
+const F32 LIVE_HELP_REFRESH_TIME = 1.f;
+
/// ---------------------------------------------------------------------------
/// LLFloaterScriptSearch
/// ---------------------------------------------------------------------------
@@ -273,6 +278,7 @@ void LLFloaterScriptSearch::open() /*Flawfinder: ignore*/
LLFloater::open(); /*Flawfinder: ignore*/
childSetFocus("search_text", TRUE);
}
+
/// ---------------------------------------------------------------------------
/// LLScriptEdCore
/// ---------------------------------------------------------------------------
@@ -295,7 +301,9 @@ LLScriptEdCore::LLScriptEdCore(
mLoadCallback( load_callback ),
mSaveCallback( save_callback ),
mUserdata( userdata ),
- mForceClose( FALSE )
+ mForceClose( FALSE ),
+ mLastHelpToken(NULL),
+ mLiveHelpHistorySize(0)
{
setFollowsAll();
setBorderVisible(FALSE);
@@ -355,14 +363,13 @@ LLScriptEdCore::LLScriptEdCore(
initMenu();
-
// Do the work that addTabPanel() normally does.
//LLRect tab_panel_rect( 0, mRect.getHeight(), mRect.getWidth(), 0 );
//tab_panel_rect.stretch( -LLPANEL_BORDER_WIDTH );
//mCodePanel->setFollowsAll();
//mCodePanel->translate( tab_panel_rect.mLeft - mCodePanel->getRect().mLeft, tab_panel_rect.mBottom - mCodePanel->getRect().mBottom);
//mCodePanel->reshape( tab_panel_rect.getWidth(), tab_panel_rect.getHeight(), TRUE );
-
+
}
LLScriptEdCore::~LLScriptEdCore()
@@ -421,6 +428,9 @@ void LLScriptEdCore::initMenu()
menuItem->setMenuCallback(onBtnHelp, this);
menuItem->setEnabledCallback(NULL);
+ menuItem = LLUICtrlFactory::getMenuItemCallByName(this, "LSL Wiki Help...");
+ menuItem->setMenuCallback(onBtnDynamicHelp, this);
+ menuItem->setEnabledCallback(NULL);
}
BOOL LLScriptEdCore::hasChanged(void* userdata)
@@ -442,7 +452,7 @@ void LLScriptEdCore::draw()
S32 column = 0;
mEditor->getCurrentLineAndColumn( &line, &column, FALSE ); // don't include wordwrap
char cursor_pos[STD_STRING_BUF_SIZE]; /*Flawfinder: ignore*/
- snprintf( cursor_pos, STD_STRING_BUF_SIZE, "Line %d, Column %d", line, column ); /*Flawfinder: ignore*/
+ snprintf( cursor_pos, STD_STRING_BUF_SIZE, "Line %d, Column %d", line, column ); /* Flawfinder: ignore */
childSetText("line_col", cursor_pos);
}
else
@@ -450,9 +460,135 @@ void LLScriptEdCore::draw()
childSetText("line_col", "");
}
+ updateDynamicHelp();
+
LLPanel::draw();
}
+void LLScriptEdCore::updateDynamicHelp(BOOL immediate)
+{
+ LLFloater* help_floater = LLFloater::getFloaterByHandle(mLiveHelpHandle);
+ if (!help_floater) return;
+
+ // update back and forward buttons
+ LLButton* fwd_button = LLUICtrlFactory::getButtonByName(help_floater, "fwd_btn");
+ LLButton* back_button = LLUICtrlFactory::getButtonByName(help_floater, "back_btn");
+ LLWebBrowserCtrl* browser = LLUICtrlFactory::getWebBrowserCtrlByName(help_floater, "lsl_guide_html");
+ back_button->setEnabled(browser->canNavigateBack());
+ fwd_button->setEnabled(browser->canNavigateForward());
+
+ if (!immediate && !gSavedSettings.getBOOL("ScriptHelpFollowsCursor"))
+ {
+ return;
+ }
+
+ LLTextSegment* segment = NULL;
+ std::vector selected_segments;
+ mEditor->getSelectedSegments(selected_segments);
+
+ // try segments in selection range first
+ std::vector::iterator segment_iter;
+ for (segment_iter = selected_segments.begin(); segment_iter != selected_segments.end(); ++segment_iter)
+ {
+ if((*segment_iter)->getToken() && (*segment_iter)->getToken()->getType() == LLKeywordToken::WORD)
+ {
+ segment = *segment_iter;
+ break;
+ }
+ }
+
+ // then try previous segment in case we just typed it
+ if (!segment)
+ {
+ LLTextSegment* test_segment = mEditor->getPreviousSegment();
+ if(test_segment->getToken() && test_segment->getToken()->getType() == LLKeywordToken::WORD)
+ {
+ segment = test_segment;
+ }
+ }
+
+ if (segment)
+ {
+ if (segment->getToken() != mLastHelpToken)
+ {
+ mLastHelpToken = segment->getToken();
+ mLiveHelpTimer.start();
+ }
+ if (immediate || (mLiveHelpTimer.getStarted() && mLiveHelpTimer.getElapsedTimeF32() > LIVE_HELP_REFRESH_TIME))
+ {
+ LLString help_string = mEditor->getText().substr(segment->getStart(), segment->getEnd() - segment->getStart());
+ setHelpPage(help_string);
+ mLiveHelpTimer.stop();
+ }
+ }
+ else
+ {
+ setHelpPage("");
+ }
+}
+
+void LLScriptEdCore::setHelpPage(const LLString& help_string)
+{
+ LLFloater* help_floater = LLFloater::getFloaterByHandle(mLiveHelpHandle);
+ if (!help_floater) return;
+
+ LLWebBrowserCtrl* web_browser = gUICtrlFactory->getWebBrowserCtrlByName(help_floater, "lsl_guide_html");
+ if (!web_browser) return;
+
+ LLComboBox* history_combo = gUICtrlFactory->getComboBoxByName(help_floater, "history_combo");
+ if (!history_combo) return;
+
+ LLUIString url_string = gSavedSettings.getString("LSLHelpURL");
+ url_string.setArg("[APP_DIRECTORY]", gDirUtilp->getWorkingDir());
+ url_string.setArg("[LSL_STRING]", help_string);
+
+ addHelpItemToHistory(help_string);
+ web_browser->navigateTo(url_string);
+}
+
+void LLScriptEdCore::addHelpItemToHistory(const LLString& help_string)
+{
+ if (help_string.empty()) return;
+
+ LLFloater* help_floater = LLFloater::getFloaterByHandle(mLiveHelpHandle);
+ if (!help_floater) return;
+
+ LLComboBox* history_combo = gUICtrlFactory->getComboBoxByName(help_floater, "history_combo");
+ if (!history_combo) return;
+
+ // separate history items from full item list
+ if (mLiveHelpHistorySize == 0)
+ {
+ LLSD row;
+ row["columns"][0]["type"] = "separator";
+ history_combo->addElement(row, ADD_TOP);
+ }
+ // delete all history items over history limit
+ while(mLiveHelpHistorySize > MAX_HISTORY_COUNT - 1)
+ {
+ history_combo->remove(mLiveHelpHistorySize - 1);
+ mLiveHelpHistorySize--;
+ }
+
+ history_combo->setSimple(help_string);
+ S32 index = history_combo->getCurrentIndex();
+
+ // if help string exists in the combo box
+ if (index >= 0)
+ {
+ S32 cur_index = history_combo->getCurrentIndex();
+ if (cur_index < mLiveHelpHistorySize)
+ {
+ // item found in history, bubble up to top
+ history_combo->remove(history_combo->getCurrentIndex());
+ mLiveHelpHistorySize--;
+ }
+ }
+ history_combo->add(help_string, LLSD(help_string), ADD_TOP);
+ history_combo->selectFirstItem();
+ mLiveHelpHistorySize++;
+}
+
BOOL LLScriptEdCore::canClose()
{
if(mForceClose || mEditor->isPristine())
@@ -517,6 +653,92 @@ void LLScriptEdCore::onBtnHelp(void* userdata)
}
// static
+void LLScriptEdCore::onBtnDynamicHelp(void* userdata)
+{
+ LLScriptEdCore* corep = (LLScriptEdCore*)userdata;
+
+ LLFloater* live_help_floater = LLFloater::getFloaterByHandle(corep->mLiveHelpHandle);
+ if (live_help_floater)
+ {
+ live_help_floater->setFocus(TRUE);
+ corep->updateDynamicHelp(TRUE);
+
+ return;
+ }
+
+ live_help_floater = new LLFloater("lsl_help");
+ gUICtrlFactory->buildFloater(live_help_floater, "floater_lsl_guide.xml");
+ ((LLFloater*)corep->getParent())->addDependentFloater(live_help_floater, TRUE);
+ live_help_floater->childSetCommitCallback("lock_check", onCheckLock, userdata);
+ live_help_floater->childSetValue("lock_check", gSavedSettings.getBOOL("ScriptHelpFollowsCursor"));
+ live_help_floater->childSetCommitCallback("history_combo", onHelpComboCommit, userdata);
+ live_help_floater->childSetAction("back_btn", onClickBack, userdata);
+ live_help_floater->childSetAction("fwd_btn", onClickForward, userdata);
+
+ LLWebBrowserCtrl* browser = LLUICtrlFactory::getWebBrowserCtrlByName(live_help_floater, "lsl_guide_html");
+ browser->setAlwaysRefresh(TRUE);
+
+ LLComboBox* help_combo = LLUICtrlFactory::getComboBoxByName(live_help_floater, "history_combo");
+ LLKeywordToken *token;
+ LLKeywords::word_token_map_t::iterator token_it;
+ for (token_it = corep->mEditor->mKeywords.mWordTokenMap.begin();
+ token_it != corep->mEditor->mKeywords.mWordTokenMap.end();
+ ++token_it)
+ {
+ token = token_it->second;
+ help_combo->add(wstring_to_utf8str(token->mToken));
+ }
+ help_combo->sortByName();
+
+ // re-initialize help variables
+ corep->mLastHelpToken = NULL;
+ corep->mLiveHelpHandle = live_help_floater->getHandle();
+ corep->mLiveHelpHistorySize = 0;
+ corep->updateDynamicHelp(TRUE);
+}
+
+//static
+void LLScriptEdCore::onClickBack(void* userdata)
+{
+ LLScriptEdCore* corep = (LLScriptEdCore*)userdata;
+ LLFloater* live_help_floater = LLFloater::getFloaterByHandle(corep->mLiveHelpHandle);
+ if (live_help_floater)
+ {
+ LLWebBrowserCtrl* browserp = LLUICtrlFactory::getWebBrowserCtrlByName(live_help_floater, "lsl_guide_html");
+ if (browserp)
+ {
+ browserp->navigateBack();
+ }
+ }
+}
+
+//static
+void LLScriptEdCore::onClickForward(void* userdata)
+{
+ LLScriptEdCore* corep = (LLScriptEdCore*)userdata;
+ LLFloater* live_help_floater = LLFloater::getFloaterByHandle(corep->mLiveHelpHandle);
+ if (live_help_floater)
+ {
+ LLWebBrowserCtrl* browserp = LLUICtrlFactory::getWebBrowserCtrlByName(live_help_floater, "lsl_guide_html");
+ if (browserp)
+ {
+ browserp->navigateForward();
+ }
+ }
+}
+
+// static
+void LLScriptEdCore::onCheckLock(LLUICtrl* ctrl, void* userdata)
+{
+ LLScriptEdCore* corep = (LLScriptEdCore*)userdata;
+
+ // clear out token any time we lock the frame, so we will refresh web page immediately when unlocked
+ gSavedSettings.setBOOL("ScriptHelpFollowsCursor", ctrl->getValue().asBoolean());
+
+ corep->mLastHelpToken = NULL;
+}
+
+// static
void LLScriptEdCore::onBtnInsertSample(void* userdata)
{
LLScriptEdCore* self = (LLScriptEdCore*) userdata;
@@ -528,6 +750,27 @@ void LLScriptEdCore::onBtnInsertSample(void* userdata)
}
// static
+void LLScriptEdCore::onHelpComboCommit(LLUICtrl* ctrl, void* userdata)
+{
+ LLScriptEdCore* corep = (LLScriptEdCore*)userdata;
+
+ LLFloater* live_help_floater = LLFloater::getFloaterByHandle(corep->mLiveHelpHandle);
+ if (live_help_floater)
+ {
+ LLWebBrowserCtrl* web_browser = gUICtrlFactory->getWebBrowserCtrlByName(live_help_floater, "lsl_guide_html");
+
+ LLString help_string = ctrl->getValue().asString();
+
+ corep->addHelpItemToHistory(help_string);
+
+ LLUIString url_string = gSavedSettings.getString("LSLHelpURL");
+ url_string.setArg("[APP_DIRECTORY]", gDirUtilp->getWorkingDir());
+ url_string.setArg("[LSL_STRING]", help_string);
+ web_browser->navigateTo(url_string);
+ }
+}
+
+// static
void LLScriptEdCore::onBtnInsertFunction(LLUICtrl *ui, void* userdata)
{
LLScriptEdCore* self = (LLScriptEdCore*) userdata;
@@ -538,6 +781,7 @@ void LLScriptEdCore::onBtnInsertFunction(LLUICtrl *ui, void* userdata)
self->mEditor->insertText(self->mFunctions->getSimple());
}
self->mEditor->setFocus(TRUE);
+ self->setHelpPage(self->mFunctions->getSimple());
}
// static
@@ -878,15 +1122,14 @@ void LLPreviewLSL::callbackLSLCompileFailed(const LLSD& compile_errors)
{
llinfos << "Compile failed!" << llendl;
- const LLFontGL* err_font = gResMgr->getRes(LLFONT_OCRA);
- LLScrollListItem* item = NULL;
for(LLSD::array_const_iterator line = compile_errors.beginArray();
line < compile_errors.endArray();
line++)
{
- item = new LLScrollListItem();
- item->addColumn(line->asString(), err_font);
- mScriptEd->mErrorList->addItem(item);
+ LLSD row;
+ row["columns"][0]["value"] = line->asString();
+ row["columns"][0]["font"] = "OCRA";
+ mScriptEd->mErrorList->addElement(row);
}
mScriptEd->selectFirstError();
closeIfNeeded();
@@ -1011,9 +1254,11 @@ void LLPreviewLSL::saveIfNeeded()
if(!fp)
{
llwarns << "Unable to write to " << filename << llendl;
- LLScrollListItem* item = new LLScrollListItem();
- item->addColumn("Error writing to local file. Is your hard drive full?", LLFontGL::sSansSerifSmall);
- mScriptEd->mErrorList->addItem(item);
+
+ LLSD row;
+ row["columns"][0]["value"] = "Error writing to local file. Is your hard drive full?";
+ row["columns"][0]["font"] = "SANSSERIF_SMALL";
+ mScriptEd->mErrorList->addElement(row);
return;
}
@@ -1068,8 +1313,6 @@ void LLPreviewLSL::uploadAssetLegacy(const std::string& filename,
std::string dst_filename = llformat("%s.lso", filepath.c_str());
std::string err_filename = llformat("%s.out", filepath.c_str());
- LLScrollListItem* item = NULL;
- const LLFontGL* err_font = gResMgr->getRes(LLFONT_OCRA);
if(!lscript_compile(filename.c_str(),
dst_filename.c_str(),
err_filename.c_str(),
@@ -1101,9 +1344,11 @@ void LLPreviewLSL::uploadAssetLegacy(const std::string& filename,
{
line.assign(buffer);
LLString::stripNonprintable(line);
- item = new LLScrollListItem();
- item->addColumn(line, err_font);
- mScriptEd->mErrorList->addItem(item);
+
+ LLSD row;
+ row["columns"][0]["value"] = line;
+ row["columns"][0]["font"] = "OCRA";
+ mScriptEd->mErrorList->addElement(row);
}
}
fclose(fp);
@@ -1195,9 +1440,10 @@ void LLPreviewLSL::onSaveBytecodeComplete(const LLUUID& asset_uuid, void* user_d
{
if (self)
{
- LLScrollListItem* item = new LLScrollListItem();
- item->addColumn("Compile successful!", LLFontGL::sSansSerifSmall);
- self->mScriptEd->mErrorList->addItem(item);
+ LLSD row;
+ row["columns"][0]["value"] = "Compile successful!";
+ row["columns"][0]["font"] = "SANSSERIF_SMALL";
+ self->mScriptEd->mErrorList->addElement(row);
// Find our window and close it if requested.
self->getWindow()->decBusyCount();
@@ -1418,15 +1664,14 @@ void LLLiveLSLEditor::callbackLSLCompileSucceeded(const LLUUID& task_id,
void LLLiveLSLEditor::callbackLSLCompileFailed(const LLSD& compile_errors)
{
lldebugs << "Compile failed!" << llendl;
- const LLFontGL* err_font = gResMgr->getRes(LLFONT_OCRA);
- LLScrollListItem* item = NULL;
for(LLSD::array_const_iterator line = compile_errors.beginArray();
line < compile_errors.endArray();
line++)
{
- item = new LLScrollListItem();
- item->addColumn(line->asString(), err_font);
- mScriptEd->mErrorList->addItem(item);
+ LLSD row;
+ row["columns"][0]["value"] = line->asString();
+ row["columns"][0]["font"] = "OCRA";
+ mScriptEd->mErrorList->addElement(row);
}
mScriptEd->selectFirstError();
closeIfNeeded();
@@ -1788,9 +2033,11 @@ void LLLiveLSLEditor::saveIfNeeded()
if(!fp)
{
llwarns << "Unable to write to " << filename << llendl;
- LLScrollListItem* item = new LLScrollListItem();
- item->addColumn("Error writing to local file. Is your hard drive full?", LLFontGL::sSansSerifSmall);
- mScriptEd->mErrorList->addItem(item);
+
+ LLSD row;
+ row["columns"][0]["value"] = "Error writing to local file. Is your hard drive full?";
+ row["columns"][0]["font"] = "SANSSERIF_SMALL";
+ mScriptEd->mErrorList->addElement(row);
return;
}
LLString utf8text = mScriptEd->mEditor->getText();
@@ -1848,8 +2095,6 @@ void LLLiveLSLEditor::uploadAssetLegacy(const std::string& filename,
std::string dst_filename = llformat("%s.lso", filepath.c_str());
std::string err_filename = llformat("%s.out", filepath.c_str());
- LLScrollListItem* item = NULL;
- const LLFontGL* err_font = gResMgr->getRes(LLFONT_OCRA);
FILE *fp;
if(!lscript_compile(filename.c_str(),
dst_filename.c_str(),
@@ -1878,9 +2123,11 @@ void LLLiveLSLEditor::uploadAssetLegacy(const std::string& filename,
{
line.assign(buffer);
LLString::stripNonprintable(line);
- item = new LLScrollListItem();
- item->addColumn(line, err_font);
- mScriptEd->mErrorList->addItem(item);
+
+ LLSD row;
+ row["columns"][0]["value"] = line;
+ row["columns"][0]["font"] = "OCRA";
+ mScriptEd->mErrorList->addElement(row);
}
}
fclose(fp);
diff --git a/linden/indra/newview/llpreviewscript.h b/linden/indra/newview/llpreviewscript.h
index cdc4df8..4aadc8b 100644
--- a/linden/indra/newview/llpreviewscript.h
+++ b/linden/indra/newview/llpreviewscript.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -34,6 +35,7 @@
#include "llinventory.h"
#include "llcombobox.h"
#include "lliconctrl.h"
+#include "llframetimer.h"
class LLMessageSystem;
@@ -45,6 +47,7 @@ class LLViewerObject;
struct LLEntryAndEdCore;
class LLMenuBarGL;
class LLFloaterScriptSearch;
+class LLKeywordToken;
// Inner, implementation class. LLPreviewScript and LLLiveScriptEditor each own one of these.
class LLScriptEdCore : public LLPanel
@@ -79,6 +82,11 @@ public:
static void onHelpWebDialog(S32 option, void* userdata);
static void onBtnHelp(void* userdata);
+ static void onBtnDynamicHelp(void* userdata);
+ static void onCheckLock(LLUICtrl*, void*);
+ static void onHelpComboCommit(LLUICtrl* ctrl, void* userdata);
+ static void onClickBack(void* userdata);
+ static void onClickForward(void* userdata);
static void onBtnInsertSample(void*);
static void onBtnInsertFunction(LLUICtrl*, void*);
static void doSave( void* userdata, BOOL close_after_save );
@@ -110,6 +118,9 @@ public:
protected:
void deleteBridges();
+ void setHelpPage(const LLString& help_string);
+ void updateDynamicHelp(BOOL immediate = FALSE);
+ void addHelpItemToHistory(const LLString& help_string);
static void onErrorList(LLUICtrl*, void* user_data);
@@ -126,6 +137,10 @@ private:
LLPanel* mCodePanel;
LLScrollListCtrl* mErrorList;
LLDynamicArray mBridges;
+ LLViewHandle mLiveHelpHandle;
+ LLKeywordToken* mLastHelpToken;
+ LLFrameTimer mLiveHelpTimer;
+ S32 mLiveHelpHistorySize;
};
diff --git a/linden/indra/newview/llpreviewsound.cpp b/linden/indra/newview/llpreviewsound.cpp
index 10130db..63a8226 100644
--- a/linden/indra/newview/llpreviewsound.cpp
+++ b/linden/indra/newview/llpreviewsound.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpreviewsound.h b/linden/indra/newview/llpreviewsound.h
index ef8c44f..38b34d0 100644
--- a/linden/indra/newview/llpreviewsound.h
+++ b/linden/indra/newview/llpreviewsound.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llpreviewtexture.cpp b/linden/indra/newview/llpreviewtexture.cpp
index 99d0959..27a9b52 100644
--- a/linden/indra/newview/llpreviewtexture.cpp
+++ b/linden/indra/newview/llpreviewtexture.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -476,7 +477,7 @@ void LLPreviewTexture::updateAspectRatio()
void LLPreviewTexture::loadAsset()
{
- mImage = gImageList.getImage(mImageID, MIPMAP_FALSE, FALSE);
+ mImage = gImageList.getImage(mImageID, MIPMAP_TRUE, FALSE);
mImage->setBoostLevel(LLViewerImage::BOOST_PREVIEW);
mAssetStatus = PREVIEW_ASSET_LOADING;
}
diff --git a/linden/indra/newview/llpreviewtexture.h b/linden/indra/newview/llpreviewtexture.h
index 1ee69f4..4749dc2 100644
--- a/linden/indra/newview/llpreviewtexture.h
+++ b/linden/indra/newview/llpreviewtexture.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llprogressview.cpp b/linden/indra/newview/llprogressview.cpp
index dd75c3f..71a1d66 100644
--- a/linden/indra/newview/llprogressview.cpp
+++ b/linden/indra/newview/llprogressview.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -61,7 +62,7 @@ const S32 ANIMATION_FRAMES = 1; //13;
// XUI:translate
LLProgressView::LLProgressView(const std::string& name, const LLRect &rect)
-: LLView(name, rect, TRUE)
+: LLPanel(name, rect, FALSE)
{
mPercentDone = 0.f;
mDrawBackground = TRUE;
@@ -138,7 +139,7 @@ void LLProgressView::setVisible(BOOL visible)
}
else if (!getVisible() && visible)
{
- gFocusMgr.setTopView(this, NULL);
+ gFocusMgr.setTopCtrl(this);
mFadeTimer.stop();
mProgressTimer.start();
LLView::setVisible(visible);
@@ -202,7 +203,7 @@ void LLProgressView::draw()
LLView::draw();
if (mFadeTimer.getElapsedTimeF32() > FADE_IN_TIME)
{
- gFocusMgr.removeTopViewWithoutCallback(this);
+ gFocusMgr.removeTopCtrlWithoutCallback(this);
LLView::setVisible(FALSE);
gStartImageGL = NULL;
}
diff --git a/linden/indra/newview/llprogressview.h b/linden/indra/newview/llprogressview.h
index 6c10b0b..ae0ae72 100644
--- a/linden/indra/newview/llprogressview.h
+++ b/linden/indra/newview/llprogressview.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -28,13 +29,13 @@
#ifndef LL_LLPROGRESSVIEW_H
#define LL_LLPROGRESSVIEW_H
-#include "llview.h"
+#include "llpanel.h"
#include "llframetimer.h"
class LLImageRaw;
class LLButton;
-class LLProgressView : public LLView
+class LLProgressView : public LLPanel
{
public:
LLProgressView(const std::string& name, const LLRect& rect);
diff --git a/linden/indra/newview/llregionposition.cpp b/linden/indra/newview/llregionposition.cpp
index 8404ad0..dff6d72 100644
--- a/linden/indra/newview/llregionposition.cpp
+++ b/linden/indra/newview/llregionposition.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llregionposition.h b/linden/indra/newview/llregionposition.h
index 41d83ff..bbe8472 100644
--- a/linden/indra/newview/llregionposition.h
+++ b/linden/indra/newview/llregionposition.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llroam.cpp b/linden/indra/newview/llroam.cpp
index b1a993c..8f45c79 100644
--- a/linden/indra/newview/llroam.cpp
+++ b/linden/indra/newview/llroam.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llroam.h b/linden/indra/newview/llroam.h
index 0202332..758df0e 100644
--- a/linden/indra/newview/llroam.h
+++ b/linden/indra/newview/llroam.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llsavedsettingsglue.cpp b/linden/indra/newview/llsavedsettingsglue.cpp
index 5b0ae56..6b42c73 100644
--- a/linden/indra/newview/llsavedsettingsglue.cpp
+++ b/linden/indra/newview/llsavedsettingsglue.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llsavedsettingsglue.h b/linden/indra/newview/llsavedsettingsglue.h
index 2f850e4..398cac0 100644
--- a/linden/indra/newview/llsavedsettingsglue.h
+++ b/linden/indra/newview/llsavedsettingsglue.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llselectmgr.cpp b/linden/indra/newview/llselectmgr.cpp
index 4e0cb17..598ded9 100644
--- a/linden/indra/newview/llselectmgr.cpp
+++ b/linden/indra/newview/llselectmgr.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -51,7 +52,6 @@
#include "lldrawable.h"
#include "llfloaterinspect.h"
#include "llfloaterproperties.h"
-#include "llfloaterrate.h"
#include "llfloaterreporter.h"
#include "llfloatertools.h"
#include "llframetimer.h"
@@ -152,8 +152,8 @@ struct LLDeRezInfo
LLObjectSelection* get_null_object_selection()
{
- static LLObjectSelectionHandle null_ptr(new LLObjectSelection());
- return (LLObjectSelection*)null_ptr;
+ static LLObjectSelection null_selection;
+ return &null_selection;;
}
@@ -561,7 +561,7 @@ void LLSelectMgr::deselectObjectAndFamily(LLViewerObject* object, BOOL send_to_s
msg->addU32Fast(_PREHASH_ObjectLocalID, (objects[i])->getLocalID());
select_count++;
- if(msg->mCurrentSendTotal >= MTUBYTES || select_count >= MAX_OBJECTS_PER_PACKET)
+ if(msg->isSendFull(NULL) || select_count >= MAX_OBJECTS_PER_PACKET)
{
msg->sendReliable(regionp->getHost() );
select_count = 0;
@@ -2078,7 +2078,7 @@ void LLSelectMgr::packGodlikeHead(void* user_data)
void LLSelectMgr::packObjectIDAsParam(LLSelectNode* node, void *)
{
char buf [MAX_STRING]; /* Flawfinder: ignore */
- snprintf(buf, MAX_STRING, "%u", node->getObject()->getLocalID()); /* Flawfinder: ignore */
+ snprintf(buf, MAX_STRING, "%u", node->getObject()->getLocalID()); /* Flawfinder: ignore */
gMessageSystem->nextBlock("ParamList");
gMessageSystem->addString("Parameter", buf);
}
@@ -4198,7 +4198,7 @@ void LLSelectMgr::sendListToRegions(const LLString& message_name,
// if to same simulator and message not too big
if ((current_region == last_region)
- && (gMessageSystem->mCurrentSendTotal < MTUBYTES)
+ && (! gMessageSystem->isSendFull(NULL))
&& (objects_in_this_packet < MAX_OBJECTS_PER_PACKET))
{
// add another instance of the body of the data
@@ -4233,7 +4233,7 @@ void LLSelectMgr::sendListToRegions(const LLString& message_name,
}
// flush messages
- if (gMessageSystem->mCurrentSendTotal > 0)
+ if (gMessageSystem->getCurrentSendTotal() > 0)
{
gMessageSystem->sendReliable( current_region->getHost());
packets_sent++;
@@ -5164,7 +5164,8 @@ void LLSelectNode::saveTextureScaleRatios()
F32 s,t;
const LLTextureEntry* tep = mObject->getTE(i);
tep->getScale(&s,&t);
- U32 s_axis, t_axis;
+ U32 s_axis = 0;
+ U32 t_axis = 0;
gSelectMgr->getTESTAxes(mObject, i, &s_axis, &t_axis);
@@ -6238,7 +6239,6 @@ BOOL LLObjectSelection::getOwnershipCost(S32 &cost)
}
-
//-----------------------------------------------------------------------------
// getObjectCount()
//-----------------------------------------------------------------------------
@@ -6574,3 +6574,4 @@ LLViewerObject* LLObjectSelection::getFirstMoveableObject(BOOL get_root)
return object;
}
+
diff --git a/linden/indra/newview/llselectmgr.h b/linden/indra/newview/llselectmgr.h
index 4b9a550..98c0a7b 100644
--- a/linden/indra/newview/llselectmgr.h
+++ b/linden/indra/newview/llselectmgr.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llsky.cpp b/linden/indra/newview/llsky.cpp
index 2888d95..40cc532 100644
--- a/linden/indra/newview/llsky.cpp
+++ b/linden/indra/newview/llsky.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llsky.h b/linden/indra/newview/llsky.h
index 7e39311..f6acb1d 100644
--- a/linden/indra/newview/llsky.h
+++ b/linden/indra/newview/llsky.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llspatialpartition.cpp b/linden/indra/newview/llspatialpartition.cpp
index 24ac1ca..46b9df9 100644
--- a/linden/indra/newview/llspatialpartition.cpp
+++ b/linden/indra/newview/llspatialpartition.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -145,7 +146,7 @@ LLSpatialGroup::~LLSpatialGroup()
{
sZombieGroups--;
}
-
+
LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION);
clearDrawMap();
}
@@ -216,10 +217,34 @@ void LLSpatialGroup::validate()
#if LL_OCTREE_PARANOIA_CHECK
sg_assert(!isState(DIRTY));
+ sg_assert(!isDead());
LLVector3 myMin = mBounds[0] - mBounds[1];
LLVector3 myMax = mBounds[0] + mBounds[1];
+ validateDrawMap();
+
+ for (element_iter i = getData().begin(); i != getData().end(); ++i)
+ {
+ LLDrawable* drawable = *i;
+ sg_assert(drawable->getSpatialGroup() == this);
+ if (drawable->getSpatialBridge())
+ {
+ sg_assert(drawable->getSpatialBridge() == mSpatialPartition->asBridge());
+ }
+
+ if (drawable->isSpatialBridge())
+ {
+ LLSpatialPartition* part = drawable->asPartition();
+ if (!part)
+ {
+ llerrs << "Drawable reports it is a spatial bridge but not a partition." << llendl;
+ }
+ LLSpatialGroup* group = (LLSpatialGroup*) part->mOctree->getListener(0);
+ group->validate();
+ }
+ }
+
for (U32 i = 0; i < mOctreeNode->getChildCount(); ++i)
{
LLSpatialGroup* group = (LLSpatialGroup*) mOctreeNode->getChild(i)->getListener(0);
@@ -245,8 +270,8 @@ void LLSpatialGroup::validate()
void validate_draw_info(LLDrawInfo& params)
{
-#if LL_DEBUG
-/* if (params.mVertexBuffer.isNull())
+#if LL_OCTREE_PARANOIA_CHECK
+ if (params.mVertexBuffer.isNull())
{
llerrs << "Draw batch has no vertex buffer." << llendl;
}
@@ -257,12 +282,12 @@ void validate_draw_info(LLDrawInfo& params)
llerrs << "Draw batch has invalid range." << llendl;
}
- if (params.mEnd >= params.mVertexBuffer->getNumVerts())
+ if (params.mEnd >= (U32) params.mVertexBuffer->getNumVerts())
{
llerrs << "Draw batch has buffer overrun error." << llendl;
}
- if (params.mOffset + params.mCount > params.mVertexBuffer->getNumIndices())
+ if (params.mOffset + params.mCount > (U32) params.mVertexBuffer->getNumIndices())
{
llerrs << "Draw batch has index buffer ovverrun error." << llendl;
}
@@ -283,13 +308,14 @@ void validate_draw_info(LLDrawInfo& params)
llerrs << "Draw batch has vertex buffer index out of range error (index too high)." << llendl;
}
}
- }*/
+ }
#endif
}
void LLSpatialGroup::validateDrawMap()
{
-/* for (draw_map_t::iterator i = mDrawMap.begin(); i != mDrawMap.end(); ++i)
+#if LL_OCTREE_PARANOIA_CHECK
+ for (draw_map_t::iterator i = mDrawMap.begin(); i != mDrawMap.end(); ++i)
{
std::vector& draw_vec = i->second;
for (std::vector::iterator j = draw_vec.begin(); j != draw_vec.end(); ++j)
@@ -298,7 +324,8 @@ void LLSpatialGroup::validateDrawMap()
validate_draw_info(params);
}
- }*/
+ }
+#endif
}
void LLSpatialGroup::makeStatic()
@@ -361,7 +388,7 @@ BOOL LLSpatialGroup::addObject(LLDrawable *drawablep, BOOL add_all, BOOL from_oc
}
else
{
- drawablep->setSpatialGroup(this, 0);
+ drawablep->setSpatialGroup(this);
validate_drawable(drawablep);
setState(OBJECT_DIRTY | GEOM_DIRTY);
mLastAddTime = gFrameTimeSeconds;
@@ -369,7 +396,10 @@ BOOL LLSpatialGroup::addObject(LLDrawable *drawablep, BOOL add_all, BOOL from_oc
{
mBridgeList.push_back((LLSpatialBridge*) drawablep);
}
- setState(IMAGE_DIRTY);
+ if (drawablep->getRadius() > 1.f)
+ {
+ setState(IMAGE_DIRTY);
+ }
}
return TRUE;
@@ -570,7 +600,7 @@ BOOL LLSpatialGroup::removeObject(LLDrawable *drawablep, BOOL from_octree)
}
else
{
- drawablep->setSpatialGroup(NULL, -1);
+ drawablep->setSpatialGroup(NULL);
setState(GEOM_DIRTY);
if (drawablep->isSpatialBridge())
{
@@ -883,6 +913,16 @@ void LLSpatialGroup::handleDestruction(const TreeNode* node)
{
LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION);
setState(DEAD);
+
+ for (element_iter i = getData().begin(); i != getData().end(); ++i)
+ {
+ LLDrawable* drawable = *i;
+ if (drawable->getSpatialGroup() == this)
+ {
+ drawable->setSpatialGroup(NULL);
+ }
+ }
+
clearDrawMap();
mOcclusionVerts = NULL;
mVertexBuffer = NULL;
@@ -1124,7 +1164,7 @@ BOOL LLSpatialPartition::remove(LLDrawable *drawablep, LLSpatialGroup *curp)
{
LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION);
- drawablep->setSpatialGroup(NULL, -1);
+ drawablep->setSpatialGroup(NULL);
if (!curp->removeObject(drawablep))
{
@@ -1676,8 +1716,9 @@ void LLSpatialPartition::processImagery(LLCamera* camera)
gPipeline.mCubeBuffer->initGL();
}
+ S32 res = gSavedSettings.getS32("RenderReflectionRes");
gPipeline.generateReflectionMap(gPipeline.mCubeBuffer, cube_cam, 128);
- gPipeline.blurReflectionMap(gPipeline.mCubeBuffer, cube_map, 64);
+ gPipeline.blurReflectionMap(gPipeline.mCubeBuffer, cube_map, res);
group->mReflectionMap = cube_map;
group->setState(LLSpatialGroup::GEOM_DIRTY);
}
@@ -2152,7 +2193,7 @@ void LLSpatialPartition::doOcclusion(LLCamera* camera)
glFlush();
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
}
class LLOctreeGet : public LLSpatialGroup::OctreeTraveler
diff --git a/linden/indra/newview/llspatialpartition.h b/linden/indra/newview/llspatialpartition.h
index 5804a57..5f6d257 100644
--- a/linden/indra/newview/llspatialpartition.h
+++ b/linden/indra/newview/llspatialpartition.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llsphere.cpp b/linden/indra/newview/llsphere.cpp
index 5c49e6e..3457e0e 100644
--- a/linden/indra/newview/llsphere.cpp
+++ b/linden/indra/newview/llsphere.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llsphere.h b/linden/indra/newview/llsphere.h
index 5f888ed..29b42ab 100644
--- a/linden/indra/newview/llsphere.h
+++ b/linden/indra/newview/llsphere.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llsprite.cpp b/linden/indra/newview/llsprite.cpp
index fb56f4d..28ace97 100644
--- a/linden/indra/newview/llsprite.cpp
+++ b/linden/indra/newview/llsprite.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llsprite.h b/linden/indra/newview/llsprite.h
index a9de306..7ccef73 100644
--- a/linden/indra/newview/llsprite.h
+++ b/linden/indra/newview/llsprite.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp
index 2fe1190..585f769 100644
--- a/linden/indra/newview/llstartup.cpp
+++ b/linden/indra/newview/llstartup.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -54,6 +55,7 @@
#include "llloginflags.h"
#include "llmd5.h"
#include "llmemorystream.h"
+#include "llmessageconfig.h"
#include "llregionhandle.h"
#include "llsd.h"
#include "llsdserialize.h"
@@ -86,7 +88,6 @@
#include "llfloatergesture.h"
#include "llfloaterland.h"
#include "llfloatertopobjects.h"
-#include "llfloaterrate.h"
#include "llfloatertos.h"
#include "llfloaterworldmap.h"
#include "llframestats.h"
@@ -127,6 +128,7 @@
#include "llviewerassetstorage.h"
#include "llviewercamera.h"
#include "llviewerdisplay.h"
+#include "llviewergenericmessage.h"
#include "llviewergesture.h"
#include "llviewerimagelist.h"
#include "llviewermenu.h"
@@ -147,8 +149,8 @@
#include "viewer.h"
#include "llmediaengine.h"
#include "llfasttimerview.h"
+#include "llfloatermap.h"
#include "llweb.h"
-#include "llfloaterhtml.h"
#if LL_LIBXUL_ENABLED
#include "llmozlib.h"
@@ -233,7 +235,7 @@ void callback_choose_gender(S32 option, void* userdata);
void init_start_screen(S32 location_id);
void release_start_screen();
void process_connect_to_userserver(LLMessageSystem* msg, void**);
-
+void reset_login();
//
// exported functionality
@@ -347,13 +349,16 @@ BOOL idle_startup()
{
gViewerWindow->alertXml("DisplaySetToSafe");
}
- else if (gSavedSettings.getS32("LastFeatureVersion") < gFeatureManagerp->getVersion())
+ else if ((gSavedSettings.getS32("LastFeatureVersion") < gFeatureManagerp->getVersion()) &&
+ (gSavedSettings.getS32("LastFeatureVersion") != 0))
{
- if (gSavedSettings.getS32("LastFeatureVersion") != 0)
- {
- gViewerWindow->alertXml("DisplaySetToRecommended");
- }
+ gViewerWindow->alertXml("DisplaySetToRecommended");
+ }
+ else if (!gViewerWindow->getInitAlert().empty())
+ {
+ gViewerWindow->alertXml(gViewerWindow->getInitAlert());
}
+
gSavedSettings.setS32("LastFeatureVersion", gFeatureManagerp->getVersion());
LLString xml_file = LLUI::locateSkin("xui_version.xml");
@@ -414,6 +419,7 @@ BOOL idle_startup()
port = gSavedSettings.getU32("ConnectionPort");
}
+ LLMessageConfig::initClass("viewer", gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, ""));
if(!start_messaging_system(
message_template_path,
port,
@@ -522,12 +528,11 @@ BOOL idle_startup()
// the locale to protect it, as exotic/non-C locales
// causes our code lots of general critical weirdness
// and crashness. (SL-35450)
- char *saved_locale = setlocale(LC_ALL, NULL);
+ std::string saved_locale = setlocale(LC_ALL, NULL);
#endif // LL_LINUX
LLMozLib::getInstance()->init( profileBaseDir, gDirUtilp->getExpandedFilename( LL_PATH_MOZILLA_PROFILE, "" ) );
#if LL_LINUX
- if (saved_locale)
- setlocale(LC_ALL, saved_locale);
+ setlocale(LC_ALL, saved_locale.c_str() );
#endif // LL_LINUX
std::ostringstream codec;
@@ -768,7 +773,7 @@ BOOL idle_startup()
if (gUserServerChoice == USERSERVER_OTHER)
{
gUserServer.setHostByName( server_label.c_str() );
- snprintf(gUserServerName, MAX_STRING, "%s", server_label.c_str()); /* Flawfinder: ignore */
+ snprintf(gUserServerName, MAX_STRING, "%s", server_label.c_str()); /* Flawfinder: ignore */
}
}
@@ -875,7 +880,7 @@ BOOL idle_startup()
args["[HOST_NAME]"] = host_name;
gViewerWindow->alertXml("UnableToConnect", args, login_alert_done );
- gStartupState = STATE_LOGIN_SHOW;
+ reset_login();
return FALSE;
}
break;
@@ -912,7 +917,7 @@ BOOL idle_startup()
login_alert_status, NULL);
// Back up to login screen
- gStartupState = STATE_LOGIN_SHOW;
+ reset_login();
gViewerStats->incStat(LLViewerStats::ST_LOGIN_TIMEOUT_COUNT);
}
ms_sleep(1);
@@ -928,7 +933,7 @@ BOOL idle_startup()
gViewerWindow->alertXml("PleaseSelectServer", args, login_alert_done );
- gStartupState = STATE_LOGIN_SHOW;
+ reset_login();
return FALSE;
}
@@ -958,16 +963,7 @@ BOOL idle_startup()
}
llinfos << "Verifying message template..." << llendl;
-
- // register with the message system so it knows we're
- // expecting this message
- LLMessageSystem* msg = gMessageSystem;
- msg->setHandlerFuncFast(_PREHASH_TemplateChecksumReply, null_message_callback, NULL);
- msg->newMessageFast(_PREHASH_SecuredTemplateChecksumRequest);
- msg->nextBlockFast(_PREHASH_TokenBlock);
- lldebugs << "random token: " << gTemplateToken << llendl;
- msg->addUUIDFast(_PREHASH_Token, gTemplateToken);
- msg->sendReliable(mt_host);
+ LLMessageSystem::sendSecureMessageTemplateChecksum(mt_host);
timeout.reset();
gStartupState++;
@@ -976,40 +972,16 @@ BOOL idle_startup()
if (STATE_MESSAGE_TEMPLATE_WAIT == gStartupState)
{
- U32 remote_template_checksum = 0;
-
- U8 major_version = 0;
- U8 minor_version = 0;
- U8 patch_version = 0;
- U8 server_version = 0;
- U32 flags = 0x0;
-
LLMessageSystem* msg = gMessageSystem;
- while (msg->checkMessages(gFrameCount))
+ while (msg->checkAllMessages(gFrameCount, gServicePump))
{
- if (msg->isMessageFast(_PREHASH_TemplateChecksumReply))
+ if (msg->isTemplateConfirmed())
{
- LLUUID token;
- msg->getUUID("TokenBlock", "Token", token);
- if(token != gTemplateToken)
- {
- llwarns << "Incorrect token in template checksum reply: "
- << token << llendl;
- return do_normal_idle;
- }
- msg->getU32("DataBlock", "Checksum", remote_template_checksum);
- msg->getU8 ("DataBlock", "MajorVersion", major_version);
- msg->getU8 ("DataBlock", "MinorVersion", minor_version);
- msg->getU8 ("DataBlock", "PatchVersion", patch_version);
- msg->getU8 ("DataBlock", "ServerVersion", server_version);
- msg->getU32("DataBlock", "Flags", flags);
-
BOOL update_available = FALSE;
BOOL mandatory = FALSE;
- if (remote_template_checksum != msg->mMessageFileChecksum)
+ if (!LLMessageSystem::doesTemplateMatch())
{
- llinfos << "Message template out of sync" << llendl;
// Mandatory update -- message template checksum doesn't match
update_available = TRUE;
mandatory = TRUE;
@@ -1029,6 +1001,7 @@ BOOL idle_startup()
quit = TRUE;
}
}
+
// Bail out and clean up circuit
if (quit)
{
@@ -1039,7 +1012,6 @@ BOOL idle_startup()
}
// If we get here, we've got a compatible message template
-
if (!mandatory)
{
llinfos << "Message template is current!" << llendl;
@@ -1076,7 +1048,7 @@ BOOL idle_startup()
NULL);
// Back up to login screen
- gStartupState = STATE_LOGIN_SHOW;
+ reset_login();
gViewerStats->incStat(LLViewerStats::ST_LOGIN_TIMEOUT_COUNT);
}
else
@@ -1206,7 +1178,7 @@ BOOL idle_startup()
}
// Process messages to keep from dropping circuit.
LLMessageSystem* msg = gMessageSystem;
- while (msg->checkMessages(gFrameCount))
+ while (msg->checkAllMessages(gFrameCount, gServicePump))
{
}
msg->processAcks();
@@ -1231,7 +1203,7 @@ BOOL idle_startup()
}
// Process messages to keep from dropping circuit.
LLMessageSystem* msg = gMessageSystem;
- while (msg->checkMessages(gFrameCount))
+ while (msg->checkAllMessages(gFrameCount, gServicePump))
{
}
msg->processAcks();
@@ -1622,7 +1594,7 @@ BOOL idle_startup()
LLStringBase::format_map_t args;
args["[ERROR_MESSAGE]"] = emsg.str();
gViewerWindow->alertXml("ErrorMessage", args, login_alert_done);
- gStartupState = STATE_LOGIN_SHOW;
+ reset_login();
gAutoLogin = FALSE;
show_connect_box = TRUE;
}
@@ -1639,7 +1611,7 @@ BOOL idle_startup()
LLStringBase::format_map_t args;
args["[ERROR_MESSAGE]"] = emsg.str();
gViewerWindow->alertXml("ErrorMessage", args, login_alert_done);
- gStartupState = STATE_LOGIN_SHOW;
+ reset_login();
gAutoLogin = FALSE;
show_connect_box = TRUE;
}
@@ -1937,7 +1909,7 @@ BOOL idle_startup()
++gStartupState;
}
LLMessageSystem* msg = gMessageSystem;
- while (msg->checkMessages(gFrameCount))
+ while (msg->checkAllMessages(gFrameCount, gServicePump))
{
}
msg->processAcks();
@@ -1956,8 +1928,7 @@ BOOL idle_startup()
LLMessageSystem* msg = gMessageSystem;
msg->setHandlerFuncFast(
_PREHASH_AgentMovementComplete,
- process_agent_movement_complete,
- NULL);
+ process_agent_movement_complete);
LLViewerRegion* regionp = gAgent.getRegion();
if(!gRunLocal && regionp)
{
@@ -1994,9 +1965,9 @@ BOOL idle_startup()
if (STATE_AGENT_WAIT == gStartupState)
{
LLMessageSystem* msg = gMessageSystem;
- while (msg->checkMessages(gFrameCount))
+ while (msg->checkAllMessages(gFrameCount, gServicePump))
{
- if (msg->isMessageFast(_PREHASH_AgentMovementComplete))
+ if (gAgentMovementCompleted)
{
gStartupState++;
// Sometimes we have more than one message in the
@@ -2794,7 +2765,7 @@ void on_userserver_name_resolved( BOOL success, const LLString& host_name, U32 i
LLStringBase::format_map_t args;
args["[HOST_NAME]"] = host_name;
gViewerWindow->alertXml("SetByHostFail", args, login_alert_done );
- gStartupState = STATE_LOGIN_SHOW;
+ reset_login();
}
}
@@ -2896,7 +2867,7 @@ void update_dialog_callback(S32 option, void *userdata)
{
app_force_quit();
// Bump them back to the login screen.
- //gStartupState = STATE_LOGIN_SHOW;
+ //reset_login();
}
else
{
@@ -2904,7 +2875,21 @@ void update_dialog_callback(S32 option, void *userdata)
}
return;
}
-
+
+ LLSD query_map = LLSD::emptyMap();
+ // *TODO place os string in a global constant
+#if LL_WINDOWS
+ query_map["os"] = "win";
+#elif LL_DARWIN
+ query_map["os"] = "mac";
+#elif LL_LINUX
+ query_map["os"] = "lnx";
+#endif
+ query_map["userserver"] = gUserServerName;
+ query_map["channel"] = gChannelName;
+ // *TODO constantize this guy
+ LLURI update_url = LLURI::buildHTTP("secondlife.com", 80, "update.php", query_map);
+
#if LL_WINDOWS
char ip[MAX_STRING]; /* Flawfinder: ignore */
@@ -2936,9 +2921,6 @@ void update_dialog_callback(S32 option, void *userdata)
}
u32_to_ip_string(gUserServer.getAddress(), ip);
- std::ostringstream params;
- params << "-userserver " << gUserServerName;
-
// if a sim name was passed in via command line parameter (typically through a SLURL)
if ( LLURLSimString::sInstance.mSimString.length() )
{
@@ -2946,6 +2928,8 @@ void update_dialog_callback(S32 option, void *userdata)
gSavedSettings.setString( "NextLoginLocation", LLURLSimString::sInstance.mSimString );
};
+ std::ostringstream params;
+ params << "-url \"" << update_url.asString() << "\"";
if (gHideLinks)
{
// Figure out the program name.
@@ -2966,7 +2950,8 @@ void update_dialog_callback(S32 option, void *userdata)
program_name = "SecondLife";
}
- params << " -silent -name \"" << gSecondLife << "\" -program \"" << program_name << "\"";
+ params << " -silent -name \"" << gSecondLife << "\"";
+ params << " -program \"" << program_name << "\"";
}
llinfos << "Calling updater: " << update_exe_path << " " << params.str() << llendl;
@@ -2984,12 +2969,12 @@ void update_dialog_callback(S32 option, void *userdata)
// record the location to start at next time
gSavedSettings.setString( "NextLoginLocation", LLURLSimString::sInstance.mSimString );
};
-
+
update_exe_path = "'";
update_exe_path += gDirUtilp->getAppRODataDir();
- update_exe_path += "/AutoUpdater.app/Contents/MacOS/AutoUpdater' -userserver ";
- update_exe_path += gUserServerName;
- update_exe_path += " -name \"";
+ update_exe_path += "/AutoUpdater.app/Contents/MacOS/AutoUpdater' -url \"";
+ update_exe_path += update_url.asString();
+ update_exe_path += "\" -name \"";
update_exe_path += gSecondLife;
update_exe_path += "\" &";
@@ -3024,7 +3009,7 @@ void use_circuit_callback(void**, S32 result)
llinfos << "Backing up to login screen!" << llendl;
gViewerWindow->alertXml("LoginPacketNeverReceived",
login_alert_status, NULL);
- gStartupState = STATE_LOGIN_SHOW;
+ reset_login();
}
else
{
@@ -3117,8 +3102,9 @@ void register_viewer_callbacks(LLMessageSystem* msg)
LLPanelAvatar::processAvatarInterestsReply);
msg->setHandlerFunc("AvatarGroupsReply",
LLPanelAvatar::processAvatarGroupsReply);
- msg->setHandlerFuncFast(_PREHASH_AvatarStatisticsReply,
- LLPanelAvatar::processAvatarStatisticsReply);
+ // ratings deprecated
+ //msg->setHandlerFuncFast(_PREHASH_AvatarStatisticsReply,
+ // LLPanelAvatar::processAvatarStatisticsReply);
msg->setHandlerFunc("AvatarNotesReply",
LLPanelAvatar::processAvatarNotesReply);
msg->setHandlerFunc("AvatarPicksReply",
@@ -3137,8 +3123,9 @@ void register_viewer_callbacks(LLMessageSystem* msg)
msg->setHandlerFuncFast(_PREHASH_GroupProfileReply,
LLGroupMgr::processGroupPropertiesReply);
- msg->setHandlerFuncFast(_PREHASH_ReputationIndividualReply,
- LLFloaterRate::processReputationIndividualReply);
+ // ratings deprecated
+ // msg->setHandlerFuncFast(_PREHASH_ReputationIndividualReply,
+ // LLFloaterRate::processReputationIndividualReply);
msg->setHandlerFuncFast(_PREHASH_AgentWearablesUpdate,
LLAgent::processAgentInitialWearablesUpdate );
@@ -3146,9 +3133,6 @@ void register_viewer_callbacks(LLMessageSystem* msg)
msg->setHandlerFunc("ScriptControlChange",
LLAgent::processScriptControlChange );
- msg->setHandlerFuncFast(_PREHASH_GestureUpdate,
- LLViewerGestureList::processGestureUpdate);
-
msg->setHandlerFuncFast(_PREHASH_ViewerEffect, LLHUDManager::processViewerEffect);
msg->setHandlerFuncFast(_PREHASH_GrantGodlikePowers, process_grant_godlike_powers);
@@ -3945,4 +3929,9 @@ bool LLStartUp::canGoFullscreen()
return gStartupState >= STATE_WORLD_INIT;
}
+void reset_login()
+{
+ gStartupState = STATE_LOGIN_SHOW;
+ // do cleanup here of in-world UI?
+}
diff --git a/linden/indra/newview/llstartup.h b/linden/indra/newview/llstartup.h
index 26f5bc6..59a433e 100644
--- a/linden/indra/newview/llstartup.h
+++ b/linden/indra/newview/llstartup.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -80,6 +81,7 @@ enum EStartupState{
// exorted symbol
extern S32 gStartupState;
+extern BOOL gAgentMovementCompleted;
extern bool gQuickTimeInitialized;
extern LLPointer gStartImageGL;
diff --git a/linden/indra/newview/llstatbar.cpp b/linden/indra/newview/llstatbar.cpp
index 4b7067c..1a8734d 100644
--- a/linden/indra/newview/llstatbar.cpp
+++ b/linden/indra/newview/llstatbar.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llstatbar.h b/linden/indra/newview/llstatbar.h
index 161e454..c550b28 100644
--- a/linden/indra/newview/llstatbar.h
+++ b/linden/indra/newview/llstatbar.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llstatgraph.cpp b/linden/indra/newview/llstatgraph.cpp
index e85dc8d..ff43965 100644
--- a/linden/indra/newview/llstatgraph.cpp
+++ b/linden/indra/newview/llstatgraph.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -94,7 +95,7 @@ void LLStatGraph::draw()
char format_str[256]; /* Flawfinder: ignore */
char tmp_str[256]; /* Flawfinder: ignore */
snprintf(format_str, sizeof(format_str), "%%s%%.%df%%s", mPrecision); /* Flawfinder: ignore */
- sprintf(tmp_str, format_str, mLabel.c_str(), mValue, mUnits.c_str()); /* Flawfinder: ignore */
+ snprintf(tmp_str, sizeof(tmp_str), format_str, mLabel.c_str(), mValue, mUnits.c_str()); /* Flawfinder: ignore */
setToolTip(tmp_str);
mUpdateTimer.reset();
diff --git a/linden/indra/newview/llstatgraph.h b/linden/indra/newview/llstatgraph.h
index 158b33b..a74a79a 100644
--- a/linden/indra/newview/llstatgraph.h
+++ b/linden/indra/newview/llstatgraph.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llstatusbar.cpp b/linden/indra/newview/llstatusbar.cpp
index 22c0a2a..58ac8c2 100644
--- a/linden/indra/newview/llstatusbar.cpp
+++ b/linden/indra/newview/llstatusbar.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llstatusbar.h b/linden/indra/newview/llstatusbar.h
index d1f7d19..52cc236 100644
--- a/linden/indra/newview/llstatusbar.h
+++ b/linden/indra/newview/llstatusbar.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llstatview.cpp b/linden/indra/newview/llstatview.cpp
index 64ad5aa..7a39d96 100644
--- a/linden/indra/newview/llstatview.cpp
+++ b/linden/indra/newview/llstatview.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llstatview.h b/linden/indra/newview/llstatview.h
index 6d4d25b..3a885fa 100644
--- a/linden/indra/newview/llstatview.h
+++ b/linden/indra/newview/llstatview.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llsurface.cpp b/linden/indra/newview/llsurface.cpp
index 191c079..9674802 100644
--- a/linden/indra/newview/llsurface.cpp
+++ b/linden/indra/newview/llsurface.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llsurface.h b/linden/indra/newview/llsurface.h
index 73fe6e6..0306130 100644
--- a/linden/indra/newview/llsurface.h
+++ b/linden/indra/newview/llsurface.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llsurfacepatch.cpp b/linden/indra/newview/llsurfacepatch.cpp
index 66d100f..4452eb1 100644
--- a/linden/indra/newview/llsurfacepatch.cpp
+++ b/linden/indra/newview/llsurfacepatch.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -202,6 +203,11 @@ LLVector2 LLSurfacePatch::getTexCoords(const U32 x, const U32 y) const
void LLSurfacePatch::eval(const U32 x, const U32 y, const U32 stride, LLVector3 *vertex, LLVector3 *normal,
LLVector2 *tex0, LLVector2 *tex1)
{
+ if (!mSurfacep || !mSurfacep->getRegion())
+ {
+ return; // failsafe
+ }
+
U32 surface_stride = mSurfacep->getGridsPerEdge();
U32 point_offset = x + y*surface_stride;
diff --git a/linden/indra/newview/llsurfacepatch.h b/linden/indra/newview/llsurfacepatch.h
index 8db92a1..3e82233 100644
--- a/linden/indra/newview/llsurfacepatch.h
+++ b/linden/indra/newview/llsurfacepatch.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltable.h b/linden/indra/newview/lltable.h
index db5f388..d307ad4 100644
--- a/linden/indra/newview/lltable.h
+++ b/linden/indra/newview/lltable.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltexlayer.cpp b/linden/indra/newview/lltexlayer.cpp
index d8a97cf..237d563 100644
--- a/linden/indra/newview/lltexlayer.cpp
+++ b/linden/indra/newview/lltexlayer.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltexlayer.h b/linden/indra/newview/lltexlayer.h
index 5d12da5..c5a34a6 100644
--- a/linden/indra/newview/lltexlayer.h
+++ b/linden/indra/newview/lltexlayer.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltexturecache.cpp b/linden/indra/newview/lltexturecache.cpp
index 084211a..2008fda 100644
--- a/linden/indra/newview/lltexturecache.cpp
+++ b/linden/indra/newview/lltexturecache.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltexturecache.h b/linden/indra/newview/lltexturecache.h
index ec20066..d33c9a6 100644
--- a/linden/indra/newview/lltexturecache.h
+++ b/linden/indra/newview/lltexturecache.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltexturectrl.cpp b/linden/indra/newview/lltexturectrl.cpp
index 8ae6862..1436b62 100644
--- a/linden/indra/newview/lltexturectrl.cpp
+++ b/linden/indra/newview/lltexturectrl.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -1031,7 +1032,7 @@ void LLTextureCtrl::setEnabled( BOOL enabled )
mCaption->setEnabled( enabled );
- LLUICtrl::setEnabled( enabled );
+ LLView::setEnabled( enabled );
}
void LLTextureCtrl::setValid(BOOL valid )
diff --git a/linden/indra/newview/lltexturectrl.h b/linden/indra/newview/lltexturectrl.h
index 8569cbc..d8ad4d9 100644
--- a/linden/indra/newview/lltexturectrl.h
+++ b/linden/indra/newview/lltexturectrl.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltexturefetch.cpp b/linden/indra/newview/lltexturefetch.cpp
index 54b3f28..f281207 100644
--- a/linden/indra/newview/lltexturefetch.cpp
+++ b/linden/indra/newview/lltexturefetch.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltexturefetch.h b/linden/indra/newview/lltexturefetch.h
index a53deae..6bbd830 100644
--- a/linden/indra/newview/lltexturefetch.h
+++ b/linden/indra/newview/lltexturefetch.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltexturetable.cpp b/linden/indra/newview/lltexturetable.cpp
index 6d88eea..52e4a46 100644
--- a/linden/indra/newview/lltexturetable.cpp
+++ b/linden/indra/newview/lltexturetable.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltexturetable.h b/linden/indra/newview/lltexturetable.h
index f054f79..85510b5 100644
--- a/linden/indra/newview/lltexturetable.h
+++ b/linden/indra/newview/lltexturetable.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltextureview.cpp b/linden/indra/newview/lltextureview.cpp
index d28ee74..bd9b273 100644
--- a/linden/indra/newview/lltextureview.cpp
+++ b/linden/indra/newview/lltextureview.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltextureview.h b/linden/indra/newview/lltextureview.h
index 70ca39a..a838e6c 100644
--- a/linden/indra/newview/lltextureview.h
+++ b/linden/indra/newview/lltextureview.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltool.cpp b/linden/indra/newview/lltool.cpp
index 9489a2b..82d8fb9 100644
--- a/linden/indra/newview/lltool.cpp
+++ b/linden/indra/newview/lltool.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -53,7 +54,7 @@ LLTool::LLTool( const LLString& name, LLToolComposite* composite ) :
LLTool::~LLTool()
{
- if( gFocusMgr.getMouseCapture() == this )
+ if( hasMouseCapture() )
{
llwarns << "Tool deleted holding mouse capture. Mouse capture removed." << llendl;
gFocusMgr.removeMouseCaptureWithoutCallback( this );
@@ -132,12 +133,12 @@ void LLTool::setMouseCapture( BOOL b )
{
if( b )
{
- gViewerWindow->setMouseCapture(mComposite ? mComposite : this, &LLTool::onMouseCaptureLost );
+ gViewerWindow->setMouseCapture(mComposite ? mComposite : this );
}
else
if( hasMouseCapture() )
{
- gViewerWindow->setMouseCapture( NULL, NULL );
+ gViewerWindow->setMouseCapture( NULL );
}
}
@@ -147,7 +148,7 @@ void LLTool::draw()
BOOL LLTool::hasMouseCapture()
{
- return gViewerWindow->hasMouseCapture(mComposite ? mComposite : this);
+ return gFocusMgr.getMouseCapture() == (mComposite ? mComposite : this);
}
BOOL LLTool::handleKey(KEY key, MASK mask)
@@ -163,17 +164,3 @@ LLTool* LLTool::getOverrideTool(MASK mask)
}
return NULL;
}
-
-// static
-void LLTool::onMouseCaptureLost( LLMouseHandler* old_captor )
-{
- LLTool* self = (LLTool*) old_captor;
- if( self->mComposite )
- {
- self->mComposite->onMouseCaptureLost();
- }
- else
- {
- self->onMouseCaptureLost();
- }
-}
diff --git a/linden/indra/newview/lltool.h b/linden/indra/newview/lltool.h
index 866755a..cbed9f7 100644
--- a/linden/indra/newview/lltool.h
+++ b/linden/indra/newview/lltool.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -91,7 +92,6 @@ public:
// Note: NOT virtual. Subclasses should call this version.
void setMouseCapture(BOOL b);
BOOL hasMouseCapture();
- static void onMouseCaptureLost(LLMouseHandler* old_captor);
virtual void onMouseCaptureLost() {} // override this one as needed.
protected:
diff --git a/linden/indra/newview/lltoolbar.cpp b/linden/indra/newview/lltoolbar.cpp
index c7bc49e..3d065e1 100644
--- a/linden/indra/newview/lltoolbar.cpp
+++ b/linden/indra/newview/lltoolbar.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolbar.h b/linden/indra/newview/lltoolbar.h
index c3ab579..52da849 100644
--- a/linden/indra/newview/lltoolbar.h
+++ b/linden/indra/newview/lltoolbar.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolbrush.cpp b/linden/indra/newview/lltoolbrush.cpp
index 210a1e7..f2f338e 100644
--- a/linden/indra/newview/lltoolbrush.cpp
+++ b/linden/indra/newview/lltoolbrush.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolbrush.h b/linden/indra/newview/lltoolbrush.h
index 8ca14ff..e6e4257 100644
--- a/linden/indra/newview/lltoolbrush.h
+++ b/linden/indra/newview/lltoolbrush.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolcomp.cpp b/linden/indra/newview/lltoolcomp.cpp
index 8898dcb..2c2c0fe 100644
--- a/linden/indra/newview/lltoolcomp.cpp
+++ b/linden/indra/newview/lltoolcomp.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -755,6 +756,11 @@ BOOL LLToolCompGun::handleMouseUp(S32 x, S32 y, MASK mask)
void LLToolCompGun::onMouseCaptureLost()
{
+ if (mComposite)
+ {
+ mComposite->onMouseCaptureLost();
+ return;
+ }
mCur->onMouseCaptureLost();
// JC - I don't know if this is necessary. Maybe we could lose capture
diff --git a/linden/indra/newview/lltoolcomp.h b/linden/indra/newview/lltoolcomp.h
index d75cd11..029437c 100644
--- a/linden/indra/newview/lltoolcomp.h
+++ b/linden/indra/newview/lltoolcomp.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltooldraganddrop.cpp b/linden/indra/newview/lltooldraganddrop.cpp
index ffa124f..3956402 100644
--- a/linden/indra/newview/lltooldraganddrop.cpp
+++ b/linden/indra/newview/lltooldraganddrop.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -878,7 +879,7 @@ void LLToolDragAndDrop::dragOrDrop( S32 x, S32 y, MASK mask, BOOL drop,
BOOL handled = FALSE;
- LLView* top_view = gViewerWindow->getTopView();
+ LLView* top_view = gViewerWindow->getTopCtrl();
LLViewerInventoryItem* item;
LLViewerInventoryCategory* cat;
@@ -1238,6 +1239,7 @@ BOOL LLToolDragAndDrop::handleDropTextureProtections(LLViewerObject* hit_obj,
return FALSE;
}
}
+std::cout << "ASSET ID: " << new_item->getAssetUUID() << "\n";
hit_obj->updateInventory(new_item, TASK_INVENTORY_ASSET_KEY, true);
}
else if(!item->getPermissions().allowOperationBy(PERM_TRANSFER,
@@ -1251,6 +1253,7 @@ BOOL LLToolDragAndDrop::handleDropTextureProtections(LLViewerObject* hit_obj,
// *FIX: may want to make sure agent can paint hit_obj.
// make sure the object has the texture in it's inventory.
+std::cout << "ASSET ID: " << new_item->getAssetUUID() << "\n";
hit_obj->updateInventory(new_item, TASK_INVENTORY_ASSET_KEY, true);
}
return TRUE;
@@ -2327,7 +2330,7 @@ EAcceptance LLToolDragAndDrop::dad3dTextureObject(
}
if(!obj->permModify())
{
- return ACCEPT_NO_LOCKED;
+ return ACCEPT_NO_LOCKED;
}
//If texture !copyable don't texture or you'll never get it back.
if(!item->getPermissions().allowCopyBy(gAgent.getID()))
diff --git a/linden/indra/newview/lltooldraganddrop.h b/linden/indra/newview/lltooldraganddrop.h
index 4f94ed8..4f66f7d 100644
--- a/linden/indra/newview/lltooldraganddrop.h
+++ b/linden/indra/newview/lltooldraganddrop.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolface.cpp b/linden/indra/newview/lltoolface.cpp
index b855e0f..276d921 100644
--- a/linden/indra/newview/lltoolface.cpp
+++ b/linden/indra/newview/lltoolface.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolface.h b/linden/indra/newview/lltoolface.h
index 43c0a86..daf82b1 100644
--- a/linden/indra/newview/lltoolface.h
+++ b/linden/indra/newview/lltoolface.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolfocus.cpp b/linden/indra/newview/lltoolfocus.cpp
index 479d55c..733a47e 100644
--- a/linden/indra/newview/lltoolfocus.cpp
+++ b/linden/indra/newview/lltoolfocus.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolfocus.h b/linden/indra/newview/lltoolfocus.h
index 26a7085..b16fe81 100644
--- a/linden/indra/newview/lltoolfocus.h
+++ b/linden/indra/newview/lltoolfocus.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolgrab.cpp b/linden/indra/newview/lltoolgrab.cpp
index e186e4a..502e2be 100644
--- a/linden/indra/newview/lltoolgrab.cpp
+++ b/linden/indra/newview/lltoolgrab.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolgrab.h b/linden/indra/newview/lltoolgrab.h
index ad05295..7919c0d 100644
--- a/linden/indra/newview/lltoolgrab.h
+++ b/linden/indra/newview/lltoolgrab.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolgun.cpp b/linden/indra/newview/lltoolgun.cpp
index dfe97ae..d442d81 100644
--- a/linden/indra/newview/lltoolgun.cpp
+++ b/linden/indra/newview/lltoolgun.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolgun.h b/linden/indra/newview/lltoolgun.h
index 6884cb6..93b0b5b 100644
--- a/linden/indra/newview/lltoolgun.h
+++ b/linden/indra/newview/lltoolgun.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolindividual.cpp b/linden/indra/newview/lltoolindividual.cpp
index 96bd89e..3bcc210 100644
--- a/linden/indra/newview/lltoolindividual.cpp
+++ b/linden/indra/newview/lltoolindividual.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolindividual.h b/linden/indra/newview/lltoolindividual.h
index d7dd09d..e6f0df9 100644
--- a/linden/indra/newview/lltoolindividual.h
+++ b/linden/indra/newview/lltoolindividual.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolmgr.cpp b/linden/indra/newview/lltoolmgr.cpp
index b6e14a2..069bdac 100644
--- a/linden/indra/newview/lltoolmgr.cpp
+++ b/linden/indra/newview/lltoolmgr.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolmgr.h b/linden/indra/newview/lltoolmgr.h
index 5cf005a..e61bbc3 100644
--- a/linden/indra/newview/lltoolmgr.h
+++ b/linden/indra/newview/lltoolmgr.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolmorph.cpp b/linden/indra/newview/lltoolmorph.cpp
index a779554..ceb83b5 100644
--- a/linden/indra/newview/lltoolmorph.cpp
+++ b/linden/indra/newview/lltoolmorph.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolmorph.h b/linden/indra/newview/lltoolmorph.h
index ab1bf20..35ee724 100644
--- a/linden/indra/newview/lltoolmorph.h
+++ b/linden/indra/newview/lltoolmorph.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolobjpicker.cpp b/linden/indra/newview/lltoolobjpicker.cpp
index 56eab5a..411bdc0 100644
--- a/linden/indra/newview/lltoolobjpicker.cpp
+++ b/linden/indra/newview/lltoolobjpicker.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolobjpicker.h b/linden/indra/newview/lltoolobjpicker.h
index efe8be2..7a73304 100644
--- a/linden/indra/newview/lltoolobjpicker.h
+++ b/linden/indra/newview/lltoolobjpicker.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolpie.cpp b/linden/indra/newview/lltoolpie.cpp
index 4b29303..adc46e2 100644
--- a/linden/indra/newview/lltoolpie.cpp
+++ b/linden/indra/newview/lltoolpie.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolpie.h b/linden/indra/newview/lltoolpie.h
index fbfd1a6..949013f 100644
--- a/linden/indra/newview/lltoolpie.h
+++ b/linden/indra/newview/lltoolpie.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolpipette.cpp b/linden/indra/newview/lltoolpipette.cpp
index 8886150..139afc2 100755
--- a/linden/indra/newview/lltoolpipette.cpp
+++ b/linden/indra/newview/lltoolpipette.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolpipette.h b/linden/indra/newview/lltoolpipette.h
index e04bed7..1351084 100755
--- a/linden/indra/newview/lltoolpipette.h
+++ b/linden/indra/newview/lltoolpipette.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolplacer.cpp b/linden/indra/newview/lltoolplacer.cpp
index e246546..9741602 100644
--- a/linden/indra/newview/lltoolplacer.cpp
+++ b/linden/indra/newview/lltoolplacer.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolplacer.h b/linden/indra/newview/lltoolplacer.h
index ab90ca1..914f99d 100644
--- a/linden/indra/newview/lltoolplacer.h
+++ b/linden/indra/newview/lltoolplacer.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolselect.cpp b/linden/indra/newview/lltoolselect.cpp
index 924916c..9d02756 100644
--- a/linden/indra/newview/lltoolselect.cpp
+++ b/linden/indra/newview/lltoolselect.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolselect.h b/linden/indra/newview/lltoolselect.h
index 065e08f..2e24bc4 100644
--- a/linden/indra/newview/lltoolselect.h
+++ b/linden/indra/newview/lltoolselect.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolselectland.cpp b/linden/indra/newview/lltoolselectland.cpp
index eaad28c..855efd2 100644
--- a/linden/indra/newview/lltoolselectland.cpp
+++ b/linden/indra/newview/lltoolselectland.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolselectland.h b/linden/indra/newview/lltoolselectland.h
index 06ce1ee..3412d41 100644
--- a/linden/indra/newview/lltoolselectland.h
+++ b/linden/indra/newview/lltoolselectland.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolselectrect.cpp b/linden/indra/newview/lltoolselectrect.cpp
index 289ee6d..4e9bc9e 100644
--- a/linden/indra/newview/lltoolselectrect.cpp
+++ b/linden/indra/newview/lltoolselectrect.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolselectrect.h b/linden/indra/newview/lltoolselectrect.h
index 0065391..e246178 100644
--- a/linden/indra/newview/lltoolselectrect.h
+++ b/linden/indra/newview/lltoolselectrect.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolview.cpp b/linden/indra/newview/lltoolview.cpp
index fa8d65b..76de2e2 100644
--- a/linden/indra/newview/lltoolview.cpp
+++ b/linden/indra/newview/lltoolview.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltoolview.h b/linden/indra/newview/lltoolview.h
index 2c12a52..749f9fe 100644
--- a/linden/indra/newview/lltoolview.h
+++ b/linden/indra/newview/lltoolview.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltracker.cpp b/linden/indra/newview/lltracker.cpp
index 80d35dd..4125bb6 100644
--- a/linden/indra/newview/lltracker.cpp
+++ b/linden/indra/newview/lltracker.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lltracker.h b/linden/indra/newview/lltracker.h
index 5d11f21..e8299f7 100644
--- a/linden/indra/newview/lltracker.h
+++ b/linden/indra/newview/lltracker.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lluiconstants.h b/linden/indra/newview/lluiconstants.h
index d941e82..a51267a 100644
--- a/linden/indra/newview/lluiconstants.h
+++ b/linden/indra/newview/lluiconstants.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lluploaddialog.cpp b/linden/indra/newview/lluploaddialog.cpp
index 620133e..fc4f188 100644
--- a/linden/indra/newview/lluploaddialog.cpp
+++ b/linden/indra/newview/lluploaddialog.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -81,7 +82,7 @@ LLUploadDialog::LLUploadDialog( const std::string& msg)
setMessage(msg);
// The dialog view is a root view
- gViewerWindow->setTopView( this, NULL );
+ gViewerWindow->setTopCtrl( this );
}
void LLUploadDialog::setMessage( const std::string& msg)
diff --git a/linden/indra/newview/lluploaddialog.h b/linden/indra/newview/lluploaddialog.h
index 261e978..51f5d83 100644
--- a/linden/indra/newview/lluploaddialog.h
+++ b/linden/indra/newview/lluploaddialog.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llurl.cpp b/linden/indra/newview/llurl.cpp
index 0374ec9..a429b67 100644
--- a/linden/indra/newview/llurl.cpp
+++ b/linden/indra/newview/llurl.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llurl.h b/linden/indra/newview/llurl.h
index f60f06b..4dc8cfc 100644
--- a/linden/indra/newview/llurl.h
+++ b/linden/indra/newview/llurl.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llurlwhitelist.cpp b/linden/indra/newview/llurlwhitelist.cpp
index 3a8c952..e08ae42 100644
--- a/linden/indra/newview/llurlwhitelist.cpp
+++ b/linden/indra/newview/llurlwhitelist.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llurlwhitelist.h b/linden/indra/newview/llurlwhitelist.h
index 6f4289b..a0c3dec 100644
--- a/linden/indra/newview/llurlwhitelist.h
+++ b/linden/indra/newview/llurlwhitelist.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lluserauth.cpp b/linden/indra/newview/lluserauth.cpp
index 4b554a9..1513175 100644
--- a/linden/indra/newview/lluserauth.cpp
+++ b/linden/indra/newview/lluserauth.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -34,6 +35,7 @@
#include "lldir.h"
#include "llversion.h"
+#include "viewer.h"
#include "llviewerbuild.h"
#include "llviewercontrol.h"
#include "llxmlrpctransaction.h"
@@ -118,14 +120,11 @@ void LLUserAuth::authenticate(
XMLRPC_VectorAppendString(params, "passwd", dpasswd.c_str(), 0);
XMLRPC_VectorAppendString(params, "start", start, 0);
char buffer[MAX_STRING]; /* Flawfinder: ignore */
- snprintf(buffer, MAX_STRING, "%d", LL_VERSION_MAJOR); /* Flawfinder: ignore */
- XMLRPC_VectorAppendString(params, "major", buffer, 0);
- snprintf(buffer, MAX_STRING, "%d", LL_VERSION_MINOR); /* Flawfinder: ignore */
- XMLRPC_VectorAppendString(params, "minor", buffer, 0);
- snprintf(buffer, MAX_STRING, "%d", LL_VERSION_PATCH); /* Flawfinder: ignore */
- XMLRPC_VectorAppendString(params, "patch", buffer, 0);
- snprintf(buffer, MAX_STRING, "%d", LL_VIEWER_BUILD); /* Flawfinder: ignore */
- XMLRPC_VectorAppendString(params, "build", buffer, 0);
+ // the version is treated as a single string
+ snprintf(buffer, MAX_STRING, "%d.%d.%d.%d",
+ LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VIEWER_BUILD); /* Flawfinder: ignore */
+ XMLRPC_VectorAppendString(params, "version", buffer, 0);
+ XMLRPC_VectorAppendString(params, "channel", gChannelName.c_str(), 0);
XMLRPC_VectorAppendString(params, "platform", PLATFORM_STRING, 0);
XMLRPC_VectorAppendString(params, "mac", hashed_mac.c_str(), 0);
// A bit of security through obscurity: id0 is volume_serial
diff --git a/linden/indra/newview/lluserauth.h b/linden/indra/newview/lluserauth.h
index d50f5b4..22bcd48 100644
--- a/linden/indra/newview/lluserauth.h
+++ b/linden/indra/newview/lluserauth.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvelocitybar.cpp b/linden/indra/newview/llvelocitybar.cpp
index 403ff4f..c0c3a37 100644
--- a/linden/indra/newview/llvelocitybar.cpp
+++ b/linden/indra/newview/llvelocitybar.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvelocitybar.h b/linden/indra/newview/llvelocitybar.h
index 4a400b9..c6b06ac 100644
--- a/linden/indra/newview/llvelocitybar.h
+++ b/linden/indra/newview/llvelocitybar.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewchildren.cpp b/linden/indra/newview/llviewchildren.cpp
index f279ac0..8c88757 100644
--- a/linden/indra/newview/llviewchildren.cpp
+++ b/linden/indra/newview/llviewchildren.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewchildren.h b/linden/indra/newview/llviewchildren.h
index 6dce3d5..16470dd 100644
--- a/linden/indra/newview/llviewchildren.h
+++ b/linden/indra/newview/llviewchildren.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerassetstorage.cpp b/linden/indra/newview/llviewerassetstorage.cpp
index fd92d75..c7e9c97 100644
--- a/linden/indra/newview/llviewerassetstorage.cpp
+++ b/linden/indra/newview/llviewerassetstorage.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerassetstorage.h b/linden/indra/newview/llviewerassetstorage.h
index bb08ea2..8532e23 100644
--- a/linden/indra/newview/llviewerassetstorage.h
+++ b/linden/indra/newview/llviewerassetstorage.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerbuild.h b/linden/indra/newview/llviewerbuild.h
index 6c6930e..340d353 100644
--- a/linden/indra/newview/llviewerbuild.h
+++ b/linden/indra/newview/llviewerbuild.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewercamera.cpp b/linden/indra/newview/llviewercamera.cpp
index 598046a..3a21ddf 100644
--- a/linden/indra/newview/llviewercamera.cpp
+++ b/linden/indra/newview/llviewercamera.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -96,6 +97,7 @@ void LLViewerCamera::updateCameraLocation(const LLVector3 ¢er,
// Handy copies of last good GL matrices
F64 gGLModelView[16];
+F64 gGLProjection[16];
S32 gGLViewport[4];
const LLMatrix4 &LLViewerCamera::getProjection() const
@@ -250,6 +252,7 @@ void LLViewerCamera::setPerspective(BOOL for_selection,
aspect,
z_near,
z_far);
+ glGetDoublev(GL_PROJECTION_MATRIX, gGLProjection);
glGetFloatv(GL_PROJECTION_MATRIX, (float*)&gProjectionMat);
glMatrixMode( GL_MODELVIEW );
diff --git a/linden/indra/newview/llviewercamera.h b/linden/indra/newview/llviewercamera.h
index a7e600b..6109711 100644
--- a/linden/indra/newview/llviewercamera.h
+++ b/linden/indra/newview/llviewercamera.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -109,6 +110,7 @@ public:
extern LLViewerCamera *gCamera;
extern F64 gGLModelView[16];
+extern F64 gGLProjection[16];
extern S32 gGLViewport[4];
#endif // LL_LLVIEWERCAMERA_H
diff --git a/linden/indra/newview/llviewercontrol.cpp b/linden/indra/newview/llviewercontrol.cpp
index e1aa3ae..61285d5 100644
--- a/linden/indra/newview/llviewercontrol.cpp
+++ b/linden/indra/newview/llviewercontrol.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewercontrol.h b/linden/indra/newview/llviewercontrol.h
index d9a2682..4324c38 100644
--- a/linden/indra/newview/llviewercontrol.h
+++ b/linden/indra/newview/llviewercontrol.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -55,7 +56,7 @@ protected:
//setting variables are declared in this function
void declare_settings();
-void settings_version_fixup();
+void fixup_settings();
// saved at end of session
extern LLControlGroup gSavedSettings;
diff --git a/linden/indra/newview/llviewerdisplay.cpp b/linden/indra/newview/llviewerdisplay.cpp
index 071b699..c2ef30a 100644
--- a/linden/indra/newview/llviewerdisplay.cpp
+++ b/linden/indra/newview/llviewerdisplay.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -157,12 +158,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield)
LLGLDepthTest gls_depth(GL_TRUE, GL_TRUE, GL_LEQUAL);
// No clue where this is getting unset, but safe enough to reset it here.
- for (S32 j = 7; j >=0; j--)
- {
- glActiveTextureARB(GL_TEXTURE0_ARB+j);
- glClientActiveTextureARB(GL_TEXTURE0_ARB+j);
- j == 0 ? glEnable(GL_TEXTURE_2D) : glDisable(GL_TEXTURE_2D);
- }
+ LLGLState::resetTextureStates();
#ifndef LL_RELEASE_FOR_DOWNLOAD
LLGLState::checkStates();
@@ -277,7 +273,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield)
gViewerWindow->setShowProgress(TRUE);
gViewerWindow->setProgressPercent(0);
gAgent.setTeleportState( LLAgent::TELEPORT_REQUESTED );
- gAgent.setTeleportMessage("Requesting Teleport...");
+ gAgent.setTeleportMessage(
+ LLAgent::sTeleportProgressMessages["requesting"]);
break;
case LLAgent::TELEPORT_REQUESTED:
@@ -298,7 +295,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield)
gViewerWindow->setProgressCancelButtonVisible(FALSE, "Cancel");
gViewerWindow->setProgressPercent(75.f);
gAgent.setTeleportState( LLAgent::TELEPORT_ARRIVING );
- gAgent.setTeleportMessage("Arriving...");
+ gAgent.setTeleportMessage(
+ LLAgent::sTeleportProgressMessages["arriving"]);
gImageList.mForceResetTextureStats = TRUE;
break;
@@ -601,11 +599,6 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield)
gPipeline.stateSort(hud_cam);
}
- if (LLVertexBuffer::sEnableVBOs)
- {
- LLImageGL::sBoundTextureMemory += LLVertexBuffer::sAllocatedBytes;
- }
-
gPipeline.renderGeom(hud_cam);
//restore type mask
@@ -824,8 +817,10 @@ void render_ui_2d()
glPushMatrix();
S32 half_width = (gViewerWindow->getWindowWidth() / 2);
S32 half_height = (gViewerWindow->getWindowHeight() / 2);
+ glScalef(LLUI::sGLScaleFactor.mV[0], LLUI::sGLScaleFactor.mV[1], 1.f);
glTranslatef((F32)half_width, (F32)half_height, 0.f);
- glScalef(gAgent.getAvatarObject()->mHUDCurZoom, gAgent.getAvatarObject()->mHUDCurZoom, gAgent.getAvatarObject()->mHUDCurZoom);
+ F32 zoom = gAgent.getAvatarObject()->mHUDCurZoom;
+ glScalef(zoom,zoom,1.f);
glColor4fv(LLColor4::white.mV);
gl_rect_2d(-half_width, half_height, half_width, -half_height, FALSE);
glPopMatrix();
diff --git a/linden/indra/newview/llviewerdisplay.h b/linden/indra/newview/llviewerdisplay.h
index 00f0a57..9145a2d 100644
--- a/linden/indra/newview/llviewerdisplay.h
+++ b/linden/indra/newview/llviewerdisplay.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewergenericmessage.cpp b/linden/indra/newview/llviewergenericmessage.cpp
new file mode 100644
index 0000000..56b168b
--- /dev/null
+++ b/linden/indra/newview/llviewergenericmessage.cpp
@@ -0,0 +1,97 @@
+/**
+ * @file llviewergenericmessage.cpp
+ * @brief Handle processing of "generic messages" which contain short lists of strings.
+ * @author James Cook
+ *
+ * Copyright (c) 2007-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llviewergenericmessage.h"
+
+#include "lldispatcher.h"
+#include "lluuid.h"
+#include "message.h"
+
+#include "llagent.h"
+
+
+LLDispatcher gGenericDispatcher;
+
+
+void send_generic_message(const char* method,
+ const std::vector& strings,
+ const LLUUID& invoice)
+{
+ LLMessageSystem* msg = gMessageSystem;
+ msg->newMessage("GenericMessage");
+ msg->nextBlockFast(_PREHASH_AgentData);
+ msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+ msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+ msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
+ msg->nextBlock("MethodData");
+ msg->addString("Method", method);
+ msg->addUUID("Invoice", invoice);
+ if(strings.empty())
+ {
+ msg->nextBlock("ParamList");
+ msg->addString("Parameter", NULL);
+ }
+ else
+ {
+ std::vector::const_iterator it = strings.begin();
+ std::vector::const_iterator end = strings.end();
+ for(; it != end; ++it)
+ {
+ msg->nextBlock("ParamList");
+ msg->addString("Parameter", (*it).c_str());
+ }
+ }
+ gAgent.sendReliableMessage();
+}
+
+
+
+void process_generic_message(LLMessageSystem* msg, void**)
+{
+ LLUUID agent_id;
+ msg->getUUID("AgentData", "AgentID", agent_id);
+ if (agent_id != gAgent.getID())
+ {
+ llwarns << "GenericMessage for wrong agent" << llendl;
+ return;
+ }
+
+ std::string request;
+ LLUUID invoice;
+ LLDispatcher::sparam_t strings;
+ LLDispatcher::unpackMessage(msg, request, invoice, strings);
+
+ if(!gGenericDispatcher.dispatch(request, invoice, strings))
+ {
+ llwarns << "GenericMessage " << request << " failed to dispatch"
+ << llendl;
+ }
+}
diff --git a/linden/indra/newview/llviewergenericmessage.h b/linden/indra/newview/llviewergenericmessage.h
new file mode 100644
index 0000000..cf94d86
--- /dev/null
+++ b/linden/indra/newview/llviewergenericmessage.h
@@ -0,0 +1,46 @@
+/**
+ * @file llviewergenericmessage.h
+ * @brief Handle processing of "generic messages" which contain short lists of strings.
+ * @author James Cook
+ *
+ * Copyright (c) 2007-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ */
+
+#ifndef LLVIEWERGENERICMESSAGE_H
+#define LLVIEWERGENERICMESSAGE_H
+
+class LLUUID;
+class LLDispatcher;
+
+
+void send_generic_message(const char* method,
+ const std::vector& strings,
+ const LLUUID& invoice = LLUUID::null);
+
+void process_generic_message(LLMessageSystem* msg, void**);
+
+
+extern LLDispatcher gGenericDispatcher;
+
+#endif
diff --git a/linden/indra/newview/llviewergesture.cpp b/linden/indra/newview/llviewergesture.cpp
index fd98070..de8a098 100644
--- a/linden/indra/newview/llviewergesture.cpp
+++ b/linden/indra/newview/llviewergesture.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -142,69 +143,6 @@ LLViewerGestureList::LLViewerGestureList()
mIsLoaded = FALSE;
}
-void LLViewerGestureList::saveToServer()
-{
- U8 *buffer = new U8[getMaxSerialSize()];
-
- U8 *end = serialize(buffer);
-
- if (end - buffer > getMaxSerialSize())
- {
- llerrs << "Wrote off end of buffer, serial size computation is wrong" << llendl;
- }
-
- //U64 xfer_id = gXferManager->registerXfer(buffer, end - buffer);
- // write to a file because mem<->mem xfer isn't implemented
- LLUUID random_uuid;
- char filename[LL_MAX_PATH]; /* Flawfinder: ignore */
- random_uuid.generate();
- random_uuid.toString(filename);
- strcat(filename,".tmp"); /* Flawfinder: ignore */
-
- char filename_and_path[LL_MAX_PATH]; /* Flawfinder: ignore */
- snprintf(filename_and_path, LL_MAX_PATH, "%s%s%s", /* Flawfinder: ignore */
- gDirUtilp->getTempDir().c_str(),
- gDirUtilp->getDirDelimiter().c_str(),
- filename);
-
- FILE* fp = LLFile::fopen(filename_and_path, "wb"); /* Flawfinder: ignore */
-
- if (fp)
- {
- fwrite(buffer, end - buffer, 1, fp);
- fclose(fp);
-
- gMessageSystem->newMessageFast(_PREHASH_GestureUpdate);
- gMessageSystem->nextBlockFast(_PREHASH_AgentBlock);
- gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
- gMessageSystem->addStringFast(_PREHASH_Filename, filename);
- gMessageSystem->addBOOLFast(_PREHASH_ToViewer, FALSE);
- gMessageSystem->sendReliable(gUserServer);
- }
-
- delete[] buffer;
-}
-
-/*
-void LLViewerGestureList::requestFromServer()
-{
- gMessageSystem->newMessageFast(_PREHASH_GestureRequest);
- gMessageSystem->nextBlockFast(_PREHASH_AgentBlock);
- gMessageSystem->addUUIDFast(_PREHASH_AgentID, agent_get_id());
- gMessageSystem->addU8("Reset", 0);
- gMessageSystem->sendReliable(gUserServer);
-}
-
-void LLViewerGestureList::requestResetFromServer( BOOL is_male )
-{
- gMessageSystem->newMessageFast(_PREHASH_GestureRequest);
- gMessageSystem->nextBlockFast(_PREHASH_AgentBlock);
- gMessageSystem->addUUIDFast(_PREHASH_AgentID, agent_get_id());
- gMessageSystem->addU8("Reset", is_male ? 1 : 2);
- gMessageSystem->sendReliable(gUserServer);
- mIsLoaded = FALSE;
-}
-*/
// helper for deserialize that creates the right LLGesture subclass
LLGesture *LLViewerGestureList::create_gesture(U8 **buffer, S32 max_size)
@@ -266,14 +204,3 @@ void LLViewerGestureList::xferCallback(void *data, S32 size, void** /*user_data*
llwarns << "Unable to load gesture list!" << llendl;
}
}
-
-// static
-void LLViewerGestureList::processGestureUpdate(LLMessageSystem *msg, void** /*user_data*/)
-{
- char remote_filename[MAX_STRING]; /* Flawfinder: ignore */
- msg->getStringFast(_PREHASH_AgentBlock, _PREHASH_Filename, MAX_STRING, remote_filename);
-
-
- gXferManager->requestFile(remote_filename, LL_PATH_CACHE, msg->getSender(), TRUE, xferCallback, NULL,
- LLXferManager::HIGH_PRIORITY);
-}
diff --git a/linden/indra/newview/llviewergesture.h b/linden/indra/newview/llviewergesture.h
index 8d2e24f..5f6b795 100644
--- a/linden/indra/newview/llviewergesture.h
+++ b/linden/indra/newview/llviewergesture.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -64,7 +65,6 @@ class LLViewerGestureList : public LLGestureList
public:
LLViewerGestureList();
- void saveToServer();
//void requestFromServer();
BOOL getIsLoaded() { return mIsLoaded; }
@@ -76,7 +76,6 @@ public:
BOOL matchPrefix(const std::string& in_str, std::string* out_str);
static void xferCallback(void *data, S32 size, void** /*user_data*/, S32 status);
- static void processGestureUpdate(LLMessageSystem *msg, void** /*user_data*/);
protected:
LLGesture *create_gesture(U8 **buffer, S32 max_size);
diff --git a/linden/indra/newview/llviewerimage.cpp b/linden/indra/newview/llviewerimage.cpp
index 5a745ae..2a7f346 100644
--- a/linden/indra/newview/llviewerimage.cpp
+++ b/linden/indra/newview/llviewerimage.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -1034,7 +1035,7 @@ bool LLViewerImage::doLoadedCallbacks()
destroyRawImage();
createRawImage(gl_discard, TRUE);
- readBackRaw(gl_discard, mRawImage);
+ readBackRaw(gl_discard, mRawImage, false);
mIsRawImageValid = TRUE;
llassert_always(mRawImage.notNull());
llassert_always(!mNeedsAux || mAuxRawImage.notNull());
@@ -1061,8 +1062,10 @@ bool LLViewerImage::doLoadedCallbacks()
// we're going to call them.
llassert_always(mRawImage.notNull());
- llassert_always(!mNeedsAux || mAuxRawImage.notNull());
-
+ if(mNeedsAux && mAuxRawImage.isNull())
+ {
+ llwarns << "Raw Image with no Aux Data for callback" << llendl;
+ }
BOOL final = mRawDiscardLevel <= entryp->mDesiredDiscard ? TRUE : FALSE;
//llinfos << "Running callback for " << getID() << llendl;
//llinfos << mRawImage->getWidth() << "x" << mRawImage->getHeight() << llendl;
diff --git a/linden/indra/newview/llviewerimage.h b/linden/indra/newview/llviewerimage.h
index 54865ff..c62e5e4 100644
--- a/linden/indra/newview/llviewerimage.h
+++ b/linden/indra/newview/llviewerimage.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerimagelist.cpp b/linden/indra/newview/llviewerimagelist.cpp
index 456afdb..9da84fa 100644
--- a/linden/indra/newview/llviewerimagelist.cpp
+++ b/linden/indra/newview/llviewerimagelist.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -178,6 +179,7 @@ void LLViewerImageList::doPreloadImages()
preloadImage("inv_item_landmark_visited.tga", LLUUID::null, FALSE);
preloadImage("inv_item_notecard.tga", LLUUID::null, FALSE);
preloadImage("inv_item_object.tga", LLUUID::null, FALSE);
+ preloadImage("inv_item_object_multi.tga", LLUUID::null, FALSE);
preloadImage("inv_item_pants.tga", LLUUID::null, FALSE);
preloadImage("inv_item_script.tga", LLUUID::null, FALSE);
preloadImage("inv_item_shape.tga", LLUUID::null, FALSE);
@@ -243,6 +245,7 @@ void LLViewerImageList::doPreloadImages()
preloadImage("resize_handle_bottom_right_blue.tga", LLUUID::null, FALSE);
preloadImage("rounded_square.tga", LLUUID::null, FALSE);
preloadImage("rounded_square_soft.tga", LLUUID::null, FALSE);
+ preloadImage("script_error.tga", LLUUID::null, TRUE);
preloadImage("scrollbutton_down_in_blue.tga", LLUUID::null, FALSE);
preloadImage("scrollbutton_down_out_blue.tga", LLUUID::null, FALSE);
preloadImage("scrollbutton_left_in_blue.tga", LLUUID::null, FALSE);
diff --git a/linden/indra/newview/llviewerimagelist.h b/linden/indra/newview/llviewerimagelist.h
index 3f3e521..0a7f8b0 100644
--- a/linden/indra/newview/llviewerimagelist.h
+++ b/linden/indra/newview/llviewerimagelist.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerinventory.cpp b/linden/indra/newview/llviewerinventory.cpp
index 7c12f56..8f23346 100644
--- a/linden/indra/newview/llviewerinventory.cpp
+++ b/linden/indra/newview/llviewerinventory.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerinventory.h b/linden/indra/newview/llviewerinventory.h
index 3e81f90..c60f0e6 100644
--- a/linden/indra/newview/llviewerinventory.h
+++ b/linden/indra/newview/llviewerinventory.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerjoint.cpp b/linden/indra/newview/llviewerjoint.cpp
index a1294be..ca624bd 100644
--- a/linden/indra/newview/llviewerjoint.cpp
+++ b/linden/indra/newview/llviewerjoint.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -272,7 +273,7 @@ U32 LLViewerJoint::render( F32 pixelArea, BOOL first_pass )
triangle_count += drawShape( pixelArea, FALSE );
}
// third past respects z buffer and writes color
- glColorMask(TRUE, TRUE, TRUE, TRUE);
+ glColorMask(TRUE, TRUE, TRUE, FALSE);
{
LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
triangle_count += drawShape( pixelArea, FALSE );
diff --git a/linden/indra/newview/llviewerjoint.h b/linden/indra/newview/llviewerjoint.h
index 148f3a6..8d28a03 100644
--- a/linden/indra/newview/llviewerjoint.h
+++ b/linden/indra/newview/llviewerjoint.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerjointattachment.cpp b/linden/indra/newview/llviewerjointattachment.cpp
index 2a54a47..cec2ae3 100644
--- a/linden/indra/newview/llviewerjointattachment.cpp
+++ b/linden/indra/newview/llviewerjointattachment.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerjointattachment.h b/linden/indra/newview/llviewerjointattachment.h
index be671fb..0c8469c 100644
--- a/linden/indra/newview/llviewerjointattachment.h
+++ b/linden/indra/newview/llviewerjointattachment.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerjointmesh.cpp b/linden/indra/newview/llviewerjointmesh.cpp
index 3070cb4..216e29f 100644
--- a/linden/indra/newview/llviewerjointmesh.cpp
+++ b/linden/indra/newview/llviewerjointmesh.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -53,6 +54,7 @@
#include "llvoavatar.h"
#include "llsky.h"
#include "pipeline.h"
+#include "llglslshader.h"
#if !LL_DARWIN && !LL_LINUX
extern PFNGLWEIGHTPOINTERARBPROC glWeightPointerARB;
@@ -65,7 +67,6 @@ static LLPointer sRenderBuffer = NULL;
static const U32 sRenderMask = LLVertexBuffer::MAP_VERTEX |
LLVertexBuffer::MAP_NORMAL |
LLVertexBuffer::MAP_TEXCOORD;
-LLMatrix4 gBlendMat;
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
@@ -498,7 +499,7 @@ void LLViewerJointMesh::uploadJointMatrices()
//cgGLSetParameterArray4f(gPipeline.mAvatarMatrix, offset, 1, vector);
}
}
- glUniform4fvARB(gPipeline.mAvatarMatrixParam, 45, mat);
+ glUniform4fvARB(gAvatarMatrixParam, 45, mat);
}
}
@@ -573,14 +574,14 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass)
{
glColor4f(0,0,0,1);
- if (gPipeline.mMaterialIndex > 0)
+ if (gMaterialIndex > 0)
{
- glVertexAttrib4fvARB(gPipeline.mMaterialIndex, mColor.mV);
+ glVertexAttrib4fvARB(gMaterialIndex, mColor.mV);
}
- if (mShiny && gPipeline.mSpecularIndex > 0)
+ if (mShiny && gSpecularIndex > 0)
{
- glVertexAttrib4fARB(gPipeline.mSpecularIndex, 1,1,1,1);
+ glVertexAttrib4fARB(gSpecularIndex, 1,1,1,1);
}
}
else
@@ -902,89 +903,108 @@ BOOL LLViewerJointMesh::updateLOD(F32 pixel_area, BOOL activate)
return (valid != activate);
}
+
void LLViewerJointMesh::updateGeometry()
{
- if (mValid && mMesh && mFace &&
- mMesh->hasWeights() &&
- mFace->mVertexBuffer.notNull() &&
- gPipeline.getVertexShaderLevel(LLPipeline::SHADER_AVATAR) == 0)
+ if (!(mValid
+ && mMesh
+ && mFace
+ && mMesh->hasWeights()
+ && mFace->mVertexBuffer.notNull()
+ && LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_AVATAR) == 0))
{
- uploadJointMatrices();
- LLStrider o_vertices;
- LLStrider o_normals;
+ return;
+ }
+
+ uploadJointMatrices();
- //get vertex and normal striders
- LLVertexBuffer *buffer = mFace->mVertexBuffer;
- buffer->getVertexStrider(o_vertices, 0);
- buffer->getNormalStrider(o_normals, 0);
+ LLStrider o_vertices;
+ LLStrider o_normals;
+ //get vertex and normal striders
+ LLVertexBuffer *buffer = mFace->mVertexBuffer;
+ buffer->getVertexStrider(o_vertices, 0);
+ buffer->getNormalStrider(o_normals, 0);
+
+ F32 last_weight = F32_MAX;
+ LLMatrix4 gBlendMat;
+ LLMatrix3 gBlendRotMat;
+
+ const F32* weights = mMesh->getWeights();
+ const LLVector3* coords = mMesh->getCoords();
+ const LLVector3* normals = mMesh->getNormals();
+ for (U32 index = 0; index < mMesh->getNumVertices(); index++)
+ {
+ U32 bidx = index + mMesh->mFaceVertexOffset;
+
+ // blend by first matrix
+ F32 w = weights[index];
+
+ // Maybe we don't have to change gBlendMat.
+ // Profiles of a single-avatar scene on a Mac show this to be a very
+ // common case. JC
+ if (w == last_weight)
{
- LLVector4 tpos0, tnorm0, tpos1, tnorm1, tbinorm0, tbinorm1;
- F32 last_weight = F32_MAX;
- LLMatrix3 gBlendRotMat;
+ o_vertices[bidx] = coords[index] * gBlendMat;
+ o_normals[bidx] = normals[index] * gBlendRotMat;
+ continue;
+ }
+
+ last_weight = w;
+ S32 joint = llfloor(w);
+ w -= joint;
- for (U32 index= 0; index < mMesh->getNumVertices(); index++)
- {
- // blend by first matrix
- F32 w = mMesh->getWeights()[index];
-
- if (w != last_weight)
- {
- last_weight = w;
-
- S32 joint = llfloor(w);
- w -= joint;
-
- LLMatrix4 &m0 = gJointMat[joint+1];
- LLMatrix4 &m1 = gJointMat[joint+0];
- LLMatrix3 &n0 = gJointRot[joint+1];
- LLMatrix3 &n1 = gJointRot[joint+0];
-
- if (w == 1.0f)
- {
- gBlendMat = m0;
- gBlendRotMat = n0;
- }
- else
- {
- gBlendMat.mMatrix[VX][VX] = lerp(m1.mMatrix[VX][VX], m0.mMatrix[VX][VX], w);
- gBlendMat.mMatrix[VX][VY] = lerp(m1.mMatrix[VX][VY], m0.mMatrix[VX][VY], w);
- gBlendMat.mMatrix[VX][VZ] = lerp(m1.mMatrix[VX][VZ], m0.mMatrix[VX][VZ], w);
-
- gBlendMat.mMatrix[VY][VX] = lerp(m1.mMatrix[VY][VX], m0.mMatrix[VY][VX], w);
- gBlendMat.mMatrix[VY][VY] = lerp(m1.mMatrix[VY][VY], m0.mMatrix[VY][VY], w);
- gBlendMat.mMatrix[VY][VZ] = lerp(m1.mMatrix[VY][VZ], m0.mMatrix[VY][VZ], w);
-
- gBlendMat.mMatrix[VZ][VX] = lerp(m1.mMatrix[VZ][VX], m0.mMatrix[VZ][VX], w);
- gBlendMat.mMatrix[VZ][VY] = lerp(m1.mMatrix[VZ][VY], m0.mMatrix[VZ][VY], w);
- gBlendMat.mMatrix[VZ][VZ] = lerp(m1.mMatrix[VZ][VZ], m0.mMatrix[VZ][VZ], w);
-
- gBlendMat.mMatrix[VW][VX] = lerp(m1.mMatrix[VW][VX], m0.mMatrix[VW][VX], w);
- gBlendMat.mMatrix[VW][VY] = lerp(m1.mMatrix[VW][VY], m0.mMatrix[VW][VY], w);
- gBlendMat.mMatrix[VW][VZ] = lerp(m1.mMatrix[VW][VZ], m0.mMatrix[VW][VZ], w);
-
- gBlendRotMat.mMatrix[VX][VX] = lerp(n1.mMatrix[VX][VX], n0.mMatrix[VX][VX], w);
- gBlendRotMat.mMatrix[VX][VY] = lerp(n1.mMatrix[VX][VY], n0.mMatrix[VX][VY], w);
- gBlendRotMat.mMatrix[VX][VZ] = lerp(n1.mMatrix[VX][VZ], n0.mMatrix[VX][VZ], w);
-
- gBlendRotMat.mMatrix[VY][VX] = lerp(n1.mMatrix[VY][VX], n0.mMatrix[VY][VX], w);
- gBlendRotMat.mMatrix[VY][VY] = lerp(n1.mMatrix[VY][VY], n0.mMatrix[VY][VY], w);
- gBlendRotMat.mMatrix[VY][VZ] = lerp(n1.mMatrix[VY][VZ], n0.mMatrix[VY][VZ], w);
-
- gBlendRotMat.mMatrix[VZ][VX] = lerp(n1.mMatrix[VZ][VX], n0.mMatrix[VZ][VX], w);
- gBlendRotMat.mMatrix[VZ][VY] = lerp(n1.mMatrix[VZ][VY], n0.mMatrix[VZ][VY], w);
- gBlendRotMat.mMatrix[VZ][VZ] = lerp(n1.mMatrix[VZ][VZ], n0.mMatrix[VZ][VZ], w);
- }
- }
+ // No lerp required in this case.
+ if (w == 1.0f)
+ {
+ gBlendMat = gJointMat[joint+1];
+ o_vertices[bidx] = coords[index] * gBlendMat;
+ gBlendRotMat = gJointRot[joint+1];
+ o_normals[bidx] = normals[index] * gBlendRotMat;
+ continue;
+ }
+
+ // Try to keep all the accesses to the matrix data as close
+ // together as possible. This function is a hot spot on the
+ // Mac. JC
+ LLMatrix4 &m0 = gJointMat[joint+1];
+ LLMatrix4 &m1 = gJointMat[joint+0];
+
+ gBlendMat.mMatrix[VX][VX] = lerp(m1.mMatrix[VX][VX], m0.mMatrix[VX][VX], w);
+ gBlendMat.mMatrix[VX][VY] = lerp(m1.mMatrix[VX][VY], m0.mMatrix[VX][VY], w);
+ gBlendMat.mMatrix[VX][VZ] = lerp(m1.mMatrix[VX][VZ], m0.mMatrix[VX][VZ], w);
- // write result
- U32 bidx = index + mMesh->mFaceVertexOffset;
+ gBlendMat.mMatrix[VY][VX] = lerp(m1.mMatrix[VY][VX], m0.mMatrix[VY][VX], w);
+ gBlendMat.mMatrix[VY][VY] = lerp(m1.mMatrix[VY][VY], m0.mMatrix[VY][VY], w);
+ gBlendMat.mMatrix[VY][VZ] = lerp(m1.mMatrix[VY][VZ], m0.mMatrix[VY][VZ], w);
- o_vertices[bidx] = mMesh->getCoords()[index] * gBlendMat;
- o_normals[bidx] = mMesh->getNormals()[index] * gBlendRotMat;
- }
- }
+ gBlendMat.mMatrix[VZ][VX] = lerp(m1.mMatrix[VZ][VX], m0.mMatrix[VZ][VX], w);
+ gBlendMat.mMatrix[VZ][VY] = lerp(m1.mMatrix[VZ][VY], m0.mMatrix[VZ][VY], w);
+ gBlendMat.mMatrix[VZ][VZ] = lerp(m1.mMatrix[VZ][VZ], m0.mMatrix[VZ][VZ], w);
+
+ gBlendMat.mMatrix[VW][VX] = lerp(m1.mMatrix[VW][VX], m0.mMatrix[VW][VX], w);
+ gBlendMat.mMatrix[VW][VY] = lerp(m1.mMatrix[VW][VY], m0.mMatrix[VW][VY], w);
+ gBlendMat.mMatrix[VW][VZ] = lerp(m1.mMatrix[VW][VZ], m0.mMatrix[VW][VZ], w);
+
+ o_vertices[bidx] = coords[index] * gBlendMat;
+
+ LLMatrix3 &n0 = gJointRot[joint+1];
+ LLMatrix3 &n1 = gJointRot[joint+0];
+
+ gBlendRotMat.mMatrix[VX][VX] = lerp(n1.mMatrix[VX][VX], n0.mMatrix[VX][VX], w);
+ gBlendRotMat.mMatrix[VX][VY] = lerp(n1.mMatrix[VX][VY], n0.mMatrix[VX][VY], w);
+ gBlendRotMat.mMatrix[VX][VZ] = lerp(n1.mMatrix[VX][VZ], n0.mMatrix[VX][VZ], w);
+
+ gBlendRotMat.mMatrix[VY][VX] = lerp(n1.mMatrix[VY][VX], n0.mMatrix[VY][VX], w);
+ gBlendRotMat.mMatrix[VY][VY] = lerp(n1.mMatrix[VY][VY], n0.mMatrix[VY][VY], w);
+ gBlendRotMat.mMatrix[VY][VZ] = lerp(n1.mMatrix[VY][VZ], n0.mMatrix[VY][VZ], w);
+
+ gBlendRotMat.mMatrix[VZ][VX] = lerp(n1.mMatrix[VZ][VX], n0.mMatrix[VZ][VX], w);
+ gBlendRotMat.mMatrix[VZ][VY] = lerp(n1.mMatrix[VZ][VY], n0.mMatrix[VZ][VY], w);
+ gBlendRotMat.mMatrix[VZ][VZ] = lerp(n1.mMatrix[VZ][VZ], n0.mMatrix[VZ][VZ], w);
+
+ o_normals[bidx] = normals[index] * gBlendRotMat;
}
}
diff --git a/linden/indra/newview/llviewerjointmesh.h b/linden/indra/newview/llviewerjointmesh.h
index 591b21c..f016da6 100644
--- a/linden/indra/newview/llviewerjointmesh.h
+++ b/linden/indra/newview/llviewerjointmesh.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerjointshape.cpp b/linden/indra/newview/llviewerjointshape.cpp
index c22cfbe..478c041 100644
--- a/linden/indra/newview/llviewerjointshape.cpp
+++ b/linden/indra/newview/llviewerjointshape.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerjointshape.h b/linden/indra/newview/llviewerjointshape.h
index 28d2c09..68f08ec 100644
--- a/linden/indra/newview/llviewerjointshape.h
+++ b/linden/indra/newview/llviewerjointshape.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerjoystick.cpp b/linden/indra/newview/llviewerjoystick.cpp
new file mode 100644
index 0000000..bef769e
--- /dev/null
+++ b/linden/indra/newview/llviewerjoystick.cpp
@@ -0,0 +1,272 @@
+/**
+ * @file llviewerjoystick.cpp
+ * @brief Joystick functionality.
+ *
+ * Copyright (c) 2002-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "llviewercontrol.h"
+#include "llviewerwindow.h"
+#include "llviewercamera.h"
+#include "llviewerjoystick.h"
+#include "viewer.h"
+#include "llkeyboard.h"
+
+static LLQuaternion sFlycamRotation;
+static LLVector3 sFlycamPosition;
+static F32 sFlycamZoom;
+
+BOOL LLViewerJoystick::sOverrideCamera = FALSE;
+
+void LLViewerJoystick::updateCamera(BOOL reset)
+{
+ static F32 last_delta[] = {0,0,0,0,0,0,0};
+ static F32 delta[] = { 0,0,0,0,0,0,0 };
+
+ LLWindow* window = gViewerWindow->getWindow();
+
+ F32 time = gFrameIntervalSeconds;
+
+ S32 axis[] =
+ {
+ gSavedSettings.getS32("FlycamAxis0"),
+ gSavedSettings.getS32("FlycamAxis1"),
+ gSavedSettings.getS32("FlycamAxis2"),
+ gSavedSettings.getS32("FlycamAxis3"),
+ gSavedSettings.getS32("FlycamAxis4"),
+ gSavedSettings.getS32("FlycamAxis5"),
+ gSavedSettings.getS32("FlycamAxis6")
+ };
+
+ F32 axis_scale[] =
+ {
+ gSavedSettings.getF32("FlycamAxisScale0"),
+ gSavedSettings.getF32("FlycamAxisScale1"),
+ gSavedSettings.getF32("FlycamAxisScale2"),
+ gSavedSettings.getF32("FlycamAxisScale3"),
+ gSavedSettings.getF32("FlycamAxisScale4"),
+ gSavedSettings.getF32("FlycamAxisScale5"),
+ gSavedSettings.getF32("FlycamAxisScale6")
+ };
+
+ F32 dead_zone[] =
+ {
+ gSavedSettings.getF32("FlycamAxisDeadZone0"),
+ gSavedSettings.getF32("FlycamAxisDeadZone1"),
+ gSavedSettings.getF32("FlycamAxisDeadZone2"),
+ gSavedSettings.getF32("FlycamAxisDeadZone3"),
+ gSavedSettings.getF32("FlycamAxisDeadZone4"),
+ gSavedSettings.getF32("FlycamAxisDeadZone5"),
+ gSavedSettings.getF32("FlycamAxisDeadZone6")
+ };
+
+ if (reset)
+ {
+ sFlycamPosition = gCamera->getOrigin();
+ sFlycamRotation = gCamera->getQuaternion();
+ sFlycamZoom = gCamera->getView();
+
+ for (U32 i = 0; i < 7; i++)
+ {
+ last_delta[i] = -window->getJoystickAxis(axis[i]);
+ delta[i] = 0.f;
+ }
+ return;
+ }
+
+ F32 cur_delta[7];
+ F32 feather = gSavedSettings.getF32("FlycamFeathering");
+ BOOL absolute = gSavedSettings.getBOOL("FlycamAbsolute");
+
+ for (U32 i = 0; i < 7; i++)
+ {
+ cur_delta[i] = -window->getJoystickAxis(axis[i]);
+ F32 tmp = cur_delta[i];
+ if (absolute)
+ {
+ cur_delta[i] = cur_delta[i] - last_delta[i];
+ }
+ last_delta[i] = tmp;
+
+ if (cur_delta[i] > 0)
+ {
+ cur_delta[i] = llmax(cur_delta[i]-dead_zone[i], 0.f);
+ }
+ else
+ {
+ cur_delta[i] = llmin(cur_delta[i]+dead_zone[i], 0.f);
+ }
+ cur_delta[i] *= axis_scale[i];
+
+ if (!absolute)
+ {
+ cur_delta[i] *= time;
+ }
+
+ delta[i] = delta[i] + (cur_delta[i]-delta[i])*time*feather;
+ }
+
+ sFlycamPosition += LLVector3(delta) * sFlycamRotation;
+
+ LLMatrix3 rot_mat(delta[3],
+ delta[4],
+ delta[5]);
+
+ sFlycamRotation = LLQuaternion(rot_mat)*sFlycamRotation;
+
+ if (gSavedSettings.getBOOL("FlycamAutoLeveling"))
+ {
+ LLMatrix3 level(sFlycamRotation);
+
+ LLVector3 x = LLVector3(level.mMatrix[0]);
+ LLVector3 y = LLVector3(level.mMatrix[1]);
+ LLVector3 z = LLVector3(level.mMatrix[2]);
+
+ y.mV[2] = 0.f;
+ y.normVec();
+
+ level.setRows(x,y,z);
+ level.orthogonalize();
+
+ LLQuaternion quat = LLQuaternion(level);
+ sFlycamRotation = nlerp(llmin(feather*time,1.f), sFlycamRotation, quat);
+ }
+
+ if (gSavedSettings.getBOOL("FlycamZoomDirect"))
+ {
+ sFlycamZoom = last_delta[6]*axis_scale[6]+dead_zone[6];
+ }
+ else
+ {
+ sFlycamZoom += delta[6];
+ }
+
+ LLMatrix3 mat(sFlycamRotation);
+
+ gCamera->setView(sFlycamZoom);
+ gCamera->setOrigin(sFlycamPosition);
+ gCamera->mXAxis = LLVector3(mat.mMatrix[0]);
+ gCamera->mYAxis = LLVector3(mat.mMatrix[1]);
+ gCamera->mZAxis = LLVector3(mat.mMatrix[2]);
+}
+
+
+void LLViewerJoystick::scanJoystick()
+{
+ if (!sOverrideCamera)
+ {
+ static U32 joystick_state = 0;
+ static U32 button_state = 0;
+
+ F32 xval = gViewerWindow->getWindow()->getJoystickAxis(0);
+ F32 yval = gViewerWindow->getWindow()->getJoystickAxis(1);
+
+ if (xval <= -0.5f)
+ {
+ if (!(joystick_state & 0x1))
+ {
+ gKeyboard->handleTranslatedKeyDown(KEY_PAD_LEFT, 0);
+ joystick_state |= 0x1;
+ }
+ }
+ else
+ {
+ if (joystick_state & 0x1)
+ {
+ gKeyboard->handleTranslatedKeyUp(KEY_PAD_LEFT, 0);
+ joystick_state &= ~0x1;
+ }
+ }
+ if (xval >= 0.5f)
+ {
+ if (!(joystick_state & 0x2))
+ {
+ gKeyboard->handleTranslatedKeyDown(KEY_PAD_RIGHT, 0);
+ joystick_state |= 0x2;
+ }
+ }
+ else
+ {
+ if (joystick_state & 0x2)
+ {
+ gKeyboard->handleTranslatedKeyUp(KEY_PAD_RIGHT, 0);
+ joystick_state &= ~0x2;
+ }
+ }
+ if (yval <= -0.5f)
+ {
+ if (!(joystick_state & 0x4))
+ {
+ gKeyboard->handleTranslatedKeyDown(KEY_PAD_UP, 0);
+ joystick_state |= 0x4;
+ }
+ }
+ else
+ {
+ if (joystick_state & 0x4)
+ {
+ gKeyboard->handleTranslatedKeyUp(KEY_PAD_UP, 0);
+ joystick_state &= ~0x4;
+ }
+ }
+ if (yval >= 0.5f)
+ {
+ if (!(joystick_state & 0x8))
+ {
+ gKeyboard->handleTranslatedKeyDown(KEY_PAD_DOWN, 0);
+ joystick_state |= 0x8;
+ }
+ }
+ else
+ {
+ if (joystick_state & 0x8)
+ {
+ gKeyboard->handleTranslatedKeyUp(KEY_PAD_DOWN, 0);
+ joystick_state &= ~0x8;
+ }
+ }
+
+ for( int i = 0; i < 15; i++ )
+ {
+ if ( gViewerWindow->getWindow()->getJoystickButton(i) & 0x80 )
+ {
+ if (!(button_state & (1<handleTranslatedKeyDown(KEY_BUTTON1+i, 0);
+ button_state |= (1<handleTranslatedKeyUp(KEY_BUTTON1+i, 0);
+ button_state &= ~(1<append(new LLMenuItemToggleGL("Disable Camera Constraints",
&LLViewerCamera::sDisableCameraConstraints));
+ menu->append(new LLMenuItemCheckGL("Joystick Flycam",
+ &handle_toggle_flycam,NULL,&check_flycam,NULL));
+
menu->append(new LLMenuItemCheckGL("Mouse Smoothing",
&menu_toggle_control,
NULL,
@@ -1008,6 +1014,10 @@ void init_debug_ui_menu(LLMenuGL* menu)
menu->append(new LLMenuItemToggleGL("Debug Keys", &LLView::sDebugKeys));
menu->append(new LLMenuItemToggleGL("Debug WindowProc", &gDebugWindowProc));
menu->append(new LLMenuItemToggleGL("Debug Text Editor Tips", &gDebugTextEditorTips));
+ menu->appendSeparator();
+ menu->append(new LLMenuItemCheckGL("Show Time", menu_toggle_control, NULL, menu_check_control, (void*)"DebugShowTime"));
+ menu->append(new LLMenuItemCheckGL("Show Render Info", menu_toggle_control, NULL, menu_check_control, (void*)"DebugShowRenderInfo"));
+
menu->createJumpKeys();
}
@@ -1177,6 +1187,9 @@ void init_debug_rendering_menu(LLMenuGL* menu)
sub_menu->append(new LLMenuItemCheckGL("LightTrace",&LLPipeline::toggleRenderDebug, NULL,
&LLPipeline::toggleRenderDebugControl,
(void*)LLPipeline::RENDER_DEBUG_LIGHT_TRACE));
+ sub_menu->append(new LLMenuItemCheckGL("Glow",&LLPipeline::toggleRenderDebug, NULL,
+ &LLPipeline::toggleRenderDebugControl,
+ (void*)LLPipeline::RENDER_DEBUG_GLOW));
sub_menu->append(new LLMenuItemCheckGL("Show Depth Buffer",
&menu_toggle_control,
@@ -1242,11 +1255,6 @@ void init_debug_rendering_menu(LLMenuGL* menu)
item = new LLMenuItemCheckGL("Cheesy Beacon", menu_toggle_control, NULL, menu_check_control, (void*)"CheesyBeacon");
menu->append(item);
-#if 0 // 1.9.2
- item = new LLMenuItemCheckGL("Vertex Shaders", toggle_vertex_shaders, NULL, check_vertex_shaders, (void*)"VertexShaderEnable", 'V', MASK_CONTROL|MASK_ALT);
- item->setEnabled(gGLManager.mHasVertexShader);
- menu->append(item);
-#endif
menu->createJumpKeys();
}
@@ -1391,8 +1399,6 @@ void init_server_menu(LLMenuGL* menu)
&handle_force_parcel_to_content,
&enable_god_customer_service, NULL,
'C', MASK_SHIFT | MASK_ALT | MASK_CONTROL));
- //sub->append(new LLMenuItemCallGL("Toggle First Land bit",
- // &handle_toggle_parcel_newbie));
sub->appendSeparator();
sub->append(new LLMenuItemCallGL("Claim Public Land",
&handle_claim_public_land, &enable_god_customer_service));
@@ -1445,33 +1451,6 @@ void cleanup_menus()
// Object pie menu
//-----------------------------------------------------------------------------
-class LLObjectRateCreator : public view_listener_t
-{
- bool handleEvent(LLPointer event, const LLSD& userdata)
- {
- LLFloaterRate::show(LLFloaterRate::RS_CREATOR);
- return true;
- }
-};
-
-class LLObjectRateOwner : public view_listener_t
-{
- bool handleEvent(LLPointer event, const LLSD& userdata)
- {
- // Don't allow rating of group owned objects.
- LLSelectNode* node = gSelectMgr->getSelection()->getFirstRootNode();
- if (!node) return true;
- if (node->mPermissions->isGroupOwned())
- {
- gViewerWindow->alertXml("CantRateOwnedByGroup");
- return true;
- }
-
- LLFloaterRate::show(LLFloaterRate::RS_OWNER);
- return true;
- }
-};
-
class LLObjectReportAbuse : public view_listener_t
{
bool handleEvent(LLPointer event, const LLSD& userdata)
@@ -1481,59 +1460,6 @@ class LLObjectReportAbuse : public view_listener_t
}
};
-// Enable only when you didn't create it, and the creator
-// is not the owner.
-class LLObjectEnableRateCreator : public view_listener_t
-{
- bool handleEvent(LLPointer event, const LLSD& userdata)
- {
- LLUUID creator_id;
- LLUUID owner_id;
- LLString dummy;
- BOOL identical_creator = gSelectMgr->selectGetCreator(creator_id, dummy);
-
- BOOL new_value;
- if (!identical_creator)
- {
- new_value = FALSE;
- }
- else
- {
- new_value = (creator_id != gAgent.getID());
- }
- gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
- return true;
- }
-};
-
-// Enabled if object owner isn't the agent.
-class LLObjectEnableRateOwner : public view_listener_t
-{
- bool handleEvent(LLPointer event, const LLSD& userdata)
- {
- LLUUID owner_id;
- LLString dummy;
- BOOL identical_owner = gSelectMgr->selectGetOwner(owner_id, dummy);
-
- BOOL new_value;
- if (!identical_owner)
- {
- new_value = FALSE;
- }
- else if (owner_id.isNull())
- {
- new_value = FALSE;
- }
- else
- {
- new_value = (owner_id != gAgent.getID());
- }
- gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
- return true;
- }
-};
-
-
// Enabled it you clicked an object
class LLObjectEnableReportAbuse : public view_listener_t
{
@@ -2257,20 +2183,6 @@ void login_done(S32 which, void *user)
}
-
-class LLAvatarRate : public view_listener_t
-{
- bool handleEvent(LLPointer event, const LLSD& userdata)
- {
- LLVOAvatar* avatar = find_avatar_from_object( gViewerWindow->lastObjectHit() );
- if( avatar )
- {
- LLFloaterRate::show( avatar->getID() );
- }
- return true;
- }
-};
-
void callback_leave_group(S32 option, void *userdata)
{
if (option == 0)
@@ -3156,6 +3068,11 @@ void reset_view_final( BOOL proceed, void* )
gAgent.changeCameraToDefault();
+ if (LLViewerJoystick::sOverrideCamera)
+ {
+ handle_toggle_flycam(NULL);
+ }
+
gAgent.resetView(!gFloaterTools->getVisible());
gFloaterTools->close();
@@ -3402,40 +3319,6 @@ void handle_claim_public_land(void*)
gAgent.sendReliableMessage();
}
-//void handle_toggle_parcel_newbie(void*)
-//{
-// gParcelMgr->toggleParcelGodReserveForNewbie();
-//}
-
-void on_expunge_user(S32 option, const LLString& text, void*)
-{
- if(option == -1) return;
- llinfos << "on_expunge_user(" << option << "," << text << ")" << llendl;
- LLMessageSystem* msg = gMessageSystem;
- LLUUID user_id;
- if(user_id.set(text))
- {
- msg->newMessage("GodExpungeUser");
- msg->nextBlock("AgentData");
- msg->addUUID("AgentID", gAgent.getID());
- msg->addUUID("SessionID", gAgent.getSessionID());
- msg->nextBlock("ExpungeData");
- msg->addUUID("AgentID", user_id);
- msg->sendReliable(gUserServer);
- }
- else
- {
- gViewerWindow->alertXml("InvalidUUID");
- }
-}
-
-void handle_god_expunge_user(void*)
-{
- gViewerWindow->alertXmlEditText("ExpungeUser", LLString::format_map_t(),
- NULL, NULL,
- on_expunge_user, NULL);
-}
-
void handle_god_request_havok(void *)
{
if (gAgent.isGodlike())
@@ -5402,7 +5285,7 @@ void upload_new_resource(const LLString& src_filename, std::string name,
LLString short_name = filename.substr(offset);
// No extension
- snprintf(error_message, /* Flawfinder: ignore */
+ snprintf(error_message, /* Flawfinder: ignore */
MAX_STRING,
"No file extension for the file: '%s'\nPlease make sure the file has a correct file extension",
short_name.c_str());
@@ -5551,7 +5434,7 @@ void upload_new_resource(const LLString& src_filename, std::string name,
else
{
fclose(in);
- snprintf(error_message, MAX_STRING, "unknown linden resource file version in file: %s", src_filename.c_str()); /* Flawfinder: ignore */
+ snprintf(error_message, MAX_STRING, "unknown linden resource file version in file: %s", src_filename.c_str()); /* Flawfinder: ignore */
args["[FILE]"] = src_filename;
upload_error(error_message, "UnknownResourceFileVersion", filename, args);
return;
@@ -5587,7 +5470,7 @@ void upload_new_resource(const LLString& src_filename, std::string name,
else
{
fclose(in);
- snprintf(error_message, MAX_STRING, "Unable to create output file: %s", filename.c_str()); /* Flawfinder: ignore */
+ snprintf(error_message, MAX_STRING, "Unable to create output file: %s", filename.c_str()); /* Flawfinder: ignore */
args["[FILE]"] = filename;
upload_error(error_message, "UnableToCreateOutputFile", filename, args);
return;
@@ -6340,6 +6223,21 @@ void handle_dump_followcam(void*)
LLFollowCamMgr::dump();
}
+BOOL check_flycam(void*)
+{
+ return LLViewerJoystick::sOverrideCamera;
+}
+
+void handle_toggle_flycam(void*)
+{
+ LLViewerJoystick::sOverrideCamera = !LLViewerJoystick::sOverrideCamera;
+ if (LLViewerJoystick::sOverrideCamera)
+ {
+ LLViewerJoystick::updateCamera(TRUE);
+ LLFloaterJoystick::show(NULL);
+ }
+}
+
void handle_viewer_enable_message_log(void*)
{
gMessageSystem->startLogging();
@@ -6423,14 +6321,7 @@ class LLShowFloater : public view_listener_t
{
if (gParcelMgr->selectionEmpty())
{
- if (gLastHitPosGlobal.isExactlyZero())
- {
- gParcelMgr->selectParcelAt(gAgent.getPositionGlobal());
- }
- else
- {
- gParcelMgr->selectParcelAt( gLastHitPosGlobal );
- }
+ gParcelMgr->selectParcelAt(gAgent.getPositionGlobal());
}
LLFloaterLand::show();
@@ -6439,14 +6330,7 @@ class LLShowFloater : public view_listener_t
{
if (gParcelMgr->selectionEmpty())
{
- if (gLastHitPosGlobal.isExactlyZero())
- {
- gParcelMgr->selectParcelAt(gAgent.getPositionGlobal());
- }
- else
- {
- gParcelMgr->selectParcelAt( gLastHitPosGlobal );
- }
+ gParcelMgr->selectParcelAt(gAgent.getPositionGlobal());
}
gParcelMgr->startBuyLand();
@@ -6463,10 +6347,22 @@ class LLShowFloater : public view_listener_t
{
LLFloaterScriptDebug::show(LLUUID::null);
}
- else if (floater_name == "help")
+ else if (floater_name == "help f1")
+ {
+#if LL_LIBXUL_ENABLED
+ gViewerHtmlHelp.show();
+#endif
+ }
+ else if (floater_name == "help in-world")
+ {
+#if LL_LIBXUL_ENABLED
+ LLFloaterHtml::getInstance()->show( "in-world_help" );
+#endif
+ }
+ else if (floater_name == "help additional")
{
#if LL_LIBXUL_ENABLED
- LLHtmlHelp::show(NULL);
+ LLFloaterHtml::getInstance()->show( "additional_help" );
#endif
}
else if (floater_name == "complaint reporter")
@@ -8687,7 +8583,6 @@ void initialize_menu_actions()
// Avatar pie menu
(new LLObjectMute())->registerListener(gMenuHolder, "Avatar.Mute");
- (new LLAvatarRate())->registerListener(gMenuHolder, "Avatar.Rate");
(new LLAvatarAddFriend())->registerListener(gMenuHolder, "Avatar.AddFriend");
(new LLAvatarFreeze())->registerListener(gMenuHolder, "Avatar.Freeze");
(new LLAvatarDebug())->registerListener(gMenuHolder, "Avatar.Debug");
@@ -8709,9 +8604,7 @@ void initialize_menu_actions()
(new LLObjectDelete())->registerListener(gMenuHolder, "Object.Delete");
(new LLObjectAttachToAvatar())->registerListener(gMenuHolder, "Object.AttachToAvatar");
(new LLObjectReturn())->registerListener(gMenuHolder, "Object.Return");
- (new LLObjectRateOwner())->registerListener(gMenuHolder, "Object.RateOwner");
(new LLObjectReportAbuse())->registerListener(gMenuHolder, "Object.ReportAbuse");
- (new LLObjectRateCreator())->registerListener(gMenuHolder, "Object.RateCreator");
(new LLObjectMute())->registerListener(gMenuHolder, "Object.Mute");
(new LLObjectBuy())->registerListener(gMenuHolder, "Object.Buy");
(new LLObjectEdit())->registerListener(gMenuHolder, "Object.Edit");
@@ -8723,9 +8616,7 @@ void initialize_menu_actions()
(new LLObjectEnableDelete())->registerListener(gMenuHolder, "Object.EnableDelete");
(new LLObjectEnableWear())->registerListener(gMenuHolder, "Object.EnableWear");
(new LLObjectEnableReturn())->registerListener(gMenuHolder, "Object.EnableReturn");
- (new LLObjectEnableRateOwner())->registerListener(gMenuHolder, "Object.EnableRateOwner");
(new LLObjectEnableReportAbuse())->registerListener(gMenuHolder, "Object.EnableReportAbuse");
- (new LLObjectEnableRateCreator())->registerListener(gMenuHolder, "Object.EnableRateCreator");
(new LLObjectEnableMute())->registerListener(gMenuHolder, "Object.EnableMute");
(new LLObjectEnableBuy())->registerListener(gMenuHolder, "Object.EnableBuy");
diff --git a/linden/indra/newview/llviewermenu.h b/linden/indra/newview/llviewermenu.h
index 0c42426..ac2a57a 100644
--- a/linden/indra/newview/llviewermenu.h
+++ b/linden/indra/newview/llviewermenu.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewermessage.cpp b/linden/indra/newview/llviewermessage.cpp
index 41d24fd..5dab363 100644
--- a/linden/indra/newview/llviewermessage.cpp
+++ b/linden/indra/newview/llviewermessage.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -106,6 +107,7 @@
#include "llui.h" // for make_ui_sound
#include "lluploaddialog.h"
#include "llviewercamera.h"
+#include "llviewergenericmessage.h"
#include "llviewerinventory.h"
#include "llviewermenu.h"
#include "llviewerobject.h"
@@ -142,8 +144,6 @@ extern BOOL gDebugClicks;
extern void bad_network_handler();
-LLDispatcher gGenericDispatcher;
-
// function prototypes
void open_offer(const std::vector& items);
void friendship_offer_callback(S32 option, void* user_data);
@@ -1559,61 +1559,135 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
break;
}
case IM_GROUP_VOTE:
+ {
+ LLUUID *userdata = new LLUUID(session_id);
+ args["[NAME]"] = name;
+ args["[MESSAGE]"] = message;
+ LLNotifyBox::showXml("GroupVote", args,
+ &group_vote_callback, userdata);
+ }
+ break;
+
+ case IM_GROUP_ELECTION_DEPRECATED:
+ {
+ llwarns << "Received IM: IM_GROUP_ELECTION_DEPRECATED" << llendl;
+ }
+ break;
+
+ case IM_SESSION_911_SEND:
+ {
+ //this is just the same code as IM_SESSION_SEND for a bit
+ //I was too lazy to make this a function....sorry - jwolk
+ if (!is_linden && is_busy)
{
- LLUUID *userdata = new LLUUID(session_id);
- args["[NAME]"] = name;
- args["[MESSAGE]"] = message;
- LLNotifyBox::showXml("GroupVote", args,
- &group_vote_callback, userdata);
+ return;
+ }
+
+ // standard message, not from system
+ char saved[MAX_STRING]; /* Flawfinder: ignore */
+ saved[0] = '\0';
+ if(offline == IM_OFFLINE)
+ {
+ char time_buf[TIME_STR_LENGTH]; /* Flawfinder: ignore */
+ snprintf(saved, /* Flawfinder: ignore */
+ MAX_STRING,
+ "(Saved %s) ",
+ formatted_time(timestamp, time_buf));
+ }
+
+ snprintf(buffer, /* Flawfinder: ignore */
+ sizeof(buffer),
+ "%s%s%s%s",
+ name,
+ separator_string,
+ saved,
+ (message+message_offset));
+
+ BOOL is_this_agent = FALSE;
+ if(from_id == gAgentID)
+ {
+ from_id = LLUUID::null;
+ is_this_agent = TRUE;
}
- break;
- case IM_GROUP_ELECTION_DEPRECATED:
+ gIMView->addMessage(
+ session_id,
+ from_id,
+ name,
+ buffer,
+ (char*)binary_bucket,
+ IM_SESSION_ADD,
+ parent_estate_id,
+ region_id,
+ position);
+
+ snprintf(buffer, sizeof(buffer), "IM: %s%s%s%s", name, separator_string, saved, (message+message_offset)); /* Flawfinder: ignore */
+ chat.mText = buffer;
+ LLFloaterChat::addChat(chat, TRUE, is_this_agent);
+
+ //ok, now we want to add a teleport button if we are receving
+ //a message from not ourself
+ LLFloaterIMPanel* panel =
+ gIMView->findFloaterBySession(session_id);
+
+ if (panel && !is_this_agent )
{
- llwarns << "Received IM: IM_GROUP_ELECTION_DEPRECATED" << llendl;
+ //don't add a teleport button for yourself
+ panel->addTeleportButton();
}
break;
+ }
case IM_SESSION_SEND:
+ {
+ if (!is_linden && is_busy)
{
- if (!is_linden && is_busy)
+ return;
+ }
+
+ // System messages, specifically "Foo Bar has left this session"
+ // are not shown unless you actually have that session open.
+ // Band-aid. JC
+ if (offline == IM_ONLINE
+ && chat.mFromName == SYSTEM_FROM
+ && !gIMView->hasSession(session_id))
{
return;
}
-
- // standard message, not from system
- char saved[MAX_STRING]; /* Flawfinder: ignore */
- saved[0] = '\0';
- if(offline == IM_OFFLINE)
- {
- char time_buf[TIME_STR_LENGTH]; /* Flawfinder: ignore */
- snprintf(saved, /* Flawfinder: ignore */
- MAX_STRING,
- "(Saved %s) ",
- formatted_time(timestamp, time_buf));
- }
- snprintf(buffer, sizeof(buffer), "%s%s%s%s", name, separator_string, saved, (message+message_offset)); /* Flawfinder: ignore */
- BOOL is_this_agent = FALSE;
- if(from_id == gAgentID)
- {
- from_id = LLUUID::null;
- is_this_agent = TRUE;
- }
- gIMView->addMessage(
- session_id,
- from_id,
- name,
- buffer,
- (char*)binary_bucket,
- IM_SESSION_ADD,
- parent_estate_id,
- region_id,
- position);
-
- snprintf(buffer, sizeof(buffer), "IM: %s%s%s%s", name, separator_string, saved, (message+message_offset)); /* Flawfinder: ignore */
- chat.mText = buffer;
- LLFloaterChat::addChat(chat, TRUE, is_this_agent);
+
+ // standard message, not from system
+ char saved[MAX_STRING]; /* Flawfinder: ignore */
+ saved[0] = '\0';
+ if(offline == IM_OFFLINE)
+ {
+ char time_buf[TIME_STR_LENGTH]; /* Flawfinder: ignore */
+ snprintf(saved, /* Flawfinder: ignore */
+ MAX_STRING,
+ "(Saved %s) ",
+ formatted_time(timestamp, time_buf));
}
- break;
+ snprintf(buffer, sizeof(buffer), "%s%s%s%s", name, separator_string, saved, (message+message_offset)); /* Flawfinder: ignore */
+ BOOL is_this_agent = FALSE;
+ if(from_id == gAgentID)
+ {
+ from_id = LLUUID::null;
+ is_this_agent = TRUE;
+ }
+ gIMView->addMessage(
+ session_id,
+ from_id,
+ name,
+ buffer,
+ (char*)binary_bucket,
+ IM_SESSION_ADD,
+ parent_estate_id,
+ region_id,
+ position);
+
+ snprintf(buffer, sizeof(buffer), "IM: %s%s%s%s", name, separator_string, saved, (message+message_offset)); /* Flawfinder: ignore */
+ chat.mText = buffer;
+ LLFloaterChat::addChat(chat, TRUE, is_this_agent);
+ }
+ break;
case IM_FROM_TASK:
if (is_busy && !is_owned_by_me)
@@ -1684,21 +1758,6 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
}
break;
- case IM_LURE_911:
- {
- // HACK -- the from_id is the im_session_id
- LLFloaterIMPanel* panel = gIMView->findFloaterBySession(session_id);
- if (panel)
- {
- panel->addTeleportButton(from_id);
- }
- else
- {
- llinfos << "LLFloaterIMPanel not found for " << session_id << " from " << from_id << llendl;
- }
- }
- break;
-
case IM_GOTO_URL:
{
char* url = new char[binary_bucket_size];
@@ -2308,7 +2367,18 @@ void process_teleport_progress(LLMessageSystem* msg, void**)
char buffer[MAX_STRING]; /* Flawfinder: ignore */
msg->getString("Info", "Message", MAX_STRING, buffer);
lldebugs << "teleport progress: " << buffer << llendl;
- gAgent.setTeleportMessage(buffer);
+
+ //Sorta hacky...default to using simulator raw messages
+ //if we don't find the coresponding mapping in our progress mappings
+ LLString message = buffer;
+
+ if (LLAgent::sTeleportProgressMessages.find(buffer) !=
+ LLAgent::sTeleportProgressMessages.end() )
+ {
+ message = LLAgent::sTeleportProgressMessages[buffer];
+ }
+
+ gAgent.setTeleportMessage(LLAgent::sTeleportProgressMessages[message]);
}
class LLFetchInWelcomeArea : public LLInventoryFetchDescendentsObserver
@@ -2465,7 +2535,7 @@ void process_teleport_finish(LLMessageSystem* msg, void**)
send_complete_agent_movement(sim_host);
gAgent.setTeleportState( LLAgent::TELEPORT_MOVING );
- gAgent.setTeleportMessage("Contacting New Region...");
+ gAgent.setTeleportMessage(LLAgent::sTeleportProgressMessages["contacting"]);
regionp->setSeedCapability(std::string(seedCap));
@@ -2501,6 +2571,8 @@ void process_avatar_init_complete(LLMessageSystem* msg, void**)
void process_agent_movement_complete(LLMessageSystem* msg, void**)
{
+ gAgentMovementCompleted = TRUE;
+
LLUUID agent_id;
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
LLUUID session_id;
@@ -3903,7 +3975,16 @@ void process_alert_core(const char* buffer, BOOL modal)
}
// Translate system messages here.
- if (buffer[0] == '/')
+ const char ALERT_PREFIX[] = "ALERT: ";
+ const size_t ALERT_PREFIX_LEN = sizeof(ALERT_PREFIX) - 1;
+ if (!strncmp(buffer, ALERT_PREFIX, ALERT_PREFIX_LEN))
+ {
+ // Allow the server to spawn a named alert so that server alerts can be
+ // translated out of English. JC
+ std::string alert_name(buffer + ALERT_PREFIX_LEN);
+ LLAlertDialog::showXml(alert_name);
+ }
+ else if (buffer[0] == '/')
{
// System message is important, show in upper-right box not tip
LLString text(buffer+1);
@@ -4295,7 +4376,7 @@ void process_teleport_failed(LLMessageSystem *msg, void**)
msg->getStringFast(_PREHASH_Info, _PREHASH_Reason, STD_STRING_BUF_SIZE, reason);
LLStringBase::format_map_t args;
- args["[REASON]"] = reason;
+ args["[REASON]"] = LLAgent::sTeleportErrorMessages[reason];
gViewerWindow->alertXml("CouldNotTeleportReason", args);
if( gAgent.getTeleportState() != LLAgent::TELEPORT_NONE )
@@ -4449,25 +4530,6 @@ void handle_lure_callback_godlike(S32 option, void* userdata)
handle_lure_callback(option, LLString::null, userdata);
}
-void send_lure_911(void** user_data, S32 result)
-{
- LLUUID im_session_id(*((LLUUID*)user_data));
- LLString name;
- gAgent.getName(name);
- LLString text = name + " needs help"; // this text is ignored for 911 lures
- LLMessageSystem* msg = gMessageSystem;
- msg->newMessageFast(_PREHASH_StartLure);
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
- msg->nextBlockFast(_PREHASH_Info);
- msg->addU8Fast(_PREHASH_LureType, (U8)IM_LURE_911);
- msg->addStringFast(_PREHASH_Message, text.c_str());
- msg->nextBlockFast(_PREHASH_TargetData);
- msg->addUUIDFast(_PREHASH_TargetID, im_session_id);
- gAgent.sendReliableMessage();
-}
-
void handle_lure(const LLUUID& invitee)
{
LLDynamicArray ids;
@@ -4985,59 +5047,6 @@ void onCovenantLoadComplete(LLVFS *vfs,
LLFloaterBuyLand::updateCovenantText(covenant_text, asset_uuid);
}
-void send_generic_message(const char* method,
- const std::vector& strings,
- const LLUUID& invoice)
-{
- LLMessageSystem* msg = gMessageSystem;
- msg->newMessage("GenericMessage");
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
- msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
- msg->nextBlock("MethodData");
- msg->addString("Method", method);
- msg->addUUID("Invoice", invoice);
- if(strings.empty())
- {
- msg->nextBlock("ParamList");
- msg->addString("Parameter", NULL);
- }
- else
- {
- std::vector::const_iterator it = strings.begin();
- std::vector::const_iterator end = strings.end();
- for(; it != end; ++it)
- {
- msg->nextBlock("ParamList");
- msg->addString("Parameter", (*it).c_str());
- }
- }
- gAgent.sendReliableMessage();
-}
-
-
-void process_generic_message(LLMessageSystem* msg, void**)
-{
- LLUUID agent_id;
- msg->getUUID("AgentData", "AgentID", agent_id);
- if (agent_id != gAgent.getID())
- {
- llwarns << "GenericMessage for wrong agent" << llendl;
- return;
- }
-
- std::string request;
- LLUUID invoice;
- LLDispatcher::sparam_t strings;
- LLDispatcher::unpackMessage(msg, request, invoice, strings);
-
- if(!gGenericDispatcher.dispatch(request, invoice, strings))
- {
- llwarns << "GenericMessage " << request << " failed to dispatch"
- << llendl;
- }
-}
void process_feature_disabled_message(LLMessageSystem* msg, void**)
{
@@ -5062,3 +5071,6 @@ void invalid_message_callback(LLMessageSystem* msg,
{
bad_network_handler();
}
+
+// Please do not add more message handlers here. This file is huge.
+// Put them in a file related to the functionality you are implementing. JC
diff --git a/linden/indra/newview/llviewermessage.h b/linden/indra/newview/llviewermessage.h
index 258003e..ce8f6a7 100644
--- a/linden/indra/newview/llviewermessage.h
+++ b/linden/indra/newview/llviewermessage.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -28,12 +29,10 @@
#ifndef LL_LLVIEWERMESSAGE_H
#define LL_LLVIEWERMESSAGE_H
-//#include "linked_lists.h"
#include "llinstantmessage.h"
#include "lltransactiontypes.h"
#include "lluuid.h"
#include "stdenums.h"
-#include "message.h"
//
// Forward declarations
@@ -42,6 +41,7 @@ class LLColor4;
class LLViewerObject;
class LLInventoryObject;
class LLInventoryItem;
+class LLMessageSystem;
class LLViewerRegion;
//
@@ -188,8 +188,6 @@ void process_decline_callingcard(LLMessageSystem* msg, void**);
// Message system exception prototypes
void invalid_message_callback(LLMessageSystem*, void*, EMessageException);
-void send_lure_911(void** user_data, S32 result);
-
void process_initiate_download(LLMessageSystem* msg, void**);
void inventory_offer_callback(S32 option, void* user_data);
@@ -208,15 +206,7 @@ struct LLOfferInfo
LLHost mHost;
};
-void send_generic_message(const char* method,
- const std::vector& strings,
- const LLUUID& invoice = LLUUID::null);
-
-void process_generic_message(LLMessageSystem* msg, void**);
-
void process_feature_disabled_message(LLMessageSystem* msg, void**);
-extern LLDispatcher gGenericDispatcher;
-
#endif
diff --git a/linden/indra/newview/llviewernetwork.cpp b/linden/indra/newview/llviewernetwork.cpp
index d870871..4cdbd5c 100644
--- a/linden/indra/newview/llviewernetwork.cpp
+++ b/linden/indra/newview/llviewernetwork.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewernetwork.h b/linden/indra/newview/llviewernetwork.h
index 4c90c5b..eb9610b 100644
--- a/linden/indra/newview/llviewernetwork.h
+++ b/linden/indra/newview/llviewernetwork.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerobject.cpp b/linden/indra/newview/llviewerobject.cpp
index a1a971f..5cb65b6 100644
--- a/linden/indra/newview/llviewerobject.cpp
+++ b/linden/indra/newview/llviewerobject.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -4631,6 +4632,13 @@ void LLViewerObject::setRegion(LLViewerRegion *regionp)
llassert(regionp);
mLatestRecvPacketID = 0;
mRegionp = regionp;
+
+ for (child_list_t::iterator i = getChildren().begin(); i != getChildren().end(); ++i)
+ {
+ LLViewerObject* child = *i;
+ child->setRegion(regionp);
+ }
+
setChanged(MOVED | SILHOUETTE);
updateDrawable(FALSE);
}
diff --git a/linden/indra/newview/llviewerobject.h b/linden/indra/newview/llviewerobject.h
index 7176d24..cdf2214 100644
--- a/linden/indra/newview/llviewerobject.h
+++ b/linden/indra/newview/llviewerobject.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerobjectlist.cpp b/linden/indra/newview/llviewerobjectlist.cpp
index 8c15906..44aa5c7 100644
--- a/linden/indra/newview/llviewerobjectlist.cpp
+++ b/linden/indra/newview/llviewerobjectlist.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerobjectlist.h b/linden/indra/newview/llviewerobjectlist.h
index f92c989..309def1 100644
--- a/linden/indra/newview/llviewerobjectlist.h
+++ b/linden/indra/newview/llviewerobjectlist.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerparcelmgr.cpp b/linden/indra/newview/llviewerparcelmgr.cpp
index a21d2f7..3d4bbe5 100644
--- a/linden/indra/newview/llviewerparcelmgr.cpp
+++ b/linden/indra/newview/llviewerparcelmgr.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -1366,7 +1367,6 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
LLUUID owner_id;
BOOL is_group_owned;
U32 auction_id = 0;
- BOOL is_reserved = FALSE;
S32 claim_price_per_meter = 0;
S32 rent_price_per_meter = 0;
S32 claim_date = 0;
@@ -1443,7 +1443,6 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
msg->getUUIDFast(_PREHASH_ParcelData, _PREHASH_OwnerID, owner_id);
msg->getBOOLFast(_PREHASH_ParcelData, _PREHASH_IsGroupOwned, is_group_owned);
msg->getU32Fast(_PREHASH_ParcelData, _PREHASH_AuctionID, auction_id);
- msg->getBOOLFast(_PREHASH_ParcelData, _PREHASH_ReservedNewbie, is_reserved);
msg->getS32Fast( _PREHASH_ParcelData, _PREHASH_ClaimDate, claim_date);
msg->getS32Fast( _PREHASH_ParcelData, _PREHASH_ClaimPrice, claim_price_per_meter);
msg->getS32Fast( _PREHASH_ParcelData, _PREHASH_RentPrice, rent_price_per_meter);
@@ -1480,7 +1479,6 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
parcel->setAABBMax(aabb_max);
parcel->setAuctionID(auction_id);
- parcel->setReservedForNewbie(is_reserved);
parcel->setOwnershipStatus((LLParcel::EOwnershipStatus)status);
parcel->setSimWideMaxPrimCapacity(sw_max_prims);
@@ -2233,16 +2231,10 @@ bool LLViewerParcelMgr::canAgentBuyParcel(LLParcel* parcel, bool forGroup) const
bool isOwner
= parcelOwner == (forGroup ? gAgent.getGroupID() : gAgent.getID());
- bool isAvailable
- = parcel->getReservedForNewbie()
- ? (!forGroup && gStatusBar->getSquareMetersCommitted() == 0)
- : true;
- // *TODO: should be based on never_owned_land, see SL-10728
-
bool isAuthorized
= (authorizeBuyer.isNull() || (gAgent.getID() == authorizeBuyer));
- return isForSale && !isOwner && isAuthorized && isAvailable && isEmpowered;
+ return isForSale && !isOwner && isAuthorized && isEmpowered;
}
@@ -2587,6 +2579,6 @@ bool LLParcelSelection::hasOthersSelected() const
LLParcelSelection* get_null_parcel_selection()
{
- static LLParcelSelectionHandle null_ptr = new LLParcelSelection();
- return null_ptr;
+ static LLParcelSelection null_selection;
+ return &null_selection;
}
diff --git a/linden/indra/newview/llviewerparcelmgr.h b/linden/indra/newview/llviewerparcelmgr.h
index c970611..bade8ef 100644
--- a/linden/indra/newview/llviewerparcelmgr.h
+++ b/linden/indra/newview/llviewerparcelmgr.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -221,12 +222,6 @@ public:
// make the selected parcel a content parcel.
void sendParcelGodForceToContent();
- // Take the selected parcel, and toggle it's 'reserved for newbie'
- // status.
- // *NOTE: There is no longer a newbie toggle. It is a linden sale
- // for newbie now.
- //void toggleParcelGodReserveForNewbie();
-
// Pack information about this parcel and send it to the region
// containing the southwest corner of the selection.
// If want_reply_to_update, simulator will send back a ParcelProperties
diff --git a/linden/indra/newview/llviewerparceloverlay.cpp b/linden/indra/newview/llviewerparceloverlay.cpp
index 36a4449..d5ad910 100644
--- a/linden/indra/newview/llviewerparceloverlay.cpp
+++ b/linden/indra/newview/llviewerparceloverlay.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerparceloverlay.h b/linden/indra/newview/llviewerparceloverlay.h
index 98cc19a..d444d96 100644
--- a/linden/indra/newview/llviewerparceloverlay.h
+++ b/linden/indra/newview/llviewerparceloverlay.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerpartsim.cpp b/linden/indra/newview/llviewerpartsim.cpp
index 2658e67..8c06381 100644
--- a/linden/indra/newview/llviewerpartsim.cpp
+++ b/linden/indra/newview/llviewerpartsim.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -249,13 +250,13 @@ void LLViewerPartGroup::removePart(const S32 part_num)
void LLViewerPartGroup::updateParticles(const F32 dt)
{
LLMemType mt(LLMemType::MTYPE_PARTICLES);
- S32 i, count;
+ S32 i;
LLVector3 gravity(0.f, 0.f, -9.8f);
LLViewerRegion *regionp = getRegion();
- count = (S32) mParticles.size();
- for (i = 0; i < count; i++)
+ S32 end = (S32) mParticles.size();
+ for (i = 0; i < end; i++)
{
LLVector3 a(0.f, 0.f, 0.f);
LLViewerPart& part = *((LLViewerPart*) mParticles[i]);
@@ -364,9 +365,8 @@ void LLViewerPartGroup::updateParticles(const F32 dt)
// Kill dead particles (either flagged dead, or too old)
if ((part.mLastUpdateTime > part.mMaxAge) || (LLViewerPart::LL_PART_DEAD_MASK == part.mFlags))
{
- removePart(i);
- i--;
- count--;
+ end--;
+ LLPointer::swap(mParticles[i], mParticles[end]);
}
else
{
@@ -375,13 +375,24 @@ void LLViewerPartGroup::updateParticles(const F32 dt)
{
// Transfer particles between groups
gWorldPointer->mPartSim.put(&part);
- removePart(i);
- i--;
- count--;
+ end--;
+ LLPointer::swap(mParticles[i], mParticles[end]);
}
}
}
+ S32 removed = (S32)mParticles.size() - end;
+ if (removed > 0)
+ {
+ // we removed one or more particles, so flag this group for update
+ mParticles.erase(mParticles.begin() + end, mParticles.end());
+ if (mVOPartGroupp.notNull())
+ {
+ gPipeline.markRebuild(mVOPartGroupp->mDrawable, LLDrawable::REBUILD_ALL, TRUE);
+ }
+ LLViewerPartSim::decPartCount(removed);
+ }
+
// Kill the viewer object if this particle group is empty
if (mParticles.empty())
{
@@ -480,7 +491,7 @@ LLViewerPartGroup *LLViewerPartSim::put(LLViewerPart* part)
const F32 MAX_MAG = 1000000.f*1000000.f; // 1 million
if (part->mPosAgent.magVecSquared() > MAX_MAG || !part->mPosAgent.isFinite())
{
-#if !LL_RELEASE_FOR_DOWNLOAD
+#if 0 && !LL_RELEASE_FOR_DOWNLOAD
llwarns << "LLViewerPartSim::put Part out of range!" << llendl;
llwarns << part->mPosAgent << llendl;
#endif
diff --git a/linden/indra/newview/llviewerpartsim.h b/linden/indra/newview/llviewerpartsim.h
index c1ef43b..88eb065 100644
--- a/linden/indra/newview/llviewerpartsim.h
+++ b/linden/indra/newview/llviewerpartsim.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerpartsource.cpp b/linden/indra/newview/llviewerpartsource.cpp
index 33e6df4..333c0ac 100644
--- a/linden/indra/newview/llviewerpartsource.cpp
+++ b/linden/indra/newview/llviewerpartsource.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerpartsource.h b/linden/indra/newview/llviewerpartsource.h
index 15f7ba2..3fd6b85 100644
--- a/linden/indra/newview/llviewerpartsource.h
+++ b/linden/indra/newview/llviewerpartsource.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerprecompiledheaders.cpp b/linden/indra/newview/llviewerprecompiledheaders.cpp
index 3880a70..16ac4a7 100644
--- a/linden/indra/newview/llviewerprecompiledheaders.cpp
+++ b/linden/indra/newview/llviewerprecompiledheaders.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerprecompiledheaders.h b/linden/indra/newview/llviewerprecompiledheaders.h
index 8ba45fc..cc2af01 100644
--- a/linden/indra/newview/llviewerprecompiledheaders.h
+++ b/linden/indra/newview/llviewerprecompiledheaders.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerregion.cpp b/linden/indra/newview/llviewerregion.cpp
index 88d8a40..51b1ebe 100644
--- a/linden/indra/newview/llviewerregion.cpp
+++ b/linden/indra/newview/llviewerregion.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -34,7 +35,6 @@
#include "llhttpclient.h"
#include "llregionflags.h"
#include "llregionhandle.h"
-#include "llsdmessagesystem.h"
#include "llsurface.h"
#include "message.h"
//#include "vmath.h"
@@ -43,6 +43,7 @@
#include "llagent.h"
#include "llcallingcard.h"
+#include "llcaphttpsender.h"
#include "lldir.h"
#include "lleventpoll.h"
#include "llfloatergodtools.h"
@@ -57,6 +58,12 @@
#include "llvocache.h"
#include "llvoclouds.h"
#include "llworld.h"
+#include "viewer.h"
+
+// Viewer object cache version, change if object update
+// format changes. JC
+const U32 INDRA_OBJECT_CACHE_VERSION = 12;
+
extern BOOL gNoRender;
@@ -161,6 +168,7 @@ LLViewerRegion::~LLViewerRegion()
delete mParcelOverlay;
delete mLandp;
delete mEventPoll;
+ LLHTTPSender::clearSender(mHost);
saveCache();
}
@@ -441,7 +449,6 @@ LLVector3 LLViewerRegion::getCenterAgent() const
return gAgent.getPosAgentFromGlobal(mCenterGlobal);
}
-
void LLViewerRegion::setRegionNameAndZone(const char* name_and_zone)
{
LLString name_zone(name_and_zone);
@@ -724,21 +731,6 @@ F32 LLViewerRegion::getCompositionXY(const S32 x, const S32 y) const
return getComposition()->getValueScaled((F32)x, (F32)y);
}
-
-// ---------------- Friends ----------------
-
-std::ostream& operator<<(std::ostream &s, const LLViewerRegion ®ion)
-{
- s << "{ ";
- s << region.mHost;
- s << " mOriginGlobal = " << region.getOriginGlobal()<< "\n";
- s << "}";
- return s;
-}
-
-
-// ---------------- Protected Member Functions ----------------
-
void LLViewerRegion::calculateCenterGlobal()
{
mCenterGlobal = mOriginGlobal;
@@ -754,7 +746,24 @@ void LLViewerRegion::calculateCenterGlobal()
}
}
+void LLViewerRegion::calculateCameraDistance()
+{
+ mCameraDistanceSquared = (F32)(gAgent.getCameraPositionGlobal() - getCenterGlobal()).magVecSquared();
+}
+// ---------------- Friends ----------------
+
+std::ostream& operator<<(std::ostream &s, const LLViewerRegion ®ion)
+{
+ s << "{ ";
+ s << region.mHost;
+ s << " mOriginGlobal = " << region.getOriginGlobal()<< "\n";
+ s << "}";
+ return s;
+}
+
+
+// ---------------- Protected Member Functions ----------------
void LLViewerRegion::updateNetStats()
{
@@ -1293,35 +1302,34 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
capabilityNames.append("SendUserReport");
capabilityNames.append("SendUserReportWithScreenshot");
capabilityNames.append("RequestTextureDownload");
+ capabilityNames.append("UntrustedSimulatorMessage");
+
LLHTTPClient::post(url, capabilityNames, BaseCapabilitiesComplete::build(this));
}
static
LLEventPoll* createViewerEventPoll(const std::string& url)
{
- static LLHTTPNode eventRoot;
- static bool eventRootServicesAdded = false;
- if (!eventRootServicesAdded)
- {
- LLSDMessageSystem::useServices();
- LLHTTPRegistrar::buildAllServices(eventRoot);
- eventRootServicesAdded = true;
- }
-
- return new LLEventPoll(url, eventRoot);
+ return new LLEventPoll(url);
}
void LLViewerRegion::setCapability(const std::string& name, const std::string& url)
{
- mCapabilities[name] = url;
-
- if (name == "EventQueueGet")
+ if(name == "EventQueueGet")
{
delete mEventPoll;
mEventPoll = NULL;
mEventPoll = createViewerEventPoll(url);
}
+ else if(name == "UntrustedSimulatorMessage")
+ {
+ LLHTTPSender::setSender(mHost, new LLCapHTTPSender(url));
+ }
+ else
+ {
+ mCapabilities[name] = url;
+ }
}
std::string LLViewerRegion::getCapability(const std::string& name) const
diff --git a/linden/indra/newview/llviewerregion.h b/linden/indra/newview/llviewerregion.h
index 69a8f19..5b7ce17 100644
--- a/linden/indra/newview/llviewerregion.h
+++ b/linden/indra/newview/llviewerregion.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -227,9 +228,19 @@ public:
void unpackRegionHandshake();
void calculateCenterGlobal();
+ void calculateCameraDistance();
friend std::ostream& operator<<(std::ostream &s, const LLViewerRegion ®ion);
+public:
+ struct CompareDistance
+ {
+ bool operator()(const LLViewerRegion* const& lhs, const LLViewerRegion* const& rhs)
+ {
+ return lhs->mCameraDistanceSquared < rhs->mCameraDistanceSquared;
+ }
+ };
+
protected:
void disconnectAllNeighbors();
void initStats();
@@ -284,13 +295,15 @@ protected:
U32 mPingDelay;
F32 mDeltaTime; // Time since last measurement of lastPackets, Bits, etc
+ // Misc
LLVLComposition *mCompositionp; // Composition layer for the surface
U32 mRegionFlags; // includes damage flags
U8 mSimAccess;
F32 mBillableFactor;
U32 mMaxTasks; // max prim count
-
+ F32 mCameraDistanceSquared; // updated once per frame
+
// Maps local ids to cache entries.
// Regions can have order 10,000 objects, so assume
// a structure of size 2^14 = 16,000
diff --git a/linden/indra/newview/llviewerreputation.cpp b/linden/indra/newview/llviewerreputation.cpp
deleted file mode 100644
index 3ee4ab3..0000000
--- a/linden/indra/newview/llviewerreputation.cpp
+++ /dev/null
@@ -1,113 +0,0 @@
-/**
- * @file llviewerreputation.cpp
- * @brief Viewer-side reputation system handling.
- *
- * Copyright (c) 2002-2007, Linden Research, Inc.
- *
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlife.com/developers/opensource/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at http://secondlife.com/developers/opensource/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#include "llviewerprecompiledheaders.h"
-
-#include "llviewerreputation.h"
-
-// linden library includes
-#include "llerror.h"
-#include "llnamevalue.h"
-#include "message.h"
-#include "lluuid.h"
-#include "llinstantmessage.h"
-#include "lldbstrings.h"
-
-// viewer includes
-#include "llagent.h"
-#include "llviewerregion.h"
-
-// constants
-const F32 REP_AGENT_SCORE_POS = 1.0f; // positive rating changes score by this much
-const F32 REP_AGENT_SCORE_NEG = -1.0f;
-const F32 REP_OBJECT_SCORE_POS = 1.0f;
-const F32 REP_OBJECT_SCORE_NEG = -1.0f;
-
-
-// Send a reputation assignment for an agent.
-// Forward through the receiving agent's simulator.
-void send_reputation_agent_assign(const LLUUID& rator_id,
- const LLUUID& ratee_id,
- F32 behavior,
- F32 appearance,
- F32 building,
- const char* text)
-{
- LLMessageSystem* msg = gMessageSystem;
- if (!msg) return;
-
- msg->newMessageFast(_PREHASH_ReputationAgentAssign);
- msg->nextBlockFast(_PREHASH_DataBlock);
- msg->addUUIDFast(_PREHASH_RatorID, rator_id );
- msg->addUUIDFast(_PREHASH_RateeID, ratee_id );
- msg->addF32Fast(_PREHASH_Behavior, behavior );
- msg->addF32Fast(_PREHASH_Appearance, appearance );
- msg->addF32Fast(_PREHASH_Building, building );
- msg->sendReliable( gAgent.getRegion()->getHost() );
-
- // Send instant message to the person rated.
- LLString name;
- gAgent.getName(name);
-
- BOOL any_positive = (behavior > 0.f || appearance > 0.f || building > 0.f);
- BOOL any_negative = (behavior < 0.f || appearance < 0.f || building < 0.f);
-
- LLString message(name);
- if (any_positive && !any_negative)
- {
- message.append(" rated you positively: ");
- }
- else if (any_negative && !any_positive)
- {
- message.append(" rated you negatively: ");
- }
- else
- {
- message.append(" rated you: ");
- }
-
- if (text && strlen(text) > 0) /* Flawfinder: ignore */
- {
- message.append(text);
- }
- else
- {
- message.append("(no message)");
- }
-
- pack_instant_message(
- msg,
- gAgent.getID(),
- FALSE,
- gAgent.getSessionID(),
- ratee_id,
- SYSTEM_FROM,
- message.c_str(),
- IM_ONLINE,
- IM_CONSOLE_AND_CHAT_HISTORY);
- gAgent.sendReliableMessage();
-}
diff --git a/linden/indra/newview/llviewerreputation.h b/linden/indra/newview/llviewerreputation.h
deleted file mode 100644
index 04c8fd3..0000000
--- a/linden/indra/newview/llviewerreputation.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * @file llviewerreputation.h
- * @brief Viewer-side handling of reputation system
- *
- * Copyright (c) 2002-2007, Linden Research, Inc.
- *
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlife.com/developers/opensource/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at http://secondlife.com/developers/opensource/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-#ifndef LLVIEWERREPUTATION_H
-#define LLVIEWERREPUTATION_H
-
-class LLMessageSystem;
-class LLUUID;
-
-
-// messaging
-void send_reputation_agent_assign( const LLUUID& rator, const LLUUID& ratee, F32 behavior, F32 appearance, F32 building, const char* text = NULL);
-void send_reputation_agent_request(const LLUUID& ratee_id);
-
-
-#endif
diff --git a/linden/indra/newview/llviewerstats.cpp b/linden/indra/newview/llviewerstats.cpp
index c7d2ee2..4ad1155 100644
--- a/linden/indra/newview/llviewerstats.cpp
+++ b/linden/indra/newview/llviewerstats.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerstats.h b/linden/indra/newview/llviewerstats.h
index 22f6e57..81650dd 100644
--- a/linden/indra/newview/llviewerstats.h
+++ b/linden/indra/newview/llviewerstats.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewertexteditor.cpp b/linden/indra/newview/llviewertexteditor.cpp
index f84c875..826c411 100644
--- a/linden/indra/newview/llviewertexteditor.cpp
+++ b/linden/indra/newview/llviewertexteditor.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -342,7 +343,16 @@ void LLEmbeddedItems::bindEmbeddedChars( const LLFontGL* font )
}
break;
case LLAssetType::AT_CLOTHING: img_name = "inv_item_clothing.tga"; break;
- case LLAssetType::AT_OBJECT: img_name = "inv_item_object.tga"; break;
+ case LLAssetType::AT_OBJECT:
+ if (item->getFlags() & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS)
+ {
+ img_name = "inv_item_object_multi.tga";
+ }
+ else
+ {
+ img_name = "inv_item_object.tga";
+ }
+ break;
case LLAssetType::AT_NOTECARD: img_name = "inv_item_notecard.tga"; break;
case LLAssetType::AT_LSL_TEXT: img_name = "inv_item_script.tga"; break;
case LLAssetType::AT_BODYPART: img_name = "inv_item_bodypart.tga"; break;
@@ -594,7 +604,7 @@ BOOL LLViewerTextEditor::handleMouseDown(S32 x, S32 y, MASK mask)
{
mDragItem = item_at_pos;
mDragItemSaved = LLEmbeddedItems::getEmbeddedItemSaved(wc);
- gFocusMgr.setMouseCapture( this, NULL );
+ gFocusMgr.setMouseCapture( this );
mMouseDownX = x;
mMouseDownY = y;
S32 screen_x;
@@ -656,7 +666,7 @@ BOOL LLViewerTextEditor::handleMouseDown(S32 x, S32 y, MASK mask)
setCursorAtLocalPos( x, y, TRUE );
startSelection();
}
- gFocusMgr.setMouseCapture( this, &LLTextEditor::onMouseCaptureLost );
+ gFocusMgr.setMouseCapture( this );
}
handled = TRUE;
@@ -686,7 +696,7 @@ BOOL LLViewerTextEditor::handleHover(S32 x, S32 y, MASK mask)
}
if( getVisible() )
{
- if(gFocusMgr.getMouseCapture() == this )
+ if(hasMouseCapture() )
{
if( mIsSelecting )
{
@@ -839,7 +849,7 @@ BOOL LLViewerTextEditor::handleMouseUp(S32 x, S32 y, MASK mask)
// Delay cursor flashing
mKeystrokeTimer.reset();
- if( gFocusMgr.getMouseCapture() == this )
+ if( hasMouseCapture() )
{
if (mDragItem)
{
@@ -852,7 +862,7 @@ BOOL LLViewerTextEditor::handleMouseUp(S32 x, S32 y, MASK mask)
}
}
mDragItem = NULL;
- gFocusMgr.setMouseCapture( NULL, NULL );
+ gFocusMgr.setMouseCapture( NULL );
handled = TRUE;
}
@@ -1443,12 +1453,14 @@ BOOL LLViewerTextEditor::exportBuffer( LLString& buffer )
{
LLNotecard nc(LLNotecard::MAX_SIZE);
- std::vector > embedded_items;
- mEmbeddedItemList->getEmbeddedItemList(embedded_items);
-
- nc.setItems(embedded_items);
+ // Get the embedded text and update the item list to just be the used items
nc.setText(getEmbeddedText());
+ // Now get the used items and copy the list to the notecard
+ std::vector > embedded_items;
+ mEmbeddedItemList->getEmbeddedItemList(embedded_items);
+ nc.setItems(embedded_items);
+
std::stringstream out_stream;
nc.exportStream(out_stream);
diff --git a/linden/indra/newview/llviewertexteditor.h b/linden/indra/newview/llviewertexteditor.h
index da980d1..6665203 100644
--- a/linden/indra/newview/llviewertexteditor.h
+++ b/linden/indra/newview/llviewertexteditor.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewertextureanim.cpp b/linden/indra/newview/llviewertextureanim.cpp
index bd4d0ef..d608088 100644
--- a/linden/indra/newview/llviewertextureanim.cpp
+++ b/linden/indra/newview/llviewertextureanim.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewertextureanim.h b/linden/indra/newview/llviewertextureanim.h
index c5b4e84..0477455 100644
--- a/linden/indra/newview/llviewertextureanim.h
+++ b/linden/indra/newview/llviewertextureanim.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerthrottle.cpp b/linden/indra/newview/llviewerthrottle.cpp
index 7f09937..1db94ec 100644
--- a/linden/indra/newview/llviewerthrottle.cpp
+++ b/linden/indra/newview/llviewerthrottle.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerthrottle.h b/linden/indra/newview/llviewerthrottle.h
index c9157bd..e56e623 100644
--- a/linden/indra/newview/llviewerthrottle.h
+++ b/linden/indra/newview/llviewerthrottle.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvieweruictrlfactory.cpp b/linden/indra/newview/llvieweruictrlfactory.cpp
index 3523c88..efab1cc 100644
--- a/linden/indra/newview/llvieweruictrlfactory.cpp
+++ b/linden/indra/newview/llvieweruictrlfactory.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvieweruictrlfactory.h b/linden/indra/newview/llvieweruictrlfactory.h
index dffc93d..de9964e 100644
--- a/linden/indra/newview/llvieweruictrlfactory.h
+++ b/linden/indra/newview/llvieweruictrlfactory.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewervisualparam.cpp b/linden/indra/newview/llviewervisualparam.cpp
index b255235..fd6561d 100644
--- a/linden/indra/newview/llviewervisualparam.cpp
+++ b/linden/indra/newview/llviewervisualparam.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewervisualparam.h b/linden/indra/newview/llviewervisualparam.h
index c8bdcf9..9f469e5 100644
--- a/linden/indra/newview/llviewervisualparam.h
+++ b/linden/indra/newview/llviewervisualparam.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llviewerwindow.cpp b/linden/indra/newview/llviewerwindow.cpp
index a4d38f8..9498dbd 100644
--- a/linden/indra/newview/llviewerwindow.cpp
+++ b/linden/indra/newview/llviewerwindow.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -62,7 +63,6 @@
#include "llxfermanager.h"
#include "message.h"
#include "object_flags.h"
-#include "text_out.h"
#include "lltimer.h"
#include "timing.h"
#include "llviewermenu.h"
@@ -353,7 +353,216 @@ void LLViewerWindow::printFeedback()
}
#endif //SABINRIG
+////////////////////////////////////////////////////////////////////////////
+//
+// LLDebugText
+//
+
+class LLDebugText
+{
+private:
+ struct Line
+ {
+ Line(const std::string& in_text, S32 in_x, S32 in_y) : text(in_text), x(in_x), y(in_y) {}
+ std::string text;
+ S32 x,y;
+ };
+
+ LLViewerWindow *mWindow;
+
+ typedef std::vector line_list_t;
+ line_list_t mLineList;
+ LLColor4 mTextColor;
+
+public:
+ LLDebugText(LLViewerWindow* window) : mWindow(window) {}
+
+ void addText(S32 x, S32 y, const std::string &text)
+ {
+ mLineList.push_back(Line(text, x, y));
+ }
+
+ void update()
+ {
+ std::string wind_vel_text;
+ std::string wind_vector_text;
+ std::string rwind_vel_text;
+ std::string rwind_vector_text;
+ std::string audio_text;
+
+ // Draw the statistics in a light gray
+ // and in a thin font
+ mTextColor = LLColor4( 0.86f, 0.86f, 0.86f, 1.f );
+
+ // Draw stuff growing up from right lower corner of screen
+ U32 xpos = mWindow->getWindowWidth() - 350;
+ U32 ypos = 64;
+ const U32 y_inc = 20;
+
+ if (gSavedSettings.getBOOL("DebugShowTime"))
+ {
+ const U32 y_inc2 = 15;
+ for (std::map::reverse_iterator iter = gDebugTimers.rbegin();
+ iter != gDebugTimers.rend(); ++iter)
+ {
+ S32 idx = iter->first;
+ LLFrameTimer& timer = iter->second;
+ F32 time = timer.getElapsedTimeF32();
+ S32 hours = (S32)(time / (60*60));
+ S32 mins = (S32)((time - hours*(60*60)) / 60);
+ S32 secs = (S32)((time - hours*(60*60) - mins*60));
+ addText(xpos, ypos, llformat(" Debug %d: %d:%02d:%02d", idx, hours,mins,secs)); ypos += y_inc2;
+ }
+
+ F32 time = gFrameTimeSeconds;
+ S32 hours = (S32)(time / (60*60));
+ S32 mins = (S32)((time - hours*(60*60)) / 60);
+ S32 secs = (S32)((time - hours*(60*60) - mins*60));
+ addText(xpos, ypos, llformat("Time: %d:%02d:%02d", hours,mins,secs)); ypos += y_inc;
+ }
+
+ if (gDisplayCameraPos)
+ {
+ std::string camera_view_text;
+ std::string camera_center_text;
+ std::string agent_view_text;
+ std::string agent_left_text;
+ std::string agent_center_text;
+ std::string agent_root_center_text;
+
+ LLVector3d tvector; // Temporary vector to hold data for printing.
+
+ // Update camera center, camera view, wind info every other frame
+ tvector = gAgent.getPositionGlobal();
+ agent_center_text = llformat("AgentCenter %f %f %f",
+ (F32)(tvector.mdV[VX]), (F32)(tvector.mdV[VY]), (F32)(tvector.mdV[VZ]));
+
+ if (gAgent.getAvatarObject())
+ {
+ tvector = gAgent.getPosGlobalFromAgent(gAgent.getAvatarObject()->mRoot.getWorldPosition());
+ agent_root_center_text = llformat("AgentRootCenter %f %f %f",
+ (F32)(tvector.mdV[VX]), (F32)(tvector.mdV[VY]), (F32)(tvector.mdV[VZ]));
+ }
+ else
+ {
+ agent_root_center_text = "---";
+ }
+
+ tvector = LLVector4(gAgent.getFrameAgent().getAtAxis());
+ agent_view_text = llformat("AgentAtAxis %f %f %f",
+ (F32)(tvector.mdV[VX]), (F32)(tvector.mdV[VY]), (F32)(tvector.mdV[VZ]));
+
+ tvector = LLVector4(gAgent.getFrameAgent().getLeftAxis());
+ agent_left_text = llformat("AgentLeftAxis %f %f %f",
+ (F32)(tvector.mdV[VX]), (F32)(tvector.mdV[VY]), (F32)(tvector.mdV[VZ]));
+
+ tvector = gAgent.getCameraPositionGlobal();
+ camera_center_text = llformat("CameraCenter %f %f %f",
+ (F32)(tvector.mdV[VX]), (F32)(tvector.mdV[VY]), (F32)(tvector.mdV[VZ]));
+
+ tvector = LLVector4(gCamera->getAtAxis());
+ camera_view_text = llformat("CameraAtAxis %f %f %f",
+ (F32)(tvector.mdV[VX]), (F32)(tvector.mdV[VY]), (F32)(tvector.mdV[VZ]));
+
+ addText(xpos, ypos, agent_center_text); ypos += y_inc;
+ addText(xpos, ypos, agent_root_center_text); ypos += y_inc;
+ addText(xpos, ypos, agent_view_text); ypos += y_inc;
+ addText(xpos, ypos, agent_left_text); ypos += y_inc;
+ addText(xpos, ypos, camera_center_text); ypos += y_inc;
+ addText(xpos, ypos, camera_view_text); ypos += y_inc;
+ }
+
+ if (gDisplayWindInfo)
+ {
+ wind_vel_text = llformat("Wind velocity %.2f m/s", gWindVec.magVec());
+ wind_vector_text = llformat("Wind vector %.2f %.2f %.2f", gWindVec.mV[0], gWindVec.mV[1], gWindVec.mV[2]);
+ rwind_vel_text = llformat("RWind vel %.2f m/s", gRelativeWindVec.magVec());
+ rwind_vector_text = llformat("RWind vec %.2f %.2f %.2f", gRelativeWindVec.mV[0], gRelativeWindVec.mV[1], gRelativeWindVec.mV[2]);
+
+ addText(xpos, ypos, wind_vel_text); ypos += y_inc;
+ addText(xpos, ypos, wind_vector_text); ypos += y_inc;
+ addText(xpos, ypos, rwind_vel_text); ypos += y_inc;
+ addText(xpos, ypos, rwind_vector_text); ypos += y_inc;
+ }
+ if (gDisplayWindInfo)
+ {
+ if (gAudiop)
+ {
+ audio_text= llformat("Audio for wind: %d", gAudiop->isWindEnabled());
+ }
+ addText(xpos, ypos, audio_text); ypos += y_inc;
+ }
+ if (gDisplayFOV)
+ {
+ addText(xpos, ypos, llformat("FOV: %2.1f deg", RAD_TO_DEG * gCamera->getView()));
+ ypos += y_inc;
+ }
+ if (gSavedSettings.getBOOL("DebugShowRenderInfo"))
+ {
+ if (gPipeline.getUseVertexShaders() == 0)
+ {
+ addText(xpos, ypos, "Shaders Disabled");
+ ypos += y_inc;
+ }
+ addText(xpos, ypos, llformat("%d MB Vertex Data", LLVertexBuffer::sAllocatedBytes/(1024*1024)));
+ ypos += y_inc;
+
+ addText(xpos, ypos, llformat("%d Pending Lock", LLVertexBuffer::sLockedList.size()));
+ ypos += y_inc;
+
+ addText(xpos, ypos, llformat("%d Vertex Buffers", LLVertexBuffer::sGLCount));
+ ypos += y_inc;
+ }
+
+ if (LLPipeline::getRenderParticleBeacons(NULL))
+ {
+ addText(xpos, ypos, "Viewing particle beacons (blue)");
+ ypos += y_inc;
+ }
+ if (LLPipeline::toggleRenderTypeControlNegated((void*)LLPipeline::RENDER_TYPE_PARTICLES))
+ {
+ addText(xpos, ypos, "Hiding particles");
+ ypos += y_inc;
+ }
+ if (LLPipeline::getRenderPhysicalBeacons(NULL))
+ {
+ addText(xpos, ypos, "Viewing physical object beacons (green)");
+ ypos += y_inc;
+ }
+ if (LLPipeline::getRenderScriptedBeacons(NULL))
+ {
+ addText(xpos, ypos, "Viewing scripted object beacons (red)");
+ ypos += y_inc;
+ }
+ if (LLPipeline::getRenderSoundBeacons(NULL))
+ {
+ addText(xpos, ypos, "Viewing sound beacons (yellow)");
+ ypos += y_inc;
+ }
+ }
+
+ void draw()
+ {
+ for (line_list_t::iterator iter = mLineList.begin();
+ iter != mLineList.end(); ++iter)
+ {
+ const Line& line = *iter;
+ LLFontGL::sMonospace->renderUTF8(line.text, 0, (F32)line.x, (F32)line.y, mTextColor,
+ LLFontGL::LEFT, LLFontGL::TOP,
+ LLFontGL::NORMAL, S32_MAX, S32_MAX, NULL, FALSE);
+ }
+ mLineList.clear();
+ }
+
+};
+
+void LLViewerWindow::updateDebugText()
+{
+ mDebugText->update();
+}
+
+////////////////////////////////////////////////////////////////////////////
//
// LLViewerWindow
//
@@ -420,12 +629,20 @@ BOOL LLViewerWindow::handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask
}
// Topmost view gets a chance before the hierarchy
- LLView* top_view = gFocusMgr.getTopView();
- if (top_view)
+ LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl();
+ BOOL mouse_over_top_ctrl = FALSE;
+ if (top_ctrl)
{
S32 local_x, local_y;
- top_view->screenPointToLocal( x, y, &local_x, &local_y );
- if (top_view->pointInView(local_x, local_y) && top_view->handleMouseDown(local_x, local_y, mask)) return TRUE;
+ top_ctrl->screenPointToLocal( x, y, &local_x, &local_y );
+ if (top_ctrl->pointInView(local_x, local_y))
+ {
+ mouse_over_top_ctrl = TRUE;
+ if(top_ctrl->handleMouseDown(local_x, local_y, mask))
+ {
+ return TRUE;
+ }
+ }
}
// Give the UI views a chance to process the click
@@ -436,6 +653,11 @@ BOOL LLViewerWindow::handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask
llinfos << "Left Mouse Down" << LLView::sMouseHandlerMessage << llendl;
LLView::sMouseHandlerMessage = "";
}
+ if (top_ctrl && top_ctrl->hasFocus() && !mouse_over_top_ctrl)
+ {
+ // always defocus top view if we click off of it
+ top_ctrl->setFocus(FALSE);
+ }
return TRUE;
}
else if (LLView::sDebugMouseHandling)
@@ -443,6 +665,12 @@ BOOL LLViewerWindow::handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask
llinfos << "Left Mouse Down not handled by view" << llendl;
}
+ if (top_ctrl && top_ctrl->hasFocus() && !mouse_over_top_ctrl)
+ {
+ // always defocus top view if we click off of it
+ top_ctrl->setFocus(FALSE);
+ }
+
if (gDisconnected)
{
return FALSE;
@@ -498,12 +726,20 @@ BOOL LLViewerWindow::handleDoubleClick(LLWindow *window, LLCoordGL pos, MASK ma
}
// Check for hit on UI.
- LLView* top_view = gFocusMgr.getTopView();
- if (top_view)
+ LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl();
+ BOOL mouse_over_top_ctrl = FALSE;
+ if (top_ctrl)
{
S32 local_x, local_y;
- top_view->screenPointToLocal( x, y, &local_x, &local_y );
- if (top_view->pointInView(local_x, local_y) && top_view->handleDoubleClick(local_x, local_y, mask)) return TRUE;
+ top_ctrl->screenPointToLocal( x, y, &local_x, &local_y );
+ if (top_ctrl->pointInView(local_x, local_y))
+ {
+ mouse_over_top_ctrl = TRUE;
+ if(top_ctrl->handleDoubleClick(local_x, local_y, mask))
+ {
+ return TRUE;
+ }
+ }
}
if (mRootView->handleDoubleClick(x, y, mask))
@@ -513,6 +749,11 @@ BOOL LLViewerWindow::handleDoubleClick(LLWindow *window, LLCoordGL pos, MASK ma
llinfos << "Left Mouse Down" << LLView::sMouseHandlerMessage << llendl;
LLView::sMouseHandlerMessage = "";
}
+ if (top_ctrl && top_ctrl->hasFocus() && !mouse_over_top_ctrl)
+ {
+ // always defocus top view if we click off of it
+ top_ctrl->setFocus(FALSE);
+ }
return TRUE;
}
else if (LLView::sDebugMouseHandling)
@@ -520,7 +761,13 @@ BOOL LLViewerWindow::handleDoubleClick(LLWindow *window, LLCoordGL pos, MASK ma
llinfos << "Left Mouse Down not handled by view" << llendl;
}
- // Why is this here? JC 9/3/2002
+ if (top_ctrl && top_ctrl->hasFocus() && !mouse_over_top_ctrl)
+ {
+ // always defocus top view if we click off of it
+ top_ctrl->setFocus(FALSE);
+ }
+
+ // Why is this here? JC 9/3/2002
if (gNoRender)
{
return TRUE;
@@ -593,12 +840,12 @@ BOOL LLViewerWindow::handleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask)
return mouse_captor->handleMouseUp(local_x, local_y, mask);
}
- LLView* top_view = gFocusMgr.getTopView();
- if (top_view)
+ LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl();
+ if (top_ctrl)
{
S32 local_x, local_y;
- top_view->screenPointToLocal( x, y, &local_x, &local_y );
- handled = top_view->pointInView(local_x, local_y) && top_view->handleMouseUp(local_x, local_y, mask);
+ top_ctrl->screenPointToLocal( x, y, &local_x, &local_y );
+ handled = top_ctrl->pointInView(local_x, local_y) && top_ctrl->handleMouseUp(local_x, local_y, mask);
}
if( !handled )
@@ -689,12 +936,20 @@ BOOL LLViewerWindow::handleRightMouseDown(LLWindow *window, LLCoordGL pos, MASK
return mouse_captor->handleRightMouseDown(local_x, local_y, mask);
}
- LLView* top_view = gFocusMgr.getTopView();
- if (top_view)
+ LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl();
+ BOOL mouse_over_top_ctrl = FALSE;
+ if (top_ctrl)
{
S32 local_x, local_y;
- top_view->screenPointToLocal( x, y, &local_x, &local_y );
- if (top_view->pointInView(local_x, local_y) && top_view->handleRightMouseDown(local_x, local_y, mask)) return TRUE;
+ top_ctrl->screenPointToLocal( x, y, &local_x, &local_y );
+ if (top_ctrl->pointInView(local_x, local_y))
+ {
+ mouse_over_top_ctrl = TRUE;
+ if(top_ctrl->handleRightMouseDown(local_x, local_y, mask))
+ {
+ return TRUE;
+ }
+ }
}
if( mRootView->handleRightMouseDown(x, y, mask) )
@@ -704,6 +959,11 @@ BOOL LLViewerWindow::handleRightMouseDown(LLWindow *window, LLCoordGL pos, MASK
llinfos << "Right Mouse Down" << LLView::sMouseHandlerMessage << llendl;
LLView::sMouseHandlerMessage = "";
}
+ if (top_ctrl && top_ctrl->hasFocus() && !mouse_over_top_ctrl)
+ {
+ // always defocus top view if we click off of it
+ top_ctrl->setFocus(FALSE);
+ }
return TRUE;
}
else if (LLView::sDebugMouseHandling)
@@ -711,6 +971,12 @@ BOOL LLViewerWindow::handleRightMouseDown(LLWindow *window, LLCoordGL pos, MASK
llinfos << "Right Mouse Down not handled by view" << llendl;
}
+ if (top_ctrl && top_ctrl->hasFocus() && !mouse_over_top_ctrl)
+ {
+ // always defocus top view if we click off of it
+ top_ctrl->setFocus(FALSE);
+ }
+
if (gToolMgr)
{
if(gToolMgr->getCurrentTool()->handleRightMouseDown( x, y, mask ) )
@@ -792,12 +1058,12 @@ BOOL LLViewerWindow::handleRightMouseUp(LLWindow *window, LLCoordGL pos, MASK m
return mouse_captor->handleRightMouseUp(local_x, local_y, mask);
}
- LLView* top_view = gFocusMgr.getTopView();
- if (top_view)
+ LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl();
+ if (top_ctrl)
{
S32 local_x, local_y;
- top_view->screenPointToLocal( x, y, &local_x, &local_y );
- handled = top_view->pointInView(local_x, local_y) && top_view->handleRightMouseUp(local_x, local_y, mask);
+ top_ctrl->screenPointToLocal( x, y, &local_x, &local_y );
+ handled = top_ctrl->pointInView(local_x, local_y) && top_ctrl->handleRightMouseUp(local_x, local_y, mask);
}
if( !handled )
@@ -931,7 +1197,7 @@ void LLViewerWindow::handleFocusLost(LLWindow *window)
{
gToolMgr->onAppFocusLost();
}
- gFocusMgr.setMouseCapture( NULL, NULL );
+ gFocusMgr.setMouseCapture( NULL );
if (gMenuBarView)
{
@@ -1224,6 +1490,8 @@ LLViewerWindow::LLViewerWindow(
LLFontManager::initClass();
+ // Initialize OpenGL Renderer
+
if (!gFeatureManagerp->isFeatureAvailable("RenderVBO") ||
!gGLManager.mHasVertexBufferObject)
{
@@ -1236,8 +1504,27 @@ LLViewerWindow::LLViewerWindow(
// stuff like AGP if we think that it'll crash the viewer.
//
gFeatureManagerp->initGraphicsFeatureMasks();
+
+ // The ATI Mobility Radeon with 1.15.0 causes crashes in FMOD on startup for
+ // unknown reasons, but only if you have an old settings.ini file.
+ // In this case, force the graphics settings back to recommended, but only
+ // do it once. JC
+ std::string gpu_string = gFeatureManagerp->getGPUString();
+ LLString::toLower(gpu_string);
+ bool upgrade_to_1_15 = (gSavedSettings.getString("LastRunVersion") != "1.15.0");
+ bool mobility_radeon = (gpu_string.find("mobility radeon") != std::string::npos);
+ bool mobility_radeon_upgrade_hack = upgrade_to_1_15 && mobility_radeon;
+ if (mobility_radeon_upgrade_hack)
+ {
+ llinfos << "1.15.0 update on Mobility Radeon" << llendl;
+ llinfos << "Forcing recommended graphics settings" << llendl;
+ llinfos << "Forcing audio off" << llendl;
+ gUseAudio = FALSE;
+ }
+
if (gFeatureManagerp->isSafe()
- || (gSavedSettings.getS32("LastFeatureVersion") != gFeatureManagerp->getVersion()))
+ || (gSavedSettings.getS32("LastFeatureVersion") != gFeatureManagerp->getVersion())
+ || mobility_radeon_upgrade_hack)
{
gFeatureManagerp->applyRecommendedFeatures();
}
@@ -1249,16 +1536,30 @@ LLViewerWindow::LLViewerWindow(
idx = LLViewerImageList::getMaxVideoRamSetting(-2); // get max recommended setting
gSavedSettings.setS32("GraphicsCardMemorySetting", idx);
}
-
+
+ // If we crashed while initializng GL stuff last time, disable certain features
+ if (gSavedSettings.getBOOL("RenderInitError"))
+ {
+ mInitAlert = "DisplaySettingsNoShaders";
+ gSavedSettings.setBOOL("VertexShaderEnable", FALSE);
+ }
+
if (!gNoRender)
{
//
// Initialize GL stuff
//
+ // Set this flag in case we crash while initializing GL
+ gSavedSettings.setBOOL("RenderInitError", TRUE);
+ gSavedSettings.saveToFile( gSettingsFileName, TRUE );
+
gPipeline.init();
stop_glerror();
initGLDefaults();
+
+ gSavedSettings.setBOOL("RenderInitError", FALSE);
+ gSavedSettings.saveToFile( gSettingsFileName, TRUE );
}
//
@@ -1303,6 +1604,9 @@ LLViewerWindow::LLViewerWindow(
// sync the keyboard's setting with the saved setting
gSavedSettings.getControl("NumpadControl")->firePropertyChanged();
+
+ mDebugText = new LLDebugText(this);
+
}
void LLViewerWindow::initGLDefaults()
@@ -1651,6 +1955,8 @@ void LLViewerWindow::initWorldUI()
LLViewerWindow::~LLViewerWindow()
{
+ delete mDebugText;
+
gSavedSettings.setS32("FloaterViewBottom", gFloaterView->getRect().mBottom);
// Cleanup global views
@@ -1864,6 +2170,10 @@ void LLViewerWindow::reshape(S32 width, S32 height)
}
}
+void LLViewerWindow::drawDebugText()
+{
+ mDebugText->draw();
+}
void LLViewerWindow::draw()
{
@@ -1935,7 +2245,7 @@ void LLViewerWindow::draw()
{
LLGLSTexture gls_texture;
- show_text_gl();
+ drawDebugText();
}
if (gToolMgr)
@@ -1947,7 +2257,7 @@ void LLViewerWindow::draw()
if( gAgent.cameraMouselook() )
{
drawMouselookInstructions();
- stop_glerror();
+ stop_glerror();
}
// Draw all nested UI views.
@@ -1955,16 +2265,16 @@ void LLViewerWindow::draw()
mRootView->draw();
// Draw optional on-top-of-everyone view
- LLView* top_view = gFocusMgr.getTopView();
- if (top_view && top_view->getVisible())
+ LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl();
+ if (top_ctrl && top_ctrl->getVisible())
{
S32 screen_x, screen_y;
- top_view->localPointToScreen(0, 0, &screen_x, &screen_y);
+ top_ctrl->localPointToScreen(0, 0, &screen_x, &screen_y);
glMatrixMode(GL_MODELVIEW);
LLUI::pushMatrix();
LLUI::translate( (F32) screen_x, (F32) screen_y, 0.f);
- top_view->draw();
+ top_ctrl->draw();
LLUI::popMatrix();
}
@@ -2084,7 +2394,7 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask)
// cursor modes, etc, and re-enable.
//if (gFocusMgr.getMouseCapture())
//{
- // gFocusMgr.setMouseCapture(NULL, NULL);
+ // gFocusMgr.setMouseCapture(NULL);
// return TRUE;
//}
}
@@ -2150,10 +2460,10 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask)
// Topmost view gets a chance before the hierarchy
// *FIX: get rid of this?
- LLView* top_view = gFocusMgr.getTopView();
- if (top_view)
+ LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl();
+ if (top_ctrl)
{
- if( top_view->handleKey( key, mask, TRUE ) )
+ if( top_ctrl->handleKey( key, mask, TRUE ) )
{
return TRUE;
}
@@ -2226,8 +2536,8 @@ BOOL LLViewerWindow::handleUnicodeChar(llwchar uni_char, MASK mask)
}
// Topmost view gets a chance before the hierarchy
- LLView* top_view = gFocusMgr.getTopView();
- if (top_view && top_view->handleUnicodeChar( uni_char, FALSE ) )
+ LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl();
+ if (top_ctrl && top_ctrl->handleUnicodeChar( uni_char, FALSE ) )
{
return TRUE;
}
@@ -2263,13 +2573,13 @@ void LLViewerWindow::handleScrollWheel(S32 clicks)
return;
}
- LLView* top_view = gFocusMgr.getTopView();
- if (top_view)
+ LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl();
+ if (top_ctrl)
{
S32 local_x;
S32 local_y;
- top_view->screenPointToLocal( mCurrentMousePoint.mX, mCurrentMousePoint.mY, &local_x, &local_y );
- if (top_view->handleScrollWheel(local_x, local_y, clicks)) return;
+ top_ctrl->screenPointToLocal( mCurrentMousePoint.mX, mCurrentMousePoint.mY, &local_x, &local_y );
+ if (top_ctrl->handleScrollWheel(local_x, local_y, clicks)) return;
}
if (mRootView->handleScrollWheel(mCurrentMousePoint.mX, mCurrentMousePoint.mY, clicks) )
@@ -2415,8 +2725,8 @@ BOOL LLViewerWindow::handlePerFrameHover()
BOOL handled = FALSE;
- BOOL handled_by_top_view = FALSE;
- LLView* top_view = gFocusMgr.getTopView();
+ BOOL handled_by_top_ctrl = FALSE;
+ LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl();
LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture();
if( mouse_captor )
@@ -2438,12 +2748,12 @@ BOOL LLViewerWindow::handlePerFrameHover()
}
else
{
- if (top_view)
+ if (top_ctrl)
{
S32 local_x, local_y;
- top_view->screenPointToLocal( x, y, &local_x, &local_y );
- handled = top_view->pointInView(local_x, local_y) && top_view->handleHover(local_x, local_y, mask);
- handled_by_top_view = TRUE;
+ top_ctrl->screenPointToLocal( x, y, &local_x, &local_y );
+ handled = top_ctrl->pointInView(local_x, local_y) && top_ctrl->handleHover(local_x, local_y, mask);
+ handled_by_top_ctrl = TRUE;
}
if ( !handled )
@@ -2530,11 +2840,11 @@ BOOL LLViewerWindow::handlePerFrameHover()
mouse_captor->screenPointToLocal( x, y, &local_x, &local_y );
tool_tip_handled = mouse_captor->handleToolTip( local_x, local_y, tool_tip_msg, &screen_sticky_rect );
}
- else if (handled_by_top_view)
+ else if (handled_by_top_ctrl)
{
S32 local_x, local_y;
- top_view->screenPointToLocal( x, y, &local_x, &local_y );
- tool_tip_handled = top_view->handleToolTip( local_x, local_y, tool_tip_msg, &screen_sticky_rect );
+ top_ctrl->screenPointToLocal( x, y, &local_x, &local_y );
+ tool_tip_handled = top_ctrl->handleToolTip( local_x, local_y, tool_tip_msg, &screen_sticky_rect );
}
else
{
@@ -3026,7 +3336,7 @@ void LLViewerWindow::hitObjectOrLandGlobalAsync(S32 x, S32 y_from_bot, MASK mask
glViewport(scaled_x - (PICK_HALF_WIDTH + 2), scaled_y - (PICK_HALF_WIDTH + 2), PICK_DIAMETER + 4, PICK_DIAMETER + 4);
stop_glerror();
- glClearColor(0.f, 0.f, 0.f, 1.f);
+ glClearColor(0.f, 0.f, 0.f, 0.f);
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
// Draw the objects so the user can select them.
@@ -3117,7 +3427,7 @@ void LLViewerWindow::hitUIElementAsync(S32 x, S32 y_from_bot, MASK mask, void (*
glViewport(x - (PICK_HALF_WIDTH + 2), y_from_bot - (PICK_HALF_WIDTH + 2), PICK_DIAMETER + 4, PICK_DIAMETER + 4);
stop_glerror();
- glClearColor(0.f, 0.f, 0.f, 1.f);
+ glClearColor(0.f, 0.f, 0.f, 0.f);
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
// Draw the objects so the user can select them.
@@ -3993,7 +4303,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
gDisplaySwapBuffers = FALSE;
if (type == SNAPSHOT_TYPE_OBJECT_ID)
{
- glClearColor(0.f, 0.f, 0.f, 1.f);
+ glClearColor(0.f, 0.f, 0.f, 0.f);
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
gCamera->setZoomParameters(scale_factor, subimage_x+(subimage_y*llceil(scale_factor)));
@@ -4174,9 +4484,9 @@ BOOL LLViewerWindow::childHasKeyboardFocus(const LLView* parent) const
return gFocusMgr.childHasKeyboardFocus( parent );
}
-void LLViewerWindow::setMouseCapture(LLMouseHandler* new_captor,void (*on_capture_lost)(LLMouseHandler* old_captor))
+void LLViewerWindow::setMouseCapture(LLMouseHandler* new_captor)
{
- gFocusMgr.setMouseCapture( new_captor, on_capture_lost );
+ gFocusMgr.setMouseCapture( new_captor );
}
LLMouseHandler* LLViewerWindow::getMouseCaptor() const
@@ -4184,11 +4494,6 @@ LLMouseHandler* LLViewerWindow::getMouseCaptor() const
return gFocusMgr.getMouseCapture();
}
-BOOL LLViewerWindow::hasMouseCapture(const LLMouseHandler* possible_captor) const
-{
- return possible_captor == gFocusMgr.getMouseCapture();
-}
-
S32 LLViewerWindow::getWindowHeight() const
{
return mVirtualWindowRect.getHeight();
@@ -4209,19 +4514,19 @@ S32 LLViewerWindow::getWindowDisplayWidth() const
return mWindowRect.getWidth();
}
-LLView* LLViewerWindow::getTopView() const
+LLUICtrl* LLViewerWindow::getTopCtrl() const
{
- return gFocusMgr.getTopView();
+ return gFocusMgr.getTopCtrl();
}
-BOOL LLViewerWindow::hasTopView(LLView* view) const
+BOOL LLViewerWindow::hasTopCtrl(LLView* view) const
{
- return view == gFocusMgr.getTopView();
+ return view == gFocusMgr.getTopCtrl();
}
-void LLViewerWindow::setTopView(LLView* new_top,void (*on_top_lost)(LLView* old_top))
+void LLViewerWindow::setTopCtrl(LLUICtrl* new_top)
{
- gFocusMgr.setTopView( new_top, on_top_lost );
+ gFocusMgr.setTopCtrl( new_top );
}
void LLViewerWindow::setupViewport(S32 x_offset, S32 y_offset)
@@ -4829,6 +5134,8 @@ LLAlertDialog* LLViewerWindow::alertXmlEditText(const std::string& xml_filename,
return alert;
}
+////////////////////////////////////////////////////////////////////////////
+
LLBottomPanel::LLBottomPanel(const LLString &name, const LLRect &rect) :
LLPanel(name, rect, FALSE),
mIndicator(NULL)
diff --git a/linden/indra/newview/llviewerwindow.h b/linden/indra/newview/llviewerwindow.h
index debe509..e6a9a14 100644
--- a/linden/indra/newview/llviewerwindow.h
+++ b/linden/indra/newview/llviewerwindow.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -126,8 +127,8 @@ public:
BOOL getLeftMouseDown() const { return mLeftMouseDown; }
BOOL getRightMouseDown() const { return mRightMouseDown; }
- LLView* getTopView() const;
- BOOL hasTopView(LLView* view) const;
+ LLUICtrl* getTopCtrl() const;
+ BOOL hasTopCtrl(LLView* view) const;
void setupViewport(S32 x_offset = 0, S32 y_offset = 0);
void setup3DRender();
@@ -144,7 +145,9 @@ public:
void getTargetWindow(BOOL& fullscreen, S32& width, S32& height) const;
// The 'target' is where the user wants the window to be. It may not be
// there yet, because we may be supressing fullscreen prior to login.
-
+
+ const LLString& getInitAlert() { return mInitAlert; }
+
//
// MANIPULATORS
//
@@ -179,17 +182,18 @@ public:
BOOL hasKeyboardFocus( const LLUICtrl* possible_focus ) const;
BOOL childHasKeyboardFocus( const LLView* parent ) const;
- void setMouseCapture(LLMouseHandler* new_captor,void (*on_capture_lost)(LLMouseHandler* old_captor)); // new_captor = NULL to release the mouse.
- BOOL hasMouseCapture(const LLMouseHandler* possible_captor ) const;
+ void setMouseCapture(LLMouseHandler* new_captor); // new_captor = NULL to release the mouse.
LLMouseHandler* getMouseCaptor() const;
- void setTopView(LLView* new_top, void (*on_top_lost)(LLView* old_top)); // set new_top = NULL to release top_view.
+ void setTopCtrl(LLUICtrl* new_top); // set new_top = NULL to release top_view.
void reshape(S32 width, S32 height);
void sendShapeToSim();
void draw();
// void drawSelectedObjects();
+ void updateDebugText();
+ void drawDebugText();
static void loadUserImage(void **cb_data, const LLUUID &uuid);
@@ -207,7 +211,7 @@ public:
BOOL saveSnapshot(const LLString& filename, S32 image_width, S32 image_height, BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, ESnapshotType type = SNAPSHOT_TYPE_COLOR);
BOOL rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_height, BOOL keep_window_aspect = TRUE,
- BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, ESnapshotType type = SNAPSHOT_TYPE_COLOR );
+ BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, ESnapshotType type = SNAPSHOT_TYPE_COLOR );
BOOL saveImageNumbered(LLImageRaw *raw, const LLString& extension = "");
void playSnapshotAnimAndSound();
@@ -278,7 +282,7 @@ private:
void stopGL(BOOL save_state = TRUE);
void restoreGL(const LLString& progress_message = LLString::null);
void initFonts(F32 zoom_factor = 1.f);
-
+
void analyzeHit(
S32 x, // input
S32 y_from_bot, // input
@@ -291,6 +295,7 @@ private:
F32* hit_u_coord, // output
F32* hit_v_coord); // output
+
public:
LLWindow* mWindow; // graphical window object
@@ -333,13 +338,18 @@ protected:
LLString mOverlayTitle; // Used for special titles such as "Second Life - Special E3 2003 Beta"
+ BOOL mIgnoreActivate;
+ U8* mPickBuffer;
+
+ LLString mInitAlert; // Window / GL initialization requires an alert
+
+ class LLDebugText* mDebugText; // Internal class for debug text
+
+protected:
static char sSnapshotBaseName[LL_MAX_PATH]; /* Flawfinder: ignore */
static char sSnapshotDir[LL_MAX_PATH]; /* Flawfinder: ignore */
static char sMovieBaseName[LL_MAX_PATH]; /* Flawfinder: ignore */
-
- BOOL mIgnoreActivate;
- U8* mPickBuffer;
};
class LLBottomPanel : public LLPanel
diff --git a/linden/indra/newview/llvlcomposition.cpp b/linden/indra/newview/llvlcomposition.cpp
index e0cb40d..af0fe96 100644
--- a/linden/indra/newview/llvlcomposition.cpp
+++ b/linden/indra/newview/llvlcomposition.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -284,7 +285,7 @@ BOOL LLVLComposition::generateTexture(const F32 x, const F32 y,
ddiscard++;
min_dim /= 2;
}
- if (!mDetailTextures[i]->readBackRaw(ddiscard, mRawImages[i]))
+ if (!mDetailTextures[i]->readBackRaw(ddiscard, mRawImages[i], false))
{
llwarns << "Unable to read raw data for terrain detail texture: " << mDetailTextures[i]->getID() << llendl;
mRawImages[i] = NULL;
diff --git a/linden/indra/newview/llvlcomposition.h b/linden/indra/newview/llvlcomposition.h
index 7cae9ec..964fdfe 100644
--- a/linden/indra/newview/llvlcomposition.h
+++ b/linden/indra/newview/llvlcomposition.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvlmanager.cpp b/linden/indra/newview/llvlmanager.cpp
index 4ac22e2..f4d117d 100644
--- a/linden/indra/newview/llvlmanager.cpp
+++ b/linden/indra/newview/llvlmanager.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvlmanager.h b/linden/indra/newview/llvlmanager.h
index 67acfac..f26c3ce 100644
--- a/linden/indra/newview/llvlmanager.h
+++ b/linden/indra/newview/llvlmanager.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvoavatar.cpp b/linden/indra/newview/llvoavatar.cpp
index 7113177..25c6eb6 100644
--- a/linden/indra/newview/llvoavatar.cpp
+++ b/linden/indra/newview/llvoavatar.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -109,6 +110,7 @@
#include "llwearablelist.h"
#include "llworld.h"
#include "pipeline.h"
+#include "llglslshader.h"
#include "viewer.h"
#include "lscript_byteformat.h"
@@ -2575,7 +2577,7 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
}
// update wind effect
- if ((gPipeline.getVertexShaderLevel(LLPipeline::SHADER_AVATAR) >= LLDrawPoolAvatar::SHADER_LEVEL_CLOTH))
+ if ((LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_AVATAR) >= LLDrawPoolAvatar::SHADER_LEVEL_CLOTH))
{
F32 hover_strength = 0.f;
F32 time_delta = mRippleTimer.getElapsedTimeF32() - mRippleTimeLast;
@@ -3034,38 +3036,30 @@ void LLVOAvatar::updateCharacter(LLAgent &agent)
// clear debug text
mDebugText.clear();
-
if (LLVOAvatar::sShowAnimationDebug)
{
- LLString playing_anims;
- for (LLMotion* motionp = mMotionController.getFirstActiveMotion();
- motionp;
- motionp = mMotionController.getNextActiveMotion())
+ for (LLMotionController::motion_list_t::iterator iter = mMotionController.getActiveMotions().begin();
+ iter != mMotionController.getActiveMotions().end(); ++iter)
+ {
+ LLMotion* motionp = *iter;
+ if (motionp->getMinPixelArea() < getPixelArea())
{
- if (motionp->getMinPixelArea() < getPixelArea())
+ std::string output;
+ if (motionp->getName().empty())
{
- char output[MAX_STRING]; /* Flawfinder: ignore */
- if (motionp->getName().empty())
- {
- snprintf( /* Flawfinder: ignore */
- output,
- MAX_STRING,
- "%s - %d",
- motionp->getID().asString().c_str(),
- (U32)motionp->getPriority());
- }
- else
- {
- snprintf( /* Flawfinder: ignore */
- output,
- MAX_STRING,
- "%s - %d",
- motionp->getName().c_str(),
- (U32)motionp->getPriority());
- }
- addDebugText(output);
+ output = llformat("%s - %d",
+ motionp->getID().asString().c_str(),
+ (U32)motionp->getPriority());
}
+ else
+ {
+ output = llformat("%s - %d",
+ motionp->getName().c_str(),
+ (U32)motionp->getPriority());
+ }
+ addDebugText(output);
}
+ }
}
if (gNoRender)
@@ -3086,6 +3080,13 @@ void LLVOAvatar::updateCharacter(LLAgent &agent)
return;
}
+ // For fading out the names above heads, only let the timer
+ // run if we're visible.
+ if (mDrawable.notNull() && !mDrawable->isVisible())
+ {
+ mTimeVisible.reset();
+ }
+
if (!mIsSelf && !isVisible())
{
return;
@@ -3116,13 +3117,6 @@ void LLVOAvatar::updateCharacter(LLAgent &agent)
getOffObject();
}
- // For fading out the names above heads, only let the timer
- // run if we're visible.
- if (mDrawable.notNull() && !mDrawable->isVisible())
- {
- mTimeVisible.reset();
- }
-
//--------------------------------------------------------------------
// create local variables in world coords for region position values
//--------------------------------------------------------------------
@@ -4611,7 +4605,7 @@ S32 LLVOAvatar::getCollisionVolumeID(std::string &name)
//-----------------------------------------------------------------------------
// addDebugText()
//-----------------------------------------------------------------------------
-void LLVOAvatar::addDebugText(const char* text)
+ void LLVOAvatar::addDebugText(const std::string& text)
{
mDebugText.append(1, '\n');
mDebugText.append(text);
@@ -6355,7 +6349,7 @@ BOOL LLVOAvatar::getLocalTextureRaw(S32 index, LLImageRaw* image_raw)
}
else
{
- if( mLocalTexture[ index ]->readBackRaw(-1, image_raw) )
+ if( mLocalTexture[ index ]->readBackRaw(-1, image_raw, false) )
{
success = TRUE;
}
@@ -9210,7 +9204,7 @@ void LLVOAvatar::writeCAL3D(std::string& path, std::string& file_base)
continue;
}
LLPointer raw_image = new LLImageRaw;
- viewer_imagep->readBackRaw(-1, raw_image);
+ viewer_imagep->readBackRaw(-1, raw_image, false);
BOOL success = tga_image->encode(raw_image);
success = tga_image->save(filename);
}
@@ -9225,7 +9219,7 @@ void LLVOAvatar::writeCAL3D(std::string& path, std::string& file_base)
else
{
LLPointer raw_image = new LLImageRaw;
- viewer_imagep->readBackRaw(-1, raw_image);
+ viewer_imagep->readBackRaw(-1, raw_image, false);
BOOL success = tga_image->encode(raw_image);
success = tga_image->save(filename);
}
diff --git a/linden/indra/newview/llvoavatar.h b/linden/indra/newview/llvoavatar.h
index ff37848..2a2c0f0 100644
--- a/linden/indra/newview/llvoavatar.h
+++ b/linden/indra/newview/llvoavatar.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -387,7 +388,7 @@ public:
virtual LLVector3 getVolumePos(S32 joint_index, LLVector3& volume_offset);
virtual LLJoint* findCollisionVolume(U32 volume_id);
virtual S32 getCollisionVolumeID(std::string &name);
- virtual void addDebugText(const char* text);
+ virtual void addDebugText(const std::string& text);
virtual const LLUUID& getID();
virtual LLJoint *getJoint( const std::string &name );
diff --git a/linden/indra/newview/llvocache.cpp b/linden/indra/newview/llvocache.cpp
index 18a1639..f249c87 100644
--- a/linden/indra/newview/llvocache.cpp
+++ b/linden/indra/newview/llvocache.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvocache.h b/linden/indra/newview/llvocache.h
index b3169c3..73620c8 100644
--- a/linden/indra/newview/llvocache.h
+++ b/linden/indra/newview/llvocache.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvoclouds.cpp b/linden/indra/newview/llvoclouds.cpp
index 7d1d958..24084cf 100644
--- a/linden/indra/newview/llvoclouds.cpp
+++ b/linden/indra/newview/llvoclouds.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvoclouds.h b/linden/indra/newview/llvoclouds.h
index a8846e9..5d9fc72 100644
--- a/linden/indra/newview/llvoclouds.h
+++ b/linden/indra/newview/llvoclouds.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvograss.cpp b/linden/indra/newview/llvograss.cpp
index 9201549..5d9c581 100644
--- a/linden/indra/newview/llvograss.cpp
+++ b/linden/indra/newview/llvograss.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvograss.h b/linden/indra/newview/llvograss.h
index 023db03..54f9cce 100644
--- a/linden/indra/newview/llvograss.h
+++ b/linden/indra/newview/llvograss.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvoground.cpp b/linden/indra/newview/llvoground.cpp
index 0ae6ed8..8c116c1 100644
--- a/linden/indra/newview/llvoground.cpp
+++ b/linden/indra/newview/llvoground.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvoground.h b/linden/indra/newview/llvoground.h
index 5b995f8..2d73440 100644
--- a/linden/indra/newview/llvoground.h
+++ b/linden/indra/newview/llvoground.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvoinventorylistener.cpp b/linden/indra/newview/llvoinventorylistener.cpp
index 5c4f918..739cd0b 100644
--- a/linden/indra/newview/llvoinventorylistener.cpp
+++ b/linden/indra/newview/llvoinventorylistener.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvoinventorylistener.h b/linden/indra/newview/llvoinventorylistener.h
index c52d281..4cb90a6 100644
--- a/linden/indra/newview/llvoinventorylistener.h
+++ b/linden/indra/newview/llvoinventorylistener.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvolumesliderctrl.cpp b/linden/indra/newview/llvolumesliderctrl.cpp
index 760fa5c..54cfa30 100644
--- a/linden/indra/newview/llvolumesliderctrl.cpp
+++ b/linden/indra/newview/llvolumesliderctrl.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -81,7 +82,7 @@ void LLVolumeSliderCtrl::draw()
outline_color,
FALSE);
- if (gFocusMgr.getMouseCapture() == this)
+ if (hasMouseCapture())
{
// Thumb
LLRect rect(mDragStartThumbRect);
diff --git a/linden/indra/newview/llvolumesliderctrl.h b/linden/indra/newview/llvolumesliderctrl.h
index 605fd59..096ecc3 100644
--- a/linden/indra/newview/llvolumesliderctrl.h
+++ b/linden/indra/newview/llvolumesliderctrl.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvopartgroup.cpp b/linden/indra/newview/llvopartgroup.cpp
index a51ae9c..28aeb29 100644
--- a/linden/indra/newview/llvopartgroup.cpp
+++ b/linden/indra/newview/llvopartgroup.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvopartgroup.h b/linden/indra/newview/llvopartgroup.h
index 3dc07c0..ede249d 100644
--- a/linden/indra/newview/llvopartgroup.h
+++ b/linden/indra/newview/llvopartgroup.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvosky.cpp b/linden/indra/newview/llvosky.cpp
index 4ed5353..68fee1a 100644
--- a/linden/indra/newview/llvosky.cpp
+++ b/linden/indra/newview/llvosky.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -188,7 +189,7 @@ inline F32 color_intens ( const LLColor4 &col )
inline F32 color_avg ( const LLColor3 &col )
{
- return color_intens(col) / 3;
+ return color_intens(col) / 3.f;
}
inline void color_gamma_correct(LLColor3 &col)
@@ -462,7 +463,7 @@ void LLSkyTex::create(const F32 brightness_scale, const LLColor3& multiscatt)
}
U32* pix = (U32*)(data + offset);
- LLColor4 temp = LLColor4(col);
+ LLColor4 temp = LLColor4(col, 0);
LLColor4U temp1 = LLColor4U(temp);
*pix = temp1.mAll;
}
@@ -636,7 +637,6 @@ void LLVOSky::restoreGL()
calcBrightnessScaleAndColors();
- // Water is currently broken on Mac.
if (gSavedSettings.getBOOL("RenderWater") && gGLManager.mHasCubeMap)
{
LLCubeMap* cube_map = getCubeMap();
@@ -776,7 +776,7 @@ LLColor3 LLVOSky::calcSkyColorInDir(const LLVector3 &dir)
{
LLColor3 col, transp;
- if (dir.mV[VZ] < -0.02)
+ if (dir.mV[VZ] < -0.02f)
{
col = LLColor3(llmax(mFogColor[0],0.2f), llmax(mFogColor[1],0.2f), llmax(mFogColor[2],0.27f));
float x = 1.0f-fabsf(-0.1f-dir.mV[VZ]);
@@ -826,15 +826,18 @@ void LLVOSky::calcSkyColorInDir(LLColor3& res, LLColor3& transp, const LLVector3
const F32 e_pow_k = (F32)LL_FAST_EXP(K);
F32 step = FIRST_STEP * (1 - 1 / e_pow_k);
+ // Initialize outside the loop because we write into them every iteration. JC
+ LLColor3 air_sca_opt_depth;
+ LLColor3 haze_sca_opt_depth;
+ LLColor3 air_transp;
+
for (S32 s = 0; s < NO_STEPS; ++s)
{
h = calcHeight(cur_pos);
step *= e_pow_k;
- LLColor3 air_sca_opt_depth;
LLHaze::calcAirSca(h, air_sca_opt_depth);
air_sca_opt_depth *= step;
- LLColor3 haze_sca_opt_depth;
mHaze.calcSigSca(h, haze_sca_opt_depth);
haze_sca_opt_depth *= step;
@@ -844,7 +847,6 @@ void LLVOSky::calcSkyColorInDir(LLColor3& res, LLColor3& transp, const LLVector3
if (calcHitsEarth(cur_pos, tosun) < 0) // calculates amount of in-scattered light from the sun
{
//visibility check is too expensive
- LLColor3 air_transp;
mTransp.calcTransp(calcUpVec(cur_pos) * tosun, h, air_transp);
air_transp *= transp;
res += air_sca_opt_depth * air_transp;
@@ -1251,18 +1253,14 @@ BOOL LLVOSky::updateSky()
mSkyTex[side].createGLImage(mSkyTex[side].getWhich(FALSE));
}
next_frame = 0;
- //llSkyTex::stepCurrent();
}
- if (!gSavedSettings.getBOOL("RenderDynamicReflections"))
+ std::vector > images;
+ for (S32 side = 0; side < 6; side++)
{
- std::vector > images;
- for (S32 side = 0; side < 6; side++)
- {
- images.push_back(mSkyTex[side].getImageRaw(FALSE));
- }
- mCubeMap->init(images);
+ images.push_back(mSkyTex[side].getImageRaw(FALSE));
}
+ mCubeMap->init(images);
}
}
diff --git a/linden/indra/newview/llvosky.h b/linden/indra/newview/llvosky.h
index 0ca56dc..568e924 100644
--- a/linden/indra/newview/llvosky.h
+++ b/linden/indra/newview/llvosky.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -61,19 +62,12 @@ const F32 INV_NO_STEPS = 1.f/NO_STEPS;
// constants used in calculation of scattering coeff of clear air
const F32 sigma = 0.035f;
-const F32 fsigma = (6+3*sigma)/(6.f-7.f*sigma);
+const F32 fsigma = (6.f + 3.f * sigma) / (6.f-7.f*sigma);
const F64 Ndens = 2.55e25;
const F64 Ndens2 = Ndens*Ndens;
-// !!! *FIX: This #define should be in llcommon somewhere...
-// We should not be #defining anything with leading underscores and
-// much less double leading underscores since that is always vendor
-// specific. Change this to something like LL_FORCE_INLINE.
-#ifdef __GNUC__
-#define __forceinline inline __attribute__((always_inline))
-#endif
-__forceinline LLColor3 color_div(const LLColor3 &col1, const LLColor3 &col2)
+LL_FORCE_INLINE LLColor3 color_div(const LLColor3 &col1, const LLColor3 &col2)
{
return LLColor3(
col1.mV[0] / col2.mV[0],
@@ -140,7 +134,7 @@ private:
public:
static F32 getInterpVal() { return sInterpVal; }
static void setInterpVal(const F32 v) { sInterpVal = v; }
- static BOOL doInterpolate() { return sInterpVal > 0.001; }
+ static BOOL doInterpolate() { return sInterpVal > 0.001f; }
void bindTexture(BOOL curr = TRUE);
@@ -311,7 +305,7 @@ public:
};
-__forceinline LLColor3 refr_ind_calc(const LLColor3 &wave_length)
+LL_FORCE_INLINE LLColor3 refr_ind_calc(const LLColor3 &wave_length)
{
LLColor3 refr_ind;
for (S32 i = 0; i < 3; ++i)
@@ -325,7 +319,7 @@ __forceinline LLColor3 refr_ind_calc(const LLColor3 &wave_length)
}
-__forceinline LLColor3 calc_air_sca_sea_level()
+LL_FORCE_INLINE LLColor3 calc_air_sca_sea_level()
{
const static LLColor3 WAVE_LEN(675, 520, 445);
const static LLColor3 refr_ind = refr_ind_calc(WAVE_LEN);
@@ -690,6 +684,7 @@ public:
public:
static F32 sNighttimeBrightness; // [0,2] default = 1.0
+ LLFace *mFace[FACE_COUNT];
protected:
LLPointer mSunTexturep;
@@ -719,8 +714,7 @@ protected:
BOOL mWeatherChange;
F32 mCloudDensity;
F32 mWind;
- LLFace *mFace[FACE_COUNT];
-
+
BOOL mInitialized;
BOOL mForceUpdate; //flag to force instantaneous update of cubemap
LLVector3 mLastLightingDirection;
diff --git a/linden/indra/newview/llvostars.cpp b/linden/indra/newview/llvostars.cpp
index a4568ce..5af052d 100644
--- a/linden/indra/newview/llvostars.cpp
+++ b/linden/indra/newview/llvostars.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvostars.h b/linden/indra/newview/llvostars.h
index 10b644e..cb71f5b 100644
--- a/linden/indra/newview/llvostars.h
+++ b/linden/indra/newview/llvostars.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvosurfacepatch.cpp b/linden/indra/newview/llvosurfacepatch.cpp
index 88e610b..8089596 100644
--- a/linden/indra/newview/llvosurfacepatch.cpp
+++ b/linden/indra/newview/llvosurfacepatch.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -88,21 +89,21 @@ public:
//============================================================================
LLVOSurfacePatch::LLVOSurfacePatch(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)
-: LLStaticViewerObject(id, LL_VO_SURFACE_PATCH, regionp)
+ : LLStaticViewerObject(id, LL_VO_SURFACE_PATCH, regionp),
+ mDirtiedPatch(FALSE),
+ mPool(NULL),
+ mBaseComp(0),
+ mPatchp(NULL),
+ mDirtyTexture(FALSE),
+ mDirtyTerrain(FALSE),
+ mLastNorthStride(0),
+ mLastEastStride(0),
+ mLastStride(0),
+ mLastLength(0)
{
// Terrain must draw during selection passes so it can block objects behind it.
mbCanSelect = TRUE;
-
- mBaseComp = 0;
setScale(LLVector3(16.f, 16.f, 16.f)); // Hack for setting scale for bounding boxes/visibility.
- mPool = NULL;
- mDirtiedPatch = FALSE;
- mLastStride = 0;
- mLastNorthStride = 0;
- mLastEastStride = 0;
- mLastLength = 0;
-
- mDirtyTerrain = TRUE;
}
diff --git a/linden/indra/newview/llvosurfacepatch.h b/linden/indra/newview/llvosurfacepatch.h
index 75d57cb..ec26065 100644
--- a/linden/indra/newview/llvosurfacepatch.h
+++ b/linden/indra/newview/llvosurfacepatch.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvotextbubble.cpp b/linden/indra/newview/llvotextbubble.cpp
index ee0359b..676f6cb 100644
--- a/linden/indra/newview/llvotextbubble.cpp
+++ b/linden/indra/newview/llvotextbubble.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvotextbubble.h b/linden/indra/newview/llvotextbubble.h
index bd1d241..2a2fa43 100644
--- a/linden/indra/newview/llvotextbubble.h
+++ b/linden/indra/newview/llvotextbubble.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvotree.cpp b/linden/indra/newview/llvotree.cpp
index 382f9a6..45a9e0a 100644
--- a/linden/indra/newview/llvotree.cpp
+++ b/linden/indra/newview/llvotree.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvotree.h b/linden/indra/newview/llvotree.h
index fb35dd9..65a0797 100644
--- a/linden/indra/newview/llvotree.h
+++ b/linden/indra/newview/llvotree.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvotreenew.h b/linden/indra/newview/llvotreenew.h
index 936028a..611c341 100644
--- a/linden/indra/newview/llvotreenew.h
+++ b/linden/indra/newview/llvotreenew.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvovolume.cpp b/linden/indra/newview/llvovolume.cpp
index f425687..0a778e4 100644
--- a/linden/indra/newview/llvovolume.cpp
+++ b/linden/indra/newview/llvovolume.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -276,60 +277,41 @@ void LLVOVolume::animateTextures()
for (S32 i = start; i <= end; i++)
{
- LLQuaternion quat;
- LLVector3 scale(1,1,1);
-
LLFace* facep = mDrawable->getFace(i);
const LLTextureEntry* te = facep->getTextureEntry();
- LLMatrix4& tex_mat = facep->mTextureMatrix;
if (!te)
{
continue;
}
+
if (!(result & LLViewerTextureAnim::ROTATE))
{
te->getRotation(&rot);
}
-
- {
- F32 axis = -1;
- F32 s,t;
- te->getScale(&s,&t);
- if (s < 0)
- {
- axis = -axis;
- }
- if (t < 0)
- {
- axis = -axis;
- }
- quat.setQuat(rot, 0, 0, axis);
- }
-
if (!(result & LLViewerTextureAnim::TRANSLATE))
{
te->getOffset(&off_s,&off_t);
}
+ if (!(result & LLViewerTextureAnim::SCALE))
+ {
+ te->getScale(&scale_s, &scale_t);
+ }
+ LLVector3 scale(scale_s, scale_t, 1.f);
LLVector3 trans(off_s+0.5f, off_t+0.5f, 0.f);
-
+ LLQuaternion quat;
+ quat.setQuat(rot, 0, 0, -1.f);
+
+ LLMatrix4& tex_mat = facep->mTextureMatrix;
tex_mat.identity();
tex_mat.translate(LLVector3(-0.5f, -0.5f, 0.f));
tex_mat.rotate(quat);
- if (!(result & LLViewerTextureAnim::SCALE))
- {
- te->getScale(&scale_s, &scale_t);
- }
-
- {
- scale.setVec(scale_s, scale_t, 1.f);
- LLMatrix4 mat;
- mat.initAll(scale, LLQuaternion(), LLVector3());
- tex_mat *= mat;
- }
-
+ LLMatrix4 mat;
+ mat.initAll(scale, LLQuaternion(), LLVector3());
+ tex_mat *= mat;
+
tex_mat.translate(trans);
}
}
@@ -2022,13 +2004,13 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep,
LLVOVolume* volume = (LLVOVolume*) facep->getViewerObject();
BOOL is_light = volume->mDrawable->isLight();
-// U8 alpha = is_light ? 196 : 160;
+ U8 alpha = is_light ? 196 : 160;
LLColor3 col = is_light ? volume->getLightColor() : LLColor3(0,0,0);
LLColor4 col2 = facep->getRenderColor();
draw_info->mGlowColor.setVec((U8) (col.mV[0]*col2.mV[0]*255),
(U8) (col.mV[1]*col2.mV[1]*255),
(U8) (col.mV[2]*col2.mV[2]*255),
- 196);
+ alpha);
draw_info->mTextureMatrix = tex_mat;
validate_draw_info(*draw_info);
}
@@ -2333,7 +2315,8 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
registerFace(group, facep, LLRenderPass::PASS_BUMP);
}
- if (vobj->getIsLight())
+ if (vobj->getIsLight() ||
+ (LLPipeline::sRenderGlow && facep->isState(LLFace::FULLBRIGHT)))
{
registerFace(group, facep, LLRenderPass::PASS_GLOW);
}
diff --git a/linden/indra/newview/llvovolume.h b/linden/indra/newview/llvovolume.h
index 9fb8ca4..80e4e8a 100644
--- a/linden/indra/newview/llvovolume.h
+++ b/linden/indra/newview/llvovolume.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvowater.cpp b/linden/indra/newview/llvowater.cpp
index a57aa8b..0697d82 100644
--- a/linden/indra/newview/llvowater.cpp
+++ b/linden/indra/newview/llvowater.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llvowater.h b/linden/indra/newview/llvowater.h
index 20fda7e..a0c85c0 100644
--- a/linden/indra/newview/llvowater.h
+++ b/linden/indra/newview/llvowater.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llwaterpatch.cpp b/linden/indra/newview/llwaterpatch.cpp
index 6c71861..f6a8640 100644
--- a/linden/indra/newview/llwaterpatch.cpp
+++ b/linden/indra/newview/llwaterpatch.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llwaterpatch.h b/linden/indra/newview/llwaterpatch.h
index 7779d60..f4eddf6 100644
--- a/linden/indra/newview/llwaterpatch.h
+++ b/linden/indra/newview/llwaterpatch.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llwearable.cpp b/linden/indra/newview/llwearable.cpp
index 3e3f7ab..4dc3080 100644
--- a/linden/indra/newview/llwearable.cpp
+++ b/linden/indra/newview/llwearable.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llwearable.h b/linden/indra/newview/llwearable.h
index cfae5a5..1e953f5 100644
--- a/linden/indra/newview/llwearable.h
+++ b/linden/indra/newview/llwearable.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llwearablelist.cpp b/linden/indra/newview/llwearablelist.cpp
index 10079f8..b345ab0 100644
--- a/linden/indra/newview/llwearablelist.cpp
+++ b/linden/indra/newview/llwearablelist.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llwearablelist.h b/linden/indra/newview/llwearablelist.h
index 3780dae..632f5af 100644
--- a/linden/indra/newview/llwearablelist.h
+++ b/linden/indra/newview/llwearablelist.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2002-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llweb.cpp b/linden/indra/newview/llweb.cpp
index fe9f919..910f0c4 100644
--- a/linden/indra/newview/llweb.cpp
+++ b/linden/indra/newview/llweb.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llweb.h b/linden/indra/newview/llweb.h
index 85dae4b..8bc402c 100644
--- a/linden/indra/newview/llweb.h
+++ b/linden/indra/newview/llweb.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llwebbrowserctrl.cpp b/linden/indra/newview/llwebbrowserctrl.cpp
index 7df2da4..bd671fa 100644
--- a/linden/indra/newview/llwebbrowserctrl.cpp
+++ b/linden/indra/newview/llwebbrowserctrl.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -50,8 +51,10 @@ LLWebBrowserCtrl::LLWebBrowserCtrl( const std::string& name, const LLRect& rect
mBorder(NULL),
mFrequentUpdates( true ),
mOpenLinksInExternalBrowser( false ),
+ mOpenSecondLifeLinksInMap( true ),
mHomePageUrl( "" ),
- mIgnoreUIScale( true )
+ mIgnoreUIScale( true ),
+ mAlwaysRefresh( false )
{
S32 screen_width = mIgnoreUIScale ? llround((F32)mRect.getWidth() * LLUI::sGLScaleFactor.mV[VX]) : mRect.getWidth();
S32 screen_height = mIgnoreUIScale ? llround((F32)mRect.getHeight() * LLUI::sGLScaleFactor.mV[VY]) : mRect.getHeight();
@@ -63,12 +66,11 @@ LLWebBrowserCtrl::LLWebBrowserCtrl( const std::string& name, const LLRect& rect
// the locale to protect it, as exotic/non-C locales
// causes our code lots of general critical weirdness
// and crashness. (SL-35450)
- char *saved_locale = setlocale(LC_ALL, NULL);
+ std::string saved_locale = setlocale(LC_ALL, NULL);
#endif // LL_LINUX
mEmbeddedBrowserWindowId = LLMozLib::getInstance()->createBrowserWindow( gViewerWindow->getPlatformWindow(), screen_width, screen_height );
#if LL_LINUX
- if (saved_locale)
- setlocale(LC_ALL, saved_locale);
+ setlocale(LC_ALL, saved_locale.c_str() );
#endif // LL_LINUX
}
@@ -133,6 +135,13 @@ void LLWebBrowserCtrl::setOpenInExternalBrowser( bool valIn )
};
////////////////////////////////////////////////////////////////////////////////
+// open secondlife:// links in map automatically or not
+void LLWebBrowserCtrl::setOpenSecondLifeLinksInMap( bool valIn )
+{
+ mOpenSecondLifeLinksInMap = valIn;
+};
+
+////////////////////////////////////////////////////////////////////////////////
//
BOOL LLWebBrowserCtrl::handleHover( S32 x, S32 y, MASK mask )
{
@@ -163,7 +172,7 @@ BOOL LLWebBrowserCtrl::handleMouseUp( S32 x, S32 y, MASK mask )
convertInputCoords(x, y);
LLMozLib::getInstance()->mouseUp( mEmbeddedBrowserWindowId, x, y );
- gViewerWindow->setMouseCapture( 0, 0 );
+ gViewerWindow->setMouseCapture( NULL );
return TRUE;
}
@@ -175,7 +184,7 @@ BOOL LLWebBrowserCtrl::handleMouseDown( S32 x, S32 y, MASK mask )
convertInputCoords(x, y);
LLMozLib::getInstance()->mouseDown( mEmbeddedBrowserWindowId, x, y );
- gViewerWindow->setMouseCapture( this, 0 );
+ gViewerWindow->setMouseCapture( this );
setFocus( TRUE );
@@ -198,6 +207,8 @@ void LLWebBrowserCtrl::onFocusLost()
LLMozLib::getInstance()->focusBrowser( mEmbeddedBrowserWindowId, false );
gViewerWindow->focusClient();
+
+ LLUICtrl::onFocusLost();
}
////////////////////////////////////////////////////////////////////////////////
@@ -516,38 +527,48 @@ void LLWebBrowserCtrl::onClickLinkSecondLife( const EventType& eventIn )
{
if ( LLString::compareInsensitive( eventIn.getStringValue().substr( 0, protocol.length() ).c_str(), protocol.c_str() ) == 0 )
{
- // parse out sim name and coordinates
- LLURLSimString::setString( eventIn.getStringValue() );
- LLURLSimString::parse();
-
- // if there is a world map
- if ( gFloaterWorldMap )
+ if ( mOpenSecondLifeLinksInMap )
{
- #if ! LL_RELEASE_FOR_DOWNLOAD
- llinfos << "MOZ> opening map to " << LLURLSimString::sInstance.mSimName.c_str() << " at " << LLURLSimString::sInstance.mX << "," << LLURLSimString::sInstance.mY << "," << LLURLSimString::sInstance.mZ << llendl;
- #endif
-
- // mark where the destination is
- gFloaterWorldMap->trackURL( LLURLSimString::sInstance.mSimName.c_str(),
- LLURLSimString::sInstance.mX,
- LLURLSimString::sInstance.mY,
- LLURLSimString::sInstance.mZ );
-
- // display map
- LLFloaterWorldMap::show( NULL, TRUE );
- }
- else
- // if there is no world map, assume we're on the login page.. (this might be bad but I don't see a way to tell if you're at login or not)
- {
- // refresh the login page and force the location combo box to be visible
- LLPanelLogin::refreshLocation( true );
+ openMapAtlocation( eventIn.getStringValue() );
};
+
+ // chain this event on to observers of an instance of LLWebBrowserCtrl
+ LLWebBrowserCtrlEvent event( eventIn.getStringValue() );
+ mEventEmitter.update( &LLWebBrowserCtrlObserver::onClickLinkSecondLife, event );
};
};
+}
- // chain this event on to observers of an instance of LLWebBrowserCtrl
- LLWebBrowserCtrlEvent event( eventIn.getStringValue() );
- mEventEmitter.update( &LLWebBrowserCtrlObserver::onClickLinkSecondLife, event );
+////////////////////////////////////////////////////////////////////////////////
+// virtual
+void LLWebBrowserCtrl::openMapAtlocation( std::string second_life_url )
+{
+ // parse out sim name and coordinates
+ LLURLSimString::setString( second_life_url );
+ LLURLSimString::parse();
+
+ // if there is a world map
+ if ( gFloaterWorldMap )
+ {
+ #if ! LL_RELEASE_FOR_DOWNLOAD
+ llinfos << "MOZ> opening map to " << LLURLSimString::sInstance.mSimName.c_str() << " at " << LLURLSimString::sInstance.mX << "," << LLURLSimString::sInstance.mY << "," << LLURLSimString::sInstance.mZ << llendl;
+ #endif
+
+ // mark where the destination is
+ gFloaterWorldMap->trackURL( LLURLSimString::sInstance.mSimName.c_str(),
+ LLURLSimString::sInstance.mX,
+ LLURLSimString::sInstance.mY,
+ LLURLSimString::sInstance.mZ );
+
+ // display map
+ LLFloaterWorldMap::show( NULL, TRUE );
+ }
+ else
+ // if there is no world map, assume we're on the login page.. (this might be bad but I don't see a way to tell if you're at login or not)
+ {
+ // refresh the login page and force the location combo box to be visible
+ LLPanelLogin::refreshLocation( true );
+ };
}
////////////////////////////////////////////////////////////////////////////////
@@ -575,7 +596,7 @@ LLWebBrowserTexture::~LLWebBrowserTexture()
BOOL LLWebBrowserTexture::render()
{
// frequent updates turned on?
- if ( mWebBrowserCtrl->getFrequentUpdates() )
+ if ( mWebBrowserCtrl->getFrequentUpdates() || mWebBrowserCtrl->getAlwaysRefresh() )
{
// only update mozilla/texture occasionally
if ( mElapsedTime.getElapsedTimeF32() > ( 1.0f / 15.0f ) )
@@ -591,12 +612,13 @@ BOOL LLWebBrowserTexture::render()
if ( actual_rowspan < 1 || browser_depth < 2 )
return FALSE;
+ // width can change after it's rendered - (Mozilla bug# 24721)
S32 pagebuffer_width = actual_rowspan / browser_depth;
-
+
+ // Browser depth hasn't changed.
if(mLastBrowserDepth == browser_depth)
{
- // Browser depth hasn't changed. Just grab the pixels.
-
+ // Just grab the pixels.
mTexture->setSubImage( pixels,
pagebuffer_width, mBrowserHeight,
0, 0, pagebuffer_width, mBrowserHeight );
@@ -605,7 +627,7 @@ BOOL LLWebBrowserTexture::render()
{
// Browser depth has changed -- need to recreate texture to match.
resize(mBrowserWidth, mBrowserHeight);
- }
+ };
};
};
diff --git a/linden/indra/newview/llwebbrowserctrl.h b/linden/indra/newview/llwebbrowserctrl.h
index e6f9005..7097036 100644
--- a/linden/indra/newview/llwebbrowserctrl.h
+++ b/linden/indra/newview/llwebbrowserctrl.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -185,6 +186,7 @@ class LLWebBrowserCtrl :
bool canNavigateBack();
bool canNavigateForward();
void setOpenInExternalBrowser( bool valIn );
+ void setOpenSecondLifeLinksInMap( bool valIn );
void setHomePageUrl( const std::string urlIn );
std::string getHomePageUrl();
@@ -195,6 +197,12 @@ class LLWebBrowserCtrl :
void setIgnoreUIScale(bool ignore) { mIgnoreUIScale = ignore; }
bool getIgnoreUIScale() { return mIgnoreUIScale; }
+ // map releated control (this should be moved eventually)
+ void openMapAtlocation( std::string second_life_url );
+
+ void setAlwaysRefresh(bool refresh) { mAlwaysRefresh = refresh; }
+ bool getAlwaysRefresh() { return mAlwaysRefresh; }
+
// over-rides
virtual BOOL handleKey( KEY key, MASK mask, BOOL called_from_parent );
virtual BOOL handleUnicodeChar(llwchar uni_char, BOOL called_from_parent);
@@ -230,8 +238,10 @@ class LLWebBrowserCtrl :
LLViewBorder* mBorder;
bool mFrequentUpdates;
bool mOpenLinksInExternalBrowser;
+ bool mOpenSecondLifeLinksInMap;
std::string mHomePageUrl;
bool mIgnoreUIScale;
+ bool mAlwaysRefresh;
};
////////////////////////////////////////////////////////////////////////////////
diff --git a/linden/indra/newview/llwind.cpp b/linden/indra/newview/llwind.cpp
index 5180b8f..247e28c 100644
--- a/linden/indra/newview/llwind.cpp
+++ b/linden/indra/newview/llwind.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llwind.h b/linden/indra/newview/llwind.h
index be044ec..af7a8bb 100644
--- a/linden/indra/newview/llwind.h
+++ b/linden/indra/newview/llwind.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llwindebug.cpp b/linden/indra/newview/llwindebug.cpp
index 772ded4..6221b85 100644
--- a/linden/indra/newview/llwindebug.cpp
+++ b/linden/indra/newview/llwindebug.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llwindebug.h b/linden/indra/newview/llwindebug.h
index 4e620bc..50e168c 100644
--- a/linden/indra/newview/llwindebug.h
+++ b/linden/indra/newview/llwindebug.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2004-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llworld.cpp b/linden/indra/newview/llworld.cpp
index cf85eab..9c71ee4 100644
--- a/linden/indra/newview/llworld.cpp
+++ b/linden/indra/newview/llworld.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -30,6 +31,7 @@
#include "llworld.h"
#include "indra_constants.h"
+#include "llstl.h"
#include "llagent.h"
#include "llviewercontrol.h"
@@ -109,8 +111,7 @@ LLWorld::LLWorld(const U32 grids_per_region, const F32 meters_per_grid)
LLWorld::~LLWorld()
{
gObjectList.killAllObjects();
-
- mRegionList.deleteAllData();
+ for_each(mRegionList.begin(), mRegionList.end(), DeletePointer());
}
@@ -170,9 +171,9 @@ LLViewerRegion* LLWorld::addRegion(const U64 ®ion_handle, const LLHost &host)
regionp->mCloudLayer.setWidth((F32)mWidth);
regionp->mCloudLayer.setWindPointer(®ionp->mWind);
- mRegionList.addData(regionp);
- mActiveRegionList.addData(regionp);
- mCulledRegionList.addData(regionp);
+ mRegionList.push_back(regionp);
+ mActiveRegionList.push_back(regionp);
+ mCulledRegionList.push_back(regionp);
// Find all the adjacent regions, and attach them.
@@ -224,9 +225,10 @@ void LLWorld::removeRegion(const LLHost &host)
if (regionp == gAgent.getRegion())
{
- LLViewerRegion *reg;
- for (reg = mRegionList.getFirstData(); reg; reg = mRegionList.getNextData())
+ for (region_list_t::iterator iter = mRegionList.begin();
+ iter != mRegionList.end(); ++iter)
{
+ LLViewerRegion* reg = *iter;
llwarns << "RegionDump: " << reg->getName()
<< " " << reg->getHost()
<< " " << reg->getOriginGlobal()
@@ -249,42 +251,23 @@ void LLWorld::removeRegion(const LLHost &host)
from_region_handle(regionp->getHandle(), &x, &y);
llinfos << "Removing region " << x << ":" << y << llendl;
- // This code can probably be blitzed now...
- if (!mRegionList.removeData(regionp))
- {
- for (regionp = mRegionList.getFirstData(); regionp; regionp = mRegionList.getNextData())
- {
- llwarns << "RegionDump: " << regionp->getName()
- << " " << regionp->getHost()
- << " " << regionp->getOriginGlobal()
- << llendl;
- }
-
- llerrs << "Region list is broken" << llendl;
- }
-
- if (!mActiveRegionList.removeData(regionp))
- {
- llwarns << "LLWorld.mActiveRegionList is broken." << llendl;
- }
- if (!mCulledRegionList.removeData(regionp))
- {
- if (!mVisibleRegionList.removeData(regionp))
- {
- llwarns << "LLWorld.mCulled/mVisibleRegionList are broken" << llendl;;
- }
- }
+ mRegionList.remove(regionp);
+ mActiveRegionList.remove(regionp);
+ mCulledRegionList.remove(regionp);
+ mVisibleRegionList.remove(regionp);
+
delete regionp;
updateWaterObjects();
}
-LLViewerRegion *LLWorld::getRegion(const LLHost &host)
+LLViewerRegion* LLWorld::getRegion(const LLHost &host)
{
- LLViewerRegion *regionp;
- for (regionp = mRegionList.getFirstData(); regionp; regionp = mRegionList.getNextData())
+ for (region_list_t::iterator iter = mRegionList.begin();
+ iter != mRegionList.end(); ++iter)
{
+ LLViewerRegion* regionp = *iter;
if (regionp->getHost() == host)
{
return regionp;
@@ -293,16 +276,17 @@ LLViewerRegion *LLWorld::getRegion(const LLHost &host)
return NULL;
}
-LLViewerRegion *LLWorld::getRegionFromPosAgent(const LLVector3 &pos)
+LLViewerRegion* LLWorld::getRegionFromPosAgent(const LLVector3 &pos)
{
return getRegionFromPosGlobal(gAgent.getPosGlobalFromAgent(pos));
}
-LLViewerRegion *LLWorld::getRegionFromPosGlobal(const LLVector3d &pos)
+LLViewerRegion* LLWorld::getRegionFromPosGlobal(const LLVector3d &pos)
{
- LLViewerRegion *regionp;
- for (regionp = mRegionList.getFirstData(); regionp; regionp = mRegionList.getNextData())
+ for (region_list_t::iterator iter = mRegionList.begin();
+ iter != mRegionList.end(); ++iter)
{
+ LLViewerRegion* regionp = *iter;
if (regionp->pointInRegionGlobal(pos))
{
return regionp;
@@ -376,11 +360,12 @@ LLVector3d LLWorld::clipToVisibleRegions(const LLVector3d &start_pos, const LLVe
return regionp->getPosGlobalFromRegion(LLVector3(final_region_pos));
}
-LLViewerRegion *LLWorld::getRegionFromHandle(const U64 &handle)
+LLViewerRegion* LLWorld::getRegionFromHandle(const U64 &handle)
{
- LLViewerRegion *regionp;
- for (regionp = mRegionList.getFirstData(); regionp; regionp = mRegionList.getNextData())
+ for (region_list_t::iterator iter = mRegionList.begin();
+ iter != mRegionList.end(); ++iter)
{
+ LLViewerRegion* regionp = *iter;
if (regionp->getHandle() == handle)
{
return regionp;
@@ -393,9 +378,10 @@ LLViewerRegion *LLWorld::getRegionFromHandle(const U64 &handle)
void LLWorld::updateAgentOffset(const LLVector3d &offset_global)
{
#if 0
- LLViewerRegion *regionp;
- for (regionp = mRegionList.getFirstData(); regionp; regionp = mRegionList.getNextData())
+ for (region_list_t::iterator iter = mRegionList.begin();
+ iter != mRegionList.end(); ++iter)
{
+ LLViewerRegion* regionp = *iter;
regionp->setAgentOffset(offset_global);
}
#endif
@@ -404,9 +390,10 @@ void LLWorld::updateAgentOffset(const LLVector3d &offset_global)
BOOL LLWorld::positionRegionValidGlobal(const LLVector3d &pos_global)
{
- LLViewerRegion *regionp;
- for (regionp = mRegionList.getFirstData(); regionp; regionp = mRegionList.getNextData())
+ for (region_list_t::iterator iter = mRegionList.begin();
+ iter != mRegionList.end(); ++iter)
{
+ LLViewerRegion* regionp = *iter;
if (regionp->pointInRegionGlobal(pos_global))
{
return TRUE;
@@ -571,32 +558,29 @@ void LLWorld::updateVisibilities()
gCamera->setFar(mLandFarClip);
- LLViewerRegion *regionp;
-
F32 diagonal_squared = F_SQRT2 * F_SQRT2 * mWidth * mWidth;
// Go through the culled list and check for visible regions
- for (regionp = mCulledRegionList.getFirstData();
- regionp;
- regionp = mCulledRegionList.getNextData())
+ for (region_list_t::iterator iter = mCulledRegionList.begin();
+ iter != mCulledRegionList.end(); )
{
+ region_list_t::iterator curiter = iter++;
+ LLViewerRegion* regionp = *curiter;
F32 height = regionp->getLand().getMaxZ() - regionp->getLand().getMinZ();
F32 radius = 0.5f*fsqrtf(height * height + diagonal_squared);
if (!regionp->getLand().hasZData()
|| gCamera->sphereInFrustum(regionp->getCenterAgent(), radius))
{
- mCulledRegionList.removeCurrentData();
- mVisibleRegionList.addDataAtEnd(regionp);
+ mCulledRegionList.erase(curiter);
+ mVisibleRegionList.push_back(regionp);
}
}
- F32 last_dist_squared = 0.0f;
- F32 dist_squared;
-
- // Update all of the visible regions and make single bubble-sort pass
- for (regionp = mVisibleRegionList.getFirstData();
- regionp;
- regionp = mVisibleRegionList.getNextData())
+ // Update all of the visible regions
+ for (region_list_t::iterator iter = mVisibleRegionList.begin();
+ iter != mVisibleRegionList.end(); )
{
+ region_list_t::iterator curiter = iter++;
+ LLViewerRegion* regionp = *curiter;
if (!regionp->getLand().hasZData())
{
continue;
@@ -606,44 +590,35 @@ void LLWorld::updateVisibilities()
F32 radius = 0.5f*fsqrtf(height * height + diagonal_squared);
if (gCamera->sphereInFrustum(regionp->getCenterAgent(), radius))
{
+ regionp->calculateCameraDistance();
if (!gNoRender)
{
regionp->getLand().updatePatchVisibilities(gAgent);
}
-
- // sort by distance... closer regions to the front
- // Note: regions use absolute frame so we use the agent's center
- dist_squared = (F32)(gAgent.getCameraPositionGlobal() - regionp->getCenterGlobal()).magVecSquared();
- if (dist_squared < last_dist_squared)
- {
- mVisibleRegionList.swapCurrentWithPrevious();
- }
- else
- {
- last_dist_squared = dist_squared;
- }
}
else
{
- mVisibleRegionList.removeCurrentData();
- mCulledRegionList.addData(regionp);
+ mVisibleRegionList.erase(curiter);
+ mCulledRegionList.push_back(regionp);
}
}
+ // Sort visible regions
+ mVisibleRegionList.sort(LLViewerRegion::CompareDistance());
+
gCamera->setFar(cur_far_clip);
}
void LLWorld::updateRegions(F32 max_update_time)
{
- LLViewerRegion *regionp;
LLTimer update_timer;
BOOL did_one = FALSE;
// Perform idle time updates for the regions (and associated surfaces)
- for (regionp = mRegionList.getFirstData();
- regionp;
- regionp = mRegionList.getNextData())
+ for (region_list_t::iterator iter = mRegionList.begin();
+ iter != mRegionList.end(); ++iter)
{
+ LLViewerRegion* regionp = *iter;
F32 max_time = max_update_time - update_timer.getElapsedTimeF32();
if (did_one && max_time <= 0.f)
break;
@@ -664,47 +639,45 @@ void LLWorld::updateClouds(const F32 dt)
// don't move clouds in snapshot mode
return;
}
- LLViewerRegion *regionp;
- if (mActiveRegionList.getLength())
+ if (mActiveRegionList.size())
{
// Update all the cloud puff positions, and timer based stuff
// such as death decay
- for (regionp = mActiveRegionList.getFirstData();
- regionp;
- regionp = mActiveRegionList.getNextData())
+ for (region_list_t::iterator iter = mActiveRegionList.begin();
+ iter != mActiveRegionList.end(); ++iter)
{
+ LLViewerRegion* regionp = *iter;
regionp->mCloudLayer.updatePuffs(dt);
}
// Reshuffle who owns which puffs
- for (regionp = mActiveRegionList.getFirstData();
- regionp;
- regionp = mActiveRegionList.getNextData())
+ for (region_list_t::iterator iter = mActiveRegionList.begin();
+ iter != mActiveRegionList.end(); ++iter)
{
+ LLViewerRegion* regionp = *iter;
regionp->mCloudLayer.updatePuffOwnership();
}
// Add new puffs
- for (regionp = mActiveRegionList.getFirstData();
- regionp;
- regionp = mActiveRegionList.getNextData())
+ for (region_list_t::iterator iter = mActiveRegionList.begin();
+ iter != mActiveRegionList.end(); ++iter)
{
+ LLViewerRegion* regionp = *iter;
regionp->mCloudLayer.updatePuffCount();
}
}
}
-LLCloudGroup *LLWorld::findCloudGroup(const LLCloudPuff &puff)
+LLCloudGroup* LLWorld::findCloudGroup(const LLCloudPuff &puff)
{
- LLViewerRegion *regionp;
- if (mActiveRegionList.getLength())
+ if (mActiveRegionList.size())
{
// Update all the cloud puff positions, and timer based stuff
// such as death decay
- for (regionp = mActiveRegionList.getFirstData();
- regionp;
- regionp = mActiveRegionList.getNextData())
+ for (region_list_t::iterator iter = mActiveRegionList.begin();
+ iter != mActiveRegionList.end(); ++iter)
{
+ LLViewerRegion* regionp = *iter;
LLCloudGroup *groupp = regionp->mCloudLayer.findCloudGroup(puff);
if (groupp)
{
@@ -721,11 +694,12 @@ void LLWorld::renderPropertyLines()
S32 region_count = 0;
S32 vertex_count = 0;
- LLViewerRegion* region;
- for (region = mVisibleRegionList.getFirstData(); region; region = mVisibleRegionList.getNextData() )
+ for (region_list_t::iterator iter = mVisibleRegionList.begin();
+ iter != mVisibleRegionList.end(); ++iter)
{
+ LLViewerRegion* regionp = *iter;
region_count++;
- vertex_count += region->renderPropertyLines();
+ vertex_count += regionp->renderPropertyLines();
}
}
@@ -734,10 +708,11 @@ void LLWorld::updateNetStats()
{
F32 bits = 0.f;
U32 packets = 0;
- LLViewerRegion *regionp;
- for (regionp = mActiveRegionList.getFirstData(); regionp; regionp = mActiveRegionList.getNextData())
+ for (region_list_t::iterator iter = mActiveRegionList.begin();
+ iter != mActiveRegionList.end(); ++iter)
{
+ LLViewerRegion* regionp = *iter;
regionp->updateNetStats();
bits += regionp->mBitStat.getCurrent();
packets += llfloor( regionp->mPacketsStat.getCurrent() );
@@ -772,27 +747,24 @@ void LLWorld::updateNetStats()
void LLWorld::printPacketsLost()
{
- LLViewerRegion *regionp;
-
llinfos << "Simulators:" << llendl;
llinfos << "----------" << llendl;
LLCircuitData *cdp = NULL;
- for (regionp = mActiveRegionList.getFirstData();
- regionp;
- regionp = mActiveRegionList.getNextData())
+ for (region_list_t::iterator iter = mActiveRegionList.begin();
+ iter != mActiveRegionList.end(); ++iter)
+ {
+ LLViewerRegion* regionp = *iter;
+ cdp = gMessageSystem->mCircuitInfo.findCircuit(regionp->getHost());
+ if (cdp)
{
- cdp = gMessageSystem->mCircuitInfo.findCircuit(regionp->getHost());
- if (cdp)
- {
- LLVector3d range = regionp->getCenterGlobal() - gAgent.getPositionGlobal();
+ LLVector3d range = regionp->getCenterGlobal() - gAgent.getPositionGlobal();
- llinfos << regionp->getHost() << ", range: " << range.magVec() <<
- " packets lost: " <<
- cdp->getPacketsLost() << llendl;
- }
+ llinfos << regionp->getHost() << ", range: " << range.magVec()
+ << " packets lost: " << cdp->getPacketsLost() << llendl;
}
-
+ }
+
llinfos << "UserServer:" << llendl;
llinfos << "-----------" << llendl;
@@ -805,9 +777,11 @@ void LLWorld::printPacketsLost()
void LLWorld::processCoarseUpdate(LLMessageSystem* msg, void** user_data)
{
- LLViewerRegion* region = NULL;
- region = gWorldp->getRegion(msg->getSender());
- if( region ) region->updateCoarseLocations(msg);
+ LLViewerRegion* region = gWorldp->getRegion(msg->getSender());
+ if( region )
+ {
+ region->updateCoarseLocations(msg);
+ }
}
F32 LLWorld::getLandFarClip() const
@@ -828,49 +802,58 @@ void LLWorld::updateWaterObjects()
{
return;
}
- S32 min_x, min_y, max_x, max_y;
- U32 region_x, region_y;
-
- S32 rwidth = llfloor(getRegionWidthInMeters());
-
- // First, determine the min and max "box" of water objects
- LLViewerRegion *regionp;
- regionp = mRegionList.getFirstData();
-
- if (!regionp)
+ if (mRegionList.empty())
{
llwarns << "No regions!" << llendl;
return;
}
- from_region_handle(regionp->getHandle(), ®ion_x, ®ion_y);
- min_x = max_x = region_x;
- min_y = max_y = region_y;
+ // First, determine the min and max "box" of water objects
+ bool first = true;
+ S32 min_x = 0;
+ S32 min_y = 0;
+ S32 max_x = 0;
+ S32 max_y = 0;
+ U32 region_x, region_y;
- LLVOWater *waterp;
+ S32 rwidth = llfloor(getRegionWidthInMeters());
- for (; regionp; regionp = mRegionList.getNextData())
+
+ for (region_list_t::iterator iter = mRegionList.begin();
+ iter != mRegionList.end(); ++iter)
{
+ LLViewerRegion* regionp = *iter;
from_region_handle(regionp->getHandle(), ®ion_x, ®ion_y);
- min_x = llmin(min_x, (S32)region_x);
- min_y = llmin(min_y, (S32)region_y);
- max_x = llmax(max_x, (S32)region_x);
- max_y = llmax(max_y, (S32)region_y);
- waterp = regionp->getLand().getWaterObj();
+ if (first)
+ {
+ first = false;
+ min_x = max_x = region_x;
+ min_y = max_y = region_y;
+ }
+ else
+ {
+ min_x = llmin(min_x, (S32)region_x);
+ min_y = llmin(min_y, (S32)region_y);
+ max_x = llmax(max_x, (S32)region_x);
+ max_y = llmax(max_y, (S32)region_y);
+ }
+ LLVOWater* waterp = regionp->getLand().getWaterObj();
if (waterp)
{
gObjectList.updateActive(waterp);
}
}
- for (waterp = mHoleWaterObjects.getFirstData(); waterp; waterp = mHoleWaterObjects.getNextData())
+ for (std::list::iterator iter = mHoleWaterObjects.begin();
+ iter != mHoleWaterObjects.end(); ++ iter)
{
+ LLVOWater* waterp = *iter;
gObjectList.killObject(waterp);
}
- mHoleWaterObjects.removeAllNodes();
+ mHoleWaterObjects.clear();
// We only want to fill in holes for stuff that's near us, say, within 512m
- regionp = gAgent.getRegion();
+ LLViewerRegion* regionp = gAgent.getRegion();
from_region_handle(regionp->getHandle(), ®ion_x, ®ion_y);
min_x = llmax((S32)region_x - 512, min_x);
@@ -887,14 +870,14 @@ void LLWorld::updateWaterObjects()
U64 region_handle = to_region_handle(x, y);
if (!getRegionFromHandle(region_handle))
{
- waterp = (LLVOWater *)gObjectList.createObjectViewer(LLViewerObject::LL_VO_WATER, gAgent.getRegion());
+ LLVOWater* waterp = (LLVOWater *)gObjectList.createObjectViewer(LLViewerObject::LL_VO_WATER, gAgent.getRegion());
waterp->setUseTexture(FALSE);
gPipeline.addObject(waterp);
waterp->setPositionGlobal(LLVector3d(x + rwidth/2,
y + rwidth/2,
DEFAULT_WATER_HEIGHT));
waterp->setScale(LLVector3((F32)rwidth, (F32)rwidth, 0.f));
- mHoleWaterObjects.addData(waterp);
+ mHoleWaterObjects.push_back(waterp);
}
}
}
@@ -943,7 +926,7 @@ void LLWorld::updateWaterObjects()
const S32 water_center_y = center_y + llround((wy + dim[1]) * 0.5f * gDirAxes[dir][1]);
- waterp = mEdgeWaterObjects[dir];
+ LLVOWater* waterp = mEdgeWaterObjects[dir];
if (!waterp || waterp->isDead())
{
// The edge water objects can be dead because they're attached to the region that the
@@ -971,7 +954,7 @@ void LLWorld::updateWaterObjects()
//llinfos << "End water update" << llendl;
}
-LLViewerImage *LLWorld::getDefaultWaterTexture()
+LLViewerImage* LLWorld::getDefaultWaterTexture()
{
return mDefaultWaterTexturep;
}
@@ -988,10 +971,10 @@ U64 LLWorld::getSpaceTimeUSec() const
void LLWorld::requestCacheMisses()
{
- for(LLViewerRegion* regionp = mRegionList.getFirstData();
- regionp;
- regionp = mRegionList.getNextData())
+ for (region_list_t::iterator iter = mRegionList.begin();
+ iter != mRegionList.end(); ++iter)
{
+ LLViewerRegion* regionp = *iter;
regionp->requestCacheMisses();
}
}
@@ -999,10 +982,10 @@ void LLWorld::requestCacheMisses()
LLString LLWorld::getInfoString()
{
LLString info_string("World Info:\n");
- for (LLViewerRegion* regionp = mRegionList.getFirstData();
- regionp;
- regionp = mRegionList.getNextData())
+ for (region_list_t::iterator iter = mRegionList.begin();
+ iter != mRegionList.end(); ++iter)
{
+ LLViewerRegion* regionp = *iter;
info_string += regionp->getInfoString();
}
return info_string;
@@ -1011,10 +994,10 @@ LLString LLWorld::getInfoString()
void LLWorld::disconnectRegions()
{
LLMessageSystem* msg = gMessageSystem;
- for(LLViewerRegion* regionp = mRegionList.getFirstData();
- regionp;
- regionp = mRegionList.getNextData())
+ for (region_list_t::iterator iter = mRegionList.begin();
+ iter != mRegionList.end(); ++iter)
{
+ LLViewerRegion* regionp = *iter;
if (regionp == gAgent.getRegion())
{
// Skip the main agent
@@ -1094,8 +1077,11 @@ void process_region_handshake(LLMessageSystem* msg, void** user_data)
void send_agent_pause()
{
// world not initialized yet
- if (!gWorldp) return;
-
+ if (!gWorldp)
+ {
+ return;
+ }
+
gMessageSystem->newMessageFast(_PREHASH_AgentPause);
gMessageSystem->nextBlockFast(_PREHASH_AgentData);
gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgentID);
@@ -1104,11 +1090,10 @@ void send_agent_pause()
gAgentPauseSerialNum++;
gMessageSystem->addU32Fast(_PREHASH_SerialNum, gAgentPauseSerialNum);
- LLViewerRegion *regionp;
- for (regionp = gWorldp->mActiveRegionList.getFirstData();
- regionp;
- regionp = gWorldp->mActiveRegionList.getNextData())
+ for (LLWorld::region_list_t::iterator iter = gWorldp->mActiveRegionList.begin();
+ iter != gWorldp->mActiveRegionList.end(); ++iter)
{
+ LLViewerRegion* regionp = *iter;
gMessageSystem->sendReliable(regionp->getHost());
}
@@ -1132,11 +1117,10 @@ void send_agent_resume()
gMessageSystem->addU32Fast(_PREHASH_SerialNum, gAgentPauseSerialNum);
- LLViewerRegion *regionp;
- for (regionp = gWorldp->mActiveRegionList.getFirstData();
- regionp;
- regionp = gWorldp->mActiveRegionList.getNextData())
+ for (LLWorld::region_list_t::iterator iter = gWorldp->mActiveRegionList.begin();
+ iter != gWorldp->mActiveRegionList.end(); ++iter)
{
+ LLViewerRegion* regionp = *iter;
gMessageSystem->sendReliable(regionp->getHost());
}
diff --git a/linden/indra/newview/llworld.h b/linden/indra/newview/llworld.h
index b10b287..d2482ac 100644
--- a/linden/indra/newview/llworld.h
+++ b/linden/indra/newview/llworld.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -29,8 +30,6 @@
#define LL_LLWORLD_H
#include "llpatchvertexarray.h"
-#include "doublelinkedlist.h"
-#include "linked_lists.h"
#include "llmath.h"
//#include "vmath.h"
@@ -141,14 +140,17 @@ public:
U64 getSpaceTimeUSec() const;
LLString getInfoString();
+
public:
- LLDoubleLinkedList mActiveRegionList;
+ typedef std::list region_list_t;
+
+ region_list_t mActiveRegionList;
LLViewerPartSim mPartSim;
private:
- LLLinkedList mRegionList;
- LLDoubleLinkedList mVisibleRegionList;
- LLDoubleLinkedList mCulledRegionList;
+ region_list_t mRegionList;
+ region_list_t mVisibleRegionList;
+ region_list_t mCulledRegionList;
// Number of points on edge
const U32 mWidth;
@@ -175,7 +177,7 @@ private:
U32 mMinRegionY;
U32 mMaxRegionY;
- LLLinkedList mHoleWaterObjects;
+ std::list mHoleWaterObjects;
LLPointer mEdgeWaterObjects[8];
LLPointer mDefaultWaterTexturep;
diff --git a/linden/indra/newview/llworldmap.cpp b/linden/indra/newview/llworldmap.cpp
index 0bdab0d..f2a2c90 100644
--- a/linden/indra/newview/llworldmap.cpp
+++ b/linden/indra/newview/llworldmap.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llworldmap.h b/linden/indra/newview/llworldmap.h
index 9678b37..c4af7d8 100644
--- a/linden/indra/newview/llworldmap.h
+++ b/linden/indra/newview/llworldmap.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llworldmapview.cpp b/linden/indra/newview/llworldmapview.cpp
index 65a084d..01dd1b8 100644
--- a/linden/indra/newview/llworldmapview.cpp
+++ b/linden/indra/newview/llworldmapview.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -1789,7 +1790,7 @@ BOOL outside_slop(S32 x, S32 y, S32 start_x, S32 start_y)
BOOL LLWorldMapView::handleMouseDown( S32 x, S32 y, MASK mask )
{
- gFocusMgr.setMouseCapture( this, NULL );
+ gFocusMgr.setMouseCapture( this );
mMouseDownPanX = llround(sPanX);
mMouseDownPanY = llround(sPanY);
@@ -1801,7 +1802,7 @@ BOOL LLWorldMapView::handleMouseDown( S32 x, S32 y, MASK mask )
BOOL LLWorldMapView::handleMouseUp( S32 x, S32 y, MASK mask )
{
- if (this == gFocusMgr.getMouseCapture())
+ if (hasMouseCapture())
{
if (mPanning)
{
@@ -1828,7 +1829,7 @@ BOOL LLWorldMapView::handleMouseUp( S32 x, S32 y, MASK mask )
handleClick(x, y, mask, &hit_type, &id);
}
gViewerWindow->showCursor();
- gFocusMgr.setMouseCapture( NULL, NULL );
+ gFocusMgr.setMouseCapture( NULL );
return TRUE;
}
return FALSE;
@@ -1874,7 +1875,7 @@ void LLWorldMapView::updateVisibleBlocks()
BOOL LLWorldMapView::handleHover( S32 x, S32 y, MASK mask )
{
- if (this == gFocusMgr.getMouseCapture())
+ if (hasMouseCapture())
{
if (mPanning || outside_slop(x, y, mMouseDownX, mMouseDownY))
{
diff --git a/linden/indra/newview/llworldmapview.h b/linden/indra/newview/llworldmapview.h
index f2912bd..7eeb554 100644
--- a/linden/indra/newview/llworldmapview.h
+++ b/linden/indra/newview/llworldmapview.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/llxmlrpctransaction.cpp b/linden/indra/newview/llxmlrpctransaction.cpp
index d84f5c6..896508c 100644
--- a/linden/indra/newview/llxmlrpctransaction.cpp
+++ b/linden/indra/newview/llxmlrpctransaction.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -238,6 +239,7 @@ void LLXMLRPCTransaction::Impl::init(XMLRPC_REQUEST request, bool useGzip)
curl_easy_setopt(mCurl, CURLOPT_ERRORBUFFER, &mCurlErrorBuffer);
curl_easy_setopt(mCurl, CURLOPT_CAINFO, gDirUtilp->getCAFile().c_str());
curl_easy_setopt(mCurl, CURLOPT_SSL_VERIFYPEER, gVerifySSLCert);
+ curl_easy_setopt(mCurl, CURLOPT_SSL_VERIFYHOST, gVerifySSLCert? 2 : 0);
/* Setting the DNS cache timeout to -1 disables it completely.
This might help with bug #503 */
diff --git a/linden/indra/newview/llxmlrpctransaction.h b/linden/indra/newview/llxmlrpctransaction.h
index d2e4613..460cfbe 100644
--- a/linden/indra/newview/llxmlrpctransaction.h
+++ b/linden/indra/newview/llxmlrpctransaction.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/lsl_guide.html b/linden/indra/newview/lsl_guide.html
index 6f3796f..33c2499 100644
--- a/linden/indra/newview/lsl_guide.html
+++ b/linden/indra/newview/lsl_guide.html
@@ -15055,6 +15055,16 @@ HREF="#AEN5604"
>.
If linknumber
is LINK_SET , set the alpha of
+ all objects in the linked set. If >>>>>> .merge-right.r59207
>face
is
.
If linknumber
is LINK_SET , set the color of
+ all objects in the linked set. If >>>>>> .merge-right.r59207
>face
is
llSetLinkPrimitiveParams
(integer linknumber, list rules);
llSetLinkPrimitiveParams
(integer linknumber, list rules);
Sets the primitive parameters of the linked child
+ specified by linknumber
. A value of 0 means
+ no link, 1 the root, 2 for first child, etc. If
+ linknumber
is LINK_SET , set the primitive parameters
+ of all objects in the linked set. The rules
+ list is identical to that of
+ llSetPrimitiveParams .
llSetLinkTexture
(integer linknumber, string texture, integer face);
Sets the texture
of the linked child
+ specified by linknumber
. A value of 0 means
+ no link, 1 the root, 2 for first child, etc. If
+ linknumber
is LINK_SET , set the texture of
+ all objects in the linked set. If face
is
+ ALL_SIDES , set the texture
+ of all faces.
>>>>>> .merge-right.r59207
>llSetLocalRot
(rotation rot);
"; };
1A758C980A436FF400589675 /* llpanellandoptions.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llpanellandoptions.h; sourceTree = "
"; };
1A758C990A43700400589675 /* llagentdata.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llagentdata.h; sourceTree = ""; };
+ 1A83767C0BA2169600F28979 /* llviewergenericmessage.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llviewergenericmessage.h; sourceTree = ""; };
+ 1A83767D0BA2169600F28979 /* llviewergenericmessage.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llviewergenericmessage.cpp; sourceTree = ""; };
1A89230308B12D1000A04AA9 /* llurlwhitelist.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llurlwhitelist.cpp; sourceTree = ""; };
1A89230408B12D1000A04AA9 /* llurlwhitelist.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llurlwhitelist.h; sourceTree = ""; };
1A89230608B12D2E00A04AA9 /* llfloateropenobject.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloateropenobject.cpp; sourceTree = ""; };
@@ -1089,6 +1122,16 @@
2EFEA8ED09F455C900CB0193 /* llpanelgroup.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llpanelgroup.h; sourceTree = ""; };
2EFEA8EF09F4588000CB0193 /* llpanelgroupgeneral.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llpanelgroupgeneral.h; sourceTree = ""; };
2EFEA8F009F4588B00CB0193 /* llpanelgroupgeneral.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelgroupgeneral.cpp; sourceTree = ""; };
+ 3834D6010B73ABC1002B61C8 /* llmessagereader.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmessagereader.cpp; sourceTree = ""; };
+ 3834D6020B73ABC1002B61C8 /* llmessagereader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmessagereader.h; sourceTree = ""; };
+ 3834D6030B73ABC1002B61C8 /* lltemplatemessagereader.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = lltemplatemessagereader.cpp; sourceTree = ""; };
+ 3834D6040B73ABC1002B61C8 /* lltemplatemessagereader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lltemplatemessagereader.h; sourceTree = ""; };
+ 38D0FA690B4BF897003323BA /* lltemplatemessagebuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = lltemplatemessagebuilder.cpp; sourceTree = ""; };
+ 38D0FA6A0B4BF898003323BA /* llmessagetemplate.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmessagetemplate.cpp; sourceTree = ""; };
+ 38D0FA6B0B4BF898003323BA /* llmessagebuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmessagebuilder.cpp; sourceTree = ""; };
+ 38D0FA6F0B4BF8C5003323BA /* lltemplatemessagebuilder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lltemplatemessagebuilder.h; sourceTree = ""; };
+ 38D0FA700B4BF8C5003323BA /* llmessagebuilder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmessagebuilder.h; sourceTree = ""; };
+ 38D0FA710B4BF8C5003323BA /* llmsgvariabletype.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmsgvariabletype.h; sourceTree = ""; };
5503B89A05446B15003D051F /* Info-SecondLifeVorbis.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Info-SecondLifeVorbis.plist"; sourceTree = ""; };
5503BD0605446B20003D051F /* Info-SecondLife.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Info-SecondLife.plist"; sourceTree = ""; };
5503BD0705446B20003D051F /* Second Life.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Second Life.app"; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -1116,7 +1159,6 @@
616C4E2F07551735006C2C65 /* lldir_mac.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lldir_mac.h; sourceTree = ""; };
616C4E3007551735006C2C65 /* lldir.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = lldir.cpp; sourceTree = ""; };
616C4E3107551735006C2C65 /* lldir.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lldir.h; sourceTree = ""; };
- 6192211F074A9B57005E1F34 /* bitpack.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = bitpack.cpp; sourceTree = ""; };
61922120074A9B57005E1F34 /* bitpack.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = bitpack.h; sourceTree = ""; };
61922121074A9B57005E1F34 /* doublelinkedlist.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = doublelinkedlist.h; sourceTree = ""; };
61922122074A9B57005E1F34 /* imageids.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = imageids.h; sourceTree = ""; };
@@ -1548,11 +1590,14 @@
990CDBE105C1EA7900739545 /* MoreFilesX.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MoreFilesX.h; sourceTree = ""; };
991ED2DF0883646B003EC818 /* llclassifiedinfo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llclassifiedinfo.cpp; sourceTree = ""; };
9928ACA4056D9353003865BE /* CrashReporter.nib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; path = CrashReporter.nib; sourceTree = ""; };
+ 9930A8DD0B8FB0E200197ECA /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = English; path = English.lproj/language.txt; sourceTree = ""; };
+ 9930A8E70B8FB14E00197ECA /* Japanese */ = {isa = PBXFileReference; lastKnownFileType = text; name = Japanese; path = Japanese.lproj/language.txt; sourceTree = ""; };
+ 9930A8EA0B8FB1D500197ECA /* German */ = {isa = PBXFileReference; lastKnownFileType = text; name = German; path = German.lproj/language.txt; sourceTree = ""; };
+ 9930A8ED0B8FB1E500197ECA /* Korean */ = {isa = PBXFileReference; lastKnownFileType = text; name = Korean; path = Korean.lproj/language.txt; sourceTree = ""; };
99321B11081DD26000678159 /* llworkerthread.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llworkerthread.h; sourceTree = ""; };
99321B12081DD26000678159 /* llworkerthread.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llworkerthread.cpp; sourceTree = ""; };
9932ED1F056C1F0900554101 /* crashreporter.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = crashreporter.app; sourceTree = BUILT_PRODUCTS_DIR; };
994ADAE20A8016E500061DFB /* libllmozlib.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libllmozlib.dylib; path = "../../libraries/universal-darwin/lib_release/libllmozlib.dylib"; sourceTree = SOURCE_ROOT; };
- 9950AFEB0B376E24007E36E0 /* libopenjpeg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libopenjpeg.a; sourceTree = BUILT_PRODUCTS_DIR; };
9967E9090B37533F0087BD1B /* libfmodwrapper.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libfmodwrapper.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
9967E9520B37564D0087BD1B /* fmodwrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fmodwrapper.cpp; sourceTree = ""; };
997B4BD006015820001B0407 /* viewer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = viewer.h; sourceTree = SOURCE_ROOT; };
@@ -1591,7 +1636,6 @@
997B4BF806015821001B0407 /* llviewerthrottle.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llviewerthrottle.h; sourceTree = SOURCE_ROOT; };
997B4BF906015821001B0407 /* llviewertextureanim.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llviewertextureanim.h; sourceTree = SOURCE_ROOT; };
997B4BFA06015821001B0407 /* llviewerstats.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llviewerstats.h; sourceTree = SOURCE_ROOT; };
- 997B4BFB06015821001B0407 /* llviewerreputation.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llviewerreputation.h; sourceTree = SOURCE_ROOT; };
997B4BFC06015821001B0407 /* llviewerregion.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llviewerregion.h; sourceTree = SOURCE_ROOT; };
997B4BFD06015821001B0407 /* llviewerpartsource.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llviewerpartsource.h; sourceTree = SOURCE_ROOT; };
997B4BFE06015821001B0407 /* llviewerpartsim.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llviewerpartsim.h; sourceTree = SOURCE_ROOT; };
@@ -1739,7 +1783,6 @@
997B4CC506015822001B0407 /* llfloatertools.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloatertools.h; sourceTree = SOURCE_ROOT; };
997B4CC606015822001B0407 /* llfloatersnapshot.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloatersnapshot.h; sourceTree = SOURCE_ROOT; };
997B4CC706015822001B0407 /* llfloaterreporter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterreporter.h; sourceTree = SOURCE_ROOT; };
- 997B4CC806015822001B0407 /* llfloaterrate.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterrate.h; sourceTree = SOURCE_ROOT; };
997B4CC906015822001B0407 /* llfloaterproperties.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterproperties.h; sourceTree = SOURCE_ROOT; };
997B4CCA06015822001B0407 /* llfloaterpreference.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterpreference.h; sourceTree = SOURCE_ROOT; };
997B4CCB06015822001B0407 /* llfloaterpostcard.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterpostcard.h; sourceTree = SOURCE_ROOT; };
@@ -1848,6 +1891,7 @@
99E64037081F1CB80009003F /* llgl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llgl.h; sourceTree = ""; };
99EDDF5B05892E720031B20D /* llfloaterlandholdings.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterlandholdings.cpp; sourceTree = ""; };
99EDE33605896DC10031B20D /* SecondLife.nib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; path = SecondLife.nib; sourceTree = ""; };
+ 99F998FA0BAA34B90034E41C /* libopenjpeg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libopenjpeg.a; sourceTree = BUILT_PRODUCTS_DIR; };
99FBB044087362B60048A5CC /* llpanelclassified.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelclassified.cpp; sourceTree = ""; };
99FBB048087363B00048A5CC /* llpanelclassified.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llpanelclassified.h; sourceTree = ""; };
99FBB071087365E90048A5CC /* llclassifiedflags.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llclassifiedflags.cpp; sourceTree = ""; };
@@ -1860,7 +1904,11 @@
9B39350C0AD6F96900F57245 /* llhttpclient.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llhttpclient.h; sourceTree = ""; };
9B39350F0AD6F9F400F57245 /* llurlrequest.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llurlrequest.cpp; sourceTree = ""; };
9B3935100AD6F9F400F57245 /* llurlrequest.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llurlrequest.h; sourceTree = ""; };
+ 9C1842500B9F94F200208356 /* llcaphttpsender.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llcaphttpsender.h; sourceTree = ""; };
+ 9C18425A0B9F951500208356 /* llcaphttpsender.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llcaphttpsender.cpp; sourceTree = ""; };
9C1853AD0A91175E00DA7B01 /* llviewercontrol.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llviewercontrol.cpp; sourceTree = ""; };
+ 9C659A850BAB0B6E00D2EB60 /* llmessageconfig.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmessageconfig.cpp; sourceTree = ""; };
+ 9C659A860BAB0B6E00D2EB60 /* llmessageconfig.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmessageconfig.h; sourceTree = ""; };
9C67A8440A02BBA60056B4E0 /* gpu_table.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = gpu_table.txt; sourceTree = ""; };
9CD49D5609D0BAC100192434 /* llflexibleobject.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llflexibleobject.cpp; sourceTree = ""; };
9CD49D5809D0BAD600192434 /* llflexibleobject.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llflexibleobject.h; sourceTree = ""; };
@@ -1875,6 +1923,7 @@
A241CB8E07B3E383001A39E3 /* llmessagethrottle.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmessagethrottle.cpp; sourceTree = ""; };
A241CB8F07B3E383001A39E3 /* llmessagethrottle.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmessagethrottle.h; sourceTree = ""; };
A241CB9407B3E3A7001A39E3 /* llperlin.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llperlin.cpp; sourceTree = ""; };
+ A29852A10BC6BC630005FA09 /* llhtmlhelp.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llhtmlhelp.h; sourceTree = ""; };
A2A57EBA0ADF10FD00F6EF97 /* llavatarconstants.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llavatarconstants.h; sourceTree = ""; };
A30273550B3A13D800704420 /* llvertexbuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llvertexbuffer.cpp; sourceTree = ""; };
A30273560B3A13D800704420 /* llvertexbuffer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llvertexbuffer.h; sourceTree = ""; };
@@ -1895,6 +1944,10 @@
A3AF6BCA0A544C71005B5E2C /* lleventemitter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lleventemitter.h; sourceTree = ""; };
A3AF6BCE0A544EF0005B5E2C /* llpanellogin.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanellogin.cpp; sourceTree = ""; };
A3AF6BD00A544F0A005B5E2C /* llpanellogin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llpanellogin.h; sourceTree = ""; };
+ A3C20E490BB0BCDF007E872B /* llglslshader.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llglslshader.cpp; sourceTree = ""; };
+ A3C20E4B0BB0BD12007E872B /* llviewerjoystick.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llviewerjoystick.cpp; sourceTree = ""; };
+ A3C20E4D0BB0BD37007E872B /* llglslshader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llglslshader.h; sourceTree = ""; };
+ A3C20E4E0BB0BD49007E872B /* llviewerjoystick.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llviewerjoystick.h; sourceTree = ""; };
A3D968F00A6EBCA7007E8BD2 /* llfloaternewim.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaternewim.cpp; sourceTree = ""; };
A3D968F10A6EBCA7007E8BD2 /* llfloaternewim.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaternewim.h; sourceTree = ""; };
A3D9691B0A6ED5F6007E8BD2 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; };
@@ -1936,8 +1989,13 @@
D62831620B4F3FA200F8830F /* llimagegl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llimagegl.h; sourceTree = ""; };
D62831640B4F3FA200F8830F /* llvertexprogramgl.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llvertexprogramgl.cpp; sourceTree = ""; };
D62831650B4F3FA200F8830F /* llvertexprogramgl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llvertexprogramgl.h; sourceTree = ""; };
- D62831670B4F3FA200F8830F /* text_out.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = text_out.cpp; sourceTree = ""; };
- D62831680B4F3FA200F8830F /* text_out.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = text_out.h; sourceTree = ""; };
+ DA4B14140B978815003F64DE /* llhttpsender.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llhttpsender.cpp; sourceTree = ""; };
+ DA4B14150B978815003F64DE /* llhttpsender.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llhttpsender.h; sourceTree = ""; };
+ DA4B14160B978815003F64DE /* llmessagetemplate.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmessagetemplate.h; sourceTree = ""; };
+ DA4B14170B978815003F64DE /* llsdmessagebuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llsdmessagebuilder.cpp; sourceTree = ""; };
+ DA4B14180B978815003F64DE /* llsdmessagebuilder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llsdmessagebuilder.h; sourceTree = ""; };
+ DA4B14190B978815003F64DE /* llsdmessagereader.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llsdmessagereader.cpp; sourceTree = ""; };
+ DA4B141A0B978815003F64DE /* llsdmessagereader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llsdmessagereader.h; sourceTree = ""; };
DA55FCB20B59F75C001C28B6 /* llerrorcontrol.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llerrorcontrol.h; sourceTree = ""; };
DA9C40DE0B54B4BA00DD6F44 /* llformat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llformat.h; sourceTree = ""; };
DA9C40DF0B54B4BA00DD6F44 /* llformat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llformat.cpp; sourceTree = ""; };
@@ -2096,8 +2154,6 @@
FDE8765609BEA39600AF6316 /* libvorbisenc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libvorbisenc.a; sourceTree = BUILT_PRODUCTS_DIR; };
FDE8765709BEA39600AF6316 /* libvorbisfile.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libvorbisfile.a; sourceTree = BUILT_PRODUCTS_DIR; };
FDE8765809BEA39700AF6316 /* libxmlrpc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libxmlrpc.a; sourceTree = BUILT_PRODUCTS_DIR; };
- FDFAD3E50AFFBA270048A0C7 /* llsdmessagesystem.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llsdmessagesystem.cpp; sourceTree = ""; };
- FDFAD3E60AFFBA270048A0C7 /* llsdmessagesystem.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llsdmessagesystem.h; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -2105,6 +2161,10 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ 5503BCF505446B20003D051F /* Carbon.framework in Frameworks */,
+ 5503BD0405446B20003D051F /* QuickTime.framework in Frameworks */,
+ A3D9691F0A6ED666007E8BD2 /* IOKit.framework in Frameworks */,
+ 9985A1280AC1FE4E00579AFB /* AppKit.framework in Frameworks */,
61923C8B074ACA8D005E1F34 /* libllcommon.a in Frameworks */,
FDE8765C09BEA3C300AF6316 /* libapr-1.a in Frameworks */,
FDE8765D09BEA3C400AF6316 /* libexpat.a in Frameworks */,
@@ -2115,23 +2175,19 @@
FDE8766109BEA3C600AF6316 /* liblljpeg.a in Frameworks */,
FDE8766409BEA3C700AF6316 /* libvorbisenc.a in Frameworks */,
FDE8766609BEA3C800AF6316 /* libxmlrpc.a in Frameworks */,
- 5503BCF505446B20003D051F /* Carbon.framework in Frameworks */,
- 5503BCF805446B20003D051F /* OpenGL.framework in Frameworks */,
- 5503BD0005446B20003D051F /* AGL.framework in Frameworks */,
- 5503BD0405446B20003D051F /* QuickTime.framework in Frameworks */,
FDAA36B809B919AD00FBF1CA /* libssl.dylib in Frameworks */,
FDAA36BC09B919CD00FBF1CA /* libcrypto.dylib in Frameworks */,
FDAA36C009B919DF00FBF1CA /* libz.dylib in Frameworks */,
FDAA36C309B919F600FBF1CA /* libmx.dylib in Frameworks */,
FD6C9A5309C773A000AA1849 /* libaprutil-1.a in Frameworks */,
FD1558B20A06C1C700DE9AE5 /* libiconv.dylib in Frameworks */,
- A3D9691F0A6ED666007E8BD2 /* IOKit.framework in Frameworks */,
994ADAE30A8016E600061DFB /* libllmozlib.dylib in Frameworks */,
- 9985A1280AC1FE4E00579AFB /* AppKit.framework in Frameworks */,
9967E9200B3754800087BD1B /* libfmodwrapper.dylib in Frameworks */,
- 9950AFEC0B376E24007E36E0 /* libopenjpeg.a in Frameworks */,
FD34696B0B5C3C55007318E5 /* libllcurl.a in Frameworks */,
FDD3FD730B6A89A0009173F1 /* libcares.a in Frameworks */,
+ 99F998FB0BAA34B90034E41C /* libopenjpeg.a in Frameworks */,
+ 99F99A160BAA3D4C0034E41C /* AGL.framework in Frameworks */,
+ 99F99A190BAA3D520034E41C /* OpenGL.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2178,6 +2234,18 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ D64593540B3B4D7D00FAB68F /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ D64594130B3B6DE100FAB68F /* libllcommon.a in Frameworks */,
+ D6F77CBC0B445C3B0040826D /* AppKit.framework in Frameworks */,
+ D645940C0B3B6D9000FAB68F /* libapr-1.a in Frameworks */,
+ D645940D0B3B6D9A00FAB68F /* libaprutil-1.a in Frameworks */,
+ DA8C5F9B0B61A9F900BCA79A /* libexpat.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
@@ -2245,6 +2313,7 @@
children = (
019200F204DD7D3500A800A7 /* macview.r */,
0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */,
+ 9930A8E30B8FB10A00197ECA /* language.txt */,
);
name = Resources;
sourceTree = "";
@@ -2252,7 +2321,6 @@
20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = {
isa = PBXGroup;
children = (
- A3D9691B0A6ED5F6007E8BD2 /* IOKit.framework */,
FDE8761909BE9C7D00AF6316 /* Third Party Libraries */,
FDE8761809BE9C6500AF6316 /* System Libraries */,
FDE8746E09BE9C4E00AF6316 /* Frameworks */,
@@ -2263,6 +2331,11 @@
26F529A0051F61CD00A80050 /* newview */ = {
isa = PBXGroup;
children = (
+ 1A83767C0BA2169600F28979 /* llviewergenericmessage.h */,
+ 1A83767D0BA2169600F28979 /* llviewergenericmessage.cpp */,
+ 9C18425A0B9F951500208356 /* llcaphttpsender.cpp */,
+ A3C20E4B0BB0BD12007E872B /* llviewerjoystick.cpp */,
+ A3C20E490BB0BCDF007E872B /* llglslshader.cpp */,
AAF5FFD00B13F71900D28A84 /* lltexturecache.cpp */,
AAF5FFD10B13F71900D28A84 /* lltexturecache.h */,
AA02B9BA0B0CE44D00F2996D /* lltexturefetch.cpp */,
@@ -2715,7 +2788,6 @@
616C4A8E0752C3D1006C2C65 /* lltimer.cpp */,
616C4A8D0752C3D1006C2C65 /* lldefs.h */,
616C4A8C0752C3D1006C2C65 /* linden_common.h */,
- 6192211F074A9B57005E1F34 /* bitpack.cpp */,
61922120074A9B57005E1F34 /* bitpack.h */,
61922121074A9B57005E1F34 /* doublelinkedlist.h */,
61922122074A9B57005E1F34 /* imageids.h */,
@@ -2884,6 +2956,8 @@
619221B8074A9B58005E1F34 /* llmessage */ = {
isa = PBXGroup;
children = (
+ 9C659A850BAB0B6E00D2EB60 /* llmessageconfig.cpp */,
+ 9C659A860BAB0B6E00D2EB60 /* llmessageconfig.h */,
AA348DF80B0EAB31002C3015 /* llcurl.cpp */,
AA348DF90B0EAB31002C3015 /* llcurl.h */,
1A02017E0B7A861200D5C589 /* llblowfishcipher.cpp */,
@@ -2893,10 +2967,25 @@
1A0201820B7A861200D5C589 /* llnullcipher.h */,
1A0201830B7A861200D5C589 /* llxorcipher.cpp */,
1A0201840B7A861200D5C589 /* llxorcipher.h */,
+ DA4B14140B978815003F64DE /* llhttpsender.cpp */,
+ DA4B14150B978815003F64DE /* llhttpsender.h */,
+ DA4B14160B978815003F64DE /* llmessagetemplate.h */,
+ DA4B14170B978815003F64DE /* llsdmessagebuilder.cpp */,
+ DA4B14180B978815003F64DE /* llsdmessagebuilder.h */,
+ DA4B14190B978815003F64DE /* llsdmessagereader.cpp */,
+ DA4B141A0B978815003F64DE /* llsdmessagereader.h */,
+ 3834D6010B73ABC1002B61C8 /* llmessagereader.cpp */,
+ 3834D6020B73ABC1002B61C8 /* llmessagereader.h */,
+ 3834D6030B73ABC1002B61C8 /* lltemplatemessagereader.cpp */,
+ 3834D6040B73ABC1002B61C8 /* lltemplatemessagereader.h */,
91469E790B4486C10009E8F9 /* llmime.cpp */,
91469E7A0B4486C10009E8F9 /* llmime.h */,
- FDFAD3E50AFFBA270048A0C7 /* llsdmessagesystem.cpp */,
- FDFAD3E60AFFBA270048A0C7 /* llsdmessagesystem.h */,
+ 38D0FA6F0B4BF8C5003323BA /* lltemplatemessagebuilder.h */,
+ 38D0FA700B4BF8C5003323BA /* llmessagebuilder.h */,
+ 38D0FA710B4BF8C5003323BA /* llmsgvariabletype.h */,
+ 38D0FA690B4BF897003323BA /* lltemplatemessagebuilder.cpp */,
+ 38D0FA6A0B4BF898003323BA /* llmessagetemplate.cpp */,
+ 38D0FA6B0B4BF898003323BA /* llmessagebuilder.cpp */,
FDCB54F40AFBC5060033B433 /* llhttpnode.cpp */,
FDCB54F50AFBC5060033B433 /* llhttpnode.h */,
FD835B800AD1CB6700038B74 /* llchainio.cpp */,
@@ -3040,6 +3129,7 @@
6192225C074A9B5A005E1F34 /* llui */ = {
isa = PBXGroup;
children = (
+ A29852A10BC6BC630005FA09 /* llhtmlhelp.h */,
1A1F130A0B3919F100845A6C /* lleditmenuhandler.h */,
1A1F130B0B3919F100845A6C /* lleditmenuhandler.cpp */,
1AEF0A590B2DFE71003F107C /* llrootview.h */,
@@ -3408,6 +3498,9 @@
997B4BCB060157E5001B0407 /* newview headers */ = {
isa = PBXGroup;
children = (
+ 9C1842500B9F94F200208356 /* llcaphttpsender.h */,
+ A3C20E4E0BB0BD49007E872B /* llviewerjoystick.h */,
+ A3C20E4D0BB0BD37007E872B /* llglslshader.h */,
1AF7C1F20AF6C45000C4BF4A /* llweb.h */,
1AF9CA450AE972D4003EFF2D /* llfloateravatartextures.h */,
1AD61F6C0AC09B2600507FB9 /* llimview.h */,
@@ -3480,7 +3573,6 @@
997B4BF806015821001B0407 /* llviewerthrottle.h */,
997B4BF906015821001B0407 /* llviewertextureanim.h */,
997B4BFA06015821001B0407 /* llviewerstats.h */,
- 997B4BFB06015821001B0407 /* llviewerreputation.h */,
997B4BFC06015821001B0407 /* llviewerregion.h */,
997B4BFD06015821001B0407 /* llviewerpartsource.h */,
997B4BFE06015821001B0407 /* llviewerpartsim.h */,
@@ -3630,7 +3722,6 @@
997B4CC506015822001B0407 /* llfloatertools.h */,
997B4CC606015822001B0407 /* llfloatersnapshot.h */,
997B4CC706015822001B0407 /* llfloaterreporter.h */,
- 997B4CC806015822001B0407 /* llfloaterrate.h */,
997B4CC906015822001B0407 /* llfloaterproperties.h */,
997B4CCA06015822001B0407 /* llfloaterpreference.h */,
997B4CCB06015822001B0407 /* llfloaterpostcard.h */,
@@ -3731,8 +3822,6 @@
D62831620B4F3FA200F8830F /* llimagegl.h */,
D62831640B4F3FA200F8830F /* llvertexprogramgl.cpp */,
D62831650B4F3FA200F8830F /* llvertexprogramgl.h */,
- D62831670B4F3FA200F8830F /* text_out.cpp */,
- D62831680B4F3FA200F8830F /* text_out.h */,
);
name = llrender;
path = ../llrender;
@@ -3744,6 +3833,7 @@
20286C33FDCF999611CA2CEA /* Carbon.framework */,
9985A1270AC1FE4E00579AFB /* AppKit.framework */,
26E79A7A0520ED1200A80050 /* AGL.framework */,
+ A3D9691B0A6ED5F6007E8BD2 /* IOKit.framework */,
26E79A3D0520B56600A80050 /* OpenGL.framework */,
55593DF0053F5C7C0095DD27 /* QuickTime.framework */,
);
@@ -3773,10 +3863,9 @@
FDE8764F09BEA39600AF6316 /* libexpat.a */,
FDE8765009BEA39600AF6316 /* libfmod.a */,
FDE8765109BEA39600AF6316 /* libfreetype.a */,
- 9950AFEB0B376E24007E36E0 /* libopenjpeg.a */,
FDE8765309BEA39600AF6316 /* liblljpeg.a */,
- 9950AFEB0B376E24007E36E0 /* libopenjpeg.a */,
FDE8765409BEA39600AF6316 /* libogg.a */,
+ 99F998FA0BAA34B90034E41C /* libopenjpeg.a */,
FDE8765509BEA39600AF6316 /* libvorbis.a */,
FDE8765609BEA39600AF6316 /* libvorbisenc.a */,
FDE8765709BEA39600AF6316 /* libvorbisfile.a */,
@@ -3796,6 +3885,13 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ D64593520B3B4D7D00FAB68F /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
@@ -3817,6 +3913,7 @@
99FCDAE8093D1FC3003D3B63 /* PBXTargetDependency */,
99FCDAEC093D1FC8003D3B63 /* PBXTargetDependency */,
9967E91C0B3754610087BD1B /* PBXTargetDependency */,
+ D64E29CE0B4B288600963559 /* PBXTargetDependency */,
);
name = newview;
productInstallPath = "$(HOME)/Applications";
@@ -3904,6 +4001,13 @@
isa = PBXProject;
buildConfigurationList = 999484580883114300EFC621 /* Build configuration list for PBXProject "macview" */;
hasScannedForEncodings = 1;
+ knownRegions = (
+ English,
+ Japanese,
+ French,
+ German,
+ Korean,
+ );
mainGroup = 20286C29FDCF999611CA2CEA /* «PROJECTNAME» */;
projectDirPath = "";
targets = (
@@ -3927,6 +4031,7 @@
99EDE33705896DC10031B20D /* SecondLife.nib in Resources */,
FD53B3C309BDD5F900BFE3BC /* AutoUpdater.app in Resources */,
FD53B3C409BDD5FA00BFE3BC /* crashreporter.app in Resources */,
+ 9930A8E40B8FB10A00197ECA /* language.txt in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -4031,7 +4136,6 @@
5503BB5205446B20003D051F /* llviewerthrottle.cpp in Sources */,
5503BB5305446B20003D051F /* llviewertextureanim.cpp in Sources */,
5503BB5405446B20003D051F /* llviewerstats.cpp in Sources */,
- 5503BB5505446B20003D051F /* llviewerreputation.cpp in Sources */,
5503BB5605446B20003D051F /* llviewerregion.cpp in Sources */,
5503BB5705446B20003D051F /* llviewerpartsource.cpp in Sources */,
5503BB5805446B20003D051F /* llviewerpartsim.cpp in Sources */,
@@ -4142,7 +4246,6 @@
5503BBEF05446B20003D051F /* lltoolcomp.cpp in Sources */,
5503BBF005446B20003D051F /* llcontainerview.cpp in Sources */,
5503BBF305446B20003D051F /* lldrawpooltree.cpp in Sources */,
- 5503BBF405446B20003D051F /* llfloaterrate.cpp in Sources */,
5503BBF605446B20003D051F /* llfloatergroups.cpp in Sources */,
5503BBFA05446B20003D051F /* llfloaterabout.cpp in Sources */,
5503BBFB05446B20003D051F /* llcolorswatch.cpp in Sources */,
@@ -4405,7 +4508,6 @@
FD59ED5F0AF2AF460086642A /* llassetuploadresponders.cpp in Sources */,
FDCB54F60AFBC5060033B433 /* llhttpnode.cpp in Sources */,
FDCB55290AFBD4310033B433 /* lleventpoll.cpp in Sources */,
- FDFAD3EA0AFFBB230048A0C7 /* llsdmessagesystem.cpp in Sources */,
AA348DFA0B0EAB31002C3015 /* llcurl.cpp in Sources */,
AAF5FFD20B13F71900D28A84 /* lltexturecache.cpp in Sources */,
C1F5D0A50B138AEB00827F1D /* lluserrelations.cpp in Sources */,
@@ -4419,11 +4521,23 @@
A32748C10B5F38A80099BE18 /* llfont.cpp in Sources */,
A32748BF0B5F38A00099BE18 /* llfontgl.cpp in Sources */,
A32748C00B5F38A20099BE18 /* llimagegl.cpp in Sources */,
- A3274AD20B5F39130099BE18 /* text_out.cpp in Sources */,
1A02016F0B7A85DE00D5C589 /* llbase64.cpp in Sources */,
1A0201850B7A861200D5C589 /* llblowfishcipher.cpp in Sources */,
1A0201860B7A861200D5C589 /* llnullcipher.cpp in Sources */,
1A0201870B7A861200D5C589 /* llxorcipher.cpp in Sources */,
+ 1A83767E0BA2169600F28979 /* llviewergenericmessage.cpp in Sources */,
+ 38D0FA6C0B4BF898003323BA /* lltemplatemessagebuilder.cpp in Sources */,
+ 38D0FA6D0B4BF898003323BA /* llmessagetemplate.cpp in Sources */,
+ 38D0FA6E0B4BF898003323BA /* llmessagebuilder.cpp in Sources */,
+ 3834D6050B73ABC1002B61C8 /* llmessagereader.cpp in Sources */,
+ 3834D6060B73ABC1002B61C8 /* lltemplatemessagereader.cpp in Sources */,
+ DA4B141B0B978815003F64DE /* llhttpsender.cpp in Sources */,
+ DA4B141C0B978815003F64DE /* llsdmessagebuilder.cpp in Sources */,
+ DA4B141D0B978815003F64DE /* llsdmessagereader.cpp in Sources */,
+ 9C18425B0B9F951500208356 /* llcaphttpsender.cpp in Sources */,
+ 9C659A870BAB0B6E00D2EB60 /* llmessageconfig.cpp in Sources */,
+ A3C20E4A0BB0BCDF007E872B /* llglslshader.cpp in Sources */,
+ A3C20E4C0BB0BD12007E872B /* llviewerjoystick.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -4450,7 +4564,6 @@
61922443074A9B5C005E1F34 /* indra.y in Sources */,
61922442074A9B5C005E1F34 /* indra.l in Sources */,
912541AF0691FF79008C66F7 /* llfasttimerview.cpp in Sources */,
- 619222E8074A9B5B005E1F34 /* bitpack.cpp in Sources */,
619222F0074A9B5B005E1F34 /* llcriticaldamp.cpp in Sources */,
619222F8074A9B5B005E1F34 /* llerror.cpp in Sources */,
619222FE074A9B5B005E1F34 /* llfasttimer.cpp in Sources */,
@@ -4614,9 +4727,21 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ D64593530B3B4D7D00FAB68F /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
+ 993576730B4489EE00D10C77 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = FD53B40509BDF9F600BFE3BC /* third party libs */;
+ targetProxy = 993576720B4489EE00D10C77 /* PBXContainerItemProxy */;
+ };
9950AF4A0B3762BE007E36E0 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = FD53B40509BDF9F600BFE3BC /* third party libs */;
@@ -4652,20 +4777,22 @@
target = 9932ED1E056C1F0900554101 /* crashreporter */;
targetProxy = 99FCDAEB093D1FC8003D3B63 /* PBXContainerItemProxy */;
};
+ D64593580B3B4D8500FAB68F /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 99CDED4905E70BAB0000F8AA /* llcommon */;
+ targetProxy = D64593570B3B4D8500FAB68F /* PBXContainerItemProxy */;
+ };
+ D64E29CE0B4B288600963559 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ };
FD53B40C09BDFD3E00BFE3BC /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
- target = FD53B40509BDF9F600BFE3BC /* third party libs */;
- targetProxy = FD53B40B09BDFD3E00BFE3BC /* PBXContainerItemProxy */;
};
FD53B41009BDFD5300BFE3BC /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
- target = FD53B40509BDF9F600BFE3BC /* third party libs */;
- targetProxy = FD53B40F09BDFD5300BFE3BC /* PBXContainerItemProxy */;
};
FD53B41209BDFD5A00BFE3BC /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
- target = FD53B40509BDF9F600BFE3BC /* third party libs */;
- targetProxy = FD53B41109BDFD5A00BFE3BC /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
@@ -4678,6 +4805,17 @@
name = InfoPlist.strings;
sourceTree = "";
};
+ 9930A8E30B8FB10A00197ECA /* language.txt */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 9930A8DD0B8FB0E200197ECA /* English */,
+ 9930A8E70B8FB14E00197ECA /* Japanese */,
+ 9930A8EA0B8FB1D500197ECA /* German */,
+ 9930A8ED0B8FB1E500197ECA /* Korean */,
+ );
+ name = language.txt;
+ sourceTree = "";
+ };
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
@@ -4736,12 +4874,7 @@
"$(BUILT_PRODUCTS_DIR)",
"$(LIBRARY_SEARCH_PATHS)",
"$(SRCROOT)/../../libraries/universal-darwin/lib_release",
- "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
- "$(LIBRARY_SEARCH_PATHS_QUOTED_2)",
);
- LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build/Universal\"";
- LIBRARY_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/build/Universal\"";
- OTHER_LDFLAGS = "";
PRODUCT_NAME = "Second Life";
SEPARATE_STRIP = YES;
SHARED_PRECOMPS_DIR = "$(BUILD_DIR)/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders";
@@ -4783,9 +4916,8 @@
"-Wno-reorder",
);
PREBINDING = NO;
- SDKROOT = /Developer/SDKs/MacOSX10.3.9.sdk;
- SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk;
- SDKROOT_ppc = /Developer/SDKs/MacOSX10.3.9.sdk;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ USER_HEADER_SEARCH_PATHS = "";
WARNING_CFLAGS = (
"-Wmost",
"-Wno-sign-compare",
@@ -4995,6 +5127,7 @@
PRODUCT_NAME = "Second Life";
SHARED_PRECOMPS_DIR = "$(BUILD_DIR)/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders";
WRAPPER_EXTENSION = app;
+ ZERO_LINK = NO;
};
name = Deployment;
};
@@ -5026,9 +5159,8 @@
"-Wno-reorder",
);
PREBINDING = NO;
- SDKROOT = /Developer/SDKs/MacOSX10.3.9.sdk;
- SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk;
- SDKROOT_ppc = /Developer/SDKs/MacOSX10.3.9.sdk;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ USER_HEADER_SEARCH_PATHS = "";
WARNING_CFLAGS = (
"-Wmost",
"-Wno-sign-compare",
@@ -5066,9 +5198,8 @@
"-Wno-reorder",
);
PREBINDING = NO;
- SDKROOT = /Developer/SDKs/MacOSX10.3.9.sdk;
- SDKROOT_i386 = /Developer/SDKs/MacOSX10.4u.sdk;
- SDKROOT_ppc = /Developer/SDKs/MacOSX10.3.9.sdk;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ USER_HEADER_SEARCH_PATHS = "";
WARNING_CFLAGS = (
"-Wmost",
"-Wno-sign-compare",
@@ -5077,6 +5208,73 @@
};
name = Deployment;
};
+ D645935A0B3B4DA300FAB68F /* Development */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ EXECUTABLE_PREFIX = lib;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_MODEL_TUNING = G5;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = "@executable_path/../Resources/";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_2)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build/Development\"";
+ LIBRARY_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/../../libraries/powerpc-darwin/lib_debug\"";
+ PREBINDING = NO;
+ PRODUCT_NAME = llkdu;
+ ZERO_LINK = YES;
+ };
+ name = Development;
+ };
+ D645935B0B3B4DA300FAB68F /* Deployment */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ EXECUTABLE_PREFIX = lib;
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_MODEL_TUNING = G5;
+ INSTALL_PATH = "@executable_path/../Resources/";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_2)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build/Deployment\"";
+ LIBRARY_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/../../libraries/powerpc-darwin/lib_release\"";
+ PREBINDING = NO;
+ PRODUCT_NAME = llkdu;
+ ZERO_LINK = NO;
+ };
+ name = Deployment;
+ };
+ D645935C0B3B4DA300FAB68F /* Universal */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ EXECUTABLE_PREFIX = lib;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_MODEL_TUNING = G5;
+ INSTALL_PATH = "@executable_path/../Resources/";
+ LIBRARY_SEARCH_PATHS = (
+ "$(BUILT_PRODUCTS_DIR)",
+ "$(inherited)",
+ "$(SRCROOT)/../../libraries/i386-darwin/lib_release",
+ "$(SRCROOT)/../../libraries/powerpc-darwin/lib_release",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/build/Deployment";
+ LIBRARY_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/../../libraries/powerpc-darwin/lib_release\"";
+ PREBINDING = NO;
+ PRODUCT_NAME = llkdu;
+ ZERO_LINK = YES;
+ };
+ name = Universal;
+ };
FD53B40709BDFA1500BFE3BC /* Development */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -5169,6 +5367,16 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Development;
};
+ D64593590B3B4DA300FAB68F /* Build configuration list for PBXNativeTarget "llkdu" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ D645935A0B3B4DA300FAB68F /* Development */,
+ D645935B0B3B4DA300FAB68F /* Deployment */,
+ D645935C0B3B4DA300FAB68F /* Universal */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Development;
+ };
FD53B40609BDFA1500BFE3BC /* Build configuration list for PBXAggregateTarget "third party libs" */ = {
isa = XCConfigurationList;
buildConfigurations = (
diff --git a/linden/indra/newview/macview_Prefix.h b/linden/indra/newview/macview_Prefix.h
index ddfcfec..1aea635 100644
--- a/linden/indra/newview/macview_Prefix.h
+++ b/linden/indra/newview/macview_Prefix.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/moviemaker.cpp b/linden/indra/newview/moviemaker.cpp
index 0f60bb1..6a7da3f 100644
--- a/linden/indra/newview/moviemaker.cpp
+++ b/linden/indra/newview/moviemaker.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/moviemaker.h b/linden/indra/newview/moviemaker.h
index 0f1c79f..056e683 100644
--- a/linden/indra/newview/moviemaker.h
+++ b/linden/indra/newview/moviemaker.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/newview.vcproj b/linden/indra/newview/newview.vcproj
index 99e182c..33c2d90 100644
--- a/linden/indra/newview/newview.vcproj
+++ b/linden/indra/newview/newview.vcproj
@@ -37,7 +37,7 @@
Name="VCCustomBuildTool"/>
+
+
-
-
+
+
+
+
+
+
-
-
+
+
-
-
+
+
+
+
+
+
-
-
+
+
@@ -1511,6 +1515,10 @@
>
+
+
@@ -1627,10 +1635,6 @@
>
-
-
@@ -2233,6 +2237,10 @@
>
+
+
@@ -2889,6 +2897,10 @@
>
+
+
@@ -3005,10 +3017,6 @@
>
-
-
diff --git a/linden/indra/newview/noise.cpp b/linden/indra/newview/noise.cpp
index 528e799..930c91e 100644
--- a/linden/indra/newview/noise.cpp
+++ b/linden/indra/newview/noise.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/noise.h b/linden/indra/newview/noise.h
index 63ad3ab..142718a 100644
--- a/linden/indra/newview/noise.h
+++ b/linden/indra/newview/noise.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/pipeline.cpp b/linden/indra/newview/pipeline.cpp
index 1a5b4f1..5d4618e 100644
--- a/linden/indra/newview/pipeline.cpp
+++ b/linden/indra/newview/pipeline.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -44,7 +45,7 @@
#include "material_codes.h"
#include "timing.h"
#include "v3color.h"
-#include "llui.h"
+#include "llui.h"
#include "llglheaders.h"
// newview includes
@@ -89,6 +90,9 @@
#include "llworld.h"
#include "viewer.h"
#include "llcubemap.h"
+#include "lldebugmessagebox.h"
+#include "llglslshader.h"
+#include "llviewerjoystick.h"
#ifdef _DEBUG
// Debug indices is disabled for now for debug performance - djs 4/24/02
@@ -128,77 +132,6 @@ S32 gTrivialAccepts = 0;
BOOL gRenderForSelect = FALSE;
-//glsl parameter tables
-const char* LLPipeline::sReservedAttribs[] =
-{
- "materialColor",
- "specularColor",
- "binormal"
-};
-
-U32 LLPipeline::sReservedAttribCount = LLPipeline::GLSL_END_RESERVED_ATTRIBS;
-
-const char* LLPipeline::sAvatarAttribs[] =
-{
- "weight",
- "clothing",
- "gWindDir",
- "gSinWaveParams",
- "gGravity"
-};
-
-U32 LLPipeline::sAvatarAttribCount = sizeof(LLPipeline::sAvatarAttribs)/sizeof(char*);
-
-const char* LLPipeline::sAvatarUniforms[] =
-{
- "matrixPalette"
-};
-
-U32 LLPipeline::sAvatarUniformCount = 1;
-
-const char* LLPipeline::sReservedUniforms[] =
-{
- "diffuseMap",
- "specularMap",
- "bumpMap",
- "environmentMap",
- "scatterMap"
-};
-
-U32 LLPipeline::sReservedUniformCount = LLPipeline::GLSL_END_RESERVED_UNIFORMS;
-
-const char* LLPipeline::sTerrainUniforms[] =
-{
- "detail0",
- "detail1",
- "alphaRamp"
-};
-
-U32 LLPipeline::sTerrainUniformCount = sizeof(LLPipeline::sTerrainUniforms)/sizeof(char*);
-
-const char* LLPipeline::sShinyUniforms[] =
-{
- "origin"
-};
-
-U32 LLPipeline::sShinyUniformCount = sizeof(LLPipeline::sShinyUniforms)/sizeof(char*);
-
-const char* LLPipeline::sWaterUniforms[] =
-{
- "screenTex",
- "eyeVec",
- "time",
- "d1",
- "d2",
- "lightDir",
- "specular",
- "lightExp",
- "fbScale",
- "refScale"
-};
-
-U32 LLPipeline::sWaterUniformCount = sizeof(LLPipeline::sWaterUniforms)/sizeof(char*);
-
//----------------------------------------
void stamp(F32 x, F32 y, F32 xs, F32 ys)
@@ -215,6 +148,14 @@ void stamp(F32 x, F32 y, F32 xs, F32 ys)
glEnd();
}
+U32 nhpo2(U32 v)
+{
+ U32 r = 1;
+ while (r < v) {
+ r *= 2;
+ }
+ return r;
+}
//----------------------------------------
@@ -229,10 +170,13 @@ BOOL LLPipeline::sRenderSoundBeacons = FALSE;
BOOL LLPipeline::sUseOcclusion = FALSE;
BOOL LLPipeline::sSkipUpdate = FALSE;
BOOL LLPipeline::sDynamicReflections = FALSE;
+BOOL LLPipeline::sRenderGlow = FALSE;
LLPipeline::LLPipeline() :
+ mScreenTex(0),
mCubeBuffer(NULL),
- mCubeList(0),
+ mGlowMap(0),
+ mGlowBuffer(0),
mVertexShadersEnabled(FALSE),
mVertexShadersLoaded(0),
mLastRebuildPool(NULL),
@@ -244,16 +188,21 @@ LLPipeline::LLPipeline() :
mWaterPool(NULL),
mGroundPool(NULL),
mSimplePool(NULL),
+ mGlowPool(NULL),
mBumpPool(NULL),
mLightMask(0),
mLightMovingMask(0)
{
-
+ mFramebuffer[0] = mFramebuffer[1] = 0;
+ mCubeFrameBuffer = 0;
+ mCubeDepth = 0;
}
void LLPipeline::init()
{
LLMemType mt(LLMemType::MTYPE_PIPELINE);
+
+ mInitialized = TRUE;
stop_glerror();
@@ -275,6 +224,7 @@ void LLPipeline::init()
getPool(LLDrawPool::POOL_ALPHA_POST_WATER);
getPool(LLDrawPool::POOL_SIMPLE);
getPool(LLDrawPool::POOL_BUMP);
+ getPool(LLDrawPool::POOL_GLOW);
mTrianglesDrawnStat.reset();
resetFrameStats();
@@ -293,14 +243,7 @@ void LLPipeline::init()
// Enable features
stop_glerror();
- setShaders();
-}
-
-void LLPipeline::LLScatterShader::init(GLhandleARB shader, int map_stage)
-{
- glUseProgramObjectARB(shader);
- glUniform1iARB(glGetUniformLocationARB(shader, "scatterMap"), map_stage);
- glUseProgramObjectARB(0);
+ LLShaderMgr::setShaders();
}
LLPipeline::~LLPipeline()
@@ -358,20 +301,12 @@ void LLPipeline::cleanup()
mGroundPool = NULL;
delete mSimplePool;
mSimplePool = NULL;
+ delete mGlowPool;
+ mGlowPool = NULL;
delete mBumpPool;
mBumpPool = NULL;
- if (mCubeBuffer)
- {
- delete mCubeBuffer;
- mCubeBuffer = NULL;
- }
-
- if (mCubeList)
- {
- glDeleteLists(mCubeList, 1);
- mCubeList = 0;
- }
+ releaseGLBuffers();
mBloomImagep = NULL;
mBloomImage2p = NULL;
@@ -412,376 +347,68 @@ void LLPipeline::destroyGL()
clearRenderMap();
resetVertexBuffers();
- if (mCubeBuffer)
- {
- delete mCubeBuffer;
- mCubeBuffer = NULL;
- }
-
- if (mCubeList)
- {
- glDeleteLists(mCubeList, 1);
- mCubeList = 0;
- }
-}
-
-void LLPipeline::restoreGL()
-{
- resetVertexBuffers();
-
- if (mVertexShadersEnabled)
- {
- setShaders();
- }
-
- for (U32 i = 0; i < mObjectPartition.size()-1; i++)
- {
- if (mObjectPartition[i])
- {
- mObjectPartition[i]->restoreGL();
- }
- }
-}
-
-//============================================================================
-// Load Shader
-
-static LLString get_object_log(GLhandleARB ret)
-{
- LLString res;
-
- //get log length
- GLint length;
- glGetObjectParameterivARB(ret, GL_OBJECT_INFO_LOG_LENGTH_ARB, &length);
- if (length > 0)
- {
- //the log could be any size, so allocate appropriately
- GLcharARB* log = new GLcharARB[length];
- glGetInfoLogARB(ret, length, &length, log);
- res = LLString(log);
- delete[] log;
- }
- return res;
-}
-
-void LLPipeline::dumpObjectLog(GLhandleARB ret, BOOL warns)
-{
- LLString log = get_object_log(ret);
- if (warns)
- {
- llwarns << log << llendl;
- }
- else
- {
- llinfos << log << llendl;
- }
+ releaseGLBuffers();
}
-GLhandleARB LLPipeline::loadShader(const LLString& filename, S32 cls, GLenum type)
+void LLPipeline::releaseGLBuffers()
{
- GLenum error;
- error = glGetError();
- if (error != GL_NO_ERROR)
- {
- llwarns << "GL ERROR entering loadShader(): " << error << llendl;
- }
-
- llinfos << "Loading shader file: " << filename << llendl;
-
- if (filename.empty())
- {
- return 0;
- }
-
-
- //read in from file
- FILE* file = NULL;
-
- S32 try_gpu_class = mVertexShaderLevel[cls];
- S32 gpu_class;
-
- //find the most relevant file
- for (gpu_class = try_gpu_class; gpu_class > 0; gpu_class--)
- { //search from the current gpu class down to class 1 to find the most relevant shader
- std::stringstream fname;
- fname << gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "shaders/class");
- fname << gpu_class << "/" << filename;
-
-// llinfos << "Looking in " << fname.str().c_str() << llendl;
- file = fopen(fname.str().c_str(), "r"); /* Flawfinder: ignore */
- if (file)
- {
- break; // done
- }
- }
-
- if (file == NULL)
+ if (mGlowMap)
{
- llinfos << "GLSL Shader file not found: " << filename << llendl;
- return 0;
+ glDeleteTextures(1, &mGlowMap);
+ mGlowMap = 0;
}
- //we can't have any lines longer than 1024 characters
- //or any shaders longer than 1024 lines... deal - DaveP
- GLcharARB buff[1024];
- GLcharARB* text[1024];
- GLuint count = 0;
-
- //copy file into memory
- while(fgets(buff, 1024, file) != NULL)
- {
- text[count++] = strdup(buff);
- }
- fclose(file);
-
- //create shader object
- GLhandleARB ret = glCreateShaderObjectARB(type);
- error = glGetError();
- if (error != GL_NO_ERROR)
- {
- llwarns << "GL ERROR in glCreateShaderObjectARB: " << error << llendl;
- }
- else
- {
- //load source
- glShaderSourceARB(ret, count, (const GLcharARB**) text, NULL);
- error = glGetError();
- if (error != GL_NO_ERROR)
- {
- llwarns << "GL ERROR in glShaderSourceARB: " << error << llendl;
- }
- else
- {
- //compile source
- glCompileShaderARB(ret);
- error = glGetError();
- if (error != GL_NO_ERROR)
- {
- llwarns << "GL ERROR in glCompileShaderARB: " << error << llendl;
- }
- }
- }
- //free memory
- for (GLuint i = 0; i < count; i++)
- {
- free(text[i]);
- }
- if (error == GL_NO_ERROR)
- {
- //check for errors
- GLint success = GL_TRUE;
- glGetObjectParameterivARB(ret, GL_OBJECT_COMPILE_STATUS_ARB, &success);
- error = glGetError();
- if (error != GL_NO_ERROR || success == GL_FALSE)
- {
- //an error occured, print log
- llwarns << "GLSL Compilation Error: (" << error << ") in " << filename << llendl;
- dumpObjectLog(ret);
- ret = 0;
- }
- }
- else
+ if (mGlowBuffer)
{
- ret = 0;
+ glDeleteTextures(1, &mGlowBuffer);
+ mGlowBuffer = 0;
}
- stop_glerror();
- //successfully loaded, save results
-#if 1 // 1.9.1
- if (ret)
- {
- mVertexShaderLevel[cls] = try_gpu_class;
- }
- else
- {
- if (mVertexShaderLevel[cls] > 1)
- {
- mVertexShaderLevel[cls] = mVertexShaderLevel[cls] - 1;
- ret = loadShader(filename,cls,type);
- if (ret && mMaxVertexShaderLevel[cls] > mVertexShaderLevel[cls])
- {
- mMaxVertexShaderLevel[cls] = mVertexShaderLevel[cls];
- }
- }
- }
-#else
- if (ret)
- {
- S32 max = -1;
- /*if (try_gpu_class == mMaxVertexShaderLevel[cls])
- {
- max = gpu_class;
- }*/
- saveVertexShaderLevel(cls,try_gpu_class,max);
- }
- else
+ if (mScreenTex)
{
- if (mVertexShaderLevel[cls] > 1)
- {
- mVertexShaderLevel[cls] = mVertexShaderLevel[cls] - 1;
- ret = loadShader(f,cls,type);
- if (ret && mMaxVertexShaderLevel[cls] > mVertexShaderLevel[cls])
- {
- saveVertexShaderLevel(cls, mVertexShaderLevel[cls], mVertexShaderLevel[cls]);
- }
- }
+ glDeleteTextures(1, &mScreenTex);
+ mScreenTex = 0;
}
-#endif
- return ret;
-}
-BOOL LLPipeline::linkProgramObject(GLhandleARB obj, BOOL suppress_errors)
-{
- //check for errors
- glLinkProgramARB(obj);
- GLint success = GL_TRUE;
- glGetObjectParameterivARB(obj, GL_OBJECT_LINK_STATUS_ARB, &success);
- if (!suppress_errors && success == GL_FALSE)
+ if (mCubeBuffer)
{
- //an error occured, print log
- llwarns << "GLSL Linker Error:" << llendl;
+ delete mCubeBuffer;
+ mCubeBuffer = NULL;
}
- LLString log = get_object_log(obj);
- LLString::toLower(log);
- if (log.find("software") != LLString::npos)
+ if (mCubeFrameBuffer)
{
- llwarns << "GLSL Linker: Running in Software:" << llendl;
- success = GL_FALSE;
- suppress_errors = FALSE;
+ glDeleteFramebuffersEXT(1, &mCubeFrameBuffer);
+ glDeleteRenderbuffersEXT(1, &mCubeDepth);
+ mCubeDepth = mCubeFrameBuffer = 0;
}
- if (!suppress_errors)
- {
- dumpObjectLog(obj, !success);
- }
-
- return success;
-}
-BOOL LLPipeline::validateProgramObject(GLhandleARB obj)
-{
- //check program validity against current GL
- glValidateProgramARB(obj);
- GLint success = GL_TRUE;
- glGetObjectParameterivARB(obj, GL_OBJECT_VALIDATE_STATUS_ARB, &success);
- if (success == GL_FALSE)
- {
- llwarns << "GLSL program not valid: " << llendl;
- dumpObjectLog(obj);
- }
- else
+ if (mFramebuffer[0])
{
- dumpObjectLog(obj, FALSE);
+ glDeleteFramebuffersEXT(2, mFramebuffer);
+ mFramebuffer[0] = mFramebuffer[1] = 0;
}
-
- return success;
}
-//============================================================================
-// Shader Management
-
-void LLPipeline::setShaders()
+void LLPipeline::restoreGL()
{
- sDynamicReflections = gSavedSettings.getBOOL("RenderDynamicReflections");
-
- //hack to reset buffers that change behavior with shaders
resetVertexBuffers();
- if (gViewerWindow)
- {
- gViewerWindow->setCursor(UI_CURSOR_WAIT);
- }
-
- // Lighting
- setLightingDetail(-1);
-
- // Shaders
- for (S32 i=0; irestoreGL();
}
}
- if (gViewerWindow)
- {
- gViewerWindow->setCursor(UI_CURSOR_ARROW);
- }
}
+
BOOL LLPipeline::canUseVertexShaders()
{
if (!gGLManager.mHasVertexShader ||
@@ -799,468 +426,10 @@ BOOL LLPipeline::canUseVertexShaders()
void LLPipeline::unloadShaders()
{
- mObjectSimpleProgram.unload();
- mObjectShinyProgram.unload();
- mObjectBumpProgram.unload();
- mObjectAlphaProgram.unload();
- mWaterProgram.unload();
- mTerrainProgram.unload();
- mGroundProgram.unload();
- mAvatarProgram.unload();
- mAvatarEyeballProgram.unload();
- mAvatarPickProgram.unload();
- mHighlightProgram.unload();
-
- mVertexShaderLevel[SHADER_LIGHTING] = 0;
- mVertexShaderLevel[SHADER_OBJECT] = 0;
- mVertexShaderLevel[SHADER_AVATAR] = 0;
- mVertexShaderLevel[SHADER_ENVIRONMENT] = 0;
- mVertexShaderLevel[SHADER_INTERFACE] = 0;
-
- mLightVertex = mLightFragment = mScatterVertex = mScatterFragment = 0;
+ LLShaderMgr::unloadShaders();
mVertexShadersLoaded = 0;
}
-#if 0 // 1.9.2
-// Any time shader options change
-BOOL LLPipeline::loadShaders()
-{
- unloadShaders();
-
- if (!canUseVertexShaders())
- {
- return FALSE;
- }
-
- S32 light_class = mMaxVertexShaderLevel[SHADER_LIGHTING];
- if (getLightingDetail() == 0)
- {
- light_class = 1; // Use minimum lighting shader
- }
- else if (getLightingDetail() == 1)
- {
- light_class = 2; // Use medium lighting shader
- }
- mVertexShaderLevel[SHADER_LIGHTING] = light_class;
- //mVertexShaderLevel[SHADER_OBJECT] = llmin(mMaxVertexShaderLevel[SHADER_OBJECT], gSavedSettings.getS32("VertexShaderLevelObject"));
- mVertexShaderLevel[SHADER_OBJECT] = 0;
- mVertexShaderLevel[SHADER_AVATAR] = llmin(mMaxVertexShaderLevel[SHADER_AVATAR], gSavedSettings.getS32("VertexShaderLevelAvatar"));
- mVertexShaderLevel[SHADER_ENVIRONMENT] = llmin(mMaxVertexShaderLevel[SHADER_ENVIRONMENT], gSavedSettings.getS32("VertexShaderLevelEnvironment"));
- mVertexShaderLevel[SHADER_INTERFACE] = mMaxVertexShaderLevel[SHADER_INTERFACE];
-
- BOOL loaded = loadShadersLighting();
- if (loaded)
- {
- loadShadersEnvironment(); // Must load this before object/avatar for scatter
- loadShadersObject();
- loadShadersAvatar();
- loadShadersInterface();
- mVertexShadersLoaded = 1;
- }
- else
- {
- unloadShaders();
- mVertexShadersEnabled = FALSE;
- mVertexShadersLoaded = 0; //-1; // -1 = failed
- setLightingDetail(-1);
- }
-
- return loaded;
-}
-#endif
-
-BOOL LLPipeline::loadShadersLighting()
-{
- // Load light dependency shaders first
- // All of these have to load for any shaders to function
-
- std::string lightvertex = "lighting/lightV.glsl";
- //get default light function implementation
- mLightVertex = loadShader(lightvertex, SHADER_LIGHTING, GL_VERTEX_SHADER_ARB);
- if( !mLightVertex )
- {
- llwarns << "Failed to load " << lightvertex << llendl;
- return FALSE;
- }
-
- std::string lightfragment = "lighting/lightF.glsl";
- mLightFragment = loadShader(lightfragment, SHADER_LIGHTING, GL_FRAGMENT_SHADER_ARB);
- if ( !mLightFragment )
- {
- llwarns << "Failed to load " << lightfragment << llendl;
- return FALSE;
- }
-
- // NOTE: Scatter shaders use the ENVIRONMENT detail level
-
- std::string scattervertex = "environment/scatterV.glsl";
- mScatterVertex = loadShader(scattervertex, SHADER_ENVIRONMENT, GL_VERTEX_SHADER_ARB);
- if ( !mScatterVertex )
- {
- llwarns << "Failed to load " << scattervertex << llendl;
- return FALSE;
- }
-
- std::string scatterfragment = "environment/scatterF.glsl";
- mScatterFragment = loadShader(scatterfragment, SHADER_ENVIRONMENT, GL_FRAGMENT_SHADER_ARB);
- if ( !mScatterFragment )
- {
- llwarns << "Failed to load " << scatterfragment << llendl;
- return FALSE;
- }
-
- return TRUE;
-}
-
-BOOL LLPipeline::loadShadersEnvironment()
-{
- GLhandleARB baseObjects[] =
- {
- mLightFragment,
- mLightVertex,
- mScatterFragment,
- mScatterVertex
- };
- S32 baseCount = 4;
-
- BOOL success = TRUE;
-
- if (mVertexShaderLevel[SHADER_ENVIRONMENT] == 0)
- {
- mWaterProgram.unload();
- mGroundProgram.unload();
- mTerrainProgram.unload();
- return FALSE;
- }
-
- if (success)
- {
- //load water vertex shader
- std::string waterfragment = "environment/waterF.glsl";
- std::string watervertex = "environment/waterV.glsl";
- mWaterProgram.mProgramObject = glCreateProgramObjectARB();
- mWaterProgram.attachObjects(baseObjects, baseCount);
- mWaterProgram.attachObject(loadShader(watervertex, SHADER_ENVIRONMENT, GL_VERTEX_SHADER_ARB));
- mWaterProgram.attachObject(loadShader(waterfragment, SHADER_ENVIRONMENT, GL_FRAGMENT_SHADER_ARB));
-
- success = mWaterProgram.mapAttributes();
- if (success)
- {
- success = mWaterProgram.mapUniforms(sWaterUniforms, sWaterUniformCount);
- }
- if (!success)
- {
- llwarns << "Failed to load " << watervertex << llendl;
- }
- }
- if (success)
- {
- //load ground vertex shader
- std::string groundvertex = "environment/groundV.glsl";
- std::string groundfragment = "environment/groundF.glsl";
- mGroundProgram.mProgramObject = glCreateProgramObjectARB();
- mGroundProgram.attachObjects(baseObjects, baseCount);
- mGroundProgram.attachObject(loadShader(groundvertex, SHADER_ENVIRONMENT, GL_VERTEX_SHADER_ARB));
- mGroundProgram.attachObject(loadShader(groundfragment, SHADER_ENVIRONMENT, GL_FRAGMENT_SHADER_ARB));
-
- success = mGroundProgram.mapAttributes();
- if (success)
- {
- success = mGroundProgram.mapUniforms();
- }
- if (!success)
- {
- llwarns << "Failed to load " << groundvertex << llendl;
- }
- }
-
- if (success)
- {
- //load terrain vertex shader
- std::string terrainvertex = "environment/terrainV.glsl";
- std::string terrainfragment = "environment/terrainF.glsl";
- mTerrainProgram.mProgramObject = glCreateProgramObjectARB();
- mTerrainProgram.attachObjects(baseObjects, baseCount);
- mTerrainProgram.attachObject(loadShader(terrainvertex, SHADER_ENVIRONMENT, GL_VERTEX_SHADER_ARB));
- mTerrainProgram.attachObject(loadShader(terrainfragment, SHADER_ENVIRONMENT, GL_FRAGMENT_SHADER_ARB));
- success = mTerrainProgram.mapAttributes();
- if (success)
- {
- success = mTerrainProgram.mapUniforms(sTerrainUniforms, sTerrainUniformCount);
- }
- if (!success)
- {
- llwarns << "Failed to load " << terrainvertex << llendl;
- }
- }
-
- if( !success )
- {
- mVertexShaderLevel[SHADER_ENVIRONMENT] = 0;
- mMaxVertexShaderLevel[SHADER_ENVIRONMENT] = 0;
- return FALSE;
- }
-
- if (gWorldPointer)
- {
- gWorldPointer->updateWaterObjects();
- }
-
- return TRUE;
-}
-
-BOOL LLPipeline::loadShadersObject()
-{
- GLhandleARB baseObjects[] =
- {
- mLightFragment,
- mLightVertex,
- mScatterFragment,
- mScatterVertex
- };
- S32 baseCount = 4;
-
- BOOL success = TRUE;
-
- if (mVertexShaderLevel[SHADER_OBJECT] == 0)
- {
- mObjectShinyProgram.unload();
- mObjectSimpleProgram.unload();
- mObjectBumpProgram.unload();
- mObjectAlphaProgram.unload();
- return FALSE;
- }
-
-#if 0
- if (success)
- {
- //load object (volume/tree) vertex shader
- std::string simplevertex = "objects/simpleV.glsl";
- std::string simplefragment = "objects/simpleF.glsl";
- mObjectSimpleProgram.mProgramObject = glCreateProgramObjectARB();
- mObjectSimpleProgram.attachObjects(baseObjects, baseCount);
- mObjectSimpleProgram.attachObject(loadShader(simplevertex, SHADER_OBJECT, GL_VERTEX_SHADER_ARB));
- mObjectSimpleProgram.attachObject(loadShader(simplefragment, SHADER_OBJECT, GL_FRAGMENT_SHADER_ARB));
- success = mObjectSimpleProgram.mapAttributes();
- if (success)
- {
- success = mObjectSimpleProgram.mapUniforms();
- }
- if( !success )
- {
- llwarns << "Failed to load " << simplevertex << llendl;
- }
- }
-
- if (success)
- {
- //load object bumpy vertex shader
- std::string bumpshinyvertex = "objects/bumpshinyV.glsl";
- std::string bumpshinyfragment = "objects/bumpshinyF.glsl";
- mObjectBumpProgram.mProgramObject = glCreateProgramObjectARB();
- mObjectBumpProgram.attachObjects(baseObjects, baseCount);
- mObjectBumpProgram.attachObject(loadShader(bumpshinyvertex, SHADER_OBJECT, GL_VERTEX_SHADER_ARB));
- mObjectBumpProgram.attachObject(loadShader(bumpshinyfragment, SHADER_OBJECT, GL_FRAGMENT_SHADER_ARB));
- success = mObjectBumpProgram.mapAttributes();
- if (success)
- {
- success = mObjectBumpProgram.mapUniforms();
- }
- if( !success )
- {
- llwarns << "Failed to load " << bumpshinyvertex << llendl;
- }
- }
-
- if (success)
- {
- //load object alpha vertex shader
- std::string alphavertex = "objects/alphaV.glsl";
- std::string alphafragment = "objects/alphaF.glsl";
- mObjectAlphaProgram.mProgramObject = glCreateProgramObjectARB();
- mObjectAlphaProgram.attachObjects(baseObjects, baseCount);
- mObjectAlphaProgram.attachObject(loadShader(alphavertex, SHADER_OBJECT, GL_VERTEX_SHADER_ARB));
- mObjectAlphaProgram.attachObject(loadShader(alphafragment, SHADER_OBJECT, GL_FRAGMENT_SHADER_ARB));
-
- success = mObjectAlphaProgram.mapAttributes();
- if (success)
- {
- success = mObjectAlphaProgram.mapUniforms();
- }
- if( !success )
- {
- llwarns << "Failed to load " << alphavertex << llendl;
- }
- }
-#endif
-
- if (success)
- {
- //load shiny vertex shader
- std::string shinyvertex = "objects/shinyV.glsl";
- std::string shinyfragment = "objects/shinyF.glsl";
- mObjectShinyProgram.mProgramObject = glCreateProgramObjectARB();
- mObjectShinyProgram.attachObjects(baseObjects, baseCount);
- mObjectShinyProgram.attachObject(loadShader(shinyvertex, SHADER_OBJECT, GL_VERTEX_SHADER_ARB));
- mObjectShinyProgram.attachObject(loadShader(shinyfragment, SHADER_OBJECT, GL_FRAGMENT_SHADER_ARB));
-
- success = mObjectShinyProgram.mapAttributes();
- if (success)
- {
- success = mObjectShinyProgram.mapUniforms(LLPipeline::sShinyUniforms, LLPipeline::sShinyUniformCount);
- }
- if( !success )
- {
- llwarns << "Failed to load " << shinyvertex << llendl;
- }
- }
-
- if( !success )
- {
- mVertexShaderLevel[SHADER_OBJECT] = 0;
- mMaxVertexShaderLevel[SHADER_OBJECT] = 0;
- return FALSE;
- }
-
- return TRUE;
-}
-
-BOOL LLPipeline::loadShadersAvatar()
-{
- GLhandleARB baseObjects[] =
- {
- mLightFragment,
- mLightVertex,
- mScatterFragment,
- mScatterVertex
- };
- S32 baseCount = 4;
-
- BOOL success = TRUE;
-
- if (mVertexShaderLevel[SHADER_AVATAR] == 0)
- {
- mAvatarProgram.unload();
- mAvatarEyeballProgram.unload();
- mAvatarPickProgram.unload();
- return FALSE;
- }
-
- if (success)
- {
- //load specular (eyeball) vertex program
- std::string eyeballvertex = "avatar/eyeballV.glsl";
- std::string eyeballfragment = "avatar/eyeballF.glsl";
- mAvatarEyeballProgram.mProgramObject = glCreateProgramObjectARB();
- mAvatarEyeballProgram.attachObjects(baseObjects, baseCount);
- mAvatarEyeballProgram.attachObject(loadShader(eyeballvertex, SHADER_AVATAR, GL_VERTEX_SHADER_ARB));
- mAvatarEyeballProgram.attachObject(loadShader(eyeballfragment, SHADER_AVATAR, GL_FRAGMENT_SHADER_ARB));
- success = mAvatarEyeballProgram.mapAttributes();
- if (success)
- {
- success = mAvatarEyeballProgram.mapUniforms();
- }
- if( !success )
- {
- llwarns << "Failed to load " << eyeballvertex << llendl;
- }
- }
-
- if (success)
- {
- mAvatarSkinVertex = loadShader("avatar/avatarSkinV.glsl", SHADER_AVATAR, GL_VERTEX_SHADER_ARB);
- //load avatar vertex shader
- std::string avatarvertex = "avatar/avatarV.glsl";
- std::string avatarfragment = "avatar/avatarF.glsl";
-
- mAvatarProgram.mProgramObject = glCreateProgramObjectARB();
- mAvatarProgram.attachObjects(baseObjects, baseCount);
- mAvatarProgram.attachObject(mAvatarSkinVertex);
- mAvatarProgram.attachObject(loadShader(avatarvertex, SHADER_AVATAR, GL_VERTEX_SHADER_ARB));
- mAvatarProgram.attachObject(loadShader(avatarfragment, SHADER_AVATAR, GL_FRAGMENT_SHADER_ARB));
-
- success = mAvatarProgram.mapAttributes(sAvatarAttribs, sAvatarAttribCount);
- if (success)
- {
- success = mAvatarProgram.mapUniforms(sAvatarUniforms, sAvatarUniformCount);
- }
- if( !success )
- {
- llwarns << "Failed to load " << avatarvertex << llendl;
- }
- }
-
- if (success)
- {
- //load avatar picking shader
- std::string pickvertex = "avatar/pickAvatarV.glsl";
- std::string pickfragment = "avatar/pickAvatarF.glsl";
- mAvatarPickProgram.mProgramObject = glCreateProgramObjectARB();
- mAvatarPickProgram.attachObject(loadShader(pickvertex, SHADER_AVATAR, GL_VERTEX_SHADER_ARB));
- mAvatarPickProgram.attachObject(loadShader(pickfragment, SHADER_AVATAR, GL_FRAGMENT_SHADER_ARB));
- mAvatarPickProgram.attachObject(mAvatarSkinVertex);
-
- success = mAvatarPickProgram.mapAttributes(sAvatarAttribs, sAvatarAttribCount);
- if (success)
- {
- success = mAvatarPickProgram.mapUniforms(sAvatarUniforms, sAvatarUniformCount);
- }
- if( !success )
- {
- llwarns << "Failed to load " << pickvertex << llendl;
- }
- }
-
- if( !success )
- {
- mVertexShaderLevel[SHADER_AVATAR] = 0;
- mMaxVertexShaderLevel[SHADER_AVATAR] = 0;
- return FALSE;
- }
-
- return TRUE;
-}
-
-BOOL LLPipeline::loadShadersInterface()
-{
- BOOL success = TRUE;
-
- if (mVertexShaderLevel[SHADER_INTERFACE] == 0)
- {
- mHighlightProgram.unload();
- return FALSE;
- }
-
- if (success)
- {
- //load highlighting shader
- std::string highlightvertex = "interface/highlightV.glsl";
- std::string highlightfragment = "interface/highlightF.glsl";
- mHighlightProgram.mProgramObject = glCreateProgramObjectARB();
- mHighlightProgram.attachObject(loadShader(highlightvertex, SHADER_INTERFACE, GL_VERTEX_SHADER_ARB));
- mHighlightProgram.attachObject(loadShader(highlightfragment, SHADER_INTERFACE, GL_FRAGMENT_SHADER_ARB));
-
- success = mHighlightProgram.mapAttributes();
- if (success)
- {
- success = mHighlightProgram.mapUniforms();
- }
- if( !success )
- {
- llwarns << "Failed to load " << highlightvertex << llendl;
- }
- }
-
- if( !success )
- {
- mVertexShaderLevel[SHADER_INTERFACE] = 0;
- mMaxVertexShaderLevel[SHADER_INTERFACE] = 0;
- return FALSE;
- }
-
- return TRUE;
-}
-
//============================================================================
void LLPipeline::enableShadows(const BOOL enable_shadows)
@@ -1298,7 +467,7 @@ S32 LLPipeline::setLightingDetail(S32 level)
if (mVertexShadersLoaded == 1)
{
- gPipeline.setShaders();
+ LLShaderMgr::setShaders();
}
}
return mLightingDetail;
@@ -1372,6 +541,10 @@ LLDrawPool *LLPipeline::findPool(const U32 type, LLViewerImage *tex0)
poolp = mSimplePool;
break;
+ case LLDrawPool::POOL_GLOW:
+ poolp = mGlowPool;
+ break;
+
case LLDrawPool::POOL_TREE:
poolp = get_if_there(mTreePools, (uintptr_t)tex0, (LLDrawPool*)0 );
break;
@@ -2315,7 +1488,7 @@ void renderScriptedBeacons(LLDrawable* drawablep)
&& !vobj->getParent()
&& vobj->flagScripted())
{
- gObjectList.addDebugBeacon(vobj->getPositionAgent(), "", LLColor4(1.f, 0.f, 0.f, 0.5f), LLColor4(1.f, 1.f, 1.f, 0.5f));
+ gObjectList.addDebugBeacon(vobj->getPositionAgent(), "", LLColor4(1.f, 0.f, 0.f, 0.5f), LLColor4(1.f, 1.f, 1.f, 0.5f), gSavedSettings.getS32("DebugBeaconLineWidth"));
}
}
@@ -2327,7 +1500,7 @@ void renderPhysicalBeacons(LLDrawable* drawablep)
&& !vobj->getParent()
&& vobj->usePhysics())
{
- gObjectList.addDebugBeacon(vobj->getPositionAgent(), "", LLColor4(0.f, 1.f, 0.f, 0.5f), LLColor4(1.f, 1.f, 1.f, 0.5f));
+ gObjectList.addDebugBeacon(vobj->getPositionAgent(), "", LLColor4(0.f, 1.f, 0.f, 0.5f), LLColor4(1.f, 1.f, 1.f, 0.5f), gSavedSettings.getS32("DebugBeaconLineWidth"));
}
}
@@ -2339,7 +1512,7 @@ void renderParticleBeacons(LLDrawable* drawablep)
&& vobj->isParticleSource())
{
LLColor4 light_blue(0.5f, 0.5f, 1.f, 0.5f);
- gObjectList.addDebugBeacon(vobj->getPositionAgent(), "", light_blue, LLColor4(1.f, 1.f, 1.f, 0.5f));
+ gObjectList.addDebugBeacon(vobj->getPositionAgent(), "", light_blue, LLColor4(1.f, 1.f, 1.f, 0.5f), gSavedSettings.getS32("DebugBeaconLineWidth"));
}
}
@@ -2560,7 +1733,7 @@ void LLPipeline::postSort(LLCamera& camera)
LLVector3d pos_global = sourcep->getPositionGlobal();
LLVector3 pos = gAgent.getPosAgentFromGlobal(pos_global);
//pos += LLVector3(0.f, 0.f, 0.2f);
- gObjectList.addDebugBeacon(pos, "", LLColor4(1.f, 1.f, 0.f, 0.5f), LLColor4(1.f, 1.f, 1.f, 0.5f));
+ gObjectList.addDebugBeacon(pos, "", LLColor4(1.f, 1.f, 0.f, 0.5f), LLColor4(1.f, 1.f, 1.f, 0.5f), gSavedSettings.getS32("DebugBeaconLineWidth"));
}
}
@@ -2641,10 +1814,10 @@ void LLPipeline::renderHighlights()
LLGLEnable color_mat(GL_COLOR_MATERIAL);
disableLights();
- if ((mVertexShaderLevel[SHADER_INTERFACE] > 0))
+ if ((LLShaderMgr::sVertexShaderLevel[LLShaderMgr::SHADER_INTERFACE] > 0))
{
- mHighlightProgram.bind();
- gPipeline.mHighlightProgram.vertexAttrib4f(LLPipeline::GLSL_MATERIAL_COLOR,1,0,0,0.5f);
+ gHighlightProgram.bind();
+ gHighlightProgram.vertexAttrib4f(LLShaderMgr::MATERIAL_COLOR,1,0,0,0.5f);
}
if (hasRenderDebugFeatureMask(RENDER_DEBUG_FEATURE_SELECTED))
@@ -2683,9 +1856,9 @@ void LLPipeline::renderHighlights()
// have touch-handlers.
mHighlightFaces.clear();
- if (mVertexShaderLevel[SHADER_INTERFACE] > 0)
+ if (LLShaderMgr::sVertexShaderLevel[LLShaderMgr::SHADER_INTERFACE] > 0)
{
- mHighlightProgram.unbind();
+ gHighlightProgram.unbind();
}
}
@@ -2765,11 +1938,13 @@ void LLPipeline::renderGeom(LLCamera& camera)
//
//
stop_glerror();
- BOOL did_hud_elements = FALSE;
+ BOOL did_hud_elements = LLDrawPoolWater::sSkipScreenCopy;
BOOL occlude = sUseOcclusion;
U32 cur_type = 0;
+ glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
+
if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_PICKING))
{
gObjectList.renderObjectsForSelect(camera);
@@ -2777,8 +1952,7 @@ void LLPipeline::renderGeom(LLCamera& camera)
else
{
LLFastTimer t(LLFastTimer::FTM_POOLS);
- calcNearbyLights();
-
+ calcNearbyLights(camera);
pool_set_t::iterator iter1 = mPools.begin();
while ( iter1 != mPools.end() )
{
@@ -2824,6 +1998,7 @@ void LLPipeline::renderGeom(LLCamera& camera)
}
poolp->endRenderPass(i);
#ifndef LL_RELEASE_FOR_DOWNLOAD
+#if LL_DEBUG_GL
GLint depth;
glGetIntegerv(GL_MODELVIEW_STACK_DEPTH, &depth);
if (depth > 3)
@@ -2834,6 +2009,7 @@ void LLPipeline::renderGeom(LLCamera& camera)
LLGLState::checkTextureChannels();
LLGLState::checkClientArrays();
#endif
+#endif
}
}
else
@@ -2854,9 +2030,9 @@ void LLPipeline::renderGeom(LLCamera& camera)
}
#ifndef LL_RELEASE_FOR_DOWNLOAD
- LLGLState::checkStates();
- LLGLState::checkTextureChannels();
- LLGLState::checkClientArrays();
+ LLGLState::checkStates();
+ LLGLState::checkTextureChannels();
+ LLGLState::checkClientArrays();
#endif
if (occlude)
@@ -2886,6 +2062,40 @@ void LLPipeline::renderGeom(LLCamera& camera)
// Contains a list of the faces of objects that are physical or
// have touch-handlers.
mHighlightFaces.clear();
+
+ glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+
+ if (!hasRenderType(LLPipeline::RENDER_TYPE_HUD) &&
+ !LLDrawPoolWater::sSkipScreenCopy &&
+ sRenderGlow &&
+ gGLManager.mHasFramebufferObject)
+ {
+ const U32 glow_res = nhpo2(gSavedSettings.getS32("RenderGlowResolution"));
+ if (mGlowMap == 0)
+ {
+ glGenTextures(1, &mGlowMap);
+ glBindTexture(GL_TEXTURE_2D, mGlowMap);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, glow_res, glow_res, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+ }
+
+ if (mGlowBuffer == 0)
+ {
+ glGenTextures(1, &mGlowBuffer);
+ glBindTexture(GL_TEXTURE_2D, mGlowBuffer);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, glow_res, glow_res, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+ }
+
+ bindScreenToTexture();
+ renderBloom(mScreenTex, mGlowMap, mGlowBuffer, glow_res, LLVector2(0,0), mScreenScale);
+ }
}
void LLPipeline::processOcclusion(LLCamera& camera)
@@ -3241,6 +2451,18 @@ void LLPipeline::addToQuickLookup( LLDrawPool* new_poolp )
}
break;
+ case LLDrawPool::POOL_GLOW:
+ if (mGlowPool)
+ {
+ llassert(0);
+ llwarns << "Ignoring duplicate glow pool." << llendl;
+ }
+ else
+ {
+ mGlowPool = (LLRenderPass*) new_poolp;
+ }
+ break;
+
case LLDrawPool::POOL_TREE:
mTreePools[ uintptr_t(new_poolp->getTexture()) ] = new_poolp ;
break;
@@ -3360,6 +2582,11 @@ void LLPipeline::removeFromQuickLookup( LLDrawPool* poolp )
mSimplePool = NULL;
break;
+ case LLDrawPool::POOL_GLOW:
+ llassert(mGlowPool == poolp);
+ mGlowPool = NULL;
+ break;
+
case LLDrawPool::POOL_TREE:
#ifdef _DEBUG
{
@@ -3545,7 +2772,7 @@ static F32 calc_light_dist(LLVOVolume* light, const LLVector3& cam_pos, F32 max_
return dist;
}
-void LLPipeline::calcNearbyLights()
+void LLPipeline::calcNearbyLights(LLCamera& camera)
{
if (mLightingDetail >= 1)
{
@@ -3553,34 +2780,39 @@ void LLPipeline::calcNearbyLights()
// begin() == the closest light and rbegin() == the farthest light
const S32 MAX_LOCAL_LIGHTS = 6;
// LLVector3 cam_pos = gAgent.getCameraPositionAgent();
- LLVector3 cam_pos = gAgent.getPositionAgent();
+ LLVector3 cam_pos = LLPipeline::sSkipUpdate || LLViewerJoystick::sOverrideCamera ?
+ camera.getOrigin() :
+ gAgent.getPositionAgent();
F32 max_dist = LIGHT_MAX_RADIUS * 4.f; // ignore enitrely lights > 4 * max light rad
// UPDATE THE EXISTING NEARBY LIGHTS
- light_set_t cur_nearby_lights;
- for (light_set_t::iterator iter = mNearbyLights.begin();
- iter != mNearbyLights.end(); iter++)
+ if (!LLPipeline::sSkipUpdate)
{
- const Light* light = &(*iter);
- LLDrawable* drawable = light->drawable;
- LLVOVolume* volight = drawable->getVOVolume();
- if (!volight || !drawable->isState(LLDrawable::LIGHT))
- {
- drawable->clearState(LLDrawable::NEARBY_LIGHT);
- continue;
- }
- if (light->fade <= -LIGHT_FADE_TIME)
- {
- drawable->clearState(LLDrawable::NEARBY_LIGHT);
- }
- else
+ light_set_t cur_nearby_lights;
+ for (light_set_t::iterator iter = mNearbyLights.begin();
+ iter != mNearbyLights.end(); iter++)
{
- F32 dist = calc_light_dist(volight, cam_pos, max_dist);
- cur_nearby_lights.insert(Light(drawable, dist, light->fade));
+ const Light* light = &(*iter);
+ LLDrawable* drawable = light->drawable;
+ LLVOVolume* volight = drawable->getVOVolume();
+ if (!volight || !drawable->isState(LLDrawable::LIGHT))
+ {
+ drawable->clearState(LLDrawable::NEARBY_LIGHT);
+ continue;
+ }
+ if (light->fade <= -LIGHT_FADE_TIME)
+ {
+ drawable->clearState(LLDrawable::NEARBY_LIGHT);
+ }
+ else
+ {
+ F32 dist = calc_light_dist(volight, cam_pos, max_dist);
+ cur_nearby_lights.insert(Light(drawable, dist, light->fade));
+ }
}
+ mNearbyLights = cur_nearby_lights;
}
- mNearbyLights = cur_nearby_lights;
// FIND NEW LIGHTS THAT ARE IN RANGE
light_set_t new_nearby_lights;
@@ -3715,7 +2947,7 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)
LLColor4 light_color = light->getLightColor();
light_color.mV[3] = 0.0f;
- F32 fade = iter->fade;
+ F32 fade = LLPipeline::sSkipUpdate ? 1.f : iter->fade;
if (fade < LIGHT_FADE_TIME)
{
// fade in/out light
@@ -4261,257 +3493,6 @@ BOOL LLPipeline::getRenderSoundBeacons(void*)
return sRenderSoundBeacons;
}
-//===============================
-// LLGLSL Shader implementation
-//===============================
-LLGLSLShader::LLGLSLShader()
-: mProgramObject(0)
-{ }
-
-void LLGLSLShader::unload()
-{
- stop_glerror();
- mAttribute.clear();
- mTexture.clear();
- mUniform.clear();
-
- if (mProgramObject)
- {
- GLhandleARB obj[1024];
- GLsizei count;
-
- glGetAttachedObjectsARB(mProgramObject, 1024, &count, obj);
- for (GLsizei i = 0; i < count; i++)
- {
- glDeleteObjectARB(obj[i]);
- }
-
- glDeleteObjectARB(mProgramObject);
-
- mProgramObject = 0;
- }
-
- //hack to make apple not complain
- glGetError();
-
- stop_glerror();
-}
-
-void LLGLSLShader::attachObject(GLhandleARB object)
-{
- if (object != 0)
- {
- stop_glerror();
- glAttachObjectARB(mProgramObject, object);
- stop_glerror();
- }
- else
- {
- llwarns << "Attempting to attach non existing shader object. " << llendl;
- }
-}
-
-void LLGLSLShader::attachObjects(GLhandleARB* objects, S32 count)
-{
- for (S32 i = 0; i < count; i++)
- {
- attachObject(objects[i]);
- }
-}
-
-BOOL LLGLSLShader::mapAttributes(const char** attrib_names, S32 count)
-{
- //link the program
- BOOL res = link();
-
- mAttribute.clear();
- mAttribute.resize(LLPipeline::sReservedAttribCount + count, -1);
-
- if (res)
- { //read back channel locations
-
- //read back reserved channels first
- for (S32 i = 0; i < (S32) LLPipeline::sReservedAttribCount; i++)
- {
- const char* name = LLPipeline::sReservedAttribs[i];
- S32 index = glGetAttribLocationARB(mProgramObject, name);
- if (index != -1)
- {
- mAttribute[i] = index;
- llinfos << "Attribute " << name << " assigned to channel " << index << llendl;
- }
- }
-
- for (S32 i = 0; i < count; i++)
- {
- const char* name = attrib_names[i];
- S32 index = glGetAttribLocationARB(mProgramObject, name);
- if (index != -1)
- {
- mAttribute[LLPipeline::sReservedAttribCount + i] = index;
- llinfos << "Attribute " << name << " assigned to channel " << index << llendl;
- }
- }
-
- return TRUE;
- }
-
- return FALSE;
-}
-
-void LLGLSLShader::mapUniform(GLint index, const char** uniform_names, S32 count)
-{
- if (index == -1)
- {
- return;
- }
-
- GLenum type;
- GLsizei length;
- GLint size;
- char name[1024]; /* Flawfinder: ignore */
- name[0] = 0;
-
- glGetActiveUniformARB(mProgramObject, index, 1024, &length, &size, &type, name);
-
- //find the index of this uniform
- for (S32 i = 0; i < (S32) LLPipeline::sReservedUniformCount; i++)
- {
- if (mUniform[i] == -1 && !strncmp(LLPipeline::sReservedUniforms[i],name, strlen(LLPipeline::sReservedUniforms[i]))) /* Flawfinder: ignore */
- {
- //found it
- S32 location = glGetUniformLocationARB(mProgramObject, name);
- mUniform[i] = location;
- llinfos << "Uniform " << name << " is at location " << location << llendl;
- mTexture[i] = mapUniformTextureChannel(location, type);
- return;
- }
- }
-
- for (S32 i = 0; i < count; i++)
- {
- if (mUniform[i+LLPipeline::sReservedUniformCount] == -1 &&
- !strncmp(uniform_names[i],name, strlen(uniform_names[i]))) /* Flawfinder: ignore */
- {
- //found it
- S32 location = glGetUniformLocationARB(mProgramObject, name);
- mUniform[i+LLPipeline::sReservedUniformCount] = location;
- llinfos << "Uniform " << name << " is at location " << location << " stored in index " <<
- (i+LLPipeline::sReservedUniformCount) << llendl;
- mTexture[i+LLPipeline::sReservedUniformCount] = mapUniformTextureChannel(location, type);
- return;
- }
- }
-
- //llinfos << "Unknown uniform: " << name << llendl;
- }
-
-GLint LLGLSLShader::mapUniformTextureChannel(GLint location, GLenum type)
-{
- if (type >= GL_SAMPLER_1D_ARB && type <= GL_SAMPLER_2D_RECT_SHADOW_ARB)
- { //this here is a texture
- glUniform1iARB(location, mActiveTextureChannels);
- llinfos << "Assigned to texture channel " << mActiveTextureChannels << llendl;
- return mActiveTextureChannels++;
- }
- return -1;
-}
-
-BOOL LLGLSLShader::mapUniforms(const char** uniform_names, S32 count)
-{
- BOOL res = TRUE;
-
- mActiveTextureChannels = 0;
- mUniform.clear();
- mTexture.clear();
-
- //initialize arrays
- mUniform.resize(count + LLPipeline::sReservedUniformCount, -1);
- mTexture.resize(count + LLPipeline::sReservedUniformCount, -1);
-
-
-
- bind();
-
- //get the number of active uniforms
- GLint activeCount;
- glGetObjectParameterivARB(mProgramObject, GL_OBJECT_ACTIVE_UNIFORMS_ARB, &activeCount);
-
- for (S32 i = 0; i < activeCount; i++)
- {
- mapUniform(i, uniform_names, count);
- }
-
- unbind();
-
- return res;
-}
-
-BOOL LLGLSLShader::link(BOOL suppress_errors)
-{
- return gPipeline.linkProgramObject(mProgramObject, suppress_errors);
-}
-
-void LLGLSLShader::bind()
-{
- glUseProgramObjectARB(mProgramObject);
- if (mAttribute.size() > 0)
- {
- gPipeline.mMaterialIndex = mAttribute[0];
- }
-}
-
-void LLGLSLShader::unbind()
-{
- for (U32 i = 0; i < mAttribute.size(); ++i)
- {
- vertexAttrib4f(i, 0,0,0,1);
- }
- glUseProgramObjectARB(0);
-}
-
-S32 LLGLSLShader::enableTexture(S32 uniform, S32 mode)
-{
- if (uniform < 0 || uniform >= (S32)mTexture.size())
- {
- llerrs << "LLGLSLShader::enableTexture: uniform out of range: " << uniform << llendl;
- }
- S32 index = mTexture[uniform];
- if (index != -1)
- {
- glActiveTextureARB(GL_TEXTURE0_ARB+index);
- glEnable(mode);
- }
- return index;
-}
-
-S32 LLGLSLShader::disableTexture(S32 uniform, S32 mode)
-{
- S32 index = mTexture[uniform];
- if (index != -1)
- {
- glActiveTextureARB(GL_TEXTURE0_ARB+index);
- glDisable(mode);
- }
- return index;
-}
-
-void LLGLSLShader::vertexAttrib4f(U32 index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
-{
- if (mAttribute[index] > 0)
- {
- glVertexAttrib4fARB(mAttribute[index], x, y, z, w);
- }
-}
-
-void LLGLSLShader::vertexAttrib4fv(U32 index, GLfloat* v)
-{
- if (mAttribute[index] > 0)
- {
- glVertexAttrib4fvARB(mAttribute[index], v);
- }
-}
-
LLViewerObject* LLPipeline::pickObject(const LLVector3 &start, const LLVector3 &end, LLVector3 &collision)
{
LLDrawable* drawable = mObjectPartition[PARTITION_VOLUME]->pickDrawable(start, end, collision);
@@ -4647,6 +3628,14 @@ void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam,
glGenTextures(1, &blur_tex);
}
+ BOOL reattach = FALSE;
+ if (mCubeFrameBuffer == 0)
+ {
+ glGenFramebuffersEXT(1, &mCubeFrameBuffer);
+ glGenRenderbuffersEXT(1, &mCubeDepth);
+ reattach = TRUE;
+ }
+
BOOL toggle_ui = gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI);
if (toggle_ui)
{
@@ -4663,6 +3652,7 @@ void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam,
(1 << LLPipeline::RENDER_TYPE_CLOUDS) |
//(1 << LLPipeline::RENDER_TYPE_STARS) |
//(1 << LLPipeline::RENDER_TYPE_AVATAR) |
+ (1 << LLPipeline::RENDER_TYPE_GLOW) |
(1 << LLPipeline::RENDER_TYPE_GRASS) |
(1 << LLPipeline::RENDER_TYPE_VOLUME) |
(1 << LLPipeline::RENDER_TYPE_TERRAIN) |
@@ -4694,11 +3684,45 @@ void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam,
LLVector3 origin = cube_cam.getOrigin();
- gPipeline.calcNearbyLights();
+ gPipeline.calcNearbyLights(cube_cam);
+ cube_map->bind();
for (S32 i = 0; i < 6; i++)
{
+ GLint res_x, res_y;
+ glGetTexLevelParameteriv(cube_face[i], 0, GL_TEXTURE_WIDTH, &res_x);
+ glGetTexLevelParameteriv(cube_face[i], 0, GL_TEXTURE_HEIGHT, &res_y);
+
+ if (res_x != res || res_y != res)
+ {
+ glTexImage2D(cube_face[i],0,GL_RGBA,res,res,0,GL_RGBA,GL_FLOAT,NULL);
+ reattach = TRUE;
+ }
+ }
+ cube_map->disable();
+
+ if (reattach)
+ {
+ glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, mCubeDepth);
+ GLint res_x, res_y;
+ glGetRenderbufferParameterivEXT(GL_RENDERBUFFER_EXT, GL_RENDERBUFFER_WIDTH_EXT, &res_x);
+ glGetRenderbufferParameterivEXT(GL_RENDERBUFFER_EXT, GL_RENDERBUFFER_HEIGHT_EXT, &res_y);
+
+ if (res_x != res || res_y != res)
+ {
+ glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT,GL_DEPTH_COMPONENT24,res,res);
+ }
+ glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0);
+ }
+
+ for (S32 i = 0; i < 6; i++)
+ {
+ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, mCubeFrameBuffer);
+ glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
+ cube_face[i], cube_map->getGLName(), 0);
+ glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,
+ GL_RENDERBUFFER_EXT, mCubeDepth);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90.f, 1.f, 0.1f, 1024.f);
@@ -4707,7 +3731,6 @@ void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam,
apply_cube_face_rotation(i);
-
glTranslatef(-origin.mV[0], -origin.mV[1], -origin.mV[2]);
cube_cam.setOrigin(origin);
LLViewerCamera::updateFrustumPlanes(cube_cam);
@@ -4715,18 +3738,15 @@ void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam,
gPipeline.updateCull(cube_cam);
gPipeline.stateSort(cube_cam);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
gPipeline.renderGeom(cube_cam);
-
- cube_map->enable(0);
- cube_map->bind();
- glCopyTexImage2D(cube_face[i], 0, GL_RGB, 0, 0, res, res, 0);
- cube_map->disable();
}
+ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
+
cube_cam.setOrigin(origin);
gPipeline.resetDrawOrders();
- gPipeline.mShinyOrigin.setVec(cube_cam.getOrigin(), cube_cam.getFar()*2.f);
+ gShinyOrigin.setVec(cube_cam.getOrigin(), cube_cam.getFar()*2.f);
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
@@ -4740,14 +3760,12 @@ void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam,
{
gPipeline.toggleRenderDebugFeature((void*)LLPipeline::RENDER_DEBUG_FEATURE_UI);
}
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
LLDrawPoolWater::sSkipScreenCopy = FALSE;
}
//send cube map vertices and texture coordinates
void render_cube_map()
{
-
U32 idx[36];
idx[0] = 1; idx[1] = 0; idx[2] = 2; //front
@@ -4794,7 +3812,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out, U32
{
LLGLEnable cube(GL_TEXTURE_CUBE_MAP_ARB);
LLGLDepthTest depth(GL_FALSE);
-
+ glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
@@ -4807,9 +3825,9 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out, U32
S32 kernel = 2;
F32 step = 90.f/res;
- F32 alpha = 1.f/((kernel*2+1));
+ F32 alpha = 1.f/((kernel*2)+1);
- glColor4f(1,1,1,alpha);
+ glColor4f(alpha,alpha,alpha,alpha*1.25f);
S32 x = 0;
@@ -4831,7 +3849,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out, U32
};
- glBlendFunc(GL_SRC_ALPHA_SATURATE, GL_ONE);
+ glBlendFunc(GL_ONE, GL_ONE);
//3-axis blur
for (U32 j = 0; j < 3; j++)
{
@@ -4863,7 +3881,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out, U32
}
for (U32 i = 0; i < 6; i++)
{
- glCopyTexImage2D(cube_face[i], 0, GL_RGB, 0, i*res, res, res, 0);
+ glCopyTexImage2D(cube_face[i], 0, GL_RGBA, 0, i*res, res, res, 0);
}
}
@@ -4873,6 +3891,158 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out, U32
glPopMatrix();
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glClear(GL_COLOR_BUFFER_BIT);
+}
+
+void LLPipeline::bindScreenToTexture()
+{
+ LLGLEnable gl_texture_2d(GL_TEXTURE_2D);
+
+ GLint* viewport = (GLint*) gGLViewport;
+ GLuint resX = nhpo2(viewport[2]);
+ GLuint resY = nhpo2(viewport[3]);
+
+ if (mScreenTex == 0)
+ {
+ glGenTextures(1, &mScreenTex);
+ glBindTexture(GL_TEXTURE_2D, mScreenTex);
+
+ gImageList.updateMaxResidentTexMem(-1, resX*resY*3);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, resX, resY, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
+
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ }
+
+ glBindTexture(GL_TEXTURE_2D, mScreenTex);
+ GLint cResX;
+ GLint cResY;
+ glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &cResX);
+ glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &cResY);
+
+ if (cResX != (GLint)resX || cResY != (GLint)resY)
+ {
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, resX, resY, 0, GL_RGB, GL_FLOAT, NULL);
+ gImageList.updateMaxResidentTexMem(-1, resX*resY*3);
+ }
+
+ glCopyTexSubImage2D(GL_TEXTURE_2D, 0, viewport[0], viewport[1], 0, 0, viewport[2], viewport[3]);
+
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+
+
+ mScreenScale.mV[0] = (float) viewport[2]/resX;
+ mScreenScale.mV[1] = (float) viewport[3]/resY;
+
+ LLImageGL::sBoundTextureMemory += resX * resY * 3;
}
+void LLPipeline::renderBloom(GLuint source, GLuint dest, GLuint buffer, U32 res, LLVector2 tc1, LLVector2 tc2)
+{
+ gGlowProgram.bind();
+
+ LLGLEnable tex(GL_TEXTURE_2D);
+ LLGLDepthTest depth(GL_FALSE);
+ LLGLDisable blend(GL_BLEND);
+ LLGLDisable cull(GL_CULL_FACE);
+
+ if (mFramebuffer[0] == 0)
+ {
+ glGenFramebuffersEXT(2, mFramebuffer);
+ }
+
+ GLint viewport[4];
+ glGetIntegerv(GL_VIEWPORT, viewport);
+ glViewport(0,0,res,res);
+
+ glMatrixMode(GL_PROJECTION);
+ glPushMatrix();
+ glLoadIdentity();
+ glMatrixMode(GL_MODELVIEW);
+ glPushMatrix();
+ glLoadIdentity();
+
+ glBindTexture(GL_TEXTURE_2D, source);
+
+ S32 kernel = gSavedSettings.getS32("RenderGlowSize")*2;
+
+ LLGLDisable test(GL_ALPHA_TEST);
+
+ F32 delta = 1.f/(res*gSavedSettings.getF32("RenderGlowStrength"));
+
+ for (S32 i = 0; i < kernel; i++)
+ {
+ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, mFramebuffer[i%2]);
+ glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,
+ GL_COLOR_ATTACHMENT0_EXT,
+ GL_TEXTURE_2D,
+ i%2 == 0 ? buffer : dest, 0);
+
+ glBindTexture(GL_TEXTURE_2D, i == 0 ? source :
+ i%2==0 ? dest :
+ buffer);
+
+ glUniform1fARB(gGlowProgram.mUniform[LLShaderMgr::GLOW_DELTA],delta);
+
+ glBegin(GL_TRIANGLE_STRIP);
+ glTexCoord2f(tc1.mV[0], tc1.mV[1]);
+ glVertex2f(-1,-1);
+
+ glTexCoord2f(tc1.mV[0], tc2.mV[1]);
+ glVertex2f(-1,1);
+
+ glTexCoord2f(tc2.mV[0], tc1.mV[1]);
+ glVertex2f(1,-1);
+
+ glTexCoord2f(tc2.mV[0], tc2.mV[1]);
+ glVertex2f(1,1);
+ glEnd();
+
+ tc1.setVec(0,0);
+ tc2.setVec(1,1);
+
+ }
+
+ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
+ gGlowProgram.unbind();
+
+ glViewport(viewport[0], viewport[1], viewport[2], viewport[3]);
+
+ if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_GLOW))
+ {
+ glClear(GL_COLOR_BUFFER_BIT);
+ }
+
+ glBindTexture(GL_TEXTURE_2D, dest);
+ {
+ LLGLEnable blend(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE);
+
+ glBegin(GL_TRIANGLE_STRIP);
+ glColor4f(1,1,1,1);
+ glTexCoord2f(tc1.mV[0], tc1.mV[1]);
+ glVertex2f(-1,-1);
+
+ glTexCoord2f(tc1.mV[0], tc2.mV[1]);
+ glVertex2f(-1,1);
+
+ glTexCoord2f(tc2.mV[0], tc1.mV[1]);
+ glVertex2f(1,-1);
+
+ glTexCoord2f(tc2.mV[0], tc2.mV[1]);
+ glVertex2f(1,1);
+ glEnd();
+
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ }
+ glMatrixMode(GL_PROJECTION);
+ glPopMatrix();
+ glMatrixMode(GL_MODELVIEW);
+ glPopMatrix();
+}
\ No newline at end of file
diff --git a/linden/indra/newview/pipeline.h b/linden/indra/newview/pipeline.h
index 158c420..a8c92cc 100644
--- a/linden/indra/newview/pipeline.h
+++ b/linden/indra/newview/pipeline.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2001-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -62,41 +63,6 @@ bool LLRayAABB(const LLVector3 ¢er, const LLVector3 &size, const LLVector3&
BOOL LLLineSegmentAABB(const LLVector3& start, const LLVector3& end, const LLVector3& center, const LLVector3& size);
BOOL setup_hud_matrices(BOOL for_select);
-class LLGLSLShader
-{
-public:
- LLGLSLShader();
-
- void unload();
- void attachObject(GLhandleARB object);
- void attachObjects(GLhandleARB* objects = NULL, S32 count = 0);
- BOOL mapAttributes(const char** attrib_names = NULL, S32 count = 0);
- BOOL mapUniforms(const char** uniform_names = NULL, S32 count = 0);
- void mapUniform(GLint index, const char** uniform_names = NULL, S32 count = 0);
- void vertexAttrib4f(U32 index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
- void vertexAttrib4fv(U32 index, GLfloat* v);
-
- GLint mapUniformTextureChannel(GLint location, GLenum type);
-
-
- //enable/disable texture channel for specified uniform
- //if given texture uniform is active in the shader,
- //the corresponding channel will be active upon return
- //returns channel texture is enabled in from [0-MAX)
- S32 enableTexture(S32 uniform, S32 mode = GL_TEXTURE_2D);
- S32 disableTexture(S32 uniform, S32 mode = GL_TEXTURE_2D);
-
- BOOL link(BOOL suppress_errors = FALSE);
- void bind();
- void unbind();
-
- GLhandleARB mProgramObject;
- std::vector mAttribute;
- std::vector mUniform;
- std::vector mTexture;
- S32 mActiveTextureChannels;
-};
-
class LLPipeline
{
public:
@@ -106,10 +72,13 @@ public:
void destroyGL();
void restoreGL();
void resetVertexBuffers();
+ void releaseGLBuffers();
void resetVertexBuffers(LLDrawable* drawable);
void setUseVBO(BOOL use_vbo);
void generateReflectionMap(LLCubeMap* cube_map, LLCamera& camera, GLsizei res);
void blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out, U32 res);
+ void bindScreenToTexture();
+ void renderBloom(GLuint source, GLuint dest, GLuint buffer, U32 res, LLVector2 tc1, LLVector2 tc2);
void init();
void cleanup();
@@ -164,17 +133,7 @@ public:
void setUseVertexShaders(BOOL use_shaders);
BOOL getUseVertexShaders() const { return mVertexShadersEnabled; }
BOOL canUseVertexShaders();
- BOOL setVertexShaderLevel(S32 type, S32 level);
- S32 getVertexShaderLevel(S32 type) const { return mVertexShaderLevel[type]; }
- S32 getMaxVertexShaderLevel(S32 type) const { return mMaxVertexShaderLevel[type]; }
-
- void setShaders();
- void dumpObjectLog(GLhandleARB ret, BOOL warns = TRUE);
- BOOL linkProgramObject(GLhandleARB obj, BOOL suppress_errors = FALSE);
- BOOL validateProgramObject(GLhandleARB obj);
- GLhandleARB loadShader(const LLString& filename, S32 cls, GLenum type);
-
// phases
void resetFrameStats();
@@ -214,7 +173,7 @@ public:
S32 getVisibleCount() const { return mVisibleList.size(); }
S32 getLightCount() const { return mLights.size(); }
- void calcNearbyLights();
+ void calcNearbyLights(LLCamera& camera);
void setupHWLights(LLDrawPool* pool);
void setupAvatarLights(BOOL for_edit = FALSE);
void enableLights(U32 mask, F32 shadow_factor);
@@ -264,11 +223,6 @@ private:
void initShaders(BOOL force);
void unloadShaders();
BOOL loadShaders();
- BOOL loadShadersLighting();
- BOOL loadShadersObject();
- BOOL loadShadersAvatar();
- BOOL loadShadersEnvironment();
- BOOL loadShadersInterface();
void saveVertexShaderLevel(S32 type, S32 level, S32 max);
void addToQuickLookup( LLDrawPool* new_poolp );
void removeFromQuickLookup( LLDrawPool* poolp );
@@ -276,15 +230,7 @@ private:
public:
enum {GPU_CLASS_MAX = 3 };
- enum EShaderClass
- {
- SHADER_LIGHTING,
- SHADER_OBJECT,
- SHADER_AVATAR,
- SHADER_ENVIRONMENT,
- SHADER_INTERFACE,
- SHADER_COUNT
- };
+
enum LLRenderTypeMask
{
// Following are pool types (some are also object types)
@@ -298,6 +244,8 @@ public:
RENDER_TYPE_TREE = LLDrawPool::POOL_TREE,
RENDER_TYPE_WATER = LLDrawPool::POOL_WATER,
RENDER_TYPE_ALPHA = LLDrawPool::POOL_ALPHA,
+ RENDER_TYPE_GLOW = LLDrawPool::POOL_GLOW,
+
// Following are object types (only used in drawable mRenderType)
RENDER_TYPE_HUD = LLDrawPool::NUM_POOL_TYPES,
RENDER_TYPE_VOLUME,
@@ -344,7 +292,8 @@ public:
RENDER_DEBUG_TEXTURE_AREA = 0x08000,
RENDER_DEBUG_FACE_AREA = 0x10000,
RENDER_DEBUG_PARTICLES = 0x20000,
- RENDER_DEBUG_TEXTURE_ANIM = 0x40000,
+ RENDER_DEBUG_GLOW = 0x40000,
+ RENDER_DEBUG_TEXTURE_ANIM = 0x80000,
};
LLPointer mAlphaSizzleImagep;
@@ -372,6 +321,11 @@ public:
LLSpatialPartition* getSpatialPartition(LLViewerObject* vobj);
LLSpatialPartition* getSpatialPartition(U32 index);
+ void updateCamera(BOOL reset = FALSE);
+
+ LLVector3 mFlyCamPosition;
+ LLQuaternion mFlyCamRotation;
+
BOOL mBackfaceCull;
S32 mTrianglesDrawn;
LLStat mTrianglesDrawnStat;
@@ -395,135 +349,29 @@ public:
static BOOL sUseOcclusion;
static BOOL sSkipUpdate; //skip lod updates
static BOOL sDynamicReflections;
+ static BOOL sRenderGlow;
- //cube map for anti-aliasing reflections
- LLCubeMap* mCubeBuffer;
- GLuint mCubeList;
+ //screen texture
+ GLuint mScreenTex;
+ LLVector2 mScreenScale;
- class LLScatterShader
- {
- public:
- static void init(GLhandleARB shader, int map_stage);
- };
-
- //utility shader objects (not shader programs)
- GLhandleARB mLightVertex;
- GLhandleARB mLightFragment;
- GLhandleARB mScatterVertex;
- GLhandleARB mScatterFragment;
-
- //global (reserved slot) shader parameters
- static const char* sReservedAttribs[];
- static U32 sReservedAttribCount;
+ //texture for making the glow
+ GLuint mGlowMap;
+ GLuint mGlowBuffer;
- typedef enum
- {
- GLSL_MATERIAL_COLOR = 0,
- GLSL_SPECULAR_COLOR,
- GLSL_BINORMAL,
- GLSL_END_RESERVED_ATTRIBS
- } eGLSLReservedAttribs;
-
- static const char* sReservedUniforms[];
- static U32 sReservedUniformCount;
-
- typedef enum
- {
- GLSL_DIFFUSE_MAP = 0,
- GLSL_SPECULAR_MAP,
- GLSL_BUMP_MAP,
- GLSL_ENVIRONMENT_MAP,
- GLSL_END_RESERVED_UNIFORMS
- } eGLSLReservedUniforms;
+ //framebuffer objects for off-screen scratch space
+ GLuint mFramebuffer[2];
- static const char* sShinyUniforms[];
- static U32 sShinyUniformCount;
-
- typedef enum
- {
- GLSL_SHINY_ORIGIN = GLSL_END_RESERVED_UNIFORMS
- } eShinyUniforms;
-
- LLVector4 mShinyOrigin;
-
- //object shaders
- LLGLSLShader mObjectSimpleProgram;
- LLGLSLShader mObjectAlphaProgram;
- LLGLSLShader mObjectBumpProgram;
- LLGLSLShader mObjectShinyProgram;
-
- //water parameters
- static const char* sWaterUniforms[];
- static U32 sWaterUniformCount;
-
- typedef enum
- {
- GLSL_WATER_SCREENTEX = GLSL_END_RESERVED_UNIFORMS,
- GLSL_WATER_EYEVEC,
- GLSL_WATER_TIME,
- GLSL_WATER_WAVE_DIR1,
- GLSL_WATER_WAVE_DIR2,
- GLSL_WATER_LIGHT_DIR,
- GLSL_WATER_SPECULAR,
- GLSL_WATER_SPECULAR_EXP,
- GLSL_WATER_FBSCALE,
- GLSL_WATER_REFSCALE
- } eWaterUniforms;
-
-
- //terrain parameters
- static const char* sTerrainUniforms[];
- static U32 sTerrainUniformCount;
+ //dynamic cube map scratch space
+ LLCubeMap* mCubeBuffer;
- typedef enum
- {
- GLSL_TERRAIN_DETAIL0 = GLSL_END_RESERVED_UNIFORMS,
- GLSL_TERRAIN_DETAIL1,
- GLSL_TERRAIN_ALPHARAMP
- } eTerrainUniforms;
-
- //environment shaders
- LLGLSLShader mTerrainProgram;
- LLGLSLShader mGroundProgram;
- LLGLSLShader mWaterProgram;
-
- //interface shaders
- LLGLSLShader mHighlightProgram;
+ //frambuffer object for rendering dynamic cube maps
+ GLuint mCubeFrameBuffer;
- //avatar shader parameter tables
- static const char* sAvatarAttribs[];
- static U32 sAvatarAttribCount;
-
- typedef enum
- {
- GLSL_AVATAR_WEIGHT = GLSL_END_RESERVED_ATTRIBS,
- GLSL_AVATAR_CLOTHING,
- GLSL_AVATAR_WIND,
- GLSL_AVATAR_SINWAVE,
- GLSL_AVATAR_GRAVITY
- } eAvatarAttribs;
-
- static const char* sAvatarUniforms[];
- static U32 sAvatarUniformCount;
-
- typedef enum
- {
- GLSL_AVATAR_MATRIX = GLSL_END_RESERVED_UNIFORMS
- } eAvatarUniforms;
-
- //avatar skinning utility shader object
- GLhandleARB mAvatarSkinVertex;
+ //depth buffer object for rendering dynamic cube maps
+ GLuint mCubeDepth;
- //avatar shader handles
- LLGLSLShader mAvatarProgram;
- LLGLSLShader mAvatarEyeballProgram;
- LLGLSLShader mAvatarPickProgram;
- //current avatar shader parameter pointer
- GLint mAvatarMatrixParam;
- GLint mMaterialIndex;
- GLint mSpecularIndex;
-
LLColor4 mSunDiffuse;
LLVector3 mSunDir;
@@ -535,13 +383,12 @@ public:
LLSpatialGroup::sg_vector_t mDrawableGroups;
void clearRenderMap();
-
-protected:
+
+ BOOL mInitialized;
BOOL mVertexShadersEnabled;
S32 mVertexShadersLoaded; // 0 = no, 1 = yes, -1 = failed
- S32 mVertexShaderLevel[SHADER_COUNT];
- S32 mMaxVertexShaderLevel[SHADER_COUNT];
-
+
+protected:
U32 mRenderTypeMask;
U32 mRenderFeatureMask;
U32 mRenderDebugFeatureMask;
@@ -643,6 +490,7 @@ protected:
LLDrawPool* mWaterPool;
LLDrawPool* mGroundPool;
LLRenderPass* mSimplePool;
+ LLDrawPool* mGlowPool;
LLDrawPool* mBumpPool;
// Note: no need to keep an quick-lookup to avatar pools, since there's only one per avatar
diff --git a/linden/indra/newview/randgauss.h b/linden/indra/newview/randgauss.h
index c5bddca..d27ece1 100644
--- a/linden/indra/newview/randgauss.h
+++ b/linden/indra/newview/randgauss.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2003-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/newview/releasenotes.txt b/linden/indra/newview/releasenotes.txt
index 5fd9230..2fc26c7 100644
--- a/linden/indra/newview/releasenotes.txt
+++ b/linden/indra/newview/releasenotes.txt
@@ -1,3 +1,98 @@
+Release Notes for Second Life 1.15.0(2) April 25, 2007
+=====================================
+
+Changes:
+* Improved Help menu with links to additional resources
+* 'Add as Friend' button added to Profile
+* Added buttons to the IM window to scroll to the first and last tabs
+* Added parcel flag for Mature Content
+** Parcel searches use the parcel rating instead of the region rating
+* Share With Group checkbox is cleared after object is deeded to group
+* Groups list window taller and resizable
+* Residents are now notified if they are the only ones present in a group IM or conference session
+* Rating system removed from Profile
+* Group Search improvements
+** Searches are done against the full text of the group, including charter
+** Search index is updated daily; new groups may take 24 hours to appear
+** Clicking on a group found via search still shows up-to-date information
+* Alpha textures sorted more accurately
+** Example: the hollow inner surface of a sphere will no longer draw on top of the outer surface
+** This change may cause content using alpha textures to appear differently
+* Larger debug beacons (View > Beacon)
+** You can now set the beacon size in Preferences -> Adv. Graphics (Range is 1-127)
+
+LSL changes:
+* LSL Wiki browser embedded in the viewer
+** When editing a script, select a keyword, then select Help > LSL Wiki Help. in the Script window
+* New function: string llStringTrim(string src, integer trim_type)
+** STRING_TRIM_HEAD: trim all leading spaces in src
+** STRING_TRIM_TAIL: trim all trailing spaces in src
+** STRING_TRIM: trim all leading and trailing spaces in src
+
+Notes:
+* LSL Wiki is not editable from within the Second Life viewer
+* PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY and PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY flags
+ were added to llGetParcelFlags()/llSetParcelFlags in a previous release, but not
+ documented. These will now appear correctly in the script editor.
+* On systems with ATI Mobility X300/X600/X700 graphics cards, when upgrading from a previous
+ version of Second Life, sound may be disabled on the first run of the viewer. It
+ should function correctly on the second run.
+* HUD objects may temporarily appear in the wrong position following a region crossing.
+
+Bug fixes:
+* Removed First Land filter in Search
+* Improved performance of inventory operations
+* Improved recognition of some processor types
+* Fixed About Land reporting the wrong parcel when teleporting between estates
+* Fixed a source of stalled Pending Uploads
+* Fixed Texture Repeats Per Face rounding incorrectly when tabbing between fields
+* Fixed objects appearing in two places while moving in editor
+* Fixed a client crash with some mobile ATI chipsets
+* Fixed button images when first running SL
+* Fixed selecting group roles not updating UI
+* Fixed avatar names not appearing when Show Avatar Names Temporarily is enabled
+* Fixed New IM showing (nobody) for group names
+* Fixed task email failing between regions
+* Fixed broken embedded landmarks when editing their notecard
+* Fixed a case where you could not modify your modifiable object
+* Fixed attachments disappearing a minute after teleport
+* Fixed ability to set Mature on parcels in non-Mature regions
+* Fixed saving changes to notecards in contents
+* Fixed HUD positioning guide misaligning when UI Size changed
+* Fixed a case where no-copy objects could be lost during rez
+* Fixed textures in windows only stretching horizontally
+* Fixed texture animation rotation changing when Flip is enabled
+* Fixed erroneous 'User has left this session' messages
+* Fixed display bug with a cube with Path Cut Begin/End set to .150
+* Fixed disappearing alpha HUD prims
+* Fixed menu bar processing keystrokes when moused over
+* Fixed detached IM windows not resizing
+* Fixed animated textures when using llSetColor, llSetLinkColor, or PRIM_PROPERTIES
+* Fixed HUD object movement when logging in at a no-script area
+* Fixed HUD objects not loading new textures
+* Fixed HUD objects becoming invisible the first time they are attached from inworld
+* Fixed 'IM All Contacts In Folder'
+* Fixed a viewer crash in the name cache
+* Fixed Undo resetting position only on root prim
+* Fixed Texture Picker search not showing results
+* Fixed IM window reverting to default size
+* Fixed overriding stand-up animation freezing you in place
+* Fixed Appearance mode showing back of avatar
+* Fixed: VWR-14: Inconsistency with reading binary data in llpolymesh.cpp
+* Fixed: VWR-45: trivial patch, initialize variables
+* Fixed: VWR-94: Buffer overflow in decoding image.
+* Fixed: VWR-97: Several iterator bugs in llmessage
+* Fixed: VWR-100: Messages form OpenJPEG only in debug mode
+* Fixed: VWR-109: Characters from fallback fonts don't scale properly
+* Fixed: VWR-123: OpenJPEG meta decode, Second Life patches
+* Fixed: VWR-130: llimagejpeg.h remove jinclude.h
+* Fixed: VWR-144: HUD and possibly other alpha touch area problems
+* Fixed: VWR-188: Patch: Refactor options handling in SConstruct
+* Fixed: VWR-198: Missing line of code in source on FFSAVE_WAV
+* Fixed: VWR-200: money(); events in a linked sets fail to trigger
+* Fixed: VWR-261: lldir_mac.cpp @brief description is wrong
+
+
Release Notes for Second Life 1.14.0(1) March 30, 2007
=====================================
Fixes:
@@ -29,8 +124,8 @@ Changes:
** Alpha sorting changes to improve performance
** Modified texture animations to use hardware acceleration
** Light objects now affect themselves.
-*** NOTE: This may cause some objects that are lights to "wash out" requiring some content to be adjusted
-* Setting an object for sale enables "Buy Copy" by default instead of "Buy Original"
+*** NOTE: This may cause some objects that are lights to 'wash out' requiring some content to be adjusted
+* Setting an object for sale enables 'Buy Copy' by default instead of 'Buy Original'
* User inworld money transaction history floater removed
** Transaction history can be viewed via secondlife.com
* Moving your avatar no longer deselects objects in build mode automatically
@@ -66,7 +161,7 @@ Bug fixes:
* Fixed attachments leaving inventory after detaching
* Fixed Alt-menu taking focus after Alt-zooming
* Fixed menus not closing when something else is clicked
-* Fixed Friends list not showing online friends on login if "Can see my online status" is disabled
+* Fixed Friends list not showing online friends on login if 'Can see my online status' is disabled
* Fixed World -> Buy Land menu failures
* Fixed LSL email converting numbers in the email body to 0
* Fixed focus issues when closing a window
@@ -116,834 +211,509 @@ Bug fixes:
* Fixed textures in the distance not reducing priority
* Avatars out of view are no longer animated
-Release Notes for Second Life 1.13.3(2) January 30, 2007
+Release Notes for Second Life 1.13.4(59510) March 22, 2007
=====================================
Changes:
-* It is no longer possible to only search for online residents
-* Online status is no longer indicated in the Search -> People results list
-** The online status inside the profile shows 'Currently Online' or remains blank
-*** Friends can see your Online status if you give permission via the Friends list
-*** Anyone can see your Online status if 'Make my online status visible only to my Friends' is unchecked
+* Legacy particle system replacements
+* 'Share with Group' checkbox now cleared when deeding objects
-Bug fixes:
-* Fixed script email across simulators
+Bugs Fixed:
+* Fixed llParticleSystem( [] ) not shutting down reliably
+* Fixed SVC-48: llSetScriptState is failing in some tasks
+* Fixed SVC-47: llSetPrimitiveParameters with multiple setposition calls capped at 10m, affecting home made TPs
+* Fixed SVC-15: Random Prim Drift
-Release Notes for Second Life 1.13.2(15) January 25, 2007
+Release Notes for Second Life 1.13.4(59329) March 16, 2007
=====================================
Changes:
-* Tapping Alt to focus on menus has been disabled
-* Separate settings.ini file used by Beta and First Look clients
-** Uninstalling these clients will no longer remove Second Life user settings
+* Replaced deprecated legacy particle systems (llMakeExplosion, llMakeFire, llMakeSmoke, llMakeFountain)
+ with llparticleSystem approximations
-Bug fixes:
-* Alt-mouseclick no longer puts focus on the menus
-* Popup warnings for sandbox regions reflect changes made in 1.13.2(11)
-* Fixed error while editing profile if you have a classified
-* Fixed Buy Pass option in pie menu not appearing unless access list for avatars is enabled
-* Fixed build tool not changing type until you use another menu
-* Fixed dragging position arrows sideways moves object vertically
-* Fixed clicking More/Less in editor selects Create
-* Fixed loud noise in wind on dual core systems
-* Fixed a client crash
-
-Release Notes for Second Life 1.13.2(12) January 19, 2007
+Release Notes for Second Life 1.13.4(8) March 12, 2007
=====================================
Bug fixes:
-* Fixed client crash caused by managing estate telehubs
-* Fixed client crash caused by corrupt gestures
-* Fixed a simulator crash
-* Fixed loose clothing appearing tight upon login
-* Fixed Ctrl-Alt-A disabling texture animation
-* Fixed Search displaying First Land parcels that are unavailable
-* Fixed some scripts not receiving email on simulator startup
-* Fixed a slowdown during region crossings
-* Fixed Edit -> Focus showing incorrect floater contents
-* Fixed Buy Land and Buy Pass pie menu options
-
-Release Notes for Second Life 1.13.2(11) January 17, 2007
-=====================================
-New features:
-* Added 'Copy SLURL to clipboard' command in World Map
+* Fixed picks not appearing with older viewer
+* Fixed money() event failing to fire in a linked set
+Release Notes for Second Life 1.13.4(7) March 9, 2007
+=====================================
Changes:
-* Linux: Flash icon when new IM arrives
-* Sandbox region deletion now operates using parcel auto-return times
-** Non-copyable objects will be returned to inventory
-* 'Report Bug' command moved to Tools menu
-* Added 'BETA' indicator to languages to reflect the status
-* Rights dialog on Friends list now shows the friend whose rights are being edited
-* Searching all Classifieds returns 100 results at a time (with Next and Prev buttons to flip through)
-* 'Show Online Status in Search' renamed to 'Make my Online Status Visible in Search'
-* Restored ability to use Alt to control camera, while still enabling menu access
-** Holding down Alt and pressing WASD (etc) moves the camera
-** Tapping Alt places focus on the menus.
-* Added PickerContextOpacity to settings.xml
+* World -> Account History opens L$ transaction history instead of US$ transaction history
Bug fixes:
-* Fixed a bug preventing Right Click > Buy from working
-* Searching Places with multi-word phrases now returns expected results
-* Fixed estate ban failing if more than 63 names are on the list
-* Fixed ability to type accented characters using Option (Alt) as a modifier key on Mac
-* Fixed capabilities under MacOS 10.3.9 (region crossings now work)
-* Alt+Tab no longer activates the menus
-* Menu no longer converts mouse hover into focus
-* Menus now only show access key underlines when menu is invoked by the keyboard
-* Double-clicking within an object's inventory now sets focus to the opened floater
-* Hover tip for llMessageLinked() now lists LINK_ROOT and LINK_THIS
-* Fixed incorrect sizing of button images in several floaters
-* Purging an item from the trash now closes any associated preview windows
-* Attempting to delete (not purge) an item from the trash no longer changes selection
-* Fixed a bug where objects could not be reattached after being dropped
-* Fixed viewer crash when deleting a playing animation
-* Fixed viewer crash when opening/closing textures in object contents
-* 'Xyz is typing...' no longer causes IM tab to flash
-* Profiles opened from other UI now select correct tab
-* Added more specific messages for cases where llSetPos() fails
-* Ctrl+Arrow keys now move insertion point a word at a time in text fields
-* ESC reverts text entry in all fields except Chat/IM (was commiting changes)
-* Searching for people now correctly respects offline/online setting
-* Texture and color picker 'shadow' only shown when dragging the picker
-* Floaters will now dock above any media controls
-* Arrow keys will now refresh Search tab contents
-* Parcel selection now cleared when closing the Edit Terrain floater
-* Parcel name is now updated in the database when changed
-* Gesture steps now save correctly
-* Fixed a messaging bug causing scripts to be truncated
-* Fixed missing spaces in Korean translations
-* Fixed a crash when using Search > All
-* Fixed a crash after right-clicking
-* Fixed a crash when closing the snapshot window before postcard is sent
-* Fixed IM windows resizing to default on open/closing of sessions
-* Fixed land buying error indicating nothing is selected
-* Fixed several client crashes
-* Fixed multiple selection in friends list vanishing if friend rights are changed
-* Fixed About Land showing info only for the parcel the avatar is over
-* Fixed changes to 'Show Online Status in Search' failing after the first change
-* Fixed a bug that prevented selecting Buy Land in the pie menu when land is for sale
-* Fixed toggling inventory closes all folders except the active one
-* Fixed client crash when dragging object on Z-axis while using vertically-oriented llSetCameraEyeOffset
-* Fixed receiving inventory from an object steals focus
-* Fixed erroneous entry in Mac Start Location field
-* Fixed texture repeats being applied to other prims upon linking
-* Fixed ability to move focus to Estate window tabs via keyboard
-* Fixed object contents only displaying one item
-* Fixed truncated land types in Search -> Land Sales
-
-Release Notes for Second Life 1.13.1(6) December 21, 2006
+* Fixed a simulator crash with llParcelDetails
+* Fixed flex objects vanishing when LOD changes
+* Fixed flex objects not updating when modified
+* Fixed flex objects disappearing when linked
+* Fixed repositioning of HUD attachments when viewer is resized
+* Fixed objects copied to/from notecards stating they are missing from database
+
+Release Notes for Second Life 1.13.4(6) March 8, 2007
=====================================
-Bug fixes:
-* Don't display an erroneous 'Critical Message' during login for new residents
+Changes:
+* Light emiting objects are now affected by their own light
-Release Notes for Second Life 1.13.1(5) December 15, 2006
+Fixes:
+* Offline IMs now appear upon login
+* Fixed autoupdate on Mac viewers
+* Fixed Capslock key detection
+* Fixed llSetLinkPrimitiveParams to move specified child prim
+* Fixed linux client mozilla runtime
+* Fixed texture animations to ignore texture 'Flip' flags
+* Fixed animated textures with texture offset enabled
+* Fixed attachments becoming disembodied when attaching an object
+* Fixed a viewer crash that occurs when opening a script in a prim
+* Fixed classifieds being deleted instead of auto-renewing
+* Fixed jerky/stuttering physics based movement for hover vehicles
+* Fix for paying child prim not triggering money event.
+
+
+Release Notes for Second Life 1.13.3(58877) March 6, 2007
=====================================
-New features:
-* Added French, Portuguese, and Spanish language options
+Fixes:
+* Fix for animated textures ignoring texture offset.
+* Fix for animated textures not ignoring flip flags.
+* Fix for light emitting objects not being lit by their own light.
+* Fix for Textures not being applied to the entire prim
+* Fix for Viewer occasionally getting stuck in drag select mode
+* Fix for Client crashes when deleting objects
+* Fix for Pay dialog is corrupted when attempting to pay while in busy mode
+* Fix for Not able to delete objects which contain no copy items
-Other changes:
-* Added TypeAheadTimeout to settings.xml
-** configures the timeout for type-ahead select in combo boxes and scroll lists
+Release Notes for Second Life 1.13.4(5) March 6, 2007
+=====================================
Bug fixes:
-* Fixed carriage returns appearing as '?' in group notices
-* Fixed tab order in customize avatar floater
-* Fixed rezzing objects that overflow the parcel's prim allowance sends objects to (0,0,0)
-* Fixed language drop-down list showing '???' for Japanese and Korean in en-us
-* Fixed TOS floater HTML text overlaying plain text version
-* Fixed weird border and truncated OK button on system messages when clicked
-* Fixed group notices containing broken subjects/formatting and duplicated text
-* Fixed rearranging tear-off menus
-* Fixed selecting text in read-only fields
-* Fixed Home key not toggling fly when chat field is empty
-* Fixed Friends list multi-selection
-
-Release Notes for Second Life 1.13.1(4) December 13, 2006
+* Fixed 'Select Texture' applying changes to all sides
+* Fixed textures resizing outside their window
+* Fixed object rezzing being affected by Object Entry rules instead of Create Object rules
+* Fixed drag select mode sticking after mouse button release
+* Fixed a client crash when viewing objects
+* Fixed content icon for sounds and animations added to an object
+* Fixed texture request for textures quickly cycling between visible and not visible
+* Fixed several failure cases for offline IM-to-email
+* Fixed retrieval of group member list
+* Fixed landmark resizing after tear-off
+* Fixed ability to delete objects containing no-copy items
+* Fixed single items being created in tabbed window
+
+
+Release Notes for Second Life 1.13.4(4) February 28, 2007
=====================================
-UI changes:
-* Hitting enter now clicks the currently-focused button, or the default button if there is one
-** If a button has an orange highlight, Enter will press it
-* Ctrl-W closes the currently-focused floater
-* Ctrl-[ and Ctrl-] now move through preferences tabs
-* Esc closes menus, then defocuses floaters, then resets the camera position
-* By default, hitting enter in an empty chatbar no longer closes the chatbar
-** Turn on the 'close chat after hitting return' preference if you want this behavior
-* Arrow keys always control the avatar when the chat bar is empty, regardless of the status of the 'arrow keys move avatar when chatting' preference
-* Enter closes and opens highlighted inventory folder
-* Can move through radio options using left/right as well as up/down
-* Give focus to the IM text field when you reopen it
-* IM window doesn't close if you hit Ctrl-T when it's unfocused
-* Floaters handle all keystrokes when focused
-** Hitting Enter won't chat when focus is on the UI
-* Ctrl-Tab and Tab will get you (almost) anywhere
-* Ctrl-Tab cycles through floaters, toolbars, etc.
-** Floaters are cycled in the order they were opened, and reordered so that it's easy to switch between the two most recent
-* Hitting TAB when nothing has focus goes to chat bar, if available
-* Opening a floater automatically puts focus there
-* Focus appearance now makes more sense: focused floaters have opaque backgrounds, and lightened title bars; unfocused floaters are transparent
-* Clicking in world (or hitting ESC) will remove focus from the UI, and make all floaters transparent
-* Alt key access to menus. Hold down Alt and navigate via the underlined letters
-* Visual integration of context-sensitive controls with the bottom panel
-* Improved focus behavior of notifications and group notifications, and their appearance
-* Type-ahead find in listboxes and combo boxes
-** When focus is on the widget, type the first few letters of the desired selection and the selection will move as you type
-** Very useful for long lists such as the Friends list or the Script function combo box
-** Type-ahead find is visually indicated with an oblong highlight.
-* Type-ahead find cycles through the items in a list or combo that have the same first letter
-** Example: repeatedly typing 'r' will put selection on each element of the list that starts with 'r'
-* 'Cone of context' for color pickers and texture pickers
-* Objects visually lose focus when application loses focus, and regain them when application is refocused
-* Storage of last focused item in floaters, so that focusing a floater puts focus back where it was last time you were using it
-* Mini-map can't take focus, nor can camera/movement controls
-* Have to double-click on the mini-map to open the main map
-* Mousewheel zooms on the mini-map, and the scale limits allow you to zoom in more
-* IM tabs opened by you are added to the right of the open tab (IM tabs opened by other means open to the far right, as before)
-* Removed tab characters from most text editors except for the notecard and script editors
-* Deprecated Alt-WASD for moving the camera (these keys now select the appropriate menus)
-** Use Alt-arrow keys instead
-* Hitting enter when in preferences will now close and commit them
-
-Other changes:
-* 'Access from Mainland' renamed to 'Public Access' in Estate Tools
-* 'Contact Support' link added to Help menu pointing to Second Life Knowledge Base contact page
+Changes:
+* Moving your avatar no longer deselects objects in build mode automatically
Bug fixes:
-* Focus is correctly paced in the text field when opening and reopening search
-* Using arrow keys to select radio group options now commits selection
-* Enter key now works correctly on dropdown boxes
-* Fixed duplicate IMs or IM-to-email being sent (repeatedly)
-* Fixed objects disappearing if they were made flexible via script
-* Fixed a cause of failed estate-to-estate teleports
-* Generalized flexi implementation for attachments and non-attachments
-* Fixed several integer fields being displayed as float values
-* Fixed pie menu options for non-English languages
-* Fixed group notice panel not accepting text
-* Removed incorrect notice that friends could track each other on the map (they cannot)
-* Fixed bug affecting color of scripted/resident chat
-* Temp objects can enter full parcels
-* Fixed client crash when closing tabbed gestures without saving
-* Fixed boolean values in Debug Settings not remembering the correct values
-* Fixed strange characters in popup messages in Preferences
-* Fixed incorrect counts for simulator prim usage
-* Fixed floating point drift (and prim drift) in llTargetOmega
-* Fixed textures on HUDs not rezing until right-clicked
-* Fixed friends list scrolling to the top after a change
-* Fixed a crash caused by tearing off menus in the script editor
-* Fixed ability to add yourself to your friends list
-* Fixed offline notification that a resident left your group (should not send email)
-* Fixed object contents 'Copy to Inventory' and 'Copy and Wear'
-* Fixed typed-ahead for Search and Friends list
-* Fixed Recent Items showing all folders
-* Fixed Texture Picker showing all folders
-* Fixed failed estate-to-estate teleports
-* Fixed a memory leak on the Intel Mac
-* Fixed greyed Terms of Service agree/disagree options if user cancelled TOS notice
-
-Release Notes for Second Life 1.13.0(10) December 4, 2006
+* Fixed edit crosshairs moving while crossing region boundary
+* Fixed text entry in Mac/Linux embedded browser
+
+Release Notes for Second Life 1.13.4(3) February 26, 2007
=====================================
Bug fixes:
-* Fixed Search dialog running queries when opened
-* Fixed inventory showing not-worn items as worn
-* Fixed IM window resizing when closing/opening session
-* Fixed missing languages in Preferences
-* Linux client's crash-reporter is now fully-functional by default
+* Fixed single-click failure for objects
+* Fixed status bar obscured when debug is off
+* Fixed escape key behavior
+* Fixed strange object counts in About Land when no parcel selected
+* Fixed avatar animations when editing an attached object
+* Fixed Offer Teleport appearing in your own profile
+* Fixed incorrect date display in group notices
-Release Notes for Second Life 1.13.0(8) November 29, 2006
+Release Notes for Second Life 1.13.4(2) February 26, 2007
=====================================
-New Features:
-* Added a new tab to the Profile called Web which will show a web page of the profile owner's choice
-* URLs in chat and IM are now clickable links
-** Supports http:// and https:// as well as secondlife:// links
-* New options in Preferences/IM allow you to log IMs and/or chat
-** The log file location can be specified
-** Additional option 'show end of last IM conversation'
-* Notecards now support international characters
-* Updated Friends UI
-** Set permissions for your friends to see you online/on the map
-** Conference IM multiple friends by multi-selecting in the Friends list
-** See who has granted you permission to modify their objects in the Friends list
-* New option in Preferences > Communication to set whether you show as online in Search
-* Estate visibility
-** The estate visibility concept is simplified to just access permissions
-** All classifieds and events are now viewable regardless of estate location on the grid. The Teen Grid and Main Grid are still separate.
-** All regions within a grid now viewable, regardless of estate
-** Online status is no longer hidden based on visibility of an estate
+Bug fixes:
+* Clicking a menu a second time closes the menu
+* Fixed closing a blue dialog closes all dialogs
+* Fixed retrieval of archived group proposals
+* Fixed Ctrl-P shortcut failing when inventory has focus
+* Fixed objects using llGiveInventoryList spamming owner when recipient is Busy
+* Fixed no copy objects disappearing when given via llGiveInventory to a Busy avatar
+
+Release Notes for Second Life 1.13.4(1) February 21, 2007
+=====================================
+Changes:
+* User inworld money transaction history floater removed
+** Transaction history can be viewed via secondlife.com
+* Added 'Empty Lost and Found' option
+* Added 'Use Custom Port' option to Preferences to specify network port
+* Objects set for sale are Buy Copy by default (instead of Buy Original)
+* Increased Classified's maximum L$ payable from 99999 to 999999
+* Added '?' button next to Partner field explaining partnering
LSL changes:
* New script commands
-** integer llGetObjectPrimCount(key id)
-*** Returns the prim count for any specific object in a sim
-** list llGetParcelPrimOwners(vector pos)
-*** Returns a list of up to 100 agents who own objects in the parcel, and the number of objects they own
-** integer llGetParcelMaxPrims(vector pos, integer sim_wide)
-*** If sim_wide is TRUE, returns the total maximum number of prims allowed on the parcel
-*** If sim_wide is FALSE, returns the maximum number of prims this individual parcel supports
-** integer llGetParcelPrimCount(vector pos, integer category, bool sim_wide)
-*** If sim_wide is TRUE, returns the number of objects on all parcels owned by the same owner in the category specified
-*** If sim_wide is FALSE, returns the number of objects on this specific parcel in the category specified
-*** Categories are:
-**** PARCEL_COUNT_TOTAL: all prims on the parcel(s)
-**** PARCEL_COUNT_OWNER: prims owned by the parcel owner
-**** PARCEL_COUNT_GROUP: prims not owned by the parcel owner, but set to or owned by the group of the parcel
-**** PARCEL_COUNT_OTHER: prims not in GROUP or OWNER
-**** PARCEL_COUNT_TEMP: All temp on rez prims
-**** PARCEL_COUNT_SELECTED: All selected or ridden prims
-** list llGetParcelDetails(vector pos, list details)
-*** Returns of a list of the details (PARCEL_DETAILS_NAME, _DESC, _OWNER, _GROUP, _AREA) in the order they are in the details list, for the parcel at pos
-
-Other changes:
-* IM shows resident's name and '...' if they are typing
-* Chat, IM, and script chat (llSay/llWhisper/llShout) max length increased to 1023 characters
-* '/me' emotes properly in IM (e.g. '/me laughs' becomes '[your name] laughs')
-* Busy Mode message is now account-specific
-* URL color is an option in Preferences
-* Texture asset IDs no longer sent to the viewer unless necessary
-* Adding performance logging based on agent frame rate
-* A confirmation prompt now appears when emptying inventory trash
-* Altered scripted movement/resizing of prims to better resemble 1.12 smooth behavior
-* Korean characters should display properly on Mac OS X
-* Linux client's cache, settings and logs now live in ~/.secondlife
-* Options for Proxy removed from Preferences
-** These options were intended for Mozilla only and did not function
-* Vehicles permitted to enter object entry blocked areas
-* New README-client.txt file for Linux client
-* Several viewer rendering performance improvements
-* Parcel owners can block objects from entering their parcels
-* Option added to allow only group members to create objects on parcel
-* Fixed a simulator crash related to region for sale information
-* Updated Mozilla libraries to 1.8.0.8
-* Linux client now has a working crash-reporter
+** void llSetLinkPrimitiveParams( integer linknumber, list rules )
+** void llSetLinkTexture( integer linknumber, string texture, integer face )
+* More documentation is available using Help > Scripting Guide...
Bug fixes:
-* You can now correctly fly a vehicle above the ban limits of a parcel when banned
-* Fixed Linux crash when displaying certain UI elements
-* 'Upload Image' will now ignore multiple clicks to avoid duplicate uploads
-* First names which are numbers will now be shown correctly in chat
-* Fixed the ability for group owners to remove members from roles
-* Fixed a crashing bug with tearing off menus from scripting window
-* Fixed a viewer crash when right-clicking on certain objects
-* Fixed a viewer crash when changing prim shape
-* Fixed a client crash with 'Hide Selected'
-* Fixed a simulator crash
-* Fixed scripted chat length longer than 255 characters
-* Fixed URLs that wrap over two lines
-* Fixed clickable area of URLs
-* Fixed login screen drawing incorrectly before loading
-* Fixed release of camera controls when exiting a vehicle
-* Fixed level-of-detail issues in flexible prims
-* Fixed tori LOD to reduce gaps
-* Fixed Prev and Next buttons for Find -> People and Find -> Groups
-* Fixed object size not updating with spinners or mousewheel
-* Fixed detaching attachments when the parcel at <0,0,0> is full
-* Fixed a client crash with textures that are not sized in powers of 2
-* Fixed a client crash when adjusting cut on a multicolored object
-* Fixed mouse cursor when hovering over URLs
-* Fixed text that isn't a URL becoming hyperlinked
-* Fixed attachments disappearing beyond 25m
-* Fixed viewer crash on MacOS when running in Thousands of colors
-* Can now edit attachments even when a parcel is full
-* Fixed some bugs related to banning users from estates
-* Script energy recalculated on link and unlink
-* Multiple inventory items opened at once open in one tabbed window
-* Fixed IM Pending flashing on conversations that are already open
-* Fixed Live Help messages being inserted in the wrong place in chat history
-* Fixed blank low resolution terrain after clearing cache
-* Fixed a cause of ghosted objects (full parcels and region boundaries)
-* Fixed gestures being opened multiple times
-* Fixed object buoyancy when setting STATUS_ROTATE_X,Y,and Z in a list
-* Fixed reduced priority of textures in the distance
-* Fixed Unicode characters in busy mode string resetting Preferences
-* Fixed a client crash with bumpmaps on Macs
-* Fixed a client crash with landmarks in tabbed windows
-* Fixed a client crash when right-clicking a payment notification window
-* Fixed a client crash for llLoadURL
-
-Release Notes for Second Life 1.12.3(6) November 1, 2006
-=====================================
-Other changes:
-* Updated Mozilla libraries
-* Clear Cache button also clears Mozilla cache
-* Mac Mozilla browser profile no longer saved inside application bundle
-* Browser agent string now identifies Second Life and SL Client version
-* Mozilla lib version added to Help->About Second Life
-* Added new user clothing to local files (speeds up appearance for new avatars)
-* Terms of Service cannot be agreed to until the page has fully loaded
+* Fixed taken items not appearing until relog
+* Fixed friends list abilities not being applied to friends
+* Fixed objects failing to attach when selected from a distance
+* Fixed replies to offline IM-to-email messages
+* Fixed renaming a no-copy clothing item during Make New Outfit
+* Fixed rezzed objects appearing at (0,0,0) if you have create rights, but are not wearing your title
+* Fixed modify for gestures/notecards in a prim
+* Fixed incorrect context menus for items in an object
+* Fixed confirmation dialog when uploading immages, sounds, animations, or snapshots
+* Fixed a viewer crash while taking an object
+* Fixed a viewer crash after modifying a script inside a prim
+* Fixed a viewer crash in People search with Picks tab
+* Fixed a script runtime error (list inside a while/do-while loop)
+* Fixed login screen not loading unless cache is cleared
+* Fixed Ctrl-W not closing snapshot floater
+* Fixed Ctrl-W not giving focus to next window
+* Fixed Search->Places not showing public estate parcels while on private estate
+* Fixed LSL converting numbers in body of email to 0
+* Fixed rejection of avatars as sit targets
+* Fixed blurry web browser widgets with UI Scale != 1.0
+* Fixed notecards opened in tabbed windows extending outside the preview window
+* Fixed opening multiple object inventory items not using tabbed windows
+* Fixed accidental selection of highly transparent objects
+* Fixed keyboard focus after selecting function dropdown in script editor
+* Fixed Build button in toolbar disabled on land where 'Create Objects' is set to group, even when avatar is in the correct group
+* Fixed Buy Dialog displays incorrect Prim Count when using prim multipliers
+* Fixed folders not retaining their closed status once opened in inventory
+* Fixed IMs of type IM_BUSY_AUTO_RESPONSE ignore mute
+* Fixed World->Buy Land menu failures
+* Fixed Friends list not displaying online friends on login if 'Can see my online status' is disabled
+* Fixed menus remaining open when something else is clicked
+* Fixed menus taking focus when leaving alt-zoom
+* Fixed accidental loss of no-copy textures by applying them to a prim
+* Fixed members of a group cannot set their home location when land is only set to a group and not deeded
+* Fixed sitting avatar standing up when close are dragged onto the avatar
-Bug fixes:
-* Fixed changes not saved on gestures when edited within a prim
-* Fixed missing local HTML Loading files
-* Fixed new clothing appearing white on other avatars
-* Fixed auto-detect hardware staying on for Mac
-* Fixed login screen not launching links in new window on PPC Mac
-* Fixed resolution box remaining grey after switching from windowed to fullscreen
-* Fixed 'Auto-detect' not unchecking when user changes aspect ratio
-* Fixed RSS feed refresh obscuring news headlines
-* Fixed script command window not dismissing once it has been scrolled
-* Fixed colored noise on Quicktime when first playing back a movie
-* Fixed clickable area for objects in notecards
-* Fixed Debug Settings not saving changes
-
-Linux fixes:
-* Assorted library fixes
-* Work around an X bug in full-screen mouse handling
-
-Release Notes for Second Life 1.12.3(4) October 25, 2006
+Linux client fixes:
+* Added Linux embedded Mozilla client
+* Fixed Linux client crash on shutdown
+
+Release Notes for Second Life 1.13.3(2) January 30, 2007
=====================================
-New features:
-* New login interface pulls images and information from the web site
-* 'Languages' added to Profile
-
-Other changes:
-* Simulator savestates save to local disk in certain situations (grid shutdown, rolling restart, etc.)
-** This should decrease downtime for grid shutdown/startup
-* Terms of Service displayed in HTML
-* Sell Land floater no longer accepts commas/decimals (which were causing price failures)
-* Renamed Land -> Options -> Show in Search (was Show in Find Places)
-* Mac resize-window widget made easier to locate and use
-* Estate managers can now terraform
+Changes:
+* It is no longer possible to only search for online residents
+* Online status is no longer indicated in the Search -> People results list
+** The online status inside the profile shows 'Currently Online' or remains blank
+*** Friends can see your Online status if you give permission via the Friends list
+*** Anyone can see your Online status if 'Make my online status visible only to my Friends' is unchecked
-Bug fixes:
-* Closing/opening the inventory clears the search bar
-* Improved load balancing for Orientation Islands
-* Corrected network throttle to relax it after it has been tightened
-* Fixed tooltips appearing for invisible windows
-* Fixed dropping image on your profile sending image to last profile viewed
-* Fixed About Land's Return Objects for objects owned by parcel owner
-* Fixed window resize arrows on Mac for different UI Sizes
-* Fixed Enter key immediately sending Mac crash reports
-* Fixed IM window resizing on closing/opening a session
-* Fixed login failing when group name/title contains multi-byte characters
-* Fixed animations being uploaded with spread fingers
-* Fixed texture repeats when an object is stretched
-* Fixed 'share with group' when deselected/selected
-* Fixed a client crash with blank profile URLs
-* Fixed inability to open second IM session from Find->People
-* Fixed web profiles not automatically loading
-* Fixed misaligned/disappearing Appearance sliders
-* Fixed a client crash while changing the aspect ratio
-* Fixed a client crash with Path Cut Begin
-* Fixed Top Scripts always showing a total script time of 0.0
-* Fixed buttons in Profile (Pay, Rate, etc.)
-* Fixed an incorrect uninstaller error message
-* Fixed Rename to Folder Name in Appearance
-* Fixed ampersand in Busy message causing preferences to revert to default
+Release Notes for Second Life 1.13.3(58716) March 1, 2007
-Linux client fixes:
-* File upload/download dialogs (windowed mode only) +more
-* URLs now launch in an external web browser
-* ESD is now the default audio device where available
-* Fix numeric keypad handling
-* Fix hang when detecting corrupt cache
+Fixes:
+* Fix for: Textures that quickly cycle between visible and not visible never getting successfully requested
+* Fix for: Textures applied via 'Select Texture' are applied to all sides.
+* Fix for: Object selection moves to the next sim when crossing region boundary while objects are selected
+* Fix for: Landmarks window can be resized
+* Fix for: Textures should remain within their window when the viewer is resized
+* Fix for: Single items are being created in a tabbed window
+* Fix for: 'linux mozilla embedding support should be compile-time optional'
+
+Beta Grid Only:
+* Fix for: Object Entry rules block rezing of objects.
+
+Release Notes for Second Life 1.13.3(58603) March 1, 2007
+
+Changes:
+(Note: this change was introduced several versions ago be we forgot to put this in the release notes)
+* The following 4 particle commands have been deprecated for some time, and no longer work:
+** llMakeExplosion http://wiki.secondlife.com/wiki/LlMakeExplosion
+** llMakeFire http://wiki.secondlife.com/wiki/LlMakeFire
+** llMakeFountain http://wiki.secondlife.com/wiki/LlMakeFountain
+** llMakeSmoke http://wiki.secondlife.com/wiki/LlMakeSmoke
+** Please use llParticleSystem (http://wiki.secondlife.com/wiki/LlParticleSystem) instead.
+* Set the executable name back to SecondLifeFirstLook.exe (1.13.3(58537) inadvertently set it to SecondLifePreveiw.exe
-Release Notes for Second Life 1.12.2(7) October 11, 2006
-=====================================
-Other changes:
-* llPushObject restrictions now prevent objects from being pushed
-* Rolling update warnings are now broadcast repeatedly (5m, 4m, 3m, 2m, 60s, 45s, 30s, and 15s) and with earlier warning
+Fixes:
+* Fixed a bug with image requests, should reduce the latency when loading uncached images
+* Rediced frame rate spikes when spinning.
+* Fixed bad normals on tapered geometry.
+* Fix for bump maps not taking effect immediately.
+* Fix for animated texture coordinates not resetting when animation stops.
+
+Release Notes for Second Life 1.13.3(58537) February 27, 2007
+
+Changes:
+* Modified texture animations to use hardware acceleration
+* Improved framerate when rotating in certain areas that were lagging
+
+From the main development branch since 1.13.3.2
+(note: some of these were introduced in previous First Look releases)
+
+Changes:
+* User inworld money transaction history floater removed
+** Transaction history can be viewed via secondlife.com
+* Added 'Empty Lost and Found' option
+* Added 'Use Custom Port' option to Preferences to specify network port
+* Objects set for sale are Buy Copy by default (instead of Buy Original)
+* Increased Classified's maximum L$ payable from 99999 to 999999
+* Added '?' button next to Partner field explaining partnering
Bug fixes:
-* 'Share with group' checkbox now correctly shows the permission setting
-* Fixed a viewer crash with Top Scripts and 'Show Beacon'
-* Fixed a viewer crash when creating a landmark
-* Fixed a bug where inventory was showing unworn items as worn
-* Fixed 'Copy to Inventory' and 'Copy and Wear'
-* Fixed a bug where descending into a parcel where you were banned would bounce you to 0,0
-* 'Return All' and 'Return Selected' in Estate Tools now function correctly
-* Group members no longer blocked from group-owned parcel if payment levels blocked
-* Estate owners/managers are now exempt from access lists on their own estates
-* Error message 'you cannot log in until (time)' now displays correct time
-* Offline friendship message no longer says '(resident) has to be your friend...'
-* MacBook Pro: Function keys should no longer cause arrow keys to be 'stuck'
-* Reduced occurrences of gray avatars and avatars with 'missing image' textures
-* Several simulator and dataserver crash fixes
-* Lots of changes to make the client/server protocols more secure
+* Fixed single-click failure for objects
+* Fixed status bar obscured when debug is off
+* Fixed escape key behavior
+* Fixed strange object counts in About Land when no parcel selected
+* Fixed avatar animations when editing an attached object
+* Fixed Offer Teleport appearing in your own profile
+* Fixed incorrect date display in group notices
+* Clicking a menu a second time closes the menu
+* Fixed closing a blue dialog closes all dialogs
+* Fixed retrieval of archived group proposals
+* Fixed Ctrl-P shortcut failing when inventory has focus
+* Fixed objects using llGiveInventoryList spamming owner when recipient is Busy
+* Fixed no copy objects disappearing when given via llGiveInventory to a Busy avatar
+* Fixed taken items not appearing until relog
+* Fixed friends list abilities not being applied to friends
+* Fixed objects failing to attach when selected from a distance
+* Fixed replies to offline IM-to-email messages
+* Fixed renaming a no-copy clothing item during Make New Outfit
+* Fixed rezzed objects appearing at (0,0,0) if you have create rights, but are not wearing your title
+* Fixed modify for gestures/notecards in a prim
+* Fixed incorrect context menus for items in an object
+* Fixed confirmation dialog when uploading immages, sounds, animations, or snapshots
+* Fixed a viewer crash while taking an object
+* Fixed a viewer crash after modifying a script inside a prim
+* Fixed a viewer crash in People search with Picks tab
+* Fixed a script runtime error (list inside a while/do-while loop)
+* Fixed login screen not loading unless cache is cleared
+* Fixed Ctrl-W not closing snapshot floater
+* Fixed Ctrl-W not giving focus to next window
+* Fixed Search->Places not showing public estate parcels while on private estate
+* Fixed LSL converting numbers in body of email to 0
+* Fixed rejection of avatars as sit targets
+* Fixed blurry web browser widgets with UI Scale != 1.0
+* Fixed notecards opened in tabbed windows extending outside the preview window
+* Fixed opening multiple object inventory items not using tabbed windows
+* Fixed accidental selection of highly transparent objects
+* Fixed keyboard focus after selecting function dropdown in script editor
+* Fixed Build button in toolbar disabled on land where 'Create Objects' is set to group, even when avatar is in the correct group
+* Fixed Buy Dialog displays incorrect Prim Count when using prim multipliers
+* Fixed folders not retaining their closed status once opened in inventory
+* Fixed IMs of type IM_BUSY_AUTO_RESPONSE ignore mute
+* Fixed World->Buy Land menu failures
+* Fixed Friends list not displaying online friends on login if 'Can see my online status' is disabled
+* Fixed menus remaining open when something else is clicked
+* Fixed menus taking focus when leaving alt-zoom
+* Fixed accidental loss of no-copy textures by applying them to a prim
+* Fixed members of a group cannot set their home location when land is only set to a group and not deeded
+* Fixed sitting avatar standing up when close are dragged onto the avatar
Linux client fixes:
- * MMX-enhanced image decoding
- * Resolve crash: 'undefined symbol: glXGetProcAddress'
- * No longer lose streaming music after visiting a dead stream
- * Startup script now exposes alpha-testing configuration options
- * Disable troublesome GL extensions by default. See startup script to enable.
+* Added Linux embedded Mozilla client
+* Fixed Linux client crash on shutdown
-Release Notes for Second Life 1.12.1(13) September 27, 2006
-=====================================
-Bug fixes:
-* Fixed Macintosh autoupdater
-** Older clients should use the website download if issues are experienced
+Release Notes for Second Life 1.13.3(58390) February 23, 2007
-Release Notes for Second Life 1.12.1(12) September 27, 2006
-=====================================
-Other changes:
-* Updated Mac custom cursor file format and API
-* Alt-Shift-H (Windows) / Opt-Shift-H (Macintosh) hides HUD Attachments
-* Clock labelled as Pacific Time (previously SLT)
+Fixes:
+* Fix for HUD objects being invisible on attach
+* Fix for HUD objects not repositioning
+* Fix for attachments getting left behind
+* Fix for flexible objects not updating on modification.
+* Fix for slow scrolling textures and tiny prims being invisible.
+* Fix for not being able to change viewer language in firstlook
+* Fix for Viewer crash when switching between full screen and windowes with multiple threads
+* Fix for additional texture bandwidth usage in First look
+* Fix for low detail terrain textures failing to load
+* Fix for picking through transparent objects.
+* Fix for Lighting turning bright orange or red intermittantly in rendering pipeline focus preview.
+* Fix for dismissing one blue dialogs dismisses all blue dialogs
+* Fix for Avatar not changing anmations while editing an attached object
+* Fix for Object counts in About Land change when floater loses focus
+* Fix for clicking a menu a second time not closing it
+* Fix for First Look viewer interacting poorly with Norton Antivirus (Note: Unless you tell Norton Anti Virus to exclude the Second Life cache directory, it will delay texture loading, but should no longer affect frame rate)
+* Fix for crash on 945G when editing objects.
+
+Release Notes for Second Life 1.13.3(58185) February 20, 2007
-Bug fixes:
-* Fixed typos in Buy Land Floater
-* Fixed typo when joining a group with a fee
-* Fixed texture picker opening all folders
-* Fixed a 'level of detail' issue causing performance degradation
-* Inventory window refreshes after renaming a folder
-* Classified asks to save when OK is selected
-* Top Scripts shows a list when opened
-* Trash doesn't close when purging an item
-* Torn IM windows can be minimized
-
-Release Notes for Second Life 1.12.1(11) September 22, 2006
-=====================================
-Other changes:
-* Added new option when buying land back from a group you have contributions in:
-** 'Remove XXXX square meters of contribution from group'
-*** This option is checked by default, and will remove group contribution associated with the parcel
-** This option (and its default setting) should greatly reduce accidental land holdings and mis-billings
-* New keyboard commands for IM windows:
-** Ctrl-[ and Ctrl-] toggle between IM windows
-** Ctrl-Shift-W closes the active IM window
-* Textures can no longer be uploaded or displayed at 2048x2048 resolution
-** Prevents several crash issues
-** Existing textures above 1024x1024 will be decoded at 1024x1024 resolution
-* Estate owners/managers are exempt from access lists (but can still be banlisted)
-* Script and Notecard windows remember their last size
-* Offline Instant Messages that have not been received for ninety (90) days will be deleted
-* Double-clicking a name in Friends list once again opens an IM for that resident
-* Pay button restored to Friends list
+Changes:
+* Fixed a texture prioritization bug
+* Sped up texture cache maintenance on startup
Bug fixes:
-* Fixed tooltips getting cut off
-* Fixed dead space above chat/toolbar
-* Fixed classified ads showing 'Ad placed: Not yet published'
-* Fixed extra object in Buy Copy floater
-* Fixed mute via profile
-* Fixed warning 'assigndangerousmemberwarning is missing from alerts.xml'
-* Fixed Script Warning window causing visual glitches
-* Fixed 'Apply to Selection' button in Edit Terrain
-* Fixed Bug Report window mentioning abuse report
-* Fixed a copy-paste method that was failing in Inventory
-* Fixed 'Attach To->' from inventory
-* Fixed 'Return All' and 'Return Selected'
-* Fixed highlight selection for several text windows
-* Right-clicking a large inventory folder no longer creates a large client/server load
-* Next button appears for Search -> Events when there are over 200 events
-* Search Events should sort properly
-* Texture Mapping no longer has repeated options
-* Copy option is available when selecting multiple items in Inventory
-* Buy Currency appears correctly in Buy Land floater
-* Open contents floater moves with window resize
-* Folders can once again be purged from trash
-* Texture picker remembers 'Apply Immediately' setting
-* Animations can have their properties changed
-* Scripted \n nextline option now being handled correctly by chat history/debug channel and onscreen
-* New scripts no longer show 'New Script' in editor window (i.e. after being renamed)
-* Fixed several client crashes
-
-Release Notes for Second Life 1.12.1(10) September 21, 2006
-=====================================
-Bug fixes:
-* 'Missing Image' and gray avatar textures should not get stuck any more
-* New presence code to address friends list not updating correctly, etc.
-* Fix for Group IM failures caused by the presence issue fix
-* Improvements to automated defenses against replicator attacks
-* Performance improvements when multiple objects are being returned
+* Fixed accidental loss of no-copy texture when applied to a prim
+* Fixed incorrect context menu for items inside an object
+* Fixed Linux client crash on startup
+* Fixed Ctrl-W failing to give focus to the next window
+* Fixed renaming no-copy object during Make New Outfit
+* Fixed group members cannot set home when land is Set to group but not deeded
+* Lost and Found now has an Empty folder option
-Release Notes for Second Life 1.12.1(9) September 14, 2006
-=====================================
-Bug fixes:
-* Fixed incorrect llTargetOmega() spin rates
-* Fixed IM window resizing on close/open
-* IM window saves size across sessions
-* Inventory can once again be dropped on any part of a resident's profile
-* Pay dialog scales for larger buttons
-* Fixed Top Scripts/Top Colliders highlighting incorrect object
-* Fixed mute for scripted give inventory (particularly for group-owned objects)
-* Further improvements when editing long notecards or scripts
-
-Release Notes for Second Life 1.12.1(8) September 14, 2006
-=====================================
-Bug fixes:
-* Fixed an issue causing large amounts of packet loss to occur when downloading textures
-* Resolved a crash when seeing other avatars
-* Fixed a bug causing low framerate in some regions
+Release Notes for Second Life 1.13.3(58100) February 16, 2007
+
+New feature:
+* Linux client features embedded Mozilla
+
+Changes:
+* Texture Pipeline Architecture
+** Significant redesign of texture pipeline
+** Improved texture caching
+** Unlimited texture cache size
+** Texture cache can be relocated
+* Render Pipeline Architecture
+** Significant changes to render pipeline
+** Introduction of Vertex Buffer Objects for improved stability
+** Better batching of geometry for improved render performance (on some systems)
+** Alpha sorting changes to improve performance
+* Added display that shows intersection of prims with translation plane when building.
+* Objects set for sale default to 'Buy Copy' instead of 'Buy Original'
-Release Notes for Second Life 1.12.1(7) September 13, 2006
-=====================================
Bug fixes:
-* Resolved an issue where avatar textures would not bake
+* Fixed a viewer crash when taking an object
+* Fixed viewer not loading after logout if cache is not cleared
+* Closing window passes focus to the next window
+* Fixed blurry web browser widgets
+* Fixed notecards in tabbd window extending outside the preview window
+* Fixed web browser widgets blurred when UI scale != 1.0
+* Updated link to Help -> Scripting Wiki
+* Fixed viewer crash when opening a script at the same time as other inventory objects
+* Fixed Build not enabling for group members on land where only group members can build
+* Fixed World -> Buy Land menu failures
+* Fixed menus not closing when other things are clicked
+* Fixed objects rezed from Library, edited, and taken to inventory being placed in Library
-Release Notes for Second Life 1.12.1(6) September 13, 2006
-=====================================
-New features:
-* Estate access and ban lists boosted up to 300 entries (previously 63)
-* Estate land management now allows subdividing and joining of parcels
-* Right-clicking an animation allows you to play it from inventory
-* The ability to stop animations has been added to the Tools menu
-** The 'Play Locally' and 'Play in World' buttons (when an animation is opened in Inventory) change to 'Stop' when clicked
-** This allows you to stop the animation while it's playing
-
-Other changes:
-* Residents can be invited to your Friends list, even while they are offline
-* Particle systems now 'muted' when a resident is muted
-* Double-clicking a group name in a profile now opens that group's info page
-* Added texture dimensions to all texture preview windows
-* Added 'Mute' to inventory transfer notifications. Clicking mute will put that person on your mute list.
-* Added timestamp and land resale/join information to About Land -> Covenant
-* Changed the default draw distance for low end machines to improve frame rate
-* Help menu now has a link to Release Notes
-* Improved OS detection for Windows XP 64Bit, Windows 2003 Server, and Windows Vista
-* Changed back-end mechanics for storing avatar textures for improved performance and robustness
-LSL changes:
-* llHTTPRequest throttling changed
-** Requests are now limited to once per second per primitive.
+Release Notes for Second Life 1.13.3(58018) February 14, 2007
-Bug fixes:
-* Find -> Places categories now match the ones you can select in About Land
-* Fixed text for 'Land can be bought direct' at low resolutions
-* Fixed scaling for several UI elements at low resolutions
-* Location coordinates are now correct when the World Map is resized
-* Inventory search ignores events that make items bold
-* Removed a leftover reference to telehubs
-* Improved parcel ban detection at high altitudes
-* Fixed World map hover tips when taking a screenshot
-* Fixed group object owner ID in llHTTPRequest() headers
-* Fixed an inability to leave groups on Mac/Linux
-* Fixed double-click in UI
-* Fixed ESC not leaving Mouselook
-* Texture tab shows repeats per meter
-* Fixed appearance of View -> Property Lines
-* Restored 'Deny access by payment status' to Estate menu
-* Fixed llDialog buttons not performing the correct actions
-* Fixed fullbright not working
-* No-copy objects can be deleted through the pie menu
-* Fixed the keyboard shortcut for View -> Look at last chatter
-* Fixed chatbar not opening with Enter key
-* Fixed World -> My Land not displaying the land you own
-* Items can be set for sale/not for sale in inventory
-* Corrected 'restrict pushing' wording in UI to be more consistent
-* Friends list shows who has modify rights
-* Fixed Pay dialog displaying incorrect payee
-* Fixed right-click Create in inventory places inventory in wrong folder
-* Can once again change properties of an item in an objects contents
-* Restored missing menu items from inventory menu; menus can now be torn off
-* Fixed bandwidth gauge - no longed pegged in the red zone at low usage
-* Fixed land showing For Sale to Anyone even when a specific resident is chosen
-* Fixed right-click on inventory folders showing wrong options
-* Fixed Rate label in pie menus
-* Fixed sorting for Top Objects and Top Scripts
-* Fixed terrain detail in Preferences displaying wrong setting
-* Fixed Tools -> Select Only My Objects/Moveable Objects
-* Avatars in Adult Second Life can remove all clothing once again
-* Removed under-clothing menus for Teen Second Life avatars
-* Reordered Place categories for consistency across UI
-* Various UI adjustments and tweaks
-* Corrected various UI typos
-* Fixed several client crashes
-
-Release Notes for Second Life 1.12.0(15) August 25, 2006
-=====================================
-Bug fixes:
-* Fixed a viewer crash when opening the bug reporter.
+Changes:
+* Removed particle throttling; while a performance win in some areas, caused too many bad artifacts
-Release Notes for Second Life 1.12.0(14) August 25, 2006
-=====================================
-New features:
-* The map Beacon has been visually enhanced
-* 'Mute by Name' allows you to manually add objects or Residents to your Mute List
-
-Other changes:
-* Usability improvements to the Abuse Reporter UI layout
-** Dialog boxes removed from AR snapshots
-** Added field for Abuse Location (if different from present location)
-* Abuse reports concerning copyright claims will be directed to the DMCA protocol
-* Abuse Reports require all fields (except object selection) to be filled in (prevents blank Abuse Reports)
-* 'Wear Clothing Now' is off by default when buying clothing
-* Reinstated Parcel Size to the About Land dialog
-* Automatic Edit Camera Movement preference is now Off by default
+Fixes:
+* VWR-108 Fix for out of bounds error in avatar vertex shader attribute array.
+* Fix for toggling selection beam
+* Fix for LOD issues with small objects.
+* Fix for planar guide grid swimming around in local grid mode.
+* Fxed Texture priorities when turning around in place
-Bug fixes:
-* Fixed Z coordinate being ignored when teleporting via the map
-* Fixed group members with only the invite ability inviting others to Everyone
-* Fixed script event change() not firing when script dropped into object inventory
-* Fixed assigning a group role to multiple people
-* Fixed group General tab updating display of member roles
-* Fixed Gesture text fields only accepting a single character
-* Fixed the Reset button for covenants
-* Text fields should now scroll one character at a time
-* Fixed Fast Timers scrolling off the screen
-* Fixed Group Land not always displaying all parcels
-* Fixed sun flashing orange when right-clicking an object
-* Fixed Residents being asked to buy passes to land that is also restricted to group members
-* Group members with 'ban list' ability can now change 'deny by payment method'
-* Fixed Help->Manage My Account
-* Instances of 'Find' renamed to 'Search' for consistency
-* No-fly icon checks the parcel's fly restriction instead of the avatar's (displays in god mode)
-* UI space for money display increased to prevent overlap
-* Fixed parcel names overlapping UI elements at the top of the screen
-* Fixed textures stretching while Stretch Textures is off
-
-Release Notes for Second Life 1.12.0(13) August 23, 2006
-=====================================
-New features:
-* Support for Covenants
-** Covenants may now be associated with Estates
-** These documents detail land use rules and restrictions
-** Available in About Land
-** Covenants are visible to anyone
-
-* Estate Land Sales
-** Estate owners/managers are now able to sell land to other Residents for L$
-** 'Allow Land Transfer' option in 'Region/Estate > General' tab enables Estate Owners and Managers to sell parcels, and buyers to resell them
-*** Estate owners/managers may specify rules for land sale and usage in Covenants
-*** Buyers of the land on private estates may be limited in their ability to re-sell land depending on settings determined by Estate owner/manager
-** Group land on estate has been changed
-*** Land on estates, owned by a group or by anyone other than the estate owner, can no longer be subdivided or joined
-*** Only parcels that are owned by the estate owner can be subdivided
-*** Only Estate Owners and Estate Managers can subdivide the estate owner's parcels
-
-* Group Enhancements
-** Group limit per user increased from 15 to 25
-** Group member minimum reduced from 3 to 2
-** The group information user interface has been redesigned
-
-* Group Notices
-** Group notices can be created in the 'Group Information > Notices' tab
-** Group notices can include an attachment
-** Group notices are sent to all group members
-** Members may opt to not receive these notices in the 'Group Information > General' tab
-** Members can browse the last 30 days of notice history
-** Members with IM to Email set will receive these notices offline
-
-* Group Roles
-** Groups can be configured using the 'Group Information > Members & Roles' tab
-** A group is now composed of up to 10 user-configured Roles
-*** The 'Everyone' and 'Owner' roles count for these purposes
-* Group powers to return objects from parcels are divided based on Owned by group, Set to group, and Not group related
-** Residents may hold more than one Role in a group
-** Each role can be configured to allow certain group Actions
-** Each role gets its own title
-** Members of a group are assigned to Roles to define the Actions they can perform in that group
-** Group members are always a part of that group's 'Everyone' role
-** Example:
-*** Current groups have two Roles: 'Everyone' and 'Officer'
-*** All group members can do Actions allowed by the 'Everyone' role, such as voting on proposals
-*** Only group members assigned to the 'Officer' role can do Actions such as invite new members
-** Groups now have a special role: 'Owner'
-** 'Owners' have full control over the group, but cannot remove other 'Owners'
-** Promoting group members to Owner warns user that this change is irreversible
-** The last owner of a group cannot leave without selecting a successor
-** Current groups will have members selected to be 'Owners' based on the first to match these rules:
-*** 1) A founder in the group
-*** 2) Officers with 512 or more sq. m. land contributed
-*** 3) All officers
-*** 4) Nobody (no 'Owner' role is created)
-*** Owner and Everyone roles cannot be renamed
-
-* New Sell Land interface
-** Specify sell price, Sell To resident, and sale of objects all simultaneously
-** Residents muse specify a specific resident or manually select 'Sell to Anyone' before the dialog is completed
-** This new interface should greatly reduce accidental land sales
-
-Improved Snapshot Interface
-* 'Freeze Frame' toggle added to snapshots
-** Remove checkbox to restore old snapshot behavior
+Release Notes for Second Life 1.13.3(57947) February 13, 2007
-LSL changes:
-* Scripts will not start running until the 'Running' box is manually checked
-* The following script commands now work on group-owned objects:
-** llGiveInventory
-** llGiveInventoryList
-** llInstantMessage
-** llRemoteLoadScriptPin
-
-Other changes:
-* Selection effect particles can now be disabled independently (Tools->Show Selection Beam)
-* Group-owned objects can be muted
-** If a group owned object offers you an item, the blue box will say 'Keep', 'Discard', and 'Mute'
-** Mute adds the group to your Mute List and all objects owned by that group will be muted
-** Muted group owned objects will not be able to IM you or send you items
-* Group elections have been removed
-* Provided greater visibility for any fee incurred while joining a group
-** Group membership now uses the membership fee at the time of invitation instead of the fee at the time invitation is accepted
-* Group-owned objects that you have control over are now highlighted on the mini-map.
-* 'Show in Group List' checked by default
-* Added ability to deny access to Parcels/Estates based on Pay Info Level
-* 'Grant Modify Rights' has been changed to be more comprehensive
-** You can now allow the person being granted rights greater freedom of modification
-** Friends list now shows when modify rights are granted
-* Default attachment point changed from head to right hand
-* Reversed positions of 'Take Copy' and 'Wear' in pie menu
-* Icon for push restriction added
-* 'Edit Land' is now 'Edit Terrain'
-* Altered formula for temp-on-rez limits (generally to be more permissive)
-* Temp vehicles are not reclaimed until all passengers unsit
-* Improved wording of error message while joining parcels on an estate (parcels must be owned by estate owner)
-* Parcel joins and subdivides uncheck the For Sale box
-* Ban list now disables when a parcel is sold
-* In-world links to the Forums and Wiki now point to the Knowledge Base and Blogs
-* Clicking in text fields in Edit Tools selects the input position without highlighting the entire field
-* Ctrl-F now puts keyboard focus on the Find text box
-* Added art for eyedropper
-* 'No Fly' is visible in God mode
-* Font information for scroll list headers can now be provided by the user
-* Improved look and feel of several windows
+Changes:
+Significant changes to texture prioritization
-Bug fixes:
-* Fixed tracking residents via Show on Map
-* Fixed default button highlighted while other button selected
-* Fixed button states during mouseovers
-* Fixed dragging item into object contents
-* Fixed a simulator crash with notices
-* Fixed persistence of Global Time in Region/Estate
-* Fixed incoming IMs stealing focus from Abuse and Bug reports
-* Fixed a client crash with 'Set Scripts Not Running in Selection'
-* Fixed alignment of Search window panels
-* Improved detection of rapid mouse clicks
-* Camera and movement controls do not gain keyboard focus
-* Camera and movement controls persist across sessions
-* Fixed a client crash while connecting to downed simulator
-* Fixed a client crash with F1 Help
-* Frontmost floater gets Return key only if it has keyboard focus
-* Improved appearance of alpha objects in Object Silhouette mode
-* Objects with 'No Copy' permissions should delete to owner
-* Fixed client crash with chat bar and 'Kick user from estate'
-* Fixed Name and Description highlighting after Return is pressed
-* Fixed Z-coordinate in classified ads
-* Fixed LSL XML-RPC for attachments breaking on teleport
-* Fixed returned object continuing to affect sim prim usage
-* Crash Reporter remembers its previous settings
-* Fixed client crash and asset loss while editing complex objects
-* Fixed artifacts in LOD changes
-* Dragging past the end of a text field no longer scrolls the text
-* Aspect ratio corrects when toggling fullscreen
-* Edit menu now has a detach option for skirt layers
-* Fixed a cause of slow rezzing of textures and tree details
-* Fixed an issue that would prevent simstate autosaves
-* Fixed a bug causing region crossing performance to degrade in 1.11
-* Fixed text in several windows and improved tool tips
-* Several actions have been updated so that the Apply button can be used when modifying them
-* Group creation failure no longer charges you for creating group
-* Client no longer crashes when copying a selection in the Create menu
-* Clicking Cancel when changes need to be applied no longer stops Second Life client from closing
-* Crossing a region into a parcel where you are banned no longer causes avatar to float through parcel or go into orbit
-* Corrected issue causing Estate Owners to get unexpected results when teleporting to a parcel where they are banned on their estate
-* Last item in a list can once again be highlighted and selected
-* Declined objects are correctly removed from recipients inventory
-* Delete key now works as expected in the Tools > Edit window
-* Client no longer crashes when right clicking certain parcels
-* Group names cannot be shorter than 4 characters or longer than 35 characters
-* Abandoned parcels on the mainland now properly report owner as 'Governor Linden'
-* Client no longer crashes when user selects land over two parcels, then clicks 'About Land'
-* Autoreturn settings can now be changed
-* User is now notified when receiving snapshots, notecards, and landmarks
-* Apply now updates all changed elements in a window
-* Correct various 'Apply' buttons to grey out once clicked
-* Group-owned objects appear as 'owned' in About Land -> Objects when on group owned land
-* Ctrl-D (duplicate) now works on group-owned objects with the proper permissions
-* Land owners can always fly on their parcel (unless the entire sim restricts flight)
-* Fixed a bug that caused the Create Group dialog to discard all data if the group name already exists
-* Resolved numerous issues with scroll lists causing information not to load or be displayed improperly
-* Group contribution no longer displayed as a negative number
-* Mainland parcels now displayed in map overlay regardless of your location
-* Residents can now retrieve no-modify objects they own from other people's parcels
-* Resolved several exploits
+Fixes:
+Fix for object flicker.
+Fix for HUD objects not moving properly when viewer is resized.
+Fix for scale handles not updating on mouse drag.
+Fix for undo not working.
+Fix for dark foot shadows.
+Fix for tree picking alpha threshold too low.
+Fix for stars staying out during the day.
-Linux client fixes:
-* No linux client specific fixes in this version
+Release Notes for Second Life 1.13.3(57876) February 9, 2006
+
+Changes:
+Improved LOD and alpha sorting
+Improved edits reverting with linked objects
+
+Fixes:
+* Fixed a few crashes
+* 'Clear Cache' was failing if the cache location was on a changed
+* 'Clear Cache' was not deleting the texture cache on OSX
+* Some Textures were never caching correctly
+
+Release Notes for Second Life 1.13.3(57837) February 8, 2006
+
+Fixes:
+* Fixed a major issue with texture requests where textures that first appeard behind you were not getting requested until you moved closer or zoomed in on them
+* Fixed a bug where 'skip this message' settings were not being remembered
+* Fixed several particle bugs, including some OSX specifix ones
+* Fixed several crash bugs
+
+Release Notes for Second Life 1.13.3(57787) February 7, 2006
+
+Notes:
+* This release will clear the cache on startup to eliminate potentially corrupt caches
+Changes:
+* Reduced the frequency of drag-edit updates to reduce the likelihood of changes reverting due to missed updates
+Fixes:
+* Fixed a bug where small flexi objects were sometimes stuck floating around an avatar
+* Fixed a significant memory leak
+* Fixed some issues with the texture cache
+* Fixed a bug where textures that were partially mapped to objects were not rezing
+* Fixed several crash bugs
+* Wind volume slider now takes effect immediately
+
+Release Notes for Second Life 1.13.3(57679) February 5, 2006
+Fixes:
+* Fix: Animating textures (using llSetTextureAnim) do not update their pixel area
+* Fix for disappearing hud objects.
+* Fix for yellow avatars on some ATI cards.
+* Fix for flexi LOD issues
+* Fix for stars visible with 'Force Sun'
+* Several crash bugs fixed
+Fixes not specific to 'First Look'
+* Fix for library objects returning to library after being taken from world
+* Added help button for partner info in profile panel
+* Added inventory cache verification to reduce bugs due to cache corruption
+
+Release Notes for Second Life 1.13.2(57573) February 1, 2006
+
+Fixes:
+* Fixed: Chat text fadeout bug
+* Fixed: Yellow fog in snapshots
+* Fixed: Hardware detection incorrect for ATI X1900 and other cards
+* Fixed: Several crash bugs
+* Fixed: Missing login screen
+* Fixed: Avatar preview in image update missing
+
+Release Notes for Second Life 1.13.2(57463) January 30, 2006
+
+Changes:
+* Cache location can be set by residents
+* Textures from last scene are pre fetched, improving loading speed of inital speed
+
+Fixes:
+* Fixed: Avatars seated on objects don't move with objects
+* Fixed: More issues with prim selection silhouettes
+* Fixed: HUDS with transparent textures disappear when camera goes underwater
+* Fixed: Slowdown rendering Alpha objects
+* Fixed: Client crashes attempting to move a HUD attachment
+
+Release Notes for Second Life 1.13.2(57270) January 26, 2006
+Changes:
+Added display that shows intersection of prims with translation plane when building.
+Fixes:
+* Fixed crash when changing lighting detail.
+* Fixed silhouette highlight render bug.
+
+Release Notes for Second Life 1.13.2(57208) January 25, 2006
+Changes:
+* IMPORTANT: 'First Look' now maintains its own settings. When this version is installed, settings will all be set to default values.
+* IMPORTANT: Uninstalling 'First Look' will no longer remove any user settings
+* More optimizations
+* Stability improvements
+Fixes:
+* Fixed bright red/orange ambient lighting at night
+* Fixed right-clicking on avatar names
+* Fixed LOD flicker on trees
+* Fixed missing avatar from upload window
+* Fixed bug with HUD attachments not appearing or rezing at the correct resolution
+* Fixed bug wit llSetPos
+* Fixed prim selection silhouettes
+* Fixed white invisiprim bug
+* Fixed smoke texture bug
+* Fixed alpha sorting issues
+* Fixed Highlight Transparent
+
+Release Notes for Second Life 1.13.2(56900) January 18, 2006
+Changes:
+* More framerate improvements
+* Improved texture LOD calculation
+* 'Enable VBO' option now defaults to on in most cases, and no longer conflicts with similar trunk version option
+Fixes:
+* Appearance of other avatars not changing
+* Shiny Brightness and Darkness don't work
+* Shiny doesn't work on black objects
+* Textures are failing to load to 100% clarity when repeats per face is less than 1.00
+* Low res 'cutout' images not transparent
+
+Release Notes for Second Life 1.13.1(56671) January 11, 2006
+Changes:
+* Texture Pipeline Architecture
+** Significant redesign of texture pipeline
+** Improved texture caching
+** Unlimited texture cache size
+* Render Pipeline Architecture
+** Significant changes to render pipeline
+** Introduction of Vertex Buffer Objects for improved stability
+** Better batching of geometry for improved render performance (on some systems)
+** Alpha sorting changes to improve performance
+** Better particle system limits
diff --git a/linden/indra/newview/res-sdl/arrow.BMP b/linden/indra/newview/res-sdl/arrow.BMP
deleted file mode 100644
index a8f6da6..0000000
Binary files a/linden/indra/newview/res-sdl/arrow.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/arrowcop.BMP b/linden/indra/newview/res-sdl/arrowcop.BMP
deleted file mode 100644
index 1a26a0d..0000000
Binary files a/linden/indra/newview/res-sdl/arrowcop.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/arrowcopmulti.BMP b/linden/indra/newview/res-sdl/arrowcopmulti.BMP
deleted file mode 100644
index 48f153c..0000000
Binary files a/linden/indra/newview/res-sdl/arrowcopmulti.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/arrowdrag.BMP b/linden/indra/newview/res-sdl/arrowdrag.BMP
deleted file mode 100644
index cd868ee..0000000
Binary files a/linden/indra/newview/res-sdl/arrowdrag.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/circleandline.BMP b/linden/indra/newview/res-sdl/circleandline.BMP
deleted file mode 100644
index 284ae8b..0000000
Binary files a/linden/indra/newview/res-sdl/circleandline.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/cross.BMP b/linden/indra/newview/res-sdl/cross.BMP
deleted file mode 100644
index 0b4672d..0000000
Binary files a/linden/indra/newview/res-sdl/cross.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/hand.BMP b/linden/indra/newview/res-sdl/hand.BMP
deleted file mode 100644
index 2a092fb..0000000
Binary files a/linden/indra/newview/res-sdl/hand.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/ibeam.BMP b/linden/indra/newview/res-sdl/ibeam.BMP
deleted file mode 100644
index 820904a..0000000
Binary files a/linden/indra/newview/res-sdl/ibeam.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/ll_icon.BMP b/linden/indra/newview/res-sdl/ll_icon.BMP
deleted file mode 100644
index 4a44aaf..0000000
Binary files a/linden/indra/newview/res-sdl/ll_icon.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/llarrow.BMP b/linden/indra/newview/res-sdl/llarrow.BMP
deleted file mode 100644
index a8f6da6..0000000
Binary files a/linden/indra/newview/res-sdl/llarrow.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/llarrowdrag.BMP b/linden/indra/newview/res-sdl/llarrowdrag.BMP
deleted file mode 100644
index cd868ee..0000000
Binary files a/linden/indra/newview/res-sdl/llarrowdrag.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/llarrowdragmulti.BMP b/linden/indra/newview/res-sdl/llarrowdragmulti.BMP
deleted file mode 100644
index fb528bc..0000000
Binary files a/linden/indra/newview/res-sdl/llarrowdragmulti.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/llarrowlocked.BMP b/linden/indra/newview/res-sdl/llarrowlocked.BMP
deleted file mode 100644
index 0aaa441..0000000
Binary files a/linden/indra/newview/res-sdl/llarrowlocked.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/llgrablocked.BMP b/linden/indra/newview/res-sdl/llgrablocked.BMP
deleted file mode 100644
index 8474396..0000000
Binary files a/linden/indra/newview/res-sdl/llgrablocked.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/llno.BMP b/linden/indra/newview/res-sdl/llno.BMP
deleted file mode 100644
index 284ae8b..0000000
Binary files a/linden/indra/newview/res-sdl/llno.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/llnolocked.BMP b/linden/indra/newview/res-sdl/llnolocked.BMP
deleted file mode 100644
index 61f0170..0000000
Binary files a/linden/indra/newview/res-sdl/llnolocked.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/lltoolcamera.BMP b/linden/indra/newview/res-sdl/lltoolcamera.BMP
deleted file mode 100644
index c961d7a..0000000
Binary files a/linden/indra/newview/res-sdl/lltoolcamera.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/lltoolcreate.BMP b/linden/indra/newview/res-sdl/lltoolcreate.BMP
deleted file mode 100644
index 08a4a93..0000000
Binary files a/linden/indra/newview/res-sdl/lltoolcreate.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/lltoolfocus.BMP b/linden/indra/newview/res-sdl/lltoolfocus.BMP
deleted file mode 100644
index afb90a9..0000000
Binary files a/linden/indra/newview/res-sdl/lltoolfocus.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/lltoolgrab.BMP b/linden/indra/newview/res-sdl/lltoolgrab.BMP
deleted file mode 100644
index f2ac68b..0000000
Binary files a/linden/indra/newview/res-sdl/lltoolgrab.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/lltoolland.BMP b/linden/indra/newview/res-sdl/lltoolland.BMP
deleted file mode 100644
index 64e6365..0000000
Binary files a/linden/indra/newview/res-sdl/lltoolland.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/lltoolpan.BMP b/linden/indra/newview/res-sdl/lltoolpan.BMP
deleted file mode 100644
index ffbef21..0000000
Binary files a/linden/indra/newview/res-sdl/lltoolpan.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/lltoolpipette.BMP b/linden/indra/newview/res-sdl/lltoolpipette.BMP
deleted file mode 100644
index 2d27118..0000000
Binary files a/linden/indra/newview/res-sdl/lltoolpipette.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/lltoolrotate.BMP b/linden/indra/newview/res-sdl/lltoolrotate.BMP
deleted file mode 100644
index dd84673..0000000
Binary files a/linden/indra/newview/res-sdl/lltoolrotate.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/lltoolscale.BMP b/linden/indra/newview/res-sdl/lltoolscale.BMP
deleted file mode 100644
index 882515e..0000000
Binary files a/linden/indra/newview/res-sdl/lltoolscale.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/lltooltranslate.BMP b/linden/indra/newview/res-sdl/lltooltranslate.BMP
deleted file mode 100644
index d084f6a..0000000
Binary files a/linden/indra/newview/res-sdl/lltooltranslate.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/lltoolzoomin.BMP b/linden/indra/newview/res-sdl/lltoolzoomin.BMP
deleted file mode 100644
index e4e46cc..0000000
Binary files a/linden/indra/newview/res-sdl/lltoolzoomin.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/lltoolzoomout.BMP b/linden/indra/newview/res-sdl/lltoolzoomout.BMP
deleted file mode 100644
index 7f95838..0000000
Binary files a/linden/indra/newview/res-sdl/lltoolzoomout.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/sizenesw.BMP b/linden/indra/newview/res-sdl/sizenesw.BMP
deleted file mode 100644
index 559579f..0000000
Binary files a/linden/indra/newview/res-sdl/sizenesw.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/sizens.BMP b/linden/indra/newview/res-sdl/sizens.BMP
deleted file mode 100644
index 8373077..0000000
Binary files a/linden/indra/newview/res-sdl/sizens.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/sizenwse.BMP b/linden/indra/newview/res-sdl/sizenwse.BMP
deleted file mode 100644
index 6d069fa..0000000
Binary files a/linden/indra/newview/res-sdl/sizenwse.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/sizewe.BMP b/linden/indra/newview/res-sdl/sizewe.BMP
deleted file mode 100644
index 878df45..0000000
Binary files a/linden/indra/newview/res-sdl/sizewe.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/toolbuy.BMP b/linden/indra/newview/res-sdl/toolbuy.BMP
deleted file mode 100644
index a00bdb2..0000000
Binary files a/linden/indra/newview/res-sdl/toolbuy.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/toolopen.BMP b/linden/indra/newview/res-sdl/toolopen.BMP
deleted file mode 100644
index 93c7e44..0000000
Binary files a/linden/indra/newview/res-sdl/toolopen.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/toolpay.BMP b/linden/indra/newview/res-sdl/toolpay.BMP
deleted file mode 100644
index 314b93a..0000000
Binary files a/linden/indra/newview/res-sdl/toolpay.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/toolpickobject.BMP b/linden/indra/newview/res-sdl/toolpickobject.BMP
deleted file mode 100644
index 25469fc..0000000
Binary files a/linden/indra/newview/res-sdl/toolpickobject.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/toolpickobject2.BMP b/linden/indra/newview/res-sdl/toolpickobject2.BMP
deleted file mode 100644
index 09df69e..0000000
Binary files a/linden/indra/newview/res-sdl/toolpickobject2.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/toolpickobject3.BMP b/linden/indra/newview/res-sdl/toolpickobject3.BMP
deleted file mode 100644
index fc28698..0000000
Binary files a/linden/indra/newview/res-sdl/toolpickobject3.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/toolsit.BMP b/linden/indra/newview/res-sdl/toolsit.BMP
deleted file mode 100644
index ca911ec..0000000
Binary files a/linden/indra/newview/res-sdl/toolsit.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/wait.BMP b/linden/indra/newview/res-sdl/wait.BMP
deleted file mode 100644
index 26dec59..0000000
Binary files a/linden/indra/newview/res-sdl/wait.BMP and /dev/null differ
diff --git a/linden/indra/newview/res-sdl/working.BMP b/linden/indra/newview/res-sdl/working.BMP
deleted file mode 100644
index 26dec59..0000000
Binary files a/linden/indra/newview/res-sdl/working.BMP and /dev/null differ
diff --git a/linden/indra/newview/res/arrow.BMP b/linden/indra/newview/res/arrow.BMP
deleted file mode 100644
index a8f6da6..0000000
Binary files a/linden/indra/newview/res/arrow.BMP and /dev/null differ
diff --git a/linden/indra/newview/res/arrow.cur b/linden/indra/newview/res/arrow.cur
deleted file mode 100644
index d11b688..0000000
Binary files a/linden/indra/newview/res/arrow.cur and /dev/null differ
diff --git a/linden/indra/newview/res/arrowcop.cur b/linden/indra/newview/res/arrowcop.cur
deleted file mode 100644
index 8b5902c..0000000
Binary files a/linden/indra/newview/res/arrowcop.cur and /dev/null differ
diff --git a/linden/indra/newview/res/arrowcopmulti.cur b/linden/indra/newview/res/arrowcopmulti.cur
deleted file mode 100644
index 2620522..0000000
Binary files a/linden/indra/newview/res/arrowcopmulti.cur and /dev/null differ
diff --git a/linden/indra/newview/res/arrowdrag.BMP b/linden/indra/newview/res/arrowdrag.BMP
deleted file mode 100644
index cd868ee..0000000
Binary files a/linden/indra/newview/res/arrowdrag.BMP and /dev/null differ
diff --git a/linden/indra/newview/res/arrowdrag.cur b/linden/indra/newview/res/arrowdrag.cur
deleted file mode 100644
index 77b2d1a..0000000
Binary files a/linden/indra/newview/res/arrowdrag.cur and /dev/null differ
diff --git a/linden/indra/newview/res/bitmap2.bmp b/linden/indra/newview/res/bitmap2.bmp
deleted file mode 100644
index 770b075..0000000
Binary files a/linden/indra/newview/res/bitmap2.bmp and /dev/null differ
diff --git a/linden/indra/newview/res/circleandline.BMP b/linden/indra/newview/res/circleandline.BMP
deleted file mode 100644
index 284ae8b..0000000
Binary files a/linden/indra/newview/res/circleandline.BMP and /dev/null differ
diff --git a/linden/indra/newview/res/circleandline.cur b/linden/indra/newview/res/circleandline.cur
deleted file mode 100644
index 00050f5..0000000
Binary files a/linden/indra/newview/res/circleandline.cur and /dev/null differ
diff --git a/linden/indra/newview/res/install_icon.BMP b/linden/indra/newview/res/install_icon.BMP
deleted file mode 100644
index 09df573..0000000
Binary files a/linden/indra/newview/res/install_icon.BMP and /dev/null differ
diff --git a/linden/indra/newview/res/install_icon.ico b/linden/indra/newview/res/install_icon.ico
deleted file mode 100644
index 5cfc56e..0000000
Binary files a/linden/indra/newview/res/install_icon.ico and /dev/null differ
diff --git a/linden/indra/newview/res/ll_icon.BMP b/linden/indra/newview/res/ll_icon.BMP
deleted file mode 100644
index 3a9964c..0000000
Binary files a/linden/indra/newview/res/ll_icon.BMP and /dev/null differ
diff --git a/linden/indra/newview/res/ll_icon.ico b/linden/indra/newview/res/ll_icon.ico
deleted file mode 100644
index c35a3fa..0000000
Binary files a/linden/indra/newview/res/ll_icon.ico and /dev/null differ
diff --git a/linden/indra/newview/res/llarrow.BMP b/linden/indra/newview/res/llarrow.BMP
deleted file mode 100644
index a8f6da6..0000000
Binary files a/linden/indra/newview/res/llarrow.BMP and /dev/null differ
diff --git a/linden/indra/newview/res/llarrow.cur b/linden/indra/newview/res/llarrow.cur
deleted file mode 100644
index 8a922d7..0000000
Binary files a/linden/indra/newview/res/llarrow.cur and /dev/null differ
diff --git a/linden/indra/newview/res/llarrowdrag.BMP b/linden/indra/newview/res/llarrowdrag.BMP
deleted file mode 100644
index cd868ee..0000000
Binary files a/linden/indra/newview/res/llarrowdrag.BMP and /dev/null differ
diff --git a/linden/indra/newview/res/llarrowdrag.cur b/linden/indra/newview/res/llarrowdrag.cur
deleted file mode 100644
index 77b2d1a..0000000
Binary files a/linden/indra/newview/res/llarrowdrag.cur and /dev/null differ
diff --git a/linden/indra/newview/res/llarrowdragmulti.cur b/linden/indra/newview/res/llarrowdragmulti.cur
deleted file mode 100644
index f0853b8..0000000
Binary files a/linden/indra/newview/res/llarrowdragmulti.cur and /dev/null differ
diff --git a/linden/indra/newview/res/llarrowlocked.BMP b/linden/indra/newview/res/llarrowlocked.BMP
deleted file mode 100644
index 0aaa441..0000000
Binary files a/linden/indra/newview/res/llarrowlocked.BMP and /dev/null differ
diff --git a/linden/indra/newview/res/llarrowlocked.cur b/linden/indra/newview/res/llarrowlocked.cur
deleted file mode 100644
index 5b81f14..0000000
Binary files a/linden/indra/newview/res/llarrowlocked.cur and /dev/null differ
diff --git a/linden/indra/newview/res/llgrablocked.BMP b/linden/indra/newview/res/llgrablocked.BMP
deleted file mode 100644
index 8474396..0000000
Binary files a/linden/indra/newview/res/llgrablocked.BMP and /dev/null differ
diff --git a/linden/indra/newview/res/llgrablocked.cur b/linden/indra/newview/res/llgrablocked.cur
deleted file mode 100644
index 73dea15..0000000
Binary files a/linden/indra/newview/res/llgrablocked.cur and /dev/null differ
diff --git a/linden/indra/newview/res/llno.BMP b/linden/indra/newview/res/llno.BMP
deleted file mode 100644
index 284ae8b..0000000
Binary files a/linden/indra/newview/res/llno.BMP and /dev/null differ
diff --git a/linden/indra/newview/res/llno.cur b/linden/indra/newview/res/llno.cur
deleted file mode 100644
index 00050f5..0000000
Binary files a/linden/indra/newview/res/llno.cur and /dev/null differ
diff --git a/linden/indra/newview/res/llnolocked.BMP b/linden/indra/newview/res/llnolocked.BMP
deleted file mode 100644
index 61f0170..0000000
Binary files a/linden/indra/newview/res/llnolocked.BMP and /dev/null differ
diff --git a/linden/indra/newview/res/llnolocked.cur b/linden/indra/newview/res/llnolocked.cur
deleted file mode 100644
index dfa4a05..0000000
Binary files a/linden/indra/newview/res/llnolocked.cur and /dev/null differ
diff --git a/linden/indra/newview/res/lltoolcamera.BMP b/linden/indra/newview/res/lltoolcamera.BMP
deleted file mode 100644
index c961d7a..0000000
Binary files a/linden/indra/newview/res/lltoolcamera.BMP and /dev/null differ
diff --git a/linden/indra/newview/res/lltoolcamera.cur b/linden/indra/newview/res/lltoolcamera.cur
deleted file mode 100644
index e0f1946..0000000
Binary files a/linden/indra/newview/res/lltoolcamera.cur and /dev/null differ
diff --git a/linden/indra/newview/res/lltoolcreate.BMP b/linden/indra/newview/res/lltoolcreate.BMP
deleted file mode 100644
index 08a4a93..0000000
Binary files a/linden/indra/newview/res/lltoolcreate.BMP and /dev/null differ
diff --git a/linden/indra/newview/res/lltoolcreate.cur b/linden/indra/newview/res/lltoolcreate.cur
deleted file mode 100644
index 716f328..0000000
Binary files a/linden/indra/newview/res/lltoolcreate.cur and /dev/null differ
diff --git a/linden/indra/newview/res/lltoolfocus.BMP b/linden/indra/newview/res/lltoolfocus.BMP
deleted file mode 100644
index afb90a9..0000000
Binary files a/linden/indra/newview/res/lltoolfocus.BMP and /dev/null differ
diff --git a/linden/indra/newview/res/lltoolfocus.cur b/linden/indra/newview/res/lltoolfocus.cur
deleted file mode 100644
index 7b38ad3..0000000
Binary files a/linden/indra/newview/res/lltoolfocus.cur and /dev/null differ
diff --git a/linden/indra/newview/res/lltoolgrab.BMP b/linden/indra/newview/res/lltoolgrab.BMP
deleted file mode 100644
index f2ac68b..0000000
Binary files a/linden/indra/newview/res/lltoolgrab.BMP and /dev/null differ
diff --git a/linden/indra/newview/res/lltoolgrab.cur b/linden/indra/newview/res/lltoolgrab.cur
deleted file mode 100644
index 4484001..0000000
Binary files a/linden/indra/newview/res/lltoolgrab.cur and /dev/null differ
diff --git a/linden/indra/newview/res/lltoolland.BMP b/linden/indra/newview/res/lltoolland.BMP
deleted file mode 100644
index 64e6365..0000000
Binary files a/linden/indra/newview/res/lltoolland.BMP and /dev/null differ
diff --git a/linden/indra/newview/res/lltoolland.cur b/linden/indra/newview/res/lltoolland.cur
deleted file mode 100644
index e22ef6c..0000000
Binary files a/linden/indra/newview/res/lltoolland.cur and /dev/null differ
diff --git a/linden/indra/newview/res/lltoolpan.BMP b/linden/indra/newview/res/lltoolpan.BMP
deleted file mode 100644
index ffbef21..0000000
Binary files a/linden/indra/newview/res/lltoolpan.BMP and /dev/null differ
diff --git a/linden/indra/newview/res/lltoolpan.cur b/linden/indra/newview/res/lltoolpan.cur
deleted file mode 100644
index 0a34866..0000000
Binary files a/linden/indra/newview/res/lltoolpan.cur and /dev/null differ
diff --git a/linden/indra/newview/res/lltoolpipette.cur b/linden/indra/newview/res/lltoolpipette.cur
deleted file mode 100644
index b478096..0000000
Binary files a/linden/indra/newview/res/lltoolpipette.cur and /dev/null differ
diff --git a/linden/indra/newview/res/lltoolrotate.BMP b/linden/indra/newview/res/lltoolrotate.BMP
deleted file mode 100644
index dd84673..0000000
Binary files a/linden/indra/newview/res/lltoolrotate.BMP and /dev/null differ
diff --git a/linden/indra/newview/res/lltoolrotate.cur b/linden/indra/newview/res/lltoolrotate.cur
deleted file mode 100644
index adbadae..0000000
Binary files a/linden/indra/newview/res/lltoolrotate.cur and /dev/null differ
diff --git a/linden/indra/newview/res/lltoolscale.BMP b/linden/indra/newview/res/lltoolscale.BMP
deleted file mode 100644
index 882515e..0000000
Binary files a/linden/indra/newview/res/lltoolscale.BMP and /dev/null differ
diff --git a/linden/indra/newview/res/lltoolscale.cur b/linden/indra/newview/res/lltoolscale.cur
deleted file mode 100644
index 4b6d20b..0000000
Binary files a/linden/indra/newview/res/lltoolscale.cur and /dev/null differ
diff --git a/linden/indra/newview/res/lltooltranslate.BMP b/linden/indra/newview/res/lltooltranslate.BMP
deleted file mode 100644
index d084f6a..0000000
Binary files a/linden/indra/newview/res/lltooltranslate.BMP and /dev/null differ
diff --git a/linden/indra/newview/res/lltooltranslate.cur b/linden/indra/newview/res/lltooltranslate.cur
deleted file mode 100644
index 2df80de..0000000
Binary files a/linden/indra/newview/res/lltooltranslate.cur and /dev/null differ
diff --git a/linden/indra/newview/res/lltoolzoomin.BMP b/linden/indra/newview/res/lltoolzoomin.BMP
deleted file mode 100644
index e4e46cc..0000000
Binary files a/linden/indra/newview/res/lltoolzoomin.BMP and /dev/null differ
diff --git a/linden/indra/newview/res/lltoolzoomin.cur b/linden/indra/newview/res/lltoolzoomin.cur
deleted file mode 100644
index 0b5d801..0000000
Binary files a/linden/indra/newview/res/lltoolzoomin.cur and /dev/null differ
diff --git a/linden/indra/newview/res/lltoolzoomout.BMP b/linden/indra/newview/res/lltoolzoomout.BMP
deleted file mode 100644
index 7f95838..0000000
Binary files a/linden/indra/newview/res/lltoolzoomout.BMP and /dev/null differ
diff --git a/linden/indra/newview/res/lltoolzoomout.cur b/linden/indra/newview/res/lltoolzoomout.cur
deleted file mode 100644
index b33e68d..0000000
Binary files a/linden/indra/newview/res/lltoolzoomout.cur and /dev/null differ
diff --git a/linden/indra/newview/res/loginbackground.bmp b/linden/indra/newview/res/loginbackground.bmp
deleted file mode 100644
index 288a0b0..0000000
Binary files a/linden/indra/newview/res/loginbackground.bmp and /dev/null differ
diff --git a/linden/indra/newview/res/newViewRes.rc b/linden/indra/newview/res/newViewRes.rc
index eeeb1eb..e544a39 100644
--- a/linden/indra/newview/res/newViewRes.rc
+++ b/linden/indra/newview/res/newViewRes.rc
@@ -227,8 +227,8 @@ TOOLPIPETTE CURSOR "toolpipette.cur"
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 1,14,0,0
- PRODUCTVERSION 1,14,0,0
+ FILEVERSION 1,15,0,2
+ PRODUCTVERSION 1,15,0,2
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -245,12 +245,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "Linden Lab"
VALUE "FileDescription", "Second Life"
- VALUE "FileVersion", "1.14.0.0"
+ VALUE "FileVersion", "1.15.0.2"
VALUE "InternalName", "Second Life"
VALUE "LegalCopyright", "Copyright © 2001-2007, Linden Research, Inc."
VALUE "OriginalFilename", "SecondLife.exe"
VALUE "ProductName", "Second Life"
- VALUE "ProductVersion", "1.14.0.0"
+ VALUE "ProductVersion", "1.15.0.2"
END
END
BLOCK "VarFileInfo"
diff --git a/linden/indra/newview/res/toolbuy.cur b/linden/indra/newview/res/toolbuy.cur
deleted file mode 100644
index c61cd76..0000000
Binary files a/linden/indra/newview/res/toolbuy.cur and /dev/null differ
diff --git a/linden/indra/newview/res/toolopen.cur b/linden/indra/newview/res/toolopen.cur
deleted file mode 100644
index 8408f7c..0000000
Binary files a/linden/indra/newview/res/toolopen.cur and /dev/null differ
diff --git a/linden/indra/newview/res/toolpay.cur b/linden/indra/newview/res/toolpay.cur
deleted file mode 100644
index 93940e9..0000000
Binary files a/linden/indra/newview/res/toolpay.cur and /dev/null differ
diff --git a/linden/indra/newview/res/toolpickobject.BMP b/linden/indra/newview/res/toolpickobject.BMP
deleted file mode 100644
index 25469fc..0000000
Binary files a/linden/indra/newview/res/toolpickobject.BMP and /dev/null differ
diff --git a/linden/indra/newview/res/toolpickobject.cur b/linden/indra/newview/res/toolpickobject.cur
deleted file mode 100644
index ba482b5..0000000
Binary files a/linden/indra/newview/res/toolpickobject.cur and /dev/null differ
diff --git a/linden/indra/newview/res/toolpickobject2.BMP b/linden/indra/newview/res/toolpickobject2.BMP
deleted file mode 100644
index 09df69e..0000000
Binary files a/linden/indra/newview/res/toolpickobject2.BMP and /dev/null differ
diff --git a/linden/indra/newview/res/toolpickobject2.cur b/linden/indra/newview/res/toolpickobject2.cur
deleted file mode 100644
index b168f8d..0000000
Binary files a/linden/indra/newview/res/toolpickobject2.cur and /dev/null differ
diff --git a/linden/indra/newview/res/toolpickobject3.BMP b/linden/indra/newview/res/toolpickobject3.BMP
deleted file mode 100644
index fc28698..0000000
Binary files a/linden/indra/newview/res/toolpickobject3.BMP and /dev/null differ
diff --git a/linden/indra/newview/res/toolpickobject3.cur b/linden/indra/newview/res/toolpickobject3.cur
deleted file mode 100644
index 457c3a6..0000000
Binary files a/linden/indra/newview/res/toolpickobject3.cur and /dev/null differ
diff --git a/linden/indra/newview/res/toolpipette.cur b/linden/indra/newview/res/toolpipette.cur
deleted file mode 100644
index b478096..0000000
Binary files a/linden/indra/newview/res/toolpipette.cur and /dev/null differ
diff --git a/linden/indra/newview/res/toolsit.cur b/linden/indra/newview/res/toolsit.cur
deleted file mode 100644
index 60b0e77..0000000
Binary files a/linden/indra/newview/res/toolsit.cur and /dev/null differ
diff --git a/linden/indra/newview/res/uninstall_icon.BMP b/linden/indra/newview/res/uninstall_icon.BMP
deleted file mode 100644
index 562b566..0000000
Binary files a/linden/indra/newview/res/uninstall_icon.BMP and /dev/null differ
diff --git a/linden/indra/newview/res/uninstall_icon.ico b/linden/indra/newview/res/uninstall_icon.ico
deleted file mode 100644
index 72bf40e..0000000
Binary files a/linden/indra/newview/res/uninstall_icon.ico and /dev/null differ
diff --git a/linden/indra/newview/secondlife setup build uma.bat b/linden/indra/newview/secondlife setup build uma.bat
new file mode 100644
index 0000000..72c27fb
--- /dev/null
+++ b/linden/indra/newview/secondlife setup build uma.bat
@@ -0,0 +1,4 @@
+@rem Invoke the script which preps then runs the installer.
+@rem This batch file is customized per grid.
+
+@"secondlife setup build.bat" --grid=uma
diff --git a/linden/indra/newview/secondlife setup build vaak.bat b/linden/indra/newview/secondlife setup build vaak.bat
new file mode 100644
index 0000000..2036c33
--- /dev/null
+++ b/linden/indra/newview/secondlife setup build vaak.bat
@@ -0,0 +1,4 @@
+@rem Invoke the script which preps then runs the installer.
+@rem This batch file is customized per grid.
+
+@"secondlife setup build.bat" --grid=vaak
diff --git a/linden/indra/newview/secondlife setup build yami.bat b/linden/indra/newview/secondlife setup build yami.bat
new file mode 100644
index 0000000..ffc8568
--- /dev/null
+++ b/linden/indra/newview/secondlife setup build yami.bat
@@ -0,0 +1,4 @@
+@rem Invoke the script which preps then runs the installer.
+@rem This batch file is customized per grid.
+
+@"secondlife setup build.bat" --grid=yami
diff --git a/linden/indra/newview/skins/textures/textures.xml b/linden/indra/newview/skins/textures/textures.xml
index 5bfb4d8..89e4f53 100644
--- a/linden/indra/newview/skins/textures/textures.xml
+++ b/linden/indra/newview/skins/textures/textures.xml
@@ -62,6 +62,8 @@
+
+
@@ -160,6 +162,7 @@
+
diff --git a/linden/indra/newview/skins/xui/de/alerts.xml b/linden/indra/newview/skins/xui/de/alerts.xml
index d56fbc1..6364ad9 100644
--- a/linden/indra/newview/skins/xui/de/alerts.xml
+++ b/linden/indra/newview/skins/xui/de/alerts.xml
@@ -1969,14 +1969,6 @@ Klicken Sie auf 'Beenden', um [SECOND_LIFE] sofort zu beenden.
Beenden
-
-
- Einzelnes Objekt zur Beurteilung auswählen
-
-
- OK
-
-
Landkauf für die Gruppe nicht möglich:
@@ -3033,14 +3025,6 @@ im Menü 'Bearbeiten'.
Ablehnen
-
-
- Eigentümer dieses Objekts kann nicht beurteilt werden, Objekt ist Eigentum einer Gruppe.
-
-
- OK
-
-
Diesen Benutzer mit welcher Meldung verjagen?
diff --git a/linden/indra/newview/skins/xui/de/menu_pie_avatar.xml b/linden/indra/newview/skins/xui/de/menu_pie_avatar.xml
index af67d3a..899057e 100644
--- a/linden/indra/newview/skins/xui/de/menu_pie_avatar.xml
+++ b/linden/indra/newview/skins/xui/de/menu_pie_avatar.xml
@@ -3,7 +3,6 @@
-
diff --git a/linden/indra/newview/skins/xui/de/menu_pie_object.xml b/linden/indra/newview/skins/xui/de/menu_pie_object.xml
index 2fae015..d73ec54 100644
--- a/linden/indra/newview/skins/xui/de/menu_pie_object.xml
+++ b/linden/indra/newview/skins/xui/de/menu_pie_object.xml
@@ -14,9 +14,7 @@
-
-
diff --git a/linden/indra/newview/skins/xui/de/panel_avatar.xml b/linden/indra/newview/skins/xui/de/panel_avatar.xml
index 8ab7725..334e464 100644
--- a/linden/indra/newview/skins/xui/de/panel_avatar.xml
+++ b/linden/indra/newview/skins/xui/de/panel_avatar.xml
@@ -83,7 +83,6 @@
name="Show on Map" />
-
diff --git a/linden/indra/newview/skins/xui/en-us/alerts.xml b/linden/indra/newview/skins/xui/en-us/alerts.xml
index aa0f67e..265fca8 100644
--- a/linden/indra/newview/skins/xui/en-us/alerts.xml
+++ b/linden/indra/newview/skins/xui/en-us/alerts.xml
@@ -960,6 +960,15 @@ based on your system configuration.
OK
+
+
+ [SECOND_LIFE] crashed while initializing graphics drivers.
+Shaders will be disabled in order to avoid some common driver errors.
+This will disable some graphics features.
+We recommend updating your graphics card drivers.
+Shaders can be re-enabled in Preferences > Graphics Detail.
+
+
Unable to connect to server.
@@ -2002,14 +2011,6 @@ Click Quit to exit [SECOND_LIFE] immediately.
Quit
-
-
- Select a single object to rate
-
-
- OK
-
-
Unable to buy land for the group:
@@ -3061,14 +3062,6 @@ from the 'Edit' menu.
Decline
-
-
- Can't rate this object's owner, object is owned by a group.
-
-
- OK
-
-
Kick this user with what message?
@@ -4259,4 +4252,40 @@ the contents of your Lost And Found folder?
When copying a SLURL to your clipboard
+
+
+ Error starting a new IM session with [RECIPIENT].
+ [REASON]
+
+
+ OK
+
+
+
+
+ Error starting a new IM session with [RECIPIENT].
+ [REASON]
+
+
+ OK
+
+
+
+
+ Error [EVENT] [RECIPIENT].
+ [REASON]
+
+
+ OK
+
+
+
+
+ Your IM session with [NAME] must close.
+ [REASON]
+
+
+ OK
+
+
diff --git a/linden/indra/newview/skins/xui/en-us/floater_about.xml b/linden/indra/newview/skins/xui/en-us/floater_about.xml
index 24b9ce3..09eba16 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_about.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_about.xml
@@ -7,11 +7,9 @@
follows="left|top|right|bottom" font="SansSerifSmall" height="168" left="6"
max_length="65536" mouse_opaque="true" name="credits_editor"
text_color="1, 1, 1, 1" text_readonly_color="1, 1, 1, 1" width="458"
- word_wrap="true">
- Second Life is brought to you by a2, Aaron, Abishai, adrian, Alberto, Alex, Alexei, Alfred, Alice, Altruima, Amber, Anastasia, Andrea, Andrew, Andy, Annette, Anthony, Aura, Avi, Babbage, Beast, beez, Belinda, Ben, Benjamin, Benny, Betsy, Bill, Blue, Bo, Bob, Brad, Branka, Brent, Brian, Bruce, Bub, Bucky, Bunny, Burgess, Buttercup, Callum, Casino, Cat, Catherine, Chadrick, Char, Charity, Charlie, Chiyo, Chris, Christopher, Civic, Claudia, Cleopetra, Cole, ColeD, Colin, Colleen, Cornelius, Cory, Cube, Cupid, Cyan, Cyn, Dan, DanceStar, Daniel, Data, Dave, David, David2, Deana, Debra, Dee, Dek, Del, Dez, Don, Donovan, Dore, Doug, drunkensufi, Dummy, dustin, Eddie, Eileen, Elena, Elle, Emily, Eric, erika, Erin, Ethan, Evan, Eve, Everett, Firefly, Flashpoint, Fordak, Frank, Fred, Fritz, Frontier, Garry, George, Gia, Ginsu, Glenn, Gulliver, Guy, Hamlet, Haney, Harmony, Harry, Helen, Hello, Henrik, Heretic, Hermia, Holly, Hungry, Hunter, Ian, Icculus, Irfan, Iris, Isaac, Isabel, IsThat, Ivy, Izzy, Jack, Jacqui, Jake, James, Jane, Janet, Jaron, Jay, Jean, Jed, Jeff, Jennifer, Jeremy, Jeska, JeskaTest, Jesse, Jill, Jim, Jimbo, Joe, John, Jon, Jonathan, Joon, Jose, Joshua, Jp, June, Justin, Karen, Kari, Karinelson, Kelly, Kelvin, Ken, Kenny, Kent, Kevin, Kona, Kyle, LaughingMan, Lauren, Lawrence, Lee, Leopard, Leprechaun, Leviathania, Lexie, Leyla, Liana, Libby, Lightfoot, Lizzie, Lock, Logan, Loki, Louie, Lucy, Luke, Madhavi, Magellan, Magenta, Makiko, Marius, Mark, Martin, Matthew, Maurice, Mayor, Melanie, Meta, Mia, Michael, MichaelFrancis, Mick, Migyeong, Mikeb, MikeT, Milo, Mitch, Mogura, Monkey, Monroe, Morpheus, Natria, Neo, Nicolas, Nicole, Nigel, Noel, Nora, Nova, Otakon, Page, Pathfinder, Patsy, Paul, Peter, Philip, Phoenix, PierreLuc, Pilouk, Pony, Professor, Qarl, Rachelle, Ramzi, Ray, Realestate, Red, Rejean, Reuben, Rheya, Richard, Rika, Rob, Robin, Roosevelt, Ross, Runitai, Ruth, Ryan, Sabin, Sally, Sam, Sarah, Satoko, Sean, Secret, Sejong, Senator, Seth, Showme, Siobhan, Sky, Sleepy, Spike, Stefan, Stephanie, Stephany, Stephen, Steve, Stryfe, sturm, Sudhi, Sunil, Swiss, Sylvain, Tanya, Tbone, Teeny, Teeple, Teresa, Tesla, Tess, Tessa, Thomas, Thrax, Thumper, Tim, Tobin, Todd, Tofu, Tom, Torley, Tracy, Uncle, Varas, Vasudha, Vektor, Ventrella, Video, Viola, Walker, Warren, Wendy, Which, Xan, Xander, Xenon, Xtreme, Yedwab, Yohan, Yool, Yoz, Yuko, Zach, Zee, Zero and many others.
-
-Thank you to the following residents for helping to ensure that this is the best version yet: AlexandriaS Aabye, devilite Aabye, Dynamqting Aabye, hellebore Aabye, Maddog Aabye, Urru Aabye, mabare Abattoir, Didi Abdallah, Elwood Abernathy, Jake Abramovich, Schort Achterbahn, Divily Ackland, JadeCharlet Ackland, Kevin Acorn, Binvis Acronym, Robert Adelaide, Atte Aderdeen, KiVanyel Adria, Krillian Adria, Mandi Adria, Butch Adzebills, Beccaboo Aero, Akasha Aferdita, Nicole Aferdita, Nero Agnomen, Hay Ah, Oxoc Ah, Sironl Ah, evokue Ahn, nycbadboy Ahn, Taan Ahn, Cyres Aida, TalNova Aji, Illusion Akula, Xen Akula, Jessa Alba, Alba Albert, kernowed Albert, Blaine Albion, AnneMarie Alcott, Bo Alcott, Cindie Alcott, Cunundrum Alcott, fighter Alcott, Jarad Alcott, Marcello Aldwych, Xenia Alemany, CellMaster Alexander, Molly Alexander, Aerotisma Alexandre, Ghostofgoat Alexandre, Took Alexandre, Ty Alexandre, Christophe Perrin / Krisp Alexandre, Adec Alexandria, Kiwi Alfa, Rowr Aliev, aivlys Allen, asclepius Allen, Aveyond06 Allen, Calvin Allen, gayfrench Allen, gender Allen, Grayson Allen, Jak Allen, Jerdog Allen, MariahMarie Allen, Metzyn Allen, Misty26 Allen, moshetzi Allen, nayara Allen, NH Allen, Pegi Allen, Ponesco Allen, Rap4rag Allen, Safer Allen, sobroke Allen, Bethann Allstar, Sloan Almendros, Ogro Almodovar, Raymondo Alonzo, Rebeca Alonzo, Omega Alphabeta, Elirien Alturas, Rick Alvarado, Golam Amadeus, Kea Amarula, Ariella Amat, Popas Amat, xxjojxx Amat, Jamie Amdahl, Helyos Ames, julies Ames, Keisha Ames, Javz Amsterdam, Kathy Amsterdam, Twistaspliff Amsterdam, darian Anabuki, Dnali Anabuki, Wes Anaconda, Serra Anansi, Britney Anatine, pax Anatine, Ranya Anatine, sientaya Anatine, Siowen Anatine, Padu Andalso, Chanel Anderson, Donna Andrews, Trixie Angel, Macphisto Angelus, meQal Anna, Aznxer Antfarm, Karlo Antonelli, Maksimilian Antonelli, Vala Antonelli, Athoni Antonioni, klement Antwerp, lildeadgirl Antwerp, GeordieJohn Anubis, KatanaBlade Anubis, Diag Anzac, Lunarlie Anzac, Picker Apogee, Azuby Apparatchik, brianica Appin, SwedenArtSheepdogs Aquacade, CaSimone Aquitaine, Dexter Aquitaine, Pericat Aquitaine, Sunshine Araw, Bino Arbuckle, Evangeline Arcadia, Niles Argus, pe Argus, BenneDJezzerette Ariantho, Karmaticdragon Ariantho, Teren Aridian, Garcia Ariel, Ina Arkin, alva Arliss, Noriyoko Arliss, Harle Armistice, Avi Arrow, Ming Arrow, Rox Arten, Razitra Artizar, Mandy Asano, Ty Asano, Kristoff Asbrink, Skye Asbrink, Threasher Asbrink, Daniel Ash, Dion Ashby, Eva Ashby, Ravenal Ashby, TOPDIME Ashby, danielluh Ashton, Deb Ashton, ach Asp, cokeser Asp, lastping Asp, Posrednik Asp, Notypewell Astro, Nargus Asturias, SiRiS Asturias, yol Asturias, ZATZAi Asturias, Animus Asylum, Sang Asylum, SomethingReal Atkey, Dakota Atlanta, Irie Atlantis, Matt Attenborough, Nirva Attenborough, CaptJosh Au, Goren Auer, Jackamo Auer, Jonathan Auer, Tisdi Auer, Chris Auk, Raven Axon, Shawn Ay, TJ Ay, ares Ayres, Cazz Ayres, Eon Ayres, Laura Ayres, zoeba Ayres, Naomi Babcock, Eldrich Babeli, Adrianna Babenco, She Babenco, sterick Babenco, corto Babii, Dia Babii, EvilCutz Babii, Flooxx Babii, Girl Babii, Imraanos Babii, Iv Babii, Lizthebabe Babii, Torrence Babii, Chrystal Babii, Sara Bachman, dzb0 Bade, Doug Bagration, Hobbit Bagration, Abert Bailey, Bambi Bailey, EveNice Bailey, Kaliya Bailey, Kriz Bailey, Leen Bailey, Leonine Bailey, Minke Bailey, Nightjaxs Bailey, Peyton Bailey, Shan Bailey, Stevo Bailey, Tariv Bailey, cream Bailly, Ezekiel Bailly, Gianna Bailly, Hells Bain, Briauna Bainbridge, AnaSofia Bakalava, Jonas Bakalava, Micki Baker, Anita Balczo, Naomi Balczo, Nathan Balder, Bibi Balhaus, Sponz Balhaus, Ainsleigh Ballinger, Dimitry Ballinger, Miriam Ballinger, Rik Ballinger, Trey Ballinger, Zagor Ballinger, Zek Ballinger, Kilara Balnarring, Maya Balut, Franz Bamaisin, Manolo Bamboo, Yuki Bamboo, Oliver Bandit, Pirate Bandit, Outy Banjo, winkler Banjo, SabreWulf Banshee, Akeela Banting, Elke Banting, Arkesh Baral, Barber Barbarossa, Samantha Barbee, Aruk Barbosa, Ayahuasca Barbosa, Bastill Barbosa, Corleone Barbosa, Padrig Barbosa, Samakh Barbosa, seat Barbosa, Topper Barbosa, Thery Bardeen, Bridgitte Bardot, Nici Barley, Annie Barnard, Josse Barnard, DB Barnes, Kitty Barnett, Threshin Barnett, Amy Barnett, Scott Baron, Jeremy Barracuda, Verbuda Barragar, Daphne Barrett, Fenleab Barrett, Lindsey Barrett, Smiley Barry, Denise Barrymore, Manuela Barrymore, Nell Barrymore, Sensation Barrymore, BraadWorst Barth, XxRevelationxX Barthelmess, Fleur Bartlett, Marina Bartlett, Lucius Bartz, Mack Bartz, Astley Bascom, dolomite Bascom, Dags Basevi, Lena Basevi, crystal Basiat, SuezanneC Baskerville, Sweetheart Baskerville, Demi Bates, Demon Bates, kane Bates, Will Bates, ShadixBear Bathgate, Carlotta Batra, Bruce Batz, Silentborn Batz, Dominik Bauer, Logan Bauer, Boz Baxter, Camryn Baxter, diesus Baxter, Drett Baxter, Gazmanjones Baxter, Kiley Baxter, Schwenny Baxter, Shimboo Baxter, Stoffe Baxter, Diamond Baxter, Gruntos Baxter, BC Bayliss, Bibi Bayliss, Backly Beam, BigFoot Beam, JuJu Beam, nati Beam, Pelgrim Beam, ELLiebob Bean, LeatherElf1 Beat, Nikky Beat, Carl Beattie, Fe Beattie, sonoma Beatty, Henri Beauchamp, TimTam Beauchamp, Conrad Beaumont, Dieudonnee Beaumont, Kitten Beaumont, Lucilla Beaumont, Odina Beaumont, PCBRANDY Beaumont, PLASTOK Beaumont, Sheree Beaumont, Sweet Beaumont, Olivier Beaumont, Busybee Beaver, Chiheb Bechir, Caspian Beck, GoldenGamer Beck, icar Beck, Jigoes Beck, Matsumoto Beck, Millie Beck, Rhino Beck, Ronor Beck, ropland Beck, wai Beck, laurionna Beckenbauer, Jeffery Beckersted, Dominick Beckham, Druu Becloud, Holger Becloud, Duce Bedlam, Beach Beebe, Manicexpression Beebe, Nicolette Beebe, Feril Beeks, BillyJoe Beerbaum, Lola Beerbaum, Pimppdog Beerbaum, Baylee Beery, DrathnotT Behemoth, Malarthi Behemoth, phoenix Behemoth, Trinity Bekkers, Dioana Bellah, KissesRhawt Bellambi, Bream Bellman, Hazel Bellow, Milo Bellow, Corvette Beltran, Lefty Belvedere, Jaden Benavente, Bianca Bender, Jeremy Bender, Mercedes Benedek, Albert Benelli, Dodi Benelli, Emili Benelli, laurette Benelli, ninake Benelli, Evazion Benelli, Elaine Bennett, Izabella Bentham, Carol Bentley, Deedrick Benton, Joel Berblinger, Lord Berchot, Pele Berchot, Marimar Berchot, Melody Beresford, Brielle Bergbahn, chrissie Bergson, Kody Bergson, Bit Berjis, Kevin Bernal, Dorie Bernstein, mystic Berry, Razza Berry, Bella Bertone, Taylor Berzin, liz Bessie, Kekken Biberman, Nicolas Biddle, Halbert Bienenstich, terrycrow Bigwig, Jasmine Bijoux, Kala Bijoux, Dano Bikcin, enzo Bikcin, Angle Binder, Cuffs Binder, Roxtor Binder, Tom Binder, Agamemnon Bing, Chalander Bing, Gigi Bing, runeking3007 Bing, Monsieur Bingyi, Angelica Biondetti, Melissa Birge, reeneebob Birmingham, Anubis Bishop, Danica Bishop, Mowesy Bisiani, Marteas Biziou, Karla Bjornson, Roxie Bjornson, Travis Bjornson, Atlwolf Blabbermouth, Rice Black, Nathan Black, Amanda Blackmountain, Disstraction Blackthorne, Miriya Blackthorne, Teagan Blackthorne, Orko Blanchard, Neural Blankes, Random Blankes, Shaura Blazer, Nethermind Bliss, dayanne Boa, Denideny Boa, lecosutre Boa, naholc Boa, NITR0US Boa, Prana Boa, RS Boa, penelope Bobak, Bad Bobbysocks, Ryuujin Boccara, Joey Bock, Elkissa Bode, Annika Boehm, Babyblues Boffin, Snodude101101 Bogan, Dirk Bogart, Jily Bogart, Pompo Bombacci, Ascanio Bonetto, Bony Bonetto, Casanova Bonetto, Cuncittina Bonetto, Frede Bonetto, Ervee Bonne, Jolanda Bonne, Poppy Bonne, Becky Book, Bibi Book, Barney Boomslang, Sam Boomslang, Steeven Boorman, Rogue Borgnine, Summer Borgnine, Rafe Borrelly, Equitus Bosch, Peter van den Bosch, tessa Bosshart, Hermione Bossy, Mr Bossy, Rhiannon Bossy, Aspen Bossy, Marisela Bouchard, Tony Bouchard, Annita Boucher, Aster Boucher, Katy Boucher, Lisae Boucher, Router Boucher, Sneaky1 Boucher, Varak Boucher, DarkAlpha Bourne, Hastings Bournemouth, bend Bowie, Lucy Bowie, Casper Box, coolbimbo Box, Kittenna Box, Metaphor Box, Nemesis Box, Bell Boyd, Kelley Boyd, Sylar Boyd, WendyCat Boyd, Denis Boyle, Jennifer Boyle, melmuse Boyle, Alycia Bradley, jayne Bradley, Airie Braendle, Glitch Braess, Su Brando, Tybalt Brando, IntLibber Brautigan, Dante Breck, Carbon Breed, WitchFire Breed, Bella Brennan, erika Brenner, gaby Brenner, Talthybius Brevity, KitKat Brewster, Lindsey Breyer, Artemis Bright, Brigitte Bright, Donnie Bright, Lucas Bright, Oya Bright, Prentice Bright, Risa Bright, Starfire Bright, Beebo Brink, Marcus Brink, Emi Brissot, Ice Brodie, Luth Brodie, Sam Brodie, Chromal Brodsky, Tydomus Brodsky, Cage Brody, Darling Brody, Kurston Brody, Mike1A Brody, UserJesse Brody, Reese Brody, Faith Broek, Happy Broek, ShadowHunter Brokken, Jacey Brooks, Shake Brooks, Shary Brooks, Sigurd Brooks, Tate Brooks, Vanleen Brooks, BruTuS Broome, PastorD Broome, Sarita Broome, October Brotherhood, Elroy Brouwer, Neophyte Brouwer, Jebediah Brown, linda Brown, Schwartz Bruder, lupu Brule, Joshua Brynner, Linda Brynner, Southy Buckenburger, drifterr Bugaboo, Michelle Bumbo, Trixie Bumbo, Paul Bumi, Jitar Bunin, Kerian Bunin, Crystalmom Bunnyhug, Embrace Bunnyhug, Zues Burali, GiGi Burgess, Keith Burgess, Shawna Burgess, Bain Buridan, Sean Buridan, Chiccorosso Burke, Count Burks, Hinamori Burleigh, Atom Burma, Jasper Burma, Aleshanee Burnett, Dottie Burns, Ebro Burns, Skipper Burns, John Burns, Haroldthe Burrel, Big Burt, dubureau Burt, Keisha Burt, phill Burt, Janloo Burton, Madd Burton, Bowlalot Bury, Dreklore Bury, Jarek Bury, Jenni Bury, Lou Bury, Orlando Bury, Angel Butuzova, dodi Byrd, Enchtris Byrd, Tleva Caballero, Gayle Cabaret, Monique Cabaret, Adele Cagney, Cralyn Cagney, Caribbean Cahill, Darien Caldwell, Lily Caldwell, CFire Caldwell, Ciara Calhern, Karl Calhern, Cecil Calhoun, Tizzy Calliope, Hypatia Callisto, Raven Callisto, Fred Cameron, Meliana Cameron, Antonius Camus, Maddie Camus, Raskella Canadeo, Exotica Canadeo, Vessus Candour, Alexis Canetti, Silvio Canetti, Talia Canetti, bragan Canning, Charenthia Canning, Reeda Canning, Vannesh Cannoli, Changurr Cao, Chilli Cao, Dorian Cao, RosyLee Cao, steve319 Cao, Contamina Capalini, Cougard Capalini, Kirsti Capalini, Lindichka Capalini, Lyla Capalini, JohnMAC Carbenell, snake Carbenell, Capri Carbetta, Sophia Carducci, Kid Cardway, Icould Careless, Aurore Carlberg, Brumia Carlberg, Bruni Carlberg, Brandie Carlos, Jenny Carlos, Avalon Carmona, Moana Carmona, Ashelia Carnell, Rain Carnell, CJ Carnot, Madison Carnot, Julie Carpathea, HALOCAT Carr, coolmaria Carroll, karyme Carroll, Leila Carroll, Crisii Carter, cyrielle Carter, isidore Carter, Missi Carter, Shatara Carter, Tristan Carthage, Aemilia Case, Baby Case, Jenn Cassady, Kittygloom Cassady, Charlotte Cassavetes, Holly Cassavetes, Anthony Cassini, Supertell Cassini, Wietse Cassini, Just Cattaneo, Mandy Cattaneo, Aleicester Catteneo, arthuraleksandravicius Cavan, Maximus Cazalet, Quellin Ceawlin, dMetria Cela, Spidey Cela, Arcadia Ceres, wanderer Cerveau, Aaron Cerveau, Marky Chaffe, Stefani Chaffe, The Chaffe, Becca Chambers, Lexis Chambers, Inigo Chamerberlin, Shion Chandrayaan, Ibrisse Chantilly, MaryAnne Chantilly, Cool Chaparral, guy2 Chaplin, Iadwen Chaplin, Lillyann Chaplin, wllmn Chaplin, Marsha Chapman, Caspar Chapman, Dominique Charles, Chilly Charlton, Pammie Charming, Total Chastity, Arohee Chatnoir, Papillon Chatnoir, Barry Cheeky, coldFuSion Cheeky, Nyla Cheeky, Ryan Cheeky, Aggressor Cheetah, Ronald Cheevers, Michelle Chernov, Maggy Chestnut, Cam Chevalier, Eleonore Chevalier, Kelly Chevalier, Mauries Chevalier, Ozzy Chevalier, Rayvendell Chevalier, Swampy Chevalier, Cheesemuncher Chickenwing, Kaltezar Chickenwing, milespeed Chihuly, Coolkama Childs, Michelle Childs, Nicole Childs, SimonRaven Chippewa, Albert Choche, Annetha Christensen, Jennifer Christensen, Zell Christensen, Herman Christiansen, Haifeng Chu, Francis Chung, tyana Chung, Sundance Churchill, Anubis Cioc, Corpierro Cioc, Dwayne Cioc, Knibbel Cioc, Slowhand Citylights, PonygirlSarah Clapper, Jim Clark, Jacob Clark, Jo A Clark, Angelos Clary, Biffle Clary, lilly733 Clary, Rui Clary, William Clary, Otto Clave, Arahan Claveau, Neil Claxton, Mimi Claymore, Pete Claymore, Sam Clayton, Blank Cleanslate, Deckheard Cleanslate, Electron Cleanslate, Spirit Cleanslate, Willow Cleanslate, Kovu Cleaver, Bell Clellon, Covisha Clift, EBCY Clift, Iumi Cline, pizzaguy Clutterbuck, knightrider Clymer, Exia Coage, Brenda Coakes, Lindsay Coakes, Lyndka Cochrane, Ceinwen Coen, Oneil Coen, Mahogony Coffee, Mark Coffee, Lisbeth Cohen, Melayna Colasanti, holly Coldstream, Moon Cole, Shiden Coledale, Castalia Collingwood, JUNKIE Colman, Silver Colman, Stahi Columbia, SweetAbe Columbia, CC Columbo, Charity Colville, Isabeau Conacher, Deb Cone, emili0 Congrejo, MarioDaniel Congrejo, Jazzy Connell, Jenika Connolly, Cooper Conover, Garn Conover, Mara Conover, Myles Cooper, Angelina Coorara, Valentine Coppens, psyco Coppola, Tremleh Coppola, Venus Coppola, Chiana Cordeaux, Sensuality Cordeaux, Clarissa Cordoso, Methos Corinthian, Tylerferland Cork, Caleb Corleone, Montana Corleone, Sparkey Corleone, Zoey Corleone, Achtai Coronet, Count Coronet, Dweedle Coronet, jjccc Coronet, Ron Coronet, Caterina Cortes, Letitia Cortes, Marcella Cortes, Martinelli Cortes, Raven Cortes, Soopafly Cortes, Grazel Cosmo, Athena Cosmos, Cally Cosmos, Annyssa Cosmos, Bunny Costello, Zelitor Costello, Lionel Cournoyer, Sasha Cowen, Carl Crabe, Lyssa Craig, micke Craig, Mel Cramer, Tee Cramer, Avil Creeggan, Bunch Creeggan, CronoCloud Creeggan, NewYorkCityDJ Cremorne, Shalori Cremorne, Artik Crimson, Bliss Crimson, Daffodil Crimson, Raul Crimson, Shaoti Crimson, Trevor Crimson, Rex Cronon, Ace Crosby, Linnrenate Crosby, DaRealNeo Crossing, Wark Cruyff, Silver Csak, Eulalia Cuddihy, Lauralynne Cuddihy, Rammstig Cummings, Rita Cummings, Fremont Cunningham, Jinger Curie, RICX Curie, Betty Curry, Marissa Curtis, Mercurion Curtiss, Juan Cusack, Sanderman Cyclone, Marek Czervik, Alreania DaSilva, Dnel DaSilva, Seph DaSilva, Kelly Dabney, dorothyann07 Dae, Frax Dae, Frost Dae, Syryne Dae, Oddy Dae, 1Time Daehlie, Sinead Daehlie, TRACI Daehlie, Dante Daffodil, Limey Daffodil, stripey Daffodil, Atomik Dagger, Bloodsoaked Dagger, Coca Dagger, Colera Dagger, J4ck Dagger, Jaune Dagger, leigha Dagger, Silver1 Dagger, Alexander Dagmar, Simeon Dagmar, Dweezle Dagostino, Ginoo7 Dagostino, Joka Dagostino, Rachid Dagostino, Sinatra Dagostino, DR Dahlgren, Alexandra Daikon, Devious Dailey, Natalie Dailey, Sukit Dailey, Zoya Dailey, Nad Dal, Rudra Dal, Robert Dale, Coventina Dalgleish, Salvador Dalgleish, Anya Daligdig, Nyterious Daligdig, yvette Daligdig, Kylie Dallin, Angel Damask, Phantom Damask, QatanI Damdin, Bekka Damone, Pashin Damone, Vaekraun Damone, Zoraya Damone, elmoono Dana, Mary Dana, ml Dana, Rezzer Dancer, Shrug Dangle, Guttstein, Daniel, Bubba Daniels, Dinky Daniels, Kiana Daniels, marcel Daniels, Rosey Daniels, Sara Daniels, VictoriaRose Daniels, Ignacio Dannunzio, SlimD Dannunzio, williamae Dannunzio, Chriss Darkes, Digit Darkes, Tanooki Darkes, Bree Darling, Chasity Darling, Darra Darling, Val Darracq, Diana Darragh, Ryan Darragh, Bane Darrow, Bree Darrow, Ivy Darrow, cuddles Dassin, Leeloo Dassin, Dachine Daviau, Gyllian Daviau, Leben Daviau, Serioto Daviau, Willow Daviau, Allison David, JamieZel David, Todd David, Casey Davidson, LaNikki Davis, Whispering Dawn, Lady Dawson, Helen Dayton, Ryan Dayton, Ooh Dazy, Woopsy Dazy, Brighid DeCuir, eZekiel DeCuir, Link DeCuir, nath DeCuir, Rhys DeCuir, siliconegirl DeCuir, spring DeCuir, Iron DeCuir, Escort DeFarge, Archangelo DeSantis, Aubrey DeSantis, Gustav DeSantis, Hippy DeSantis, Ilana DeSantis, Sutara DeSantis, Undina DeSantis, Axienne DeVaux, Dana DeVaux, Kitty DeVaux, Mindy DeVaux, Krystal DeVinna, Krystalynn DeVinna, Magenta DeVinna, Manuela DeVinna, Spike Deakins, Debbes Dean, Korben Dean, Dogbert Debevec, Savannah Debs, emily Decatur, Heiko Decatur, Zorena Deckard, Andrea Decosta, Dolly Decosta, Esperenza Decosta, Kruppen Decosta, larrykin Decosta, PhoenixRose Decosta, Sophy Decosta, Twinsen Decosta, Vladimir Decosta, Duxster Deere, Maxim Deharo, Summerbreeze Deharo, Matti Deigan, DeeAnn Dejavu, Gina Dejavu, Shai Delacroix, alexis Delcon, Ashly Delcon, Kane Delcon, Dante Deledda, Lady Deledda, Jega Delgado, Alicia Delphin, Darek Deluca, Lestat Demain, Nuka Demain, Allissa Demar, Lilyanah Demar, Aeleen Demina, Blowing Demina, Kalm Demina, Sarias Demina, Skeddles Demina, Sweet Demina, Alida Demontrond, Redux Dengaku, J. Derby, Cristell Deschanel, Ivey Deschanel, SinaMaria Deschanel, Elisabeth Desideri, Monique Desideri, Bartiloux Desmoulins, Hazel Desmoulins, Isis Desmoulins, Phoenix Desmoulins, Jon Desmoulins, Dino Despres, Samantha Despres, Snowflake Despres, Bones Detritus, Neo Devoix, Bre Dharma, Showshawna Dharma, Mike DiPrima, Winter DiPrima, Gongree Diage, Azure Diamond, Styles Diamond, Maike Dibou, Klaus Dieffenbach, Xavier Dieffenbach, Lordfly Digeridoo, Selkit Diller, Tari Dilley, Kelly Dilweg, Werewolf Dingo, Darkharmony Dingson, Knud Dingson, Jewel Dinkin, Mecha Dinosaur, Savonna Dinova, Amina Diplomat, FuZzY Diqui, Crimson Divine, Lizbeth Divine, Cryptid Divisadero, Destiny Divisadero, Montsho Division, Gryphon Dix, Kittybird Dix, Hope Dixon, CadiWolf Dobbs, Darling Doboy, Nicole Docherty, Ralph Doctorow, Odo Dod, nik385 Doesburg, sam Doigts, Elea Dollinger, Miche Dollinger, Severina Dollinger, Eric Domela, Krysta Domela, Franky Donaldo, Duntroon Donburi, Tricia Donovan, Sabrina Doolittle, DeDe Doowangle, Dinghy Doowangle, Phoebe Doowangle, Ratzfatz Dorado, Jessalicious Dorance, RJaNator Dorance, Kalemika Dougall, Fi Douglas, Norelyn Douglas, Aerrett Dovgal, Wendy Dovgal, Alex Drago, MAGWolf Drago, Lupo Drake, Palanth Drake, Aryanna Draken, Drinkin Draken, Kaylan Draken, Maddy Draken, nixkuroi Draken, Thornpaw Draken, Sinjo Drakes, James001 Dryke, Nameless Dryke, Roberta Ducatillon, Helke Duettmann, Moni Duettmann, Kyla Duke, Esence Dulce, Manuella Dulce, Ric Dulce, Shannel Dulce, Xander Dumont, Lionna Dumouriez, Marko Duncan, Duncan, Lyre Dunia, Cyndari Dunn, Garth Dunn, Sugababe Duport, Taylorholic Durant, Vixie Durant, Julie Durant, Drew Dwi, Ribbon Dye, Michelle Dzieciol, shngy Dzieciol, Jeffrey Earp, Umbrella Ebi, Adi Eccleston, Bazzerbill Eccleston, Dragon Eccleston, chawna Eclipse, Minolin Eclipse, Valkyrie Eclipse, Joi Edelman, Alx Edman, Daniella Edman, Saskia Edman, Storm Edman, Cory Edo, Tommy Ehrler, Stephe Ehrler, Edred Einarmige, Hope Eldrich, Kai Eldrich, Winter Eldrich, Thunder Electric, Ezmerelda Electricteeth, Hostile Electricteeth, Kris Electricteeth, Loki Eliot, rudy2zday Eliot, Shaydin Eliot, Iris Ellison, Enigma Elswit, Tim Ely, Darkling Elytis, Delu Elytis, Happy Elytis, Jessica Elytis, Bernd Emmons, Kellie Emmons, Robbert Emmons, Bean Emoto, dick Encore, Andy Enfield, Fuzionor Engawa, Hethr Engel, RH Engel, Digital Enigma, Kahlest Enoch, Lex Enoch, Oran Enoch, Ryal Enoch, Wobmongle Enoch, Wyatt Enoch, Pea Enzyme, Antony Epin, Sapphire Epin, DBDigital Epsilon, Shoshana Epsilon, FallenAngel Erato, Renton Eretz, Mo Eriksen, 64Y80Y Eros, tommy Eros, Nicola Escher, Zak Escher, Salvatore Esposito, Quinevere Essex, Zed Essex, Fabian Etchegaray, Psyche Etoile, Byanex Etzel, CrimsonWings Eun, Deckard Eun, Arwen Eusebio, Anastacia Evans, buttonlynn Evans, Rose Evans, Romeo Evelyn, Sephiroth Everidge, Patriiick Ewing, Trey Ewing, Vivian Ewing, Xwing Ewing, Zha Ewry, SirZarath Excelsior, Zorrita Express, Hierophant Extraordinaire, Blanche Fabre, Annie Fackler, Wolfgang Fackler, Amy Faddoul, Shukran Fahid, Garth FairChang, Brooke Fairplay, TOmmy Fairplay, Vixen Fairplay, Bobby Fairweather, Darlean Fairymeadow, Gotobug Fairymeadow, Heathie Fairymeadow, Meleni Fairymeadow, Moon Fairymeadow, Odysseus Fairymeadow, rob Fairymeadow, Taylkusha Fairymeadow, Crystal Falcon, WhiteAngel Falcon, VetteMan Falken, Evilpony Fallon, Fernand Fapp, Sasuke Fapp, Roen Fardel, Dariush Fargis, Jenn Fargis, Mandy Farina, Kokoro Fasching, Madison Fasching, Ben Fassbinder, Leo Fastback, Rikky Faulds, STEEL Faulds, Equino Faulkland, Flynn Faulkland, High Faulkland, Arda Fauna, Elvis Faust, Benelli Federal, Forest Federko, Belle Fegte, Danny Feingold, Luc Feingold, Bing Fell, Darky Fellini, Jaze Fellini, Sacha Fellini, paulie Femto, Ynot Fenua, Fau Ferdinand, Soren Ferlinghetti, Meri Fermi, Boxter Ferraris, Danamea Ferraris, Duilho Ferraris, Fred33 Ferraris, LeekySean Ferraris, Letizia Ferraris, Marlowe Ferraris, Wanted Ferraris, Xavier Ferraris, Feff Ferrer, Thomas Ferris, Nakala Fetisov, Astrin Few, Chosen Few, Ahh Fiddlesticks, Chantal Fielding, Caleb Fierrens, Patrice Fierrens, sam Fieseler, NutZ Figaro, summer Figaro, Leumia Figgis, Mae Figtree, Maldavius Figtree, Ravovich Figtree, Morgana Fillion, Brett Finsbury, sofia Finsbury, Jazmina Firefly, sasha Fischer, william Fish, Nadia Fisher, StevenSDF Fisher, Carol A . Fisher, Dimitri Fisseux, Manni Fitzgerald, Freddie Fitzroy, Phineas Flagstaff, Ante Flan, Braden Flanagan, BrettEbay Flanagan, Echo Flanagan, Knute Flanagan, Kristjan Flanagan, LilyRose Flanagan, Meril Flanagan, Lulu Flasheart, Jolie Fleury, Clitoria Flint, Fifi Flintlock, Frostie Flora, Kitto Flora, Chriss Florio, Arlen Flossberg, Angel Fluffy, Emilyuk Fluffy, Frurry Fluno, Faedra Flytrap, Brieg Foden, Annette Fonda, Katina Fonda, Raymond Fonda, Marcos Fonzarelli, Yuri Fonzarelli, CrystalShard Foo, etoile16 Food, Kim Food, Kode Forager, Vodka Forager, Wendy Forager, Lucien Forcella, Maela Forcella, Olli Forcella, Violet Forcella, Clarissa Forder, darkdog Forder, Hans Forder, Jango3234 Forder, Olli Forder, Naryu Forester, FaustTiger Forte, Richie Forte, BMFC Forwzy, Erick Forwzy, SusNy Foss, Sanford Foulon, Iwana Fouquet, Kae Fox, Raudf Fox, Wolfie Fox, Phli Foxchase, Kityn Foxley, MollyBrown Foxley, Qua Frampton, Ice Franchini, Nicolas Franchini, Soizie Franciosa, Samson Francis, Nequam Frangilli, Andreas Frankfurter, PreWired Frankfurter, Diane Franklin, Cappy Frantisek, Romano Frascati, DeMits Frederix, Mel Fredriksson, Sune Fredriksson, Tina Fredriksson, Fastfreddy Freeloader, Sammar Freeman, Kitty Freund, Jorgen Friis, Zorin Frobozz, mdbobbitt Frobozz, Chris Frontenac, Foolish Frost, Asriazh Frye, Patti Frye, Phish Frye, Nobody Fugazi, Simba Fuhr, Snugglebunny Fuhr, fallendream Furse, Jamie Furst, Cherise Gagliano, Laura Gagliano, Gammy Gainey, Gazz Galatea, Govindira Galatea, Rizpah Galatea, Amber Galbraith, Mandy Galileo, william Galileo, David Gall, LoLa Galland, Zach Ganache, Casey Gandini, Edgar Gantenbein, Jonx Gao, Soso Gao, Madison Gardner, Silver Garfield, Michelle Garrigus, Nerdmaster Garrigus, Jarik Garsztka, Svoboda Garsztka, Salkin Gascoigne, Roger Gaspara, Buttlock Gasser, Pud Gasser, Zina Gasser, Prince Gausman, livingdead Ge, Josh Geesink, Tolly Geest, Georgina Geewhiz, Chris Geiger, Sabine Geiger, Samuel Geiger, Tristessa Geiger, Joe Gemini, Mielle Gemini, Misty Gentil, Sanna Georgette, Phoenix Gerhadsen, Mic Ghia, Salores Ghia, Loskobosko Giacomin, Susanne Giffen, Lazarus Giha, Micah Giha, Merry Gildea, Summer Gildea, Brittany Giles, Rayy Giles, sevron Giles, Gattz Gilman, Rori Gilmour, SunQueen Ginsberg, Rockwell Ginsberg, Intolerable Ginsburg, Junie Ginsburg, Enrico Giove, Krystal Giove, Annie Giovinazzo, Cat Gisel, Constantine Giugiaro, Io Giugiaro, Persimmon Gjellerup, Lorna Gladstone, Toby Gladstone, Dale Glass, Gellan Glenelg, EmmaBella Glimmer, louise Glimmer, Gianna Glitter, Melyissa Glitterbuck, Victoria Glushenko, Wolf Goalpost, Chris Gobo, Xerses Goff, Sturdus Goldblatt, Nigel Goldflake, Major Golding, Master Goldkey, Zho Golem, Stylez Gomez, Carlos Gomez, Alecydoss Gontermann, Skyler Goode, Valentine Goode, Odd Goodfellow, Dragyn Goodliffe, Hank Goodliffe, Livinda Goodliffe, Robertt Goodliffe, Daphne Goodnight, Sean Gorham, Ledje Gorky, Emma Gould, Amaze Grace, Lagerstone Graff, Harper Grainger, Andy Grant, Carrie Grant, LauraLOral Granville, AlphaOmega Graves, Ebon Graves, Kyrii Graves, Leeloo Graves, Bosco Gray, Dez Gray, Renegade Gray, Summer Gray, Aries Graysmark, Edian Graysmark, Scotty Grayson, Mantis Grebe, Kelly Green, cara Greene, Kimber Greene, Mystical Greene, Raven Greene, Soilent Greene, Matthew Greene, Soilent Greene, Roberta Greenfield, ShayLee Greenspan, Dax Greer, Angel Gregg, Kyleigh Gregg, Sophie Greggan, Deanna Gregoire, StylynProfylyn Gretzky, Farallon Greyskin, Kraal Griffith, Xavier Griffith, Jacomo Grigg, Sylvie Grizot, bodyman72 Grot, Damian Grot, MarieCaroline Grumiaux, Mozo Grumiaux, Oceane Grumiaux, Jadem Gruppman, Gracie Grut, Jennie Grut, Mhaijik Guillaume, Frog Gulick, RacerX Gullwing, Enktan Gully, Gilly Gully, Woozie Gumshoe, Teddy Gumsing, Stephane Gunawan, Alienbear Gupte, Boroondas Gupte, mcgeeb Gupte, Elise Guyot, Jamal Guyot, Lawyer Guyot, Thiago Guyot, Arwen Gymnast, denniswo1993 Gymnast, Lukes Gymnast, Miki Gymnast, Sizoark Gynoid, Markiss Haas, Pepper Haas, Arkanys Hadlee, Apollo Haight, Lord Haight, Fawn Hailey, Kaelin Hailey, Gaelle Halasy, ISIS Halberd, Meg Halberd, Zander Halberd, Arnold Halderman, Malarwen Hall, Ken Hall, Jonah2cd Hallard, Saii Hallard, Trixie Hallard, Doris Haller, Destina Halley, Susiee Hamilton, IBMTapeGuy Hammerer, Lighten Hammerer, VEVER Hammerer, Alison Hamsun, Fawn Hana, leah Hana, Darknite Hand, Emperors Hand, nefertiti71 Handrick, Rodney Handrick, Delerium Hannibal, leanhaumshee Hannya, jingle Hansen, Mattie Hansen, Terry Hansen, Vox Hansen, Filo Hapmouche, Gustavus Hapmouche, Nounouch Hapmouche, Adrian Harbinger, Kami Harbinger, StormCrow Harbinger, CherryBomb Hare, Den Hare, Omegasun Harford, ricky Harford, ricky Harford, Harley, Jenna Harley, Kristina Harley, Natasha Harlow, Hummer Harmison, Allen Harrington, Tessa Harrington, Joker Harris, Shanti Harris, Dagon Harrison, J0NATHAN Harrop, Kerinauu Hartunian, Kyentay Hartunian, Rav Hartunian, Ski Harvey, Tuesday Harvey, Xylo Hasp, Betina Hatfield, Gina Hatfield, Calamity Hathaway, Dorian Hathaway, Duncan Hathaway, Xavier Hathaway, Jack Hathor, Kamilah Hauptmann, Pam Havercamp, swift Havercamp, Griselda Hawes, kwanita Hawks, Ravenis Hawks, BenG Hax, el33t Hax, Juicy Hax, Macx Hax, Meta Hax, Mikka Hax, Mokona512 Hax, Mr8ball Hax, Prophet Hax, Rina Hax, Slober Hax, Starbuck Hax, Takehiro4 Hax, Kyle Hayashi, Ashrilyn Hayashida, Eriko Hayashida, August Hayek, Milton Hayek, Ronnie Hayes, Max Hazlehurst, Sorsaran Hazlehurst, Grath Hazlitt, Violet Hazlitt, April Heaney, Aquela Hearn, jefferey Heart, Kalyrra Heart, Marissa Heart, Taina Heart, TLC Heart, Tori Heart, Dana Hebert, Trimzi Hedges, AmazedBlue Hegel, Dagmar Heideman, r0bin Helsinki, Moira Henley, Ursa Henley, Joharr Hennah, Daviana Hennesy, GJ Hennesy, jens Hennesy, Karl Herber, mistydawn Herbst, Donatella Hermano, Robins Hermano, Ekib Hern, Greves Heron, Jagged Heron, Christel Herzbrun, le Herzog, Reverend Herzog, Elektra Hesse, SweetDesire Heston, Cotton Hicks, Zack Hicks, Kevyn Hienke, Tristan Hienzman, Devin Hill, Wendy Hill, Tensai Hilra, Valek Hin, Adolph Hinkle, Timothy Hinkle, YoCo Hird, Amber Hirvi, Dagon Hitchcock, Heather Hitchcock, Noah Hitchcock, Sianna Hock, Dominique Hofmann, Holly Hofmann, Ganador Holgado, Brookston Holiday, Davidd Holmer, Sam Holyoke, Alexander Homewood, atory Homewood, dabadguy Homewood, Ed Homewood, Huge Homewood, Meesha Homewood, tilstad Homewood, Cremi Honey, Laura Honey, Sandling Honey, Honey, Haos Honua, Vudu Hoodoo, Dallas Horsefly, Lucy Horton, SJ Horton, Homer Horwitz, naty Hotaling, Traceysvideos Hotger, DaQueenB Houston, Natasha Houston, Tia Houston, Hughes Howard, Meg Howe, Edward Howton, Falllen Howton, Pepto Hoyer, Sabrina Hoyer, LadyAbigail Hubbard, Kristopher Hudson, Nikita Hudson, Titus Hudson, XLR8RRICK Hudson, Holly Huffhines, Bella Hugo, Haole Hula, Sard Huldschinsky, Neran Hull, Anastasia Humphrey, October Hush, Silent Hush, Ctarr Huszar, ac14 Hutson, Dex Hutton, Fox Hwasung, Johanna Hyacinth, White Hyacinth, Adrianna Hyde, DJ Hyde, Ty Hyland, Adeline Hynes, Cathy Hynes, DeepSweet Hynes, Psykeeper Hynes, Sexy Hynes, Ares Hyun, Emperor Hyun, melodie Hyun, slayer Hyun, Puck Ida, Weary Ida, Anne Idler, Ruby Idora, Bryan Idziak, Six Igaly, elfi Independent, Spike Independent, Veilofunknown Independent, Bryndi Ingersoll, Ingrid Ingersoll, Noelyci Ingmann, Andrew Ingrassia, Dale Innis, Foxy Innis, Vern Innis, 111Mc Innis, Cloud Insoo, MEtoo Insoo, Quinn Iredell, Rebekah Iredell, Lucien Ireton, Maggie Ireton, Austin Ironclad, DavidJames Irwin, Roy Irwin, Xavier Irwin, Esmee Isbell, Miyu Ishii, Billy Islander, Misa Itamae, Magnum Iuga, Akasha Ivory, Juliana Ivory, WHITEMAGIC Ivory, Gazometr Ivory, Indigo Izumi, Kami Izumi, Salazar Jack, Gunslinger Jackalope, Sutton Jacks, Casandra Jackson, Dernard Jackson, Dougal Jacobs, Lone Jacobs, Sydney Jacobs, jefftlse Jacobus, jose007 Jacobus, justine Jacobus, LampLighter Jacobus, Micha Jacobus, Jadge Jacobus, Enchant Jacques, Victoria Jacques, Dreamweaver Jae, Gregoire James, Kizza James, Vienna James, Barry Jannings, Bianca Jannings, Gwen Jannings, Juappa Jannings, Paisley Jannings, Coos Jansma, Fernandinho Jansma, Griffioen Jansma, Jiire Jansma, IsisLynn Janus, Theobaise Janus, Conway Jarrico, DylanJr Jarrico, Quest Jarrico, erba Jarvis, Jeagerman Javelin, Alan Jay, Lopp Jay, harpo Jedburgh, Craig Jeffries, Alexis Jenns, Bimbie Jenns, XanXan Jervil, Alexander Jessop, Gelenas Jessop, RodneyLee Jessop, Tataniya Jessop, Amethyst Jetaime, Kooky Jetaime, Sapphire Jetaime, Tempest Jewel, Vampirella Jewel, Elia Jewell, Josey Jewell, Shaolin Jewell, Sheeba Jewell, Stefu Jewell, Uma Jewell, Rosslin Jiang, alex Jimenez, Forest Joffe, John Jogiches, Dyani Johin, Musashi Johin, Major Johnson, Dean Johnson, Peter Johnson, Thomas Carson Johnson, Janet Jones, Jason Jones, Bedo Jonze, Elaine Jorgensen, Osiloa Jorgensen, Mariah Jubilee, Sam Jubilee, Ada Jun, Chenak Jun, Ferris Jun, kelyane Jun, Takeshi Jun, Tommi Jun, Phoebe Juneau, Grace Juniper, icandi Juno, Kimo Junot, isha Juran, Orchid Juran, Torsten Juran, Krzywol Kaczmarek, Sakura Kagekiyo, Meni Kaiousei, Fritz Kakapo, Esdrael Kamachi, Kathy Kamenev, Darsuky Kaminski, Rebecca Kaminski, Digital Kaos, Kappa Kappa, Leah Kappa, Gapple Kappler, Cristalle Karami, Toledo Karas, Tina Karlfeldt, Angelina Karura, Samara Kasshiki, Kitty Katscher, Lonetree Katscher, Goldie Katsu, Shamir Katsu, Lacey Kavanagh, Scrooge Kavanagh, Faye Kawabata, Ninja Kawabata, Onimusho Kawaguichi, Brad Kazakov, Ida Keen, Jeff Kelley, Kyle Kelley, An Kellner, Cindy Kellner, Kean Kelly, Tony Kembla, KaliCat Kennedy, Fred Kenorland, Sharon Kent, Nils Kenzo, Rase Kenzo, Tammy Kenzo, Tyci Kenzo, chica Keon, Benja Kepler, Gust Kepler, KittyKatt Kerensky, anton Keynes, Ipenda Keynes, Malevolyn Keynes, Ayumi Khorana, Hoshi Kiama, Nekorina Kiama, Aurillius Kidd, Bare Kidd, Billboard Kidd, Blurple Kidd, Cade Kidd, Ekerilar Kidd, FFS Kidd, Lazarus Kidd, Lea Kidd, MidnightRush Kidd, Mittens Kidd, Morliona Kidd, Neilly Kidd, Kim Kienzle, RJ Kikuchiyo, Gail Kilara, Fish Kilby, zeelee Kindley, Montez King, Dax Kirkorian, Myoukitsune Kirkorian, Szandor Kirkorian, Cmtccmoi Kish, Kia Kish, DaQbet Kish, Coca Kit, Developer Kit, pronto Kit, Sunshine Kit, ssjkriccolo Kitchensink, Reisuki Kitsune, Tengu Kitsune, AngelEyes Kittinger, Devilish Kitty, Kitty, Panther Kitty, Daaneth Kivioq, Praseodymium Kivioq, Sonya Kivioq, Emily Kleene, Buejien Klees, Princess Klees, SaltySugar Klees, Parrish Kline, ProfessorKindly Kline, Chelsay Knibber, Victoria Knight, Raspitomaru Knopfli, Cocoanut Koala, Akiko Koba, Bryan Koba, dawood Koba, Izen Koba, Nebur Koba, Taran Koba, Pamela Koenig, Neo Koga, BlackOut Kohime, Jazzie Kohime, Naa Kohime, Seriuskid Kohime, Wandale Kohime, Zana Kohime, Zerosix Kohime, Maucat Koi, Dagmar Kojishi, Chroma Kolache, Icey Kolache, Kornscope Komachi, Bri Koolhaas, KamaSutra Koolhaas, Katya Koolhaas, Trylle Korda, Corrine Korobase, Navajo Korvin, Pasha Korvin, David Kostolany, quintin Kostolany, Tasha Kostolany, Amy Kotobide, Zaphod Kotobide, KYWLDCT Kovacs, LillyEliska Kralomoc, Joseph Krams, Fumon Kubo, LudwigVan Kubrick, Anagras Kuhn, Selina Kuhn, Tal Kuhn, Finora Kuncoro, Maya Kupferberg, Jana Kurelek, Shika Kuri, Yo0gy Kuri, Endo Kurosawa, Tatsuki Kurosawa, MrBill Kurri, Albert Kwak, Kwakkelde Kwak, Duckling Kwak, Kasey Kyger, Kaimi Kyomoon, Stelard Kyomoon, Kyo Kyong, Emm Laa, Keera Laasonen, Delvendez Laborde, Raban Laborde, Amodeus Labrada, Louisa Labrada, Sweeten Lacey, Fiachra Lach, Eliv Lachman, Flykiwi Lachman, Charlie Laffer, LarryS Laffer, Sasha Lafleur, OxLukexO Lagan, Shadow Lagan, Tilianna Lagan, Jaye Lahtoh, Davoid Lake, Fairlight Lake, Thomas Lake, Veronique Lalonde, Leticia Lambeau, Maleia Lambeau, Cross Lament, Drakon Lameth, Misch Lameth, Caeleigh Lamington, Nedrick Lamont, essayn Lamont, Dwayne Lancaster, Hiram Lancaster, Carlton Lane, Christo83 Lane, DOO Lane, Niket Lane, Roughtoe Lane, Taylor Lane, Ami Lang, Emily Lang, Ruadh Langwarrin, Sasha Lapointe, Garrett Laramide, TBA Lardner, Beverly Larkin, Marcoh Larsen, Vanessa Larsen, bjf25 Larsson, curL Larsson, Garsson Larsson, Jondolarr Larsson, Justicar Larsson, Quinn Larsson, redshoedave Larsson, Tod Larsson, lea Laryukov, Renate Laryukov, Benny Lassally, Khristen Lassard, Josh Latrell, Lacey Latrell, Shari Latrell, Casper Laughton, Kory Laughton, Lisa Launay, Sasha Launay, Areyn Laurasia, Crystaleen Laval, Moirae Laval, Sascha Laval, Slasha Laval, Tiberius Laval, Shadow Laviolette, Velarissa Laviolette, Zeus Laws, Snaptick Laxness, wtf Laxness, Carrie Laysan, Norton Lazarno, Candide LeMay, Dustin LeMay, Shelly LeMay, Antionette LeShelle, Hayden LeShelle, Kristian LeShelle, Monika LeShelle, Mysti LeShelle, Shaklin LeShelle, Shavaii LeShelle, Lord Leafblower, Kinjry Legend, UniqueRose Legend, Jonny Legien, Lillia Lehane, Renae Leigh, KeiAira Leigh, Casper Leinhardt, MiaLily Lelouch, Adriana Lemieux, Keiki Lemieux, Ginger Lemmon, Heather Lemmon, JohnnyMac Lemmon, Lenni Lemuria, Bubba Leonard, Spyder Leroy, Aral Levitt, DarionMonkee Levitt, Quiana Levitt, Angharad Lewellen, AngelEyes Lewis, Cookie Lewis, JonnyImpala Lewis, Ekka Li, Jesa Li, Anark Liebknecht, KUieTSToRm Lightcloud, Lincoln Lightfoot, Nicola Lightfoot, Shaman Lightstone, Nika Lightworker, April Lilliehook, Joi Lilliehook, Kimi Lilliehook, LAPDHOLLYWOOD2000 Lilliehook, Lindy Lilliehook, Shayne Lilliehook, Skywil Lilliehook, Neo Linden, Amber Linden, Guy Linden, Teeple Linden, Marck Lindman, NoSpy Lindman, Rahduhlac Lineker, Evangeline Ling, Kailani Ling, Karyll Ling, Lexus Ling, moon Ling, Wai Ling, Samantha Lingiuan, CyberonX Link, Laynie Link, SLurl Link, Aphrodisiack Lisle, Petunia Liveoak, Eithnie Llanfair, Jennifer Llanfair, Pami Llewelyn, Gwyneth Llewelyn, Kiten Lobo, Paul Lobo, Khrome Lock, Brett Logan, Dragger Lok, Pavig Lok, Sera Lok, May Loll, Lola Lollipop, SweetTasting Lollipop, Nikee London, Trinity London, Dogan Lonergan, Rod Longcloth, Excalibur Longstaff, Apolonique Loon, Austyn Loon, Danyhael Loon, Goreki Loon, Huligo Loon, Jaffred Loon, LouisS Loon, Luke Loon, mahee Loon, Ruthless Loon, Melina Loonie, rasta Lopez, Lydiah Lorentz, Stellar Losangeles, Blackie Lotus, Misha Lotus, Alysia Loudon, Grace Loudon, grumble Loudon, Kate Loudon, kimmie Loveless, LadyMacbrat Loveless, Ally Lovell, Dixii Lovell, Darb2rad Lowe, Lozzie Lowe, Trip Lowe, Andrek Lowell, Jaraziah Lowell, Lissa Lowell, Stryfe Lowell, Leland Lowell, Leonardo Lowey, Stagger Lowey, Strabo Lowey, Raen Lu, Laurie Lubezki, MissJean Lubezki, Lucia Lucero, Lee Ludd, Franchises Lulu, Jayden Lulu, Kitten Lulu, mona Lumet, Alienor Lumiere, Michi Lumin, Wolf Lumin, Grumpy Lumley, Sian Lumley, HamSuiJe Lumpen, Laguna Luna, Starbella Luna, Ashley Lundquist, Theosta Lunt, Cliothe Luo, Lincoln Lupino, Bronwyn Lurra, Mineki Lurra, MYMistress Lusch, Linnae Lusso, Natalie Lustre, Rose Luxemburg, Helena Lycia, AG Lykin, Lhlilith Lykin, Niko Lykin, Logan Lyne, Jacques Lytton, Kianeira MacDiarmid, Apple MacKay, Melissa MacKay, Bailey Mackenzie, Maxx Mackenzie, Rose Mackie, Ee Maculate, Gaetan Maculate, Ravarian Maculate, Adrian Maddaloni, yearning Maddaloni, Ava Maddux, Flezix Maddux, Karamel Madison, Allure Madonna, Mannie Madonna, Sitearm Madonna, Mario Madsen, Mitzy Madsen, Ben Maersk, Lillian Maertens, Turk Maertens, Stephanie Magnolia, Lonique Magojiro, WarKirby Magojiro, Loki Mahana, Vinny Mahana, Semiramis Mahina, Shadow Mahoney, Rissa Maidstone, Tynana Maidstone, Angel Majestic, Jeremy Majestic, StarFire Majestic, Tiara Majestic, One Maktoum, Lana Maladay, Marzipan Maladay, Missy Malaprop, Ordinal Malaprop, Void Malaprop, Natasha Malibu, Rygel Malick, Ali Maltz, Leena Maltz, Cage Mandala, Synthalor Mandelbrot, Zeppelin Mandelbrot, Esteban Manen, Kawaii Manga, Mailee Manga, Nathalie Manga, Yinato Manga, Mya Mantis, Madame Maracas, Maisa Maracas, Domino Marama, Panama Marama, Charm March, SallyWoelfin March, Markel Marchionne, AdriAnne Margulis, Edgware Marker, Tika Market, AiSenshi Market, Lizbeth Marlowe, Queue Marlowe, Joana Maroon, Grey Marquette, Adrianna Marquez, Jeremy Marquez, Shirley Marquez, Christian Marquez, Dax Mars, Dnate Mars, Xandi Mars, Sarah Marsi, Garmon Martin, Sean Martin, SignpostMarv Martin, Brittany Martinek, Sweet Martini, ElDraque Martov, Aminom Marvin, Edwin Marvin, Meatnik Marvin, Zanza Marx, bollit Masala, Nguai Masala, Satya Masala, team23 Mascot, Tyler Mason, NAM Massey, Minasojo Massiel, Gatto Mastroianni, Checho Masukami, SlavegirlPaula Masukami, Hellsing Matador, Femina Matahari, Leoki Matahari, Rosa Mathieson, Violet Mathieson, MikVik Mathilde, Jonathan Mathy, Ernesto Matova, Selenia Matova, Meltharas Matsukaze, lordneg Matzerath, Memnoch Matzerath, Dedric Mauriac, Kezz Mauriac, Wolruf Mauvaise, coyote Maverick, Martin Maxwell, jericka May, Jeza May, Mellony May, Lauri Mayfair, EnCore Mayne, revochen Mayne, amaya Mayo, Hellmanns Mayo, Jima Mayo, Kion Mayo, Kisho Mayo, Mo9a7i Mayo, Neobe Mayo, Salazar Mayo, Sat Mayo, Scotto Mayo, William Mayo, Gino McAllister, Masion McAllister, Wallace McAllister, DarlinNikki McAlpine, Hawk McAlpine, Inga McAlpine, Lex McArdle, Maggie McArdle, Joshua McCallister, Keegan McCallister, Bradford McCann, Ella McCann, Flox McCarey, Jezzie McCellan, David E . McClure, Cash McConachie, Cathal McConachie, Tad McConachie, Aodhan McDunnough, Drew McDunnough, Artie McFly, Minnie McGann, Sabine McGettigan, Poppet McGimsie, Carole McGuire, Tegwenn McKenna, Shaemus McLaglen, ShirleyM McLaglen, Dirty McLean, HoseQueen McLean, Billibob McLeod, Cari McLeod, Innes McLeod, Jaenae McLeod, Slate McLeod, Troy McLuhan, Anya McMahon, DoGGo McMahon, Hutch McMahon, Iras McMahon, Jian McMahon, Jimama McMahon, Kouki McMahon, Sioban McMahon, Akie McMillan, laika McMillan, Lauris McMillan, Marteze McMillan, Maye McMillan, Nicholas McMillan, Radikal McMillan, Tammi McMillan, Jax McNally, Arwyn Meadowbrook, Waterflower Meadowbrook, Ima Mechanique, Nber Medici, Chandra Meehan, Geo Meek, Earane Meiji, Jessica Meiklejohn, Emiko Meili, penelope Meili, Luz Melbourne, Marti Melnik, MenuBar Memorial, Aitor Mendes, Mona Mendes, Jay Menges, Kimmie Menges, Lennart Menges, Margaret Menges, Mikel Menjou, VzNevada Menoptra, Merselus Mensing, Leia Mercy, SAPPHIRE Mercy, Sofie Mercy, ozadakan Meriman, Sandycd Meriman, Washington1985 Meriman, Infiniview Merit, Nanashe Merkur, Ayahuasca Merlin, Craischen Merlin, devillover Merlin, Faer Merlin, Jarros Merlin, Jolie Merlin, Kejo Merlin, Mario4 Merlin, Sarah Merlin, Silas Merlin, Wizard01 Merlin, Telitha Merlin, Vrrgo Merlin, Rocky Merosi, Luxe Merrienboer, Lance Mertel, Angus Mesmer, MysElf Messmer, Lonny Miasma, Utopar Michinaga, MTC Mielziner, Enysy Mikita, Celeste Miles, Giovani Miles, Guli Miles, Mars Miles, Noah Miles, RobWest Miles, Subzero Miles, DALLAS Milestone, Jane Milev, Jesper Milev, MMz Milev, YumYum Milk, Belle Milland, Berri Milland, Joanne Milland, Vicky Miller, Samantha Miller, Calvin Millions, Envy Millions, Lusty Millions, Versu Millionsofus, AsteroidS Mills, Emixam Mills, Goodstuff Mills, Guntrinkyt Mills, Isabella Mills, Landen Mills, Noelle Mills, Sand Mills, Djarno Mills, Mandee Milner, Haika Milo, Mankud Milo, Slobodan Milosz, Eliezer Mimistrobell, Amoret Mineff, Little Ming, Mako Minogue, Mandee Minogue, Milena Minogue, Sylfie Minogue, Manon Mirabeau, Tygeria Mirabeau, leliel Mirihi, Cmdr Misfit, disisme Misfit, fangy Misfit, Grim Misfit, RedWolf Misfit, Michal Mishin, Robby Mission, Shawn Mission, Haravikk Mistral, Thom Mistral, Sertories Mitchell, Temporal Mitra, Bphero Mizser, Stolar Mohr, DarkWulf Mokeev, Nemo Mokeev, sharon Mokeev, Sech Molinari, lara Molinaro, MARIOS Molinaro, James Mommsen, Sierra Monnett, Joan Monstre, Cattra Montagne, Galadhriel Montagne, AnnaMarie Montgomery, Christine Montgomery, Mariah Montgomery, Shawna Montgomery, Jemima Moo, Jihashi Moo, Moonie Moo, Wiske Moo, Borgie Moody, DOA Moody, Makinzie Moody, Preciousse Moody, Bit Moody, Luna Moody, ziphren Moonflower, Axl Moonlight, FxyLdy Moonlight, Stormy Moonlight, Lichtje Moonsoo, Astryd Moore, Haze Moore, Walker Moore, wiseman Moore, Zak Moore, Mordechai Moose, JMM Morahan, Kayleigh Morahan, Cyndi Moran, Marcus Moreau, Kathy Morellet, Violet Morellet, Heather Morenz, Maggie Morgan, Newbie1canobe Morgan, Sumar Morgan, Bella Morico, Ornella Morigi, Eagle Morris, Amanda Morrison, Maeyanie Mosienko, Svetlana Mosienko, Trinity Mostel, Risa Mosuke, Falcon Mountain, NEWB Mountain, Windy Mountain, KittenAnne Mousehold, Minky Mousehold, Lawna Mower, Pure Moxie, webeagle Moy, Buckaroo Mu, Nye Mu, Kara Muir, Robert Muir, Criscad Muni, Jean Munro, Pranay Munro, Nobu Murakami, Shar Murakami, Yumi Murakami, Arrekusu Muromachi, Sasameyuki Muromachi, Usagi Musashi, Spiritfire Musketeer, Questyn Myhre, Myst Mysterio, Vincent Nacon, Fox Nadir, Morgana Nagorski, Sari Naheed, Yasmin Nakamichi, Aibyou Nakamura, Aluviel Nakamura, Kyriani Nakamura, Madeea Nakamura, Masao Nakamura, Misao Nakamura, Tammi Nakamura, Tanabata Nakamura, Nawtakune Nakatani, rich Nasu, Lev Nedkov, Coal Nelson, Shiharizad Nelson, Laurah Nemeth, Beladonna Nephilim, Lianna Nephilim, Seraph Nephilim, Sari Neruda, Tiberious Neruda, otakup0pe Neumann, Wilhelm Neumann, Chet Neurocam, Draconis Neurocam, Cenji Neutra, Lex Neva, Prokofy Neva, BC Nevadan, Seagel Neville, Judi Newall, Killian Newall, Si Newall, Roenik Newell, Jos Newman, Lynda Newman, MadCat Newman, Weaver Newman, Ian Newt, Ribblet Newt, ninjafoo Ng, Raideur Ng, William Niangao, Gao Niangao, Lori Nicholas, Pravda Nicholas, Evangeline Nichols, Joella Nico, Morpheus Nieder, Titzalina Nieder, Blaze Nielsen, Angelus Nielson, Lazaros Nikolaidis, lincoln Nikolaidis, Tiruviel Nikolaidis, Kenn Nilsson, Lib Nilsson, Jokyr Nimbus, Tateru Nino, Jyotsna Nishi, lloll Nishi, Roxas Nishi, Tuote Nishi, Katlene Niven, Kari Niven, Thegamer Nixdorf, May Noarlunga, Jo Noe, DesrAw Noel, Jacindia Noel, Jaz Noel, MelodyRose Noel, Mi Noel, Paden Noel, Ricky Noel, Sunno Noel, Ono Noh, Tuach Noh, Feras Nolan, Jane Nolan, Harald Nomad, Helen Nomura, Lolita Nomura, Richard Noonan, Aenea Nori, Aulin Normandy, Kat Normandy, Zebra North, Stephen Northport, Galare Novi, KittyMarie Novi, Soo Novi, Elia Nozaki, lynsey Nozaki, Rini Nozaki, Kinzo Nurmi, Yasmin Nurmi, Kyran Nyak, Lauren Nykvist, Karma Oates, Alice Obscure, Honeymoon Obscure, Mikhail Obscure, Origin Obscure, Dementia Obviate, Lucius Obviate, Mootly Obviate, TripleXXXTex Obviate, Vanessa Obviate, Vitis Obviate, Sieben Ochs, Avery Oddfellow, Clinton Oddfellow, Maczter Oddfellow, Sempervirens Oddfellow, Tashie Oddfellow, Wagahai Oddfellow, CarlinRae Odell, Johnny Odell, Liny Odell, Lucifer Odell, vanler Odets, Foxb Oe, Kiwini Oe, Natalie Oe, Eddy Ofarrel, Mylinn Ofeq, Roundabout Ogee, Bannock Ogg, Behemoth Ogre, Anju Oh, BlackCinders Oh, Canoe Oh, Crippy Oh, Dakotah Oh, Day Oh, Doo Oh, Feander Oh, Heady Oh, Job Oh, kyushudan Oh, Lila Oh, Luxura Oh, MrSim Oh, OHYES Oh, Oury Oh, Qyty Oh, Santa Oh, Svn Oh, Volta Oh, xepadd Oh, isla Oh, Angelina Ohara, Troy Oherlihy, Yasuragi Okame, Rephaim Okina, Sven Okonomi, benyamin Olaria, EvlDesire Oliver, Brightly Olivier, Renton Olivier, Gary Olson, Christopher Omega, Hamncheese Omlet, Joseph Omlet, Libuse Ondricek, luminye Onizuka, Miyuki Onmura, Toshiro Onmura, Hotaru Onomatopoeia, Isis Ophelia, Orchid Ophelia, Stumbelina Ophelia, Roberto Oppewall, Anthony Opus, Spaceman Opus, Vakis Oranos, Koop Orbit, Sammy Ormsby, Cal Orr, Usra Ostrich, Nikki Osumi, Ariel Otafuku, kevin Oto, CJ Oto, Ann Otoole, Patrice Otoole, Abyssin Otoro, Omega Otsuzum, Teravus Ousley, Straitjacket Overlord, Szegey Oxberger, LemonYellow Oxide, Tabitha Oxide, Rianne Ozsvar, Coyote Pace, Hare Pace, Dargon Pacer, Piero Padar, Zasha Padar, Chav Paderborn, Edison Paderborn, Otenth Paderborn, RC Paderborn, Sylvia Paderborn, Chandra Page, Lili Page, Raven Page, Web Page, AnneJoy Paine, DravenLee Paine, Isobella Paine, Larva Paine, Lushious Paine, Thomas42 Paine, Cesar Pakula, Federico Palen, Monica Palen, Diana Palmer, sense Palmer, Crazy Pangaea, Sacha Pangaea, Upinthe Panhandle, Simbiant Paperclip, Drea Paperdoll, Pannie Paperdoll, raymon Paperdoll, jaesung Papp, JohnJ Papp, Alec Paragon, Cliff Paris, Vertigo Paris, Blue Parisi, serena Parisi, JR Parker, Kora Parker, Prawnyloks Parker, Etheria Parrott, Tommy Parrott, Selaras Partridge, Sexy Partridge, Maegen Parvenu, Francie Pasternak, Mr Pasternak, Eloise Pasteur, sandhya2 Patel, Bruce Patton, Penny Patton, Dave Patton, Haole Pau, Andy Paul, LanNoire Paul, Nolte, Paul, Nicholi Pavlova, shadow Pawpaw, Cuffman Payne, Deseri Payne, Gypsy Paz, LupineFox Paz, Shy Peart, Tamara Peart, Pontias Peck, Robin Peel, Elum Pegler, Kotek Pekli, Pulp Pekli, Reaser Pencer, Caliandris Pendragon, Hiro Pendragon, Jopsy Pendragon, Darren Pennell, Mideon Pennell, Powell Pera, Stanley Pera, Tajma Pera, FlipperPA Peregrine, Jennyfur Peregrine, Alana Perenti, MaxPerfect Perenti, Revolution Perenti, MoonGazer Perhaps, Brooklyn Perinal, Shawk Pertwee, Drakior Perun, Charm Perway, Jubilee Pessoa, Riley Pessoa, Tristram Petion, Aline Petrov, Larry Petrov, PantzerHamzter Petshop, scott Petshop, Foxy Petunia, Inara Pey, Tony Pey, Brathak Pfeffer, Henrick Pfeffer, Jack Pfeffer, Marlo Pfeffer, Resi Pfeffer, Lum Pfohl, TACK Pfohl, rren Pfohl, Psyke Phaeton, Sangi Phaeton, Don Pharaoh, Topdog Pharaoh, Anderson Philbin, Philb Philbin, Ridge Phillips, Maximus Phlox, Careltje Phoenix, Winter Phoenix, Ummm Pickles, Piper Picnic, Loki Pico, Hawk Pidgeon, followmeimthe Piedpiper, Alin Piek, Ricky Piek, angelwithahintoflife Pierterson, Elsibeth Pierterson, Marod Pierterson, Noshi Pierterson, Shanel Pierterson, Natasha Pike, Joshua Pilote, Adeline Pinion, Miguel Pinion, Quinn Pinion, Peach Pink, Tisha Pink, Lulu Pink, alice Pinkerton, Getty Pinkerton, Apple Pinkney, Becky Pippen, Tam Pippen, sandra Pitney, Trish Pitney, Max Pitre, Hawk Pitts, Spritely Pixel, Chel Pixie, HotBuns Pixie, Mina Pixie, Mcplane Planer, simon Planer, Guy Plasma, Halogen Plasma, Mathias Plasma, Phill Plasma, White Platini, Phoenix Platthy, Gallia Plubeau, Corki Plunkett, PollyD Plunkett, Asalynda Pluto, Evgeniy Podolsky, OTTONE Pogelmann, Henry Poindexter, Phoebe Poitier, Rowan Poitier, Rigorus Poitier, Stephen Pollock, Mishka Pomeray, Kuatum Poole, Karina Popinjay, Francesca Poppy, Hot Poppy, Shelly Portello, Anthony Portsmouth, Ian Portsmouth, HackPatooey Posthorn, JohnnyD Posthorn, Madison Posthorn, Antitese Poulot, Uccello Poultry, Tanarus Pow, Frederic Prevost, Bill Priestly, Dit Priestly, Phil Priestman, Rachelle Priestman, Sage Priestman, Simone Prieto, Wundur Primbee, Jacob Primeau, Twilight Primeau, Beautifull Princess, Creamyyy Princess, Graciella Princess, Lyna Princess, Theo Prinz, Krono Pro, Don Proost, Games Prototype, Melissa Prunes, Pie Psaltery, Danger Pugilist, Lily Pussycat, LoL Pye, PITTACOS Pye, Prize Pyle, Reese Qian, Ash Qin, Jen Qinan, milesmess Qinan, Quino Quaggy, Starsitter Quality, Algeard Quamar, Flack Quartermass, Marcus Quartermass, Shaggy Quimby, Laura Quimby, Memir Quinn, Amy Quirk, Edge Qunhua, HeinzJoachim Qunhua, Tsing Qunhua, brooke Ra, Dael Ra, Knightsof Ra, Mayo Ra, Roger Raabe, Sharven Raabe, Sail Racer, Supra Racer, Ada Radius, Rob Raffke, Rayne Ragowski, Starfoxtj4 Rail, mantitaur2 Rainbow, Sparkly Rainbow, Andromeda Raine, musicteacher Rampal, Hoyle Rang, Hermione Ranger, jurnal Ranger, Horgus Rasmuson, Trend Rasmuson, Whoosh Rasmuson, Rascal Ratelle, Eriss Rau, Morugai Rau, Ozhika Rau, slave Rau, Awsoonn Rawley, Marie Rawley, Guy Raymaker, JAC Raymaker, PlanetThoughts Raymaker, Rogier Raymaker, Trident Raymaker, Xoren Raymaker, Ranaa Raymond, Rowena Rearwin, Londyn Reatequi, Neo Rebus, Bekka Redgrave, Etude Redgrave, Lyn Redgrave, Publicist Redgrave, Wingless Redgrave, Allie Ree, Jon Ree, Thyna Ree, Zi Ree, Todd Reed, RhaRha Rees, Alex Regent, Alexander Regent, Cat Rehula, Timoteo Reifsnider, Sirus Reiner, Trilobite Reisman, ali Reiter, Ruben Reiter, Fenrir Reitveld, EmpressNever Rejected, Maya Remblai, Kapu Ren, Atticus Renoir, catsrounds Renoir, Cedric Renoir, Julion Renoir, karman Renoir, Sim Renoir, Isabela Repine, MysticalCeCe Repine, Sissimaid Resistance, Tom Reuven, Beagle Revolution, Xin Revolution, Keex Rexroth, Ordos Reymont, Roz Reynolds, CJ Rezillo, Rena Rhea, Hiroaki Rhino, Curious Rhode, Lexy Rhode, Natriumcitrate Rhode, Toshi Rhode, Pam Ribble, Gia Richard, Gigly Richez, Hutton Richez, Renae Richez, Ronald Richez, Roxi Richez, Jimbo Richez, Josh Rident, Finncaev Riederer, Aeryn Riel, INK Rinkitink, Puck Rinkitink, Riki Rinkitink, Edoardo Ritt, Bibi Riva, Eche Riverview, helloau Riverview, Liam Roark, Angela Robertson, Jay Robson, Brooks Rocco, Marth Rocco, Mo Rocco, Wolf Rocco, dartagnan29 Rockett, marco Rockett, Monida Rockett, ortaga Rockett, Raziel Rockett, Anastasia Roelofs, Stormy Roentgen, Hector Roffo, Ricci Roffo, Tonio Roffo, Picaro Roffo, IvanTwin Rogers, Chrisje100 Rojyo, Rowana Rolland, Shine Rolls, Iris Ronmark, Jacques Ronmark, Phil Ronzoni, Keishii Roo, MattyMcHatton Roo, Kimika Rookwood, Prego Rosca, Rayne Rosca, Uber Rosca, Felix Rosenberg, Amethyst Rosencrans, Alejandro Rosenthal, Davian Rosenthal, Edgar Rosenthal, Seth Rosetta, Alustriel Rosewood, Arenae Rosewood, Fury Rosewood, Gwendelyn Rosewood, Kira Rosewood, liz Rosewood, Oriene Rosewood, Lashelle Rosse, Roodvosje Rosse, Rose Rosse, Rico Rosse, Jonah Rossini, Milordino Rossini, Sparrow Rossini, Yira Rossini, Zanah Rossini, zina Rossini, Francaldo Rotunno, Reckless Rotunno, Excel Rousselot, mica Rousselot, Lexie Rovio, Alexandra Rucker, Lilith Ruff, Stina Ruff, Aragorn Runo, Kragelund Runo, Rinziq Runo, ViRi Runo, Distilled1 Rush, Jordann Russell, Kryton Russell, Miyaki, Russell, Brent Russell, Revons Rutabaga, Rocky Rutabaga, FEZ Rutherford, Darcy Rutledge, Jo Ruttenberg, Odo Ruttenberg, Theodorrick Ruttenberg, Artix Ruxton, Armand Ryan, Zakeir Rydell, Cathy Ryder, McCall Ryder, Inarra Saarinen, Kai Sabena, Sarie Sabena, Alissa Sabre, Arcticfire Sabre, BamBam Sachertorte, kai Sachertorte, Umphrey Sachs, Mila Sadovnycha, Proxima Saenz, Lynne Sage, Cheloxchile2006 Saiman, Milo Saintlouis, Natasia Saintlouis, Trinity Saintlouis, Rollergirl Saiz, Nyoko Salome, Scandinavian Salomon, Agarash Salsman, Rayne Saltair, Horus Salubrius, Solta Salyut, Nicola Samiam, Aleg Sandell, angeltf Sands, Balkan Sands, Charmaign Sands, Check Sands, Damien Sands, Orika Sands, Other Sands, Padraic Sands, Sotos Sands, Taira Sands, Cloudia Sani, Carinthia Sansome, Allasandra Santos, Rosell Santos, Solanghe Sarlo, Ishara Sartre, Charles Sassoon, Damian Saule, Jesse Sautereau, Natalia Sawley, Billie Scaggs, Mordecai Scaggs, Roz Scaggs, Socaliwag Scaggs, Johannason Scarborough, Jim Schack, Norm Schack, Fatz Scheflo, MissKitten Schildhauer, Nelson Schmo, Werner Schnabel, Tammye Schneider, Frank Schneider, Funk Schnook, cleopatras Schnyder, mylife Schnyder, ScOrPiOn Schnyder, Count Schridde, Kircheis Schroeder, Julia Schulze, Anita Schwartzman, Cornelious Schwartzman, Etrius Schwartzman, Dr Scofield, Joe Scofield, RyanAva Scofield, Kira Scott, Six Seale, Sterremare Seale, Dallas Seaton, Star Seaton, Spurs Seattle, Elio Seelowe, Jaden Seelowe, Moira Seelowe, Teleio Seferis, Artemus Seifert, Gouranga Seiling, Alyrae Seitan, Grace Selene, Maureen Selene, amandaelisabeth Sellers, Chelsey Sellers, Fashion Sellers, Novellium Sellers, Kerutsen Sellery, Semolina Semaphore, ice Semple, Daisy Semyorka, Roxy Semyorka, DarkStar Senior, River Senyurt, Singular Seoul, James Seraph, Jesrad Seraph, Liv Serf, Tears Serf, Neon Serge, Magnum Serpentine, Jazzy Serra, Aiyana Serrurier, Coelacanth Seurat, Jean Severine, Landreu Severine, Gitana Sevier, Elizabell Sewell, johni Seymour, nayeli Shabazz, Talena Shabazz, Princess Shalala, Robbie Shamroy, Dimas Shan, Lancer Shan, Nae Shan, onlyyou Shan, Shango Shan, Spirit Shan, Jumpda Shark, DigiKatt Shaw, Steffi Shenlin, Afon Shepherd, Clair Shepherd, Eastern Shepherd, LadyLeah Shepherd, Lexis Shepherd, Siddhartha Shepherd, Taran Shepherd, Valentin Shepherd, Jieux Shepherd, Delicious Sheridan, LauraAnne Sheridan, Remco Sheridan, Aki Shichiroji, Todedoz Shichiroji, BlckCobra Shikami, Mary Shikami, Seven Shikami, Thomas Shikami, Szia Shilova, lisalove Shimada, Yoyo Shinobu, Tarrant Shipman, Kitsuribami Shirabyoshi, Amber Shirakawa, AmySue Shirakawa, Kanna Shirakawa, Shelectra Shirakawa, CJ Shojo, Felix Sholokhov, VonFoxFire Sholokhov, Renegade Shriner, Alexandra Shu, Bung Shu, Ddevine Shuftan, emmakael Shuftan, Skipper Shutt, Jaime Sicling, Ko Sicling, Lucien Sidek, Ulrich Sidran, Darlene Sieyes, Darling Sieyes, sparkles Sieyes, Mjren Silvera, Apotheus Silverman, HVX Silverstar, Nirven Silverstar, Rocco Silverstar, Tamar Silverstar, Rosie Simca, Drvid Simoni, Dragos Simons, barnowlgirl Sinatra, Cheyanne Sinatra, marilsdb Sinatra, Nanceee Sinatra, Quiet Sinatra, Vent Sinatra, Frosty Sinatra, Misty Singer, Katie Singh, Sydney Singh, Philo Sion, followingwaves Sirbu, Saya Sirbu, Don Sivocci, Danielle Skall, Hegemon Skall, JASMINE Skall, Mykal Skall, Dovryn Skall, Arathorn Slade, Artakan Slade, djsunz Slade, Eleana Slade, Erica Slade, Jupiter Slade, Kronikz Slade, Methosmv Slade, piro Slade, Snapeslove Slade, Sys Slade, TylerSnk Slade, Wylee Slade, ZirQ Slade, Xabax Slade, Malik Slapstick, Coug Sleeper, Kenny Sleeper, Lucia Slippery, Adrian Sloane, Alistair Sloane, Rysz Sloane, Angel Slocombe, PrinceDK Slunce, Flo Slunce, Tatiana Smagulov, badboy1331 Smalls, Brat Smalls, EDhardy Smalls, Lomgren Smalls, DonAmon Smirnov, Andrew Smith, Elliott Smith, Mikal Snakeankle, Esch Snoats, Eian Snook, Pavee Snook, floe Snookums, kramer Snookums, Rach Snookums, Jonboy Snye, fionn Soderstrom, miguel Soderstrom, Bellisima Sodwind, Dafydd Sodwind, Scott69 Sodwind, Shipper Sodwind, Ilianexsi Sojourner, Shirokuro Sojourner, The Sojourner, Wiccan Sojourner, Elijah Sol, Lara Sola, Vanilla Sola, Silvari Soleil, David23 Something, DolphPun Somme, Rhyph Somme, aewyn Sondergaard, Kali Sonic, Packard Sonic, Jayman Sonnenblume, Pippen Sonnenblume, Esichs Sonnerstein, Sylvia Sonoda, ASCLEPIUS Soon, Tecumseh Soon, Julia Soothsayer, Shadowspawn Soothsayer, Tindallia Soothsayer, RJ Source, Akemi Soy, Aln Soy, Aaron Soyer, Tsuno Soyinka, Oz Spade, Ellen Spark, karlynn Sparkle, Kaylie Sparkle, TruHeart Sparkle, Dave Sparrow, slyflower Sparrow, Flapjack Spatula, Cheyenne Spearmann, Jester Spearmann, JewelKicker Spearmann, Data Spectre, Rai Speculaas, Sin Speculaas, Thornne Speculaas, Ehdward Spengler, mo Spengler, Wesley Spengler, Datentyp Sperber, Niko Sperber, Giuseppe Spicoli, Snakeye Spicoli, Marcus Spire, Setori Spire, Crackervelli Spitteler, Naughty Spitteler, Studders101 Spitteler, Yojne Spitteler, ScaryMary Spitz, Geezer Spoonhammer, GutterBlood Spoonhammer, Tour Spoonhammer, Sheet Spotter, tree Sprawl, Kitty Sprocket, Alan Standish, Fox Standish, Clive Stanwell, Alexis Stapovic, Hippyjim Starbrook, Missy Starbrook, Thunder Starbrook, Babydoll Stardust, Birdy Stardust, Johannes Starostin, Ariana Starr, Funk Starr, eltee Statosky, Hanako Stawberry, Micheal Steadham, Blueman Steele, sugar Steele, Jennifer Steele, Golda Stein, Tyler Stein, Uber Stein, Bernd Steinhardt, Whisper Stella, Hjoerdis Stenvaag, Timmy Stepford, LaserFingers Steptoe, Athena Sterling, Selvina Sterling, Hunter Stern, Ocmer Sternberg, Jabath Steuart, Sylvia Steuben, Bracin Stevenson, Sammmy Stewart, Skeeter Stiglitz, Lily Stilman, Nisaa Stilman, Quick Stilman, Spaydar Stine, Unger Stine, Sherrade Stirling, Till Stirling, Juggernaut Stoklitsky, Meret Stonebender, Argent Stonecutter, Gearsawe Stonecutter, Kayla Stonecutter, Liquids Stonewall, Nevera Stooge, Matthew Stork, Sam Stork, Neotoy Story, AllieKat Stovall, Krystal Straaf, Kyrus Straaf, Laars Straaf, Niccia Straaf, Aloe Stradling, egbert Stradling, Lotus Stradling, SlyFox Stradling, Eristic Strangelove, Thaumata Strangelove, Valiant Strangelove, Salome Strangelove, Erica Strauss, Zinger Strauss, Gabrielle Street, Artistniko Streeter, Bruce82 Streeter, Builder Streeter, dast Streeter, Hans Streeter, Stilette Streeter, Darzus Strutt, Bluto Stubbs, Olivier Sturges, Kharie Su, Rexx Su, Vudu Suavage, Silverrain Sucettes, Siyu Suen, Zack Suen, Linnian Sugar, Sierra Sugar, Stacey Sugar, Jodie Suisei, Koto Sukra, Takira Sukra, Ravanne Sullivan, Rik Sullivan, Sofi Sullivan, Joffi Sumbula, BrightAngel Summers, Kiyana Summers, Eclipsed Sun, Shinshinto Sungsoo, Angel Sunset, Warord Suntzu, DalE Supply, ivan Supply, Frictionless Surface, Brightwing Surtees, David Surtees, Georges Susa, Caterina Susanti, Fatima Susanti, Owen Susanto, Caliburn Susanto, Kevin Susenko, Forseti Svarog, Kinga Svarog, Batman Swenholt, Flame Swenholt, Shyressa Swenholt, Earle Swenson, Harvey Swenson, Kevin Swenson, Anastasia Swindlehurst, Liz Swindlehurst, Swein Swindlehurst, Verrenus Swindlehurst, Christain Switchblade, Guy Szondi, Nonlucid Szondi, Sagmumu Szondi, XVenomX Szymborska, CaelThunderwing Tackleberry, Mitzi Tackleberry, Ayla Tae, Maya Tae, Princess Tae, Carsten Taft, Gigs Taggart, Aphrodite Tagore, Lynn Tagore, Jenna Taira, Zephora Taiyou, Rusmi Taka, Kaimen Takahe, Akina Takakura, Sabina Takakura, Tao Takashi, Cornelius Tal, Dolmere Talamasca, Kelindra Talamasca, Sabane Talamasca, Tod69 Talamasca, Bad Tamale, Kitchkinet Tamale, Dany Tammas, kym Tammas, Phoming Tammas, sasha Tammas, Alina Tamura, Janu Tamura, Karetta Tamura, Melli Tamura, Morina Tamura, Snake Tamura, Valentina Tamura, Rutain Tandino, Tracy Tani, Jolt Tank, Rachel Tapioca, Ilyara Tardis, Jaxx Tardis, Aaron Tardis, Sim Tatham, Tobi Taurog, Joey Tavoularis, John Taylor, Jeffrey Temin, Enabran Templar, Crymzon Tempura, Jehan Tendaze, Angel Tengu, Arctic Tenk, Ginevro Tenk, OolBatar Tenk, Sally Tenk, Storchi Tenk, Bloodsong Termagant, Cubey Terra, Lynn Terra, Niles Theas, Sterre Theas, Lost Thereian, Osprey Therian, Lukas Thetan, Larson Thibaud, Redd Thielt, Tana Thielt, Thongshaman Thirroul, Millie Thompson, Brooke Thurston, Lisa Thyben, Bengal Tiger, RavenAnn Tiger, Terrigo Tiger, Sable Till, Soraya Till, Zayn Till, Trixie Timtam, immortal Tiramisu, Matthew Todd, Watermelon Tokyo, Amily Toland, Prijian Toland, Wigger Toland, Wym Toland, Shaia Toll, harathoi Toman, EH Tomcat, Pawz Tomcat, nicky Tomsen, Olyntchen Tomsen, Siul Tomsen, Zukini Tomsen, Darkover Tone, JazzySweet Tone, Tea Tone, Shelly Toonie, Tristan Torgeson, Katie Tornado, manufr Torok, Drew Torres, Xavier Tosung, Benjamin Tower, TJ Tower, Coquine Tracy, Fintaya Tracy, Herman Tracy, killer Tracy, Marcel Tran, Cabal Trautman, Nadja Travanti, Steve Trenchard, Grimm Trenchmouth, Neogrinch Trenchmouth, Scarlet Trenton, input Trilam, Debbie Trilling, Dahlia Trimble, TrainingDay Trimble, Candy Tripp, FeelGood Tripp, Nate Tripp, Skalligrim Tripp, stimpy Tripp, Michael Tripsa, Orion Tristan, Sam Troell, Celebrity Trollop, MaidHeather Trollop, Roberto Trotter, Tipsey Troughton, Lucille Trudeau, Paul Trudeau, arthus Truffaut, Chambord Truffaut, Siss Truss, Boshiken Tsuki, Sindy Tsure, Dante Tucker, ImAOzGrl Tucker, Scott Tucker, BabyAlice Tulip, Bryce Tully, Pixie Tungl, Lyr Tuppakaka, Hawthorn Tuque, Omei Turnbull, Victor Tuxing, Cloe Twang, Twill Tymets, Andrew Tyson, Lyndyn Tzara, Ilyushin Tzedek, Echo Uba, francois Uba, James Udal, Jman Udet, Sara Udet, Koola Uggla, Rocky Uggla, Barry Ultsch, Didro Ultsch, Ianbob Ultsch, Jacki Ultsch, Tchize Umarov, Pepper Underall, Silky Underall, MadameThespian Underhill, Archanox Underthorn, Muzicole Undertone, Chance Unknown, Luthien Unsung, Random Unsung, Sammael Unsung, Totally Unsustainable, Withershins Unsworth, Alison Upshaw, daniel27 Upshaw, Downs Upshaw, Wookie Upshaw, Mr Ur, dlen Uriza, olivia Uriza, tamzi Uriza, clashman Usher, Egelion Usher, dragonboy Utorid, Shade Vacano, Tali Vacano, VanDelay Vacano, Waters Vacano, Gisela Vale, Suena Vale, Anna Valeeva, Caelestaeia Valeeva, Jrhueving Valeeva, Keela Valeeva, Sue Valeeva, Huns Valen, Belle Valentine, LaTaina Valentine, Nenilai Valentine, Sweet Valentine, Lightwave Valkyrie, SexyEyes Valkyrie, Shucks Valkyrie, Cherie Vallely, Charlie Vanalten, Dina Vanalten, Jonash Vanalten, WindyWeather Vanalten, Anousjka Vanbeeck, Joseph Vandeperck, Annabelle Vandeverre, Cyn Vandeverre, Maia Vandeverre, Starlight Vandeverre, Gunter Vandyke, Sascha Vandyke, Savage Vanguard, Trinity Vanmoer, Blucool Vanness, Janey Vansant, Reva Vanvleck, Bunnee Varmint, Priest Varun, Zermit Vasilopita, Hornern Vaughan, Marie Vaughan, Marleen Vaughan, Tiffany Vaughan, Cinthya Vavoom, Mithik Vavoom, Speeder Vavoom, QuietlyCharmes Vega, Aleksy Vella, Delsara Vella, Falcon Vella, Gippy Vella, Loftvoker Vella, marivy Vella, mikky Vella, PrincessRainbow Vella, Ramiro Vella, Charla Vellhi, Dave Vellhi, Holly Venera, havelock Venkman, Dark Ventura, Psyche Vertes, Rhianna Vertes, Nyteshade Vesperia, Dahlia Vezina, Danielle Vidor, Darucain Vieria, Dytska Vieria, Heidi Vieria, ThaRi Vieria, Yora Vig, Tryme Viking, Peri Villota, Violetta Villota, Steve Vinson, Eva Virgo, Camille Virtanen, Giada Visconti, Seraphim Vixen, Robin Vogel, Troy Vogel, Ebony Voight, Heather Voight, Lexie Voight, Roy Voight, Rutger Voight, Cary Volare, Constanza Volare, Dick Volare, FleetingJoy Volitant, Isara Vollmar, Sasha Vollmar, Scarlett Vollmar, Aagaard Voom, Aliens Voom, Duchess Voom, Plenty Voom, Pope Voom, quewan Voom, Selina Voom, Theresa Voom, Yes Voom, Yolanda Voom, Ki Voss, Fatima Vuckovic, Noone Vuckovic, Viana Vuckovic, NARUTO Wade, Warren Wade, Wizardesssss Wade, esclava Wakawaka, Squeebee Wakawaka, Brian Wellman aka Bribo Wakawaka, Pandora Wake, Hosic Wakmann, Greenfield Walcott, Gillian Waldman, Hiram Walker, Tiffany Walsh, Piers Warf, Xenon Warf, Relkin Warrigal, JK Warrior, Shan Warrior, Eowyn Watanabe, Hatibei Watanabe, JimmyC Watanabe, Poemi Watanabe, Toru Watanabe, Tsukasa Watanabe, Gen Watson, Harley Watts, Keeley Waverley, Misterblue Waves, Nimrodina Wayne, Bill Weaver, Nitram Wei, Sistagrlro Wei, Scully Weir, Adrina Welders, Escape Welles, Ivy Welles, Tracy Welles, Vanity Welles, XaMaD Welles, breemman Wellman, Spyder Werribee, Angela Wertmuller, Ronny Wertmuller, Mike Westerburg, Sofia Westwick, Lea Weyland, Darryl Wheeler, lily Whetmore, Lola Whetmore, Sabby Whiplash, SteveR Whiplash, Trader1 Whiplash, Wynx Whiplash, Chalky White, Les White, Sid White, Juicefroma Whitehead, Garrett Whitfield, Jewelia Whitfield, NaomiG6159 Whitfield, Asher Whitman, GoldEagle Whitman, Lizziey Whittenton, Athena Whizenhunt, GreenGate Widdershins, EmCee Widget, edwin Wijaya, Yamtx Wijaya, Aunnia Wilberg, Corwin Wilberg, Elric Wilberg, Johann Wilberg, Brittany Wildcat, MISGREENCHRONIC Wildcat, Bcreative Wilde, Midnight Wilde, Stormy Wilde, DJMantega Wilder, KJ Wilder, Nikki Wilder, Rebel Wilder, Terra Wilder, Infalle Wildung, Streak Wildung, Hed Williams, Michael B. Williams, Erica Williams, Benson Willis, Explorer Willis, Kithin Willis, Isandra Willunga, Kamots Wind, Merum Wind, Mystra Wind, Jaxom Winger, Alex2007 Winkler, Christopher Winkler, Frauke Winkler, Genny Winkler, Mwayne Winkler, Ridgie Winkler, Wolli Winkler, Janice Winnfield, Firefly Winx, Magus Winx, Cricket Wise, Marios Wise, AzurAA Wise, CountD Wishbringer, Heart Wishbringer, Missy Wishbringer, Caemlyn Witherspoon, Celeste Witherspoon, Kalia Withnail, Kami Woebegone, Ochi Wolfe, Salina Wolfe, kirkmegna Wombat, Luna Wood, Steve Wood, Eremia Woodbury, MeForest Woodget, Widgy Woodget, York Woodget, Patchouli Woollahra, Ronco Woolley, Kevin Woolley, Noah Woori, BiGSiN Wormser, Jaime Wormser, Dave Wormser, Joseph Worthington, Vitafit Wottitz, Keera Woyseck, Donnie Wrangler, Brandy Wright, Arian Writer, Bat Writer, Brina Writer, Dwayne Writer, FearToAll Writer, Grog Writer, Head Writer, Mne Writer, nathaniel Writer, Quixotic Writer, Riddley Writer, Two Writer, ZZ Writer, Zoya Writer, Faith Wunderland, Tommy3141 Wunderland, Evalyn Wunderlich, RainbowChef Wunderlich, Raistlin Wunderlich, Terrano Wunderlich, Wallyneumonic Wunderlich, Phil Wuyts, Carrie Wyler, London Wyler, sypher Wyler, TiTiNe Wyler, Tyron Wyler, Alaxandra Xeno, polo Xeno, Roz Xeno, Beatfox Xevious, Kamael Xevious, Leraje Xevious, eXPLORATRIX Xi, Ganesha Xi, groudon185p Xi, Kiyotei Xi, norritt Xi, Sadonya Xi, Aimee Xia, pixiedust Xia, Silky Xia, nimrod Yaffle, Yiffy Yaffle, icegirl Yalin, Jak Yalin, Kile Yamabushi, Naamah Yamabushi, OnnaYokai Yamabushi, Tengu Yamabushi, Tenshiko Yamabushi, Horseplay Yamauba, Enricob Yamdev, Lucian Yamdev, Darth Yao, Haaru Yao, Hex Yao, Milena Yao, Nyarlanathotep Yao, pescerosso Yao, Saigon Yao, TuTsi Yao, dima88 Yap, yuki Yaseotoko, Galea Yates, Originalman2000 Yates, Pumpy Yates, Sherry Yates, Tyrone Yates, Samar Yaud, Griffin Yeats, Kingsbury Yeats, Coos Yellowknife, Easy Yering, AlexYu Yifu, Jessmay Yifu, JoYoung Yifu, Lili Yifu, Snippy Yifu, Evolving Yin, Tzop Yip, Usus Yip, Moshiach Yohkoh, SolZephyr Yohkoh, Terish Yohkoh, Vicky Yongbo, Adp Yongho, Shizn Yongho, DrinkChocolate Yoshikawa, Grecco Yoshikawa, Julianus Yoshikawa, Yonagigai Yoshikawa, Yondaime Yoshikawa, Leto Yoshiro, Minako Yoshiyuki, Zindorf Yossarian, Mistral Yost, FoxSan Yosuke, Blythe Young, oiuy Young, Martyn Young, Briana Yue, cleo Yue, Dakotah Yue, Gumby Yue, Himeno Yue, nkoder Yue, Su2ndLife Yue, Seeker Yuequi, Judy Yun, Li Yun, Pielewop Zabelin, TinaDee Zabibha, Saressa Zadeh, Deathmare Zadoq, Krazzora Zaftig, Zud Zaftig, Lady Euterpe Zagoskin, Adam Zaius, Winston Zaius, Mysterious Zamboni, Dane Zander, TheDragonMaster Zander, Vallek Zander, AustinTodd Zanetti, Ianbra Zapedzki, Jill Zapedzki, skyzo Zapedzki, Supershine Zapedzki, Tristan Zapedzki, Zankoku Zapedzki, Joyce Zapedzki, Paul Zapotocky, seissab Zarf, xlene Zarf, Zyzzy Zarf, Freedom Zeami, Mala Zeami, ArbaJayba Zebaki, ToKizzable Zeddmore, Tocaelpito Zeffirelli, Nite Zelmanov, Zogborf Zelmanov, Suzanne Zeluco, Benton Zemach, Theo Zemach, Dee Zemlja, Xellessanova Zenith, Keji Zeno, Qat Zeno, Shekina Zeno, HotFoxy Zenovka, kazuku Zenovka, Lilly Zenovka, Susanne Zenovka, Talltenor Zenovka, Zola Zenovka, Hewee Zetkin, BeauZeau Zhao, malee Zhaoying, Takea Zhaoying, Maximilian Zhichao, Ricky Zhichao, Samael Zhichao, WildHeart Zhichao, Zflat Zhongyuan, Luthander Zhou, Silvanne Ziemia, Vocianna Ziemia, kankano Zinnemann, Enki Zinner, Omnephilite Zinner, Marios Ziskey, Jai Zucker, scott Zucker, Suzie Zucker, Daphnie Zuhrah, Mathoni Zuhrah, Ravi Zuma, Junkfooddog Zwiers, Aargle Zymurgy, Me Zymurgy and many others.
+ word_wrap="true">Second Life is brought to you by Philip, Andrew, Tessa, Cory, Frank, James, Doug, Hunter, Richard, John, Eric, Avi, AaronB, AaronY, Ian, Peter, Mark, Robin, Stephen, Tracy, Ryan, Alberto, Haney, Tanya, JimJ, Dan, Ben, Stephanie, Tim, Evan, Catherine, Colin, Chris, Reuben, Charity, Jeska, James, JonHenry, Kelly, Callum, Char, Daniel, DavidF, Don, Jeff, Lauren, Lee, Michael, Ramzi, Vektor, Steve, TomY, Tess, Kona, Brent, Clarissa, PeterP, Jesse, Annette, Cyn, Blue, Ginsu, Jonathan, Karen, Adam, Nova, Deana, Lizzie, Patsy, DavidK, Isaac, Pathfinder, Monroe, Jill, Benny, Altruima, Rheya, Jennifer, Jack, DaveP, Brad, Mick, Babbage, Elisabeth, Brian, Beth, Data, Ethan, Wendy, Nicole, Sky, Jeffrey, Zero, Coffee, Tesla, Kenny, Makiko, Nigel, Teeple, Lucy, Mia, Dee, Guy, Harry, Liana, Branka, Jimbo, Aura, Vasuda, SarahD, bethanye, Torley, Runitai, MikeS, PaulM, Milo, Hermia, JoeM, Melanie, Rejean, DSmith, SMiller, Susan, Jose, DongYun, Justin, Andrey, Syrah, Donovan, Henrik, Nora, Lexie, AC, Donna, ChrisC, Alex, Leyla, Kyle, Mathew, Devin, Joshua, DanC, Jessica, Harmony, Claudia, Tramel, Glenn, Betsy, Fritz, Jun, Adam, Cassandra, Ken, RyanW, Spike, Varas, Andy, Luke, RobLa, Chiyo, JohnZ, Dustin, George, Del, PeterP, Migyeong, Matthew, RMullane, CChampion, JTurbin, JamesC, Viola, Lightfoot, Jacqui, Sturm, Adrian, Buttercup, Alfred, Sunil, Alfred, Noel, Irfan, Jill, Yool, Jane, Yuki, Yoz, Matthew, Arthur, Jennifer, Karl, Brian, Ben, Janine, Christopher, Madhavi, Everett, Anthony, Joon, Jake, sean, Adreanne, Stephany, KellyJo, Jeremy, Pramod, Joshua, Sean, Christopher, Amy, Ceren, Katherine, jon, Sudheendra, James, Stephan, Kari, Kartic, Todd, Thomas, Joki, Rebecca, Belinda, Bert, Roger, Bridie, Kristi, Brian, Maria, John, Aric, Nathanel, Melinda, Darrell, Jennifer, Sandy and many others.
+Thank you to the following residents for helping to ensure that this is the best version yet: killerpatra2000 Allen, Dnali Anabuki, Daeph Balder, Hypatia Callisto, Twinsen Clift, Elly Crispien, Fremont Cunningham, DR Dahlgren, DBDigital Epsilon, Jay Evans, Garth FairChang, Brett Finsbury, Kitto Flora, Greg Giotto, Io Giugiaro, Gizmo Gorky, Onix Harbinger, Kal Hocken, Johanna Hyacinth, Dougal Jacobs, LampLighter Jacobus, Bounder Jimenez, Lao Jun, Benja Kepler, bamboolake Klaar, Cross Lament, Johnny Lerwick, Malcolm Lewellen, Lucy Linden, Frontier Linden, Guy Linden, Gwyneth Llewelyn, Kitten Lulu, Ali Maltz, Zoren Manray, Shirley Marquez, Fabio Medby, Peter130980 Miles, Feynt Mistral, Adonica Moy, Destiny Niles, Philippo Novi, Stumbelina Ophelia, Stumbelina Ophelia, Coyote Pace, Kar Parks, Xanshin Paz, Hensonian Pennyfeather, Funk Schnook, Funk Schnook, Derek Sienkiewicz, RopeMasterDom Skjellerup, Dominick Sneerwell, Packard Sonic, Oz Spade, Khashai Steinbeck, Argent Stonecutter, Argent Stonecutter, Linnian Sugar, Aphrodite Tagore, Dirk Talamasca, DRAZIC Torok, Lyr Tuppakaka, Shade Undertone, zechi Uram, Huns Valen, Winter Ventura, Gillian Waldman, Will Webb, XaMaD Welles, Sahara Westerburg, Beatfox Xevious, Questor Yifu
APR Copyright (C) 2000-2004 The Apache Software Foundation
Cg Copyright (C) 2002, NVIDIA Corporationa.
@@ -32,8 +30,7 @@ zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler.
All rights reserved. See licenses.txt for details.
-Steve, just think of a snappy quote. It's not *that* hard, is it?
-
+We're gonna need a bigger boat.
- Autoreturn other resident's objects (minutes, 0 for off):
+ Autoreturn other residents' objects (minutes, 0 for off):
+
-
+ left="333" mouse_opaque="true" name="?" width="20" />
-
diff --git a/linden/indra/newview/skins/xui/en-us/floater_auction.xml b/linden/indra/newview/skins/xui/en-us/floater_auction.xml
index 9a13ce1..6847d16 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_auction.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_auction.xml
@@ -11,15 +11,6 @@
-
-
- Auction
-
-
- First Land
-
-
diff --git a/linden/indra/newview/skins/xui/en-us/floater_avatar_picker.xml b/linden/indra/newview/skins/xui/en-us/floater_avatar_picker.xml
index bb19008..a0e6a91 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_avatar_picker.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_avatar_picker.xml
@@ -2,13 +2,13 @@
+ title="Choose Resident" width="240">
- Type part of the person's name:
+ Type part of the resident's name:
@@ -251,15 +251,7 @@ You already own land.
Your account can own land.
-
- This will be your first land purchase, and the
-only time you can buy a 'First Land' parcel.
-
-
- This will be your first land purchase, but isn't
-a parcel reserved for first time buyers. You may want
-to use Search to locate a cheaper 'First Land' parcel.
-
+
You hold [BUYER] square meters of land.
diff --git a/linden/indra/newview/skins/xui/en-us/floater_directory.xml b/linden/indra/newview/skins/xui/en-us/floater_directory.xml
index 8184fdb..3beb3a8 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_directory.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_directory.xml
@@ -36,7 +36,7 @@
-
+
@@ -229,7 +229,7 @@
-
+
@@ -259,7 +259,7 @@
name="incpictures" width="200" />
For Sale - Estate
-
- First Land
-
@@ -385,7 +382,7 @@ To buy direct, visit the land and click on the place name in the title bar.
max_length="63" mouse_opaque="true" name="name" width="128" />
@@ -496,22 +493,28 @@ To buy direct, visit the land and click on the place name in the title bar.
h_pad="0" halign="left" height="16" left="4" mouse_opaque="true"
name="find" v_pad="0" width="50">
Find:
-
+
+ max_length="63" mouse_opaque="true" name="name" width="200" />
+
+
-
+
-
+
+
-
-
+
+
Your currently active group is displayed in bold.
-
-
+
+
-
+
You belong to [COUNT] groups (of [MAX] maximum).
-
-
-
-
+
+
+
-
-
+ scale_image="true" tab_stop="true" width="80" />
+
+
diff --git a/linden/indra/newview/skins/xui/en-us/floater_html.xml b/linden/indra/newview/skins/xui/en-us/floater_html.xml
index 12d6ee0..98cdb8e 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_html.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_html.xml
@@ -1,23 +1,19 @@
-
-
-
-
-
-
-
-
- Progress text goes here
+ height="500" min_height="300" min_width="300" name="htmlfloater"
+ title="" width="700">
+
+
+
+ In-World Help
+
+ http://www.secondlife.com/app/support/inworld.html
-
+
+ Additional Help
+
+ http://www.secondlife.com/app/support/support.html
+
+
\ No newline at end of file
diff --git a/linden/indra/newview/skins/xui/en-us/floater_im.xml b/linden/indra/newview/skins/xui/en-us/floater_im.xml
index a0d6a1e..89595a9 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_im.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_im.xml
@@ -13,4 +13,25 @@
[FIRST] [LAST] is offline.
+
+ Error making request, please try again later.
+
+
+ You do not have sufficient permissions.
+
+
+ The requested user is no longer in the help session.
+
+
+ adding agents to chat session with
+
+
+ messaging chat session with
+
+
+ teleporting to creator of
+
+
+ You have been removed from the group.
+
diff --git a/linden/indra/newview/skins/xui/en-us/floater_instant_message.xml b/linden/indra/newview/skins/xui/en-us/floater_instant_message.xml
index 31ae55c..d64452f 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_instant_message.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_instant_message.xml
@@ -32,6 +32,10 @@
max_length="1022" mouse_opaque="true" name="chat_editor"
select_all_on_focus_received="false" select_on_focus="false" tab_group="1"
width="345" label="Click here to instant message" />
+
[NAME] is typing...
+
+ Starting session with [NAME] please wait.
+
diff --git a/linden/indra/newview/skins/xui/en-us/floater_joystick.xml b/linden/indra/newview/skins/xui/en-us/floater_joystick.xml
new file mode 100644
index 0000000..211b6ee
--- /dev/null
+++ b/linden/indra/newview/skins/xui/en-us/floater_joystick.xml
@@ -0,0 +1,57 @@
+
+
+
+ X-Axis
+ Y-Axis
+ Z-Axis
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Yaw
+ Pitch
+ Roll
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Zoom
+
+
+
+
+
+
+
+
+
+
+ Joystick Monitor
+ Axis [NUM]
+
+
diff --git a/linden/indra/newview/skins/xui/en-us/floater_lsl_guide.xml b/linden/indra/newview/skins/xui/en-us/floater_lsl_guide.xml
new file mode 100644
index 0000000..29d1fa2
--- /dev/null
+++ b/linden/indra/newview/skins/xui/en-us/floater_lsl_guide.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/en-us/floater_preferences.xml b/linden/indra/newview/skins/xui/en-us/floater_preferences.xml
index d0c73a5..c1df5a1 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_preferences.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_preferences.xml
@@ -15,9 +15,14 @@
label_selected="Apply" left="545" mouse_opaque="true" name="Apply"
scale_image="true" width="70" />
+
diff --git a/linden/indra/newview/skins/xui/en-us/floater_script_ed_panel.xml b/linden/indra/newview/skins/xui/en-us/floater_script_ed_panel.xml
index 815e30e..570fff9 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_script_ed_panel.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_script_ed_panel.xml
@@ -3,7 +3,7 @@
hidden="false" left="0" mouse_opaque="true" name="script panel" width="500">
Loading...
@@ -24,10 +24,10 @@ Loading...
follows="left|bottom" font="SansSerifSmall" h_pad="0" halign="left"
height="12" hidden="false" left="12" mouse_opaque="true" name="line_col"
v_pad="0" width="128" />
-
-
+
diff --git a/linden/indra/newview/skins/xui/en-us/floater_tools.xml b/linden/indra/newview/skins/xui/en-us/floater_tools.xml
index 5cb3a71..e1031b7 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_tools.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_tools.xml
@@ -720,7 +720,7 @@
left_delta="78" mouse_opaque="true" name="text skew" v_pad="0" width="63">
Skew
-
Dimple Begin and End
-
-
diff --git a/linden/indra/newview/skins/xui/en-us/menu_inventory.xml b/linden/indra/newview/skins/xui/en-us/menu_inventory.xml
index 72de4ec..bd955e3 100755
--- a/linden/indra/newview/skins/xui/en-us/menu_inventory.xml
+++ b/linden/indra/newview/skins/xui/en-us/menu_inventory.xml
@@ -174,12 +174,8 @@
-
-
-
+ label="Start Conference Chat" left="0" mouse_opaque="true"
+ name="Conference Chat Folder" width="128">
@@ -209,6 +205,11 @@
left="0" mouse_opaque="true" name="Offer Teleport..." width="128">
+
+
+
diff --git a/linden/indra/newview/skins/xui/en-us/menu_pie_avatar.xml b/linden/indra/newview/skins/xui/en-us/menu_pie_avatar.xml
index 91cf5cf..91e27b7 100755
--- a/linden/indra/newview/skins/xui/en-us/menu_pie_avatar.xml
+++ b/linden/indra/newview/skins/xui/en-us/menu_pie_avatar.xml
@@ -12,9 +12,7 @@
-
-
-
+
diff --git a/linden/indra/newview/skins/xui/en-us/menu_pie_object.xml b/linden/indra/newview/skins/xui/en-us/menu_pie_object.xml
index ed48478..e59ac38 100755
--- a/linden/indra/newview/skins/xui/en-us/menu_pie_object.xml
+++ b/linden/indra/newview/skins/xui/en-us/menu_pie_object.xml
@@ -49,11 +49,7 @@
-
-
-
-
+
@@ -61,11 +57,7 @@
-
-
-
-
+
diff --git a/linden/indra/newview/skins/xui/en-us/menu_viewer.xml b/linden/indra/newview/skins/xui/en-us/menu_viewer.xml
index 2c45a4e..d964ec3 100755
--- a/linden/indra/newview/skins/xui/en-us/menu_viewer.xml
+++ b/linden/indra/newview/skins/xui/en-us/menu_viewer.xml
@@ -784,19 +784,17 @@
-
+
-
-
+
+
-
-
+
+
@@ -839,10 +837,6 @@
-
-
-
diff --git a/linden/indra/newview/skins/xui/en-us/notify.xml b/linden/indra/newview/skins/xui/en-us/notify.xml
index 747d1ca..291b1b8 100644
--- a/linden/indra/newview/skins/xui/en-us/notify.xml
+++ b/linden/indra/newview/skins/xui/en-us/notify.xml
@@ -42,7 +42,7 @@
- Uploading in-game and web site snapshots...
+ Uploading in-world and web site snapshots...
(Takes about 5 minutes.)
@@ -53,7 +53,7 @@
- Uploading in-game snapshot...
+ Uploading in-world snapshot...
(Takes a minute or so.)
@@ -64,7 +64,7 @@
- In-game snapshot upload done
+ In-world snapshot upload done
diff --git a/linden/indra/newview/skins/xui/en-us/panel_avatar.xml b/linden/indra/newview/skins/xui/en-us/panel_avatar.xml
index d8b415a..8fe74c6 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_avatar.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_avatar.xml
@@ -100,26 +100,16 @@
tool_tip="Click to choose a picture" width="180" />
- Ratings:
-
-
-
Groups:
-
About:
@@ -130,8 +120,8 @@
mouse_opaque="true" name="(500 chars)" v_pad="0" width="61">
(500 chars)
-
-
+
@@ -334,7 +324,7 @@
-
diff --git a/linden/indra/newview/skins/xui/en-us/panel_group_general.xml b/linden/indra/newview/skins/xui/en-us/panel_group_general.xml
index 494bcae..3804a8c 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_group_general.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_group_general.xml
@@ -15,8 +15,7 @@ Hover your mouse over the options for more help.
bottom="-24" drop_shadow_visible="true" follows="left|top" font="SansSerif"
h_pad="0" halign="left" height="16" left="7" max_length="35"
mouse_opaque="true" name="group_name_editor" prevalidate="ascii" v_pad="0"
- width="300">
- Type your new group name here
+ width="300" label="Type your new group name here">
-
+ visible="true" width="95" />
diff --git a/linden/indra/newview/skins/xui/en-us/panel_preferences_general.xml b/linden/indra/newview/skins/xui/en-us/panel_preferences_general.xml
index 72a62b9..a92155a 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_preferences_general.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_preferences_general.xml
@@ -149,6 +149,9 @@
+
+ System Default
+
English
diff --git a/linden/indra/newview/skins/xui/en-us/panel_preferences_graphics2.xml b/linden/indra/newview/skins/xui/en-us/panel_preferences_graphics2.xml
index a9b52e3..b01a317 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_preferences_graphics2.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_preferences_graphics2.xml
@@ -3,31 +3,37 @@
height="408" hidden="false" label="Graphics Detail" left="102"
mouse_opaque="true" name="Display panel 3" width="517">
Shaders:
-
+
-
-
Avatar Rendering:
-
Lighting Detail:
-
Terrain Detail:
-
Object Mesh Detail:
-
Flexible Mesh Detail:
-
Tree Mesh Detail:
-
Avatar Mesh Detail:
-
diff --git a/linden/indra/newview/skins/xui/en-us/panel_preferences_graphics3.xml b/linden/indra/newview/skins/xui/en-us/panel_preferences_graphics3.xml
index adf6db2..3a1f32e 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_preferences_graphics3.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_preferences_graphics3.xml
@@ -104,4 +104,9 @@
width="128">
(lower is faster)
+
diff --git a/linden/indra/newview/skins/xui/en-us/role_actions.xml b/linden/indra/newview/skins/xui/en-us/role_actions.xml
index 8475b3d..bcd23d5 100644
--- a/linden/indra/newview/skins/xui/en-us/role_actions.xml
+++ b/linden/indra/newview/skins/xui/en-us/role_actions.xml
@@ -106,7 +106,7 @@
longdescription="Members in a Role with this Ability can landmark a group-owned parcel, even if it's turned off in About Land > Options tab."
name="land allow landmark" value="26" />
+
+
+
+ Problem encountered processing your teleport request. You may
+ need to log back in before you can teleport. If you continue
+ to get this message, please check the Tech Support FAQ at:
+ www.secondlife.com/support
+
+
+ Problem encountered processing your region crossing. You may
+ need to log back in before you can cross regions. If you continue
+ to get this message, please check the Tech Support FAQ at:
+ www.secondlife.com/support.
+
+
+ Sorry, teleport is currently blocked. Try again in a moment.
+ If you still cannot teleport, please log out and log back in to
+ resolve the problem.
+
+
+ Sorry, but system was unable to locate landmark destination.
+
+
+ Sorry, but system was unable to complete the teleport connection.
+ Try again in a moment.
+
+
+ Sorry, you do not have access to that teleport destination.
+
+
+ Your attachments have not arrived yet. Try waiting for a few
+ more seconds or log out and back in again before attempting
+ to teleport.
+
+
+ The asset queue in this region is currently clogged so your teleport
+ request will not be able to succeed in a timely manner. Please try again
+ in a few minutes or go to a less busy area.
+
+
+ Sorry, but the system was unable to complete your teleport request
+ in a timely fashion. Please try again in a few minutes.
+
+
+ Sorry, but the system was unable to complete your region crossing
+ in a timely fashion. Please try again in a few minutes.
+
+
+ Unable to find teleport destination. The destination may be
+ temporarily unavailable or no longer exists. Please try again
+ in a few minutes.
+
+
+
+
+ Sending to destination.
+
+
+ Redirecting to different location.
+
+
+ Relaying to destination.
+
+
+ Sending home location request.
+
+
+ Sending landmark location request.
+
+
+ Completing teleport.
+
+
+ Resolving destination.
+
+
+ Contacting new region.
+
+
+ Arriving...
+
+
+ Requesting Teleport...
+
+
+
diff --git a/linden/indra/newview/skins/xui/es/alerts.xml b/linden/indra/newview/skins/xui/es/alerts.xml
index 8d94a19..da0e94c 100644
--- a/linden/indra/newview/skins/xui/es/alerts.xml
+++ b/linden/indra/newview/skins/xui/es/alerts.xml
@@ -1971,14 +1971,6 @@ Haga clic en Salir para dejar [SECOND_LIFE] inmediatamente.
Salir
-
-
- Seleccione un único objeto para valorar
-
-
- OK
-
-
Incapaz de comprar terreno para el grupo:
@@ -3041,14 +3033,6 @@ del menú 'Editar'.
Rechazar
-
-
- No es posible' valorar este propietario de objeto, el objeto pertenece a otro grupo.
-
-
- OK
-
-
¿Expulsar a este usuario con cuál mensaje?
diff --git a/linden/indra/newview/skins/xui/es/menu_pie_avatar.xml b/linden/indra/newview/skins/xui/es/menu_pie_avatar.xml
index b16ea71..2caec32 100644
--- a/linden/indra/newview/skins/xui/es/menu_pie_avatar.xml
+++ b/linden/indra/newview/skins/xui/es/menu_pie_avatar.xml
@@ -3,7 +3,6 @@
-
diff --git a/linden/indra/newview/skins/xui/es/menu_pie_object.xml b/linden/indra/newview/skins/xui/es/menu_pie_object.xml
index 9faf8f5..842e7e0 100644
--- a/linden/indra/newview/skins/xui/es/menu_pie_object.xml
+++ b/linden/indra/newview/skins/xui/es/menu_pie_object.xml
@@ -14,9 +14,7 @@
-
-
diff --git a/linden/indra/newview/skins/xui/es/panel_avatar.xml b/linden/indra/newview/skins/xui/es/panel_avatar.xml
index 4ef5460..a4a6df7 100644
--- a/linden/indra/newview/skins/xui/es/panel_avatar.xml
+++ b/linden/indra/newview/skins/xui/es/panel_avatar.xml
@@ -83,7 +83,6 @@
name="Show on Map" />
-
diff --git a/linden/indra/newview/skins/xui/fr/alerts.xml b/linden/indra/newview/skins/xui/fr/alerts.xml
index 5002931..d8272d3 100644
--- a/linden/indra/newview/skins/xui/fr/alerts.xml
+++ b/linden/indra/newview/skins/xui/fr/alerts.xml
@@ -1938,14 +1938,6 @@ Cliquez sur Quitter pour quitter [SECOND_LIFE] maintenant.
Quitter
-
-
- Choisissez un seul objet à noter
-
-
- OK
-
-
Impossible d'acheter le terrain pour le groupe :
@@ -3013,14 +3005,6 @@ dans le menu 'Edition'.
Décliner
-
-
- Impossible de noter le propriétaire de l'objet, celui-ci appartient à un groupe.
-
-
- OK
-
-
Dégager cet utilisateur avec quel message ?
diff --git a/linden/indra/newview/skins/xui/fr/menu_pie_avatar.xml b/linden/indra/newview/skins/xui/fr/menu_pie_avatar.xml
index 61ef473..69003dd 100644
--- a/linden/indra/newview/skins/xui/fr/menu_pie_avatar.xml
+++ b/linden/indra/newview/skins/xui/fr/menu_pie_avatar.xml
@@ -3,7 +3,6 @@
-
diff --git a/linden/indra/newview/skins/xui/fr/menu_pie_object.xml b/linden/indra/newview/skins/xui/fr/menu_pie_object.xml
index 3d5e65e..ce395d3 100644
--- a/linden/indra/newview/skins/xui/fr/menu_pie_object.xml
+++ b/linden/indra/newview/skins/xui/fr/menu_pie_object.xml
@@ -14,9 +14,7 @@
-
-
diff --git a/linden/indra/newview/skins/xui/fr/panel_avatar.xml b/linden/indra/newview/skins/xui/fr/panel_avatar.xml
index 2e70794..28ef7b4 100644
--- a/linden/indra/newview/skins/xui/fr/panel_avatar.xml
+++ b/linden/indra/newview/skins/xui/fr/panel_avatar.xml
@@ -82,7 +82,6 @@
-
diff --git a/linden/indra/newview/skins/xui/ja/alerts.xml b/linden/indra/newview/skins/xui/ja/alerts.xml
index 9533fe9..476ad88 100644
--- a/linden/indra/newview/skins/xui/ja/alerts.xml
+++ b/linden/indra/newview/skins/xui/ja/alerts.xml
@@ -1908,14 +1908,6 @@ www.secondlife.com/support.
終了
-
-
- 評価対象ã«å˜ä¸€ã‚ªãƒ–ジェクトをé¸æŠžã—ã¦ãã ã•ã„。
-
-
- OK
-
-
グループ用ã®åœŸåœ°ã®è³¼å…¥ãŒã§ãã¾ã›ã‚“:
@@ -2920,14 +2912,6 @@ AGP Graphics Accelerationã‚’å¯èƒ½ã«ã§ãã¾ã™ã€‚
æ–ã‚ã‚‹
-
-
- Can't ã“ã®ã‚ªãƒ–ジェクトã®æ‰€æœ‰è€…ã‚’æ ¼ä»˜ã‘ã™ã‚‹ã“ã¨ã¯ã§ããªã„ã®ã§, オブジェクトã¯ã‚°ãƒ«ãƒ¼ãƒ—ã«ã‚ˆã¦æ‰€æœ‰ã•ã‚Œã¾ã™ã€‚
-
-
- OK
-
-
ã©ã‚“ãªãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã§ã“ã®ä½¿ç”¨è€…を追ã„出ã—ã¾ã™ã‹ã€‚
diff --git a/linden/indra/newview/skins/xui/ja/menu_pie_avatar.xml b/linden/indra/newview/skins/xui/ja/menu_pie_avatar.xml
index 58756cd..385db68 100644
--- a/linden/indra/newview/skins/xui/ja/menu_pie_avatar.xml
+++ b/linden/indra/newview/skins/xui/ja/menu_pie_avatar.xml
@@ -3,7 +3,6 @@
-
diff --git a/linden/indra/newview/skins/xui/ja/menu_pie_object.xml b/linden/indra/newview/skins/xui/ja/menu_pie_object.xml
index 91fcd68..883a79b 100644
--- a/linden/indra/newview/skins/xui/ja/menu_pie_object.xml
+++ b/linden/indra/newview/skins/xui/ja/menu_pie_object.xml
@@ -14,9 +14,7 @@
-
-
diff --git a/linden/indra/newview/skins/xui/ja/panel_avatar.xml b/linden/indra/newview/skins/xui/ja/panel_avatar.xml
index b7d19ae..1def618 100644
--- a/linden/indra/newview/skins/xui/ja/panel_avatar.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_avatar.xml
@@ -84,7 +84,6 @@
name="Show on Map" />
-
-
-
- í‰ê°€í• ì•„ì´í…œ ì„ íƒ
-
-
- 확ì¸
-
-
ê·¸ë£¹ì„ ëŒ€ì‹ í•´ í† ì§€ë¥¼ 매입하지 못했습니다:
@@ -3012,14 +3004,6 @@ www.secondlife.com으로 ëŒì•„ê°€ 새로 ê³„ì •ì„ ë§Œë“œì‹œê² ìŠµë‹ˆê¹Œ?
ê±°ì ˆ
-
-
- ì´ ì‚¬ë¬¼ì˜ ì†Œìœ ìžë¥¼ í‰ê°€í• 수 없습니다. ì‚¬ë¬¼ì˜ ì†Œìœ ìžê°€ 그룹입니다.
-
-
- 확ì¸
-
-
ì´ ì‚¬ìš©ìžë¥¼ ì–´ë–¤ 메시지로 ì«“ì•„ë‚´ì‹œê² ìŠµë‹ˆê¹Œ?
diff --git a/linden/indra/newview/skins/xui/ko/menu_pie_avatar.xml b/linden/indra/newview/skins/xui/ko/menu_pie_avatar.xml
index 2c63a4d..dc3bffd 100644
--- a/linden/indra/newview/skins/xui/ko/menu_pie_avatar.xml
+++ b/linden/indra/newview/skins/xui/ko/menu_pie_avatar.xml
@@ -3,7 +3,6 @@
-
diff --git a/linden/indra/newview/skins/xui/ko/menu_pie_object.xml b/linden/indra/newview/skins/xui/ko/menu_pie_object.xml
index 4172d3b..bd115bd 100644
--- a/linden/indra/newview/skins/xui/ko/menu_pie_object.xml
+++ b/linden/indra/newview/skins/xui/ko/menu_pie_object.xml
@@ -14,9 +14,7 @@
-
-
diff --git a/linden/indra/newview/skins/xui/ko/panel_avatar.xml b/linden/indra/newview/skins/xui/ko/panel_avatar.xml
index 752e6a1..c15d06e 100644
--- a/linden/indra/newview/skins/xui/ko/panel_avatar.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_avatar.xml
@@ -83,7 +83,6 @@
name="Show on Map" />
-
diff --git a/linden/indra/newview/skins/xui/pt/alerts.xml b/linden/indra/newview/skins/xui/pt/alerts.xml
index a1bbf9c..341bb67 100644
--- a/linden/indra/newview/skins/xui/pt/alerts.xml
+++ b/linden/indra/newview/skins/xui/pt/alerts.xml
@@ -1972,14 +1972,6 @@ Clique Sair para deixar [SECOND_LIFE] imediatamente.
Sair
-
-
- Selecione um único objeto para avaliar
-
-
- OK
-
-
Incapaz de comprar terreno para o grupo:
@@ -3040,14 +3032,6 @@ do menu 'Editar'.
Declinar
-
-
- Não é possÃvel avaliar este proprietário de objeto, o objeto pertence a outro grupo.
-
-
- OK
-
-
Expulsar este usuário com qual mensagem?
diff --git a/linden/indra/newview/skins/xui/pt/menu_pie_avatar.xml b/linden/indra/newview/skins/xui/pt/menu_pie_avatar.xml
index 128ab1b..3a35e02 100644
--- a/linden/indra/newview/skins/xui/pt/menu_pie_avatar.xml
+++ b/linden/indra/newview/skins/xui/pt/menu_pie_avatar.xml
@@ -3,7 +3,6 @@
-
diff --git a/linden/indra/newview/skins/xui/pt/menu_pie_object.xml b/linden/indra/newview/skins/xui/pt/menu_pie_object.xml
index c8e4fb1..4d52852 100644
--- a/linden/indra/newview/skins/xui/pt/menu_pie_object.xml
+++ b/linden/indra/newview/skins/xui/pt/menu_pie_object.xml
@@ -14,9 +14,7 @@
-
-
diff --git a/linden/indra/newview/skins/xui/pt/panel_avatar.xml b/linden/indra/newview/skins/xui/pt/panel_avatar.xml
index 58a5fe7..6921e01 100644
--- a/linden/indra/newview/skins/xui/pt/panel_avatar.xml
+++ b/linden/indra/newview/skins/xui/pt/panel_avatar.xml
@@ -82,7 +82,6 @@
-
diff --git a/linden/indra/newview/skins/xui/zh/alerts.xml b/linden/indra/newview/skins/xui/zh/alerts.xml
index e2a128d..121d426 100644
--- a/linden/indra/newview/skins/xui/zh/alerts.xml
+++ b/linden/indra/newview/skins/xui/zh/alerts.xml
@@ -2,7 +2,7 @@
- [ALERT_NAME]ãŒalerts.xmlã«ã‚ã‚Šã¾ã›ã‚“ï¼
+ [ALERT_NAME]从alerts.xmlä¸é—失!
OK
@@ -10,14 +10,15 @@
- フãƒãƒ¼ã‚¿ã‚¨ãƒ©ãƒ¼ï¼šä¸‹è¨˜ã®ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ«ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚
+ 处ç†é”™è¯¯: æ— æ³•æ‰¾åˆ°ä»¥ä¸‹è°ƒèŠ‚:
+
[CONTROLS]
OK
-
+
[MOTD]
@@ -143,23 +144,9 @@
å–消
-
+
- Granting modify rights to another resident allows them to change
-ANY objects you may have in-world. Be VERY careful when handing
-out this permission.
-Do you want to grant modify rights for [FIRST_NAME] [LAST_NAME]?
-
-
- 是
-
-
- å¦
-
-
-
-
- Do you want to revoke modify rights for [FIRST_NAME] [LAST_NAME]?
+ ä½ æ˜¯å¦è¦[ACTION]更改æƒåˆ©[DERECTION] [FIRST_NAME] [LAST_NAME]?
是
@@ -195,13 +182,14 @@ Do you want to grant modify rights for [FIRST_NAME] [LAST_NAME]?
- [NEEDS_APPLY_MESSAGE][WANT_APPLY_MESSAGE]
+ [NEEDS_APPLY_MESSAGE]
+[WANT_APPLY_MESSAGE]
- 変更ã®é©ç”¨
+ 应用更改
- 変更ã®ç„¡è¦–
+ 忽视更改
å–消
@@ -209,8 +197,12 @@ Do you want to grant modify rights for [FIRST_NAME] [LAST_NAME]?
- グループè¨ç«‹ã«ã¯L$[COST]ã‹ã‹ã‚Šã¾ã™ã€‚ 3日間以上グループをç¶æŒã™ã‚‹ãŸã‚ã«ã¯ã€å…¨ä½“ã§3å以上ã®ãƒ¡ãƒ³ãƒãƒ¼æ•°ãŒå¿…è¦ã§ã™ã€‚
-グループをè¨ç«‹ã—ã¾ã™ã‹ï¼Ÿ
+ 创建一个新社团需花费 L$[COST].
+
+è¦æƒ³ä¿æŒä¸€ä¸ªæ–°ç¤¾å›¢è¶…过三天,ä½ çš„ç¤¾å›¢æ€»äººæ•°å¿…é¡»è¾¾åˆ°ä¸‰äººèŽ·ä¸‰äººä»¥ä¸Šã€‚
+
+
+是å¦åˆ›å»ºæ–°ç¤¾å›¢?
创é€
@@ -238,7 +230,7 @@ Do you want to grant modify rights for [FIRST_NAME] [LAST_NAME]?
- グループ通知をé€ä¿¡ã™ã‚‹éš›ã¯ã€é¡Œåを特定ã—ã¦ãã ã•ã„。
+ ä½ å¿…é¡»ä¸ºå‘é€ç»™ç¤¾å›¢çš„通知拟定一个主题.
OK
@@ -251,8 +243,7 @@ Do you want to grant modify rights for [FIRST_NAME] [LAST_NAME]?
- ã‚ãªãŸã¯[ROLE_NAME]ã®å½¹å‰²ã«ã€ã‚°ãƒ«ãƒ¼ãƒ—メンãƒãƒ¼ã‚’è¿½åŠ ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚役割ã«ã¤ã„ãŸãƒ¡ãƒ³ãƒãƒ¼ã¯ã€è‡ªã‚‰é€€ä»»ã—ãªã„é™ã‚Šã€å½¹å‰²ã‹ã‚‰å¤–ã™ã“ã¨ãŒå‡ºæ¥ã¾ã›ã‚“。
-本当ã«ä½œæ¥ã‚’続ã‘ã¾ã™ã‹ï¼Ÿ
+ ä½ å°†æ·»åŠ ç¤¾å›¢ä¼šå‘˜è‡³è§’è‰²[ROLE_NAME]ä¸ã€‚会员ä¸èƒ½ä»Žè¯¥è§’色ä¸è¢«ç§»é™¤ã€‚会员必须自己从角色ä¸è¾žèŒã€‚ä½ çœŸçš„æ„¿æ„继ç»å—?
是
@@ -263,11 +254,12 @@ Do you want to grant modify rights for [FIRST_NAME] [LAST_NAME]?
- ã‚ãªãŸã¯ã€æ¨©é™ã€Ž[ACTION_NAME]ã€ã‚’役割『[ROLE_NAME]ã€ã«è¿½åŠ ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚
-*è¦å‘Š*
-ã“ã®æ¨©é™ã‚’æŒã¤å½¹å‰²ã®ãƒ¡ãƒ³ãƒãƒ¼ã¯ã€è‡ªåˆ†è‡ªèº«ã‚„ä»–ã®ãƒ¡ãƒ³ãƒãƒ¼ã«ã€ç¾åœ¨ã‚ˆã‚Šã‚‚強力ãªã€ã‚ªãƒ¼ãƒŠãƒ¼ã«è¿‘ã„パワーをもãŸã›ã‚‹ã“ã¨ãŒå‡ºæ¥ã¾ã™ã€‚
-ã“ã®æ¨©é™ã‚’与ãˆã‚‹å‰ã«ã€ãã®ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。
-ã“ã®æ¨©é™ã‚’『[ROLE_NAME]ã€ã«è¿½åŠ ã—ã¾ã™ã‹ï¼Ÿ
+ ä½ å°†æ·»åŠ èƒ½åŠ›'[ACTION_NAME]'至角色'[ROLE_NAME]'ä¸ã€‚
+
+ *è¦å‘Š*
+ 任何角色ä¸çš„会员拥有这项能力åŽï¼Œéƒ½å¯ä»¥åˆ†é…给他们自己,或者任何其他的会员å„ç§è§’色,这些角色的æƒåˆ©å¯èƒ½æ¯”他们目å‰æ‰€æ‹¥æœ‰çš„大得多,并很å¯èƒ½æ拔他们自己到最é 近主人æƒåˆ©çš„ä½ç½®ä¸Šã€‚请在分é…这项能力之å‰ç¡®å®šè‡ªå·±è¿™ä¹ˆåšå°†å¸¦æ¥çš„åŽæžœã€‚
+
+ä½ æ˜¯å¦æ„¿æ„æ·»åŠ è¿™ä¸ªèƒ½åŠ›è‡³'[ROLE_NAME]'?
是
@@ -278,10 +270,12 @@ Do you want to grant modify rights for [FIRST_NAME] [LAST_NAME]?
- ã‚ãªãŸã¯æ¨©é™ã€Ž[ACTION_NAME]ã€ã‚’ã€å½¹å‰²ã€Ž[ROLE_NAME]ã€ã«è¿½åŠ ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚
-*è¦å‘Š*
-ã“ã®æ¨©é™ã‚’æŒã¤å½¹å‰²ã®ãƒ¡ãƒ³ãƒãƒ¼ã¯ã€è‡ªåˆ†è‡ªèº«ã‚„ä»–ã®ãƒ¡ãƒ³ãƒãƒ¼ã«ã€ã‚ªãƒ¼ãƒŠãƒ¼ã«è¿‘ã„パワーをもãŸã›ã‚‹ã“ã¨ãŒå‡ºæ¥ã¾ã™ã€‚
-ã“ã®æ¨©é™ã‚’『[ROLE_NAME]ã€ã«è¿½åŠ ã—ã¾ã™ã‹ï¼Ÿ
+ ä½ å°†æ·»åŠ èƒ½åŠ›'[ACTION_NAME]'至角色 '[ROLE_NAME]'ä¸ã€‚
+
+ *è¦å‘Š*
+ 任何角色ä¸çš„会员拥有这项能力åŽï¼Œéƒ½å¯ä»¥åˆ†é…给他们自己,或者其他会员所有的能力,甚至å¯ä»¥æ拔他们自己到最é 近主人的æƒåˆ©çš„ä½ç½®ä¸Šã€‚
+
+ä½ æ˜¯å¦æ„¿æ„æ·»åŠ è¿™é¡¹èƒ½åŠ›è‡³ '[ROLE_NAME]'?
是
@@ -292,22 +286,22 @@ Do you want to grant modify rights for [FIRST_NAME] [LAST_NAME]?
- ウェブ上ã§å…¬é–‹' オプションをé¸æŠžã—ãŸå ´åˆã€[SECOND_LIFE]Webサイトã«ã¦ã€ã‚°ãƒ«ãƒ¼ãƒ—åã€è¨˜ç« ã€ç‰¹æ¨©ã€ã‚¿ã‚¤ãƒˆãƒ«ã€å‰µç«‹è€…を公開ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚上記内容ãŒã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ»ã‚¹ã‚¿ãƒ³ãƒ€ãƒ¼ãƒ‰ã«ãŠã„ã¦æˆäººå‘ã‘コンテンツã¨åˆ¤æ–ã•ã‚Œã‚‹ã‹ã©ã†ã‹ã®è²¬ä»»ã¯ã‚ãªãŸã«ã‚ã‚Šã¾ã™ã€‚
+ 选择 "在网络上å‘布"选项将å…许我们å‘布社团的åç§°ï¼Œå¾½ç« ï¼Œè§„ç« åˆ¶åº¦ï¼Œå¤´è¡”å’Œåˆ›å§‹äººè‡³[SECOND_LIFE]ç½‘ç«™ã€‚å¦‚æžœä½ å‘å¸ƒçš„å†…å®¹ï¼Œæ ¹æ®ç¤¾åŒºæ ‡å‡†è§„定,涉åŠåˆ°æˆäººå†…å®¹ï¼Œä½ æœ‰è´£ä»»å¯¹æ¤ä½œå‡ºå£°æ˜Žã€‚
- ウェブ上ã§å…¬é–‹' オプションをé¸æŠžã—ãŸå ´åˆã€[SECOND_LIFE]Webサイトã«ã¦ã€åå‰ã€èª¬æ˜Žã€ã‚¹ãƒŠãƒƒãƒ—ショットã€å ´æ‰€ã‚’公開ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚上記内容ãŒã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ»ã‚¹ã‚¿ãƒ³ãƒ€ãƒ¼ãƒ‰ã«ãŠã„ã¦æˆäººå‘ã‘コンテンツã¨åˆ¤æ–ã•ã‚Œã‚‹ã‹ã©ã†ã‹ã®è²¬ä»»ã¯ã‚ãªãŸã«ã‚ã‚Šã¾ã™ã€‚
+ 选择 "在网络上å‘布"选项将å…许我们å‘布土地的å称,æ述,快照和地点至[SECOND_LIFE]ç½‘ç«™ã€‚å¦‚æžœä½ å‘å¸ƒçš„å†…å®¹ï¼Œæ ¹æ®ç¤¾åŒºæ ‡å‡†è§„定,涉åŠåˆ°æˆäººå†…å®¹ï¼Œä½ æœ‰è´£ä»»å¯¹æ¤ä½œå‡ºå£°æ˜Žã€‚
- ウェブ上ã§å…¬é–‹' オプションをé¸æŠžã—ãŸå ´åˆã€[SECOND_LIFE]Webサイトã«ã¦ã€æ’®å½±è€…ã®[SECOND_LIFE]åã€é¡Œåã€å ´æ‰€ã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã€ã‚¹ãƒŠãƒƒãƒ—ショットを公開ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚上記内容ãŒã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ»ã‚¹ã‚¿ãƒ³ãƒ€ãƒ¼ãƒ‰ã«ãŠã„ã¦æˆäººå‘ã‘コンテンツã¨åˆ¤æ–ã•ã‚Œã‚‹ã‹ã©ã†ã‹ã®è²¬ä»»ã¯ã‚ãªãŸã«ã‚ã‚Šã¾ã™ã€‚
+ 选择 "在网络上å‘布"选项将å…许我们å‘布摄影师在[SECOND_LIFE]çš„åå—,工作,地点,信æ¯å’Œå¿«ç…§è‡³[SECOND_LIFE]ç½‘ç«™ã€‚å¦‚æžœä½ å‘å¸ƒçš„ä»»ä½•å¿«ç…§å†…å®¹ï¼Œæ ¹æ®ç¤¾åŒºæ ‡å‡†è§„定,涉åŠåˆ°æˆäººå†…å®¹ï¼Œä½ æœ‰è´£ä»»å¯¹æ¤ä½œå‡ºå£°æ˜Žã€‚
- ウェブ上ã§å…¬é–‹' オプションをé¸æŠžã—ãŸå ´åˆã€[SECOND_LIFE]Webサイトã«ã¦ã€ã‚ãªãŸã®åå‰ã€ã‚¤ãƒ¡ãƒ¼ã‚¸ç”»åƒã€è‡ªå·±ç´¹ä»‹ã‚’公開ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚
+ 选择 "在网络上å‘布"选项将å…许我们å‘å¸ƒä½ çš„åå—,图åƒï¼Œå’Œâ€˜å…³äºŽè‡ªå·±â€™çš„文本至[SECOND_LIFE]网站。
@@ -355,8 +349,8 @@ Residents can visit the URL you specify when they view your profile.
- ãƒãƒ¼ã‚«ãƒ«ã§èµ·å‹•ä¸â€¦
-データãŒã‚ã‚Šã¾ã›ã‚“。
+ 本地è¿è¡Œ...
+æ²¡æœ‰æ‰¾åˆ°ä½ çš„æ•°æ®.
OK
@@ -441,9 +435,12 @@ Residents can visit the URL you specify when they view your profile.
- ã“ã®åŒºç”»ã®ã‚°ãƒ«ãƒ¼ãƒ—『[NAME]ã€å…±æœ‰ã®å…¨ã¦ã®ã‚ªãƒ–ジェクトをã€ä»¥å‰ã®æ‰€æœ‰è€…ã®æŒã¡ç‰©ã«æœ¬å½“ã«è¿”å´ã—ã¦ã‚‚よã„ã§ã™ã‹ï¼Ÿ
-*è¦å‘Š*ã“ã‚Œã«ã‚ˆã‚Šã€ãã®ã‚°ãƒ«ãƒ¼ãƒ—ã«è²æ¸¡ã•ã‚ŒãŸè²æ¸¡ä¸å¯èƒ½ãªã‚ªãƒ–ジェクトã¯å‰Šé™¤ã•ã‚Œã¾ã™ï¼
-オブジェクト:[N]
+ ä½ æ˜¯å¦ç¡®å®šæ„¿æ„归还在这å—土地上由社团[NAME]分享的东东至它们原先主人的库å˜?
+å·²ç»è½¬è®©ç»™åˆ«çš„社团的,å¯ç§»åŠ¨çš„东东将被归还至它们原先的主人处。
+
+*è¦å‘Š* 这项æ“ä½œå°†åˆ é™¤å·²è½¬è®©è‡³åˆ«çš„ç¤¾å›¢çš„ä¸å¯ç§»åŠ¨çš„东东。
+
+东东: [N]
返回
@@ -454,8 +451,11 @@ Residents can visit the URL you specify when they view your profile.
- ã“ã®åŒºç”»ã®å±…ä½è€…『[NAME]ã€æ‰€æœ‰ã®å…¨ã¦ã®ã‚ªãƒ–ジェクトをã€æ‰€æœ‰è€…ã®æŒã¡ç‰©ã«æœ¬å½“ã«è¿”å´ã—ã¦ã‚‚よã„ã§ã™ã‹ï¼Ÿ
-オブジェクト:[N]
+ Are you sure you want to return all objects owned by the
+resident '[NAME]' on this parcel of land
+back to their inventory?
+
+Objects: [N]
返回
@@ -466,8 +466,9 @@ Residents can visit the URL you specify when they view your profile.
- ã“ã®åŒºç”»ã§ã‚ãªãŸãŒæ‰€æœ‰ã™ã‚‹å…¨ã¦ã®ã‚ªãƒ–ジェクトをã€ã‚ãªãŸã®æŒã¡ç‰©ã«æœ¬å½“ã«è¿”å´ã—ã¦ã‚‚よã„ã§ã™ã‹ï¼Ÿ
-オブジェクト:[N]
+ ä½ æ˜¯å¦ç¡®å®šæ„¿æ„å½’è¿˜ä½ åœ¨è¿™å—åœŸåœ°ä¸Šæ‹¥æœ‰çš„æ‰€æœ‰ä¸œä¸œè‡³ä½ çš„åº“å˜ï¼Ÿ
+
+东东: [N]
返回
@@ -478,9 +479,12 @@ Residents can visit the URL you specify when they view your profile.
- ã“ã®åŒºç”»ã§ã‚ãªãŸãŒæ‰€æœ‰ã™ã‚‹å…¨ã¦ã®ã‚ªãƒ–ジェクトをã€ã‚ãªãŸã®æŒã¡ç‰©ã«æœ¬å½“ã«è¿”å´ã—ã¦ã‚‚よã„ã§ã™ã‹ï¼Ÿã‚°ãƒ«ãƒ¼ãƒ—ã«è²æ¸¡ã•ã‚ŒãŸè²æ¸¡å¯èƒ½ã‚ªãƒ–ジェクトã¯ã€ä»¥å‰ã®æ‰€æœ‰è€…ã«è¿”å´ã•ã‚Œã¾ã™ã€‚
-*è¦å‘Š*ã“ã‚Œã«ã‚ˆã‚Šã€ãã®ã‚°ãƒ«ãƒ¼ãƒ—ã«è²æ¸¡ã•ã‚ŒãŸè²æ¸¡ä¸å¯èƒ½ãªã‚ªãƒ–ジェクトã¯å‰Šé™¤ã•ã‚Œã¾ã™ï¼
-オブジェクト:[N]
+ ä½ æ˜¯å¦ç¡®å®šæ„¿æ„归还在这å—土地上所有ä¸å±žäºŽä½ 自己的东东至它们主人的库å˜?
+å·²ç»è½¬è®©ç»™åˆ«çš„社团的,å¯ç§»åŠ¨çš„东东将被归还至它们原先的主人处。
+
+*è¦å‘Š* 这项æ“ä½œå°†åˆ é™¤å·²è½¬è®©è‡³åˆ«çš„ç¤¾å›¢çš„ä¸å¯ç§»åŠ¨çš„东东。
+
+东东: [N]
返回
@@ -533,8 +537,9 @@ in this region back to their owner's inventory?
- ã“ã®åœŸåœ°ã®åŒºç”»ã«ãŠã„ã¦ã‚°ãƒ«ãƒ¼ãƒ—[NAME]ã¨å…±æœ‰ã—ã¦ã„ãªã„オブジェクトをã€æ‰€æœ‰è€…ã«è¿”å´ã—ã¾ã™ã‹ï¼Ÿ
-オブジェクト:[N]
+ 是å¦å½’还这å—土地上ä¸ç”±ç¤¾å›¢[NAME]分享的东东至它们的主人处?
+
+对象: [N]
返回
@@ -633,8 +638,11 @@ in this region back to their owner's inventory?
- 検索ディレクトリã®ã€Žã‚¯ãƒ©ã‚·ãƒ•ã‚¡ã‚¤ãƒ‰ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã«ã€ã‚¯ãƒ©ã‚·ãƒ•ã‚¡ã‚¤ãƒ‰åºƒå‘ŠãŒä¸€é€±é–“掲載ã•ã‚Œã¾ã™ã€‚広告を記入後ã€ã€Žç™ºè¡Œã€ã‚’クリックã—ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«è¿½åŠ ã—ã¾ã™ã€‚
-発行ã™ã‚‹éš›ã«ã€æ”¯æ‰•ã„ã‚’ã™ã‚‹é‡‘é¡ã‚’å°‹ãられã¾ã™ã€‚支払ã„金é¡ã‚’多ã出ã™ã“ã¨ã‚„ã€ã‚ーワード検索ãŒå¤šãã•ã‚Œã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ã‚ãªãŸã®åºƒå‘Šã¯ä¸Šä½ã«ãƒªã‚¹ãƒˆã•ã‚Œã¾ã™ã€‚
+ 分类广告会在查找å录的'Classified'æ 目里ä¿ç•™ä¸€å‘¨æ—¶é—´ã€‚
+
+
+å¡«å†™ä½ çš„å¹¿å‘Š,然åŽç‚¹å‡»'å‘布...'ï¼Œæ—¢æ·»åŠ å¹¿å‘Šè‡³å¹¿å‘Šå录ä¸ã€‚
+当点击å‘å¸ƒæ—¶ï¼Œä½ å°†è¢«è¦æ±‚支付å‘布广告费用. 大é¢æ”¯ä»˜æ„味ç€ä½ 的广告会在åå•è¾ƒå‰çš„地方出现,并且当用关键è¯æŸ¥æ‰¾æ—¶ï¼Œä½ 的广告也出现在查询结果较高的ä½ç½®ä¸Šã€‚
OK
@@ -704,7 +712,7 @@ in this region back to their owner's inventory?
- 閲覧ã™ã‚‹æ案をé¸æŠžã—ã¦ãã ã•ã„。
+ 选择查看一个æ案.
@@ -790,8 +798,9 @@ in this region back to their owner's inventory?
- ã‚ãªãŸã®ã‚¹ã‚¯ãƒªãƒ—トã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã€å¤‰æ›´ã‚’å…ƒã«æˆ»ã™äº‹ã¯ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚サーãƒãƒ¼ã®æœ€æ–°ä¿å˜ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ãƒãƒ¼ãƒ‰ã—ã¾ã™ã‹ï¼Ÿ
-(注æ„:ã“ã®æ“作ã¯å…ƒã«æˆ»ã™ã“ã¨ãŒã§ãã¾ã›ã‚“)
+ æ— æ³•æ’¤é”€å¯¹ä½ çš„è„šæœ¬ç‰ˆæœ¬çš„æ‰€æœ‰æ›´æ”¹.
+ä½ æ˜¯å¦æ„¿æ„载入æœåŠ¡å™¨ä¸Šæ¬¡ä¿å˜çš„版本?
+(æ示: æ¤æ¬¡æ“ä½œæ— æ³•æ’¤é”€.)
是
@@ -862,7 +871,7 @@ in this region back to their owner's inventory?
- ディスプレイè¨å®šã¯ã€ã‚ãªãŸã®ã‚·ã‚¹ãƒ†ãƒ 構æˆã«åŸºã¥ã„ã¦æŽ¨å¥¨ã•ã‚ŒãŸãƒ¬ãƒ™ãƒ«ã«è¨å®šã•ã‚Œã¦ã„ã¾ã™ã€‚
+ 显示设置已ç»è¢«è®¾ç½®åœ¨æŽ¨è的水平上,推è水平是基于您计算机的系统é…置得出的。
OK
@@ -892,8 +901,8 @@ in this region back to their owner's inventory?
- サーãƒãƒ¼ã‚’é¸æŠžã—ã¦ãã ã•ã„。
-[SERVER]ã«æŽ¥ç¶šã§ãã¾ã›ã‚“
+ 请选择一个æœåŠ¡å™¨.
+æ— æ³•è¿žæŽ¥è‡³æœåŠ¡å™¨[SERVER]
@@ -925,10 +934,10 @@ SecondLife.com网站,与技术支æŒéƒ¨é—¨è”系,
- [SECOND_LIFE]ã«æŽ¥ç¶šã§ãã¾ã›ã‚“。
-我々ã®æœ€å–„ã®åŠªåŠ›ã«ã‚‚é–¢ã‚らãšã€äºˆæœŸã—ãªã„出æ¥äº‹ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚
-SecondLife.comã®Webサイトã®ã‚µãƒãƒ¼ãƒˆãƒ»ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§å•é¡Œã‚’å ±å‘Šã—ã¦ãã ã•ã„。å¯èƒ½ãªã‚‰ã°ã€C:\Documents and Settings\(name)\Application Data\SecondLife\logs ã‹ã‚‰ã€ã‚ãªãŸã®ãƒã‚°ãƒ•ã‚¡ã‚¤ãƒ«ã‚’å«ã‚ã¦ãã ã•ã„。
-ã”å”力ã‚ã‚ŠãŒã¨ã†ã”ã–ã„ã¾ã™ã€‚
+ æ— æ³•è¿žæŽ¥è‡³[SECOND_LIFE].
+尽管我们尽了最大努力, 一些ä¸å¯çŸ¥çš„错误导致了这次连接失败.
+请å°è¯•ç™»é™†SecondLife.com网站的技术支æŒéƒ¨é—¨ï¼Œå¹¶æŠ¥å‘Šé—®é¢˜ï¼Œå¦‚æžœå¯èƒ½ï¼Œè¯·é™„ä¸Šä½ çš„SecondLife.log文件,文件路径为: C:\Documents and Settings\(name)\Application Data\SecondLife\logs
+éžå¸¸æ„Ÿè°¢.
@@ -1211,8 +1220,9 @@ SecondLife.log文件。谢谢。
- ã“れらã®[COUNT]オブジェクトをリンクã§ãã¾ã›ã‚“。
-最大[MAX]オブジェクトをリンクã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚数を減らã—ã¦ã€è©¦ã¿ã¦ãã ã•ã„。
+ æ— æ³•è¿žæŽ¥æ•°é‡ä¸º[COUNT]的东东.
+ä½ åªèƒ½è¿žæŽ¥æœ€å¤šæ•°é‡ä¸º[MAX]的东东.
+请å°è¯•é€‰æ‹©æ•°é‡è¾ƒå°‘的东东.
@@ -1682,8 +1692,9 @@ SecondLife.log文件。谢谢。
- 土地をæ¨ã¦ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“:
-ã“ã®åŒºç”»ã‚’解放ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。ã‚ãªãŸã®æ‰€æœ‰ã™ã‚‹åŒºç”»ã¯ç·‘色ã§è¡¨ã•ã‚Œã¾ã™ã€‚
+ æ— æ³•æ”¾å¼ƒåœŸåœ°:
+ä½ æ²¡æœ‰è®©å‡ºè¿™å—土地的许å¯è¯.
+ä½ æ‹¥æœ‰çš„åœŸåœ°åœ¨æ¸¸æˆä¸–ç•Œä¸æ˜¯ç»¿è‰².
@@ -1760,8 +1771,9 @@ SecondLife.log文件。谢谢。
- 土地を統åˆã™ã‚‹ã“ã¨ãŒå‡ºæ¥ã¾ã›ã‚“ã§ã—ãŸï¼š
-ã“ã®åœŸåœ°ãŒå˜åœ¨ã™ã‚‹åœ°åŸŸãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。ヘルプã®ãƒã‚°ã‚’å ±å‘Šã‚’åˆ©ç”¨ã—ã¦å ±å‘Šã—ã¦ãã ã•ã„。
+ æ— æ³•è¿žæŽ¥åœŸåœ°:
+æ— æ³•æ‰¾åˆ°è¯¥åœŸåœ°æ‰€å±žçš„åŒºåŸŸ.
+请使用帮助 -> 报告程åºæ¼æ´ž,让我们知é“问题所在.
@@ -1803,17 +1815,6 @@ SecondLife.log文件。谢谢。
å–消
-
-
- This notecard needs to be saved before the item can be copied or viewed. Save notecard?
-
-
- å˜å‚¨
-
-
- å–消
-
-
å¤åˆ¶æ¤ç‰©å“è‡³ä½ çš„åº“å˜?
@@ -1897,30 +1898,21 @@ SecondLife.log文件。谢谢。
退出
-
-
- 評価対象ã«å˜ä¸€ã‚ªãƒ–ジェクトをé¸æŠžã—ã¦ãã ã•ã„。
-
-
- OK
-
-
- グループ用ã®åœŸåœ°ã®è³¼å…¥ãŒã§ãã¾ã›ã‚“:
-活動グループã®ãŸã‚ã®åœŸåœ°ã‚’購入ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。Edit→Groupsを使用ã—ã¦ã€ä»–ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‚’èµ·å‹•ã—ã¦ãã ã•ã„。
+ æ— æ³•ä¸ºç¤¾å›¢è´ä¹°åœŸåœ°:
+ä½ æ²¡æœ‰ä¸ºä½ çš„æ´»åŠ¨ç¤¾å›¢è´ä¹°åœŸåœ°çš„许å¯è¯.
+请激活å¦ä¸€ç¤¾å›¢ï¼Œä½¿ç”¨ç¼–辑 -> 社团...
-
+
- Friends can give permissions to
-track each other on the map and
-receive online status updates.
+ 好å‹ä»¬å¯ä»¥åœ¨åœ°å›¾ä¸Šäº’相追踪,并å¯ä»¥åœ¨çº¿æŽ¥å—æ›´æ–°ä¿¡æ¯.
-Offer friendship to [NAME]?
+是å¦å‘é€å‹è°Šå¡ç»™[NAME]?
- 申ã—出る
+ 接收
å–消
@@ -1937,20 +1929,14 @@ Offer friendship to [NAME]?
å–消
-
-
- Do you want to remove multiple friends from your friends list?
-
-
- 移除
-
-
- å–消
-
-
- ã“ã®ã‚·ãƒ ã®ä»–ã®å…¨ã¦ã®åœŸåœ°ã«ãŠã„ã¦ã€**[AVATAR_NAME]**所有ã®ã‚¹ã‚¯ãƒªãƒ—トをå«ã‚€ã‚ªãƒ–ジェクトをã€æœ¬å½“ã«å…¨éƒ¨å‰Šé™¤ã—ã¦ã‚‚よã„ã§ã™ã‹ï¼Ÿ
+ ä½ æ˜¯å¦ç¡®å®šæ„¿æ„åˆ é™¤ä»¥ä¸‹ç”¨æˆ·
+
+
+** [AVATAR_NAME] **
+
+在其他土地上所拥有的所有副本东东?
åˆ é™¤!!
@@ -1961,7 +1947,12 @@ Offer friendship to [NAME]?
- ã“ã®ã‚·ãƒ ã®å…¨ã¦ã®åœŸåœ°ã«ãŠã„ã¦ã€**[AVATAR_NAME]**所有ã®ã‚¹ã‚¯ãƒªãƒ—トをå«ã‚€ã‚ªãƒ–ジェクトをã€æœ¬å½“ã«å…¨éƒ¨å‰Šé™¤ã—ã¦ã‚‚よã„ã§ã™ã‹ï¼Ÿ
+ ä½ æ˜¯å¦ç¡®å®šæ„¿æ„åˆ é™¤ä»¥ä¸‹ç”¨æˆ·
+
+
+** [AVATAR_NAME] **
+
+在所有土地上所拥有的所有东东(æ— è®ºæ˜¯å¦æœ‰å‰¯æœ¬)?
!!DELETE ALL!!
@@ -1972,7 +1963,12 @@ Offer friendship to [NAME]?
- ã“ã®ã‚·ãƒ ã®å…¨ã¦ã®åœŸåœ°ã«ãŠã„ã¦ã€**[AVATAR_NAME]**所有ã®ã‚ªãƒ–ジェクト(スクリプトをå«ã‚€ã€ã¾ãŸã¯ç„¡ã—)をã€æœ¬å½“ã«å…¨éƒ¨å‰Šé™¤ã—ã¦ã‚‚よã„ã§ã™ã‹ï¼Ÿ
+ ä½ æ˜¯å¦ç¡®å®šæ„¿æ„åˆ é™¤ä»¥ä¸‹ç”¨æˆ·
+
+
+** [AVATAR_NAME] **
+
+在所有土地上所拥有的所有东东(æ— è®ºæ˜¯å¦æœ‰å‰¯æœ¬)?
!!DELETE ALL!!
@@ -1983,7 +1979,7 @@ Offer friendship to [NAME]?
- ウェブ上ã§å…¬é–‹' オプションをé¸æŠžã—ãŸå ´åˆã€[SECOND_LIFE]Webサイトã«ã¦ã€ã‚°ãƒ«ãƒ¼ãƒ—åã€è¨˜ç« ã€ç‰¹æ¨©ã€ã‚¿ã‚¤ãƒˆãƒ«ã€å‰µç«‹è€…を公開ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚上記内容ãŒã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãƒ»ã‚¹ã‚¿ãƒ³ãƒ€ãƒ¼ãƒ‰ã«ãŠã„ã¦æˆäººå‘ã‘コンテンツã¨åˆ¤æ–ã•ã‚Œã‚‹ã‹ã©ã†ã‹ã®è²¬ä»»ã¯ã‚ãªãŸã«ã‚ã‚Šã¾ã™ã€‚
+ 选择 "在网络上å‘布"选项将å…许我们å‘布社团的åç§°ï¼Œå¾½ç« ï¼Œè§„ç« åˆ¶åº¦ï¼Œå¤´è¡”å’Œåˆ›å§‹äººè‡³[SECOND_LIFE]ç½‘ç«™ã€‚å¦‚æžœä½ å‘å¸ƒçš„å†…å®¹ï¼Œæ ¹æ®ç¤¾åŒºæ ‡å‡†è§„定,涉åŠåˆ°æˆäººå†…å®¹ï¼Œä½ æœ‰è´£ä»»å¯¹æ¤ä½œå‡ºå£°æ˜Žã€‚
@@ -1998,8 +1994,9 @@ Offer friendship to [NAME]?
- 指定ã®æ”¯æ‰•ã„金é¡ã¯å°‘ãªãã¨ã‚‚L$[MIN_PRICE]ã§ã™ã€‚
-ã‚‚ã£ã¨é«˜ã„金é¡ã‚’入力ã—ã¦ãã ã•ã„。
+ Price to pay for listing must be at least L$[MIN_PRICE].
+
+Please enter a higher price.
@@ -2204,7 +2201,7 @@ Offer friendship to [NAME]?
- ディスプレイè¨å®šã¯ã€ã‚ãªãŸã®ã‚·ã‚¹ãƒ†ãƒ 構æˆã«åŸºã¥ã„ã¦æŽ¨å¥¨ã•ã‚ŒãŸãƒ¬ãƒ™ãƒ«ã«è¨å®šã•ã‚Œã¦ã„ã¾ã™ã€‚
+ 显示设置已ç»è¢«è®¾ç½®åœ¨æŽ¨è的水平上,推è水平是基于您计算机的系统é…置得出的。
@@ -2308,17 +2305,22 @@ You have been moved into a nearby region.
- ã‚ãªãŸã®ã‚ャラクターã¯ã€ã¾ã‚‚ãªã表示ã•ã‚Œã¾ã™ã€‚
-矢å°ã‚ーを使用ã—ã¦æ©ãã¾ã™ã€‚
-ヘルプã€ã¾ãŸã¯[SECOND_LIFE]ã«é–¢ã—ã¦å¦ã¶å ´åˆã¯ã€ã„ã¤ã§ã‚‚F1ã‚ーを押ã—ã¦ãã ã•ã„。
+ ä½ çš„è§’è‰²å°†åœ¨æ•°ç§’åŽå‡ºçŽ°ã€‚
+使用ç®å¤´é”®èµ°åŠ¨ã€‚
+
+任何时候都å¯ä»¥æŒ‰F1键获å–帮助,或å¦ä¹ 更多关于[SECOND_LIFE]çš„ä¿¡æ¯.
- ã‚ãªãŸã®ã‚ャラクターã¯ã€ã¾ã‚‚ãªã表示ã•ã‚Œã¾ã™ã€‚
-矢å°ã‚ーを使用ã—ã¦æ©ãã¾ã™ã€‚
-ヘルプã€ã¾ãŸã¯[SECOND_LIFE]ã«é–¢ã—ã¦å¦ã¶å ´åˆã¯ã€ã„ã¤ã§ã‚‚F1ã‚ーを押ã—ã¦ãã ã•ã„。
-男性ã‚ã‚‹ã„ã¯å¥³æ€§ã®ã‚ャラクターをé¸æŠžã—ã¦ãã ã•ã„。ã‚ãªãŸã®æ±ºå®šã¯å¾Œã§å¤‰æ›´å¯èƒ½ã§ã™ã€‚
+ ä½ çš„è§’è‰²å°†åœ¨æ•°ç§’åŽå‡ºçŽ°ã€‚
+
+使用方å‘ç®å¤´é”®æŽ§åˆ¶èµ°è·¯ã€‚
+
+任何时间都å¯ä»¥æŒ‰F1键获å–帮助,或者å¦ä¹ 更多关于[SECOND_LIFE].
+
+请选择一个男性或女性的角色。
+ä½ å¯ä»¥ä¹‹åŽæ”¹å˜ä½ 的选择。
男性
@@ -2332,19 +2334,35 @@ You have been moved into a nearby region.
[NAME] L$ [PRICE] You don't have enough currency to do that.
-
+
- You have been granted the privilege to modify [FIRST_NAME] [LAST_NAME]'s objects.
+ ä½ æ˜¯å¦åŒæ„更改对[FIRST_NAME] [LAST_NAME]çš„æƒåˆ©?
+
+ 是
+
+
+ å¦
+
-
+
- Your privilege to modify [FIRST_NAME] [LAST_NAME]'s objects has been revoked
+ ä½ æ˜¯å¦æ’¤å›žæ›´æ”¹[FIRST_NAME][LAST_NAME]çš„æƒåˆ©?
+
+ 是
+
+
+ å¦
+
- ã“ã®åœ°åŸŸã®åœ°å›³ã®ã‚ャッシュを消去ã—ã¾ã™ã€‚実際ã«ã¯ãƒ‡ãƒãƒƒã‚°ã‚’è¡Œã†æ™‚ã®ã¿æœ‰ç”¨ãªã‚ªãƒ—ションã§ã™ã€‚ (プãƒãƒ€ã‚¯ã‚·ãƒ§ãƒ³ã«ã¯ã€5分程度待ã¤ã¨ã€å†åº¦ãƒã‚°ã‚¤ãƒ³å¾Œã«ã€å…¨å“¡ã®åœ°å›³ãŒæ›´æ–°ã•ã‚Œã¾ã™ï¼‰
+ è¿™æ ·å°†ä¸åœè·³å‡ºåœ°å›¾å¿«ç…§ç¼“å˜æ–‡ä»¶.
+
+è¿™æ ·å®žé™…ä¸Šåªå¯¹è°ƒè¯•æœ‰ç”¨.
+
+(在æ¤è¿‡ç¨‹ä¸,ç‰å¾…5分钟, 知é“æ¯ä¸ªäººçš„地图缓å˜åœ¨ä»–们é‡æ–°ç™»é™†åŽä¸Šä¼ æˆåŠŸã€‚
OK
@@ -2355,18 +2373,13 @@ You have been moved into a nearby region.
- 一度ã«ä¸€ã¤ä»¥ä¸Šã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„をコピーã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。å˜ä¸€ã‚ªãƒ–ジェクトをé¸æŠžã—ã€å†åº¦ã€è©¦ã¿ã¦ãã ã•ã„。
+ æ— æ³•åŒæ—¶å¤åˆ¶ä¸€ä¸ªä»¥ä¸Šçš„æ¡ç›®.
+请仅选择一项对象,并é‡æ–°å°è¯•.
-
- OK
-
-
- å–消
-
- 本地域ã®å…¨ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’ホームã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã—ã¾ã™ã‹ï¼Ÿ
+ 是å¦ä½¿æ¤åŒºåŸŸå†…æ‰€æœ‰ç”¨æˆ·é—ªç”µä¼ è¿å›žå®¶?
OK
@@ -2377,7 +2390,9 @@ You have been moved into a nearby region.
- **[USER_NAME]**所有ã®åœŸåœ°ã§ã€å½¼ï¼å½¼å¥³ã®å…¨ã¦ã®ã‚¹ã‚¯ãƒªãƒ—トをå«ã‚€ã‚ªãƒ–ジェクトをã€æœ¬å½“ã«è¿”å´ã—ã¦ã‚‚よã„ã§ã™ã‹ï¼Ÿ
+ ä½ æ˜¯å¦ç¡®å®šæ„¿æ„归还主人为
+** [USER_NAME] **
+且åªåœ¨åœ¨è‡ªå·±é¢†åœ°å†…的副本东东?
返回
@@ -2388,7 +2403,8 @@ You have been moved into a nearby region.
- ã“ã®åœ°åŸŸã®ä»–ã®å…¨ã¦ã®åœŸåœ°ã«ãŠã„ã¦ã€**[AVATAR_NAME]**所有ã®ã‚¹ã‚¯ãƒªãƒ—トをå«ã‚€ã‚ªãƒ–ジェクトをã€æœ¬å½“ã«å…¨éƒ¨è¿”å´ã—ã¦ã‚‚よã„ã§ã™ã‹ï¼Ÿ
+ ä½ æ˜¯å¦ç¡®å®šä¸åˆ 除以下用户
+** [USER_NAME] **在区域内所有土地上的副本东东?
返回
@@ -2397,37 +2413,62 @@ You have been moved into a nearby region.
å–消
-
+
- Couldn't set region textures:
+ æ— æ³•è®¾ç½®åŒºåŸŸçš„æè´¨:
-Terrain texture [TEXTURE_NUM] has an invalid bit depth of [TEXTURE_BIT_DEPTH].
+基本æè´¨[TEXTURE_NUM]çš„åƒç´ [TEXTURE_BIT_DEPTH]æ— æ•ˆ.
-Replace texture [TEXTURE_NUM] with a 24 bit 512x512 or smaller image
-then click "Set" again.
+替æ¢åŸºç¡€æè´¨[TEXTURE_NUM]为128x128åƒç´ 24ä½å›¾ç‰‡, 然åŽå†æ¬¡ç‚¹å‡»"设置".
-
+
- Couldn't set region textures:
+ æ— æ³•è®¾ç½®åŒºåŸŸå†…çš„æè´¨:
-Terrain texture [TEXTURE_NUM] is too large at [TEXTURE_SIZE_X]x[TEXTURE_SIZE_Y].
+基础æè´¨[TEXTURE_NUM]的尺寸[TEXTURE_SIZE_X]x[TEXTURE_SIZE_Y]æ— æ•ˆ.
-Replace texture [TEXTURE_NUM] with a 24 bit 512x512 or smaller image
-then click "Set" again.
+替æ¢åŸºç¡€æè´¨[TEXTURE_NUM]为128x128åƒç´ 24ä½å›¾ç‰‡, 然åŽå†æ¬¡ç‚¹å‡»"设置".
+
+
+
+
+ æ— æ³•è®¾ç½®åŒºåŸŸçš„æè´¨:
+
+基本æè´¨[TEXTURE_NUM]çš„åƒç´ [TEXTURE_BIT_DEPTH]æ— æ•ˆ.
+
+替æ¢åŸºç¡€æè´¨[TEXTURE_NUM]为512512x512åƒç´ 或更å°çš„24ä½å›¾ç‰‡, 然åŽå†æ¬¡ç‚¹å‡»"设置".
+
+
+
+
+ æ— æ³•è®¾ç½®åŒºåŸŸå†…çš„æè´¨:
+
+基础æè´¨[TEXTURE_NUM]的尺寸[TEXTURE_SIZE_X]x[TEXTURE_SIZE_Y]å¤ªå®½ä»¥è‡³æ— æ•ˆ.
+
+替æ¢åŸºç¡€æè´¨[TEXTURE_NUM]为512x512åƒç´ 或更å°çš„24ä½å›¾ç‰‡, 然åŽå†æ¬¡ç‚¹å‡»"设置".
+
+
+
+
+ æ— æ³•è®¾ç½®åŒºåŸŸå†…çš„æè´¨:
+
+基础æè´¨[TEXTURE_NUM]的尺寸[TEXTURE_SIZE_X]x[TEXTURE_SIZE_Y]å¤ªé«˜ä»¥è‡³æ— æ•ˆ.
+
+替æ¢åŸºç¡€æè´¨[TEXTURE_NUM]为512x512åƒç´ 或更å°çš„24ä½å›¾ç‰‡, 然åŽå†æ¬¡ç‚¹å‡»"设置".
- アップãƒãƒ¼ãƒ‰ãŒé–‹å§‹ã•ã‚Œã¾ã—ãŸã€‚ã‚ãªãŸã®æŽ¥ç¶šé€Ÿåº¦ã«ã‚ˆã‚Šã€2分程度ã‹ã‹ã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚
+ 上载开始. 这个过程å¯èƒ½æŒç»2分钟, 具体时间å–å†³äºŽä½ çš„ç½‘ç»œè¿žæŽ¥é€Ÿåº¦.
- ç¾åœ¨ã®é ˜åŸŸã‚’上昇ï¼ä¸‹é™ã•ã›ã‚‹å¢ƒç•Œã®ä¸é–“点ã«ãƒ™ãƒ¼ã‚¯ã—ã€ã€Žå¾©å¸°ã€ãƒ„ールã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã«ã—ã¾ã™ã‹ï¼Ÿ
+ æ˜¯ä½ å¦çœŸçš„æ„¿æ„烧硬当å‰çš„地形, 使得它æˆä¸ºåœ°å½¢ä¸Šå‡æˆ–下é™æžå€¼çš„ä¸é—´å€¼ï¼Œå¹¶ä¸”默认'æ¢å¤'工具?
- ベークã™ã‚‹
+ å˜ç¡¬
å–消
@@ -2435,58 +2476,57 @@ then click "Set" again.
- [MAX_AGENTS]許å¯å±…ä½äººã®ã¿ä½¿ç”¨å¯èƒ½ã§ã™
+ ä½ åªèƒ½æœ‰[MAX_AGENTS]å…许的居民。
- [MAX_GROUPS]許å¯ã‚°ãƒ«ãƒ¼ãƒ—ã®ã¿ä½¿ç”¨å¯èƒ½ã§ã™
+ ä½ åªèƒ½æœ‰[MAX_GROUPS]å…许的社团。
-
- ベークã™ã‚‹
-
-
- å–消
-
- [MAX_BANNED]ç¦æ¢å±…ä½è€…ã®ã¿ä½¿ç”¨å¯èƒ½ã§ã™
+ ä½ åªèƒ½æœ‰[MAX_BANNED]ç¦æ¢çš„居民。
- [MAX_MANAGER]ç¦æ¢å±…ä½è€…ã®ã¿ä½¿ç”¨å¯èƒ½ã§ã™
+ ä½ åªèƒ½æœ‰[MAX_MANAGER]ç¦æ¢çš„居民。
- ä¸å‹•ç”£ã‚ªãƒ¼ãƒŠãƒ¼ã‚’ä¸å‹•ç”£ã€Žã‚¢ã‚¯ã‚»ã‚¹æ‹’å¦ã€ãƒªã‚¹ãƒˆã«è¿½åŠ ã§ãã¾ã›ã‚“。
+ ä¸èƒ½æ·»åŠ ä¸åŠ¨äº§ä¸»äººè‡³'æ‹’ç»è¿›å…¥' åå•.
- æœãŠã‚ˆã³å½¢ãŒãƒãƒ¼ãƒ‰ã•ã‚Œã‚‹ã¾ã§ã€å®¹å§¿ã®å¤‰æ›´ã¯ã§ãã¾ã›ã‚“。
+ è¡£æœå’Œèº«ä½“载入之å‰ä¸èƒ½æ›´æ”¹å¤–形。
- クラシファイドã®åå‰ã¯ã€Aã‹ã‚‰Zã®æ–‡å—ã€ã¾ãŸã¯ã€æ•°å—ã§å§‹ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚å¥èªç‚¹ã‹ã‚‰ã¯å§‹ã‚られã¾ã›ã‚“。
+ ä½ çš„åˆ†ç±»å¹¿å‘Šå¿…é¡»ä»¥å—æ¯A到Z或数å—æ‰“å¤´ã€‚æ ‡ç‚¹ç¬¦å·ä¸å…许出现。
- オブジェクトãŒè²©å£²å¯¾è±¡ã§ã¯ãªã„ãŸã‚ã€ã‚ªãƒ–ジェクトã®è³¼å…¥ãŒè¨å®šã§ãã¾ã›ã‚“。 販売対象ã®ã‚ªãƒ–ジェクトをè¨å®šã—ã€å†åº¦è©¦ã¿ã¦ãã ã•ã„。
+ æ— æ³•è´ä¹°ä¸œä¸œ, å› ä¸ºæ¤ä¸œä¸œæ˜¯éžå–å“.
+请把东东设置为待售状æ€å¹¶é‡è¯•.
- [DOWNLOAD_PATH]ã¸ã®ã€ æœªåŠ å·¥ã®é ˜åŸŸãƒ•ã‚¡ã‚¤ãƒ«ã®ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ãŒçµ‚了ã—ã¾ã—ãŸã€‚
+ 完æˆä¸‹è½½åœ°å½¢æ–‡ä»¶è‡³æ–‡ä»¶å¤¹:
+[DOWNLOAD_PATH]
- [SECOND_LIFE]ã®æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒä½¿ç”¨å¯èƒ½ã§ã™ã€‚ [MESSAGE] ã“ã®ã‚·ã‚¹ãƒ†ãƒ を使用ã™ã‚‹ãŸã‚ã«ã€ã‚¢ãƒƒãƒ—デートをダウンãƒãƒ¼ãƒ‰ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+ [SECOND_LIFE]有新版本å¯ç”¨ã€‚
+[MESSAGE]
+
+ä½ å¿…é¡»ä¸‹è½½æ¤æ›´æ–°æ‰èƒ½è¿è¡Œç³»ç»Ÿã€‚
下载
@@ -2497,9 +2537,10 @@ then click "Set" again.
- [SECOND_LIFE]ã®ã‚¢ãƒƒãƒ—デートãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒä½¿ç”¨å¯èƒ½ã§ã™ã€‚
+ [SECOND_LIFE]有新版本å¯ç”¨ã€‚
[MESSAGE]
-ã“ã®ã‚¢ãƒƒãƒ—デートã¯å¿…é ˆã§ã¯ã‚ã‚Šã¾ã›ã‚“ãŒã€æ€§èƒ½ã¨å®‰å®šæ€§ã‚’å‘上ã•ã›ã‚‹ãŸã‚ã«ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹äº‹ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚
+
+这个更新ä¸æ˜¯å¿…须的,但我们建议下载并安装æ¤æ›´æ–°ï¼Œä»¥æ”¹å–„ç”»é¢è´¨é‡å’Œç¨³å®šæ€§.
下载
@@ -2510,9 +2551,10 @@ then click "Set" again.
- [SECOND_LIFE]ã®ã‚¢ãƒƒãƒ—デートãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒä½¿ç”¨å¯èƒ½ã§ã™ã€‚
+ [SECOND_LIFE]有新版本å¯ç”¨ã€‚
[MESSAGE]
-ã“ã®ã‚¢ãƒƒãƒ—デートã¯å¿…é ˆã§ã¯ã‚ã‚Šã¾ã›ã‚“ãŒã€æ€§èƒ½ã¨å®‰å®šæ€§ã‚’å‘上ã•ã›ã‚‹ãŸã‚ã«ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹äº‹ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚
+
+这个更新ä¸æ˜¯å¿…须的,但我们建议下载并安装æ¤æ›´æ–°ï¼Œä»¥æ”¹å–„ç”»é¢è´¨é‡å’Œç¨³å®šæ€§.
下载
@@ -2523,12 +2565,11 @@ then click "Set" again.
- A new version of [SECOND_LIFE] is available.
+ [SECOND_LIFE]有新版本å¯ç”¨ã€‚
[MESSAGE]
-
-You must download this update to use the system.
-Download to your Applications folder?
+ä½ å¿…é¡»ä¸‹å†æ¬¡æ›´æ–°æ‰èƒ½è¿è¡Œç³»ç»Ÿã€‚
+是å¦ä¸‹è½½æ›´æ–°è‡³åº”用软件文件夹?
下载
@@ -2539,10 +2580,12 @@ Download to your Applications folder?
- [SECOND_LIFE]ã®ã‚¢ãƒƒãƒ—デートãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒä½¿ç”¨å¯èƒ½ã§ã™ã€‚
+ [SECOND_LIFE]有新版本å¯ç”¨ã€‚
[MESSAGE]
-ã“ã®ã‚¢ãƒƒãƒ—デートã¯å¿…é ˆã§ã¯ã‚ã‚Šã¾ã›ã‚“ãŒã€æ€§èƒ½ã¨å®‰å®šæ€§ã‚’å‘上ã•ã›ã‚‹ãŸã‚ã«ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹äº‹ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚
-アプリケーション・フォルダーã«ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã—ã¾ã™ã‹ï¼Ÿ
+
+这个更新ä¸æ˜¯å¿…须的,但我们建议下载并安装æ¤æ›´æ–°ï¼Œä»¥æ”¹å–„ç”»é¢è´¨é‡å’Œç¨³å®šæ€§.
+
+是å¦ç«‹åˆ»ä¸‹è½½è‡³åº”用程åºæ–‡ä»¶å¤¹ï¼Ÿ
下载
@@ -2553,10 +2596,12 @@ Download to your Applications folder?
- [SECOND_LIFE]ã®ã‚¢ãƒƒãƒ—デートãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒä½¿ç”¨å¯èƒ½ã§ã™ã€‚
+ [SECOND_LIFE]有新版本å¯ç”¨ã€‚
[MESSAGE]
-ã“ã®ã‚¢ãƒƒãƒ—デートã¯å¿…é ˆã§ã¯ã‚ã‚Šã¾ã›ã‚“ãŒã€æ€§èƒ½ã¨å®‰å®šæ€§ã‚’å‘上ã•ã›ã‚‹ãŸã‚ã«ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹äº‹ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚
-アプリケーション・フォルダーã«ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã—ã¾ã™ã‹ï¼Ÿ
+
+这个更新ä¸æ˜¯å¿…须的,但我们建议下载并安装æ¤æ›´æ–°ï¼Œä»¥æ”¹å–„ç”»é¢è´¨é‡å’Œç¨³å®šæ€§.
+
+是å¦ç«‹åˆ»ä¸‹è½½è‡³åº”用程åºæ–‡ä»¶å¤¹ï¼Ÿ
下载
@@ -2598,9 +2643,12 @@ Download to your Applications folder?
- ã“ã®ã‚³ãƒ³ãƒ”ュータã«æ載ã®[VENDOR_LABLE][CARD_NAME]グラフィック・ドライãƒãƒ¼ã¯æ—§å¼ã§ã™ã€‚
-ã“ã‚Œã¯ã‚ãªãŸã®ã‚°ãƒ©ãƒ•ã‚£ãƒƒã‚¯ãƒ»ã‚«ãƒ¼ãƒ‰ã‚’制御ã™ã‚‹ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®ä¸€ã¤ã§ã™ã€‚å¤ã„ドライãƒãƒ¼ã¯[SECOND_LIFE]ã®ã‚ˆã†ãª3Dグラフィック・プãƒã‚°ãƒ©ãƒ ã§ã®å‹•ä½œã®é…延やクラッシュã®åŽŸå› ã«ãªã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚
-[VENDOR_LABLE] ã‹ã‚‰ç„¡æ–™ã§ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã§ãã‚‹[DRIVER_NAME]ドライãƒãƒ¼ã¸ã®ã‚¢ãƒƒãƒ—グレードを強ã推奨ã—ã¾ã™ã€‚[SECOND_LIFE]ã®ãƒ‰ãƒ©ã‚¤ãƒãƒ¼Webページã«ç§»è¡Œã—ã¾ã™ã‹ï¼Ÿ
+ ä½ åœ¨è¿™å°è®¡ç®—机上的[VENDOR_LABLE] [CARD_NAME]图åƒé©±åŠ¨å·²ç»è¿‡æœŸã€‚
+
+è¿™æ˜¯æŽ§åˆ¶ä½ çš„å›¾åƒå¡çš„软件的一部分。旧的驱动å¯ä»¥å¯¼è‡´3D图åƒç¨‹åºï¼Œä¾‹å¦‚[SECOND_LIFE]è¿è¡Œç¼“慢或崩溃。
+我们强烈推èå‡çº§ "[DRIVER_NAME]" 驱动, å…费的驱动下载在 [VENDOR_LABLE].
+
+ä½ æ˜¯å¦æ„¿æ„登陆[SECOND_LIFE]驱动网页?
回主页
@@ -2650,18 +2698,7 @@ AGPç»˜å›¾åŠ é€Ÿå™¨èµ·ä½œç”¨ã€‚Options panel in Preferences in [SECOND_LIFE].
- 最新ã®ãƒ’ントãŠã‚ˆã³ãƒˆãƒªãƒƒã‚¯ã¯ã€[SECOND_LIFE]ã®çŸ¥è˜ãƒ™ãƒ¼ã‚¹ã‚’検索ã—ã¦ãã ã•ã„。
-
-
- 回主页
-
-
- å–消
-
-
-
-
- Contact [SECOND_LIFE] Support.
+ 在[SECOND_LIFE]基础知识ä¸æŸ¥æ‰¾æœ€æ–°çš„å°è´´å£«å’Œå°æŠ€å·§ã€‚
回主页
@@ -2672,7 +2709,7 @@ AGPç»˜å›¾åŠ é€Ÿå™¨èµ·ä½œç”¨ã€‚Options panel in Preferences in [SECOND_LIFE].
- å…¬å¼ã®Lindenブãƒã‚°ã§ã€æœ€æ–°ã®ãƒ‹ãƒ¥ãƒ¼ã‚¹ã‚„æƒ…å ±ã‚’å…¥æ‰‹ã—ã¦ãã ã•ã„。
+ 进入林登官方åšå®¢, 获å–最新的新闻和咨讯.
回主页
@@ -2705,7 +2742,7 @@ AGPç»˜å›¾åŠ é€Ÿå™¨èµ·ä½œç”¨ã€‚Options panel in Preferences in [SECOND_LIFE].
- [SECOND_LIFE]ã®ãƒªãƒªãƒ¼ã‚¹ãƒŽãƒ¼ãƒˆã‚’閲覧ã—ã¾ã™ã‹ï¼Ÿ
+ 是å¦æŸ¥çœ‹[SECOND_LIFE] å‘布的消æ¯?.
回主页
@@ -2732,7 +2769,7 @@ AGPç»˜å›¾åŠ é€Ÿå™¨èµ·ä½œç”¨ã€‚Options panel in Preferences in [SECOND_LIFE].
- Second Lifeã®ãƒªãƒªãƒ¼ã‚¹ãƒŽãƒ¼ãƒˆã‚’閲覧ã—ã¾ã™ã‹ï¼Ÿ
+ 是å¦æŸ¥çœ‹ç¬¬äºŒäººç”Ÿå‘布的消æ¯?
回主页
@@ -2778,12 +2815,13 @@ AGPç»˜å›¾åŠ é€Ÿå™¨èµ·ä½œç”¨ã€‚Options panel in Preferences in [SECOND_LIFE].
OK
-
+
- åå‰ã«ã‚ˆã‚‹ãƒŸãƒ¥ãƒ¼ãƒˆã¯ã€ã‚ªãƒ–ジェクト・ãƒãƒ£ãƒƒãƒˆã€ãŠã‚ˆã³ï¼©ï¼ã®ã¿ã«å½±éŸ¿ã—ã€ã‚µã‚¦ãƒ³ãƒ‰ã«ã¯å½±éŸ¿ã—ã¾ã›ã‚“。 æ£ç¢ºãªã‚ªãƒ–ジェクトåをタイプã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+ 通过åå—å±è”½å£°éŸ³åªä¼šå½±å“对象èŠå¤©å’Œå³æ—¶æ¶ˆæ¯, ä¸ä¼šå½±æ•ˆæžœå£°éŸ³ã€‚
+ä½ å¿…é¡»å‡†ç¡®é”®å…¥å¯¹è±¡çš„åå—.
- オブジェクトå
+ 东东å称
OK
@@ -2792,9 +2830,9 @@ AGPç»˜å›¾åŠ é€Ÿå™¨èµ·ä½œç”¨ã€‚Options panel in Preferences in [SECOND_LIFE].
å–消
-
+
- ã“ã®åå‰ã¯ã€ã™ã§ã«ãƒŸãƒ¥ãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã™ã€‚
+ ä½ å·²ç»å±è”½äº†è¿™ä¸ªåå—.
OK
@@ -2907,14 +2945,6 @@ from the 'Edit' menu.
è°¢ç»
-
-
- æ— æ³•é‰´å®šä¸œä¸œä¸»äºº,东东由社团拥有。
-
-
- OK
-
-
以哪å¥æ¶ˆæ¯è¸¢èµ°æ¤äºº?
@@ -3010,8 +3040,7 @@ from the 'Edit' menu.
å–消
-
+
输入一æ¡ç®€çŸçš„通知,该声明将
会分å‘给目å‰åœ¨ä½ 领地内的所有居民。
@@ -3023,7 +3052,7 @@ from the 'Edit' menu.
å–消
-
+
ä½ å°†è¦æ›´æ”¹æž—登所有的ç§äººè´¢äº§(大陆,
æ ¼å,æ–¹ä½, ç‰ç‰.).
@@ -3041,7 +3070,7 @@ from the 'Edit' menu.
å–消
-
+
å³å°†æ”¹å˜æž—ç™»ç§äººè´¢äº§
(大陆,æ ¼å, æ–¹å‘,ç‰ç‰.)的准入åå•.
@@ -3062,7 +3091,7 @@ Proceed?
å–消
-
+
ä»…å°†æ¤ç‹¬ç«‹é¢†åœ°è¿˜æ˜¯å°†[所有独立领地]列入å…许åå•?
@@ -3076,7 +3105,7 @@ Proceed?
å–消
-
+
从å…许åå•ä¸ç§»é™¤ä»…è¿™å—领地还是[ALL_ESTATES]?
@@ -3090,7 +3119,7 @@ Proceed?
å–消
-
+
ä»…å°†æ¤ç‹¬ç«‹é¢†åœ°è¿˜æ˜¯å°†[所有独立领地]列入社团å…许åå•?
@@ -3104,7 +3133,7 @@ Proceed?
å–消
-
+
从社团å…许åå•ä¸ç§»é™¤ä»…è¿™å—领地还是[ALL_ESTATES]?
@@ -3118,7 +3147,7 @@ Proceed?
å–消
-
+
æ‹’ç»è®¿é—®ä»…æ¤é¢†åœ°æˆ–[所有_领地]?
@@ -3132,7 +3161,7 @@ Proceed?
å–消
-
+
åœæ¢æ‹’ç»è¿›å…¥ä»…这一个领地还是[ALL_ESTATES]?
@@ -3146,7 +3175,7 @@ Proceed?
å–消
-
+
ä»…ä¸ºè¿™ä¸€ä¸ªç‹¬ç«‹é¢†åœ°è¿˜æ˜¯ä¸ºæ‰€æœ‰ç‹¬ç«‹é¢†åœ°æ·»åŠ ç‹¬ç«‹é¢†åœ°ç»ç†?
@@ -3160,7 +3189,7 @@ Proceed?
å–消
-
+
仅开除æ¤å¤„领地的领地ç»ç†è¿˜æ˜¯å¼€é™¤ä½ 所有领地的领地ç»ç†ã€‚
@@ -3174,9 +3203,9 @@ Proceed?
å–消
-
+
- 本ä¸å‹•ç”£ã®ã¿ã€ã¾ãŸã¯ã€[ALL_ESTATES]ã®ãŸã‚ã®ç´„款メッセージを変更ã—ã¾ã™ã‹ï¼Ÿ
+ åªæ”¹å˜æ¤å¤„ä¸åŠ¨äº§çš„åˆåŒæ¶ˆæ¯è¿˜æ˜¯æ”¹å˜[ALL_ESTATES]çš„åˆåŒæ¶ˆæ¯?
该领地
@@ -3188,7 +3217,7 @@ Proceed?
å–消
-
+
å°†[EVIL_USER]踢出æ¤å¤„领地?
@@ -3201,10 +3230,10 @@ Proceed?
- ä¸å‹•ç”£ç´„款を本当ã«å¤‰æ›´ã—ã¦ã‚‚よã„ã§ã™ã‹ï¼Ÿ
+ ä½ æ˜¯å¦ç¡®å®šæ”¹å˜ä¸åŠ¨äº§åˆåŒ?
- 変更
+ 更改
å–消
@@ -3212,7 +3241,7 @@ Proceed?
- ä¸å‹•ç”£ç´„款インãƒãƒ¼ãƒˆã®å•é¡Œ
+ Problem importing estate covenant.
OK
@@ -3220,7 +3249,7 @@ Proceed?
- 今回ã¯ã€ãƒŽãƒ¼ãƒˆã‚«ãƒ¼ãƒ‰è³‡ç”£ã‚’èªã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“。
+ 这次å°è¯•æ— 法载入注释å¡æ‰€å±žçš„资产.
OK
@@ -3228,7 +3257,7 @@ Proceed?
- è¦æ±‚ã•ã‚ŒãŸè³‡ç”£IDã«é–¢ã™ã‚‹ãƒŽãƒ¼ãƒˆã‚«ãƒ¼ãƒ‰é–²è¦§ã®ãŸã‚ã®è¨±å¯ãŒä¸å分ã§ã™
+ 缺ä¹è®¸å¯è¯ï¼Œä¸èƒ½æŸ¥çœ‹è¦æ±‚查看的和资产ID相关的注释å¡
OK
@@ -3236,7 +3265,7 @@ Proceed?
- ノートカード用資産IDãŒãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‹ã‚‰ç´›å¤±
+ 资产ID的注释信æ¯å·²ç»ä»Žæ•°æ®åº“ä¸é—失 .
OK
@@ -3244,8 +3273,9 @@ Proceed?
- æ³¨æ„ ï¼šæ¡ˆå†…åºƒå‘Šã®æ–™é‡‘ã¯æ‰•ã„戻ã—ã•ã‚Œã¾ã›ã‚“。
-L$[AMOUNT]ã§ã€ã“ã®æ¡ˆå†…を表示ã—ã¾ã™ã‹ï¼Ÿ
+ 请éµè®°: 分类广告费用ä¸ä¼šé€€è¿˜ã€‚
+
+是å¦æ¶ˆè´¹L$[AMOUNT]å‘布广告?
å‘布
@@ -3254,7 +3284,7 @@ L$[AMOUNT]ã§ã€ã“ã®æ¡ˆå†…を表示ã—ã¾ã™ã‹ï¼Ÿ
å–消
-
+
ä½ çœŸçš„è¦åœ¨2分钟åŽé‡æ–°è¿›å…¥åŒºåŸŸå—?
@@ -3265,7 +3295,7 @@ L$[AMOUNT]ã§ã€ã“ã®æ¡ˆå†…を表示ã—ã¾ã™ã‹ï¼Ÿ
å–消
-
+
输入一æ¡ç®€çŸçš„通知,该声明将
会分å‘给目å‰åœ¨æ¤åŒºåŸŸå†…的所有居民。
@@ -3279,8 +3309,9 @@ L$[AMOUNT]ã§ã€ã“ã®æ¡ˆå†…を表示ã—ã¾ã™ã‹ï¼Ÿ
- 本ボックスãŒãƒã‚§ãƒƒã‚¯ã•ã‚Œã¦ã„ã‚‹å ´åˆã€åŒºç”»æ¯Žã®ã€Žé ˜åŸŸã‚’編集ã€è¨å®šã«ã‹ã‹ã‚らãšã€åœŸåœ°ã‚ªãƒ¼ãƒŠãƒ¼ã¯åœŸåœ°æ•´å‚™ãŒå‡ºæ¥ã¾ã›ã‚“。
-デフォルト: オフ
+ 如果æ¤é¡¹è¢«é€‰æ‹©å¹¶æ‰§è¡Œ, æ— è®ºæ¯å•å…ƒåœŸåœ°çš„'编辑地形' 如何设置,土地所有者å¯èƒ½æ— 法编辑他们自己的土地。
+
+默认: 关
@@ -3291,7 +3322,7 @@ L$[AMOUNT]ã§ã€ã“ã®æ¡ˆå†…を表示ã—ã¾ã™ã‹ï¼Ÿ
默认:关
-
+
忽略个别å•ä½åœŸåœ°çš„设置,选定框使å¥åº·ç³»ç»Ÿ
应用于所有å•ä½åœŸåœ°ã€‚如果有é—留框
@@ -3337,23 +3368,31 @@ Default: 30
默认:éžæˆäººçº§åˆ«
-
+
- 全地域ã«ãŠã„ã¦ã€ãƒ—ッシュ許å¯ã‚’制é™ã—ã¾ã™ã€‚エージェントã¯è‡ªåˆ†è‡ªèº«ã§ã®ãƒ—ッシュã€ä»–区画ã®ã‚ªãƒ¼ãƒŠãƒ¼ã€ãŠã‚ˆã³ã€ãã®åŒºç”»ã«è¨å®šï¼è²æ¸¡ã•ã‚ŒãŸã‚°ãƒ«ãƒ¼ãƒ—所有ã®ã‚¹ã‚¯ãƒªãƒ—トã«ãƒ—ッシュã•ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚
-デフォルト:オフ
+ 设定所有区域为é™åˆ¶æŽ¨åŠ¨åŒºã€‚代ç†å•†åªèƒ½æŽ¨åŠ¨è‡ªå·±ï¼Œæˆ–者由土地主人所设的脚本代ç 推动,或者由社团所属土地的脚本代ç 推动,这里å‡è®¾åœŸåœ°æœ‰ç¤¾å›¢è½¬è®©è®¾ç½®ã€‚
+
+推动功能和llPushObject() LSL功能有关.
+
+默认: 关
-
+
- ä¸å‹•ç”£ã‚ªãƒ¼ãƒŠãƒ¼ãŒæ‰€æœ‰ã—ã¦ã„ãªã„区画を統åˆï¼å†åˆ†å‰²ã§ãã‚‹
-ã‹è¨å®šã—ã¾ã™ã€‚
-本オプションãŒç„¡åŠ¹ãªå ´åˆï¼š
-*ä¸å‹•ç”£ã‚ªãƒ¼ãƒŠãƒ¼ã€ã¾ãŸã¯ç®¡ç†è€…ã®ã¿ãŒã€çµ±åˆï¼å†åˆ†å‰²ã‚’è¡Œã†ã“ã¨ãŒã§ãã¾ã™ã€‚ *オーナーã€ã¾ãŸã¯ã€é©åˆ‡ãªæ¨©é™ã‚’æŒã¤ã‚°ãƒ«ãƒ¼ãƒ—ã«å±žã™ã‚‹åŒºç”»ã®ã¿ã‚’çµ±åˆï¼å†åˆ†å‰²ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
-本オプションãŒæœ‰åŠ¹ãªå ´åˆï¼š
-*å…¨ã¦ã®åŒºç”»ã‚ªãƒ¼ãƒŠãƒ¼ã¯ã€æ‰€æœ‰ã™ã‚‹åŒºç”»ã®çµ±åˆï¼å†åˆ†å‰²ãŒã§ãã¾ã™ã€‚ *グループ所有ã®åŒºç”»ã¯ã€é©åˆ‡ãªæ¨©é™ã‚’æŒã¤ã‚°ãƒ«ãƒ¼ãƒ—ã«å±žã™ã‚‹åŒºç”»ã‚’çµ±åˆï¼å†åˆ†å‰²ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™
+ 设置æˆæ— 论土地是å¦å½’ä¸åŠ¨äº§ä¸»äººæ‰€æœ‰ï¼Œéƒ½å¯ä»¥è¢«è¿žæŽ¥æˆ–å†åˆ’分。
+如果该选项未被执行:
+ * åªæœ‰ä¸åŠ¨äº§ä¸»äººå’Œç»ç†äººæœ‰æƒåˆ©è¿žæŽ¥æˆ–å†åˆ’分土地.
+ * 他们åªèƒ½è¿žæŽ¥æˆ–å†åˆ’分属于这个主人的土地,或属于具有åˆé€‚æƒåˆ©çš„社团的土地。
+
+如果选项已被执行:
+ * 所有土地的主人都å¯ä»¥è¿žæŽ¥æˆ–å†åˆ’分他们所拥有的土地.
+ * 对于社团所拥有的土地, 拥有åˆé€‚æƒåˆ©çš„社团å¯ä»¥è¿žæŽ¥æˆ–å†åˆ’分土地。
+
+
+默认: 执行
-
+
æ¤åŒºåŸŸå†…çš„æˆäººå†…容ç‰çº§å·²ç»æ›´æ–°ã€‚
@@ -3362,15 +3401,19 @@ Default: 30
ä¿¡æ¯ã€‚
-
+
- ä¸å‹•ç”£ã‚ªãƒ¼ãƒŠãƒ¼ã‚„管ç†è€…ã¯ã€ä¸å‹•ç”£ã‚ªãƒ¼ãƒŠãƒ¼ã®åœŸåœ°ã‚’販売ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ ã‚‚ã—ã€ã“ã®ã‚ªãƒ—ションãŒè¨å®šã•ã‚Œã¦ã„ãªã„å ´åˆã€è³¼å…¥è€…ã¯æœ¬åœ°åŸŸã«ãŠã‘る土地をå†è²©ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。もã—ã€ã“ã®ã‚ªãƒ—ションãŒè¨å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã€è³¼å…¥è€…ã¯æœ¬åœ°åŸŸã«ãŠã‘る土地をå†è²©ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
-デフォルト: 許å¯ã—ãªã„
+ ä¸åŠ¨äº§ä¸»äººå’Œç»ç†äººæœ‰æƒåˆ©å‡ºå”®ä»»ä½•ä¸åŠ¨äº§ä¸»äººçš„土地。
+如果选项没有被执行,买主ä¸èƒ½é‡æ–°å‡ºå”®è¯¥åŒºåŸŸå†…的土地。如果选项被执行,买主则å¯ä»¥é‡æ–°å‡ºå”®è¯¥åŒºåŸŸå†…土地。
+
+
+默认: ä¸å…许
-
+
- 本ä¸å‹•ç”£ã«å±žã™ã‚‹ä¸å‹•ç”£ç´„款ã®ãƒŽãƒ¼ãƒˆã‚«ãƒ¼ãƒ‰è³‡ç”£IDã‚’è¨å®š デフォルト:00000000ï¼0000ï¼0000ï¼0000ï¼000000000000ã‚‚ã—ãã¯ã€ç„¡ã—
+ 设置这个属于这项ä¸åŠ¨äº§çš„ä¸åŠ¨äº§å¥‘约å议的注释å¡èµ„产ID。
+默认: 00000000-0000-0000-0000-000000000000或没有
@@ -3432,7 +3475,7 @@ Default: 30
默认:关
-
+
列出æ£åœ¨ç»å—大é‡æ½œåœ¨çš„物物冲çªçš„
东东的åå•ã€‚这些东东å¯èƒ½ä¼šå‡æ…¢
@@ -3441,7 +3484,7 @@ Default: 30
æ¥æŸ¥çœ‹ã€‚
-
+
显示花费很多时间è¿è¡Œæž—登脚本è¯è¨€çš„东东
çš„åå•ã€‚ 这些东东å¯èƒ½ä¼šå‡æ…¢æ¨¡æ‹Ÿæ€§èƒ½ã€‚
@@ -3471,7 +3514,7 @@ Default: 30
默认: 20
-
+
这个市å•ä½åœŸåœ°ä¸»äººèƒ½å¤ŸæŠ¬é«˜ä»–们的
地形,使得其高于 'baked' 地形的默认
@@ -3480,7 +3523,7 @@ Default: 30
默认: 4
-
+
这个是å•ä½åœŸåœ°çš„主人能够使
他们的地形比 'baked' 地形高度低的默认
@@ -3489,7 +3532,7 @@ Default: 30
默认: -4
-
+
点击这个按钮å¯ä»¥æŠŠåŽç¼€ä¸º.RAWçš„æ–‡ä»¶ä¸Šä¼ åˆ°ä½ æ‰€åœ¨çš„åœ°åŒºã€‚
文件必须包å«æ£ç¡®çš„尺寸和通é“æ•°:
@@ -3507,7 +3550,7 @@ RGB, 256x256 and 13 通路. 创建地形文件最好的
http://secondlife.com/tiki/tiki-index.php?page=RawTerrainFile
-
+
点击æ¤æŒ‰é’®å¯ä»¥ä¸‹è½½åŒ…å«åœŸåœ°é«˜åº¦æ•°æ®,å•ä½åœŸåœ°å°ºå¯¸ï¼Œ
代售å•ä½åœŸåœ°çŠ¶å†µï¼Œå’Œæ¤åŒºåŸŸå†…å•ä½åœŸåœ°è®¸å¯è¯
@@ -3538,10 +3581,10 @@ http://secondlife.com/tiki/tiki-index.php?page=RawTerrainFile
- ã“ã®ãƒœã‚¿ãƒ³ã«ã‚ˆã‚Šã€ç¾åœ¨ã®é ˜åŸŸã®å½¢ã‚’æ–°ãŸãªãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã¨ã—ã¦ä¿å˜ã—ã¾ã™ã€‚一度ベークã•ã‚Œã‚‹ã¨ã€ã‚ãªãŸã‚„ä»–ã®ä½¿ç”¨è€…ãŒé ˜åŸŸç·¨é›†ã®ã€Žå¾©å¸°ã€ã‚ªãƒ—ションï¼ãƒ„ールを利用ã—ãªãã¦ã‚‚ã€ä¿å˜ã•ã‚ŒãŸå½¢ã«å¾©å¸°ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ベークã•ã‚ŒãŸé ˜åŸŸã¯ã€é ˜åŸŸä¸Šæ˜‡ãŠã‚ˆã³ä¸‹é™å¢ƒç•Œã®ä¸é–“点ã§ã‚‚ã‚ã‚Šã¾ã™ã€‚
+ 这个按钮把当å‰åœ°å½¢ä¿å˜ä¸ºåŒºåŸŸå†…心的默认模å¼ã€‚一旦烤干,土地将æ¢å¤æˆä¿å˜çš„å½¢æ€ï¼Œæ— è®ºä½•æ—¶ä½ æˆ–è€…ä»–äººä½¿ç”¨ç¼–è¾‘â€˜æ¢å¤â€™é€‰è´¤/工具。烤干的地形åŒæ ·æ˜¯åœ°å½¢ä¸Šå‡æˆ–下é™æžé™çš„ä¸ç‚¹ã€‚
-
+
领地ç»ç†æ˜¯ä½ 委派的负责区域控制
和领地调节的居民。 领地ç»ç†
@@ -3570,12 +3613,20 @@ http://secondlife.com/tiki/tiki-index.php?page=RawTerrainFile
滑动到æ¤é˜¶æ®µæ—¶çš„ä½ç½®ï¼Œå¹¶ä¸”ä½¿å¾—å¤ªé˜³æ— æ³•ç§»åŠ¨ã€‚
-
+
+
+ 设置æ¤å¤„领地内的居民是å¦èƒ½ä»Žåœ°å›¾ä¸Š
+看è§æž—登所拥有的 '大陆' 领地。
+
+默认:å¯ä»¥
+
+
+
- Sets whether residents who are on other estates can enter this
- estate without being on an access list.
+ 设置在林登所拥有的'大陆'领地内的居民
+是å¦èƒ½ä»Žåœ°å›¾ä¸Šçœ‹åˆ°ä½ 的领地。
-Default: on
+默认:å¯ä»¥
@@ -3587,7 +3638,7 @@ Default: on
默认: 关
-
+
一旦任何居民被列于æ¤,å‰å¾€è¿™å—领地的通é“
将对该åå•ä¸Šçš„居民下é¢åå•ä¸Šçš„社团进行é™åˆ¶ã€‚
@@ -3597,7 +3648,7 @@ Default: on
åªæœ‰ 'æ‹’ç»çš„通é“' åå•å¯ç”¨ã€‚
-
+
一旦任何社团被列于æ¤,å‰å¾€è¿™å—领地的通é“
将对åå•ä¸Šçš„社团进行é™åˆ¶ï¼Œand residents specifically
@@ -3608,7 +3659,7 @@ allowed above.
åªæœ‰ 'æ‹’ç»çš„通é“' åå•å¯ç”¨ã€‚)
-
+
ä¸ç®¡ä»¥ä¸Šç¤¾å›¢çš„设置为什么情况,
åå•ä¸Šçš„居民被拒ç»åˆ°è¾¾æ‚¨çš„领地。
@@ -3617,30 +3668,34 @@ allowed above.
ä¸åˆ 除。
-
+
- ä¸å‹•ç”£ç´„款をè¨å®šã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ãã®ä¸å‹•ç”£å†…ã«ãŠã„ã¦åœŸåœ°ã‚’販売ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚約款ãŒãªã„å ´åˆã€ãã®åœŸåœ°ã‚’販売ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。購入者ãŒè³¼å…¥ã™ã‚‹å‰ã«ã€åœŸåœ°ã«é–¢ã™ã‚‹è¦å‰‡ã‚’é©ç”¨ã—ãŸã‚Šã€ã‚¢ãƒ‰ãƒã‚¤ã‚¹ã‚’ã—ãŸããªã„å ´åˆã¯ã€ç´„款ã®ãƒŽãƒ¼ãƒˆã‚«ãƒ¼ãƒ‰ã¯ç©ºç™½ã§ã‚‚構ã„ã¾ã›ã‚“。 約款ã¯ã€è¦å‰‡ã€ã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã€æ–‡åŒ–çš„æƒ…å ±ã€ã¾ãŸã¯ã€å˜ã«å°†æ¥ã®è³¼å…¥è€…ã«å¯¾ã—ã¦ã‚ãªãŸãŒæœŸå¾…ã™ã‚‹ã“ã¨ã‚’ä¼ãˆã‚‹ãŸã‚ã«åˆ©ç”¨ã§ãã¾ã™ã€‚ã“ã‚Œã«ã¯ã€åœŸåœ°ä½¿ç”¨åŒºåˆ†ã€å»ºé€ 物è¦åˆ¶ã€æ”¯æ‰•ã„オプションã€ã¾ãŸã¯ã€æ–°ã—ã„オーナーã«ã¨ã£ã¦ã‚ãªãŸãŒé‡è¦ã¨æ€ã‚れる事柄ç‰ã®ã€è³¼å…¥å‰ã«è³¼å…¥è€…ãŒèªã‚“ã§åŒæ„ã—ã¦ãŠãã¹ãæƒ…å ±ã‚’å«ã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚ 購入者ã¯è³¼å…¥ã‚’完了ã™ã‚‹å‰ã«ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã‚’ãƒã‚§ãƒƒã‚¯ã—ã€ç´„款ã«åŒæ„ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ä¸å‹•ç”£ç´„款ãŒè¨å®šã•ã‚Œã¦ã„る土地ã®ç´„款ã¯ã€åœŸåœ°ã«é–¢ã™ã‚‹ãƒ€ã‚¤ã‚¢ãƒã‚°å†…ã«è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚
+ 设置ä¸åŠ¨äº§çš„契约åˆåŒä½¿ä½ å¯ä»¥è¿žä¸åŠ¨äº§ä¸€èµ·å‡ºå”®åœŸåœ°ã€‚如果在ä¸åŠ¨äº§å¥‘约åˆåŒä¸æ²¡æœ‰è®¾ç½®ï¼Œä½ 则ä¸èƒ½å‡ºå”®åœŸåœ°ï¼Œè€Œåªèƒ½å•ç‹¬å‡ºå”®ä¸åŠ¨äº§ã€‚如果在买主è´ä¹°ä¹‹å‰ï¼Œä½ ä¸æƒ³åœ¨åœŸåœ°ä¸Šè®¾ç½®ä»»ä½•ç›¸å…³çš„给买主的æ„è§å’Œè§„å®šï¼Œåˆ™è¿™å¼ ä½ å¥‘çº¦åˆåŒçš„注释å¡å¯èƒ½æ˜¯ç©ºçš„。
+
+一个ä¸åŠ¨äº§å¥‘约åˆåŒå¯ä»¥è¢«ç”¨æ¥åˆ¶å®šè§„定和指导方针,表明文化信æ¯æˆ–ä»…ä»…æ˜¯ä½ è‡ªå·±å¯¹æœªæ¥ä¹°å®¶çš„期望。它å¯ä»¥åŒ…å«åˆ†åŒºåˆ¶åº¦ï¼Œå»ºç‘规范,支付方å¼é€‰æ‹©ä»¥åŠä»»ä½•ä½ 认为é‡è¦ï¼Œå¹¶å¸Œæœ›æ–°ä¸»äººåœ¨è´ä¹°ä¹‹å‰çœ‹åˆ°ï¼Œå¹¶åŒæ„çš„æ¡æ¬¾ã€‚
+
+买主必须éµå®ˆå¥‘约åˆåŒä¸Šæ‰€æ ‡å‡ºçš„规定,在完æˆæ¶ˆè´¹å‰ï¼Œä¹°ä¸»è¦åœ¨æ˜¯å¦åŒæ„çš„æ–¹æ ¼é‡Œç”»é’©ã€‚ä¸åŠ¨äº§å¥‘约åˆåŒæ€»æ˜¯åœ¨ä»»ä½•è®¾ç½®ä¸ºæ¤çš„土地ä¸å…³äºŽåœŸåœ°å¯¹è¯æ¡†ä¸å¯è§ã€‚
-
+
一次å¯ä»¥è´ä¹°çš„东东ä¸å¾—多于一件。
请仅选择一件东东并å†è¯•ä¸€é。
-
+
ä¸€æ¬¡æ— æ³•ä»Žä¸åŒä¸»äººå¤„è´ä¹°ä¸œä¸œã€‚
请仅选择一件东东,å†è¯•ä¸€æ¬¡ã€‚
-
+
一次å¯ä»¥è´ä¹°çš„东东ä¸å¾—多于一件。
请仅选择一件东东并å†è¯•ä¸€é。
-
+
ä¸€æ¬¡æ— æ³•ä»Žä¸åŒä¸»äººå¤„è´ä¹°ä¸œä¸œã€‚
请仅选择一件东东,å†è¯•ä¸€æ¬¡ã€‚
@@ -3658,12 +3713,12 @@ allowed above.
- L$[PRICE]ã§[OWNER]ã‹ã‚‰ã‚ªãƒªã‚¸ãƒŠãƒ«ã®ã‚ªãƒ–ジェクトを購入ã—ã¾ã™ã‹ï¼Ÿ
-ã‚ãªãŸãŒæœ¬ã‚ªãƒ–ジェクトã®æ‰€æœ‰è€…ã«ãªã‚Šã¾ã™ã€‚
-ã‚ãªãŸã«ã¯ä»¥ä¸‹ã®æ¨©é™ãŒã‚ã‚Šã¾ã™ã€‚
-ä¿®æ£ï¼š[MODIFYPERM]
-コピー:[COPYPERM]
-å†è²©ã€ã¾ãŸã¯ãƒ—レゼント:[RESELLPERM]
+ 是å¦æ¶ˆè´¹L$[PRICE]è´ä¹°åˆå§‹ä¸œä¸œ?
+ä½ å°†æˆä¸ºä¸œä¸œçš„主人。
+ä½ å°†å¯ä»¥ï¼š
+修饰: [MODIFYPERM]
+ å¤åˆ¶: [COPYPERM]
+ é‡æ–°å‡ºå”®æˆ–é¦ˆèµ ä»–äºº: [RESELLPERM]
è´ä¹°
@@ -3674,12 +3729,12 @@ allowed above.
- L$[PRICE]ã§ã‚ªãƒªã‚¸ãƒŠãƒ«ã®ã‚ªãƒ–ジェクトを購入ã—ã¾ã™ã‹ï¼Ÿ
-ã‚ãªãŸãŒæœ¬ã‚ªãƒ–ジェクトã®æ‰€æœ‰è€…ã«ãªã‚Šã¾ã™ã€‚
-ã‚ãªãŸã«ã¯ä»¥ä¸‹ã®æ¨©é™ãŒã‚ã‚Šã¾ã™ã€‚
-ä¿®æ£ï¼š[MODIFYPERM]
-コピー:[COPYPERM]
-å†è²©ã€ã¾ãŸã¯ãƒ—レゼント:[RESELLPERM]
+ 是å¦æ¶ˆè´¹L$[PRICE]è´ä¹°åˆå§‹ä¸œä¸œ?
+ä½ å°†æˆä¸ºä¸œä¸œçš„主人。
+ä½ å°†å¯ä»¥ï¼š
+修饰: [MODIFYPERM]
+ å¤åˆ¶: [COPYPERM]
+ é‡æ–°å‡ºå”®æˆ–é¦ˆèµ ä»–äºº: [RESELLPERM]
è´ä¹°
@@ -3690,12 +3745,12 @@ allowed above.
- L$[PRICE]ã§[OWNER]ã‹ã‚‰ã‚³ãƒ”ーを購入ã—ã¾ã™ã‹ï¼Ÿ
-ãã®ã‚ªãƒ–ジェクトã¯ã‚ãªãŸã®æŒã¡ç‰©ã«ã‚³ãƒ”ーã•ã‚Œã¾ã™ã€‚
-ã‚ãªãŸã«ã¯ä»¥ä¸‹ã®æ¨©é™ãŒã‚ã‚Šã¾ã™ã€‚
-ä¿®æ£ï¼š[MODIFYPERM]
-コピー:[COPYPERM]
-å†è²©ã€ã¾ãŸã¯ãƒ—レゼント:[RESELLPERM]
+ 是å¦æ¶ˆè´¹L$[PRICE]从[OWNER]处è´ä¹°ä¸€ä»¶æ‹·è´?
+è¿™ä»¶ä¸œä¸œå°†ä»Žä½ çš„åº“å˜ä¸.
+ä½ å¯ä»¥åšçš„有:
+ 修改: [MODIFYPERM]
+ å¤åˆ¶: [COPYPERM]
+ é‡æ–°å‡ºå”®æˆ–é¦ˆèµ ä»–äºº: [RESELLPERM]
è´ä¹°
@@ -3706,12 +3761,11 @@ allowed above.
- L$[PRICE]ã§ã‚³ãƒ”ーを購入ã—ã¾ã™ã‹ï¼Ÿ
-ãã®ã‚ªãƒ–ジェクトã¯ã‚ãªãŸã®æŒã¡ç‰©ã«ã‚³ãƒ”ーã•ã‚Œã¾ã™ã€‚
-ã‚ãªãŸã«ã¯ä»¥ä¸‹ã®æ¨©é™ãŒã‚ã‚Šã¾ã™ã€‚
-ä¿®æ£ï¼š[MODIFYPERM]
-コピー:[COPYPERM]
-å†è²©ã€ã¾ãŸã¯ãƒ—レゼント:[RESELLPERM]
+ 是å¦æ¶ˆè´¹L$[PRICE]è´ä¹°ä¸œä¸œæ‹·è´?
+这件东东将被å¤åˆ¶è‡³ä½ 的库å˜ä¸.ä½ å°†å¯ä»¥ï¼š
+修饰: [MODIFYPERM]
+ å¤åˆ¶: [COPYPERM]
+ é‡æ–°å‡ºå”®æˆ–é¦ˆèµ ä»–äºº: [RESELLPERM]
è´ä¹°
@@ -3722,8 +3776,8 @@ allowed above.
- L$[PRICE]ã§[OWNER]ã‹ã‚‰ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を購入ã—ã¾ã™ã‹ï¼Ÿ
-ãれらã¯ã‚ãªãŸã®æŒã¡ç‰©ã«ã‚³ãƒ”ーã•ã‚Œã¾ã™ã€‚
+ 是å¦æ¶ˆè´¹L$[PRICE]从[OWNER]处è´ä¹°å†…容?
+它们将被拷è´åˆ°ä½ 的库å˜ã€‚
è´ä¹°
@@ -3734,8 +3788,8 @@ allowed above.
- L$[PRICE]ã§ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を購入ã—ã¾ã™ã‹ï¼Ÿ
-ãれらã¯ã‚ãªãŸã®æŒã¡ç‰©ã«ã‚³ãƒ”ーã•ã‚Œã¾ã™ã€‚
+ 是å¦æ¶ˆè´¹L$[PRICE]è´ä¹°å†…容?
+它们将被拷è´åˆ°ä½ 的库å˜ã€‚
è´ä¹°
@@ -3777,8 +3831,8 @@ allowed above.
- 注æ„:
-ã‚ãªãŸã¯ã€æœ¬ãƒ”ックã®ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚’æ›´æ–°ã—ã¾ã—ãŸãŒã€ä»–ã®è©³ç´°ã¯ã€å…ƒã®å€¤ã®ã¾ã¾ã§ã™ã€‚
+ 注æ„:
+ä½ åªä¸Šä¼ 了ä½ç½®ï¼Œå…¶ä»–细节还将ä¿æŒåŽŸå€¼.
OK
@@ -3825,7 +3879,7 @@ allowed above.
- ã“ã®ã‚ªãƒ–ジェクト内ã«ã€ã‚ãªãŸãŒã‚³ãƒ”ーã§ãるアイテムã¯ã‚ã‚Šã¾ã›ã‚“
+ åœ¨ä½ å…许å¤åˆ¶çš„对象ä¸æ²¡æœ‰æ‰¾åˆ°é¡¹ç›®ã€‚
@@ -3867,7 +3921,9 @@ http://secondlife.com/community/support.php
- ã“ã®å«ŒãŒã‚‰ã›å ±å‘Šã®ã‚«ãƒ†ã‚´ãƒªã‚’é¸æŠžã—ã¦ãã ã•ã„。カテゴリをé¸æŠžã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€å«ŒãŒã‚‰ã›å ±å‘Šã®å‡¦ç†ã‚„ä¿ç®¡ã«å¤§å¤‰å½¹ç«‹ã¡ã¾ã™ã€‚
+ 请为次辱骂事件报告选择一项分类。
+
+选择一个分类å¯ä»¥å¸®åŠ©æˆ‘们归档和处ç†è¾±éª‚事件。
@@ -3879,17 +3935,23 @@ Selecting a category helps us file and process bug reports.
- å«ŒãŒã‚‰ã›ã‚’è¡Œã£ãŸè€…ã®åå‰ã‚’入力ã—ã¦ãã ã•ã„。ã‚ãªãŸã®æ£ç¢ºãªæƒ…å ±ã¯ã€å«ŒãŒã‚‰ã›å ±å‘Šã®å‡¦ç†ã‚„ä¿ç®¡ã«å¤§å¤‰å½¹ç«‹ã¡ã¾ã™ã€‚
+ 请输入辱骂者的åå—.
+
+输入æ£ç¡®çš„æè¿°å¯ä»¥å¸®åŠ©æˆ‘们归档和处ç†è¾±éª‚事件。
- å«ŒãŒã‚‰ã›ã®èµ·ããŸå ´æ‰€ã‚’入力ã—ã¦ãã ã•ã„。ã‚ãªãŸã®æ£ç¢ºãªå ´æ‰€ï¼ˆåœ°ç‚¹ï¼‰ã¯ã€å«ŒãŒã‚‰ã›å ±å‘Šã®å‡¦ç†ã‚„ä¿ç®¡ã«å¤§å¤‰å½¹ç«‹ã¡ã¾ã™ã€‚
+ 请输入辱骂事件å‘生的地å€ã€‚
+
+输入æ£ç¡®çš„æè¿°å¯ä»¥å¸®åŠ©æˆ‘们归档和处ç†è¾±éª‚事件。
- èµ·ããŸå«ŒãŒã‚‰ã›ã®è¦æ—¨ã‚’入力ã—ã¦ãã ã•ã„。ã‚ãªãŸã®æ£ç¢ºãªè¦æ—¨ã¯ã€å«ŒãŒã‚‰ã›å ±å‘Šã®å‡¦ç†ã‚„ä¿ç®¡ã«å¤§å¤‰å½¹ç«‹ã¡ã¾ã™ã€‚
+ 请输入已å‘生的辱骂事件的概括。
+
+输入对事件的æ£ç¡®æè¿°å¯ä»¥å¸®åŠ©æˆ‘们归档和处ç†è¾±éª‚事件。
@@ -3901,8 +3963,9 @@ Entering an accurate summary helps us file and process bug reports.
- å«ŒãŒã‚‰ã›ã®è©³ç´°èª¬æ˜Žã‚’入力ã—ã¦ãã ã•ã„。åå‰ã‚„ã€å ±å‘Šã™ã‚‹äº‹è±¡ç‰ã€ã§ãã‚‹ã ã‘詳ã—ãã‚ã‹ã‚Šã‚„ã™ã記入ã—ã¦ãã ã•ã„。
-ã‚ãªãŸã®æ£ç¢ºãªèª¬æ˜Žã¯ã€å«ŒãŒã‚‰ã›å ±å‘Šã®å‡¦ç†ã‚„ä¿ç®¡ã«å¤§å¤‰å½¹ç«‹ã¡ã¾ã™ã€‚
+ 请键入已å‘生的辱骂事件的详细æè¿°.请尽é‡è¯¦ç»†æè¿°ï¼ŒåŒ…æ‹¬ä½ æŠ¥å‘Šäº‹ä»¶çš„å称和细节。
+
+ 输入对事件的æ£ç¡®æè¿°å¯ä»¥å¸®åŠ©æˆ‘们归档和处ç†è¾±éª‚事件。
@@ -3916,11 +3979,15 @@ Entering an accurate description helps us file and process bug reports.
- 親愛ãªã‚‹å±…ä½è€…ã®çš†æ§˜ã¸ï¼š
-著作権侵害ã«é–¢ã™ã‚‹å ±å‘Šã¯ http://secondlife.com/corporate/dmca.phpã®è¨˜è¿°ã«å¾“ã£ã¦ã®ã¿æ出ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
-著作権侵害ã«é–¢ã™ã‚‹å ±å‘Šã¯ã€Žå«ŒãŒã‚‰ã›å ±å‘Šã€ã‚’通ã—ã¦æ出ã•ã‚Œå ´åˆã€è‡ªå‹•çš„ã«å»ƒæ£„ã•ã‚Œã¾ã™ã€‚å ±å‘ŠãŒè‘—作権侵害ã«é–¢ã—ãªã„å ´åˆã¯ã€æœ¬ã‚¦ã‚¤ãƒ³ãƒ‰ã‚¦ã‚’é–‰ã˜ã€å ±å‘Šã‚’æ出ã—ã¦ãã ã•ã„。
-ã‚ã‚ŠãŒã¨ã†ã”ã–ã„ã¾ã™ã€‚
-Linden Lab
+ 亲爱的居民,
+
+关于版æƒä¾µå®³çš„报告åªèƒ½é€šè¿‡ä¸‹åˆ—网页上http://secondlife.com/corporate/dmca.phpæè¿°çš„æ–¹å¼æ交.
+
+关于版æƒä¾µå®³çš„报告,如果通过'辱骂报告'æ–¹å¼æ交,将被系统自动忽视。如果您的报告和版æƒä¾µå®³æ— 关,请关é—æ¤çª—å£ï¼Œå¹¶å®Œæˆæ交您的报告。
+
+感谢您的åˆä½œ,
+
+林登实验室
@@ -3929,18 +3996,18 @@ Linden Lab
[COMPONENTS]
-
+
- ã“ã®ä½“ã®éƒ¨ä½ã«ã¯ã€ã™ã§ã«è£…ç€ã•ã‚Œã¦ã„るオブジェクトãŒå˜åœ¨ã—ã¾ã™ã€‚é¸æŠžã•ã‚ŒãŸã‚ªãƒ–ジェクトã¨ãれをå–り替ãˆã¾ã™ã‹ï¼Ÿ
+ 这里已ç»æœ‰ä¸€ä»¶ä¸œä¸œé™„åœ¨äº†ä½ çš„èº«ä½“ä¸Šã€‚ ä½ æ˜¯å¦è¦ç”¨æ‰€é€‰ä¸œä¸œæ›¿ä»£å®ƒï¼Ÿ
-
+
是
-
+
å¦
-
+
ä½ åœ¨å¿™ç¢Œæ¨¡å¼ä¸, è¿™æ„味ç€ä½ å°†ä¸èƒ½
收到这次交易ä¸ä»¥æ‰¾é›¶å½¢å¼
@@ -3956,16 +4023,4 @@ Linden Lab
å¦
-
-
- Are you sure you want to permanently remove
-the contents of your Trash folder?
-
-
- 是
-
-
- å¦
-
-
diff --git a/linden/indra/newview/skins/xui/zh/floater_about.xml b/linden/indra/newview/skins/xui/zh/floater_about.xml
index 45280df..a53e82f 100644
--- a/linden/indra/newview/skins/xui/zh/floater_about.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_about.xml
@@ -1,14 +1,14 @@
- Second Lifeã¯ã€Philipã€Andrewã€Tessaã€Coryã€Frankã€Jamesã€Dougã€Hunterã€Richardã€Johnã€Ericã€Aviã€AaronBã€AaronYã€Ianã€Peterã€Markã€Robinã€Stephenã€Tracyã€Ryanã€Albertoã€Haneyã€Tanyaã€JimJã€Danã€Benã€Stephanieã€Timã€Evanã€Catherineã€Colinã€Chrisã€Reubenã€Charityã€Jeskaã€Jamesã€JonHenryã€Kellyã€Callumã€Charã€Danielã€DavidFã€Donã€Jeffã€Laurenã€Leeã€Michaelã€Ramziã€Vektorã€Steveã€TomYã€Tessã€Konaã€Brentã€Clarissaã€PeterPã€Jesseã€Annetteã€Cynã€Blueã€Ginsuã€Jonathanã€Karenã€Adamã€Novaã€Deanaã€Lizzieã€Patsyã€DavidKã€Isaacã€Pathfinderã€Monroeã€Jillã€Bennyã€Altruimaã€Rheyaã€Jenniferã€Jackã€DavePã€Bradã€Mickã€Babbageã€Elisabethã€Brianã€Bethã€Dataã€Ethanã€Wendyã€Nicoleã€Skyã€Jeffreyã€Zeroã€Coffeeã€Teslaã€Kennyã€Makikoã€Nigelã€Teepleã€Lucyã€Miaã€Deeã€Guyã€Harryã€Lianaã€Brankaã€Jimboã€Auraã€Vasudaã€SarahDã€bethanyeã€Torleyã€Runitaiã€MikeSã€PaulMã€Miloã€Hermiaã€JoeMã€Melanieã€Rejeanã€DSmithã€SMillerã€Susanã€Joseã€DongYunã€Justinã€Andreyã€Syrahã€Donovanã€Henrikã€Noraã€Lexieã€ACã€Donnaã€ChrisCã€Alexã€Leylaã€Kyleã€Mathewã€Devinã€Joshuaã€DanCã€Jessicaã€Harmonyã€Claudiaã€Tramelã€Glennã€Betsyã€Fritzã€Junã€Adamã€Cassandraã€Kenã€RyanWã¨ã€ãã®ä»–多数ã®äººé”ã«ã‚ˆã£ã¦ä½œæˆã•ã‚Œã¾ã—ãŸã€‚
+ 第二人生的推出应感谢以下人物的贡献: Philip, Andrew, Tessa, Cory, Frank, James, Doug, Hunter, Richard, John, Eric, Avi, AaronB, AaronY, Ian, Peter, Mark, Robin, Stephen, Tracy, Ryan, Alberto, Haney, Tanya, JimJ, Dan, Ben, Stephanie, Tim, Evan, Catherine, Colin, Chris, Reuben, Charity, Jeska, James, JonHenry, Kelly, Callum, Char, Daniel, DavidF, Don, Jeff, Lauren, Lee, Michael, Ramzi, Vektor, Steve, TomY, Tess, Kona, Brent, Clarissa, PeterP, Jesse, Annette, Cyn, Blue, Ginsu, Jonathan, Karen, Adam, Nova, Deana, Lizzie, Patsy, DavidK, Isaac, Pathfinder, Monroe, Jill, Benny, Altruima, Rheya, Jennifer, Jack, DaveP, Brad, Mick, Babbage, Elisabeth, Brian, Beth, Data, Ethan, Wendy, Nicole, Sky, Jeffrey, Zero, Coffee, Tesla, Kenny, Makiko, Nigel, Teeple, Lucy, Mia, Dee, Guy, Harry, Liana, Branka, Jimbo, Aura, Vasuda, SarahD, bethanye, Torley, Runitai, MikeS, PaulM, Milo, Hermia, JoeM, Melanie, Rejean, DSmith, SMiller, Susan, Jose, DongYun, Justin, Andrey, Syrah, Donovan, Henrik, Nora, Lexie, AC, Donna, ChrisC, Alex, Leyla, Kyle, Mathew, Devin, Joshua, DanC, Jessica, Harmony, Claudia, Tramel, Glenn, Betsy, Fritz, Jun, Adam, Cassandra, Ken, RyanW and many others.
-ã“ã‚ŒãŒã€ç¾åœ¨ã®æœ€é«˜ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã‚ã‚‹ã“ã¨ã‚’ä¿è¨¼ã™ã‚‹ãŸã‚ã«ã€æ”¯æ´ã—ã¦ãã‚ŒãŸæ¬¡ã®å±…ä½è€…ã®æ–¹ã€…ã«åŽšãæ„Ÿè¬ã„ãŸã—ã¾ã™ã€‚
-Kyrah Abattoirã€Icesis Anansiã€Clifton Antonelliã€Nargus Asturiasã€Justizin Austinmerã€Drake Baconã€Bitzer Balderdashã€McWheelie Baldwinã€SuezanneC Baskervilleã€Sweetheart Baskervilleã€Logan Bauerã€Malarthi Behemothã€phoenix Behemothã€Eva Bellambiã€Samgame Bertrandã€Woody Blairã€Tin Blingã€Bibi Bookã€Barney Boomslangã€Eric Boyerã€Chromal Brodskyã€Kerian Buninã€Lara Buninã€BigRick Byrdã€Jillian Callahanã€Hypatia Callistoã€Frans Charmingã€nathalie Christensenã€Francis Chungã€pizzaguy Clutterbuckã€Evo Commonsã€Entity Cosmoã€Grazel Cosmoã€Tiger Crossingã€Fremont Cunninghamã€Jaki Daligdigã€Sugar Darlingã€Todd Davidã€Norman Desmoulinsã€Gxeremio Dimsumã€Happy Dimsumã€Kim Dingoã€Roy Domelaã€Cory Edoã€Delu Elytisã€DBDigital Epsilonã€Leeza Everettã€Garth FairChangã€Snowflake Fairymeadowã€Khamon Fateã€lex Fitzcarraldoã€Kitto Floraã€Angel Fluffyã€CrystalShard Fooã€Raudf Foxã€Govindira Galateaã€Rizpah Galateaã€Tre Gilesã€Gattz Gilmanã€Kex Godelã€Armandi Goodliffeã€Tsu Goodliffeã€Nickolas Goodmanã€Damen Gorillaã€Nytemyst Graceã€Mhaijik Guillaumeã€Gleeb Gupteã€Ebonfire Harbingerã€Bethanee Heaneyã€Jenny Hicksã€Sandling Honeyã€Victoria Jacquesã€Adso Krogstadã€Travis Lambertã€simon Lamethã€Duffy Langdonã€Aaron Levyã€Jade Lilyã€Gwyneth Llewelynã€Lola Lollipopã€Michi Luminã€KaiLastOfTheBrunnenG Macdonaldã€Jesse Malthusã€Herry Maltzã€Seth Mandelbrotã€Raavi Mannã€Shirley Marquezã€Dnate Marsã€Ima Mechaniqueã€Hawk Mendicantã€Mercury Metropolitanã€Haravikk Mistralã€Trent Mondrianã€Nexus Nashã€Seraph Nephilimã€Lewis Nerdã€Aurael Neurocamã€Lex Nevaã€Prokofy Nevaã€Seagel Nevilleã€Kate Nicholasã€Didde Nielsenã€Richard Noonanã€crevan Noriã€Maczter Oddfellowã€vanler Odetsã€Fat Ogreã€Hamncheese Omletã€Strife Onizukaã€Panthar Orlowskiã€Jessica Ornitzã€Ron Overdriveã€OmniCron Overlordã€Dargon Pacerã€Kar Parksã€Eloise Pasteurã€Caliandris Pendragonã€Julianna Pennyfeatherã€Iron Perthã€Shawk Pertweeã€Mera Pixelã€Elle Pollackã€Phoenix Psalteryã€Hank Ramosã€Jon Reeã€Tam Reeã€Zi Reeã€Jon Rollandã€BamBam Sachertorteã€kai Sachertorteã€Mily Sartreã€ice Sempleã€Desmond Shangã€DigiKatt Shawã€Felix Sholokhovã€Rhyph Sommeã€Rain Soothsayerã€Oz Spadeã€squeekachu Spearmannã€Wesley Spenglerã€Belaya Statoskyã€eltee Statoskyã€Khashai Steinbeckã€Draco Steinhardtã€Hope Stilmanã€Ashen Stygianã€Seifert Surfaceã€Gigs Taggartã€Dolmere Talamascaã€JayJay Talamascaã€Becky Tardisã€Fenris Tardisã€Cubey Terraã€Osprey Therianã€Millie Thompsonã€John Toonieã€Charlene Trudeauã€Lyr Tuppakakaã€Indy Turnerã€Luthien Unsungã€Random Unsungã€Huns Valenã€Valdemar Virgoã€Gordon Wendtã€Mike Westerburgã€Wayfinder Wishbringerã€Lee Wormserã€Aimee Xiaã€nimrod Yaffleã€Yiffy Yaffleã€Elle74 Zaftigã€ãã—ã¦ãã®ä»–多数ã®æ–¹ã€…。
+感谢以下居民,他们的帮助ä¿è¯äº†è¿™æ¬¡ç¬¬äºŒäººç”Ÿçš„版本是有å²ä»¥æ¥æœ€å‡ºè‰²çš„: Kyrah Abattoir, Icesis Anansi, Clifton Antonelli, Nargus Asturias, Justizin Austinmer, Drake Bacon, Bitzer Balderdash, McWheelie Baldwin, SuezanneC Baskerville, Sweetheart Baskerville, Logan Bauer, Malarthi Behemoth, phoenix Behemoth, Eva Bellambi, Samgame Bertrand, Woody Blair, Tin Bling, Bibi Book, Barney Boomslang, Eric Boyer, Chromal Brodsky, Kerian Bunin, Lara Bunin, BigRick Byrd, Jillian Callahan, Hypatia Callisto, Frans Charming, nathalie Christensen, Francis Chung, pizzaguy Clutterbuck, Evo Commons, Entity Cosmo, Grazel Cosmo, Tiger Crossing, Fremont Cunningham, Jaki Daligdig, Sugar Darling, Todd David, Norman Desmoulins, Gxeremio Dimsum, Happy Dimsum, Kim Dingo, Roy Domela, Cory Edo, Delu Elytis, DBDigital Epsilon, Leeza Everett, Garth FairChang, Snowflake Fairymeadow, Khamon Fate, lex Fitzcarraldo, Kitto Flora, Angel Fluffy, CrystalShard Foo, Raudf Fox, Govindira Galatea, Rizpah Galatea, Tre Giles, Gattz Gilman, Kex Godel, Armandi Goodliffe, Tsu Goodliffe, Nickolas Goodman, Damen Gorilla, Nytemyst Grace, Mhaijik Guillaume, Gleeb Gupte, Ebonfire Harbinger, Bethanee Heaney, Jenny Hicks, Sandling Honey, Victoria Jacques, Adso Krogstad, Travis Lambert, simon Lameth, Duffy Langdon, Aaron Levy, Jade Lily, Gwyneth Llewelyn, Lola Lollipop, Michi Lumin, KaiLastOfTheBrunnenG Macdonald, Jesse Malthus, Herry Maltz, Seth Mandelbrot, Raavi Mann, Shirley Marquez, Dnate Mars, Ima Mechanique, Hawk Mendicant, Mercury Metropolitan, Haravikk Mistral, Trent Mondrian, Nexus Nash, Seraph Nephilim, Lewis Nerd, Aurael Neurocam, Lex Neva, Prokofy Neva, Seagel Neville, Kate Nicholas, Didde Nielsen, Richard Noonan, crevan Nori, Maczter Oddfellow, vanler Odets, Fat Ogre, Hamncheese Omlet, Strife Onizuka, Panthar Orlowski, Jessica Ornitz, Ron Overdrive, OmniCron Overlord, Dargon Pacer, Kar Parks, Eloise Pasteur, Caliandris Pendragon, Julianna Pennyfeather, Iron Perth, Shawk Pertwee, Mera Pixel, Elle Pollack, Phoenix Psaltery, Hank Ramos, Jon Ree, Tam Ree, Zi Ree, Jon Rolland, BamBam Sachertorte, kai Sachertorte, Mily Sartre, ice Semple, Desmond Shang, DigiKatt Shaw, Felix Sholokhov, Rhyph Somme, Rain Soothsayer, Oz Spade, squeekachu Spearmann, Wesley Spengler, Belaya Statosky, eltee Statosky, Khashai Steinbeck, Draco Steinhardt, Hope Stilman, Ashen Stygian, Seifert Surface, Gigs Taggart, Dolmere Talamasca, JayJay Talamasca, Becky Tardis, Fenris Tardis, Cubey Terra, Osprey Therian, Millie Thompson, John Toonie, Charlene Trudeau, Lyr Tuppakaka, Indy Turner, Luthien Unsung, Random Unsung, Huns Valen, Valdemar Virgo, Gordon Wendt, Mike Westerburg, Wayfinder Wishbringer, Lee Wormser, Aimee Xia, nimrod Yaffle, Yiffy Yaffle, Elle74 Zaftig and many others.
-APR Copyright (C) 2000-2004 The Apache Software Foundation
-Cg Copyright (C) 2002, NVIDIA Corporationa.
-cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
+
+APR Copyright (C) 2000-2004 The Apache Software Foundation
+Cg Copyright (C) 2002, NVIDIA Corporationa.
+cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org).
GL Copyright (C) 1999-2004 Brian Paul.
@@ -20,10 +20,11 @@ OpenSSL Copyright (C) 1998-2002 The OpenSSL Project.
SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
-zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler.
+zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler.
+
+All rights reserved. 查看licenses.txt获å–细节.
-ç„¡æ–転写ã€è¤‡è£½ã€è»¢è¼‰ã‚’ç¦ã˜ã¾ã™ã€‚詳細㯠licenses.txt ã‚’ã”覧ãã ã•ã„。
-ã“ã‚Œã¯èª¤ä½œå‹•ã§ã¯ãªãã€ç‰¹å¾´ã§ã™ã€‚
+è¿™ä¸æ˜¯ä¸€æ¬¡æ•…障,而是一个特性.
diff --git a/linden/indra/newview/skins/xui/zh/floater_about_land.xml b/linden/indra/newview/skins/xui/zh/floater_about_land.xml
index 8878028..930d8ae 100644
--- a/linden/indra/newview/skins/xui/zh/floater_about_land.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_about_land.xml
@@ -20,43 +20,43 @@
+ tool_tip="一个社团官员å¯ä»¥è½¬è®©è¿™å—土地至社团,所以它将被社团和目å‰çš„土地分é…情况支æŒã€‚" />
+ tool_tip="å¦‚æžœä½ æ˜¯æ‰€é€‰ç¤¾å›¢ä¸çš„å®˜å‘˜ï¼Œåˆ™ä½ å¯èƒ½åªèƒ½è½¬è®©åœŸåœ°." />
+ tool_tip="当土地被转让给社团时, å‰ä¸€ä¸ªä¸»äººè´¡çŒ®è¶³å¤Ÿçš„土地é…置以支æŒåœŸåœ°çš„è¿è¡Œ." />
å¾…å”®:
- 販売対象外
+ éžå–状æ€
- ä¾¡æ ¼ï¼š L$[PRICE].
+ ä»·æ ¼: L$[PRICE].
-
+
- 販売先:[BUYER]
+ 出售给: [BUYER]
- 販売ã«å«ã¾ã‚Œã‚‹ã‚ªãƒ–ジェクト
+ 包括代售状æ€çš„东东.
- 販売ã«å«ã¾ã‚Œãªã„オブジェクト
+ ä¸åŒ…括代售状æ€ä¸‹çš„东东.
-
+
声明:
- 2006å¹´8月15æ—¥ç«æ›œæ—¥13:47:25
+ 星期二 八月15日 13:47:25 2006年
- エリア:
+ é¢ç§¯ï¼š
- 4048平方メートル
+ 4048平方米.
交通:
@@ -68,60 +68,60 @@
+ tool_tip="通行è¯æä¾›ç»™ä½ ä¸€ä¸ªæš‚æ—¶é€šå¾€è¿™å—土地的通é“。" />
+ tool_tip="土地必需有主人, 设定内容以åŠä¸å¯è¢«æ‹å–。" />
- æ–°è¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã¿
+ ä»…é™æ–°ç”¨æˆ·
- 誰ã§ã‚‚
+ 任何人
-
+
- 最後ã®æ›´æ–°1969å¹´12月31日水曜日16:00:00
+ 上次修改时间 星期三12 月3 1日 16:00:00 1969年
区域:
- Leyla
+ leyla
ç§äººé¢†åœ°:
- メイン・ランド
+ 大陆
- ä¸å‹•ç”£ã‚ªãƒ¼ãƒŠãƒ¼ï¼š
+ ä¸åŠ¨äº§ä¸»äºº:
(æ— )
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€å†è²©ãŒã§ããªã„å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚
+ è¿™å—区域内被è´ä¹°çš„土地å¯èƒ½ä¸èƒ½è¢«é‡æ–°å‡ºå”®ã€‚
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€çµ±åˆï¼å†åˆ†å‰²ãŒã§ããªã„å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚
+ è¿™å—区域内被è´ä¹°çš„土地å¯èƒ½ä¸èƒ½è¢«è¿žæŽ¥/划分。
- 本ä¸å‹•ç”£ã«ã¯ã€ç´„款ã®æä¾›ãŒã‚ã‚Šã¾ã›ã‚“。
+ è¿™å—ä¸åŠ¨äº§æ²¡æœ‰æ供任何契约åˆåŒã€‚
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€å†è²©ãŒã§ãã¾ã™ã€‚
+ è¿™å—区域内被è´ä¹°çš„土地å¯ä»¥è¢«é‡æ–°å‡ºå”®.
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€å†è²©ãŒã§ããªã„å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚
+ è¿™å—区域内被è´ä¹°çš„土地å¯èƒ½ä¸èƒ½è¢«é‡æ–°å‡ºå”®ã€‚
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€çµ±åˆã€ã¾ãŸã¯å†åˆ†å‰²ãŒã§ãã¾ã™ã€‚
+ è¿™å—区域内被è´ä¹°çš„土地å¯ä»¥è¢«è¿žæŽ¥æˆ–者被划分。
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€çµ±åˆã€ã¾ãŸã¯å†åˆ†å‰²ãŒã§ããªã„å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚
+ è¿™å—区域内被è´ä¹°çš„土地å¯èƒ½ä¸èƒ½è¢«è”系或者被划分。
@@ -129,7 +129,7 @@
模拟器简å•ç”¨æ³•:
- 14055ã®å†…0(14055利用å¯èƒ½ï¼‰
+ 0个,总数为14055 (14055个有效)
原始土地支柱:
@@ -151,7 +151,7 @@
+ tool_tip="将东东归还其主人." />
转入社团状æ€:
@@ -160,7 +160,7 @@
+ tool_tip="将东东归还其主人." />
为其他人所有:
@@ -169,9 +169,9 @@
+ tool_tip="将东东归还其主人." />
- é¸æŠžæ¸ˆã¿ï¼æ±ºå®šæ¸ˆã¿ï¼š
+ 已选的/å上去:
0
@@ -185,63 +185,60 @@
-
-
-
+
+
+
å…许其他居民去:
-
+
-
+
-
+
土地选项:
-
+
ä»»æ„分类
- Lindenãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³
+ 林登家的地点
æˆäºº
- アート & カルãƒãƒ£ãƒ¼
+ 艺术和文化
- ビジãƒã‚¹
+ 生æ„
教育的
- ゲーãƒ
+ åšå½©æ¸¸æˆ
- 仲間
+ 临时ä½æ‰€
- æ–°å‚者ã«å¥½æ„çš„
+ å‹å¥½çš„åˆæ¥è€…
- 公園 & 自然
+ å…¬å›å’Œå¤§è‡ªç„¶
- ä½å®…用
+ 土木建ç‘
è´ç‰©
@@ -251,22 +248,21 @@
+ tool_tip="å°†ä½ åœŸåœ°çš„ä¿¡æ¯å‘布到网络上去." />
+ tool_tip="ä½ çš„åœŸåœ°ä¿¡æ¯è¢«è®¤ä¸ºå¸¦æœ‰æˆäººå†…容." />
å¿«ç…§:
-
+
- ç€åœ°ç‚¹ï¼šï¼ˆãªã—)
+ ç€é™†ç‚¹æ•°: (none)
+ tool_tip="è®¾ç½®ä½ çš„åŒ–èº«çš„ç™»é™†åœ°ç‚¹ã€‚æ¤åœ°ç‚¹å¿…须在æ¤å—土地上。" />
+ tool_tip="清除登陆地点上的障ç¢." />
é—ªç”µä¼ é€è·¯çº¿:
@@ -295,21 +291,20 @@
替æ¢è¯¥æè´¨:
-
+
内容æ¥è‡ªURL :
+ tool_tip="检测æ¤é¡¹å°†ä¼šå¯¹æ¤å°å—土地的满æ„度自动缩å‡/å¢žåŠ ã€‚å®ƒå¯ä»¥è½»å¾®å‡æ…¢å’Œé™ä½Žå¯è§†æ•ˆæžœï¼Œä½†ä¸ä¼šè¦æ±‚其他的æ质缩放或排列。" />
é™åˆ¶è¿›å…¥è¯¥åœŸåœ°çš„通é“:
-
-
+
+
@@ -317,20 +312,15 @@
-
+
- 支払ã„状æ³ã«ã‚ˆã‚Šæ‹’å¦ï¼š
-
-
-
-
+ 被支付情况信æ¯æ‹’ç»:
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/floater_account_history.xml b/linden/indra/newview/skins/xui/zh/floater_account_history.xml
new file mode 100644
index 0000000..00f1aeb
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/floater_account_history.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/floater_animation_preview.xml b/linden/indra/newview/skins/xui/zh/floater_animation_preview.xml
index 3e52787..4133242 100644
--- a/linden/indra/newview/skins/xui/zh/floater_animation_preview.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_animation_preview.xml
@@ -7,7 +7,7 @@
æè¿°:
+ tool_tip="å¯åœ¨ä¸é¡¾åŠæ¤åŠ¨ç”»çš„模å¼ä¸‹æŽ§åˆ¶å…¶å®ƒåŠ¨ç”»ã€‚" />
预览
@@ -26,12 +26,11 @@
起飞
-
+
+ tool_tip="在动画设置一点用以返还循环到æ¤ç‚¹ã€‚" />
+ tool_tip="在动画设置一点用以åœæ¢å¾ªçŽ¯ã€‚" />
手势
@@ -144,13 +143,11 @@
+ tool_tip="动画æ¸å…¥çš„所需时间(秒)" />
-
-
+ tool_tip="动画æ¸å‡ºçš„所需时间(秒)" />
+
+
ä¸èƒ½è¯»å–动画文件。
@@ -158,5 +155,5 @@
推èPoser 4产生的BVHæ ¼å¼æ–‡ä»¶ã€‚
-
+
diff --git a/linden/indra/newview/skins/xui/zh/floater_auction.xml b/linden/indra/newview/skins/xui/zh/floater_auction.xml
index f4362a7..79a24f4 100644
--- a/linden/indra/newview/skins/xui/zh/floater_auction.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_auction.xml
@@ -12,6 +12,6 @@
- ã™ã§ã«è²©å£²å¯¾è±¡ã¨ãªã£ã¦ã„る区画ã¯ã€ç«¶å£²ã«ã‹ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。
+ ä½ ä¸èƒ½æ‹å–å·²ç»å¾…售的土地。
diff --git a/linden/indra/newview/skins/xui/zh/floater_avatar_picker.xml b/linden/indra/newview/skins/xui/zh/floater_avatar_picker.xml
index 1c28569..d6172f6 100644
--- a/linden/indra/newview/skins/xui/zh/floater_avatar_picker.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_avatar_picker.xml
@@ -1,15 +1,15 @@
-
+
- 人åã®ä¸€éƒ¨ã‚’記入ã—ã¦ãã ã•ã„:
+ 键入这个人的部分姓å:
- ã¾ãŸã¯ã€ã‚³ãƒ¼ãƒªãƒ³ã‚°ã‚«ãƒ¼ãƒ‰ã‚’é¸æŠžï¼š
+ æˆ–è€…é€‰æ‹©ä¸€å¼ é€šè¯å¡:
- 『[TEXT]ã€ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ
+ '[TEXT]'没有找到
diff --git a/linden/indra/newview/skins/xui/zh/floater_avatar_textures.xml b/linden/indra/newview/skins/xui/zh/floater_avatar_textures.xml
index ebbcd32..bdb4e75 100644
--- a/linden/indra/newview/skins/xui/zh/floater_avatar_textures.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_avatar_textures.xml
@@ -6,25 +6,25 @@
Composite Textures
-
-
-
+
+
+
-
+
-
-
-
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/floater_bumps.xml b/linden/indra/newview/skins/xui/zh/floater_bumps.xml
index 1f06f93..b4d265a 100644
--- a/linden/indra/newview/skins/xui/zh/floater_bumps.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_bumps.xml
@@ -1,21 +1,21 @@
-
+
- 検知無ã—
+ 没有监测到
- [TIME][FIRST][LAST]ãŒã€ã‚ãªãŸã«ã¶ã¤ã‹ã‚Šã¾ã—ãŸã€‚
+ [TIME] [FIRST] [LAST] 抛弃了ä½
- [TIME][FIRST][LAST]ãŒã€ã‚¹ã‚¯ãƒªãƒ—トã§ã‚ãªãŸã‚’プッシュã—ã¾ã—ãŸã€‚
+ [TIME] [FIRST] [LAST]用脚本推了ä½
- [TIME][FIRST][LAST]ãŒã€ã‚ªãƒ–ジェクトã§ã‚ãªãŸã‚’打ã¡ã¾ã—ãŸã€‚
+ [TIME] [FIRST] [LAST] 用一件东东敲打了ä½
- [TIME][FIRST][LAST]ãŒã€ã‚¹ã‚¯ãƒªãƒ—トをå«ã‚€ã‚ªãƒ–ジェクトã§ã‚ãªãŸã‚’打ã¡ã¾ã—ãŸã€‚
+ [TIME] [FIRST] [LAST]用一件脚本东东敲打了ä½
- [TIME][FIRST][LAST]ãŒã€ç‰©ç†çš„オブジェクトã§ã‚ãªãŸã‚’打ã¡ã¾ã—ãŸã€‚
+ [TIME] [FIRST] [LAST] 用一件物ç†ä¸œä¸œæ•²æ‰“了ä½
diff --git a/linden/indra/newview/skins/xui/zh/floater_buy_contents.xml b/linden/indra/newview/skins/xui/zh/floater_buy_contents.xml
index ec1f3d8..079f792 100644
--- a/linden/indra/newview/skins/xui/zh/floater_buy_contents.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_buy_contents.xml
@@ -1,10 +1,10 @@
- [NAME]å«ã‚€ã®ã¯ï¼š
+ [NAME]包括:
- [NAME]ã‹ã‚‰L$[AMOUNT]を購入ã—ã¾ã™ã‹ï¼Ÿ
+ è´ä¹°L$[AMOUNT]于[NAME]?
diff --git a/linden/indra/newview/skins/xui/zh/floater_buy_currency.xml b/linden/indra/newview/skins/xui/zh/floater_buy_currency.xml
index c38712e..bc8b13a 100644
--- a/linden/indra/newview/skins/xui/zh/floater_buy_currency.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_buy_currency.xml
@@ -4,23 +4,23 @@
è´ä¹°çŽ°é’ž:
- ç¾åœ¨è³¼å…¥ä¸å¯ï¼š
+ çŽ°åœ¨æ— æ³•è´ä¹°:
- ã•ã‚‰ã«é€šè²¨ãŒå¿…è¦ã§ã™ï¼š
+ ä½ éœ€è¦æ›´å¤šçš„è´§å¸:
出错
- LindeXã¨æŽ¥è§¦ä¸â€¦
+ è”系林登X...
- 為替交æ›ä¸Šã§L$を購入
+ è´ä¹°L$按照LindeXè´§å¸å…‘æ¢æ¯”率
- [NAME]L$[PRICE]
+ [NAME] L$ [PRICE]
è´ä¹°L$
@@ -29,32 +29,32 @@
1234
- 約US$[USD]
+ 需è¦å¤§æ¦‚ US$ [USD]
- ã‚ãªãŸã«ã‚ã‚‹ã®ã¯ã€
+ ä½ ç›®å‰æœ‰
- L$[AMT]
+ L$ [AMT]
ä½ æ£åœ¨è´ä¹°
- L$[AMT]
+ L$ [AMT]
- ã‚ãªãŸã®æ®‹é«˜ã¯ã€€
+ ä½ çš„å¸æˆ·ç»“余是
- L$[AMT]
+ L$ [AMT]
请确认åªè´ä¹°çŽ°é’ž.
ä½ éœ€è¦é‡è¯•è¯¥æ“作。
- å分ãªé€šè²¨ã‚’購入ã—ã¦ã„ã¾ã›ã‚“。購入金é¡ã‚’増やã—ã¦ãã ã•ã„。
+ ä½ æ²¡æœ‰è´ä¹°è¶³å¤Ÿçš„è´§å¸ï¼Œä¸è¶³ä»¥è´ä¹°ã€‚
diff --git a/linden/indra/newview/skins/xui/zh/floater_buy_land.xml b/linden/indra/newview/skins/xui/zh/floater_buy_land.xml
index 3e3cd24..d3b53c9 100644
--- a/linden/indra/newview/skins/xui/zh/floater_buy_land.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_buy_land.xml
@@ -13,41 +13,41 @@
(未知)
- ä¸å‹•ç”£ã‚ªãƒ¼ãƒŠãƒ¼ï¼š
+ ä¸åŠ¨äº§ä¸»äºº:
(未知)
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ï¼š
+ 在这å—区域内è´ä¹°åœŸåœ°:
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€å†è²©ã§ãã‚‹ã‹ã©ã†ã‹ã‚ã‹ã‚Šã¾ã›ã‚“。
+ è¿™å—区域内被è´ä¹°çš„土地å¯èƒ½å¯ä»¥è¢«é‡æ–°å‡ºå”®ï¼Œä¹Ÿå¯èƒ½ä¸èƒ½è¢«é‡æ–°å‡ºå”®ã€‚
- çµ±åˆã¾ãŸã¯å†åˆ†å‰²ã•ã‚Œã‚‹å¯èƒ½æ€§ã‚‚ã€ã•ã‚Œãªã„å¯èƒ½æ€§ã‚‚ã‚ã‚Šã¾ã™ã€‚
+ å¯èƒ½å¯ä»¥æˆ–å¯èƒ½ä¸å¯ä»¥è¢«è¿žæŽ¥æˆ–划分
- ä¸å‹•ç”£ç´„款ã«åŒæ„ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ï¼š
+ ä½ å¿…é¡»åŒæ„这项ä¸åŠ¨äº§å¥‘约åˆåŒ:
请ç‰å¾…...
-
+
- 区画:
+ 土地:
Scotopteryx 138,204
- è¦æ¨¡ï¼š
+ 尺寸:
1024 平方米.
- ä¾¡æ ¼ï¼š
+ ä»·æ ¼:
东东在内共售L$ 1500
@@ -67,13 +67,13 @@
- 月払ã„ã§ã€US$9.95ï¼æœˆ
+ $9.95美元/月, 月付
- 三ヶ月払ã„ã§ã€US$7.50ï¼æœˆ
+ $7.50美元/月, å£ä»˜
- 年払ã„ã§ã€US$6ï¼æœˆ
+ 6.00美元/月, 年付
@@ -105,54 +105,52 @@
- å†è²©å¯èƒ½
+ å¯èƒ½è¢«é‡æ–°å‡ºå”®.
- å†è²©ä¸å¯èƒ½
+ å¯èƒ½ä¸ä¼šè¢«é‡æ–°å‡ºå”®.
- çµ±åˆï¼å†åˆ†å‰²å¯èƒ½
+ å¯èƒ½è¢«è¿žæŽ¥æˆ–划分.
- çµ±åˆï¼å†åˆ†å‰²ä¸å¯èƒ½
+ å¯èƒ½ä¸ä¼šè¢«è¿žæŽ¥æˆ–划分.
- ã‚ãªãŸã«ã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªã‚°ãƒ«ãƒ¼ãƒ—ã®ãŸã‚ã«åœŸåœ°ã‚’購入ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ä½ æ²¡æœ‰ä¸ºç›®å‰ä½ 的社团è´ä¹°åœŸåœ°çš„许å¯è¯ã€‚
- 土地ãŒé¸æŠžã•ã‚Œã¦ã„ãªã„
+ 没有选择任何土地
- 複数ã®ç•°ãªã£ãŸåŒºç”»ã‚’é¸æŠžã—ã¾ã—ãŸã€‚ã“れよりå°ã•ãªã‚¨ãƒªã‚¢ã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ 选择了多ç§ä¸åŒç±»åž‹çš„土地。请å°è¯•é€‰æ‹©ä¸€å—较å°çš„土地。
- ã‚ãªãŸã«ã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªã‚°ãƒ«ãƒ¼ãƒ—ã®ãŸã‚ã«åœŸåœ°ã‚’購入ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ä½ æ²¡æœ‰ä¸ºç›®å‰ä½ 的社团è´ä¹°åœŸåœ°çš„许å¯è¯ã€‚
- é¸æŠžã•ã‚ŒãŸåŒºç”»ã¯ã€è²©å£²å¯¾è±¡ã§ã¯ã‚ã‚Šã¾ã›ã‚“。
+ 所选择的土地ä¸åœ¨å¾…售状æ€.
- グループã¯ã™ã§ã«ãã®åŒºç”»ã‚’所有ã—ã¦ã„ã¾ã™ã€‚
+ 这个社团已ç»æ‹¥æœ‰äº†è¿™å—土地.
- ã‚ãªãŸã¯ã€ã™ã§ã«åŒºç”»ã‚’所有ã—ã¦ã„ã¾ã™ã€‚
+ ä½ å·²ç»æ‹¥æœ‰äº†è¿™å—土地.
- é¸æŠžã•ã‚ŒãŸåŒºç”»ã¯ã€ä»–ã®å›£ä½“ã¸ã®è²©å£²ãŒæ±ºå®šã•ã‚Œã¦ã„ã¾ã™ã€‚
+ 所选的土地被设置æˆè½¬å–至其他社团。
- é¸æŠžã•ã‚ŒãŸã‚¨ãƒªã‚¢ã«ã¯ã€å…¬å…±ã®åœŸåœ°ã¯ã‚ã‚Šã¾ã›ã‚“。
+ 所选ä¸çš„土地ä¸æ²¡æœ‰å…¬å…±åŒºåŸŸ.
- ä»–ã®ä½¿ç”¨è€…ã«æ‰€æœ‰ã•ã‚ŒãŸåœŸåœ°ãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã™ã€‚ã“れよりå°ã•ãªã‚¨ãƒªã‚¢ã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ ä½ é€‰æ‹©äº†ä¸€å—由其他人å 有的土地.请å°è¯•é€‰æ‹©ä¸€å—较å°çš„土地.
- 本土地ã¯åˆã‚ã¦åœŸåœ°è³¼å…¥ã‚’ã™ã‚‹äººã®ãŸã‚ã«ç¢ºä¿ã•ã‚Œã¦ã„ã¾ã™ã€‚
-グループã®ãŸã‚ã«è³¼å…¥ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
+ è¿™å—土地将为第一次è´ä¹°è€…ä¿ç•™ã€‚ä½ ä¸èƒ½ä¸ºç¤¾å›¢è´ä¹°å®ƒã€‚
- 本土地ã¯åˆã‚ã¦åœŸåœ°è³¼å…¥ã‚’ã™ã‚‹äººã®ãŸã‚ã«ç¢ºä¿ã•ã‚Œã¦ã„ã¾ã™ã€‚
-ã‚ãªãŸã¯ã€ã™ã§ã«åœŸåœ°ã‚’所有ã—ã¦ã„ã¾ã™ã€‚
+ è¿™å—土地将为第一次è´ä¹°è€…ä¿ç•™ã€‚ä½ å·²ç»æ‹¥æœ‰è‡ªå·±çš„土地了。
Processing your purchase...
@@ -160,72 +158,73 @@
(This may take a minute or two.)
- åœŸåœ°è³¼å…¥æƒ…å ±ã‚’å…¥æ‰‹ä¸ã«ã€ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚
+ 在获å–土地è´ä¹°ä¿¡æ¯çš„时候出现错误。
è´ä¹°è¯¥åœŸåœ°å°†ä¼š:
- グループã®ãŸã‚ã®åœŸåœ°ã‚’購入ã™ã‚‹
+ è´ä¹°åœŸåœ°èµ 与给社团:
- ç¾åœ¨è³¼å…¥ä¸å¯ï¼š
+ çŽ°åœ¨æ— æ³•è´ä¹°:
- 販売対象外:
+ éžå–å“:
- 一切必è¦ãªã—
+ 一个都ä¸éœ€è¦
- 土地を所有ã™ã‚‹ã«ã¯ã€ã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’アップグレードã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+ ä½ çš„å¸æˆ·å¿…须被å‡çº§æ‰èƒ½æ‹¥æœ‰è‡ªå·±çš„土地
- ã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¯ã€åœŸåœ°æ‰€æœ‰ãŒå¯èƒ½ã§ã™ã€‚
+ ä½ çš„å¸æˆ·ä¸èƒ½æ‹¥æœ‰åœŸåœ°ã€‚
- ã“ã‚Œã¯ã€ã‚ãªãŸã®åˆã‚ã¦ã®åœŸåœ°è³¼å…¥ã«ãªã‚Šã€ã€Žãƒ•ã‚¡ãƒ¼ã‚¹ãƒˆãƒ»ãƒ©ãƒ³ãƒ‰ã€åŒºç”»ã‚’購入ã§ãる唯一ã®æ©Ÿä¼šã§ã™ã€‚
+ è¿™æ˜¯ä½ ç¬¬ä¸€æ¬¡è´ä¹°åœŸåœ°ï¼Œå¹¶ä¸”æ˜¯ä½ å”¯ä¸€ä¸€æ¬¡èƒ½å¤Ÿè´ä¹°'第一å—土地'的机会.
- ã“ã‚Œã¯ã€ã‚ãªãŸã®åˆã‚ã¦ã®åœŸåœ°è³¼å…¥ã«ãªã‚Šã¾ã™ãŒã€ã“ã“ã¯åˆã‚ã¦ã®è³¼å…¥è€…ã®ãŸã‚ã«ç¢ºä¿ã•ã‚Œã¦ã„る区画ã§ã¯ã‚ã‚Šã¾ã›ã‚“。より安ã„『ファースト・ランドã€åŒºç”»ã‚’ã€æ¤œç´¢æ©Ÿèƒ½ã§æŽ¢ã™ã“ã¨ãŒã§ãã¾ã™ã€‚
+ è¿™æ˜¯ä½ ç¬¬ä¸€æ¬¡è´ä¹°åœŸåœ°ï¼Œä½†ä½ è´ä¹°çš„ä¸æ˜¯ä¸ºç¬¬ä¸€æ¬¡è´ä¹°åœŸåœ°çš„用户ä¿ç•™çš„åœŸåœ°ã€‚ä½ å¯ä»¥ä½¿ç”¨æŸ¥è¯¢åŠŸèƒ½ï¼Œå®šä½ä¸€å—更便宜的 '第一å—土地'的代售土地.
- ã‚ãªãŸã¯[BUYER]平方メートルã®åœŸåœ°ã‚’ä¿æŒã—ã¦ã„ã¾ã™ã€‚
+ ä½ æ‹¥æœ‰[BUYER]平方米的土地.
- ã“ã®åœŸåœ°ä»£ã¨ã—ã¦ã€[SELLER]ã«L$[AMOUNT]を支払ã†
+ 支付L$ [AMOUNT]至[SELLER]è´ä¹°è¿™å—土地
Buy L$ [AMOUNT] for approx. US$ [AMOUNT2] ,
- ã“ã®åŒºç”»ã¯[AMOUNT]平方メートルã§ã™ã€‚
+ è¿™å—土地的é¢ç§¯ä¸º[AMOUNT]平方米。
- ã“ã®åœŸåœ°ã¯ä¸€ç‰åœ°ãªãŸã‚ã€[AMOUNT]平方メートルã®ä¾¡æ ¼ã«ãªã‚Šã¾ã™ã€‚
+ è¿™å—土地是é¢å¤–奖励, 而且现在åªæŒ‰[AMOUNT]平方米出售。
- ã“ã®åœŸåœ°ã¯å€¤ä¸‹ã’ã•ã‚Œã€[AMOUNT]平方メートルã®ä¾¡æ ¼ã«ãªã‚Šã¾ã™ã€‚
+ è¿™å—土地æ£åœ¨æ‰“折, 而且现在åªæŒ‰[AMOUNT]平方米出售。
- [AMOUNT]平方メートルã¯ã€[AMOUNT2]オブジェクトをサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚
+ [AMOUNT]平方米
+s支æŒæ•°é‡ä¸º[AMOUNT2]的东东
- オブジェクトã¨å…±ã«è²©å£²ã•ã‚ŒãŸ
+ 和东东一起出售
- グループ[GROUP]ã¯è³¼å…¥å®Œäº†å‰ã«ã€æœ¬åŒºç”»ã‚’ã‚«ãƒãƒ¼ã™ã‚‹ã®ã«å分ãªè³‡é‡‘æä¾›ã¨åœŸåœ°åˆ©ç”¨ã‚¯ãƒ¬ã‚¸ãƒƒãƒˆã‚’å¿…è¦ã¨ã—ã¾ã™ã€‚
+ 在这次è´ä¹°å®Œæˆä¹‹å‰ï¼Œç¤¾å›¢[GROUP]将需è¦è¶³å¤Ÿçš„被贡献的土地所用的信用é¢åº¦ï¼Œæ¥è¦†ç›–这片土地。
- ã‚ãªãŸã¯L$[AMOUNT]を所有ã—ã¦ã„ã‚‹ãŸã‚ã€ã“ã®åœŸåœ°ã®è³¼å…¥ã«ã¯å分ã§ã™ã€‚
+ ä½ æœ‰L$ [AMOUNT],这些钱足够è´ä¹°è¿™å—土地。
- ã‚ãªãŸã¯L$[AMOUNT]ã—ã‹æ‰€æœ‰ã—ã¦ãŠã‚‰ãšã€ã•ã‚‰ã«L$[AMOUNT2]ãŒå¿…è¦ã§ã™ã€‚
+ ä½ åªæœ‰L$ [AMOUNT],ä½ è¿˜éœ€è¦ L$ [AMOUNT2] ã€.
- 購入後ã€ã‚ãªãŸã®æ®‹é¡ã¯L$[AMOUNT]ã«ãªã‚Šã¾ã™ã€‚
+ æ¤é¡¹æ¶ˆè´¹åŽ,ä½ è¿˜ä¼šæœ‰L$ [AMOUNT]结余.
- ã“ã®åœŸåœ°ã‚’入手ã™ã‚‹ã«ã¯ã€å°‘ãªãã¨ã‚‚L$[AMOUNT]を購入ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+ ä½ éœ€è¦è´ä¹°è‡³å°‘ L$ [AMOUNT]æ¥è´ä¹°è¿™å—土地。
diff --git a/linden/indra/newview/skins/xui/zh/floater_buy_object.xml b/linden/indra/newview/skins/xui/zh/floater_buy_object.xml
index 7246d8f..54c829d 100644
--- a/linden/indra/newview/skins/xui/zh/floater_buy_object.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_buy_object.xml
@@ -4,7 +4,7 @@
以åŠå®ƒçš„内容:
- [NAME]ã‹ã‚‰L$[AMOUNT]を購入ã—ã¾ã™ã‹ï¼Ÿ
+ è´ä¹°L$[AMOUNT]于[NAME]?
diff --git a/linden/indra/newview/skins/xui/zh/floater_customize.xml b/linden/indra/newview/skins/xui/zh/floater_customize.xml
index f70409c..e25f38f 100644
--- a/linden/indra/newview/skins/xui/zh/floater_customize.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_customize.xml
@@ -1,44 +1,44 @@
-
+
-
-
+
-
-
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
[DESC]
- [DESC]:修æ£ä¸å¯èƒ½
+ [DESC]:ä¸èƒ½ä¿®é¥°
- [DESC]:ãƒãƒ¼ãƒ‰ä¸â€¦
+ [DESC]: 载入ä¸...
- [DESC]:装ç€ã•ã‚Œãªã„
+ [DESC]: 没有被穿ç€
- [PATH]ã«å˜åœ¨
+ ä½äºŽ[PATH]
- ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã€æ–°ã—ã„体型をアãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚æ–°ãŸã«ä¸€ã‹ã‚‰ä½œè£½ã—ã¦ã€è£…ç€ã™ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚
+ è¦ä½¿ç”¨æ–°çš„ä½“åž‹ï¼Œéœ€ä»Žä½ çš„åº“å˜ä¸æ‹–æ‹½ä¸€ä¸ªæ–°çš„ä½“åž‹è‡³ä½ çš„åŒ–èº«ä¸Šã€‚å¦å¤–çš„ï¼Œä½ ä¹Ÿå¯ä»¥ä»Žåº•ç¨¿ä¸åˆ›å»ºä¸€ä¸ªæ–°çš„并使用。
- ã‚ãªãŸã«ã¯è£…ç€å¯èƒ½ã«ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ä½ æ²¡æœ‰ä¿®æ”¹è¿™ä»¶æœé¥°çš„许å¯è¯ã€‚
@@ -49,416 +49,405 @@
-
-
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
[DESC]
- [DESC]:修æ£ä¸å¯èƒ½
+ [DESC]:ä¸èƒ½ä¿®é¥°
- [DESC]:ãƒãƒ¼ãƒ‰ä¸â€¦
+ [DESC]: 载入ä¸...
- [DESC]:装ç€ã•ã‚Œãªã„
+ [DESC]: 没有被穿ç€
- [PATH]ã«å˜åœ¨
+ ä½äºŽ[PATH]
- ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã€æ–°ã—ã„スã‚ンをアãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚æ–°ãŸã«ä¸€ã‹ã‚‰ä½œè£½ã—ã¦ã€è£…ç€ã™ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚
+ è¦ä½¿ç”¨æ–°çš„çš®è‚¤ï¼Œéœ€ä»Žä½ çš„åº“å˜ä¸æ‹–æ‹½ä¸€ä¸ªæ–°çš„çš®è‚¤è‡³ä½ çš„åŒ–èº«ä¸Šã€‚å¦å¤–çš„ï¼Œä½ ä¹Ÿå¯ä»¥ä»Žåº•ç¨¿ä¸åˆ›å»ºä¸€ä¸ªæ–°çš„并使用。
- ã‚ãªãŸã«ã¯è£…ç€å¯èƒ½ã«ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
-
-
-
-
+ ä½ æ²¡æœ‰ä¿®æ”¹è¿™ä»¶æœé¥°çš„许å¯è¯ã€‚
+
+
+
+
-
-
+
-
-
+
+
-
+
-
-
+
+
[DESC]
- [DESC]:修æ£ä¸å¯èƒ½
+ [DESC]:ä¸èƒ½ä¿®é¥°
- [DESC]:ãƒãƒ¼ãƒ‰ä¸â€¦
+ [DESC]: 载入ä¸...
- [DESC]:装ç€ã•ã‚Œãªã„
+ [DESC]: 没有被穿ç€
- [PATH]ã«å˜åœ¨
+ ä½äºŽ[PATH]
- ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã€æ–°ã—ã„髪型をアãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚æ–°ãŸã«ä¸€ã‹ã‚‰ä½œè£½ã—ã¦ã€è£…ç€ã™ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚
+ è¦ä½¿ç”¨æ–°çš„å‘åž‹ï¼Œéœ€ä»Žä½ çš„åº“å˜ä¸æ‹–拽一个新的å‘åž‹è‡³ä½ çš„åŒ–èº«ä¸Šã€‚å¦å¤–çš„ï¼Œä½ ä¹Ÿå¯ä»¥ä»Žåº•ç¨¿ä¸åˆ›å»ºä¸€ä¸ªæ–°çš„并使用。
- ã‚ãªãŸã«ã¯è£…ç€å¯èƒ½ã«ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ä½ æ²¡æœ‰ä¿®æ”¹è¿™ä»¶æœé¥°çš„许å¯è¯ã€‚
-
+
-
-
+
-
-
-
+
+
+
[DESC]
- [DESC]:修æ£ä¸å¯èƒ½
+ [DESC]:ä¸èƒ½ä¿®é¥°
- [DESC]:ãƒãƒ¼ãƒ‰ä¸â€¦
+ [DESC]: 载入ä¸...
- [DESC]:装ç€ã•ã‚Œãªã„
+ [DESC]: 没有被穿ç€
- [PATH]ã«å˜åœ¨
+ ä½äºŽ[PATH]
- æ–°ã—ã„眼をアãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚æ–°ãŸã«ä¸€ã‹ã‚‰ä½œè£½ã—ã¦ã€è£…ç€ã™ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚
+ è¦ä½¿ç”¨æ–°çš„眼ç›ï¼Œéœ€ä»Žä½ 的库å˜ä¸æ‹–拽一个新的眼ç›è‡³ä½ 的化身上。å¦å¤–çš„ï¼Œä½ ä¹Ÿå¯ä»¥ä»Žåº•ç¨¿ä¸åˆ›å»ºä¸€ä¸ªæ–°çš„并使用。
- ã‚ãªãŸã«ã¯è£…ç€å¯èƒ½ã«ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ä½ æ²¡æœ‰ä¿®æ”¹è¿™ä»¶æœé¥°çš„许å¯è¯ã€‚
-
+
-
-
+
+
-
-
+
+
[DESC]
- [DESC]:修æ£ä¸å¯èƒ½
+ [DESC]:ä¸èƒ½ä¿®é¥°
- [DESC]:ãƒãƒ¼ãƒ‰ä¸â€¦
+ [DESC]: 载入ä¸...
- [DESC]:装ç€ã•ã‚Œãªã„
+ [DESC]: 没有被穿ç€
- [PATH]ã«å˜åœ¨
+ ä½äºŽ[PATH]
- ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã€æ–°ã—ã„シャツをアãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚æ–°ãŸã«ä¸€ã‹ã‚‰ä½œè£½ã—ã¦ã€è£…ç€ã™ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚
+ è¦ä½¿ç”¨æ–°çš„è¡¬è¡«ï¼Œéœ€ä»Žä½ çš„åº“å˜ä¸æ‹–æ‹½ä¸€ä¸ªæ–°çš„è¡¬è¡«è‡³ä½ çš„åŒ–èº«ä¸Šã€‚å¦å¤–çš„ï¼Œä½ ä¹Ÿå¯ä»¥ä»Žåº•ç¨¿ä¸åˆ›å»ºä¸€ä¸ªæ–°çš„并使用。
- ã‚ãªãŸã«ã¯è£…ç€å¯èƒ½ã«ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ä½ æ²¡æœ‰ä¿®æ”¹è¿™ä»¶æœé¥°çš„许å¯è¯ã€‚
-
-
+
+
-
-
+
+
-
-
+
+
[DESC]
- [DESC]:修æ£ä¸å¯èƒ½
+ [DESC]:ä¸èƒ½ä¿®é¥°
- [DESC]:ãƒãƒ¼ãƒ‰ä¸â€¦
+ [DESC]: 载入ä¸...
- [DESC]:装ç€ã•ã‚Œãªã„
+ [DESC]: 没有被穿ç€
- [PATH]ã«å˜åœ¨
+ ä½äºŽ[PATH]
- ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã€æ–°ã—ã„手袋をアãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚æ–°ãŸã«ä¸€ã‹ã‚‰ä½œè£½ã—ã¦ã€è£…ç€ã™ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚
+ è¦ä½¿ç”¨æ–°çš„裤åï¼Œéœ€ä»Žä½ çš„åº“å˜ä¸æ‹–拽一个新的裤åè‡³ä½ çš„åŒ–èº«ä¸Šã€‚å¦å¤–çš„ï¼Œä½ ä¹Ÿå¯ä»¥ä»Žåº•ç¨¿ä¸åˆ›å»ºä¸€ä¸ªæ–°çš„并使用。
- ã‚ãªãŸã«ã¯è£…ç€å¯èƒ½ã«ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ä½ æ²¡æœ‰ä¿®æ”¹è¿™ä»¶æœé¥°çš„许å¯è¯ã€‚
-
-
+
+
-
-
+
-
-
+
+
[DESC]
- [DESC]:修æ£ä¸å¯èƒ½
+ [DESC]:ä¸èƒ½ä¿®é¥°
- [DESC]:ãƒãƒ¼ãƒ‰ä¸â€¦
+ [DESC]: 载入ä¸...
- [DESC]:装ç€ã•ã‚Œãªã„
+ [DESC]: 没有被穿ç€
- [PATH]ã«å˜åœ¨
+ ä½äºŽ[PATH]
- ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã€æ–°ã—ã„é´ã‚’ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚æ–°ãŸã«ä¸€ã‹ã‚‰ä½œè£½ã—ã¦ã€è£…ç€ã™ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚
+ è¦ä½¿ç”¨æ–°çš„éž‹åï¼Œéœ€ä»Žä½ çš„åº“å˜ä¸æ‹–拽一个新的鞋åè‡³ä½ çš„åŒ–èº«ä¸Šã€‚å¦å¤–çš„ï¼Œä½ ä¹Ÿå¯ä»¥ä»Žåº•ç¨¿ä¸åˆ›å»ºä¸€ä¸ªæ–°çš„并使用。
- ã‚ãªãŸã«ã¯è£…ç€å¯èƒ½ã«ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ä½ æ²¡æœ‰ä¿®æ”¹è¿™ä»¶æœé¥°çš„许å¯è¯ã€‚
-
-
+
+
-
-
+
-
-
+
+
[DESC]
- [DESC]:修æ£ä¸å¯èƒ½
+ [DESC]:ä¸èƒ½ä¿®é¥°
- [DESC]:ãƒãƒ¼ãƒ‰ä¸â€¦
+ [DESC]: 载入ä¸...
- [DESC]:装ç€ã•ã‚Œãªã„
+ [DESC]: 没有被穿ç€
- [PATH]ã«å˜åœ¨
+ ä½äºŽ[PATH]
- ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã€æ–°ã—ã„é´ä¸‹ã‚’ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚æ–°ãŸã«ä¸€ã‹ã‚‰ä½œè£½ã—ã¦ã€è£…ç€ã™ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚
+ è¦ä½¿ç”¨æ–°çš„袜åï¼Œéœ€ä»Žä½ çš„åº“å˜ä¸æ‹–拽一个新的袜åè‡³ä½ çš„åŒ–èº«ä¸Šã€‚å¦å¤–çš„ï¼Œä½ ä¹Ÿå¯ä»¥ä»Žåº•ç¨¿ä¸åˆ›å»ºä¸€ä¸ªæ–°çš„并使用。
- ã‚ãªãŸã«ã¯è£…ç€å¯èƒ½ã«ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ä½ æ²¡æœ‰ä¿®æ”¹è¿™ä»¶æœé¥°çš„许å¯è¯ã€‚
-
-
+
+
-
-
+
+
-
-
+
+
[DESC]
- [DESC]:修æ£ä¸å¯èƒ½
+ [DESC]:ä¸èƒ½ä¿®é¥°
- [DESC]:ãƒãƒ¼ãƒ‰ä¸â€¦
+ [DESC]: 载入ä¸...
- [DESC]:装ç€ã•ã‚Œãªã„
+ [DESC]: 没有被穿ç€
- [PATH]ã«å˜åœ¨
+ ä½äºŽ[PATH]
- ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã€æ–°ã—ã„ジャケットをアãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚æ–°ãŸã«ä¸€ã‹ã‚‰ä½œè£½ã—ã¦ã€è£…ç€ã™ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚
+ è¦ä½¿ç”¨æ–°çš„å¤¹å…‹ï¼Œéœ€ä»Žä½ çš„åº“å˜ä¸æ‹–æ‹½ä¸€ä¸ªæ–°çš„å¤¹å…‹è‡³ä½ çš„åŒ–èº«ä¸Šã€‚å¦å¤–çš„ï¼Œä½ ä¹Ÿå¯ä»¥ä»Žåº•ç¨¿ä¸åˆ›å»ºä¸€ä¸ªæ–°çš„并使用。
- ã‚ãªãŸã«ã¯è£…ç€å¯èƒ½ã«ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
-
-
-
-
+ ä½ æ²¡æœ‰ä¿®æ”¹è¿™ä»¶æœé¥°çš„许å¯è¯ã€‚
+
+
+
+
-
-
+
-
-
+
+
[DESC]
- [DESC]:修æ£ä¸å¯èƒ½
+ [DESC]:ä¸èƒ½ä¿®é¥°
- [DESC]:ãƒãƒ¼ãƒ‰ä¸â€¦
+ [DESC]: 载入ä¸...
- [DESC]:装ç€ã•ã‚Œãªã„
+ [DESC]: 没有被穿ç€
- [PATH]ã«å˜åœ¨
+ ä½äºŽ[PATH]
- ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã€æ–°ã—ã„手袋をアãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚æ–°ãŸã«ä¸€ã‹ã‚‰ä½œè£½ã—ã¦ã€è£…ç€ã™ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚
+ è¦ä½¿ç”¨æ–°çš„æ‰‹å¥—ï¼Œéœ€ä»Žä½ çš„åº“å˜ä¸æ‹–æ‹½ä¸€ä¸ªæ–°çš„æ‰‹å¥—è‡³ä½ çš„åŒ–èº«ä¸Šã€‚å¦å¤–çš„ï¼Œä½ ä¹Ÿå¯ä»¥ä»Žåº•ç¨¿ä¸åˆ›å»ºä¸€ä¸ªæ–°çš„并使用。
- ã‚ãªãŸã«ã¯è£…ç€å¯èƒ½ã«ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ä½ æ²¡æœ‰ä¿®æ”¹è¿™ä»¶æœé¥°çš„许å¯è¯ã€‚
-
-
+
+
-
-
+
+
-
-
+
+
[DESC]
- [DESC]:修æ£ä¸å¯èƒ½
+ [DESC]:ä¸èƒ½ä¿®é¥°
- [DESC]:ãƒãƒ¼ãƒ‰ä¸â€¦
+ [DESC]: 载入ä¸...
- [DESC]:装ç€ã•ã‚Œãªã„
+ [DESC]: 没有被穿ç€
- [PATH]ã«å˜åœ¨
+ ä½äºŽ[PATH]
- ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã€æ–°ã—ã„下ç€ã‚’ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚æ–°ãŸã«ä¸€ã‹ã‚‰ä½œè£½ã—ã¦ã€è£…ç€ã™ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚
+ è¦ä½¿ç”¨æ–°çš„å†…è¡£ï¼Œéœ€ä»Žä½ çš„åº“å˜ä¸æ‹–æ‹½ä¸€ä¸ªæ–°çš„å†…è¡£è‡³ä½ çš„åŒ–èº«ä¸Šã€‚å¦å¤–çš„ï¼Œä½ ä¹Ÿå¯ä»¥ä»Žåº•ç¨¿ä¸åˆ›å»ºä¸€ä¸ªæ–°çš„并使用。
- ã‚ãªãŸã«ã¯è£…ç€å¯èƒ½ã«ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ä½ æ²¡æœ‰ä¿®æ”¹è¿™ä»¶æœé¥°çš„许å¯è¯ã€‚
-
-
+
+
-
-
+
+
-
-
+
+
[DESC]
- [DESC]:修æ£ä¸å¯èƒ½
+ [DESC]:ä¸èƒ½ä¿®é¥°
- [DESC]:ãƒãƒ¼ãƒ‰ä¸â€¦
+ [DESC]: 载入ä¸...
- [DESC]:装ç€ã•ã‚Œãªã„
+ [DESC]: 没有被穿ç€
- [PATH]ã«å˜åœ¨
+ ä½äºŽ[PATH]
- ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã€æ–°ã—ã„パンツをアãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚æ–°ãŸã«ä¸€ã‹ã‚‰ä½œè£½ã—ã¦ã€è£…ç€ã™ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚
+ è¦ä½¿ç”¨æ–°çš„å†…è£¤ï¼Œéœ€ä»Žä½ çš„åº“å˜ä¸æ‹–æ‹½ä¸€ä¸ªæ–°çš„å†…è£¤è‡³ä½ çš„åŒ–èº«ä¸Šã€‚å¦å¤–çš„ï¼Œä½ ä¹Ÿå¯ä»¥ä»Žåº•ç¨¿ä¸åˆ›å»ºä¸€ä¸ªæ–°çš„并使用。
- ã‚ãªãŸã«ã¯è£…ç€å¯èƒ½ã«ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ä½ æ²¡æœ‰ä¿®æ”¹è¿™ä»¶æœé¥°çš„许å¯è¯ã€‚
-
-
+
+
-
-
+
+
-
-
+
+
[DESC]
- [DESC]:修æ£ä¸å¯èƒ½
+ [DESC]:ä¸èƒ½ä¿®é¥°
- [DESC]:ãƒãƒ¼ãƒ‰ä¸â€¦
+ [DESC]: 载入ä¸...
- [DESC]:装ç€ã•ã‚Œãªã„
+ [DESC]: 没有被穿ç€
- [PATH]ã«å˜åœ¨
+ ä½äºŽ[PATH]
- ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã€æ–°ã—ã„スカートをアãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚æ–°ãŸã«ä¸€ã‹ã‚‰ä½œè£½ã—ã¦ã€è£…ç€ã™ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚
+ è¦ä½¿ç”¨æ–°çš„裙åï¼Œéœ€ä»Žä½ çš„åº“å˜ä¸æ‹–拽一个新的裙åè‡³ä½ çš„åŒ–èº«ä¸Šã€‚å¦å¤–çš„ï¼Œä½ ä¹Ÿå¯ä»¥ä»Žåº•ç¨¿ä¸åˆ›å»ºä¸€ä¸ªæ–°çš„并使用。
- ã‚ãªãŸã«ã¯è£…ç€å¯èƒ½ã«ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ä½ æ²¡æœ‰ä¿®æ”¹è¿™ä»¶æœé¥°çš„许å¯è¯ã€‚
-
-
+
+
-
+
diff --git a/linden/indra/newview/skins/xui/zh/floater_directory.xml b/linden/indra/newview/skins/xui/zh/floater_directory.xml
index 78c4b13..5126e8a 100644
--- a/linden/indra/newview/skins/xui/zh/floater_directory.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_directory.xml
@@ -92,14 +92,14 @@
+ tool_tip="返回一天" />
6/6
+ tool_tip="å‰è¿›ä¸€å¤©" />
+ tool_tip="显示今天å‘生的事件" />
ç§ç±»åˆ—表:
@@ -161,7 +161,7 @@
- 交通é‡ã‚„ã€ãã“ã§äººã€…ãŒéŽã”ã™æ™‚é–“ã‹ã‚‰è¨ˆæ¸¬ã—ã¦ã€ã“れらã¯ä¸–ç•Œã§ä¸€ç•ªäººæ°—ã®ã‚ã‚‹å ´æ‰€ã§ã™ã€‚
+ 这里有在第二人生世界里最æµè¡Œçš„场所,由交通状况,和人们在那里花费的时间长çŸæ¥è¡¡é‡ã€‚
@@ -226,34 +226,34 @@
ä»»æ„分类
- Lindenãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³
+ 林登家的地点
æˆäºº
- アート & カルãƒãƒ£ãƒ¼
+ 艺术和文化
- ビジãƒã‚¹
+ 生æ„
教育的
- ゲーãƒ
+ åšå½©æ¸¸æˆ
- 仲間
+ 临时ä½æ‰€
- æ–°å‚者ã«å¥½æ„çš„
+ å‹å¥½çš„åˆæ¥è€…
- 公園 & 自然
+ å…¬å›å’Œå¤§è‡ªç„¶
- ä½å®…用
+ 土木建ç‘
è´ç‰©
diff --git a/linden/indra/newview/skins/xui/zh/floater_friends.xml b/linden/indra/newview/skins/xui/zh/floater_friends.xml
index 605bb47..b02526c 100644
--- a/linden/indra/newview/skins/xui/zh/floater_friends.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_friends.xml
@@ -1,18 +1,16 @@
+ tool_tip="显示图片,社团以åŠå…¶å®ƒä¿¡æ¯" />
-
+ tool_tip="为æ¤æœ‰äººæä¾›ä¸€æ¬¡é—ªç”µä¼ è¿åˆ°ä½ 现在所在地å€ã€‚" />
+
-
+ tool_tip="å°†æ¤äººä»Žä½ çš„å‹äººåˆ—表ä¸æ¸…除" />
+
-
+ tool_tip="å…许æ¤ä½ç”¨æˆ·æ¥æ”¹è¿›ä½ 的物体。" />
+
diff --git a/linden/indra/newview/skins/xui/zh/floater_god_tools.xml b/linden/indra/newview/skins/xui/zh/floater_god_tools.xml
new file mode 100644
index 0000000..8f69431
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/floater_god_tools.xml
@@ -0,0 +1,143 @@
+
+
+
+
+
+
+
+
+
+ 游æˆä¸çš„åå—:
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ä¸åŠ¨äº§ID:
+
+
+ åˆçº§ID:
+
+
+
+ æ–¹æ ¼æ”¶æ¬¾å°:
+
+
+
+
+ 从新定ä½æ–¹æ ¼ä½ç½®:
+
+
+ å¸å•æ˜Žç»†:
+
+
+ L$æ¯å¹³æ–¹ç±³:
+
+
+
+
+
+
+
+
+ 游æˆä¸çš„åå—:
+
+
+ å¨å°”士
+
+
+
+
+
+
+
+ (æ²¡æœ‰ç›®æ ‡)
+
+
+
+
+
+
+
+
+
+
+ 目的地:
+
+
+
+ 选项
+
+
+ 代ç†åŒºåŸŸ
+
+
+
+ è¦æ±‚:
+
+
+
+ å†²çª <æ¥éª¤>
+
+
+ 脚本 <计数>,<å¯é€‰çš„æ ·å¼>
+
+
+ 东东<å¼æ ·>
+
+
+ rez <财产_id>
+
+
+
+ å‚æ•°:
+
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/floater_group_info.xml b/linden/indra/newview/skins/xui/zh/floater_group_info.xml
index 9ff5eb9..23687c8 100644
--- a/linden/indra/newview/skins/xui/zh/floater_group_info.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_group_info.xml
@@ -32,10 +32,10 @@
+ tool_tip="å°†ä½ ä¸ªäººçš„ç®€ä»‹å‘布到网上." />
+ tool_tip="ä½ çš„æ¡£æ¡ˆæ–‡ä»¶è¢«è®¤ä¸ºå¸¦æœ‰æˆäººå†…容." />
@@ -56,7 +56,7 @@
ä»Žä½ çš„åº“å˜ä¸é€‰å–ææ–™åˆ¶ä½œç¤¾å›¢å¾½ç« .
-
+
@@ -95,8 +95,7 @@
法定人数:
-
+
在全部111åæˆå‘˜ä¹‹å¤–
@@ -117,7 +116,7 @@
æŒç»æ—¶é—´:
-
+
天
@@ -149,8 +148,7 @@
法定人数:
-
+
在全部111åæˆå‘˜ä¹‹å¤–
@@ -171,7 +169,7 @@
æŒç»æ—¶é—´:
-
+
天
@@ -182,7 +180,7 @@
é€‰ä¸¾ç»“æŸ :
-
+
社团选举å²
@@ -254,15 +252,15 @@
+ tool_tip="时间返回" />
+ tool_tip="时间å‰è¿›" />
+ tool_tip="时间返回" />
+ tool_tip="时间å‰è¿›" />
diff --git a/linden/indra/newview/skins/xui/zh/floater_groups.xml b/linden/indra/newview/skins/xui/zh/floater_groups.xml
index 9316630..de227f2 100644
--- a/linden/indra/newview/skins/xui/zh/floater_groups.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_groups.xml
@@ -4,7 +4,7 @@
粗体å—æ˜¾ç¤ºçš„æ˜¯ä½ ç›®å‰æ£åœ¨æ´»åŠ¨çš„社团。
- ã‚ãªãŸã¯[COUNT]グループã«æ‰€å±žã—ã¦ã„ã¾ã™ã€‚(最大[MAX])
+ ä½ å±žäºŽ[COUNT]个社团(最大数é‡ä¸º[MAX]).
diff --git a/linden/indra/newview/skins/xui/zh/floater_im.xml b/linden/indra/newview/skins/xui/zh/floater_im.xml
index dd099dc..423e0ae 100644
--- a/linden/indra/newview/skins/xui/zh/floater_im.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_im.xml
@@ -1,9 +1,9 @@
-
+
- ã‚ãªãŸãŒã€æœ¬ã‚»ãƒƒã‚·ãƒ§ãƒ³ã®å”¯ä¸€ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã§ã™ã€‚
+ ä½ æ˜¯è¿™ä¸ªé˜¶æ®µå”¯ä¸€çš„ç”¨æˆ·ã€‚
- [FIRST][LAST]ã¯ã‚ªãƒ•ãƒ©ã‚¤ãƒ³ã§ã™
+ [FIRST] [LAST] ç›®å‰ä¸åœ¨çº¿ã€‚
diff --git a/linden/indra/newview/skins/xui/zh/floater_image_preview.xml b/linden/indra/newview/skins/xui/zh/floater_image_preview.xml
index 28cd2b5..e669ce0 100644
--- a/linden/indra/newview/skins/xui/zh/floater_image_preview.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_image_preview.xml
@@ -11,31 +11,31 @@
- イメージ
+ 头åƒ
- 髪
+ 头å‘
- 女性ã®é
+ 女性头部
- 女性ã®ä¸ŠåŠèº«
+ 女性上åŠèº«
- 女性ã®ä¸‹åŠèº«
+ 女性下åŠèº«
- 男性ã®é
+ 男性头部
- 男性ã®ä¸ŠåŠèº«
+ 男性上åŠèº«
- 男性ã®ä¸‹åŠèº«
+ 男性下åŠèº«
- スカート
+ 裙å
@@ -44,5 +44,5 @@
å°è¯•å°†å›¾åƒæŒ‰24 bit Targaæ–¹å¼å‚¨å˜ã€‚
-
+
diff --git a/linden/indra/newview/skins/xui/zh/floater_instant_message.xml b/linden/indra/newview/skins/xui/zh/floater_instant_message.xml
index 5bcaa5e..038fa3d 100644
--- a/linden/indra/newview/skins/xui/zh/floater_instant_message.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_instant_message.xml
@@ -3,7 +3,10 @@
- ***よã†ã“ãライブ・ヘルプã¸ï¼ ã“ã“ã§ã¯ä»²é–“ã§ã‚る皆ã•ã‚“ã«ã€ã™ã°ã‚‰ã—ã„ボランティアé”ãŒSecond Lifeã®ã‚µãƒãƒ¼ãƒˆã‚’ã—ã¾ã™ï¼*** ã¾ãšåˆã‚ã«F1を押ã—ã€SLヘルプページをãƒã‚§ãƒƒã‚¯ã—ã¦ãã ã•ã„。 ãã“ã§å›žç”ãŒè¦‹ã¤ã‹ã‚‰ãªã„å ´åˆã¯è³ªå•ã‚’入力ã—ã€æ‰‹ã®ç©ºã„ãŸãƒ˜ãƒ«ãƒ‘ーãŒå¿œç”ã™ã‚‹ã¾ã§ã€æ•°åˆ†ãŠæŒã¡ãã ã•ã„。 終了ã™ã‚‹ã¾ã§ã€ãƒ©ã‚¤ãƒ–・ヘルプã¯é–‰ã˜ãªã„ã§ãã ã•ã„。返ç”ãŒãªã„å ´åˆã¯æ™‚é–“ã‚’ãŠã„ã¦ã€å†åº¦ã€è©¦ã¿ã¦ãã ã•ã„。 注æ„:ライブ・ヘルパーã¯ã€ŽLindenã€ãŒè‹—å—ã§ã‚ã‚‹å ´åˆã‚’除ãã€Lindenã®å¾“æ¥å“¡ã§ã¯ãªã„ãŸã‚ã€å›žç”ã¯éžå…¬å¼ãªã‚‚ã®ã¨ã¿ãªã—ã¾ã™ã€‚
+ *** 欢迎æ¥åˆ°åœ¨çº¿å¸®åŠ©ç«™,在这里,我们出色的志愿者们会å助他们的第二人生居民朋å‹ä»¬åœ¨ç¬¬äºŒäººç”Ÿé‡Œç²¾å½©çš„ç”Ÿæ´»ï¼ ***
+请先按F1键,进入第二人生帮助页é¢ã€‚å¦‚æžœä½ æƒ³è¦çš„ç”案ä¸åœ¨è¿™é‡Œï¼Œè¯·é”®å…¥ä½ 的问题,点击开始,ç‰å€™è‹¥å¹²åˆ†é’ŸåŽï¼Œåœ¨çº¿çš„å¸®åŠ©è€…ä¼šç»™ä½ å›žå¤ã€‚
+如果您的处ç†è¿‡ç¨‹æ²¡æœ‰ç»“æŸï¼Œè¯·ä¸è¦å…³é—在线帮助站的页é¢ã€‚å¦‚æžœæ‚¨æ²¡æœ‰å¾—åˆ°å›žåº”ï¼Œä½ å¯ä»¥ä¸€ç›´é€‰æ‹©é‡æ–°å°è¯•ä¸€é。
+注æ„: 在线帮助者并ä¸æ˜¯æž—登实验室的雇员, 所以,除éžå›žåº”人的姓æ°ä¸º'Linden',å¦åˆ™å›žå¤éƒ½åº”视为éžæ£å¼çš„.
Instant Message with [NAME]
diff --git a/linden/indra/newview/skins/xui/zh/floater_inventory.xml b/linden/indra/newview/skins/xui/zh/floater_inventory.xml
index 8320f89..c231b5c 100644
--- a/linden/indra/newview/skins/xui/zh/floater_inventory.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_inventory.xml
@@ -7,46 +7,46 @@
-
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
-
-
+
+
diff --git a/linden/indra/newview/skins/xui/zh/floater_inventory_view_finder.xml b/linden/indra/newview/skins/xui/zh/floater_inventory_view_finder.xml
new file mode 100644
index 0000000..706933f
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/floater_inventory_view_finder.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ - OR -
+
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/floater_land_holdings.xml b/linden/indra/newview/skins/xui/zh/floater_land_holdings.xml
index 5e2d3c7..9d340ab 100644
--- a/linden/indra/newview/skins/xui/zh/floater_land_holdings.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_land_holdings.xml
@@ -7,10 +7,9 @@
+ tool_tip="é—ªç”µä¼ è¿åˆ°æ¤åœ°çš„ä¸å¿ƒ." />
+ name="Show on Map" tool_tip="å°†æ¤åœ°åœ¨ä¸–界地图上显示出æ¥" />
å‘ä½ çš„ç¤¾å›¢æèµ :
diff --git a/linden/indra/newview/skins/xui/zh/floater_live_lsleditor.xml b/linden/indra/newview/skins/xui/zh/floater_live_lsleditor.xml
index 715ca47..b7527fc 100644
--- a/linden/indra/newview/skins/xui/zh/floater_live_lsleditor.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_live_lsleditor.xml
@@ -1,5 +1,5 @@
-
-
-
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/floater_moveview.xml b/linden/indra/newview/skins/xui/zh/floater_moveview.xml
index 39fe5f2..4972c68 100644
--- a/linden/indra/newview/skins/xui/zh/floater_moveview.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_moveview.xml
@@ -1,15 +1,14 @@
-
-
-
+
+
+
+ tool_tip="蹲下或者飞行高度é™ä½Žã€‚" />
-
-
-
-
+ tool_tip="开始或åœæ¢é£žè¡Œ" />
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/floater_mute.xml b/linden/indra/newview/skins/xui/zh/floater_mute.xml
index 9462089..dba916e 100644
--- a/linden/indra/newview/skins/xui/zh/floater_mute.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_mute.xml
@@ -1,14 +1,10 @@
-
+
-
-
+ name="Mute resident..." tool_tip="选择一个ä½æˆ·å¹¶å±è”½æ¤äºº" />
+
+
diff --git a/linden/indra/newview/skins/xui/zh/floater_new_im.xml b/linden/indra/newview/skins/xui/zh/floater_new_im.xml
index 64ccd5d..a6b52de 100644
--- a/linden/indra/newview/skins/xui/zh/floater_new_im.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_new_im.xml
@@ -1,11 +1,11 @@
-
-
+
+
- [FIRST][LAST]
+ [FIRST] [LAST]
- (オンライン)
+ (在线)
diff --git a/linden/indra/newview/skins/xui/zh/floater_new_outfit_dialog.xml b/linden/indra/newview/skins/xui/zh/floater_new_outfit_dialog.xml
index 613cfb4..efb4c3e 100644
--- a/linden/indra/newview/skins/xui/zh/floater_new_outfit_dialog.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_new_outfit_dialog.xml
@@ -2,85 +2,87 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- æ–°ã—ã„æœè£…ã‚’ã¤ãã‚‹
+ 制作新的装备
- æœè£…ã¯ã€æœã¨èº«ä½“部ä½ã‚’å«ã‚€ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã§ã™ã€‚装ç€ã™ã‚‹ã«ã¯ã€æœè£…フォルダーをアãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ãã ã•ã„。
-『新ã—ã„æœè£…作æˆã€ã¯ã€æ–°ã—ã„フォルダーを作æˆã—ã€ç¾åœ¨è£…ç€ã—ã¦ã„るアイテムã®ã‚³ãƒ”ーをä¿å˜ã—ã¾ã™ã€‚
+ 装备是一些文件夹,这些文件夹ä¸åŒ…å«æœé¥°å’Œä¸€äº›èº«ä½“躯干。
+æ‹–æ‹½ä¸€é¡¹è£…å¤‡æ–‡ä»¶å¤¹è‡³ä½ çš„åŒ–èº«èº«ä¸Šï¼Œå¹¶æ¾å¼€é¼ æ ‡ï¼Œå°†å…¶ä¿ç•™åœ¨åŒ–身身体上。
+
+"åˆ¶é€ æ–°çš„è£…å¤‡"会创建新的文件夹,并ä¿å˜ä½ æ£åœ¨ä½¿ç”¨æˆ–ç©¿ç€çš„物å“的副本在新的文件夹ä¸ã€‚
- フォルダーå:
+ 文件夹å称:
- æœè£…ã«å«ã‚€ã‚¢ã‚¤ãƒ†ãƒ :
+ 包括装备ä¸çš„物å“æ¡ç›®:
- 身体部ä½ï¼š
+ 躯干
- æœï¼š
+ æœé¥°:
- 付属å“:
+ 附属:
- オプション:
+ 选项:
- æ–°ã—ã„æœè£…
+ 新装备
diff --git a/linden/indra/newview/skins/xui/zh/floater_openobject.xml b/linden/indra/newview/skins/xui/zh/floater_openobject.xml
index 588b72d..0ead435 100644
--- a/linden/indra/newview/skins/xui/zh/floater_openobject.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_openobject.xml
@@ -1,10 +1,10 @@
-
+
- [DESC]:
+ [DESC]:
-
-
diff --git a/linden/indra/newview/skins/xui/zh/floater_pay.xml b/linden/indra/newview/skins/xui/zh/floater_pay.xml
index 8f8c50f..d065349 100644
--- a/linden/indra/newview/skins/xui/zh/floater_pay.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_pay.xml
@@ -1,21 +1,21 @@
-
-
-
-
-
+
+
+
+
+
- å±…ä½è€…ã«æ”¯æ‰•ã„:
+ 支付给居民:
- [FIRST][LAST]
+ [FIRST] [LAST]
- 一発払ã„:
+ 快速支付通é“:
- 金é¡ï¼š
+ æ•°é‡:
diff --git a/linden/indra/newview/skins/xui/zh/floater_pay_object.xml b/linden/indra/newview/skins/xui/zh/floater_pay_object.xml
index cf0e5c5..956104f 100644
--- a/linden/indra/newview/skins/xui/zh/floater_pay_object.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_pay_object.xml
@@ -1,30 +1,30 @@
- 支払ã„グループ:
+ 支付给社团:
- å±…ä½è€…ã«æ”¯æ‰•ã„:
+ 支付给居民:
- [FIRST][LAST]
+ [FIRST] [LAST]
- オブジェクト経由:
+ 通过东东:
- …
+ ...
- 一発払ã„:
+ 快速支付通é“:
- 金é¡ï¼š
+ æ•°é‡:
-
-
-
-
-
+
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/floater_postcard.xml b/linden/indra/newview/skins/xui/zh/floater_postcard.xml
index e820b84..dc6df6f 100644
--- a/linden/indra/newview/skins/xui/zh/floater_postcard.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_postcard.xml
@@ -16,9 +16,9 @@
ä¿¡æ¯:
+ tool_tip="å°†æ¤æ˜Žä¿¡ç‰‡å‘布到网络上" />
+ tool_tip="è¿™å¼ æ˜Žä¿¡ç‰‡åŒ…å«æˆäººå†…容." />
å¦‚æžœä½ çš„æ˜Žä¿¡ç‰‡æ”¶åˆ°è€…åŠ å…¥SLï¼Œä½ ä¼šå¾—åˆ°ä¸€ä»½é¢å¤–的奖励。
diff --git a/linden/indra/newview/skins/xui/zh/floater_preferences.xml b/linden/indra/newview/skins/xui/zh/floater_preferences.xml
new file mode 100644
index 0000000..788e77c
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/floater_preferences.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/floater_preview_animation.xml b/linden/indra/newview/skins/xui/zh/floater_preview_animation.xml
index c8f5bf6..76f5e65 100644
--- a/linden/indra/newview/skins/xui/zh/floater_preview_animation.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_preview_animation.xml
@@ -1,11 +1,10 @@
-
+
æè¿°:
-
-
+
+
diff --git a/linden/indra/newview/skins/xui/zh/floater_preview_embedded_texture.xml b/linden/indra/newview/skins/xui/zh/floater_preview_embedded_texture.xml
index e25f5ea..0cf530c 100644
--- a/linden/indra/newview/skins/xui/zh/floater_preview_embedded_texture.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_preview_embedded_texture.xml
@@ -1,8 +1,8 @@
-
-
+
- 採寸:[WIDTH]×[HEIGHT]
+ 尺寸: [WIDTH] x [HEIGHT]
diff --git a/linden/indra/newview/skins/xui/zh/floater_preview_gesture.xml b/linden/indra/newview/skins/xui/zh/floater_preview_gesture.xml
index 06f8c8c..41b63d2 100644
--- a/linden/indra/newview/skins/xui/zh/floater_preview_gesture.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_preview_gesture.xml
@@ -1,47 +1,47 @@
-
+
æè¿°:
- トリガー:
+ 引å‘æº:
- 入れ替ãˆã‚‹ï¼š
+ 替æ¢ä¸º:
- ショートカットã‚ー:
+ å¿«æ·é”®:
- ライブラリ:
+ 图书馆:
- 工程:
+ æ¥éª¤:
-
-
-
+
+
+
- ã‚ãªãŸãŒå¾…æ©Ÿã‚¹ãƒ†ãƒƒãƒ—ã‚’è¿½åŠ ã—ãªã„é™ã‚Šã¯ã€å…¨ã¦ã®ã‚¹ãƒ†ãƒƒãƒ—ã¯åŒæ™‚ã«è¡Œã‚ã‚Œã¾ã™ã€‚
+ 所有的æ¥éª¤éƒ½æ˜¯è‡ªè¡Œå‘生,除éžä½ æ·»åŠ äº†ç‰å¾…æ¥éª¤ã€‚
- スタート
+ 开始
åœæ¢
-
-
-
+
+
-
+
diff --git a/linden/indra/newview/skins/xui/zh/floater_preview_notecard.xml b/linden/indra/newview/skins/xui/zh/floater_preview_notecard.xml
index 64206c6..feccac6 100644
--- a/linden/indra/newview/skins/xui/zh/floater_preview_notecard.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_preview_notecard.xml
@@ -1,5 +1,5 @@
-
+
æè¿°:
diff --git a/linden/indra/newview/skins/xui/zh/floater_preview_notecard_keep_discard.xml b/linden/indra/newview/skins/xui/zh/floater_preview_notecard_keep_discard.xml
index a406e8e..cfc961f 100644
--- a/linden/indra/newview/skins/xui/zh/floater_preview_notecard_keep_discard.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_preview_notecard_keep_discard.xml
@@ -1,11 +1,11 @@
-
+
请ç‰å¾…...
æè¿°:
-
+
diff --git a/linden/indra/newview/skins/xui/zh/floater_preview_sound.xml b/linden/indra/newview/skins/xui/zh/floater_preview_sound.xml
index d7a6c48..5721b42 100644
--- a/linden/indra/newview/skins/xui/zh/floater_preview_sound.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_preview_sound.xml
@@ -1,12 +1,11 @@
-
+
æè¿°:
-
-
+ tool_tip="æ’放这段音频且其他人也å¯å¬åˆ°ã€‚." />
+
diff --git a/linden/indra/newview/skins/xui/zh/floater_preview_texture.xml b/linden/indra/newview/skins/xui/zh/floater_preview_texture.xml
index 1b1ee40..a3b0711 100644
--- a/linden/indra/newview/skins/xui/zh/floater_preview_texture.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_preview_texture.xml
@@ -1,10 +1,9 @@
-
+
æè¿°:
- 採寸:[WIDTH]×[HEIGHT]
+ 尺寸: [WIDTH] x [HEIGHT]
diff --git a/linden/indra/newview/skins/xui/zh/floater_preview_texture_keep_discard.xml b/linden/indra/newview/skins/xui/zh/floater_preview_texture_keep_discard.xml
index 617253a..f4b74a9 100644
--- a/linden/indra/newview/skins/xui/zh/floater_preview_texture_keep_discard.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_preview_texture_keep_discard.xml
@@ -1,11 +1,11 @@
-
+
æè¿°:
-
+
- 採寸:[WIDTH]×[HEIGHT]
+ 尺寸: [WIDTH] x [HEIGHT]
diff --git a/linden/indra/newview/skins/xui/zh/floater_rate.xml b/linden/indra/newview/skins/xui/zh/floater_rate.xml
new file mode 100644
index 0000000..1873576
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/floater_rate.xml
@@ -0,0 +1,44 @@
+
+
+
+
+ Positive
+
+
+ No Rating
+
+
+
+
+ Positive
+
+
+ No Rating
+
+
+
+
+ Positive
+
+
+ No Rating
+
+
+
+
+
+ 所有的行为:
+
+
+ 外表的技能(è¡£æœå’Œé™„属饰å“):
+
+
+ 创建建ç‘物的能力:
+
+
+ ä¿¡æ¯:
+
+
+ 花费: L$[COST]更改ç‰çº§çº¦å®š. 总共收费: L$[TOTAL].
+
+
diff --git a/linden/indra/newview/skins/xui/zh/floater_report_abuse.xml b/linden/indra/newview/skins/xui/zh/floater_report_abuse.xml
index fdc8c1c..f033d7f 100644
--- a/linden/indra/newview/skins/xui/zh/floater_report_abuse.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_report_abuse.xml
@@ -14,37 +14,37 @@
- カテゴリをé¸æŠž
+ 选择一个分类
- éžè¨±å®¹
+ ä¸è€æ€§
- ãƒãƒ©ã‚¹ãƒ¡ãƒ³ãƒˆ
+ 折磨
- 攻撃
+ 攻击
- 開示
+ æå‘
- ã‚ã„ã›ã¤
+ 侵犯
- å¹´é½¢
+ 年纪
- 区画
+ å°å—土地
其他
+ tool_tip="东东拾å–器 - 确认一个东东为æ¤ä»½æŠ¥å‘Šä¸çš„一项" />
- ボタンをクリックã—ã¦ã‹ã‚‰ã‚ªãƒ–ジェクト:
+ 点击按钮然åŽç‚¹å‡»ä¸œä¸œ:
åå—:
@@ -53,12 +53,12 @@
主人:
- å«ŒãŒã‚‰ã›ã‚’行為者å:
+ 辱骂者åå—:
+ tool_tip="从列表ä¸é€‰æ‹©è¢«è¾±è€…的姓å。" />
- å«ŒãŒã‚‰ã›ç®‡æ‰€ï¼š
+ 辱骂情况å‘生的地å€:
总结:
@@ -67,10 +67,10 @@
详细:
- 日付ã€ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã€å«ŒãŒã‚‰ã›ç‰¹å¾´ã€é–¢é€£ã™ã‚‹ä¼šè©±ï¼IMテã‚ストã«é–¢ã—ã€æ˜Žç¢ºã«ã—ã¦ãã ã•ã„。ã¾ãŸã€å¯èƒ½ã§ã‚ã‚Œã°ã€ã‚ªãƒ–ジェクトをé¸æŠžã—ã¦ãã ã•ã„。
+ 请详尽的æ述关于日期,地点,辱骂事件的特å¾ï¼Œç›¸å…³çš„èŠå¤©è®°å½•ï¼Œå¦‚æžœå¯èƒ½è¯·é€‰æ‹©å¯¹è±¡ã€‚
- 注æ„:未完æˆã®å ±å‘Šã¯èª¿æŸ»ã•ã‚Œã¾ã›ã‚“。
+ 通知:ä¸å®Œæ•´çš„报告将ä¸ä¼šè¢«è°ƒæŸ¥
diff --git a/linden/indra/newview/skins/xui/zh/floater_report_bug.xml b/linden/indra/newview/skins/xui/zh/floater_report_bug.xml
index 9b2c492..65472d4 100644
--- a/linden/indra/newview/skins/xui/zh/floater_report_bug.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_report_bug.xml
@@ -10,10 +10,10 @@
ä½ç½®:
- ボタンをクリックã—ã¦ã‹ã‚‰ã€ã‚ªãƒ–ジェクトをé¸æŠžã—ã¦ãã ã•ã„:
+ 点击按钮选择一个东东:
+ tool_tip="东东拾å–器 - 确认一个东东为æ¤ä»½æŠ¥å‘Šä¸çš„一项" />
åå—:
@@ -28,7 +28,7 @@
- カテゴリをé¸æŠž
+ 选择一个分类
楼宇
@@ -43,7 +43,7 @@
文档
- é–‹æ‹“ã™ã‚‹
+ å¼€å‘
图åƒ
diff --git a/linden/indra/newview/skins/xui/zh/floater_script_ed_panel.xml b/linden/indra/newview/skins/xui/zh/floater_script_ed_panel.xml
index 837cd54..2941882 100644
--- a/linden/indra/newview/skins/xui/zh/floater_script_ed_panel.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_script_ed_panel.xml
@@ -7,23 +7,23 @@
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
+
diff --git a/linden/indra/newview/skins/xui/zh/floater_script_preview.xml b/linden/indra/newview/skins/xui/zh/floater_script_preview.xml
index d42e7ea..47e7a30 100644
--- a/linden/indra/newview/skins/xui/zh/floater_script_preview.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_script_preview.xml
@@ -1,5 +1,5 @@
-
+
æè¿°:
diff --git a/linden/indra/newview/skins/xui/zh/floater_script_queue.xml b/linden/indra/newview/skins/xui/zh/floater_script_queue.xml
index eb71b5a..19185e3 100644
--- a/linden/indra/newview/skins/xui/zh/floater_script_queue.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_script_queue.xml
@@ -1,4 +1,4 @@
-
+
diff --git a/linden/indra/newview/skins/xui/zh/floater_script_search.xml b/linden/indra/newview/skins/xui/zh/floater_script_search.xml
index 4d0577c..25e71d7 100644
--- a/linden/indra/newview/skins/xui/zh/floater_script_search.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_script_search.xml
@@ -1,13 +1,13 @@
-
-
+
+
-
-
+
+
æœç´¢
- 入れ替ãˆã‚‹
+ 替æ¢
diff --git a/linden/indra/newview/skins/xui/zh/floater_sell_land.xml b/linden/indra/newview/skins/xui/zh/floater_sell_land.xml
new file mode 100644
index 0000000..08eff9b
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/floater_sell_land.xml
@@ -0,0 +1,68 @@
+
+
+
+ 土地:
+
+
+ 土地的å称
+
+
+ 尺寸:
+
+
+ [AREA]平方米
+
+
+ 出售这å—土地:
+
+
+ è®¾ç½®ä¸€ä¸ªä»·æ ¼:
+
+
+ 为这å—土地选择一个åˆé€‚çš„ä»·ä½
+
+
+ L$
+
+
+ (L$[PER_METER]æ¯å¹³æ–¹ç±³)
+
+
+ 把土地出售给:
+
+
+ 选择是å¦æŠŠä¸œä¸œå‡ºå”®ç»™ä»»ä½•äººæˆ–是一个特定的人.
+
+
+
+ -- select one --
+
+
+ 任何人
+
+
+ 特殊用户:
+
+
+
+
+ 是å¦å’ŒåœŸåœ°ä¸€èµ·å‡ºå”®ä¸œä¸œ?
+
+
+ Land owner's transferable objects on parcel will change ownership.
+
+
+
+ No, keep ownership of objects
+
+
+ Yes, sell objects with land
+
+
+
+
+ 请谨记: 所有的售出都是最åŽé˜¶æ®µ.
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/floater_settings_debug.xml b/linden/indra/newview/skins/xui/zh/floater_settings_debug.xml
new file mode 100644
index 0000000..6524191
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/floater_settings_debug.xml
@@ -0,0 +1,15 @@
+
+
+
+
+ TRUE
+
+
+ FALSE
+
+
+
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/floater_snapshot.xml b/linden/indra/newview/skins/xui/zh/floater_snapshot.xml
index 5672312..3fd6971 100644
--- a/linden/indra/newview/skins/xui/zh/floater_snapshot.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_snapshot.xml
@@ -81,7 +81,7 @@
- ç²å¾—:
+ 获å–:
@@ -91,21 +91,19 @@
深度
- オグジェクト・マット
+ Object Mattes
- ファイルサイズ:[SIZE]
+ å…¨å±: [SIZE]
-
+
-
-
-
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/floater_telehub.xml b/linden/indra/newview/skins/xui/zh/floater_telehub.xml
index fde8aa6..8381e5f 100644
--- a/linden/indra/newview/skins/xui/zh/floater_telehub.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_telehub.xml
@@ -1,16 +1,16 @@
- [OBJECT]ã«æŽ¥ç¶šã•ã‚ŒãŸãƒ†ãƒ¬ãƒãƒ–
+ é—ªç”µä¼ è¿è¿žæŽ¥ç‚¹å’Œä¸œä¸œè¿žæŽ¥[OBJECT]
- テレãƒãƒ–ãŒæŽ¥ç¶šã•ã‚Œã¦ã„ãªã„
+ 没有ç€é™†ç‚¹è¿žæŽ¥
- 除外ã™ã‚‹ã«ã¯ã€Žåˆ‡æ–ã€ã‚’クリックã—ã¦ãã ã•ã„。
+ 移除,请点击æ–开连接
- オブジェクトをé¸æŠžã—ã€ã€Žãƒ†ãƒ¬ãƒãƒ–ã«æŽ¥ç¶šã€ã‚’クリックã—ã¦ãã ã•ã„。
+ é€‰æ‹©ä¸€ä¸ªå¯¹è±¡ï¼Œå¹¶ç‚¹å‡»é—ªç”µä¼ è¿è¿žæŽ¥ç‚¹ã€‚
diff --git a/linden/indra/newview/skins/xui/zh/floater_texture_ctrl.xml b/linden/indra/newview/skins/xui/zh/floater_texture_ctrl.xml
index 74314e8..98c56cb 100644
--- a/linden/indra/newview/skins/xui/zh/floater_texture_ctrl.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_texture_ctrl.xml
@@ -1,15 +1,15 @@
-
+
- 複数ã®
+ 多项
- 採寸:512×512
+ 尺寸: 512 x 512
-
+
-
-
+
+
diff --git a/linden/indra/newview/skins/xui/zh/floater_tools.xml b/linden/indra/newview/skins/xui/zh/floater_tools.xml
index ff3d646..d62802e 100644
--- a/linden/indra/newview/skins/xui/zh/floater_tools.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_tools.xml
@@ -2,7 +2,7 @@
- フォーカス
+ 焦点
@@ -21,35 +21,35 @@
土地
-
-
+
+
-
-
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
- ルーラーモード:
+ 管ç†å‘˜æ¨¡å¼:
- ドラッグã¯ç§»å‹•ã€ã‚·ãƒ•ãƒˆãƒ‰ãƒ©ãƒƒã‚°ã§ã‚³ãƒ”ー
+ 拖拽并移动, åŒæ—¶æŒ‰shift-拖拽å¤åˆ¶ä¸œä¸œ
世界
- ãƒãƒ¼ã‚«ãƒ«
+ 本地的
- リファレンス
+ å‚考资料
@@ -62,41 +62,38 @@
-
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
- å°
+ å°åž‹çš„
- ä¸é–“
+ ä¸åž‹çš„
- 大
+ 大型的
-
-
-
-
+
+
+
+
@@ -123,20 +120,20 @@
Group:
- The Lindens
+ 林登家æ—的人
- 1オブジェクトã€1基本è¦ç´
+ 1个东东, 1个å¤è‘£
- 許å¯ï¼š
+ 许å¯è¯:
- ã“ã®ã‚ªãƒ–ジェクトを修æ£ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+ ä½ å¯ä»¥ä¿®é¥°è¿™ä»¶ä¸œä¸œ.
+ tool_tip="å…许社团æˆå‘˜æ¥ç§»åŠ¨ï¼Œæ”¹è¿›ï¼Œå¤åˆ¶ä»¥åŠåˆ 除Allow group members to move, modify, copy and delete." />
契约...
@@ -144,8 +141,8 @@
转让
-
+ tool_tip="社团共享的东东å¯è¢«ç¤¾å›¢å®˜å‘˜è®¤å¯ã€‚" />
+
@@ -169,23 +166,23 @@
- 左クリックã ã£ãŸå ´åˆï¼š
+ å½“ç‚¹å‡»é¼ æ ‡å·¦é”®æ—¶:
- 触るï¼æŽ´ã‚€ï¼ˆãƒ‡ãƒ•ã‚©ãƒ«ãƒˆï¼‰
+ 触摸/抢走 (默认)
- オブジェクトã«åº§ã‚‹
+ å在东东上
- オブジエクトã®è³¼å…¥
+ è´ä¹°ä¸œä¸œ
- オブジェクトã®ä»£é‡‘を払ã†
+ å¿ä»˜ä¸œä¸œ
- é–‹ã
+ 打开
@@ -204,129 +201,129 @@
N:
- F:
+ F:
- ã“ã®ã‚ªãƒ–ジェクトを修æ£ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+ ä½ å¯ä»¥ä¿®é¥°è¿™ä»¶ä¸œä¸œ.
- ã“れらã®ã‚ªãƒ–ジェクトを修æ£ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+ ä½ å¯ä»¥ä¿®é¥°è¿™äº›ä¸œä¸œ.
- ã“ã®ã‚ªãƒ–ジェクトを修æ£ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。
+ ä½ ä¸èƒ½ä¿®é¥°è¿™ä¸ªä¸œä¸œ.
- ã“れらã®ã‚ªãƒ–ジェクトを修æ£ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。
+ ä½ ä¸èƒ½ä¿®é¥°è¿™äº›ä¸œä¸œ.
- 許å¯ã‚’è¨å®šã™ã‚‹ã«ã¯ã€ã‚ªãƒ–ジェクト全体をé¸æŠžã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+ 必须选择一个完整的对象æ¥è®¾ç½®è®¸å¯è¯
- パラメーターを編集ã™ã‚‹ã«ã¯ã€ä¸€ã¤ã®åŸºæœ¬è¦ç´ ã®ã¿é¸æŠžã—ã¦ãã ã•ã„。
+ åªèƒ½é€‰æ‹©ä¸€ä¸ªè®¸å¯æ¥ç¼–辑å‚数。
- オブジェクトã®ãƒ‘ラメーターを編集:
-
-
-
-
-
+ 编辑东东å‚æ•°:
+
+
+
+
+
- ä½ç½®ï¼ˆãƒ¡ãƒ¼ãƒˆãƒ«ï¼‰
+ ä½ç½® (ç±³)
- è¦æ¨¡ï¼ˆãƒ¡ãƒ¼ãƒˆãƒ«ï¼‰
+ 尺寸 (米)
- 回転(度)
+ 旋转 (角度)
- ç´ æ
+ ææ–™
- 石
+ 石头
金属
- グラス
+ 玻璃
- 木
+ 木头
- 肉体
+ 人体
- プラスãƒãƒƒã‚¯
+ 塑料的
- ã‚´ãƒ
+ 橡胶的
- å»ºé€ ç‰©ãƒ–ãƒãƒƒã‚¯ã‚¿ã‚¤ãƒ—
+ 创建阻ç¢ç±»åž‹
- ボックス
+ Box
- シリンダー
+ 圆柱体
- プリズãƒ
+ 棱柱
- çƒå½¢
+ çƒä½“
- トーラス
+ 圆环形
- ãƒãƒ¥ãƒ¼ãƒ–
+ 试管形
- リング
+ 环形
- パス・カット開始ã¨çµ‚了
+ 路径剪贴开始和结æŸ
- ä¸ç©ºã®å½¢
+ 窟窿
- 傾斜
+ 倾斜的
- ä¸ç©ºã®å½¢
+ 窟窿的形状
- デフォルト
+ 默认
- サークル
+ 圆圈
æ£æ–¹å½¢
@@ -336,93 +333,90 @@
- æ»ã‚Šã®é–‹å§‹ãŠã‚ˆã³çµ‚了
+ æ‰æ›²å¼€å§‹å’Œç»“æŸ
- テーパー
+ 锥形
- 穴寸法
+ 洞的尺寸
- 上部層
+ 首è¦å‰ªè´´
- プãƒãƒ•ã‚¡ã‚¤ãƒ«ã‚«ãƒƒãƒˆé–‹å§‹ãŠã‚ˆã³çµ‚了
+ 档案文件剪贴开始和结æŸ
- ã•ã–ãªã¿ã®ã¯ã˜ã‚ã¨çµ‚ã‚ã‚Š
+ èµ·ä¼å¼€å§‹å’Œç»“æŸ
- テーパー
+ 锥形
- åŠå¾„デルタ
+ åŠå¾„三角洲
- レボリューション
+ å˜é©
- 特徴を編集ã™ã‚‹ã«ã¯ã€ä¸€ã¤ã®åŸºæœ¬è¦ç´ ã®ã¿é¸æŠžã—ã¦ãã ã•ã„。
+ åªèƒ½é€‰æ‹©ä¸€ä¸ªè®¸å¯æ¥ç¼–辑性质。
- オブジェクトã®ç‰¹å¾´ã‚’編集:
+ 编辑东东属性:
-
-
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
颜色
-
-
+
+
-
+
-
+
+ tool_tip="点击这里æ¥æ‰“开色彩选择器" />
- é€æ˜Žåº¦ ï¼…
+ é€æ˜Žåº¦ %
-
+
- マッピング
+ 绘制地图
- デフォルト
+ 默认
- å¹³é¢
+ å¹³å¦çš„
- è¼ã
+ 亮度
@@ -432,118 +426,120 @@
低
- ä¸é–“
+ ä¸åž‹çš„
高
- 凹凸
+ å´Žå²–ä¸å¹³çš„
都ä¸
- 明るã•
+ 亮度
- æš—ã•
+ 暗度
- 木目調
+ 木纹
- 樹皮
+ æ ‘çš®
- レンガ
+ ç“·ç –
- ãƒã‚§ãƒƒã‚¯
+ æ–¹æ ¼
- コンクリート
+ æ··å‡åœŸ
- クラスティ・タイル
+ 甲壳
- カットストーン
+ å®çŸ³
- ディスク
+ 圆盘形
- ç ‚åˆ©
+ æ²™ç ¾
- ペトリディッシュ
+ çš¿å½¢
- 羽目æ¿
+ æ—è¾¹
- ストーン・タイル
+ 瓦片
- ã—ã£ãã„
+ 石ç°æ³¥
- å¸ã„è¾¼ã¿
+ å¸åŠ›
- 織り
+ 编织
- フェース毎ã«ç¹°ã‚Šè¿”ã™
+ ä¸€å¼ è„¸ä¸€å¼ è„¸çš„é‡å¤
-
-
-
-
+
+
+
+
- 回転(度)
+ 旋转 (角度)
- メートル毎ã«ç¹°ã‚Šè¿”ã™
+ 一米一米的é‡å¤
- フェース毎ã«ç¹°ã‚Šè¿”ã™
+ ä¸€å¼ è„¸ä¸€å¼ è„¸çš„é‡å¤
- メートル毎ã«ç¹°ã‚Šè¿”ã™
+ 一米一米的é‡å¤
- ãšã‚Œ
+ 跳出
-
-
+
+
- メディア・テクスãƒãƒ£ãƒ¼ã‚’æƒãˆã¦ãã ã•ã„。(ã¯ã˜ã‚ã«èªã¿è¾¼ã‚€å¿…è¦ãŒã‚ã‚Šã¾ã™)
+ 排列媒体资æº
+(å¿…é¡»é¦–å…ˆä¸Šä¼ )
-
+
-
+
- ä¾¡æ ¼ï¼š[AREA]平方メートルã‚ãŸã‚ŠL$[PRICE]
+ ä»·æ ¼: L$[PRICE]å…± [AREA]平方米.
- エリア:[AREA]平方メートル
+ é¢ç§¯: [AREA] 平方米.
-
-
-
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/floater_top_objects.xml b/linden/indra/newview/skins/xui/zh/floater_top_objects.xml
index 24d38e3..ad333a3 100644
--- a/linden/indra/newview/skins/xui/zh/floater_top_objects.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_top_objects.xml
@@ -14,37 +14,37 @@
- オブジェクトå:
+ 东东å称:
-
+
- 所有者å:
+ 主人的姓å:
-
+
- 上部スクリプト
+ 首è¦è„šæœ¬
- [COUNT]スクリプトã¯å…¨ä½“ã§[TIME]分ã‹ã‹ã‚Šã¾ã™
+ [COUNT]脚本å æ®äº†æ€»æ—¶é—´ä¸º[TIME]毫秒
- 時間
+ 时间
- 上部コライダー
+ 首è¦å†²å‡»æº
- 上部[COUNT]ã®ã‚ªãƒ–ジェクトã¯ã€å¤šãã®æ½œåœ¨çš„ãªè¡çªã‚’経験ã—ã¦ã„ã¾ã™ã€‚
+ 首è¦[COUNT]的东东å˜åœ¨å¾ˆå¤šæ½œåœ¨çš„冲çª
得分
- 何も見ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ
+ æ²¡æœ‰æ‰¾åˆ°ä»»ä½•ç›®æ ‡
diff --git a/linden/indra/newview/skins/xui/zh/floater_wearable_save_as.xml b/linden/indra/newview/skins/xui/zh/floater_wearable_save_as.xml
index bdab0d9..11db09a 100644
--- a/linden/indra/newview/skins/xui/zh/floater_wearable_save_as.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_wearable_save_as.xml
@@ -3,9 +3,9 @@
- 別åã§ä¿å˜ï¼š
+ å¦å˜ç‰©å“为:
- æ–°ã—ã„[DESC]
+ æ–°çš„[DESC]
diff --git a/linden/indra/newview/skins/xui/zh/floater_world_map.xml b/linden/indra/newview/skins/xui/zh/floater_world_map.xml
index 4e0661b..2e177e1 100644
--- a/linden/indra/newview/skins/xui/zh/floater_world_map.xml
+++ b/linden/indra/newview/skins/xui/zh/floater_world_map.xml
@@ -17,7 +17,7 @@
家
+ tool_tip="å°†ä½ çš„æˆ¿å±‹é—ªç”µä¼ è¿" />
分类目录
@@ -60,12 +60,12 @@
æˆ‘çš„åœ°æ ‡
-
+
按地区åæœç´¢
-
+
- 検索çµæžœï¼š
+ 查询结果:
@@ -74,18 +74,17 @@
ä½ç½®:
-
-
-
+
+
+
+ tool_tip="é—ªç”µä¼ è¾“åˆ°æŒ‡å®šåœ°ç‚¹" />
+ name="Show Destination" tool_tip="所选地区的ä¸å¿ƒåœ°å›¾ã€‚" />
+ tool_tip="åœæ¢è¿½è¸ª/跟踪" />
+ tool_tip="ä½ çš„åŒ–èº«æ‰€åœ¨åœ°åŒºçš„ä¸å¿ƒåœ°å›¾ã€‚" />
diff --git a/linden/indra/newview/skins/xui/zh/menu_inventory.xml b/linden/indra/newview/skins/xui/zh/menu_inventory.xml
index 66d71ee..254a793 100644
--- a/linden/indra/newview/skins/xui/zh/menu_inventory.xml
+++ b/linden/indra/newview/skins/xui/zh/menu_inventory.xml
@@ -1,67 +1,66 @@
-
+
-
-
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
-
-
+
+
-
-
+
+
-
+
diff --git a/linden/indra/newview/skins/xui/zh/menu_pie_attachment.xml b/linden/indra/newview/skins/xui/zh/menu_pie_attachment.xml
new file mode 100644
index 0000000..2cc9788
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/menu_pie_attachment.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/menu_pie_avatar.xml b/linden/indra/newview/skins/xui/zh/menu_pie_avatar.xml
new file mode 100644
index 0000000..9b7e7f8
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/menu_pie_avatar.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/menu_pie_land.xml b/linden/indra/newview/skins/xui/zh/menu_pie_land.xml
new file mode 100644
index 0000000..02f215c
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/menu_pie_land.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/menu_pie_object.xml b/linden/indra/newview/skins/xui/zh/menu_pie_object.xml
new file mode 100644
index 0000000..af33cfa
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/menu_pie_object.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/menu_pie_self.xml b/linden/indra/newview/skins/xui/zh/menu_pie_self.xml
new file mode 100644
index 0000000..2c2eb82
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/menu_pie_self.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/menu_viewer.xml b/linden/indra/newview/skins/xui/zh/menu_viewer.xml
new file mode 100644
index 0000000..1178367
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/menu_viewer.xml
@@ -0,0 +1,221 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/need_to_translate.xml b/linden/indra/newview/skins/xui/zh/need_to_translate.xml
index 62a7383..f5c8509 100644
--- a/linden/indra/newview/skins/xui/zh/need_to_translate.xml
+++ b/linden/indra/newview/skins/xui/zh/need_to_translate.xml
@@ -1,7 +1,284 @@
-floater_about_land.xml
+alerts.xml
+//GrantModifyRights/message
+
+
+
+ Granting modify rights to another resident allows them to change
+ANY objects you may have in-world. Be VERY careful when handing
+out this permission.
+Do you want to grant modify rights for [FIRST_NAME] [LAST_NAME]?
+
+
+alerts.xml
+//GrantModifyRights/Yes
+
+
+
+ Yes
+
+
+alerts.xml
+//GrantModifyRights/No
+
+
+
+ No
+
+
+alerts.xml
+//RevokeModifyRights/message
+
+
+
+ Do you want to revoke modify rights for [FIRST_NAME] [LAST_NAME]?
+
+
+alerts.xml
+//RevokeModifyRights/Yes
+
+
+
+ Yes
+
+
+alerts.xml
+//RevokeModifyRights/No
+
+
+
+ No
+
+
+alerts.xml
+//ConfirmNotecardSave/message
+
+
+
+ This notecard needs to be saved before the item can be copied or viewed. Save notecard?
+
+
+alerts.xml
+//ConfirmNotecardSave/Save
+
+
+
+ Save
+
+
+alerts.xml
+//ConfirmNotecardSave/Cancel
+
+
+
+ Cancel
+
+
+alerts.xml
+//RemoveMultipleFromFriends/message
+
+
+
+ Do you want to remove multiple friends from your friends list?
+
+
+alerts.xml
+//RemoveMultipleFromFriends/Remove
+
+
+
+ Remove
+
+
+alerts.xml
+//RemoveMultipleFromFriends/Cancel
+
+
+
+ Cancel
+
+
+alerts.xml
+//GrantedModifyRights/message
+
+
+
+ You have been granted the privilege to modify [FIRST_NAME] [LAST_NAME]'s objects.
+
+
+alerts.xml
+//RevokedModifyRights/message
+
+
+
+ Your privilege to modify [FIRST_NAME] [LAST_NAME]'s objects has been revoked
+
+
+alerts.xml
+//OnlyCopyContentsOfSingleItem/OK
+
+
+
+ OK
+
+
+alerts.xml
+//OnlyCopyContentsOfSingleItem/Cancel
+
+
+
+ Cancel
+
+
+alerts.xml
+//InvalidTerrainBitDepth/message
+
+
+
+ Couldn't set region textures:
+
+Terrain texture [TEXTURE_NUM] has an invalid bit depth of [TEXTURE_BIT_DEPTH].
+
+Replace texture [TEXTURE_NUM] with a 24 bit 512x512 or smaller image
+then click "Set" again.
+
+
+alerts.xml
+//InvalidTerrainSize/message
+
+
+
+ Couldn't set region textures:
+
+Terrain texture [TEXTURE_NUM] is too large at [TEXTURE_SIZE_X]x[TEXTURE_SIZE_Y].
+
+Replace texture [TEXTURE_NUM] with a 24 bit 512x512 or smaller image
+then click "Set" again.
+
+
+alerts.xml
+//MaxAllowedGroupsOnRegion/Bake
+
+
+
+ Bake
+
+
+alerts.xml
+//MaxAllowedGroupsOnRegion/Cancel
+
+
+
+ Cancel
+
+
+alerts.xml
+//WebLaunchSupport/message
+
+
+
+ Contact [SECOND_LIFE] Support.
+
+
+alerts.xml
+//WebLaunchSupport/Gotopage
+
+
+
+ Go to page
+
+
+alerts.xml
+//WebLaunchSupport/Cancel
+
+
+
+ Cancel
+
+
+alerts.xml
+//HelpReportAbuseEmailLL/message
+
+
+
+Use this tool to report violations of the Terms of Service
+and Community Standards. See:
+-
+http://secondlife.com/corporate/tos.php
+http://secondlife.com/corporate/cs.php
+-
+All reported abuses of the Terms of Service and Community Standards
+are investigated and resolved. You will receive an email informing you
+of the resolution when it occurs. You can also view the incident
+resolution on the Police Blotter at:
+-
+http://secondlife.com/community/blotter.php
+
+
+alerts.xml
+//HelpReportAbuseEmailEO/message
+
+
+
+IMPORTANT: This report will go to the owner of the
+region you are currently in and not to Linden Lab.
+-
+As a service to residents and visitors, the owner of
+the region you are in has elected to receive and resolve
+all reports originating in this region. Linden Lab will
+not investigate reports you file from this location.
+The region owner will resolve reports based on the local
+rules of this region as outlined in the estate Covenant.
+(View covenants by going to the World menu and selecting
+About Land.)
+-
+The resolution of this report applies only to this Region;
+Residents access to other areas of Second Life will not be
+affected by the outcome of this report. Only Linden Lab can
+restrict access to the entirety of Second Life.
+
+
+alerts.xml
+//ConfirmEmptyTrash/message
+
+
+
+ Are you sure you want to permanently remove
+the contents of your Trash folder?
+
+
+alerts.xml
+//ConfirmEmptyTrash/Yes
+
+
+
+ Yes
+
+
+alerts.xml
+//ConfirmEmptyTrash/No
+
+
+
+ No
+
+
+alerts.xml
+//CopySLURL/message
+
+
+
+ The following SLURL has been copied to your clipboard:
+
+ [SLURL]
+
+ Put it in a web page to give others easy access to this location or
+ try it out yourself by pasting it into the address bar of your web browser.
+
+
+floater_about_land.xml
/floaterland/landtab/land_options_panel/allow_label2
@@ -49,6 +326,22 @@
Chat
+floater_directory.xml
+/directory/Directory Tabs/land_sales_panel/type/MainlandSales
+
+
+
+ For Sale - Mainland
+
+
+floater_directory.xml
+/directory/Directory Tabs/land_sales_panel/type/EstateSales
+
+
+
+ For Sale - Estate
+
+
floater_friends.xml
/friends/friend_list
tool_tip
@@ -62,6 +355,14 @@
Name
floater_friends.xml
+/friends/rights_container/friend_name_label
+
+
+
+ Select friend(s) to change rights...
+
+
+floater_friends.xml
/friends/rights_container/online_status_cb
label
@@ -105,91 +406,77 @@
Processing rights change...
-floater_instant_message.xml
-/im_floater/chat_editor
-label
-
-Click here to instant message
-
-floater_settings_debug.xml
-/settings_debug/color_swatch
-label
+floater_inspect.xml
+/inspect
+title
-Color
+Inspect Objects
-floater_world_map.xml
-/worldmap/location
-label
+floater_inspect.xml
+/inspect/object_list
+tool_tip
-Search by Region Name
+Select an object from this list to highlight it in-world
-menu_viewer.xml
-/Main Menu/View/Toggle Fullscreen
+floater_inspect.xml
+/inspect/object_list/object_name
label
-Toggle Fullscreen
+Object Name
-menu_viewer.xml
-/Main Menu/View/Set UI Size to Default
+floater_inspect.xml
+/inspect/object_list/owner_name
label
-Set UI Size to Default
+Owner Name
-menu_viewer.xml
-/Main Menu/Help/Contact Support...
+floater_inspect.xml
+/inspect/object_list/creator_name
label
-Contact Support...
+Creator Name
-menu_viewer.xml
-/Main Menu/Help/Help Request...
+floater_inspect.xml
+/inspect/object_list/creation_date
label
-Help Request...
-
-panel_chat_bar.xml
-/chat/History
-tool_tip
-
-Click here to see what has been said
+Creation Date
-panel_chat_bar.xml
-/chat/Chat Editor
+floater_inspect.xml
+/inspect/button owner
label
-Click here to chat.
+See Owner Profile...
-panel_chat_bar.xml
-/chat/Say
-tool_tip
+floater_inspect.xml
+/inspect/button owner
+label_selected
-(Enter)
+
-panel_chat_bar.xml
-/chat/Shout
+floater_inspect.xml
+/inspect/button owner
tool_tip
-(Ctrl-Enter)
+See profile of the highlighted object's owner
-panel_group_notices.xml
-/notices_tab/panel_create_new_notice/drop_target
-tool_tip
+floater_inspect.xml
+/inspect/button creator
+label
-Drag an inventory item onto the message box to send it with the notice. You must have permission to copy and transfer the object to send it with the notice.
+See Creator Profile...
-panel_preferences_im.xml
-/im/directory_visibility
-label
+floater_inspect.xml
+/inspect/button creator
+label_selected
-Show Online Status in Search
+
-panel_preferences_im.xml
-/im/text_box3
-
+floater_inspect.xml
+/inspect/button creator
+tool_tip
-
- Busy Mode Response:
-
+See profile of the highlighted object's original creator
diff --git a/linden/indra/newview/skins/xui/zh/need_to_update.xml b/linden/indra/newview/skins/xui/zh/need_to_update.xml
index 1504d2c..41f9188 100644
--- a/linden/indra/newview/skins/xui/zh/need_to_update.xml
+++ b/linden/indra/newview/skins/xui/zh/need_to_update.xml
@@ -1,7 +1,261 @@
-floater_about.xml
+alerts.xml
+//CannotDeedLandNoRegion/message
+
+
+ Unable to deed land:
+Cannot find the region this land is in.
+Please use Help -> Report Bug to report this.
+
+
+ Unable to deed land:
+Cannot find the region this land is in.
+Please use Tools -> Report Bug to report this.
+
+
+ æ— æ³•è½¬è®©åœŸåœ°:
+æ— æ³•æ‰¾åˆ°æ¤åœŸåœ°æ‰€å±žçš„区域。
+请使用帮助 -> 报告æ¼æ´žæ¥æŠ¥å‘Šæ¤é¡¹é”™è¯¯ã€‚
+
+alerts.xml
+//CannotButLandRegionNotFound/message
+
+
+ Unable to buy land:
+Cannot find the region this land is in.
+Please use Help -> Report Bug to report this.
+
+
+ Unable to buy land:
+Cannot find the region this land is in.
+Please use Tools -> Report Bug to report this.
+
+
+ æ— æ³•è´ä¹°åœŸåœ°:
+æ— æ³•æ‰¾åˆ°è¯¥åœŸåœ°æ‰€åœ¨åŒºåŸŸã€‚
+请使用帮助 -> 报告æ¼æ´žæ¥å‘我们报告这项错误。
+
+alerts.xml
+//CannotReleaseLandRegionNotFound/message
+
+
+ Unable to abandon land:
+Cannot find the region this land is in.
+Please use Help -> Report Bug to report this.
+
+
+ Unable to abandon land:
+Cannot find the region this land is in.
+Please use Tools -> Report Bug to report this.
+
+
+ æ— æ³•æ”¾å¼ƒåœŸåœ°:
+æ— æ³•æ‰¾åˆ°æ¤åœŸåœ°æ‰€å±žçš„区域。
+请使用帮助 -> 报告æ¼æ´žæ¥æŠ¥å‘Šè¿™ä¸ªé”™è¯¯ã€‚
+
+alerts.xml
+//CannotDivideLandNoRegion/message
+
+
+ Unable to divide land:
+Cannot find the region this land is in.
+Please use Help -> Report Bug to report this.
+
+
+ Unable to divide land:
+Cannot find the region this land is in.
+Please use Tools -> Report Bug to report this.
+
+
+ æ— æ³•åˆ’åˆ†åœŸåœ°:
+ æ— æ³•æ‰¾åˆ°åœŸåœ°æ‰€å±žåŒºåŸŸã€‚
+请使用帮助 -> 报告æ¼æ´žæ¥æŠ¥å‘Šæ¤é¡¹é”™è¯¯ã€‚
+
+alerts.xml
+//CannotJoinLandNoRegion/message
+
+
+ Unable to join land:
+Cannot find the region this land is in.
+Please use Help -> Report Bug to report this.
+
+
+ Unable to join land:
+Cannot find the region this land is in.
+Please use Tools -> Report Bug to report this.
+
+
+ æ— æ³•è¿žæŽ¥åœŸåœ°:
+æ— æ³•æ‰¾åˆ°è¯¥åœŸåœ°æ‰€å±žçš„åŒºåŸŸ.
+请使用帮助 -> 报告程åºæ¼æ´ž,让我们知é“问题所在.
+
+alerts.xml
+//CannotSaveToAssetStore/message
+
+
+ Unable to save [NAME] to central asset store.
+This is usually a temporary failure. Please
+customize and save the wearable again in a
+few minutes. If this problem persists, please
+click on the 'Help | Report Bug' pull down menu
+and provide details about your network setup.
+
+
+ Unable to save [NAME] to central asset store.
+This is usually a temporary failure. Please
+customize and save the wearable again in a
+few minutes. If this problem persists, please
+click on the 'Tools | Report Bug' pull down menu
+and provide details about your network setup.
+
+
+ æ— æ³•å‚¨å˜[NAME]至终属资产å˜å‚¨.
+这通常是暂时性功能障ç¢ã€‚请用户化åŽå†æ¬¡ä¿å˜ã€‚
+如果问题ä¾ç„¶å˜åœ¨ï¼Œè¯·ç‚¹å‡»
+帮助/报告æ¼æ´žå¹¶æä¾›
+客户网络设置的具体信æ¯ã€‚
+
+alerts.xml
+//AddFriend/message
+
+
+ Friends can track each other on the map and
+will receive online status updates.
+
+Offer friendship to [NAME]?
+
+
+ Friends can give permissions to
+track each other on the map and
+receive online status updates.
+
+Offer friendship to [NAME]?
+
+
+ 好å‹ä»¬å¯ä»¥åœ¨åœ°å›¾ä¸Šäº’相追踪,并å¯ä»¥åœ¨çº¿æŽ¥å—æ›´æ–°ä¿¡æ¯.
+
+是å¦å‘é€å‹è°Šå¡ç»™[NAME]?
+
+alerts.xml
+//DownloadMacMandatory/message
+
+
+ A new version of [SECOND_LIFE] is available.
+[MESSAGE]
+
+You must download this update to use the system.
+
+Download to your Applications folder?
+
+
+ A new version of [SECOND_LIFE] is available.
+[MESSAGE]
+
+You must download this update to use the system.
+
+Download to your Applications folder?
+
+
+ [SECOND_LIFE]有新版本å¯ç”¨ã€‚
+[MESSAGE]
+
+ä½ å¿…é¡»ä¸‹å†æ¬¡æ›´æ–°æ‰èƒ½è¿è¡Œç³»ç»Ÿã€‚
+是å¦ä¸‹è½½æ›´æ–°è‡³åº”用软件文件夹?
+
+alerts.xml
+//AddClassified/message
+
+
+ Classified ads appear in the 'Classified' section of the
+Search directory for one week.
+
+Fill out your ad, then click 'Publish...' to add it to the
+directory.
+
+You'll be asked for a price to pay when clicking Publish.
+Paying more makes your ad appear higher in the list, and
+also appear higher when people search for keywords.
+
+
+ Classified ads appear in the 'Classified' section of the
+Find directory for one week.
+
+Fill out your ad, then click 'Publish...' to add it to the
+directory.
+
+You'll be asked for a price to pay when clicking Publish.
+Paying more makes your ad appear higher in the list, and
+also appear higher when people search for keywords.
+
+
+ 分类广告会在查找å录的'Classified'æ 目里ä¿ç•™ä¸€å‘¨æ—¶é—´ã€‚
+
+
+å¡«å†™ä½ çš„å¹¿å‘Š,然åŽç‚¹å‡»'å‘布...'ï¼Œæ—¢æ·»åŠ å¹¿å‘Šè‡³å¹¿å‘Šå录ä¸ã€‚
+当点击å‘å¸ƒæ—¶ï¼Œä½ å°†è¢«è¦æ±‚支付å‘布广告费用. 大é¢æ”¯ä»˜æ„味ç€ä½ 的广告会在åå•è¾ƒå‰çš„地方出现,并且当用关键è¯æŸ¥æ‰¾æ—¶ï¼Œä½ 的广告也出现在查询结果较高的ä½ç½®ä¸Šã€‚
+
+alerts.xml
+//HelpEstateExternallyVisible
+title
+Visible From Mainland
+Public Access
+从大陆å¯è§†
+alerts.xml
+//HelpEstateExternallyVisible/message
+
+
+ Sets whether residents who are in the Linden owned 'mainland'
+estates can see your estate on the world map.
+
+Default: on
+
+
+ Sets whether residents who are on other estates can enter this
+ estate without being on an access list.
+
+Default: on
+
+
+ 设置在林登所拥有的'大陆'领地内的居民
+是å¦èƒ½ä»Žåœ°å›¾ä¸Šçœ‹åˆ°ä½ 的领地。
+
+默认:å¯ä»¥
+
+alerts.xml
+//HelpReportBug/message
+
+
+ Use this tool to report technical features that do not perform
+as described or expected. All bug reports are investigated and
+resolved. No email response will be sent, you may reply to the
+auto-response email to add more details to your report.
+If you are having a technical difficulty, please contact Support at:
+
+http://secondlife.com/community/support.php
+
+
+ Use this tool to *only* report technical features that do not perform as
+described or expected, please provide as much detail as possible, You
+may reply to the auto-response email to add more details to your report.
+All bug reports are investigated and assessed. No email response will be sent.
+-
+If you are having a technical difficulty, please contact Support at:
+http://secondlife.com/community/support.php
+-
+Note: Incomplete reports will not be investigated
+
+
+ Use this tool to report technical features that do not perform
+as described or expected. All bug reports are investigated and
+resolved. No email response will be sent, you may reply to the
+auto-response email to add more details to your report.
+If you are having a technical difficulty, please contact Support at:
+
+http://secondlife.com/community/support.php
+
+floater_about.xml
/floater_about/credits_editor
@@ -59,14 +313,14 @@ All rights reserved. See licenses.txt for details.
Don't hassle the hoff.
- Second Lifeã¯ã€Philipã€Andrewã€Tessaã€Coryã€Frankã€Jamesã€Dougã€Hunterã€Richardã€Johnã€Ericã€Aviã€AaronBã€AaronYã€Ianã€Peterã€Markã€Robinã€Stephenã€Tracyã€Ryanã€Albertoã€Haneyã€Tanyaã€JimJã€Danã€Benã€Stephanieã€Timã€Evanã€Catherineã€Colinã€Chrisã€Reubenã€Charityã€Jeskaã€Jamesã€JonHenryã€Kellyã€Callumã€Charã€Danielã€DavidFã€Donã€Jeffã€Laurenã€Leeã€Michaelã€Ramziã€Vektorã€Steveã€TomYã€Tessã€Konaã€Brentã€Clarissaã€PeterPã€Jesseã€Annetteã€Cynã€Blueã€Ginsuã€Jonathanã€Karenã€Adamã€Novaã€Deanaã€Lizzieã€Patsyã€DavidKã€Isaacã€Pathfinderã€Monroeã€Jillã€Bennyã€Altruimaã€Rheyaã€Jenniferã€Jackã€DavePã€Bradã€Mickã€Babbageã€Elisabethã€Brianã€Bethã€Dataã€Ethanã€Wendyã€Nicoleã€Skyã€Jeffreyã€Zeroã€Coffeeã€Teslaã€Kennyã€Makikoã€Nigelã€Teepleã€Lucyã€Miaã€Deeã€Guyã€Harryã€Lianaã€Brankaã€Jimboã€Auraã€Vasudaã€SarahDã€bethanyeã€Torleyã€Runitaiã€MikeSã€PaulMã€Miloã€Hermiaã€JoeMã€Melanieã€Rejeanã€DSmithã€SMillerã€Susanã€Joseã€DongYunã€Justinã€Andreyã€Syrahã€Donovanã€Henrikã€Noraã€Lexieã€ACã€Donnaã€ChrisCã€Alexã€Leylaã€Kyleã€Mathewã€Devinã€Joshuaã€DanCã€Jessicaã€Harmonyã€Claudiaã€Tramelã€Glennã€Betsyã€Fritzã€Junã€Adamã€Cassandraã€Kenã€RyanWã¨ã€ãã®ä»–多数ã®äººé”ã«ã‚ˆã£ã¦ä½œæˆã•ã‚Œã¾ã—ãŸã€‚
+ 第二人生的推出应感谢以下人物的贡献: Philip, Andrew, Tessa, Cory, Frank, James, Doug, Hunter, Richard, John, Eric, Avi, AaronB, AaronY, Ian, Peter, Mark, Robin, Stephen, Tracy, Ryan, Alberto, Haney, Tanya, JimJ, Dan, Ben, Stephanie, Tim, Evan, Catherine, Colin, Chris, Reuben, Charity, Jeska, James, JonHenry, Kelly, Callum, Char, Daniel, DavidF, Don, Jeff, Lauren, Lee, Michael, Ramzi, Vektor, Steve, TomY, Tess, Kona, Brent, Clarissa, PeterP, Jesse, Annette, Cyn, Blue, Ginsu, Jonathan, Karen, Adam, Nova, Deana, Lizzie, Patsy, DavidK, Isaac, Pathfinder, Monroe, Jill, Benny, Altruima, Rheya, Jennifer, Jack, DaveP, Brad, Mick, Babbage, Elisabeth, Brian, Beth, Data, Ethan, Wendy, Nicole, Sky, Jeffrey, Zero, Coffee, Tesla, Kenny, Makiko, Nigel, Teeple, Lucy, Mia, Dee, Guy, Harry, Liana, Branka, Jimbo, Aura, Vasuda, SarahD, bethanye, Torley, Runitai, MikeS, PaulM, Milo, Hermia, JoeM, Melanie, Rejean, DSmith, SMiller, Susan, Jose, DongYun, Justin, Andrey, Syrah, Donovan, Henrik, Nora, Lexie, AC, Donna, ChrisC, Alex, Leyla, Kyle, Mathew, Devin, Joshua, DanC, Jessica, Harmony, Claudia, Tramel, Glenn, Betsy, Fritz, Jun, Adam, Cassandra, Ken, RyanW and many others.
+
+感谢以下居民,他们的帮助ä¿è¯äº†è¿™æ¬¡ç¬¬äºŒäººç”Ÿçš„版本是有å²ä»¥æ¥æœ€å‡ºè‰²çš„: Kyrah Abattoir, Icesis Anansi, Clifton Antonelli, Nargus Asturias, Justizin Austinmer, Drake Bacon, Bitzer Balderdash, McWheelie Baldwin, SuezanneC Baskerville, Sweetheart Baskerville, Logan Bauer, Malarthi Behemoth, phoenix Behemoth, Eva Bellambi, Samgame Bertrand, Woody Blair, Tin Bling, Bibi Book, Barney Boomslang, Eric Boyer, Chromal Brodsky, Kerian Bunin, Lara Bunin, BigRick Byrd, Jillian Callahan, Hypatia Callisto, Frans Charming, nathalie Christensen, Francis Chung, pizzaguy Clutterbuck, Evo Commons, Entity Cosmo, Grazel Cosmo, Tiger Crossing, Fremont Cunningham, Jaki Daligdig, Sugar Darling, Todd David, Norman Desmoulins, Gxeremio Dimsum, Happy Dimsum, Kim Dingo, Roy Domela, Cory Edo, Delu Elytis, DBDigital Epsilon, Leeza Everett, Garth FairChang, Snowflake Fairymeadow, Khamon Fate, lex Fitzcarraldo, Kitto Flora, Angel Fluffy, CrystalShard Foo, Raudf Fox, Govindira Galatea, Rizpah Galatea, Tre Giles, Gattz Gilman, Kex Godel, Armandi Goodliffe, Tsu Goodliffe, Nickolas Goodman, Damen Gorilla, Nytemyst Grace, Mhaijik Guillaume, Gleeb Gupte, Ebonfire Harbinger, Bethanee Heaney, Jenny Hicks, Sandling Honey, Victoria Jacques, Adso Krogstad, Travis Lambert, simon Lameth, Duffy Langdon, Aaron Levy, Jade Lily, Gwyneth Llewelyn, Lola Lollipop, Michi Lumin, KaiLastOfTheBrunnenG Macdonald, Jesse Malthus, Herry Maltz, Seth Mandelbrot, Raavi Mann, Shirley Marquez, Dnate Mars, Ima Mechanique, Hawk Mendicant, Mercury Metropolitan, Haravikk Mistral, Trent Mondrian, Nexus Nash, Seraph Nephilim, Lewis Nerd, Aurael Neurocam, Lex Neva, Prokofy Neva, Seagel Neville, Kate Nicholas, Didde Nielsen, Richard Noonan, crevan Nori, Maczter Oddfellow, vanler Odets, Fat Ogre, Hamncheese Omlet, Strife Onizuka, Panthar Orlowski, Jessica Ornitz, Ron Overdrive, OmniCron Overlord, Dargon Pacer, Kar Parks, Eloise Pasteur, Caliandris Pendragon, Julianna Pennyfeather, Iron Perth, Shawk Pertwee, Mera Pixel, Elle Pollack, Phoenix Psaltery, Hank Ramos, Jon Ree, Tam Ree, Zi Ree, Jon Rolland, BamBam Sachertorte, kai Sachertorte, Mily Sartre, ice Semple, Desmond Shang, DigiKatt Shaw, Felix Sholokhov, Rhyph Somme, Rain Soothsayer, Oz Spade, squeekachu Spearmann, Wesley Spengler, Belaya Statosky, eltee Statosky, Khashai Steinbeck, Draco Steinhardt, Hope Stilman, Ashen Stygian, Seifert Surface, Gigs Taggart, Dolmere Talamasca, JayJay Talamasca, Becky Tardis, Fenris Tardis, Cubey Terra, Osprey Therian, Millie Thompson, John Toonie, Charlene Trudeau, Lyr Tuppakaka, Indy Turner, Luthien Unsung, Random Unsung, Huns Valen, Valdemar Virgo, Gordon Wendt, Mike Westerburg, Wayfinder Wishbringer, Lee Wormser, Aimee Xia, nimrod Yaffle, Yiffy Yaffle, Elle74 Zaftig and many others.
-ã“ã‚ŒãŒã€ç¾åœ¨ã®æœ€é«˜ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã‚ã‚‹ã“ã¨ã‚’ä¿è¨¼ã™ã‚‹ãŸã‚ã«ã€æ”¯æ´ã—ã¦ãã‚ŒãŸæ¬¡ã®å±…ä½è€…ã®æ–¹ã€…ã«åŽšãæ„Ÿè¬ã„ãŸã—ã¾ã™ã€‚
-Kyrah Abattoirã€Icesis Anansiã€Clifton Antonelliã€Nargus Asturiasã€Justizin Austinmerã€Drake Baconã€Bitzer Balderdashã€McWheelie Baldwinã€SuezanneC Baskervilleã€Sweetheart Baskervilleã€Logan Bauerã€Malarthi Behemothã€phoenix Behemothã€Eva Bellambiã€Samgame Bertrandã€Woody Blairã€Tin Blingã€Bibi Bookã€Barney Boomslangã€Eric Boyerã€Chromal Brodskyã€Kerian Buninã€Lara Buninã€BigRick Byrdã€Jillian Callahanã€Hypatia Callistoã€Frans Charmingã€nathalie Christensenã€Francis Chungã€pizzaguy Clutterbuckã€Evo Commonsã€Entity Cosmoã€Grazel Cosmoã€Tiger Crossingã€Fremont Cunninghamã€Jaki Daligdigã€Sugar Darlingã€Todd Davidã€Norman Desmoulinsã€Gxeremio Dimsumã€Happy Dimsumã€Kim Dingoã€Roy Domelaã€Cory Edoã€Delu Elytisã€DBDigital Epsilonã€Leeza Everettã€Garth FairChangã€Snowflake Fairymeadowã€Khamon Fateã€lex Fitzcarraldoã€Kitto Floraã€Angel Fluffyã€CrystalShard Fooã€Raudf Foxã€Govindira Galateaã€Rizpah Galateaã€Tre Gilesã€Gattz Gilmanã€Kex Godelã€Armandi Goodliffeã€Tsu Goodliffeã€Nickolas Goodmanã€Damen Gorillaã€Nytemyst Graceã€Mhaijik Guillaumeã€Gleeb Gupteã€Ebonfire Harbingerã€Bethanee Heaneyã€Jenny Hicksã€Sandling Honeyã€Victoria Jacquesã€Adso Krogstadã€Travis Lambertã€simon Lamethã€Duffy Langdonã€Aaron Levyã€Jade Lilyã€Gwyneth Llewelynã€Lola Lollipopã€Michi Luminã€KaiLastOfTheBrunnenG Macdonaldã€Jesse Malthusã€Herry Maltzã€Seth Mandelbrotã€Raavi Mannã€Shirley Marquezã€Dnate Marsã€Ima Mechaniqueã€Hawk Mendicantã€Mercury Metropolitanã€Haravikk Mistralã€Trent Mondrianã€Nexus Nashã€Seraph Nephilimã€Lewis Nerdã€Aurael Neurocamã€Lex Nevaã€Prokofy Nevaã€Seagel Nevilleã€Kate Nicholasã€Didde Nielsenã€Richard Noonanã€crevan Noriã€Maczter Oddfellowã€vanler Odetsã€Fat Ogreã€Hamncheese Omletã€Strife Onizukaã€Panthar Orlowskiã€Jessica Ornitzã€Ron Overdriveã€OmniCron Overlordã€Dargon Pacerã€Kar Parksã€Eloise Pasteurã€Caliandris Pendragonã€Julianna Pennyfeatherã€Iron Perthã€Shawk Pertweeã€Mera Pixelã€Elle Pollackã€Phoenix Psalteryã€Hank Ramosã€Jon Reeã€Tam Reeã€Zi Reeã€Jon Rollandã€BamBam Sachertorteã€kai Sachertorteã€Mily Sartreã€ice Sempleã€Desmond Shangã€DigiKatt Shawã€Felix Sholokhovã€Rhyph Sommeã€Rain Soothsayerã€Oz Spadeã€squeekachu Spearmannã€Wesley Spenglerã€Belaya Statoskyã€eltee Statoskyã€Khashai Steinbeckã€Draco Steinhardtã€Hope Stilmanã€Ashen Stygianã€Seifert Surfaceã€Gigs Taggartã€Dolmere Talamascaã€JayJay Talamascaã€Becky Tardisã€Fenris Tardisã€Cubey Terraã€Osprey Therianã€Millie Thompsonã€John Toonieã€Charlene Trudeauã€Lyr Tuppakakaã€Indy Turnerã€Luthien Unsungã€Random Unsungã€Huns Valenã€Valdemar Virgoã€Gordon Wendtã€Mike Westerburgã€Wayfinder Wishbringerã€Lee Wormserã€Aimee Xiaã€nimrod Yaffleã€Yiffy Yaffleã€Elle74 Zaftigã€ãã—ã¦ãã®ä»–多数ã®æ–¹ã€…。
-APR Copyright (C) 2000-2004 The Apache Software Foundation
-Cg Copyright (C) 2002, NVIDIA Corporationa.
-cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
+APR Copyright (C) 2000-2004 The Apache Software Foundation
+Cg Copyright (C) 2002, NVIDIA Corporationa.
+cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se)
expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd.
FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org).
GL Copyright (C) 1999-2004 Brian Paul.
@@ -78,11 +332,12 @@ OpenSSL Copyright (C) 1998-2002 The OpenSSL Project.
SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
-zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler.
+zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler.
+
+All rights reserved. 查看licenses.txt获å–细节.
-ç„¡æ–転写ã€è¤‡è£½ã€è»¢è¼‰ã‚’ç¦ã˜ã¾ã™ã€‚詳細㯠licenses.txt ã‚’ã”覧ãã ã•ã„。
-ã“ã‚Œã¯èª¤ä½œå‹•ã§ã¯ãªãã€ç‰¹å¾´ã§ã™ã€‚
+è¿™ä¸æ˜¯ä¸€æ¬¡æ•…障,而是一个特性.
floater_about_land.xml
/floaterland/landtab/land_options_panel/edit objects check
@@ -95,19 +350,33 @@ zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler.
label
Run Other Scripts
All Residents
-ä»–ã®ã‚¹ã‚¯ãƒªãƒ—トを起動
+è¿è¡Œå…¶å®ƒè„šæœ¬
floater_about_land.xml
/floaterland/landtab/land_options_panel/check group scripts
label
Run Group Scripts
Group
-グループスクリプトを起動
+è¿è¡Œç¤¾å›¢è„šæœ¬
floater_chat_history.xml
/chat floater/Mute resident
label
Mute resident
Mute
å±è”½å±…æ°‘
+floater_directory.xml
+/directory/Directory Tabs/popular_panel/These are the most popular places in the world, as measured by traffic, the amount of time people spend there.
+
+
+ These are the most popular places in the world, as measured by traffic,
+ the amount of time people spend there.
+
+
+ These are the most popular places in the world, as measured by traffic,
+the amount of time people spend there.
+
+
+ 这里有在第二人生世界里最æµè¡Œçš„场所,由交通状况,和人们在那里花费的时间长çŸæ¥è¡¡é‡ã€‚
+
floater_friends.xml
/friends/im_btn
label
@@ -143,7 +412,98 @@ If your answer is not there, please enter your question to begin, then allow a f
-=-=- Response times will vary, especially during peak times -=-=-
- ***よã†ã“ãライブ・ヘルプã¸ï¼ ã“ã“ã§ã¯ä»²é–“ã§ã‚る皆ã•ã‚“ã«ã€ã™ã°ã‚‰ã—ã„ボランティアé”ãŒSecond Lifeã®ã‚µãƒãƒ¼ãƒˆã‚’ã—ã¾ã™ï¼*** ã¾ãšåˆã‚ã«F1を押ã—ã€SLヘルプページをãƒã‚§ãƒƒã‚¯ã—ã¦ãã ã•ã„。 ãã“ã§å›žç”ãŒè¦‹ã¤ã‹ã‚‰ãªã„å ´åˆã¯è³ªå•ã‚’入力ã—ã€æ‰‹ã®ç©ºã„ãŸãƒ˜ãƒ«ãƒ‘ーãŒå¿œç”ã™ã‚‹ã¾ã§ã€æ•°åˆ†ãŠæŒã¡ãã ã•ã„。 終了ã™ã‚‹ã¾ã§ã€ãƒ©ã‚¤ãƒ–・ヘルプã¯é–‰ã˜ãªã„ã§ãã ã•ã„。返ç”ãŒãªã„å ´åˆã¯æ™‚é–“ã‚’ãŠã„ã¦ã€å†åº¦ã€è©¦ã¿ã¦ãã ã•ã„。 注æ„:ライブ・ヘルパーã¯ã€ŽLindenã€ãŒè‹—å—ã§ã‚ã‚‹å ´åˆã‚’除ãã€Lindenã®å¾“æ¥å“¡ã§ã¯ãªã„ãŸã‚ã€å›žç”ã¯éžå…¬å¼ãªã‚‚ã®ã¨ã¿ãªã—ã¾ã™ã€‚
+ *** 欢迎æ¥åˆ°åœ¨çº¿å¸®åŠ©ç«™,在这里,我们出色的志愿者们会å助他们的第二人生居民朋å‹ä»¬åœ¨ç¬¬äºŒäººç”Ÿé‡Œç²¾å½©çš„ç”Ÿæ´»ï¼ ***
+请先按F1键,进入第二人生帮助页é¢ã€‚å¦‚æžœä½ æƒ³è¦çš„ç”案ä¸åœ¨è¿™é‡Œï¼Œè¯·é”®å…¥ä½ 的问题,点击开始,ç‰å€™è‹¥å¹²åˆ†é’ŸåŽï¼Œåœ¨çº¿çš„å¸®åŠ©è€…ä¼šç»™ä½ å›žå¤ã€‚
+如果您的处ç†è¿‡ç¨‹æ²¡æœ‰ç»“æŸï¼Œè¯·ä¸è¦å…³é—在线帮助站的页é¢ã€‚å¦‚æžœæ‚¨æ²¡æœ‰å¾—åˆ°å›žåº”ï¼Œä½ å¯ä»¥ä¸€ç›´é€‰æ‹©é‡æ–°å°è¯•ä¸€é。
+注æ„: 在线帮助者并ä¸æ˜¯æž—登实验室的雇员, 所以,除éžå›žåº”人的姓æ°ä¸º'Linden',å¦åˆ™å›žå¤éƒ½åº”视为éžæ£å¼çš„.
+
+floater_preview_notecard.xml
+/preview notecard/Notecard Editor
+
+
+ Loading...
+
+
+Loading...
+
+
+ 请ç‰å¾…...
+
+floater_report_abuse.xml
+/floater_report_abuse/sim_title
+
+
+ Simulator:
+
+
+ Region:
+
+
+ 模拟器:
+
+floater_report_bug.xml
+/bug_reporter/dscr_title
+
+
+ Details:
+
+
+ Details: (Please provide as much information as possible)
+
+
+ 详细:
+
+floater_report_bug.xml
+/bug_reporter/details_edit
+
+
+ Steps to reproduce the bug:
+
+Observed results:
+
+Expected results:
+
+Steps to reproduce the bug:
+
+Observed results:
+
+Expected results:
+
+
+ ä¿®å¤æ¼æ´žçš„途径::
+
+观察的结果::
+
+floater_report_bug.xml
+/bug_reporter/bug_aviso
+
+
+ If this bug allows you to do something you should not be able
+to do, especially if it impacts performance or security, please
+select the 'Exploit' category. Thank you!
+
+
+Note: Incomplete reports will not be investigated
+If this bug allows you to do something you should not be able
+to do, especially if it impacts performance or security, please
+select the 'Exploit' category. Thank you!
+
+
+ If this bug allows you to do something you should not be able
+to do, especially if it impacts performance or security, please
+select the 'Exploit' category. Thank you!
+
+floater_script_ed_panel.xml
+/script panel/Script Editor
+
+
+ Loading...
+
+
+Loading...
+
+
+ 请ç‰å¾…...
floater_top_objects.xml
/top_objects/id_text
@@ -167,6 +527,63 @@ Object ID:
按地区åæœç´¢
+notify.xml
+//OfferFriendship/message
+
+
+ [NAME] is offering friendship.
+
+You will be able to track each other on
+the map and will receive online status
+updates.
+
+
+ [NAME] is offering friendship.
+
+ By default, you will be able to
+see each other's online status.
+
+
+ [NAME]æ£åœ¨å‘é€å¥½å‹é‚€è¯·.
+
+ä½ å¯ä»¥é€šè¿‡åœ°å›¾è¿½è¸ªå½¼æ¤ï¼Œå¹¶å°†æ”¶åˆ°å¥½å‹åœ¨çº¿çŠ¶æ€æ›´æ–°ã€‚
+
+notify.xml
+//FirstSandbox/message
+
+
+ This is a sandbox region.
+Objects you build here may be deleted after you
+leave the area, and the region will be wiped
+every [HOURS] hours starting at [TIME] AM Pacific Time.
+
+Sandbox regions are uncommon, and are marked with signs.
+
+
+ This is a sandbox region.
+Objects you build here may be deleted after
+you leave the area, Sandboxes clean on a regular basis, please refer to the information at the top of the screen next to the region name.
+
+Sandbox regions are uncommon, and are marked with signs.
+
+
+ 这是一å—沙盒区域。
+在这里创建的东东将在其离开这里åŽè¢«åˆ 除,且æ¤åŒºåŸŸå°†æ¯[HOURS]å°æ—¶æŠ¹åŽ»ä¸€æ¬¡æ‰€åˆ›å»ºä¸œä¸œï¼Œå§‹äºŽå¤ªå¹³æ´‹æ—¶é—´æ—©ä¸Š[TIME].
+
+沙盒区域并ä¸å¸¸è§, å¹¶ä¼šæœ‰ç‰¹æ®Šæ ‡è¯†æ ‡å‡ºã€‚
+
+panel_avatar.xml
+/Panel Avatar/tab/2nd Life/online_yes
+
+
+ Online: Yes
+
+
+ Currently Online
+
+
+ 是å¦åœ¨çº¿: 是
+
panel_media_remote.xml
/music_remote/text
@@ -177,7 +594,7 @@ Object ID:
Movies
- ムービー・コントãƒãƒ¼ãƒ«
+ 电影控制
panel_music_remote.xml
/music_remote/text
@@ -189,7 +606,7 @@ Object ID:
Music
- ミュージック・コントãƒãƒ¼ãƒ«
+ 音ä¹æŽ§åˆ¶
panel_preferences_chat.xml
/chat/arrow_keys_move_avatar_check
@@ -198,13 +615,37 @@ Object ID:
Arrow keys always move avatar when chatting
ï¼›èŠå¤©æ—¶å¯ç”¨ç®å¤´é”®ç§»åŠ¨ä½ 的化身
panel_preferences_general.xml
+/general_panel/language_combobox/Chinese
+
+
+ Chinese
+
+
+ Chinese - Beta
+
+
+ ä¸æ–‡
+
+panel_preferences_general.xml
+/general_panel/language_combobox/Deutsch(German)
+
+
+ Deutsch (German)
+
+
+ Deutsch (German) - Beta
+
+
+ Deutsch (German)
+
+panel_preferences_general.xml
/general_panel/language_combobox/(Japanese)
日本語 (Japanese)
- ??? (Japanese)
+ 日本語 (Japanese) - Beta
日本語 (Japanese)
@@ -216,7 +657,7 @@ Object ID:
í•œêµì–´ (Korean)
- ??? (Korean)
+ í•œêµì–´ (Korean) - Beta
í•œêµì–´ (Korean)
@@ -234,7 +675,7 @@ Object ID:
IM Options:
- Online Status in Search:
+ Profile Online Status:
å³æ—¶é€šé€‰é¡¹:
@@ -370,6 +811,6 @@ Object ID:
tool_tip
Talk to people nearby. Click Chat then History to see what has been said.
Talk to people nearby. (Enter)
-è¿‘ãã®äººã¨è©±ã‚’ã—ã¦ã¿ã¦ãã ã•ã„。 会話内容を見るã«ã¯ã€ã€Žãƒãƒ£ãƒƒãƒˆã€ã€ãã—ã¦ã€Žå±¥æ´ã€ã‚’クリックã—ã¦ãã ã•ã„。
+与附近的人交谈.点击交谈之åŽç‚¹å‡»åŽ†å²åŽ»æŸ¥æ‰¾äº¤è°ˆè®°å½•ã€‚
diff --git a/linden/indra/newview/skins/xui/zh/notify.xml b/linden/indra/newview/skins/xui/zh/notify.xml
index ddd6d68..ad3940d 100644
--- a/linden/indra/newview/skins/xui/zh/notify.xml
+++ b/linden/indra/newview/skins/xui/zh/notify.xml
@@ -7,232 +7,230 @@
- å–り消ã•ã‚Œã¾ã—ãŸ
+ å–消ã€
- 座るã®ã‚’å–り消ã•ã‚Œã¾ã—ãŸ
+ å–消å下
- 添付ã¯å–り消ã•ã‚Œã¾ã—ãŸ
+ å–消连接
- 紛失ã—ãŸæœï¼èº«ä½“部ä½ã‚’デフォルトã«ç½®ãæ›ãˆã¾ã™
+ 替æ¢é—失的衣æœ/身体组æˆä¸ºé»˜è®¤çŠ¶æ€ã€‚
- [FIRST][LAST]ãŒã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã«ãªã‚Šã¾ã—ãŸ
+ [FIRST] [LAST]在线
- [FIRST][LAST]ãŒã‚ªãƒ•ãƒ©ã‚¤ãƒ³ã«ãªã‚Šã¾ã—ãŸ
-
-
-
-
- You cannot add yourself as a friend.
+ [FIRST] [LAST]ä¸åœ¨çº¿
- ゲーム内ã¨Webサイトã®ã‚¹ãƒŠãƒƒãƒ—ショットをアップãƒãƒ¼ãƒ‰ã—ã¦ã„ã¾ã™â€¦ï¼ˆ5分程度ã‹ã‹ã‚Šã¾ã™ï¼‰
-
-
-
-
- You paid L$[AMOUNT] to upload.
+ æ£åœ¨ä¸Šä¼ 快照至游æˆå†…部和网页...
+(这个过程å¯èƒ½ä¼šæŒç»å¤§çº¦1分钟.)
- ゲーム内ã®ã‚¹ãƒŠãƒƒãƒ—ショットをアップãƒãƒ¼ãƒ‰ã—ã¦ã„ã¾ã™â€¦ï¼ˆ1分程度ã‹ã‹ã‚Šã¾ã™ï¼‰
+ ä¸Šä¼ å¿«ç…§è‡³æ¸¸æˆå†…部...
+(这个过程å¯èƒ½ä¼šæŒç»å¤§çº¦ä¸€åˆ†é’Ÿ.)
- ウェブサイトã®ã‚¹ãƒŠãƒƒãƒ—ショットã®ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰æ¸ˆã¿
+ 快照已ç»è¢«ä¸Šä¼ 至网页.
- ゲーム内スナップショットã®ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰æ¸ˆã¿
+ ä¸Šä¼ å¿«ç…§è‡³æ¸¸æˆå·²ç»å®Œæˆã€‚
- Terrain.rawをダウンãƒãƒ¼ãƒ‰æ¸ˆã¿
+ Terrain.raw下载完æˆ
- ã‚ãªãŸã®æ‰€å±žã—ã¦ã„るグループ数ãŒä¸Šé™ã«é”ã—ã¾ã—ãŸã€‚æ–°ãŸãªã‚°ãƒ«ãƒ¼ãƒ—を作æˆã™ã‚‹å‰ã«ã€æœ€ä½Žä¸€ã¤ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰è„±é€€ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+ ä½ åŠ å…¥è¿‡çš„ç¤¾å›¢å·²ç»è¾¾åˆ°äº†æœ€å¤§å€¼ã€‚ä½ å°†éœ€è¦ç¦»å¼€ä¸€äº›ç¤¾å›¢ï¼Œç„¶åŽä½ æ‰å¯ä»¥åˆ›å»ºæ–°çš„社团。
- ジェスãƒãƒ£ãƒ¼ãŒãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ã‚ã‚Šã¾ã›ã‚“
+ 动作已从数æ®åº“ä¸é—失.
- ジェスãƒãƒ£ãƒ¼ã‚’èªã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“。å†åº¦ã€è©¦ã¿ã¦ãã ã•ã„。
+ æ— æ³•è½½å…¥åŠ¨ä½œ.请å†å°è¯•ä¸€æ¬¡.
- ã‚ãªãŸã®æŒã¡ç‰©ãŒèªã¿è¾¼ã¾ã‚Œã¾ã™ã€‚
+ Your inventory is loaded.
- データベースã«ãƒ©ãƒ³ãƒ‰ãƒžãƒ¼ã‚¯ãŒã‚ã‚Šã¾ã›ã‚“
+ åœ°æ ‡ä»Žæ•°æ®åº“ä¸é—失。
- ランドマークをèªã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“。å†åº¦ã€è©¦ã¿ã¦ãã ã•ã„。
+ æ— æ³•è½½å…¥åœ°æ ‡.请å†è¯•ä¸€æ¬¡.
- ã‚ãªãŸã®Caps Lockã‚ーãŒã‚ªãƒ³ã«ãªã£ã¦ã„ã¾ã™ã€‚ã‚ãªãŸã®å…¥åŠ›ã™ã‚‹ãƒ‘スワードã«å½±éŸ¿ã‚’与ãˆã‚‹ãŸã‚ã€ã‚ªãƒ•ã«ã™ã‚‹ã“ã¨ã‚’推奨ã—ã¾ã™ã€‚
+ ä½ çš„å¤§å†™å—æ¯é”定已ç»å¼€å¯ã€‚
+所有的这些将影å“ä½ è¾“å…¥çš„å¯†ç ã€‚ä½ ä¸€å®šæƒ³è¦è§‚点大写å—æ¯é”定。
- ノートカードãŒãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ã‚ã‚Šã¾ã›ã‚“。
+ 注释å¡ä»Žæ•°æ®åº“ä¸é—失.
- ノートカード閲覧ã®ãŸã‚ã®è¨±å¯ãŒä¸å分ã§ã™ã€‚
+ 缺ä¹è®¸å¯è¯ï¼Œä¸å…许查看注释å¡ã€‚
- ノートカードをèªã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“。å†åº¦ã€è©¦ã¿ã¦ãã ã•ã„。
+ æ— æ³•è½½å…¥æ³¨é‡Šå¡.
+请å†å°è¯•ä¸€æ¬¡.
- データベースã«ã‚¹ã‚¯ãƒªãƒ—トãŒã‚ã‚Šã¾ã›ã‚“。
+ 脚本从数æ®åº“ä¸é—失.
- スクリプト閲覧ã®ãŸã‚ã®è¨±å¯ãŒä¸å分ã§ã™ã€‚
+ 缺ä¹è®¸å¯è¯ï¼Œä¸å…许查看脚本.
- スクリプトをèªã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“。å†åº¦ã€è©¦ã¿ã¦ãã ã•ã„。
+ æ— æ³•è½½å…¥è„šæœ¬.请å†å°è¯•ä¸€æ¬¡.
- ã‚ãªãŸãŒæä¾›ã™ã‚‹å®Œå…¨ãªã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯ã€ã¾ã ãƒãƒ¼ã‚«ãƒ«ã§ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“。ã—ã°ã‚‰ãã—ã¦ã‹ã‚‰ã€å†åº¦ã€ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’æä¾›ã—ã¦ãã ã•ã„。
+ ä½ æ供的完整内容尚ä¸èƒ½æœ¬åœ°æœ‰æ•ˆã€‚è¯·åœ¨å‡ åˆ†é’ŸåŽé‡æ–°æ供这些内容。
- ä¿è·ã•ã‚ŒãŸã‚«ãƒ†ã‚´ãƒªã®ä¿®æ£ã¯ã§ãã¾ã›ã‚“
+ ä½ ä¸èƒ½ä¿®æ”¹è¢«ä¿æŠ¤çš„分组。
- ä¿è·ã•ã‚ŒãŸã‚«ãƒ†ã‚´ãƒªã®ç§»å‹•ã¯ã§ãã¾ã›ã‚“
+ ä½ ä¸èƒ½ç§»é™¤è¢«ä¿æŠ¤çš„分组。
- [FIRST][LAST]ã«ã‚³ãƒ¼ãƒªãƒ³ã‚°ã‚«ãƒ¼ãƒ‰ã‚’ã‚ã’ã¾ã—ãŸã€‚
+ ä½ å·²ç»ç»™[FIRST] [LAST]æ供了一个通è¯å¡ã€‚
- [FIRST][LAST]ã«ãƒ•ãƒ¬ãƒ³ãƒ‰ã‚·ãƒƒãƒ—を申ã—è¾¼ã¿ã¾ã—ãŸã€‚
+ ä½ å·²ç»ç»™[FIRST] [LAST]æ供了å‹æƒ…å¡ã€‚
- オブジェクトã®ãƒ‡ãƒ¼ã‚¿ã‚’ダウンãƒãƒ¼ãƒ‰ã—ã¦ã„る最ä¸ã¯ã€è³¼å…¥ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。å†åº¦ã€è©¦ã¿ã¦ãã ã•ã„。
+ æ— æ³•åœ¨ä¸‹è½½ä¸œä¸œæ•°æ®æ—¶è´ä¹°.
+请å†å°è¯•ä¸€æ¬¡.
- オブジェクト・データをダウンãƒãƒ¼ãƒ‰ä¸ã¯ã€ãƒªãƒ³ã‚¯ã§ãã¾ã›ã‚“。å†åº¦ã€è©¦ã¿ã¦ãã ã•ã„。
+ 当下载东东数æ®æ—¶,ä¸èƒ½è¿žæŽ¥ä¸œä¸œ.请å†å°è¯•ä¸€æ¬¡.
- åŒæ™‚ã«ã€ç•°ãªã£ãŸæ‰€æœ‰è€…ã®ã‚ªãƒ–ジェクトを購入ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。å˜ä¸€ã®ã‚ªãƒ–ジェクトをé¸æŠžã—ã¦ãã ã•ã„。
+ æ— æ³•åŒæ—¶ä»Žä¸åŒä¸»äººå¤„è´ä¹°ä¸œä¸œ.
+请选择å•ç‹¬ä¸œä¸œå¹¶è´ä¹°.
- オブジェクトã¯è²©å£²å¯¾è±¡ã§ã¯ã‚ã‚Šã¾ã›ã‚“
+ 东东ä¸æ˜¯å¾…售状æ€.
- レベル[LEVEL]ã® God Modeã«å…¥ã‚Šã¾ã—ãŸã€‚
+ 进入神仙模å¼,æ°´å¹³[LEVEL]
- レベル[LEVEL]ã®God Modeを離脱ã—ã¾ã™ã€‚
+ 离开神仙模å¼ï¼Œæ°´å¹³[LEVEL]
- ã‚ãªãŸã«ã¯ã‚³ãƒ”ー許å¯ãŒãªã‹ã£ãŸãŸã‚ã€ã‚³ãƒ”ーã§ãã¾ã›ã‚“ã§ã—ãŸã€‚
+ å¤åˆ¶å¤±è´¥ï¼Œå› ä¸ºä½ æ²¡æœ‰å¤åˆ¶è®¸å¯è¯ã€‚
- [NAME]ã¯æ¸¡ã•ã‚ŒãŸæŒã¡ç‰©ã‚’å—ã‘å–ã‚Šã¾ã—ãŸã€‚
+ [NAME]å·²ç»æŽ¥å—äº†ä½ æ供的库å˜.
- [NAME]ã¯æ¸¡ã•ã‚ŒãŸæŒã¡ç‰©ã‚’å´ä¸‹ã—ã¾ã—ãŸ
+ [NAME]æ‹’ç»äº†ä½ æ供的库å˜.
- [NAME][MESSAGE]
+ [NAME]: [MESSAGE]
- ã‚ãªãŸã®ã‚³ãƒ¼ãƒªãƒ³ã‚°ã‚«ãƒ¼ãƒ‰ã¯å—ã‘å–られã¾ã—ãŸ
+ ä½ çš„é€šè¯å¡å·²ç»è¢«æŽ¥å—
- ã‚ãªãŸã®ã‚³ãƒ¼ãƒªãƒ³ã‚°ã‚«ãƒ¼ãƒ‰ã¯å´ä¸‹ã•ã‚Œã¾ã—ãŸ
+ ä½ çš„é€šè¯å¡è¢«æ‹’ç»ã€‚
- 今ã€ã‚ãªãŸã¯ã€æœ¬åœŸã«åˆ°é”ã—ã¾ã—㟠『[NAME]ã€ã¨è¨€ã†ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã™ã‚‹ã«ã¯ã€ç”»é¢å³ä¸‹ã«ã‚ã‚‹æŒã¡ç‰©ãƒœã‚¿ãƒ³ã‚’クリックã—ã€ãƒ©ãƒ³ãƒ‰ãƒžãƒ¼ã‚¯ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã‚’é¸æŠžã—ã¦ãã ã•ã„。ランドマークをダブルクリックã—ã€ãã“ã«è¡ŒããŸã‚ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã‚’ã—ã¦ãã ã•ã„。
+ çŽ°åœ¨ä½ å·²ç»åˆ°è¾¾å¤§é™†,ä½ å¯ä»¥é—ªç”µä¼ è¿è‡ªå·±è‡³ '[NAME]'åœ°ç‚¹ï¼Œé€šè¿‡ç‚¹å‡»ä½ å±å¹•ä¸‹ç«¯å³ä¾§çš„库å˜æŒ‰é’®,然åŽé€‰æ‹©åœ°æ ‡æ–‡ä»¶å¤¹.
+åŒå‡»åœ°æ ‡å¯ä»¥é—ªç”µä¼ è¿è‡ªå·±åˆ°è¾¾è¯¥å¤„.
- 今ã€ã‚ãªãŸã¯ãƒ¡ã‚¤ãƒ³ãƒ»ãƒ©ãƒ³ãƒ‰ã«åˆ°é”ã—ã¾ã—ãŸã€‚ ä½äººã®ã€Ž[NAME]ã€ã¨æŽ¥è§¦ã™ã‚‹ã®ã«ã¯ã€ç”»é¢å³ä¸‹ã«ã‚ã‚‹æŒã¡ç‰©ãƒœã‚¿ãƒ³ã‚’クリックã—ã€ã‚³ãƒ¼ãƒªãƒ³ã‚°ãƒ»ã‚«ãƒ¼ãƒ‰ãƒ»ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã‚’é¸æŠžã—ã¦ãã ã•ã„。カードをダブルクリックã—ã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ãƒˆãƒ»ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’クリックã—ã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡ã—ã¦ãã ã•ã„。
+ çŽ°åœ¨ä½ å·²ç»åˆ°è¾¾äº†å¤§é™†, çŽ°åœ¨ä½ å¯ä»¥è”系居民 '[NAME]'ï¼Œé€šè¿‡ç‚¹å‡»ä½ å±å¹•ä¸‹ç«¯å³ä¾§çš„库å˜æŒ‰é’®,然åŽå†é€‰æ‹©é€šè¯å¡æ–‡ä»¶å¤¹ã€‚
+åŒå‡»é€šè¯å¡ï¼Œç‚¹å‡»å³æ—¶æ¶ˆæ¯é€šï¼Œå¹¶é”®å…¥æ¶ˆæ¯.
- サーãƒã®å¢ƒç•Œã‚’越ãˆã¦åœŸåœ°ã‚’é¸æŠžã™ã‚‹ã“ã¯ã§ãã¾ã›ã‚“。もã£ã¨å°ã•ãªåœŸåœ°ã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ æ— æ³•è·¨æœåŠ¡å™¨é€‰æ‹©åœŸåœ°ã€‚请å°è¯•é€‰æ‹©ä¸€å—å°ä¸€ç‚¹çš„土地。
@@ -242,26 +240,26 @@
- [NAME]ã¯æŠ•ç¥¨ã®ç”³è«‹ã‚’ã—ã¦ã„ã¾ã™ï¼š
+ [NAME]æ议投票给:
[MESSAGE]
- 今ã™ã投票
+ 现在投票表决
- 後ã»ã©
+ ç¨åŽ
- [NAME]ã¯é¸æŒ™ã‚’ã¯ã˜ã‚ã¾ã—ãŸï¼š
+ [NAME]å·²ç»å¼€å§‹é€‰ä¸¾:
[MESSAGE]
- 今ã™ã投票
+ 现在投票表决
- 後ã»ã©
+ ç¨åŽ
@@ -280,7 +278,7 @@
é—ªç”µä¼ é€
- 説明:
+ æè¿°
å–消
@@ -288,8 +286,7 @@
- ãƒã‚¤ãƒ©ã‚¤ãƒˆã•ã‚ŒãŸå…¨ã¦ã®ã‚ªãƒ–ジェクトãŒã€æœ¬åŒºç”»ã®è³¼å…¥è€…ã«è²æ¸¡ã•ã‚Œã¾ã™ã€‚
-è²æ¸¡ã•ã‚Œã‚‹æ¨¹æœ¨ã‚„æ¤ç‰©ã¯ã€ãƒã‚¤ãƒ©ã‚¤ãƒˆã•ã‚Œã¾ã›ã‚“。
+ æ¤å¤„所有将éšåœŸåœ°ä¸€èµ·è½¬è®©ç»™ä¸šä¸»çš„东东将由高亮æ¡æ˜¾ç¤ºå¼ºè°ƒ
完æˆ
@@ -297,106 +294,112 @@
- åŒã˜ãƒˆãƒªã‚¬ãƒ¼ã§ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆã•ã‚Œãªã„ジェスãƒãƒ£ãƒ¼ï¼š
+ Deactivated gestures with same trigger:
[NAMES]
- ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŒä¸å®‰å®šãªãŸã‚ã€æŒã¡ç‰©ã‚’èªã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ã“ã‚Œã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æŽ¥ç¶šãŒæ‚ªã„ã“ã¨ã‚’示ã—ã¦ã„ã¾ã™ã€‚
+ ç”±äºŽç½‘ç»œæ•…éšœï¼Œæ— æ³•è½½å…¥åº“å˜ä¿¡æ¯ã€‚出现æ¤é—®é¢˜çš„åŽŸå› æ˜¯ç½‘ç»œè¿žæŽ¥æ€§èƒ½ä¸ç¨³å®šã€‚
- Apple社ã®QuickTimeãŒã‚ãªãŸã®ã‚·ã‚¹ãƒ†ãƒ ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ãªã„よã†ã§ã™ã€‚
-ストリーミング・メディアã®å†ç”Ÿã‚’è¡Œã„ãŸã„å ´åˆã¯ã€QuickTimeã®ã‚µã‚¤ãƒˆï¼ˆhttp://www.apple.com/quicktime)ã§ã€QuickTime Playerをインストールã—ã¦ãã ã•ã„。
+ 苹果公å¸çš„QuickTimeæ²¡æœ‰å®‰è£…åœ¨ä½ çš„æ“作系统ä¸ã€‚å¦‚æžœä½ å¸Œæœ›è§‚çœ‹åœ¨æ¸¸æˆä¸æ’放的媒体æµï¼Œåˆ™éœ€è¦ä»Žä»¥ä¸‹é¡µé¢ä¸‹è½½
+QuickTime(http://www.apple.com/quicktime)并安装QuickTime Player.
- é¸æŠžã•ã‚ŒãŸåœŸåœ°ä¸Šã«ã‚ã£ãŸã€ã‚ãªãŸæ‰€æœ‰ã®ã‚ªãƒ–ジェクトã¯ã€ã‚ãªãŸã®æŒã¡ç‰©ã«è¿”å´ã•ã‚Œã¾ã—ãŸã€‚
+ åœ¨æ‰€é€‰åœŸåœ°ä¸Šä½ æ‰€æ‹¥æœ‰çš„ä¸œä¸œå·²ç»è¢«å½’è¿˜è‡³ä½ çš„åº“å˜ä¸ã€‚
- é¸æŠžã•ã‚ŒãŸåœŸåœ°ä¸Šã«ã‚ã£ãŸã€[FIRST][LAST]所有ã®ã‚ªãƒ–ジェクトã¯ã€å½¼ï¼å½¼å¥³ã®æŒã¡ç‰©ã«è¿”å´ã•ã‚Œã¾ã—ãŸã€‚
+ 在所选的,归[FIRST] [LAST]所拥有的东东已ç»è¢«å½’还至本人的库å˜ä¸ã€‚
- é¸æŠžã•ã‚ŒãŸåœŸåœ°ä¸Šã«ã‚ã£ãŸã€å±…ä½è€…『[NAME]ã€æ‰€æœ‰ã®ã‚ªãƒ–ジェクトã¯ã€æ‰€æœ‰è€…ã«è¿”å´ã•ã‚Œã¾ã—ãŸã€‚
+ 在所选土地上归居民'[NAME]'所有的土地已ç»è¢«å½’还至它的主人处。
- é¸æŠžã•ã‚ŒãŸåœŸåœ°ä¸Šã«ã‚ã£ãŸã€ã‚°ãƒ«ãƒ¼ãƒ—[GROUPNAME]共有ã®ã‚ªãƒ–ジェクトã¯ã€ãã‚Œãžã‚Œã®æ‰€æœ‰è€…ã®æŒã¡ç‰©ã«è¿”å´ã•ã‚Œã¾ã—ãŸã€‚è²æ¸¡å¯èƒ½ãªã‚ªãƒ–ジェクトã¯ã€ä»¥å‰ã®æ‰€æœ‰è€…ã«è¿”å´ã•ã‚Œã¾ã—ãŸã€‚グループã«è²æ¸¡ã•ã‚ŒãŸè²æ¸¡ä¸å¯èƒ½ãªã‚ªãƒ–ジェクトã¯ã€å‰Šé™¤ã•ã‚Œã¾ã—ãŸã€‚
+ 在所选土地上,由社团[GROUPNAME]分享的东东已ç»è¢«å½’还至它们的主人的库å˜é‡Œã€‚
+å¯äº¤æ¢çš„被转让东东已ç»è¢«å½’还至它们先å‰ä¸»äººå¤„。
+ä¸å¯äº¤æ¢çš„è¢«è½¬è®©ä¸œä¸œå°†è¢«åˆ é™¤ã€‚
- é¸æŠžã•ã‚ŒãŸåœŸåœ°ä¸Šã«ã‚ã£ãŸã€ã‚ãªãŸãŒæ‰€æœ‰ã—ã¦ã„ãªã„オブジェクトã¯ã€æ‰€æœ‰è€…ã«è¿”å´ã•ã‚Œã¾ã—ãŸã€‚
+ 在这å—土地上,ä¸å±žäºŽä½ 的东东已ç»è¢«å½’还至它们的主人处。
- ã“ã®åœŸåœ°ã¯ãƒ€ãƒ¡ãƒ¼ã‚¸ãŒæœ‰åŠ¹ã«è¨å®šã•ã‚Œã¦ã„ã¾ã™ã€‚ (『安全ã§ã¯ãªã„ã€ï¼‰
-怪我をã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ã‚‚ã—ã€ã‚ãªãŸãŒæ»äº¡ã—ãŸå ´åˆã¯ã€ã‚ãªãŸã®ãƒ›ãƒ¼ãƒ ã«è»¢é€ã•ã‚Œã¾ã™ã€‚
+ è¿™å—土地有å±é™©å› ç´ ('ä¸å®‰å…¨').
+ä½ åœ¨è¿™é‡Œå¯èƒ½ä¼šå—ä¼¤ã€‚å¦‚æžœä½ æ»äº†ï¼Œä½ å°†ä¼šè¢«é—ªç”µä¼ è¿è‡ªä½ 自己家的ä½ç½®ã€‚
- ã“ã®åœŸåœ°ã§ã¯ã€é£›è¡ŒãŒç„¡åŠ¹ã«è¨å®šã•ã‚Œã¦ã„ã¾ã™ã€‚ (『飛行ç¦æ¢ã€ï¼‰
-ã“ã“ã§ã¯ã€é£›è¡Œã§ãã¾ã›ã‚“。
+ 在这å—åœŸåœ°ä¸Šèµ·é£žæ— æ•ˆ('ä¸èƒ½é£žè¡Œ').
+ä½ åœ¨è¿™é‡Œä¸èƒ½é£žè¡Œ.
- 本土地ã¯ã€ã€Žll PushObject制é™ã€ãŒè¨å®šã•ã‚Œã¦ã„ã¾ã™ã€‚土地ã®ã‚ªãƒ¼ãƒŠãƒ¼ä»¥å¤–ã€ã“ã“ã§ä»–者をプッシュã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。
+ è¿™å—土地是'é™åˆ¶11推动东东'.
+ä½ ä¸èƒ½æŽ¨åŠ¨è¿™é‡Œçš„任何东东,除éžä½ 是这里的主人.
- ã“ã®åœŸåœ°ã¯å»ºé€ 無効ã«è¨å®šã•ã‚Œã¦ã„ã¾ã™ã€‚ï¼ˆã€Žå»ºé€ ä¸å¯ã€ï¼‰
-ã“ã“ã§ã¯ã€ã‚ªãƒ–ジェクトを形æˆã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
+ è¿™å—åœŸåœ°ä¸Šæ— æ³•å»ºé€ ('ä¸èƒ½å»ºé€ ').
+ä½ ä¸èƒ½åœ¨æ¤å»ºé€ 东东。.
- 管ç†è€…ã«ã‚ˆã‚Šã€æœ¬åœ°åŸŸã§ã®ã‚¹ã‚¯ãƒªãƒ—トãŒä¸€æ™‚çš„ã«åœæ¢ã—ã¾ã—ãŸ
+ 游æˆç®¡ç†å‘˜æš‚æ—¶åœæ¢äº†è¯¥åœ°åŒºçš„脚本è¿è¡Œã€‚
- 本地域ã¯ã€ã„ã‹ãªã‚‹ã‚¹ã‚¯ãƒªãƒ—トも起動ã—ã¾ã›ã‚“。
+ 这个区域内没有è¿è¡Œä»»ä½•è„šæœ¬æ–‡ä»¶ã€‚
- ã“ã®åœŸåœ°ã§ã¯ã€å¤–部スクリプトãŒç„¡åŠ¹ã«è¨å®šã•ã‚Œã¦ã„ã¾ã™ã€‚(『外部スクリプトç¦æ¢ã€ï¼‰åœŸåœ°ã‚ªãƒ¼ãƒŠãƒ¼ã«å±žã™ã‚‹ç‰©ã‚’除ãã€ã‚¹ã‚¯ãƒªãƒ—トã¯èµ·å‹•ã—ã¾ã›ã‚“。
+ 在这å—åœŸåœ°ä¸Šå¤–éƒ¨è„šæœ¬æ— æ•ˆ
+('没有外部脚本').
+é™¤äº†å±žäºŽåœŸåœ°ä¸»äººçš„è„šæœ¬ï¼Œä»»ä½•å¤–éƒ¨è„šæœ¬åœ¨è¿™é‡Œéƒ½æ— æ³•è¿è¡Œ.
- オブジェクトã¯è¡¨é¢ä¸Šã«ä»¥ä¸‹ã®ã‚¦ã‚§ãƒ–ページã®è¡¨ç¤ºã‚’希望ã—ã¦ã„ã¾ã™ï¼š[URL]
+ 这件东东想在自己表é¢å±•ç¤ºå¦‚下网页:
+[URL]
- ページをèªã¿è¾¼ã‚€
+ 载入页é¢
- èªã¿è¾¼ã¿ç¦æ¢
+ é¿å…载入
- ã‚ãªãŸãŒã„る地域ã®å…¬å…±ã®åœŸåœ°ã‚’主張ã™ã‚‹ã“ã¨ã®ã¿ã§ãã¾ã™ã€‚
+ åªèƒ½è¦æ±‚åœ¨ä½ æ‰€åœ¨åŒºåŸŸçš„å…¬å…±åœŸåœ°ä¸Šã€‚
- [FIRST][LAST]ã«ã‚ˆã‚Šæ‰€æœ‰ã•ã‚Œã¦ã„るオブジェクトã®[OBJECTFROMNAME]ãŒã€ã‚ãªãŸã«ã€Ž[OBJECTNAME]ã€ã¨ã„ã†[OBJECTTYPE]を与ãˆã¾ã—ãŸ
+ 主人为[FIRST] [LAST]的东东[OBJECTFROMNAME] èµ ä¸Žä½ äº†å为 '[OBJECTNAME]'çš„ [OBJECTTYPE].
- ä¿ã¤
+ ä¿æŒ
放弃
@@ -407,10 +410,10 @@
- (未知ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ï¼‰ã«ã‚ˆã‚Šæ‰€æœ‰ã•ã‚Œã¦ã„るオブジェクトã®[OBJECTFROMNAME]ãŒã€ã‚ãªãŸã«ã€Ž[OBJECTNAME]ã€ã¨ã„ã†[OBJECTTYPE]を与ãˆã¾ã—ãŸã€‚
+ 主人为(未知用户)的东东[OBJECTFROMNAME] èµ ä¸Žä½ äº†å为 '[OBJECTNAME]'çš„ [OBJECTTYPE].
- ä¿ã¤
+ ä¿æŒ
放弃
@@ -421,10 +424,10 @@
- [NAME]ã¯ã€ã‚ãªãŸã«ã€Ž[OBJECTNAME]ã€ã¨ã„ã†[OBJECTTYPE]を与ãˆã¾ã—ãŸã€‚
+ [NAME]èµ é€ç»™ä½ 了一件[OBJECTTYPE]å为'[OBJECTNAME]'.
- ä¿ã¤
+ ä¿æŒ
放弃
@@ -452,7 +455,9 @@
- [NAME]ã¯ã€ã‚ãªãŸã‚’オフィサーã¨ã—ã¦ã‚°ãƒ«ãƒ¼ãƒ—ã«æ‹›å¾…ã—ã¦ã„ã¾ã™ã€‚å‚åŠ è²»ç”¨ã¯ã‹ã‹ã‚Šã¾ã›ã‚“。
+ [NAME]å·²ç»é‚€è¯·ä½ åŠ å…¥ä»–ä»¬çš„ç¤¾å›¢ï¼Œå¹¶æˆä¸ºç¤¾å›¢å®˜å‘˜ã€‚
+åŠ å…¥è¿™ä¸ªç¤¾å›¢æ— éœ€äº¤çº³ä»»ä½•è´¹ç”¨ã€‚
+
[MESSAGE]
@@ -464,7 +469,9 @@
- [NAME]ã¯ã€ã‚ãªãŸã‚’一般メンãƒãƒ¼ã¨ã—ã¦ã‚°ãƒ«ãƒ¼ãƒ—ã«æ‹›å¾…ã—ã¦ã„ã¾ã™ã€‚グループã¸ã®å‚åŠ è²»ç”¨ã¯L$[COST]ã§ã™ã€‚
+ [NAME]å·²ç»é‚€è¯·ä½ åŠ å…¥ä»–ä»¬çš„ç¤¾å›¢æˆä¸ºä¼šå‘˜ã€‚
+è¦åŠ 入这个社团, ä½ ä»˜è¦äº¤çº³æ³¨å†Œè´¹L$[COST]
+
[MESSAGE]
@@ -476,7 +483,9 @@
- [NAME]ã¯ã€ã‚ãªãŸã‚’一般メンãƒãƒ¼ã¨ã—ã¦ã‚°ãƒ«ãƒ¼ãƒ—ã«æ‹›å¾…ã—ã¦ã„ã¾ã™ã€‚å‚åŠ è²»ç”¨ã¯ã‹ã‹ã‚Šã¾ã›ã‚“。
+ [NAME]å·²ç»é‚€è¯·ä½ åŠ å…¥ä»–ä»¬çš„ç¤¾å›¢æˆä¸ºä¼šå‘˜ã€‚
+åŠ å…¥è¿™ä¸ªç¤¾å›¢æ— éœ€äº¤çº³ä»»ä½•è´¹ç”¨ã€‚
+
[MESSAGE]
@@ -506,21 +515,20 @@ to his or her location:
[URL]
- 後ã»ã©
+ ç¨åŽ
- 今ã™ãè¡Œã
+ 现在就登陆…
- [NAME] is offering friendship.
-
- By default, you will be able to
-see each other's online status.
+ [NAME]æ£åœ¨å‘é€å¥½å‹é‚€è¯·.
+
+ä½ å¯ä»¥é€šè¿‡åœ°å›¾è¿½è¸ªå½¼æ¤ï¼Œå¹¶å°†æ”¶åˆ°å¥½å‹åœ¨çº¿çŠ¶æ€æ›´æ–°ã€‚
- å—ã‘入れる
+ 接å—
è°¢ç»
@@ -528,20 +536,20 @@ see each other's online status.
- [NAME]ã¯ãƒ•ãƒ¬ãƒ³ãƒ‰ã‚·ãƒƒãƒ—ã‚’å—ã‘入れã¾ã—ãŸã€‚
+ [NAME]å·²ç»æŽ¥å—äº†ä½ å‘é€çš„好å‹é‚€è¯·.
- [NAME]ã¯ãƒ•ãƒ¬ãƒ³ãƒ‰ã‚·ãƒƒãƒ—ã‚’å´ä¸‹ã—ã¾ã—ãŸ
+ [NAME]æ‹’ç»äº†ä½ å‘é€çš„好å‹é‚€è¯·.
- [FIRST][LAST]ãŒã‚³ãƒ¼ãƒªãƒ³ã‚°ã‚«ãƒ¼ãƒ‰ã‚’申ã—出ã¦ã„ã¾ã™ã€‚ã“ã‚Œã«ã‚ˆã‚Šã€ã‚ãªãŸã®æŒã¡ç‰©ã«ãƒ–ックマークãŒè¿½åŠ ã•ã‚Œã€ã“ã®å±…ä½è€…ã«ã™ã°ã‚„ãIMã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+ [FIRST] [LAST]æ£æ供他们的通è¯å¡ã€‚è¿™å°†åœ¨ä½ çš„åº“å˜ä¸æ·»åŠ 一个书ç¾ï¼Œè¿™æ ·ä½ å°±å¯ä»¥å¿«é€Ÿçš„通过å³æ—¶æ¶ˆæ¯è”ç³»ç€ä¸ºå±…民。
- å—ã‘入れる
+ 接å—
è°¢ç»
@@ -549,19 +557,23 @@ see each other's online status.
- ã“ã®åœ°åŸŸã¯[MINUTES]分以内ã«å†èµ·å‹•ã‚’ã—ã¾ã™ã€‚ã“ã®ã¾ã¾ç•™ã¾ã£ãŸå ´åˆã¯ã€ãƒã‚°ã‚¢ã‚¦ãƒˆã•ã›ã‚‰ã‚Œã¾ã™ã€‚
+ 区域将在 [MINUTES]分钟åŽé‡å¯ã€‚
+如果ä»ç•™åœ¨æ¤åŒºåŸŸå†…将会退出游æˆ.
- ã“ã®åœ°åŸŸã¯[SECONDS]秒以内ã«å†èµ·å‹•ã‚’ã—ã¾ã™ã€‚ã“ã®ã¾ã¾ç•™ã¾ã£ãŸå ´åˆã€ãƒã‚°ã‚¢ã‚¦ãƒˆã•ã›ã‚‰ã‚Œã¾ã™ã€‚
+ 区域将在 [MINUTES]秒åŽé‡å¯ã€‚
+如果ä»ç•™åœ¨æ¤åŒºåŸŸå†…将会退出游æˆ.
- ウェブページ[URL]ã‚’èªã¿è¾¼ã¿ã¾ã™ã‹ï¼Ÿ
+ 是å¦è½½å…¥ç½‘页[URL]?
+
[MESSAGE]
-オブジェクトã‹ã‚‰: [OBJECTNAME], 所有者:[NAME]
+
+æ¥è‡ªä¸œä¸œ: [OBJECTNAME],主人 : [NAME]?
回主页
@@ -572,24 +584,24 @@ see each other's online status.
- [TYPE]ã‚’èªã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸã€‚
-ã‚ãªãŸãŒè³¼å…¥ã—ãŸæœ¬ã‚¢ã‚¤ãƒ†ãƒ ã®è²©å£²è€…ã«é€šçŸ¥ã—ã¦ãã ã•ã„。
+ 载入[TYPE]失败.
+请注明您从哪ä½å–主处è´å¾—æ¤é¡¹ç‰©å“。
- [DESC]ã¨ã„ã†åã®[TYPE]ã‚’èªã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸã€‚
-ã‚ãªãŸãŒè³¼å…¥ã—ãŸæœ¬ã‚¢ã‚¤ãƒ†ãƒ ã®è²©å£²è€…ã«é€šçŸ¥ã—ã¦ãã ã•ã„。
+ 载入å为[DESC]çš„[TYPE]失败.
+è¯·æ³¨æ˜Žä½ ä»Žå“ªä½å–主处è´å¾—æ¤é¡¹ç‰©å“。
- データベースã«[TYPE]ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ
+ 在数æ®åº“ä¸æŸ¥æ‰¾[TYPE]失败。
- データベースã«[DESC]ã¨ã„ã†åã®[TYPE]ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ
+ 在数æ®åº“ä¸æŸ¥æ‰¾å为[DESC]çš„[TYPE]失败。
@@ -599,52 +611,52 @@ see each other's online status.
- ã‚ãªãŸã®åˆ¶å¾¡å…¥åŠ›ã«å¾“ã„行動ã—ã¦ãã ã•ã„
+ æ‰§è¡Œä½ è¾“å…¥çš„å‘½ä»¤
- ã‚ãªãŸã®ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ«å…¥åŠ›ã‚’å†å¯¾å¿œã•ã›ã¦ãã ã•ã„。
+ é‡æ–°å¸ƒç½®ä½ 的控制按钮
- ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ã®ã‚’アニメーションã—ã¾ã™
+ Animate your avatar
- ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ã«æ·»ä»˜
+ å’Œä½ çš„åŒ–èº«ç»‘å®šèµ·æ¥
- 所有権をリリースã—ã€å…¬é–‹ã—ã¦ãã ã•ã„。
+ 放弃主人æƒåˆ©å¹¶é‡æ–°æˆä¸ºç™¾å§“
- ä»–ã®ã‚ªãƒ–ジェクトã¨ã®ãƒªãƒ³ã‚¯ã€ã¾ãŸã¯ãƒªãƒ³ã‚¯è§£é™¤ã‚’è¡Œã„ã¾ã™ã€‚
+ 建立或å–消和该东东的连接
- ä»–ã®ã‚ªãƒ–ジェクトã¨ã®ã‚¸ãƒ§ã‚¤ãƒ³ãƒˆã®è¿½åŠ ã€å‰Šé™¤ã‚’ã—ã¦ãã ã•ã„。
+ æ·»åŠ æˆ–ç§»èµ°ä¸¤ä¸ªä¸œä¸œä¹‹é—´çš„è¿žæŽ¥ç‚¹
- 許å¯ã‚’変更
+ 更改æ¤å¤„的许å¯è¯
- カメラを追跡ã—ã¦ãã ã•ã„
+ è¿½è¸ªä½ çš„æ‘„åƒå¤´
- カメラをコントãƒãƒ¼ãƒ«ã—ã¦ãã ã•ã„
+ è°ƒèŠ‚ä½ çš„æ‘„åƒå¤´
@@ -663,20 +675,20 @@ Is this OK?
- [FIRST][LAST]ã®ã€[TITLE]
-『[MESSAGE]
+ [FIRST] [LAST]'s '[TITLE]'
+[MESSAGE]
- 無視ã™ã‚‹
+ 忽视
- [GROUPNAME]ã®ã€Ž[TITLE]
-『[MESSAGE]
+ [GROUPNAME]'s '[TITLE]'
+[MESSAGE]
- 無視ã™ã‚‹
+ 忽视
@@ -689,72 +701,78 @@ upper-right corner of the screen.
- ãŸã£ãŸä»Šã€L$[AMOUNT]を支払ã„ã¾ã—ãŸã€‚
-L$残é¡ã¯ç”»é¢å³ä¸Šè§’ã«è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚
+ ä½ åˆšæ”¯ä»˜äº† L$[AMOUNT].
+ä½ çš„å¸æˆ·ç»“余在å±å¹•çš„å³ä¸Šè§’显示。
- ã‚ãªãŸã¯åº§ã£ã¦ã„ã¾ã™ã€‚
-矢å°ã‚ー(ã¾ãŸã¯AWSD)を使用ã—ã€è¡¨ç¤ºã‚’切り替ãˆã¦ãã ã•ã„。立ã¡ä¸ŠãŒã‚‹éš›ã¯ã€Žç«‹ã¡ä¸ŠãŒã‚‹ã€ãƒœã‚¿ãƒ³ã‚’押ã—ã¦ãã ã•ã„。
+ ä½ æ£åœ¨åç€.
+使用方å‘é”®(或者AWSD)æ¥æ”¹å˜è§†è§’.
+点击'站起æ¥'按钮起身。
- 地図をスクãƒãƒ¼ãƒ«ã™ã‚‹ã«ã¯ã€ã‚¯ãƒªãƒƒã‚¯ã—ドラッグã—ã¦ãã ã•ã„。
-ダブルクリックã§ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã—ã¾ã™ã€‚
-å³ã®ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ«ã‚’使用ã—ã€ç‰©ã‚’見ã¤ã‘ã€ç•°ãªã‚‹èƒŒæ™¯ã‚’表示ã—ã¦ãã ã•ã„
+ 点击并拖拉地图以查看地图全景.
+åŒå‡»è¯¥åœ°å€ï¼Œå¯ä»¥é—ªç”µä¼ è¿è‡³è¯¥å¤„.
+使用å³è¾¹çš„控制键查找信æ¯ï¼Œå¹¶æ˜¾ç¤ºä¸åŒçš„背景.
- ã‚ãªãŸã¯[SECOND_LIFE]ã®ã„ãã¤ã‹ã®ã‚¨ãƒªã‚¢ã«ã€æ–°ãŸãªã‚ªãƒ–ジェクトを作製ã™ã‚‹ã“ã¨ãŒå‡ºæ¥ã¾ã™ã€‚左上部ã®ãƒ„ールを使用ã—ã€Ctrlã¾ãŸã¯Altを押ã—続ã‘ã€ã™ã°ã‚„ãツールを切りæ›ãˆã¦ã¿ã¦ãã ã•ã„。Escを押ã—ã¦ã€æ§‹ç¯‰ã‚’ä¸æ¢ã—ã¾ã™ã€‚
+ ä½ å¯ä»¥åœ¨[SECOND_LIFE]ä¸çš„æŸäº›åŒºåŸŸå†…创建新东东。
+使用左上角的工具创建新东东,并按ä½Ctrl或者Alt键以迅速的更改工具。
+按Escé”®åœæ¢åˆ›å»ºä¸œä¸œã€‚
- 左クリックã¯ç‰¹åˆ¥ãªã‚ªãƒ–ジェクトã¸ã®å¹²æ¸‰ã«ä½¿ç”¨ã—ã¾ã™ã€‚マウス・ãƒã‚¤ãƒ³ã‚¿ãŒæ‰‹ã®ãƒžãƒ¼ã‚¯ã«å¤‰ã‚ã‚‹ã¨ã€ã‚ªãƒ–ジェクトã«å¯¾ã—ã¦ã®å‹•ä½œãŒè¡Œãˆã¾ã™ã€‚ å³ã‚¯ãƒªãƒƒã‚¯ã¯ã€å¸¸ã«ã‚ãªãŸã®å‹•ä½œãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’表示ã—ã¾ã™ã€‚
+ 点击左键会和一些特殊东东相互干扰。
+å¦‚æžœé¼ æ ‡ç®å¤´æŒ‡å‘手, ä½ å¯èƒ½è¢«ä¸œä¸œå¹²æ‰°ã€‚
+点击å³é”®æ˜¾ç¤ºèœå•ã€‚
- ã‚ãªãŸã¯ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã—ã¾ã—ãŸã€‚ ç¾åœ¨ã€ã‚ãªãŸã®ç›®çš„地ã«ä¸€ç•ªè¿‘ã„インフォ・ãƒãƒ–ã«ã„ã¾ã™ã€‚ã‚ãªãŸã®ç›®çš„地ã¯ã€èƒŒã®é«˜ã„赤ã„ç›®å°ã§ãƒžãƒ¼ã‚¯ã•ã‚Œã¦ã„ã¾ã™ã€‚
+ ä½ åˆšåˆšè¿›è¡Œäº†é—ªç”µä¼ è¿.
+
+ä½ çŽ°åœ¨åœ¨ç¦»ä½ ç›®çš„åœ°æœ€è¿‘çš„ä¿¡æ¯ç»“ç‚¹ä¸Šã€‚ä½ çš„ç›®çš„åœ°ç”±ä¸€ä¸ªçº¢äº®ç‚¹æ ‡å‡ºã€‚
- オブジェクトã«ã‚ˆã‚Šã€ã‚ãªãŸã®ç§»å‹•ã‚ーãŒæ“作ã•ã‚Œã¾ã™ã€‚ 矢å°ã‚ーã€ã‚‚ã—ãã¯AWSDã§ã€å‹•ä½œã‚’確ã‹ã‚ã¦ãã ã•ã„。ã„ãã¤ã‹ã®ã‚ªãƒ–ジェクト(例ã€éŠƒï¼‰ã‚’使用ã™ã‚‹å ´åˆã€ãƒžã‚¦ã‚¹ãƒ«ãƒƒã‚¯ã«ç§»è¡Œã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚マウスルックã¸ã®ç§»è¡Œã¯ã€ŽMã€ã‚’押ã—ã¦ãã ã•ã„。
+ Your movement keys are now being handled by an object.
+Try the arrow keys or AWSD to see what they do.
+Some objects (like guns) require you to go into mouselook to use them.
+Press 'M' to do this.
- ã‚ãªãŸã¯è‡ªåˆ†ã®å®¹å§¿ã‚’変更ã—ã¦ã„ã¾ã™ã€‚ 回転や拡大表示ã™ã‚‹ã«ã¯ã€çŸ¢å°ã‚ーを使用ã—ã¦ãã ã•ã„。 作æ¥å¾Œã€ã‚ãªãŸã®å®¹å§¿ã‚’ä¿å˜ã™ã‚‹å ´åˆã¯ã€Žå…¨ã¦ä¿å˜ã€ã‚’押ã—ã¦ã€çµ‚了ã—ã¦ãã ã•ã„。 自分ã®å®¹å§¿ã¯ã€å¥½ããªã ã‘変更ã™ã‚‹ã“ã¨ãŒå‡ºæ¥ã¾ã™ã€‚
+ ä½ æ£åœ¨ç¼–è¾‘ä½ çš„å¤–è¡¨ã€‚è¦æ—‹è½¬å¹¶æ”¾å¤§æŸ¥çœ‹ï¼Œè¯·ä½¿ç”¨ç®å¤´é”®ã€‚å½“ä½ ç»“æŸçš„时候,点击 '全部ä¿å˜'按钮,æ¥ä¿å˜ä½ çš„å¤–å½¢å¹¶é€€å‡ºã€‚ä½ å¯ä»¥å°½ä½ 喜欢的频ç¹ç¼–è¾‘ä½ çš„å¤–å½¢ï¼Œ
- ã“ã‚Œã¯ã€ã‚ãªãŸã®æŒã¡ç‰©ä¸€è¦§ã§ã™ã€‚オブジェクトã€ãƒŽãƒ¼ãƒˆã‚«ãƒ¼ãƒ‰ã€æ´‹æœã€ãã®ä»–ã‚ãªãŸãŒæ‰€æœ‰ã™ã‚‹ç‰©ãŒå«ã¾ã‚Œã¾ã™ã€‚
-*ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚„æ ¼ç´ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã‚’ã€è‡ªåˆ†è‡ªèº«ã«ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚‹ã“ã¨ã§è£…ç€ã§ãã¾ã™ã€‚
-*オブジェクトを地é¢ã«ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚‹ã“ã¨ã§ã€ä¸–ç•Œã«å‡ºç¾ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
-*ノートカードをèªã‚€ã«ã¯ã€ãƒ€ãƒ–ルクリックã—ã¦ãã ã•ã„。
+ è¿™æ˜¯ä½ çš„åº“å˜, 包å«ä¸œä¸œ, 注释å¡, æœé¥°, å’Œå…¶ä»–ä½ æ‰€æ‹¥æœ‰çš„ä¸œä¸œ.
+* è¦ç©¿ä¸Šè¡£æœæˆ–者å¯ç”¨è£…备, 拖拽对象至身体.
+* è¦æŠŠå¯¹è±¡å¸¦å…¥æ¸¸æˆä¸–ç•Œ, 拖拽对象至地é¢.
+* è¦é˜…读注释å¡, åŒå‡»æ³¨é‡Šå¡.
- ã“ã“ã¯ã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹åœ°åŸŸã§ã™ã€‚
-ã‚ãªãŸãŒä½œæˆã—ãŸã‚ªãƒ–ジェクトã¯ã€ã‚¨ãƒªã‚¢ã‚’離れãŸå¾Œã«å‰Šé™¤ã•ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ã¾ãŸã€ã“ã“ã§ã¯å¤ªå¹³æ´‹æ™‚é–“ã®åˆå‰[TIME]時ã‹ã‚‰[HOURS]時間毎ã«ã€åœ°åŸŸå†…ã®ã‚ªãƒ–ジェクトãŒæ¶ˆåŽ»ã•ã‚Œã¾ã™ã€‚
-サンドボックス地域ã«ã¯ã€é€šå¸¸ã®åœ°åŸŸã¨åŒºåˆ¥ã™ã‚‹ç‚ºã®ã‚µã‚¤ãƒ³ãŒã‚ã‚Šã¾ã™ã€‚
+ 这是一å—沙盒区域。
+在这里创建的东东将在其离开这里åŽè¢«åˆ 除,且æ¤åŒºåŸŸå°†æ¯[HOURS]å°æ—¶æŠ¹åŽ»ä¸€æ¬¡æ‰€åˆ›å»ºä¸œä¸œï¼Œå§‹äºŽå¤ªå¹³æ´‹æ—¶é—´æ—©ä¸Š[TIME].
+
+沙盒区域并ä¸å¸¸è§, å¹¶ä¼šæœ‰ç‰¹æ®Šæ ‡è¯†æ ‡å‡ºã€‚
- 本オブジェクトã¯ãƒ•ãƒ¬ã‚シブルã§ã™ã€‚ フレã‚シブル・オブジェクトã¯ã€ç‰©ç†çš„ã§ãªã„ã“ã¨ã‚‚ã‚ã‚Šã€ãƒ•ãƒ¬ã‚シブルã®ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã§è§£é™¤ã•ã‚Œã‚‹ã¾ã§ã€ãƒ•ã‚¡ãƒ³ãƒˆãƒ 属性ã§å˜åœ¨ã—ã¾ã™ã€‚
-
-
-
-
- You may only select up to [MAX_SELECT] items
-from this list.
+ 这个东东是活动的.
+活动的东东å¯èƒ½ä¸å…·å¤‡ç‰©ç†ç‰¹è´¨ï¼Œå¹¶ä¸€å®šæ˜¯å¹»å½±ï¼Œé™¤éžæ´»åŠ¨æ€§é€‰æ‹©æ 没有被选定。
diff --git a/linden/indra/newview/skins/xui/zh/panel_account_details.xml b/linden/indra/newview/skins/xui/zh/panel_account_details.xml
new file mode 100644
index 0000000..2f4443a
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/panel_account_details.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/panel_account_planning.xml b/linden/indra/newview/skins/xui/zh/panel_account_planning.xml
new file mode 100644
index 0000000..9fb19a3
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/panel_account_planning.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/linden/indra/newview/skins/xui/zh/panel_account_transactions.xml b/linden/indra/newview/skins/xui/zh/panel_account_transactions.xml
new file mode 100644
index 0000000..a169555
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/panel_account_transactions.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/panel_avatar.xml b/linden/indra/newview/skins/xui/zh/panel_avatar.xml
new file mode 100644
index 0000000..db9599e
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/panel_avatar.xml
@@ -0,0 +1,193 @@
+
+
+
+
+
+ [ACCTTYPE]
+[PAYMENTINFO]
+
+
+ å±…æ°‘
+
+
+ 试用
+
+
+ å®ªç« åˆ¶å®šå§”å‘˜ä¼šæˆå‘˜
+
+
+ 林登实验室雇员
+
+
+ 使用的支付信æ¯
+
+
+ 文件ä¸çš„支付信æ¯
+
+
+ 文件ä¸æ²¡æœ‰æ–°ç”¨æˆ·çš„支付信æ¯
+
+
+ åå—:
+
+
+ 是å¦åœ¨çº¿: 是
+
+
+ 是å¦åœ¨çº¿: å¦
+
+
+ 是å¦åœ¨çº¿: 未知
+
+
+ 天生的:
+
+
+ 账户:
+
+
+ ææ¡£:
+
+
+ [FIRST] [LAST]
+
+
+ 照片:
+
+
+
+ 级别:
+
+
+ 社团:
+
+
+ 关于:
+
+
+ (500 个å—)
+
+
+ æ供项目:
+
+
+ 放置目录内容于æ¤.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 完æˆ
+
+
+
+
+ 我想è¦:
+
+
+
+
+
+
+
+
+
+
+ 技能:
+
+
+
+
+
+
+
+
+ Languages:
+
+
+
+
+ 告诉æ¯ä¸ªäººä½ 在第二人生ä¸æœ€å–œæ¬¢çš„地点
+
+
+
+
+
+
+ 在第二人生的分类æ ä¸åˆŠç™»å¹¿å‘Šã€‚
+
+
+
+
+
+
+ 照片:
+
+
+
+ 消æ¯:
+
+
+ (250个å—)
+
+
+
+
+ 使用这å—空间æ¥è®°å½•ä½ 关于这个人的笔迹。 继ç»è¿½è¸ª
+交易过程, åˆä½œçš„项目,ç‰ç‰ã€‚åªæœ‰ä½ å¯ä»¥çœ‹è§è¿™äº›ç¬”记。
+ä½ è§‚å¯Ÿçš„äººçœ‹ä¸è§ï¼Œå…¶ä»–人也看ä¸è§ã€‚
+
+
+
+
+
+
+
+
+
+
+ 在地图上显示的ä½ç½®.
+ç”±äºŽä½ å’Œå®ƒä»¬ä¹‹é—´æ²¡æœ‰å‹è°Šå…³ç³»ï¼Œæ‰€ä»¥åˆšæ‰çš„æ“ä½œæ— æ•ˆã€‚
+
+
+ 在地图上显示的ä½ç½®.
+由于对方ä¸åœ¨çº¿ï¼Œåˆšæ‰çš„æ“ä½œæ— æ•ˆã€‚
+
+
+ 在地图上显示的ä½ç½®.
+
+
+ åŠ å¼ºé—ªç”µä¼ è¿è‡³ä½ 所在ä½ç½®çš„效果.
+
+
+ æä¾›ä¸€ä¸ªé—ªç”µä¼ é€è‡³ä½ 所在的ä½ç½®ã€‚ä½†å½“ä½ ç¦»å¼€æ–¹ä½å²›æ—¶ï¼Œæ¤é¡¹åŠŸèƒ½ä¸å¯ç”¨ã€‚
+
+
+ æä¾›ä¸€ä¸ªé—ªç”µä¼ é€è‡³ä½ 所在的ä½ç½®ã€‚
+
+
diff --git a/linden/indra/newview/skins/xui/zh/panel_avatar_classified.xml b/linden/indra/newview/skins/xui/zh/panel_avatar_classified.xml
index 00b8909..b9d6407 100644
--- a/linden/indra/newview/skins/xui/zh/panel_avatar_classified.xml
+++ b/linden/indra/newview/skins/xui/zh/panel_avatar_classified.xml
@@ -1,20 +1,19 @@
+ tool_tip="åå—必须以å—æ¯æˆ–æ•°å—开始,ä¸å¯ç”¨æ ‡ç‚¹ã€‚" />
+ tool_tip="设置这å—åˆ†ç±»å¹¿å‘Šç›¸å¯¹äºŽä½ æ‰€åœ¨ä½ç½®çš„ä½ç½®ã€‚" />
- 広告掲載済ã¿ï¼šç™ºè¡Œã¯ã•ã‚Œã¦ã„ãªã„
+ tool_tip="ä½ é€‰æ‹©ä¸ºä½ çš„å¹¿å‘Šä»˜è´¹è¶Šå¤š, 您的广告在广告æ 里出现的ä½ç½®å°±ä¼šè¶Šé«˜.">
+ 广告ä½ç½®: æš‚æ—¶ä¸èƒ½å‘布
-
+
Clicks:
diff --git a/linden/indra/newview/skins/xui/zh/panel_chat_bar.xml b/linden/indra/newview/skins/xui/zh/panel_chat_bar.xml
index fd669ea..91aa6bc 100644
--- a/linden/indra/newview/skins/xui/zh/panel_chat_bar.xml
+++ b/linden/indra/newview/skins/xui/zh/panel_chat_bar.xml
@@ -1,13 +1,12 @@
-
-
-
-
-
+
+
+
+
+
- ジェスãƒãƒ£ãƒ¼
+ 动作
diff --git a/linden/indra/newview/skins/xui/zh/panel_classified.xml b/linden/indra/newview/skins/xui/zh/panel_classified.xml
index 344329d..c03a7cc 100644
--- a/linden/indra/newview/skins/xui/zh/panel_classified.xml
+++ b/linden/indra/newview/skins/xui/zh/panel_classified.xml
@@ -1,9 +1,9 @@
+ tool_tip="åå—必须以å—æ¯æˆ–æ•°å—开始,ä¸å¯ç”¨æ ‡ç‚¹ã€‚" />
+ tool_tip="设置这å—åˆ†ç±»å¹¿å‘Šç›¸å¯¹äºŽä½ æ‰€åœ¨ä½ç½®çš„ä½ç½®ã€‚" />
diff --git a/linden/indra/newview/skins/xui/zh/panel_group.xml b/linden/indra/newview/skins/xui/zh/panel_group.xml
new file mode 100644
index 0000000..de61853
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/panel_group.xml
@@ -0,0 +1,14 @@
+
+
+
+ 在目å‰çš„亚桌é¢ä¸Šæœ‰æ²¡æœ‰åº”用的更改。
+
+
+ ä½ æ˜¯å¦æ„¿æ„现在就应用这些更改?
+
+
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/panel_group_finder.xml b/linden/indra/newview/skins/xui/zh/panel_group_finder.xml
new file mode 100644
index 0000000..332cb2d
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/panel_group_finder.xml
@@ -0,0 +1,9 @@
+
+
+
+ 在目å‰çš„亚桌é¢ä¸Šæœ‰æ²¡æœ‰åº”用的更改。
+
+
+ ä½ æ˜¯å¦æ„¿æ„现在就应用这些更改?
+
+
diff --git a/linden/indra/newview/skins/xui/zh/panel_group_general.xml b/linden/indra/newview/skins/xui/zh/panel_group_general.xml
new file mode 100644
index 0000000..92bd0bf
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/panel_group_general.xml
@@ -0,0 +1,74 @@
+
+
+
+ 普通桌é¢åŒ…括关于社团的一般信æ¯ï¼Œä¸»äººå’Œå¯è§†çš„会员的åå•ï¼Œä¸€èˆ¬ç¤¾å›¢å好和会员选项。
+
+ç”¨ä½ çš„é¼ æ ‡åœç•™åœ¨é€‰é¡¹ä¸ŠèŽ·å–更多帮助。
+
+
+
+ 在æ¤é”®å…¥ä½ 的新社团å称
+
+
+ 在æ¤é”®å…¥ä½ 的新社团å称
+
+
+ 创建由
+
+
+ (ç‰å¾…)
+
+
+ 社团宪ç«
+
+
+
+ 社团宪ç«
+
+
+
+
+ 主人和å¯è§çš„会员
+
+
+ (主人的åå—以大写å—æ¯æ ‡æ³¨)
+
+
+
+
+
+
+
+ é‡æ–°èŽ·å–会员信æ¯
+
+
+ 创建这个社团将花费L$100.
+ä½ çœŸçš„ï¼ŒçœŸçš„ï¼ŒçœŸ----çš„----确定è¦èŠ±è´¹L$100æ¥åˆ›å»ºè¿™ä¸ªç¤¾å›¢å—?
+
+
+ 社团å好
+
+
+
+
+
+
+
+
+
+
+ 我的头衔
+
+
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/panel_group_invite.xml b/linden/indra/newview/skins/xui/zh/panel_group_invite.xml
new file mode 100644
index 0000000..45e8202
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/panel_group_invite.xml
@@ -0,0 +1,18 @@
+
+
+
+ ä½ å¯ä»¥é€‰æ‹©å¤šä¸ªå±…民,邀请他们å‡å¦‚ä½ çš„ç¤¾å›¢ã€‚ç‚¹å‡»â€˜æ‰“å¼€ä»»åŠ¡é€‰æ‹©å™¨â€™å¼€å§‹é‚€è¯·ã€‚
+
+
+
+
+
+ 选择哪个角色分é…给他们:
+
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/panel_group_land_money.xml b/linden/indra/newview/skins/xui/zh/panel_group_land_money.xml
new file mode 100644
index 0000000..626f845
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/panel_group_land_money.xml
@@ -0,0 +1,82 @@
+
+
+
+ 由社团所拥有的土地已ç»è¢«åˆ—出了其所作贡献的细节。如果在使用ä¸çš„总的土地å°äºŽæˆ–者ç‰äºŽæ€»åœŸåœ°è´¡çŒ®ï¼Œç³»ç»Ÿä¼šå‘出è¦å‘Šã€‚在计划,细节和销售桌é¢ä¸ä¼šæ供关于社团资产情况的信æ¯ã€‚
+
+
+
+ ä½ æ²¡æœ‰æŸ¥çœ‹è¿™ä¸ªç¤¾å›¢æ‰€æ‹¥æœ‰åœŸåœ°çš„è®¸å¯è¯ã€‚
+
+
+ ä½ æ²¡æœ‰æŸ¥çœ‹è¿™ä¸ªç¤¾å›¢è´¦æˆ·ä¿¡æ¯çš„许å¯è¯ã€‚
+
+
+ 社团所有土地
+
+
+
+
+
+
+
+
+
+ 总贡献é¢:
+
+
+ 0 平方米
+
+
+ 使用ä¸çš„全部土地:
+
+
+ 0 平方米
+
+
+ å¯å”®åœŸåœ°:
+
+
+ 0 平方米
+
+
+ ä½ çš„è´¡çŒ®:
+
+
+ 平方米
+
+
+ (ç‰å¾…)
+
+
+ 社团æˆå‘˜å¿…须贡献更多的土地é¢åº¦ï¼Œæ¥æ”¯æŒåœŸåœ°çš„使用。
+
+
+ 社团资产 L$
+
+
+
+
+ 计算ä¸...
+
+
+
+
+ 计算ä¸...
+
+
+
+
+
+
+ 计算ä¸...
+
+
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/panel_group_notices.xml b/linden/indra/newview/skins/xui/zh/panel_group_notices.xml
new file mode 100644
index 0000000..b0d5ab3
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/panel_group_notices.xml
@@ -0,0 +1,64 @@
+
+
+
+ 通知是一个å°ç»„之间快速交æµè”系的方法,通知通过广æ’消æ¯å’Œå‘é€å¯é€‰æ‹©çš„粘贴性æ¡ç›®ï¼Œå‘é€ç»™ç”¨æˆ·ã€‚通知仅会到达社团内部ä¸è¢«æŽˆäºˆæŽ¥å—ä¿¡æ¯èƒ½åŠ›çš„角色ä¸çš„ä¼šå‘˜é‚£é‡Œã€‚ä½ å¯ä»¥åœ¨ä¸€èˆ¬æŽ§åˆ¶æ¡Œé¢ä¸Šå…³æŽ‰é€šçŸ¥ã€‚
+
+
+ 这里没有过去的通知.
+
+
+
+ 社团通知归档
+
+
+ 通知åªä¼šè¢«ä¿ç•™30日。点击下é¢ä½ 想查看的通知。如果新的通知已被接å—到,请点击“刷新åå•â€æŒ‰é’®ã€‚
+
+
+
+
+
+
+
+
+ æ²¡æœ‰æ‰¾åˆ°ä»»ä½•ç›®æ ‡
+
+
+
+
+
+ 创建一æ¡é€šçŸ¥
+
+
+ ä½ å¿…é¡»è¾“å…¥å‘é€é€šçŸ¥çš„å¯¹è±¡ã€‚ä½ å¯ä»¥ä»Žä½ 的库å˜ä¸æ‹–拽一个æ¡ç›®è‡³æŽ§åˆ¶é¢æ¿ä¸Šï¼Œè¿™æ ·å¯ä»¥æ·»åŠ 给通知一个æ¡ç›®ã€‚é™„åŠ çš„æ¡ç›®å¿…须是å¯å¤åˆ¶çš„或å¯è½¬ç§»çš„ï¼Œä½†æ˜¯ä½ ä¸èƒ½å‘é€ä¸€ä¸ªæ–‡ä»¶å¤¹ã€‚
+
+
+ 主题:
+
+
+ ä¿¡æ¯:
+
+
+ 附属:
+
+
+
+
+
+
+
+ å˜æ¡£çš„通知
+
+
+ å‘é€ä¸€æ¡æ–°çš„通知,请点击上é¢çš„‘创建新的通知’按钮。
+
+
+ 主题:
+
+
+ ä¿¡æ¯:
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/panel_group_roles.xml b/linden/indra/newview/skins/xui/zh/panel_group_roles.xml
new file mode 100644
index 0000000..743b639
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/panel_group_roles.xml
@@ -0,0 +1,153 @@
+
+
+
+ 在目å‰çš„亚桌é¢ä¸Šæœ‰æ²¡æœ‰åº”用的更改。
+
+
+ ä½ æ˜¯å¦æ„¿æ„现在就应用这些更改?
+
+
+ 普通人'å’Œ '主人'角色属于特殊角色,ä¸èƒ½è¢«åˆ 除。
+
+
+
+
+ 会员和角色
+
+
+ 社团æˆå‘˜ä¾ç…§ä¸åŒèƒ½åŠ›å’Œæœ¬é¢†ï¼Œè¢«åˆ†é…以ä¸åŒçš„角色。这些设置å¯ä»¥è½»æ¾çš„被制定,并å…许更大é™åº¦çš„组织性和çµæ´»æ€§ã€‚
+
+
+
+
+ 角色
+
+
+ 选择下é¢çš„一个角色. ä½ å¯ä»¥ä¿®æ”¹è§’色的å称,æ述和会员的头衔。
+
+
+ 选择下é¢çš„角色,察看它的性质,æˆå‘˜å’Œæ‰€å…许的能力。
+
+
+ ä½ ä¹Ÿå¯ä»¥å¯¹è§’色分é…能力.
+
+
+ ä½ å¯ä»¥æŸ¥çœ‹ï¼Œä½†ä¸èƒ½ä¿®æ”¹ï¼Œæˆ–者分é…这些能力。
+
+
+
+
+ 能力
+
+
+ ä½ å¯ä»¥æŸ¥çœ‹æ¯é¡¹èƒ½åŠ›çš„具体æ述,以åŠå“ªä¸ªè§’色和会员æ£åœ¨æ‰§è¡Œæ¤é¡¹èƒ½åŠ›ã€‚
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ä½ å¯ä»¥æ·»åŠ 或移除分é…给会员的角色,或者通过按ä½æŽ§åˆ¶é”®ï¼Œå¹¶ç‚¹å‡»ä¼šå‘˜çš„åå—,选择多个会员。
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 角色都有一个头衔,并且å…许列出æ¯ä¸ªæˆå‘˜èƒ½å¤Ÿè¡Œä½¿çš„能力。æˆå‘˜ä»¬å¯ä»¥å±žäºŽä¸€ä¸ªæˆ–多个角色。一个社团最多有10个角色,包括普通人和主人角色。
+
+
+
+
+
+
+
+
+
+
+ 这些能力å…许角色里的会员在社团里åšä¸€äº›ç‰¹æ®Šçš„事情。关于能力的ç§ç±»èŒƒç•´å¾ˆå®½ã€‚
+
+
+
+
+
+ 分é…的角色
+
+
+ å…许能力
+
+
+
+
+
+
+
+
+
+
+
+
+ å称
+
+
+ æè¿°
+
+
+ 雇员
+
+
+ 头衔
+
+
+ (ç‰å¾…)
+
+
+ (ç‰å¾…)
+
+
+ 分é…çš„æˆå‘˜
+
+
+ å…许能力
+
+
+
+
+
+
+
+
+
+
+ æè¿°
+
+
+ 这项能力是‘从社团ä¸é©±é€ä¼šå‘˜â€™ã€‚åªæœ‰ä¸»äººèƒ½å¤Ÿé©±é€å¦ä¸€ä¸ªä¸»äººã€‚
+
+
+ 有能力的角色
+
+
+ 有能力的会员
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/panel_group_voting.xml b/linden/indra/newview/skins/xui/zh/panel_group_voting.xml
new file mode 100644
index 0000000..5763676
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/panel_group_voting.xml
@@ -0,0 +1,78 @@
+
+
+
+ 社团æ议并ä¸èƒ½è§†ä¸ºæ˜¯ç¤¾å›¢å‘è¦åšçš„事,或者是社团度æŸäº›äº‹æƒ…çš„çœ‹æ³•ã€‚å¦‚æžœä½ æœ‰åˆé€‚çš„æƒåˆ©ï¼Œä½ å°±å¯ä»¥åˆ›å»ºæ议,投票表决开放性æ议,并查看旧的æ议。
+
+
+
+ 打开社团æè®®
+
+
+ 打开社团æè®®
+
+
+ åˆ›é€ æè®®
+
+
+ 议案的投票表决
+
+
+ ä½ æ£åœ¨å°è¯•åˆ›å»ºçš„æ案是空的。请在创建之å‰å¡«å¥½ä½ çš„æ案。
+
+
+ åŒå‡»ä½ æ„¿æ„投票的决议,点击创建决议, 以创建一个新的决议。
+
+
+ 建议:
+
+
+
+
+
+ 法定人数:
+
+
+
+ 总数为x 社团会员.
+
+
+ æŒç»æ—¶é—´:
+
+
+
+ 天
+
+
+ 简å•å¤šæ•°
+ 2/3 多数
+ 全票通过
+
+
+ 选举开始:
+
+
+ é€‰ä¸¾ç»“æŸ :
+
+
+
+
+
+
+
+ 社团选举å²
+
+
+ åŒå‡»é€šè¿‡æŠ•ç¥¨è¡¨å†³ï¼Œæˆ–者选择一个并点击查看项目æ¥æŸ¥çœ‹æŠ•ç¥¨è¡¨å†³ç»“果。
+
+
+ 通过表决 投票表决终æ¢
+
+
+
+ 选举结果:
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/panel_land_covenant.xml b/linden/indra/newview/skins/xui/zh/panel_land_covenant.xml
new file mode 100644
index 0000000..fb44932
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/panel_land_covenant.xml
@@ -0,0 +1,39 @@
+
+
+
+ 区域:
+
+
+ (未知)
+
+
+ ç§äººé¢†åœ°:
+
+
+ (未知)
+
+
+ ä¸åŠ¨äº§ä¸»äºº:
+
+
+ (未知)
+
+
+ è¿™å—区域内被è´ä¹°çš„土地å¯èƒ½å¯ä»¥è¢«é‡æ–°å‡ºå”®ï¼Œä¹Ÿå¯èƒ½ä¸èƒ½è¢«é‡æ–°å‡ºå”®ã€‚
+
+
+ è¿™å—区域内被è´ä¹°çš„土地å¯èƒ½å¯ä»¥è¢«è¿žæŽ¥æˆ–划分,也å¯èƒ½ä¸èƒ½è¢«è¿žæŽ¥å’Œåˆ’分。
+
+
+ è¿™å—区域内被è´ä¹°çš„土地å¯ä»¥è¢«é‡æ–°å‡ºå”®.
+
+
+ è¿™å—区域内被è´ä¹°çš„土地å¯èƒ½ä¸èƒ½è¢«é‡æ–°å‡ºå”®ã€‚
+
+
+ è¿™å—区域内被è´ä¹°çš„土地å¯ä»¥è¢«è¿žæŽ¥æˆ–者被划分。
+
+
+ è¿™å—区域内被è´ä¹°çš„土地å¯èƒ½ä¸èƒ½è¢«è”系或者被划分。
+
+
diff --git a/linden/indra/newview/skins/xui/zh/panel_media_remote.xml b/linden/indra/newview/skins/xui/zh/panel_media_remote.xml
index eebb181..7c48ead 100644
--- a/linden/indra/newview/skins/xui/zh/panel_media_remote.xml
+++ b/linden/indra/newview/skins/xui/zh/panel_media_remote.xml
@@ -1,14 +1,10 @@
- ムービー・コントãƒãƒ¼ãƒ«
+ 电影控制
-
-
-
-
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/panel_music_remote.xml b/linden/indra/newview/skins/xui/zh/panel_music_remote.xml
index 653732c..3e9db0c 100644
--- a/linden/indra/newview/skins/xui/zh/panel_music_remote.xml
+++ b/linden/indra/newview/skins/xui/zh/panel_music_remote.xml
@@ -1,14 +1,10 @@
- ミュージック・コントãƒãƒ¼ãƒ«
+ 音ä¹æŽ§åˆ¶
-
-
-
-
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/panel_overlaybar.xml b/linden/indra/newview/skins/xui/zh/panel_overlaybar.xml
index 6559425..627206c 100644
--- a/linden/indra/newview/skins/xui/zh/panel_overlaybar.xml
+++ b/linden/indra/newview/skins/xui/zh/panel_overlaybar.xml
@@ -1,15 +1,15 @@
-
-
+
-
-
-
+ tool_tip="èŠå¤©ä¸Žå³æ—¶æ¶ˆæ¯æ¨¡å¼ä»¥å¯¹ä½ éšè—。 点击这里æ¥è®¾å®šä½ ä¸åœ¨å¿™ç¢Œæ¨¡å¼ä¸‹" />
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/panel_preferences_audio.xml b/linden/indra/newview/skins/xui/zh/panel_preferences_audio.xml
new file mode 100644
index 0000000..ba8055c
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/panel_preferences_audio.xml
@@ -0,0 +1,55 @@
+
+
+
+ å±è”½:
+
+
+
+
+ æµæ´¾:
+
+
+
+
+ 声效:
+
+
+ 风é‡:
+
+
+ è„šå°å°ºå¯¸:
+
+
+ UI体积:
+
+
+
+
+ 多普勒效应:
+
+
+ è·ç¦»å› ç´ :
+
+
+ ç¿»è½¬å› ç´ :
+
+
+ é»˜è®¤ä¸Šä¼ é€ŸçŽ‡:
+
+
+
+ 32 kbps
+
+
+ 64 kbps
+
+
+ 96 kbps
+
+
+ 128 kbps
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/panel_preferences_chat.xml b/linden/indra/newview/skins/xui/zh/panel_preferences_chat.xml
new file mode 100644
index 0000000..f62aec5
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/panel_preferences_chat.xml
@@ -0,0 +1,54 @@
+
+
+
+ èŠå¤©å—体大å°:
+
+
+
+ å°åž‹çš„
+
+
+ ä¸åž‹çš„
+
+
+ 大型的
+
+
+
+ èŠå¤©é¢œè‰²:
+
+
+
+
+
+
+
+ èŠå¤©æŽ§åˆ¶å°:
+
+
+
+ (秒)
+
+
+ (#行)
+
+
+
+ èŠå¤©é€‰é¡¹:
+
+
+
+
+
+
+ 泡泡èŠ:
+
+
+
+
+ 脚本出错:
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/panel_preferences_general.xml b/linden/indra/newview/skins/xui/zh/panel_preferences_general.xml
index 5a69bb0..3eccaab 100644
--- a/linden/indra/newview/skins/xui/zh/panel_preferences_general.xml
+++ b/linden/indra/newview/skins/xui/zh/panel_preferences_general.xml
@@ -1,41 +1,36 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+ tool_tip="使用系统默认色彩撷å–器,代替在第二人生ä¸å»ºè®¾çš„色彩撷å–器。" />
开始定ä½:
- åå‰ã‚’表示:
+ 显示åå—:
- 自分ã®åŠ¹æžœã®è‰²ï¼š
+ 我的效果颜色:
秒
- ã‚¯ãƒ©ãƒƒã‚·ãƒ¥å ±å‘Šï¼š
+ 现金报告:
- 言語:
+ è¯è¨€:
(Requires restart for full effect)
@@ -52,25 +47,25 @@
-
+ tool_tip="点击这里æ¥æ‰“开色彩选择器" />
+
<输入地域å>
- é€ã‚‹å‰ã«å°‹ãã‚‹
+ 在å‘é€ä¹‹å‰è¯¢é—®
- 常ã«é€ä¿¡
+ 总是å‘é€
- é€ä»˜ã—ãªã„
+ 从ä¸å‘é€
- 英語 (English)
+ 英è¯
Deutsch (German)
@@ -82,7 +77,7 @@
í•œêµì–´ (Korean)
- ä¸å›½èªž
+ ä¸æ–‡
diff --git a/linden/indra/newview/skins/xui/zh/panel_preferences_graphics1.xml b/linden/indra/newview/skins/xui/zh/panel_preferences_graphics1.xml
index 8b2a550..ddaabdb 100644
--- a/linden/indra/newview/skins/xui/zh/panel_preferences_graphics1.xml
+++ b/linden/indra/newview/skins/xui/zh/panel_preferences_graphics1.xml
@@ -2,42 +2,42 @@
- 4:3(標準CRT)
+ 4:3 (æ ‡å‡†æ˜¾ç¤ºå™¨)
- 5:4(1280x1024 LCD)
+ 5:4 (1280x1024液晶å±)
- 16:9(ワイドスクリï¼ãƒ³ï¼‰
+ 16:9 (宽å±)
- 表示解åƒåº¦ï¼š
+ é™åˆ¶å†³è®®:
- 全画é¢çŽ‡ï¼š
+ å…¨å±æ˜¾ç¤ºæ”¾å¤§æ¯”率:
- (幅ï¼é«˜ã•ï¼‰
+ (宽度 /高度)
- UIè¦æ¨¡ï¼š
+ UI尺寸:
- (メートルã€ä½Žã„ã»ã©é€Ÿã„)
+ (米数,越低越快)
- 表示オプション:
+ 显示设置选项:
-
-
-
-
-
+
+
+
+
+
- [RES_X]×[RES_Y]
+ [RES_X] x [RES_Y]
- [NUM]:[DEN]
+ [NUM]:[DEN]
diff --git a/linden/indra/newview/skins/xui/zh/panel_preferences_graphics2.xml b/linden/indra/newview/skins/xui/zh/panel_preferences_graphics2.xml
index 4d19074..8683fff 100644
--- a/linden/indra/newview/skins/xui/zh/panel_preferences_graphics2.xml
+++ b/linden/indra/newview/skins/xui/zh/panel_preferences_graphics2.xml
@@ -1,13 +1,13 @@
- 色åˆã„:
+ 阴影:
-
-
-
+
+
+
- ã‚¢ãƒã‚¿ãƒ¼ãƒ»ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ï¼š
+ 化身表现:
@@ -21,7 +21,7 @@
- ライティング細部:
+ 照明细节:
@@ -32,7 +32,7 @@
- é ˜åŸŸè©³ç´°ï¼š
+ 地形细节:
@@ -43,15 +43,15 @@
- オブジェクト・メッシュ詳細:
+ 对象循环细节:
- フレã‚シブル・メッシュ詳細:
+ çµæ´»çš„网å”细节:
- 樹木メッシュ詳細:
+ æ ‘æœ¨ç½‘æ ¼ç»†èŠ‚:
- ã‚¢ãƒã‚¿ãƒ¼ãƒ»ãƒ¡ãƒƒã‚·ãƒ¥è©³ç´°ï¼š
+ 化身咬åˆç»†èŠ‚:
diff --git a/linden/indra/newview/skins/xui/zh/panel_preferences_graphics3.xml b/linden/indra/newview/skins/xui/zh/panel_preferences_graphics3.xml
index 09fc35c..b17dbfb 100644
--- a/linden/indra/newview/skins/xui/zh/panel_preferences_graphics3.xml
+++ b/linden/indra/newview/skins/xui/zh/panel_preferences_graphics3.xml
@@ -1,27 +1,24 @@
- フィルタリング:
+ 过滤:
-
-
+
+
- (明るã•ã€ä½Žã„ã»ã©æ˜Žã‚‹ã„ã€0ï¼ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã¨ã—ã¦ä½¿ç”¨ï¼‰
+ (亮度, æ•°å—越å°äº®åº¦è¶Šå¤§, 0=使用默认)
-
+
- (高ã„ã»ã©æ˜Žã‚‹ã„ã€1.0ãŒãƒ‡ãƒ•ã‚©ãƒ«ãƒˆï¼‰
+ (越高越亮,默认为1.0)
- AGPグラフィックカード:
+ AGP图åƒå¡:
-
+
- グラフィックカードメモリ:
+ 图åƒå¡è®°å¿†ç©ºé—´:
@@ -43,11 +40,11 @@
512MB
-
-
-
+
+
+
- (低ã„ã»ã©é€Ÿã„)
+ (越低越快)
diff --git a/linden/indra/newview/skins/xui/zh/panel_preferences_im.xml b/linden/indra/newview/skins/xui/zh/panel_preferences_im.xml
new file mode 100644
index 0000000..c41e004
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/panel_preferences_im.xml
@@ -0,0 +1,19 @@
+
+
+
+ å³æ—¶é€šé€‰é¡¹:
+
+
+ 登陆åŽæ›´æ”¹
+
+
+
+
+
+
+
+
+
+ 忙碌模å¼çš„自动回å¤:
+
+
diff --git a/linden/indra/newview/skins/xui/zh/panel_preferences_input.xml b/linden/indra/newview/skins/xui/zh/panel_preferences_input.xml
index 6a19092..d7d1d33 100644
--- a/linden/indra/newview/skins/xui/zh/panel_preferences_input.xml
+++ b/linden/indra/newview/skins/xui/zh/panel_preferences_input.xml
@@ -1,24 +1,24 @@
- マウスルック・オプション:
+ 第一人称视角选项设置:
- マウス感度:
+ é¼ æ ‡çµæ•åº¦:
- 自動飛行オプション:
+ 自动飞翔选项:
- カメラオプション:
+ æ‘„åƒå¤´é€‰é¡¹:
- カメラ起拱点:
+ æ‘„åƒå¤´å¼¹æ€§:
-
-
-
-
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/panel_preferences_popups.xml b/linden/indra/newview/skins/xui/zh/panel_preferences_popups.xml
new file mode 100644
index 0000000..0d674b9
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/panel_preferences_popups.xml
@@ -0,0 +1,14 @@
+
+
+
+ ä¸æ˜¾ç¤ºå¼¹å‡ºç¨‹åº:
+
+
+
+ 显示弹出程åº:
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/panel_region_covenant.xml b/linden/indra/newview/skins/xui/zh/panel_region_covenant.xml
new file mode 100644
index 0000000..54fc8a9
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/panel_region_covenant.xml
@@ -0,0 +1,50 @@
+
+
+
+ 对契约åˆåŒçš„更改将出现在æ¤å—ä¸åŠ¨äº§æ‰€æœ‰çš„土地上。
+
+
+ 区域:
+
+
+ (未知)
+
+
+ ç§äººé¢†åœ°:
+
+
+ (未知)
+
+
+ 拖拽注释å¡ï¼Œä»¥æ›´æ”¹è¿™å—ä¸åŠ¨äº§çš„契约åˆåŒã€‚
+
+
+
+
+ ä¸åŠ¨äº§ä¸»äºº:
+
+
+ (未知)
+
+
+ è¿™å—区域内被è´ä¹°çš„土地å¯èƒ½å¯ä»¥è¢«é‡æ–°å‡ºå”®ï¼Œä¹Ÿå¯èƒ½ä¸èƒ½è¢«é‡æ–°å‡ºå”®ã€‚
+
+
+ è¿™å—区域内被è´ä¹°çš„土地å¯èƒ½å¯ä»¥è¢«è¿žæŽ¥æˆ–划分,也å¯èƒ½ä¸èƒ½è¢«è¿žæŽ¥å’Œåˆ’分。
+
+
+ 请ç‰å¾…...
+
+
+ è¿™å—区域内被è´ä¹°çš„土地å¯ä»¥è¢«é‡æ–°å‡ºå”®.
+
+
+ è¿™å—区域内被è´ä¹°çš„土地å¯èƒ½ä¸èƒ½è¢«é‡æ–°å‡ºå”®ã€‚
+
+
+ è¿™å—区域内被è´ä¹°çš„土地å¯ä»¥è¢«è¿žæŽ¥æˆ–者被划分。
+
+
+ è¿™å—区域内被è´ä¹°çš„土地å¯èƒ½ä¸èƒ½è¢«è”系或者被划分。
+
+
diff --git a/linden/indra/newview/skins/xui/zh/panel_region_debug.xml b/linden/indra/newview/skins/xui/zh/panel_region_debug.xml
index 528175b..31e0672 100644
--- a/linden/indra/newview/skins/xui/zh/panel_region_debug.xml
+++ b/linden/indra/newview/skins/xui/zh/panel_region_debug.xml
@@ -7,13 +7,13 @@
未知
+ tool_tip="å…³é—æ¤åŒºåŸŸå†…的所有脚本文件。" />
+ tool_tip="在æ¤åŒºåŸŸä½ å…³é—éžåŒ–身的冲çªæ¨¡å¼ã€‚" />
+ tool_tip="在æ¤åŒºåŸŸå†…å…³é—所有的物ç†æ¨¡å¼ã€‚" />
@@ -21,14 +21,14 @@
name="return_scripted_other_land_btn" />
+ tool_tip="最有å¯èƒ½é¢ä¸´æ½œåœ¨å†²çªçš„东东的列表。" />
+ tool_tip="最耗时间è¿è¡Œè„šæœ¬æ–‡æ¡£çš„东东的列表。" />
+ tool_tip="实施2分钟倒计时,并且é‡æ–°å¯åŠ¨æ¤åŒºåŸŸã€‚" />
+ tool_tip="撤销区域é‡èµ·æ¨¡å¼" />
diff --git a/linden/indra/newview/skins/xui/zh/panel_region_estate.xml b/linden/indra/newview/skins/xui/zh/panel_region_estate.xml
index 3738975..e09603b 100644
--- a/linden/indra/newview/skins/xui/zh/panel_region_estate.xml
+++ b/linden/indra/newview/skins/xui/zh/panel_region_estate.xml
@@ -33,12 +33,11 @@
- 支払ã„状æ³ã«ã‚ˆã‚Šã‚¢ã‚¯ã‚»ã‚¹ã‚’æ‹’å¦ï¼š
+ æ‹’ç»é€šå¾€æ”¯ä»˜æƒ…况信æ¯:
-
-
-
+
+
+
å…许居民:
diff --git a/linden/indra/newview/skins/xui/zh/panel_region_general.xml b/linden/indra/newview/skins/xui/zh/panel_region_general.xml
index 9130bfa..0439f12 100644
--- a/linden/indra/newview/skins/xui/zh/panel_region_general.xml
+++ b/linden/indra/newview/skins/xui/zh/panel_region_general.xml
@@ -12,11 +12,11 @@
-
+
-
+
-
+
diff --git a/linden/indra/newview/skins/xui/zh/panel_region_terrain.xml b/linden/indra/newview/skins/xui/zh/panel_region_terrain.xml
index 6f8a5fd..3f6a408 100644
--- a/linden/indra/newview/skins/xui/zh/panel_region_terrain.xml
+++ b/linden/indra/newview/skins/xui/zh/panel_region_terrain.xml
@@ -19,12 +19,12 @@
+ tool_tip="åªå¯¹åœ°äº§æ‰€æœ‰äººå¼€æ”¾è€Œä¸å¯¹ç»ç†äººå¼€æ”¾ã€‚" />
+ tool_tip="åªå¯¹åœ°äº§æ‰€æœ‰äººå¼€æ”¾è€Œä¸å¯¹ç»ç†äººå¼€æ”¾ã€‚" />
+ tool_tip="设置目å‰åœ°å½¢ä¸ºä¸Šå‡/下é™æžé™çš„ä¸ç‚¹ã€‚" />
diff --git a/linden/indra/newview/skins/xui/zh/panel_scrolling_param.xml b/linden/indra/newview/skins/xui/zh/panel_scrolling_param.xml
new file mode 100644
index 0000000..12585b0
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/panel_scrolling_param.xml
@@ -0,0 +1,12 @@
+
+
+
+ 请ç‰å¾…...
+
+
+ 请ç‰å¾…...
+
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/panel_settings_chat.xml b/linden/indra/newview/skins/xui/zh/panel_settings_chat.xml
index be994fd..7fd07cd 100644
--- a/linden/indra/newview/skins/xui/zh/panel_settings_chat.xml
+++ b/linden/indra/newview/skins/xui/zh/panel_settings_chat.xml
@@ -5,13 +5,13 @@
- å°
+ å°åž‹çš„
- ä¸é–“
+ ä¸åž‹çš„
- 大
+ 大型的
diff --git a/linden/indra/newview/skins/xui/zh/panel_settings_web.xml b/linden/indra/newview/skins/xui/zh/panel_settings_web.xml
index 313b479..46334d9 100644
--- a/linden/indra/newview/skins/xui/zh/panel_settings_web.xml
+++ b/linden/indra/newview/skins/xui/zh/panel_settings_web.xml
@@ -2,7 +2,7 @@
+ tool_tip="使用外部网络æµè§ˆå™¨èŽ·å¾—帮助, 网页链接, ç‰ç‰ã€‚\n若全å±æ˜¾ç¤ºåˆ™ä¸æŽ¨è使用。" />
æµè§ˆå™¨ä¸»é¡µ:
diff --git a/linden/indra/newview/skins/xui/zh/panel_status_bar.xml b/linden/indra/newview/skins/xui/zh/panel_status_bar.xml
index 35f04c9..cb5493c 100644
--- a/linden/indra/newview/skins/xui/zh/panel_status_bar.xml
+++ b/linden/indra/newview/skins/xui/zh/panel_status_bar.xml
@@ -2,31 +2,29 @@
- ã“ã“ã«åŒºç”»åを記入
+ 土地的å称在æ¤
-
- L$
+
+ L$
-
-
- 12:00 AM
+
+
+ 12:00 AM
-
-
-
+
+
+
100%
-
-
-
-
-
+
+
+
+
+
- パケット紛失
+ æŸå¤±æ‰“包
- ãƒãƒ³ãƒ‰å¹…
+ 带宽
diff --git a/linden/indra/newview/skins/xui/zh/panel_toolbar.xml b/linden/indra/newview/skins/xui/zh/panel_toolbar.xml
index e7e26fa..5bd3175 100644
--- a/linden/indra/newview/skins/xui/zh/panel_toolbar.xml
+++ b/linden/indra/newview/skins/xui/zh/panel_toolbar.xml
@@ -2,15 +2,15 @@
+ tool_tip="与附近的人交谈.点击交谈之åŽç‚¹å‡»åŽ†å²åŽ»æŸ¥æ‰¾äº¤è°ˆè®°å½•ã€‚" />
+ tool_tip="å°†å±å¹•æˆªå›¾ä¿å˜åˆ°ç¡¬ç›˜æˆ–清å•ä¸." />
+ tool_tip="æœç´¢åœ°åŒºï¼Œæ—¶é—´ï¼Œä»»åŠ¡ä»¥åŠæ›´å¤šã€‚" />
diff --git a/linden/indra/newview/skins/xui/zh/role_actions.xml b/linden/indra/newview/skins/xui/zh/role_actions.xml
new file mode 100644
index 0000000..ec59576
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/role_actions.xml
@@ -0,0 +1,183 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/zh/strings.xml b/linden/indra/newview/skins/xui/zh/strings.xml
new file mode 100644
index 0000000..b262393
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/strings.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/linden/indra/newview/skins/xui/zh/strings_long.xml b/linden/indra/newview/skins/xui/zh/strings_long.xml
new file mode 100644
index 0000000..b262393
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/strings_long.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/linden/indra/newview/skins/xui/zh/xui_version.xml b/linden/indra/newview/skins/xui/zh/xui_version.xml
new file mode 100644
index 0000000..ee2a0be
--- /dev/null
+++ b/linden/indra/newview/skins/xui/zh/xui_version.xml
@@ -0,0 +1,4 @@
+
+
+ 1.0
+
diff --git a/linden/indra/newview/viewer.cpp b/linden/indra/newview/viewer.cpp
index 181e446..c42ac69 100644
--- a/linden/indra/newview/viewer.cpp
+++ b/linden/indra/newview/viewer.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -28,6 +29,7 @@
#include "llviewerprecompiledheaders.h"
#include "llparcel.h"
#include "llviewerparcelmgr.h"
+#include "llviewerjoystick.h"
// System library headers
#include
@@ -117,6 +119,7 @@
#include "lldir.h"
#include "lleconomy.h"
#include "llerrorcontrol.h"
+#include "llhttpnode.h"
#include "llflexibleobject.h"
#include "llfasttimer.h"
#include "llfocusmgr.h"
@@ -135,8 +138,8 @@
#include "llvfsthread.h"
#include "llxfermanager.h"
#include "message.h"
-#include "text_out.h"
#include "llvoavatar.h"
+#include "llglslshader.h"
//
// Viewer headers
@@ -274,6 +277,7 @@ std::string gSerialNumber;
S32 gStartupState = STATE_FIRST;
+BOOL gAgentMovementCompleted = FALSE;
BOOL gHaveSavedSnapshot = FALSE;
S32 gYieldMS = 0;
@@ -332,8 +336,6 @@ static EUserServerDomain UserServerDefaultChoice = USERSERVER_DMZ;
BOOL gHackGodmode = FALSE;
#endif
-LLUUID gTemplateToken;
-
// Only used if not empty. Otherwise uses value from table above.
static std::string gLoginURI;
static std::string gHelperURI;
@@ -376,6 +378,7 @@ const char* LEGACY_DEFAULT_SETTINGS_FILE = "settings.ini";
BOOL gUseWireframe = FALSE;
BOOL gRunLocal = FALSE;
LLUUID gViewerDigest; // MD5 digest of the viewer's executable file.
+LLPumpIO* gServicePump = NULL;
S32 gNumSessions = 0;
BOOL gAllowAFK = TRUE;
@@ -422,6 +425,7 @@ LLTextureFetch* gTextureFetch = NULL;
FILE *gDebugFile = NULL; // File pointer used by the function which writes debug data.
BOOL gRandomizeFramerate = FALSE;
BOOL gPeriodicSlowFrame = FALSE;
+std::map gDebugTimers;
//LLVector3 gCameraVelocitySmoothed;
//
@@ -527,6 +531,9 @@ BOOL gLogMessages = FALSE;
BOOL gRequestInventoryLibrary = TRUE;
BOOL gAcceptTOS = FALSE;
BOOL gAcceptCriticalMessage = FALSE;
+// this is the channel the viewer uses to check for updates/login
+std::string gChannelName = "Second Life Release";
+
LLUUID gInventoryLibraryOwner;
LLUUID gInventoryLibraryRoot;
@@ -975,8 +982,8 @@ int main( int argc, char **argv )
llinfos << "Reading additional command line arguments from arguments.txt..." << llendl;
- typedef boost::tokenizer > tokenizer;
- boost::char_separator sep("\r\n ");
+ typedef boost::tokenizer > tokenizer;
+ boost::escaped_list_separator sep("\\", "\r\n ", "\"'");
tokenizer tokens(args, sep);
tokenizer::iterator token_iter;
@@ -995,6 +1002,26 @@ int main( int argc, char **argv )
args_result = parse_args(arglist.size(), fakeargv);
delete[] fakeargv;
}
+
+ // Get the user's preferred language string based on the Mac OS localization mechanism.
+ // To add a new localization:
+ // go to the "Resources" section of the project
+ // get info on "language.txt"
+ // in the "General" tab, click the "Add Localization" button
+ // create a new localization for the language you're adding
+ // set the contents of the new localization of the file to the string corresponding to our localization
+ // (i.e. "en-us", "ja", etc. Use the existing ones as a guide.)
+ CFURLRef url = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("language"), CFSTR("txt"), NULL);
+ char path[MAX_PATH];
+ if(CFURLGetFileSystemRepresentation(url, false, (UInt8 *)path, sizeof(path)))
+ {
+ LLString lang;
+ if(LLString::read(lang, path)) /* Flawfinder: ignore*/
+ {
+ gCommandLineForcedSettings["SystemLanguage"] = lang;
+ }
+ }
+ CFRelease(url);
}
#endif
@@ -1292,7 +1319,7 @@ int main( int argc, char **argv )
gLastRunVersion = gSavedSettings.getString("LastRunVersion");
- settings_version_fixup();
+ fixup_settings();
// Get the single value from the crash settings file, if it exists
std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
@@ -1403,6 +1430,8 @@ int main( int argc, char **argv )
//
LLGroupMgr::parseRoleActions("role_actions.xml");
+ LLAgent::parseTeleportMessages("teleport_strings.xml");
+
// Move certain saved settings into global variables for speed
saved_settings_to_globals();
@@ -1661,10 +1690,6 @@ int main( int argc, char **argv )
// Save the current version to the prefs file
gSavedSettings.setString("LastRunVersion", gCurrentVersion);
- // generate an token for use during template checksum requests to
- // prevent DOS attacks from injected bad template checksum replies.
- gTemplateToken.generate();
-
gSimLastTime = gRenderStartTime.getElapsedTimeF32();
gSimFrames = (F32)gFrameCount;
@@ -1752,10 +1777,10 @@ extern MovieMaker gMovieMaker;
void main_loop()
{
// Create IO Pump to use for HTTP Requests.
- LLPumpIO* io_pump = new LLPumpIO(gAPRPoolp);
- LLHTTPClient::setPump(*io_pump);
+ gServicePump = new LLPumpIO(gAPRPoolp);
+ LLHTTPClient::setPump(*gServicePump);
LLHTTPClient::setCABundle(gDirUtilp->getCAFile());
-
+
LLMemType mt1(LLMemType::MTYPE_MAIN);
LLTimer frameTimer,idleTimer;
LLTimer debugTime;
@@ -1789,6 +1814,7 @@ void main_loop()
&& !gFocusMgr.focusLocked())
{
gKeyboard->scanKeyboard();
+ LLViewerJoystick::scanJoystick();
}
// Update state based on messages, user input, object idle.
@@ -1796,8 +1822,9 @@ void main_loop()
LLFastTimer t3(LLFastTimer::FTM_IDLE);
idle();
LLCurl::process();
- io_pump->pump();
- io_pump->callback();
+ // this pump is necessary to make the login screen show up
+ gServicePump->pump();
+ gServicePump->callback();
}
if (gDoDisconnect && (gStartupState == STATE_STARTED))
@@ -1900,7 +1927,7 @@ void main_loop()
save_final_snapshot(NULL);
}
- delete io_pump;
+ delete gServicePump;
llinfos << "Exiting main_loop" << llendflush;
}
@@ -2096,7 +2123,7 @@ void write_system_info()
LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VIEWER_BUILD);
write_debug(tmp_str.c_str());
write_debug("\n");
- write_debug(gSysCPU.getCPUStringTerse());
+ write_debug(gSysCPU.getCPUString());
write_debug("\n");
tmp_str = llformat("RAM: %u\n", gSysMemory.getPhysicalMemory());
@@ -3129,6 +3156,12 @@ void idle_shutdown()
{
return;
}
+
+ // close IM interface
+ if(gIMView)
+ {
+ gIMView->disconnectAllSessions();
+ }
// Wait for all floaters to get resolved
if (gFloaterView
@@ -3212,8 +3245,6 @@ extern U32 gVisTested;
void update_statistics(U32 frame_count)
{
- const S32 MAX_TEXT_LENGTH = 255;
-
gTotalWorldBytes += gVLManager.getTotalBytes();
gTotalObjectBytes += gObjectBits / 8;
gTotalTextureBytes += LLViewerImageList::sTextureBits / 8;
@@ -3273,6 +3304,18 @@ void update_statistics(U32 frame_count)
gViewerStats->mAssetKBitStat.addValue(gTransferManager.getTransferBitsIn(LLTCT_ASSET)/1024.f);
gTransferManager.resetTransferBitsIn(LLTCT_ASSET);
+ static S32 tex_bits_idle_count = 0;
+ if (LLViewerImageList::sTextureBits == 0)
+ {
+ if (++tex_bits_idle_count >= 30)
+ gDebugTimers[0].pause();
+ }
+ else
+ {
+ tex_bits_idle_count = 0;
+ gDebugTimers[0].unpause();
+ }
+
gViewerStats->mTexturePacketsStat.addValue(LLViewerImageList::sTexturePackets);
cdp = gMessageSystem->mCircuitInfo.findCircuit(gUserServer);
@@ -3288,7 +3331,7 @@ void update_statistics(U32 frame_count)
// log when the LibXUL (aka Mozilla) widget is used and opened so we can monitor framerate changes
#if LL_LIBXUL_ENABLED
{
- BOOL result = LLHtmlHelp::getFloaterOpened();
+ BOOL result = gViewerHtmlHelp.getFloaterOpened();
gViewerStats->setStat(LLViewerStats::ST_LIBXUL_WIDGET_USED, (F64)result);
}
#endif
@@ -3314,149 +3357,8 @@ void update_statistics(U32 frame_count)
LLViewerImageList::sTextureBits = 0;
LLViewerImageList::sTexturePackets = 0;
-
- // Argh! Shouldn't be doing the rendering here, it should be in a UI class!
-
- static char wind_vel_text[MAX_TEXT_LENGTH]; /* Flawfinder: ignore */
- static char wind_vector_text[MAX_TEXT_LENGTH]; /* Flawfinder: ignore */
- static char rwind_vel_text[MAX_TEXT_LENGTH]; /* Flawfinder: ignore */
- static char rwind_vector_text[MAX_TEXT_LENGTH]; /* Flawfinder: ignore */
- static char audio_text[MAX_TEXT_LENGTH]; /* Flawfinder: ignore */
-
- // Now draw the text
- LLGLSUIDefault gls_ui;
-
- // Draw the statistics in a light gray
- // and in a thin font
- set_text_color( LLColor4( 0.86f, 0.86f, 0.86f, 1.f ) );
-
- // Draw stuff growing up from right lower corner of screen
- U32 xpos = gViewerWindow->getWindowWidth() - 350;
- U32 ypos = 64;
- const U32 y_inc = 20;
-
- if (gDisplayCameraPos)
- {
- char camera_view_text[MAX_TEXT_LENGTH]; /* Flawfinder: ignore */
- char camera_center_text[MAX_TEXT_LENGTH]; /* Flawfinder: ignore */
- char agent_view_text[MAX_TEXT_LENGTH]; /* Flawfinder: ignore */
- char agent_left_text[MAX_TEXT_LENGTH]; /* Flawfinder: ignore */
- char agent_center_text[MAX_TEXT_LENGTH]; /* Flawfinder: ignore */
- char agent_root_center_text[MAX_TEXT_LENGTH]; /* Flawfinder: ignore */
-
- LLVector3d tvector; // Temporary vector to hold data for printing.
-
- // Update camera center, camera view, wind info every other frame
- tvector = gAgent.getPositionGlobal();
- snprintf(agent_center_text, MAX_TEXT_LENGTH, "AgentCenter %f %f %f", /* Flawfinder: ignore */
- (F32)(tvector.mdV[VX]), (F32)(tvector.mdV[VY]), (F32)(tvector.mdV[VZ]));
-
- if (gAgent.getAvatarObject())
- {
- tvector = gAgent.getPosGlobalFromAgent(gAgent.getAvatarObject()->mRoot.getWorldPosition());
- snprintf(agent_root_center_text, MAX_TEXT_LENGTH, "AgentRootCenter %f %f %f", /* Flawfinder: ignore */
- (F32)(tvector.mdV[VX]), (F32)(tvector.mdV[VY]), (F32)(tvector.mdV[VZ]));
- }
- else
- {
- snprintf(agent_root_center_text, MAX_TEXT_LENGTH, "---"); /* Flawfinder: ignore */
- }
-
-
- tvector = LLVector4(gAgent.getFrameAgent().getAtAxis());
- snprintf(agent_view_text, MAX_TEXT_LENGTH, "AgentAtAxis %f %f %f", /* Flawfinder: ignore */
- (F32)(tvector.mdV[VX]), (F32)(tvector.mdV[VY]), (F32)(tvector.mdV[VZ]));
-
- tvector = LLVector4(gAgent.getFrameAgent().getLeftAxis());
- snprintf(agent_left_text, MAX_TEXT_LENGTH, "AgentLeftAxis %f %f %f", /* Flawfinder: ignore */
- (F32)(tvector.mdV[VX]), (F32)(tvector.mdV[VY]), (F32)(tvector.mdV[VZ]));
-
- tvector = gAgent.getCameraPositionGlobal();
- snprintf(camera_center_text, MAX_TEXT_LENGTH, "CameraCenter %f %f %f", /* Flawfinder: ignore */
- (F32)(tvector.mdV[VX]), (F32)(tvector.mdV[VY]), (F32)(tvector.mdV[VZ]));
-
- tvector = LLVector4(gCamera->getAtAxis());
- snprintf(camera_view_text, MAX_TEXT_LENGTH, "CameraAtAxis %f %f %f", /* Flawfinder: ignore */
- (F32)(tvector.mdV[VX]), (F32)(tvector.mdV[VY]), (F32)(tvector.mdV[VZ]));
-
- add_text(xpos, ypos, agent_center_text); ypos += y_inc;
- add_text(xpos, ypos, agent_root_center_text); ypos += y_inc;
- add_text(xpos, ypos, agent_view_text); ypos += y_inc;
- add_text(xpos, ypos, agent_left_text); ypos += y_inc;
- add_text(xpos, ypos, camera_center_text); ypos += y_inc;
- add_text(xpos, ypos, camera_view_text); ypos += y_inc;
- }
-
- if (gDisplayWindInfo)
- {
- snprintf(wind_vel_text, MAX_TEXT_LENGTH, "Wind velocity %.2f m/s", gWindVec.magVec()); /* Flawfinder: ignore */
- snprintf(wind_vector_text, MAX_TEXT_LENGTH, "Wind vector %.2f %.2f %.2f", gWindVec.mV[0], gWindVec.mV[1], gWindVec.mV[2]); /* Flawfinder: ignore */
- snprintf(rwind_vel_text, MAX_TEXT_LENGTH, "RWind vel %.2f m/s", gRelativeWindVec.magVec()); /* Flawfinder: ignore */
- snprintf(rwind_vector_text, MAX_TEXT_LENGTH, "RWind vec %.2f %.2f %.2f", gRelativeWindVec.mV[0], gRelativeWindVec.mV[1], gRelativeWindVec.mV[2]); /* Flawfinder: ignore */
-
- add_text(xpos, ypos, wind_vel_text); ypos += y_inc;
- add_text(xpos, ypos, wind_vector_text); ypos += y_inc;
- add_text(xpos, ypos, rwind_vel_text); ypos += y_inc;
- add_text(xpos, ypos, rwind_vector_text); ypos += y_inc;
- }
- if (gDisplayWindInfo)
- {
- if (gAudiop)
- {
- snprintf(audio_text, MAX_TEXT_LENGTH, "Audio for wind: %d", gAudiop->isWindEnabled()); /* Flawfinder: ignore */
- }
- add_text(xpos, ypos, audio_text); ypos += y_inc;
- }
- if (gDisplayFOV)
- {
- char fov_string[MAX_TEXT_LENGTH]; /* Flawfinder: ignore */
- snprintf(fov_string, MAX_TEXT_LENGTH, "FOV: %2.1f deg", RAD_TO_DEG * gCamera->getView()); /* Flawfinder: ignore */
- add_text(xpos, ypos, fov_string);
- ypos += y_inc;
- }
-#if !LL_RELEASE_FOR_DOWNLOAD
- if (gPipeline.getUseVertexShaders() == 0)
- {
- add_text(xpos, ypos, "Shaders Disabled");
- ypos += y_inc;
- }
- add_text(xpos, ypos, (char*) llformat("%d MB Vertex Data", LLVertexBuffer::sAllocatedBytes/(1024*1024)).c_str());
- ypos += y_inc;
-
- add_text(xpos, ypos, (char*) llformat("%d Pending Lock", LLVertexBuffer::sLockedList.size()).c_str());
- ypos += y_inc;
-
- add_text(xpos, ypos, (char*) llformat("%d Vertex Buffers", LLVertexBuffer::sGLCount).c_str());
- ypos += y_inc;
-#endif
- if (LLPipeline::getRenderParticleBeacons(NULL))
- {
- add_text(xpos, ypos, "Viewing particle beacons (blue)");
- ypos += y_inc;
- }
- if (LLPipeline::toggleRenderTypeControlNegated((void*)LLPipeline::RENDER_TYPE_PARTICLES))
- {
- add_text(xpos, ypos, "Hiding particles");
- ypos += y_inc;
- }
- if (LLPipeline::getRenderPhysicalBeacons(NULL))
- {
- add_text(xpos, ypos, "Viewing physical object beacons (green)");
- ypos += y_inc;
- }
- if (LLPipeline::getRenderScriptedBeacons(NULL))
- {
- add_text(xpos, ypos, "Viewing scripted object beacons (red)");
- ypos += y_inc;
- }
- if (LLPipeline::getRenderSoundBeacons(NULL))
- {
- add_text(xpos, ypos, "Viewing sound beacons (yellow)");
- ypos += y_inc;
- }
}
-
//
// Handle messages, and all message related stuff
//
@@ -3485,7 +3387,7 @@ void idle_network()
stop_glerror();
const S64 frame_count = gFrameCount; // U32->S64
F32 total_time = 0.0f;
- while (gMessageSystem->checkMessages(frame_count))
+ while (gMessageSystem->checkAllMessages(frame_count, gServicePump))
{
if (gDoDisconnect)
{
@@ -3757,6 +3659,8 @@ void idle()
// Update statistics for this frame
update_statistics(gFrameCount);
+
+ gViewerWindow->updateDebugText();
}
////////////////////////////////////////
@@ -3962,7 +3866,14 @@ void idle()
}
stop_glerror();
- gAgent.updateCamera();
+ if (!LLViewerJoystick::sOverrideCamera)
+ {
+ gAgent.updateCamera();
+ }
+ else
+ {
+ LLViewerJoystick::updateCamera();
+ }
// objects and camera should be in sync, do LOD calculations now
{
@@ -4656,12 +4567,23 @@ class LLSetShaderListener: public LLSimpleListener
{
bool handleEvent(LLPointer event, const LLSD& userdata)
{
- gPipeline.setShaders();
+ LLShaderMgr::setShaders();
return true;
}
};
static LLSetShaderListener set_shader_listener;
+class LLReleaseGLBufferListener: public LLSimpleListener
+{
+ bool handleEvent(LLPointer event, const LLSD& userdata)
+ {
+ gPipeline.releaseGLBuffers();
+ LLShaderMgr::setShaders();
+ return true;
+ }
+};
+static LLReleaseGLBufferListener release_gl_buffer_listener;
+
class LLVolumeLODListener: public LLSimpleListener
{
bool handleEvent(LLPointer event, const LLSD& userdata)
@@ -4841,6 +4763,15 @@ class LLMasterAudioListener: public LLSimpleListener
}
};
+class LLJoystickListener : public LLSimpleListener
+{
+ bool handleEvent(LLPointer event, const LLSD& userdata)
+ {
+ LLViewerJoystick::updateCamera(TRUE);
+ return true;
+ }
+};
+static LLJoystickListener joystick_listener;
void stop_video();
void prepare_video(const LLParcel *parcel);
@@ -5045,7 +4976,10 @@ void saved_settings_to_globals()
gSavedSettings.getControl("RenderTerrainDetail")->addListener(&terrain_detail_listener);
gSavedSettings.getControl("RenderRippleWater")->addListener(&set_shader_listener);
gSavedSettings.getControl("RenderAvatarVP")->addListener(&set_shader_listener);
+ gSavedSettings.getControl("VertexShaderEnable")->addListener(&set_shader_listener);
gSavedSettings.getControl("RenderDynamicReflections")->addListener(&set_shader_listener);
+ gSavedSettings.getControl("RenderGlow")->addListener(&release_gl_buffer_listener);
+ gSavedSettings.getControl("RenderGlowResolution")->addListener(&release_gl_buffer_listener);
gSavedSettings.getControl("RenderAvatarMode")->addListener(&set_shader_listener);
gSavedSettings.getControl("RenderVolumeLODFactor")->addListener(&volume_lod_listener);
gSavedSettings.getControl("RenderAvatarLODFactor")->addListener(&avatar_lod_listener);
@@ -5069,7 +5003,14 @@ void saved_settings_to_globals()
gSavedSettings.getControl("RenderVBOEnable")->addListener(&render_use_vbo_listener);
gSavedSettings.getControl("RenderLightingDetail")->addListener(&render_lighting_detail_listener);
gSavedSettings.getControl("NumpadControl")->addListener(&numpad_control_listener);
-
+ gSavedSettings.getControl("FlycamAxis0")->addListener(&joystick_listener);
+ gSavedSettings.getControl("FlycamAxis1")->addListener(&joystick_listener);
+ gSavedSettings.getControl("FlycamAxis2")->addListener(&joystick_listener);
+ gSavedSettings.getControl("FlycamAxis3")->addListener(&joystick_listener);
+ gSavedSettings.getControl("FlycamAxis4")->addListener(&joystick_listener);
+ gSavedSettings.getControl("FlycamAxis5")->addListener(&joystick_listener);
+ gSavedSettings.getControl("FlycamAxis6")->addListener(&joystick_listener);
+
// gAgent.init() also loads from saved settings.
}
@@ -5436,7 +5377,7 @@ void send_stats()
gMessageSystem->addS32Fast(_PREHASH_RegionsVisited, gAgent.getRegionsVisited());
gMessageSystem->addU32Fast(_PREHASH_SysRAM, gSysMemory.getPhysicalMemory());
gMessageSystem->addStringFast(_PREHASH_SysOS, gSysOS.getOSString());
- gMessageSystem->addStringFast(_PREHASH_SysCPU, gSysCPU.getCPUStringTerse());
+ gMessageSystem->addStringFast(_PREHASH_SysCPU, gSysCPU.getCPUString());
std::string gpu_desc = llformat("%-6s Class %d ",
@@ -5903,6 +5844,10 @@ int parse_args(int argc, char **argv)
{
gVerifySSLCert = false;
}
+ else if ( (!strcmp(argv[j], "--channel") || !strcmp(argv[j], "-channel")) && (++j < argc))
+ {
+ gChannelName = argv[j];
+ }
#if LL_DARWIN
else if (!strncmp(argv[j], "-psn_", 5))
{
@@ -6162,12 +6107,6 @@ void disconnect_viewer(void *)
save_name_cache();
- // close IM interface
- if(gIMView)
- {
- gIMView->disconnectAllSessions();
- }
-
// close inventory interface, close all windows
LLInventoryView::cleanup();
diff --git a/linden/indra/newview/viewer.h b/linden/indra/newview/viewer.h
index 125b0ec..f082e99 100644
--- a/linden/indra/newview/viewer.h
+++ b/linden/indra/newview/viewer.h
@@ -4,6 +4,7 @@
*
* Copyright (c) 2000-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -64,6 +65,8 @@ class LLPieMenu;
class LLWorkerThread;
class LLTextureFetch;
class LLTextureCache;
+class LLPumpIO;
+class LLHTTPNode;
//
// Global Variables
@@ -83,11 +86,11 @@ extern LLString gCmdLineFirstName;
extern LLString gCmdLineLastName;
extern LLString gCmdLinePassword;
extern BOOL gAutoLogin;
-extern LLUUID gTemplateToken;
extern U32 gFrameCount;
extern BOOL gRequestInventoryLibrary;
extern BOOL gAcceptTOS;
extern BOOL gAcceptCriticalMessage;
+extern std::string gChannelName;
extern LLUUID gInventoryLibraryOwner;
extern LLUUID gInventoryLibraryRoot;
extern BOOL gLastExecFroze;
@@ -115,6 +118,9 @@ extern U32 gSecondsPerYear;
// currently in daylight savings time?
extern BOOL gPacificDaylightTime;
+extern LLVector3 gWindVec;
+extern LLVector3 gRelativeWindVec;
+
extern U64 gFrameTime; // The timestamp of the most-recently-processed frame
extern F32 gFrameTimeSeconds; // Loses msec precision after ~4.5 hours...
extern F32 gFrameIntervalSeconds; // Elapsed time between current and previous gFrameTimeSeconds
@@ -139,6 +145,8 @@ extern LLFrameTimer gTeleportDisplayTimer;
extern LLGlobalEconomy *gGlobalEconomy;
+extern std::map gDebugTimers;
+
// VFS globals - gVFS is for general use
// gStaticVFS is read-only and is shipped w/ the viewer
// it has pre-cache data like the UI .TGAs
@@ -150,6 +158,8 @@ extern LLWorkerThread* gImageDecodeThread;
extern LLTextureFetch* gTextureFetch;
extern LLTextureCache* gTextureCache;
+extern LLPumpIO* gServicePump;
+
class LLURLSimString
{
public:
diff --git a/linden/indra/newview/viewer_manifest.py b/linden/indra/newview/viewer_manifest.py
index 4c422e4..0c8ef60 100755
--- a/linden/indra/newview/viewer_manifest.py
+++ b/linden/indra/newview/viewer_manifest.py
@@ -6,6 +6,7 @@
#
# Copyright (c) 2006-2007, Linden Research, Inc.
#
+# Second Life Viewer Source Code
# The source code in this file ("Source Code") is provided by Linden Lab
# to you under the terms of the GNU General Public License, version 2.0
# ("GPL"), unless you have obtained a separate licensing agreement
@@ -291,16 +292,13 @@ class DarwinManifest(ViewerManifest):
if self.prefix(src="", dst="Resources"):
super(DarwinManifest, self).construct()
- # the trial directory seems to be not used [rdw]
- self.path('trial')
-
if self.prefix("cursors_mac"):
self.path("*.tif")
self.end_prefix("cursors_mac")
self.path("licenses-mac.txt", dst="licenses.txt")
self.path("featuretable_mac.txt")
- self.path("secondlife.icns")
+# self.path("secondlife.icns")
# llkdu dynamic library
# self.path("../../libraries/universal-darwin/lib_release/libllkdu.dylib", "libllkdu.dylib")
diff --git a/linden/indra/test/common.cpp b/linden/indra/test/common.cpp
index 97ff21c..2a88ba0 100644
--- a/linden/indra/test/common.cpp
+++ b/linden/indra/test/common.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -43,6 +44,7 @@
#include "llmemorystream.h"
#include "llsd.h"
#include "llsdserialize.h"
+#include "u64.h"
namespace tut
{
@@ -445,3 +447,174 @@ namespace tut
}
}
+namespace tut
+{
+ struct U64_data
+ {
+ };
+ typedef test_group U64_test;
+ typedef U64_test::object U64_object;
+ tut::U64_test U64_testcase("U64_conversion");
+
+ // U64_to_str
+ template<> template<>
+ void U64_object::test<1>()
+ {
+ U64 val;
+ std::string val_str;
+ char result[256];
+ std::string result_str;
+
+ val = U64L(18446744073709551610); // slightly less than MAX_U64
+ val_str = "18446744073709551610";
+
+ U64_to_str(val, result, sizeof(result));
+ result_str = (const char*) result;
+ ensure_equals("U64_to_str converted 1.1", val_str, result_str);
+
+ val = 0;
+ val_str = "0";
+ U64_to_str(val, result, sizeof(result));
+ result_str = (const char*) result;
+ ensure_equals("U64_to_str converted 1.2", val_str, result_str);
+
+ val = U64L(18446744073709551615); // 0xFFFFFFFFFFFFFFFF
+ val_str = "18446744073709551615";
+ U64_to_str(val, result, sizeof(result));
+ result_str = (const char*) result;
+ ensure_equals("U64_to_str converted 1.3", val_str, result_str);
+
+ // overflow - will result in warning at compile time
+ val = U64L(18446744073709551615) + 1; // overflow 0xFFFFFFFFFFFFFFFF + 1 == 0
+ val_str = "0";
+ U64_to_str(val, result, sizeof(result));
+ result_str = (const char*) result;
+ ensure_equals("U64_to_str converted 1.4", val_str, result_str);
+
+ val = U64L(-1); // 0xFFFFFFFFFFFFFFFF == 18446744073709551615
+ val_str = "18446744073709551615";
+ U64_to_str(val, result, sizeof(result));
+ result_str = (const char*) result;
+ ensure_equals("U64_to_str converted 1.5", val_str, result_str);
+
+ val = U64L(10000000000000000000); // testing preserving of 0s
+ val_str = "10000000000000000000";
+ U64_to_str(val, result, sizeof(result));
+ result_str = (const char*) result;
+ ensure_equals("U64_to_str converted 1.6", val_str, result_str);
+
+ val = 1; // testing no leading 0s
+ val_str = "1";
+ U64_to_str(val, result, sizeof(result));
+ result_str = (const char*) result;
+ ensure_equals("U64_to_str converted 1.7", val_str, result_str);
+
+ val = U64L(18446744073709551615); // testing exact sized buffer for result
+ val_str = "18446744073709551615";
+ memset(result, 'A', sizeof(result)); // initialize buffer with all 'A'
+ U64_to_str(val, result, sizeof("18446744073709551615")); //pass in the exact size
+ result_str = (const char*) result;
+ ensure_equals("U64_to_str converted 1.8", val_str, result_str);
+
+ val = U64L(18446744073709551615); // testing smaller sized buffer for result
+ val_str = "1844";
+ memset(result, 'A', sizeof(result)); // initialize buffer with all 'A'
+ U64_to_str(val, result, 5); //pass in a size of 5. should only copy first 4 integers and add a null terminator
+ result_str = (const char*) result;
+ ensure_equals("U64_to_str converted 1.9", val_str, result_str);
+ }
+
+ // str_to_U64
+ template<> template<>
+ void U64_object::test<2>()
+ {
+ U64 val;
+ U64 result;
+
+ val = U64L(18446744073709551610); // slightly less than MAX_U64
+ result = str_to_U64("18446744073709551610");
+ ensure_equals("str_to_U64 converted 2.1", val, result);
+
+ val = U64L(0); // empty string
+ result = str_to_U64("");
+ ensure_equals("str_to_U64 converted 2.2", val, result);
+
+ val = U64L(0); // 0
+ result = str_to_U64("0");
+ ensure_equals("str_to_U64 converted 2.3", val, result);
+
+ val = U64L(18446744073709551615); // 0xFFFFFFFFFFFFFFFF
+ result = str_to_U64("18446744073709551615");
+ ensure_equals("str_to_U64 converted 2.4", val, result);
+
+ // overflow - will result in warning at compile time
+ val = U64L(18446744073709551615) + 1; // overflow 0xFFFFFFFFFFFFFFFF + 1 == 0
+ result = str_to_U64("18446744073709551616");
+ ensure_equals("str_to_U64 converted 2.5", val, result);
+
+ val = U64L(1234); // process till first non-integral character
+ result = str_to_U64("1234A5678");
+ ensure_equals("str_to_U64 converted 2.6", val, result);
+
+ val = U64L(5678); // skip all non-integral characters
+ result = str_to_U64("ABCD5678");
+ ensure_equals("str_to_U64 converted 2.7", val, result);
+
+ // should it skip negative sign and process
+ // rest of string or return 0
+ val = U64L(1234); // skip initial negative sign
+ result = str_to_U64("-1234");
+ ensure_equals("str_to_U64 converted 2.8", val, result);
+
+ val = U64L(5678); // stop at negative sign in the middle
+ result = str_to_U64("5678-1234");
+ ensure_equals("str_to_U64 converted 2.9", val, result);
+
+ val = U64L(0); // no integers
+ result = str_to_U64("AaCD");
+ ensure_equals("str_to_U64 converted 2.10", val, result);
+ }
+
+ // U64_to_F64
+ template<> template<>
+ void U64_object::test<3>()
+ {
+ F64 val;
+ F64 result;
+
+ result = 18446744073709551610.0;
+ val = U64_to_F64(U64L(18446744073709551610));
+ ensure_equals("U64_to_F64 converted 3.1", val, result);
+
+ result = 18446744073709551615.0; // 0xFFFFFFFFFFFFFFFF
+ val = U64_to_F64(U64L(18446744073709551615));
+ ensure_equals("U64_to_F64 converted 3.2", val, result);
+
+ result = 0.0; // overflow 0xFFFFFFFFFFFFFFFF + 1 == 0
+ // overflow - will result in warning at compile time
+ val = U64_to_F64(U64L(18446744073709551615)+1);
+ ensure_equals("U64_to_F64 converted 3.3", val, result);
+
+ result = 0.0; // 0
+ val = U64_to_F64(U64L(0));
+ ensure_equals("U64_to_F64 converted 3.4", val, result);
+
+ result = 1.0; // odd
+ val = U64_to_F64(U64L(1));
+ ensure_equals("U64_to_F64 converted 3.5", val, result);
+
+ result = 2.0; // even
+ val = U64_to_F64(U64L(2));
+ ensure_equals("U64_to_F64 converted 3.6", val, result);
+
+ result = U64L(0x7FFFFFFFFFFFFFFF) * 1.0L; // 0x7FFFFFFFFFFFFFFF
+ val = U64_to_F64(U64L(0x7FFFFFFFFFFFFFFF));
+ ensure_equals("U64_to_F64 converted 3.7", val, result);
+ }
+
+ // llstrtou64
+ // seems to be deprecated - could not find it being used
+ // anywhere in the tarball - skipping unit tests for now
+}
+
+
diff --git a/linden/indra/test/files.lst b/linden/indra/test/files.lst
index 77ce9f4..b04b0ac 100644
--- a/linden/indra/test/files.lst
+++ b/linden/indra/test/files.lst
@@ -9,11 +9,14 @@ test/llhttpclient_tut.cpp
test/llhttpnode_tut.cpp
test/lliohttpserver_tut.cpp
test/llmime_tut.cpp
+test/llmessageconfig_tut.cpp
test/llpipeutil.cpp
test/llrandom_tut.cpp
+test/llsdmessagebuilder_tut.cpp
+test/llsdmessagereader_tut.cpp
test/llsd_new_tut.cpp
test/llsdserialize_tut.cpp
-test/llsd_message_system_tut.cpp
+test/llservicebuilder_tut.cpp
test/lltiming_tut.cpp
test/lltut.cpp
test/lluri_tut.cpp
diff --git a/linden/indra/test/inventory.cpp b/linden/indra/test/inventory.cpp
index 2099da3..0539910 100644
--- a/linden/indra/test/inventory.cpp
+++ b/linden/indra/test/inventory.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/test/io.cpp b/linden/indra/test/io.cpp
index a86711a..412c010 100644
--- a/linden/indra/test/io.cpp
+++ b/linden/indra/test/io.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -50,6 +51,101 @@
namespace tut
{
+ struct heap_buffer_data
+ {
+ heap_buffer_data() : mBuffer(NULL) {}
+ ~heap_buffer_data() { if(mBuffer) delete mBuffer; }
+ LLHeapBuffer* mBuffer;
+ };
+ typedef test_group heap_buffer_test;
+ typedef heap_buffer_test::object heap_buffer_object;
+ tut::heap_buffer_test thb("heap_buffer");
+
+ template<> template<>
+ void heap_buffer_object::test<1>()
+ {
+ const S32 BUF_SIZE = 100;
+ mBuffer = new LLHeapBuffer(BUF_SIZE);
+ ensure_equals("empty buffer capacity", mBuffer->capacity(), BUF_SIZE);
+ const S32 SEGMENT_SIZE = 50;
+ LLSegment segment;
+ mBuffer->createSegment(0, SEGMENT_SIZE, segment);
+ ensure_equals("used buffer capacity", mBuffer->capacity(), BUF_SIZE);
+ }
+
+ template<> template<>
+ void heap_buffer_object::test<2>()
+ {
+ const S32 BUF_SIZE = 10;
+ mBuffer = new LLHeapBuffer(BUF_SIZE);
+ LLSegment segment;
+ mBuffer->createSegment(0, BUF_SIZE, segment);
+ ensure("segment is in buffer", mBuffer->containsSegment(segment));
+ ensure_equals("buffer consumed", mBuffer->bytesLeft(), 0);
+ bool created;
+ created = mBuffer->createSegment(0, 0, segment);
+ ensure("Create zero size segment fails", !created);
+ created = mBuffer->createSegment(0, BUF_SIZE, segment);
+ ensure("Create segment fails", !created);
+ }
+
+ template<> template<>
+ void heap_buffer_object::test<3>()
+ {
+ const S32 BUF_SIZE = 10;
+ mBuffer = new LLHeapBuffer(BUF_SIZE);
+ LLSegment segment;
+ mBuffer->createSegment(0, BUF_SIZE, segment);
+ ensure("segment is in buffer", mBuffer->containsSegment(segment));
+ ensure_equals("buffer consumed", mBuffer->bytesLeft(), 0);
+ bool reclaimed = mBuffer->reclaimSegment(segment);
+ ensure("buffer reclaimed.", reclaimed);
+ ensure_equals("buffer available", mBuffer->bytesLeft(), BUF_SIZE);
+ bool created;
+ created = mBuffer->createSegment(0, 0, segment);
+ ensure("Create zero size segment fails", !created);
+ created = mBuffer->createSegment(0, BUF_SIZE, segment);
+ ensure("Create another segment succeeds", created);
+ }
+
+ template<> template<>
+ void heap_buffer_object::test<4>()
+ {
+ const S32 BUF_SIZE = 10;
+ const S32 SEGMENT_SIZE = 4;
+ mBuffer = new LLHeapBuffer(BUF_SIZE);
+ LLSegment seg1;
+ mBuffer->createSegment(0, SEGMENT_SIZE, seg1);
+ ensure("segment is in buffer", mBuffer->containsSegment(seg1));
+ LLSegment seg2;
+ mBuffer->createSegment(0, SEGMENT_SIZE, seg2);
+ ensure("segment is in buffer", mBuffer->containsSegment(seg2));
+ LLSegment seg3;
+ mBuffer->createSegment(0, SEGMENT_SIZE, seg3);
+ ensure("segment is in buffer", mBuffer->containsSegment(seg3));
+ ensure_equals("segment is truncated", seg3.size(), 2);
+ LLSegment seg4;
+ bool created;
+ created = mBuffer->createSegment(0, SEGMENT_SIZE, seg4);
+ ensure("Create segment fails", !created);
+ bool reclaimed;
+ reclaimed = mBuffer->reclaimSegment(seg1);
+ ensure("buffer reclaim succeed.", reclaimed);
+ ensure_equals("no buffer available", mBuffer->bytesLeft(), 0);
+ reclaimed = mBuffer->reclaimSegment(seg2);
+ ensure("buffer reclaim succeed.", reclaimed);
+ ensure_equals("buffer reclaimed", mBuffer->bytesLeft(), 0);
+ reclaimed = mBuffer->reclaimSegment(seg3);
+ ensure("buffer reclaim succeed.", reclaimed);
+ ensure_equals("buffer reclaimed", mBuffer->bytesLeft(), BUF_SIZE);
+ created = mBuffer->createSegment(0, SEGMENT_SIZE, seg1);
+ ensure("segment is in buffer", mBuffer->containsSegment(seg1));
+ ensure("Create segment succeds", created);
+ }
+}
+
+namespace tut
+{
struct buffer_data
{
LLBufferArray mBuffer;
@@ -228,6 +324,37 @@ namespace tut
delete[] temp;
}
+ template<> template<>
+ void buffer_object::test<9>()
+ {
+ LLChannelDescriptors ch = mBuffer.nextChannel();
+ mBuffer.append(ch.in(), (U8*)"1", 1);
+ S32 capacity = mBuffer.capacity();
+ ensure("has capacity", capacity > 0);
+ U8* temp = new U8[capacity - 1];
+ mBuffer.append(ch.in(), temp, capacity - 1);
+ capacity = mBuffer.capacity();
+ ensure("has capacity when full", capacity > 0);
+ S32 used = mBuffer.countAfter(ch.in(), NULL);
+ ensure_equals("used equals capacity", used, capacity);
+
+ LLBufferArray::segment_iterator_t iter = mBuffer.beginSegment();
+ while(iter != mBuffer.endSegment())
+ {
+ mBuffer.eraseSegment(iter++);
+ }
+
+ used = mBuffer.countAfter(ch.in(), NULL);
+ ensure_equals("used is zero", used, 0);
+ S32 capacity2 = mBuffer.capacity();
+ ensure_equals("capacity the same after erase", capacity2, capacity);
+ mBuffer.append(ch.in(), temp, capacity - 1);
+ capacity2 = mBuffer.capacity();
+ ensure_equals("capacity the same after append", capacity2, capacity);
+
+ delete[] temp;
+ }
+
#if 0
template<> template<>
void buffer_object::test<9>()
@@ -287,7 +414,7 @@ namespace tut
void bas_object::test<1>()
{
const char HELLO_WORLD[] = "hello world";
- const S32 str_len = strlen(HELLO_WORLD); /* Flawfinder: ignore */
+ const S32 str_len = strlen(HELLO_WORLD); /* Flawfinder: ignore */
LLChannelDescriptors ch = mBuffer.nextChannel();
LLBufferStream str(ch, &mBuffer);
mBuffer.append(ch.in(), (U8*)HELLO_WORLD, str_len);
diff --git a/linden/indra/test/llapp_tut.cpp b/linden/indra/test/llapp_tut.cpp
index 3223f91..60995ba 100644
--- a/linden/indra/test/llapp_tut.cpp
+++ b/linden/indra/test/llapp_tut.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/test/llbase64_tut.cpp b/linden/indra/test/llbase64_tut.cpp
index fe02397..1d059dce 100644
--- a/linden/indra/test/llbase64_tut.cpp
+++ b/linden/indra/test/llbase64_tut.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2007-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/test/llblowfish_tut.cpp b/linden/indra/test/llblowfish_tut.cpp
index 0d85ade..ba63860 100644
--- a/linden/indra/test/llblowfish_tut.cpp
+++ b/linden/indra/test/llblowfish_tut.cpp
@@ -9,6 +9,7 @@
*
* Copyright (c) 2007-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/test/llerror_tut.cpp b/linden/indra/test/llerror_tut.cpp
index a4b4258..6c3df43 100644
--- a/linden/indra/test/llerror_tut.cpp
+++ b/linden/indra/test/llerror_tut.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/test/llhttpclient_tut.cpp b/linden/indra/test/llhttpclient_tut.cpp
index ef53e71..7918205 100644
--- a/linden/indra/test/llhttpclient_tut.cpp
+++ b/linden/indra/test/llhttpclient_tut.cpp
@@ -4,6 +4,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -235,7 +236,7 @@ namespace tut
template<> template<>
void HTTPClientTestObject::test<1>()
{
- LLHTTPClient::get("http://www.google.com/", newResult());
+ LLHTTPClient::get("http://www.secondlife.com/", newResult());
runThePump();
ensureStatusOK();
ensure("result object wasn't destroyed", mResultDeleted);
diff --git a/linden/indra/test/llhttpnode_tut.cpp b/linden/indra/test/llhttpnode_tut.cpp
index 006ba09..fb35f77 100644
--- a/linden/indra/test/llhttpnode_tut.cpp
+++ b/linden/indra/test/llhttpnode_tut.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/test/lliohttpserver_tut.cpp b/linden/indra/test/lliohttpserver_tut.cpp
index 1cc94bb..0d914f2 100644
--- a/linden/indra/test/lliohttpserver_tut.cpp
+++ b/linden/indra/test/lliohttpserver_tut.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -116,7 +117,7 @@ namespace tut
LLSD context;
chain.push_back(LLIOPipe::ptr_t(injector));
- LLCreateHTTPPipe(chain, mRoot);
+ LLCreateHTTPPipe(chain, mRoot, LLSD());
chain.push_back(LLIOPipe::ptr_t(extractor));
pump->addChain(chain, DEFAULT_CHAIN_EXPIRY_SECS);
@@ -297,6 +298,33 @@ namespace tut
);
}
+ template<> template<>
+ void HTTPServiceTestObject::test<7>()
+ {
+ // test large request
+ std::stringstream stream;
+
+ //U32 size = 36 * 1024 * 1024;
+ //U32 size = 36 * 1024;
+ //std::vector data(size);
+ //memset(&(data[0]), '1', size);
+ //data[size - 1] = '\0';
+
+
+ //std::string result = httpPOST("web/echo", &(data[0]));
+
+ stream << "";
+ for(U32 i = 0; i < 1000000; ++i)
+ {
+ stream << "42 ";
+ }
+ stream << " ";
+ llinfos << "HTTPServiceTestObject::test<7>"
+ << stream.str().length() << llendl;
+ std::string result = httpPOST("web/echo", stream.str());
+ ensure_starts_with("large echo status", result, "HTTP/1.0 200 OK\r\n");
+ }
+
/* TO DO:
test generation of not found and method not allowed errors
*/
diff --git a/linden/indra/test/llmessageconfig_tut.cpp b/linden/indra/test/llmessageconfig_tut.cpp
new file mode 100644
index 0000000..07e8e72
--- /dev/null
+++ b/linden/indra/test/llmessageconfig_tut.cpp
@@ -0,0 +1,227 @@
+/**
+ * @file llmessageconfig_tut.cpp
+ * @date March 2007
+ * @brief LLMessageConfig unit tests
+ *
+ * Copyright (c) 2006-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ */
+
+#include
+#include "lltut.h"
+#include "llmessageconfig.h"
+#include "llsdserialize.h"
+#include "llfile.h"
+#include "lltimer.h"
+#include "llframetimer.h"
+
+namespace tut
+{
+ ///var/tmp/babbage/dev/message-liberation/etc
+ static const char file_name[] = "/tmp/message.xml";
+ static const F32 refreshRate = 6.0*1000.0; // milliseconds
+
+ struct LLMessageConfigTestData {
+
+ LLSD getCurrentConfig()
+ {
+ LLSD data;
+ // store aside the current config to overwrite the test ones
+ // when the test finishes
+ llifstream in_file(file_name);
+ if (in_file.is_open())
+ {
+ LLSDSerialize::fromXML(data, in_file);
+ }
+ return data;
+ }
+
+ void writeConfigFile(const LLSD& config)
+ {
+ LLMessageConfig::initClass("simulator", "/tmp");
+ llofstream file(file_name);
+ if (file.is_open())
+ {
+ LLSDSerialize::toPrettyXML(config, file);
+ }
+ file.close();
+ ms_sleep(refreshRate);
+ LLFrameTimer::updateFrameTime();
+ }
+ };
+
+ typedef test_group LLMessageConfigTestGroup;
+ typedef LLMessageConfigTestGroup::object LLMessageConfigTestObject;
+ LLMessageConfigTestGroup llMessageConfigTestGroup("LLMessageConfig");
+
+ template<> template<>
+ void LLMessageConfigTestObject::test<1>()
+ // tests server defaults
+ {
+ LLSD config_backup = getCurrentConfig();
+ LLSD config;
+ config["serverDefaults"]["simulator"] = "template";
+ writeConfigFile(config);
+ ensure_equals("Ensure server default is not llsd",
+ LLMessageConfig::isServerDefaultBuilderLLSD(),
+ false);
+ ensure_equals("Ensure server default is template",
+ LLMessageConfig::isServerDefaultBuilderTemplate(),
+ true);
+ writeConfigFile(config_backup);
+ }
+
+ template<> template<>
+ void LLMessageConfigTestObject::test<2>()
+ // tests message builders
+ {
+ LLSD config_backup = getCurrentConfig();
+ LLSD config;
+ config["serverDefaults"]["simulator"] = "template";
+ config["messages"]["msg1"]["builder"] = "template";
+ config["messages"]["msg2"]["builder"] = "llsd";
+ writeConfigFile(config);
+ ensure_equals("Ensure msg template builder not llsd",
+ LLMessageConfig::isMessageBuiltLLSD("msg1"),
+ false);
+ ensure_equals("Ensure msg template builder",
+ LLMessageConfig::isMessageBuiltTemplate("msg1"),
+ true);
+ ensure_equals("Ensure msg llsd builder",
+ LLMessageConfig::isMessageBuiltLLSD("msg2"),
+ true);
+ ensure_equals("Ensure msg llsd builder not template",
+ LLMessageConfig::isMessageBuiltTemplate("msg2"),
+ false);
+ writeConfigFile(config_backup);
+ }
+
+ template<> template<>
+ void LLMessageConfigTestObject::test<4>()
+ // tests message builder defaults
+ {
+ LLSD config_backup = getCurrentConfig();
+ LLSD config;
+ config["serverDefaults"]["simulator"] = "llsd";
+ config["messages"]["msg1"]["trusted-sender"] = true;
+ writeConfigFile(config);
+ ensure_equals("Ensure missing message defaults to server builder, not template",
+ LLMessageConfig::isMessageBuiltTemplate("Test"),
+ false);
+ ensure_equals("Ensure missing message default to server builder llsd",
+ LLMessageConfig::isMessageBuiltLLSD("Test"),
+ true);
+ ensure_equals("Ensure missing builder defaults to server builder, not template",
+ LLMessageConfig::isMessageBuiltTemplate("msg1"),
+ false);
+ ensure_equals("Ensure missing builder default to server builder llsd",
+ LLMessageConfig::isMessageBuiltLLSD("msg1"),
+ true);
+
+ ensure_equals("Ensure server default is not llsd",
+ LLMessageConfig::isServerDefaultBuilderLLSD(),
+ true);
+ ensure_equals("Ensure server default is template",
+ LLMessageConfig::isServerDefaultBuilderTemplate(),
+ false);
+
+ writeConfigFile(config_backup);
+ }
+
+ template<> template<>
+ void LLMessageConfigTestObject::test<3>()
+ // tests trusted/untrusted senders
+ {
+ LLSD config_backup = getCurrentConfig();
+ LLSD config;
+ config["serverDefaults"]["simulator"] = "template";
+ config["messages"]["msg1"]["builder"] = "llsd";
+ config["messages"]["msg1"]["trusted-sender"] = false;
+ config["messages"]["msg2"]["builder"] = "llsd";
+ config["messages"]["msg2"]["trusted-sender"] = true;
+ writeConfigFile(config);
+ ensure_equals("Ensure untrusted is not trusted",
+ LLMessageConfig::isMessageTrusted("msg1"),
+ false);
+ ensure_equals("Ensure untrusted is untrusted",
+ LLMessageConfig::isValidUntrustedMessage("msg1"),
+ true);
+ ensure_equals("Ensure trusted is trusted",
+ LLMessageConfig::isMessageTrusted("msg2"),
+ true);
+ ensure_equals("Ensure trusted is not untrusted",
+ LLMessageConfig::isValidUntrustedMessage("msg2"),
+ false);
+ writeConfigFile(config_backup);
+ }
+
+ template<> template<>
+ void LLMessageConfigTestObject::test<5>()
+ // tests trusted/untrusted without flag, only builder
+ {
+ LLSD config_backup = getCurrentConfig();
+ LLSD config;
+ config["serverDefaults"]["simulator"] = "template";
+ config["messages"]["msg1"]["builder"] = "llsd";
+ writeConfigFile(config);
+ ensure_equals("Ensure missing trusted is not trusted",
+ LLMessageConfig::isMessageTrusted("msg1"),
+ false);
+ ensure_equals("Ensure missing trusted is not untrusted",
+ LLMessageConfig::isValidUntrustedMessage("msg1"),
+ false);
+ writeConfigFile(config_backup);
+ }
+
+ template<> template<>
+ void LLMessageConfigTestObject::test<6>()
+ // tests message builder defaults
+ {
+ LLSD config_backup = getCurrentConfig();
+ LLSD config;
+ config["serverDefaults"]["simulator"] = "template";
+ config["messages"]["msg1"]["trusted-sender"] = true;
+ writeConfigFile(config);
+ ensure_equals("Ensure missing message defaults to server builder, not template",
+ LLMessageConfig::isMessageBuiltTemplate("Test"),
+ true);
+ ensure_equals("Ensure missing message default to server builder llsd",
+ LLMessageConfig::isMessageBuiltLLSD("Test"),
+ false);
+ ensure_equals("Ensure missing builder defaults to server builder, not template",
+ LLMessageConfig::isMessageBuiltTemplate("msg1"),
+ true);
+ ensure_equals("Ensure missing builder default to server builder llsd",
+ LLMessageConfig::isMessageBuiltLLSD("msg1"),
+ false);
+
+ ensure_equals("Ensure server default is not llsd",
+ LLMessageConfig::isServerDefaultBuilderLLSD(),
+ false);
+ ensure_equals("Ensure server default is template",
+ LLMessageConfig::isServerDefaultBuilderTemplate(),
+ true);
+
+ writeConfigFile(config_backup);
+ }
+}
diff --git a/linden/indra/test/llmime_tut.cpp b/linden/indra/test/llmime_tut.cpp
index f5cf38f..ac1a036 100644
--- a/linden/indra/test/llmime_tut.cpp
+++ b/linden/indra/test/llmime_tut.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/test/llpipeutil.cpp b/linden/indra/test/llpipeutil.cpp
index 2857f12..085d883 100644
--- a/linden/indra/test/llpipeutil.cpp
+++ b/linden/indra/test/llpipeutil.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/test/llpipeutil.h b/linden/indra/test/llpipeutil.h
index 7fda905..a2c59dd 100644
--- a/linden/indra/test/llpipeutil.h
+++ b/linden/indra/test/llpipeutil.h
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/test/llrandom_tut.cpp b/linden/indra/test/llrandom_tut.cpp
index a842dfd..c5b0488 100755
--- a/linden/indra/test/llrandom_tut.cpp
+++ b/linden/indra/test/llrandom_tut.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2007-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/test/llsd_message_system_tut.cpp b/linden/indra/test/llsd_message_system_tut.cpp
deleted file mode 100644
index 9fcc6b5..0000000
--- a/linden/indra/test/llsd_message_system_tut.cpp
+++ /dev/null
@@ -1,144 +0,0 @@
-/**
- * @file llsd_message_system_tut.cpp
- * @brief Testing the LLSDMessageSystem.
- *
- * Copyright (c) 2006-2007, Linden Research, Inc.
- *
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlife.com/developers/opensource/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at http://secondlife.com/developers/opensource/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- */
-
-/**
- *
- * These classes test the LLSDMessageSystem.
- *
- */
-
-#include "linden_common.h"
-
-#include
-#include "llsdmessagesystem.h"
-#include "llsdutil.h"
-
-namespace tut
-{
- class LLSDMessageSystemTestData
- {
- public:
- LLSDMessageSystemTestData() {;}
- ~LLSDMessageSystemTestData() {;}
-
- LLSDMessageSystem mMsgSystem;
- };
-
- typedef test_group LLSDMessageSystemTestGroup;
- typedef LLSDMessageSystemTestGroup::object LLSDMessageSystemTestObject;
- LLSDMessageSystemTestGroup llsdMessageSystemTestGroup("llsd_message_system");
-
- template<> template<>
- void LLSDMessageSystemTestObject::test<1>()
- {
- LLSD input;
- U32 valueIn, valueOut;
- valueIn = 42;
- input["Block"]["Var"] = ll_sd_from_U32(valueIn);
- mMsgSystem.setInput(input);
- mMsgSystem.getU32Fast("Block", "Var", valueOut);
- ensure_equals("U32 from message system matches input U32", valueIn, valueOut);
- }
-
- template<> template<>
- void LLSDMessageSystemTestObject::test<2>()
- {
- LLSD input;
- LLUUID valueIn, valueOut;
- valueIn.generate();
- input["Block"]["Var"] = valueIn;
- mMsgSystem.setInput(input);
- mMsgSystem.getUUIDFast("Block", "Var", valueOut);
- ensure_equals("UUID from message system matches input UUID", valueIn, valueOut);
- }
-
- template<> template<>
- void LLSDMessageSystemTestObject::test<3>()
- {
- LLSD input;
- U32 valueIn, valueOut;
- LLHost host("127.0.0.1:80");
- valueIn = host.getAddress();
- input["Block"]["Var"] = ll_sd_from_U32(valueIn);
- mMsgSystem.setInput(input);
- mMsgSystem.getIPAddrFast("Block", "Var", valueOut);
- ensure_equals("IP from message system matches input IP", valueIn, valueOut);
- }
-
- template<> template<>
- void LLSDMessageSystemTestObject::test<4>()
- {
- LLSD input;
- U16 valueIn, valueOut;
- LLHost host("127.0.0.1:80");
- valueIn = host.getPort();
- input["Block"]["Var"] = (S32)valueIn;
- mMsgSystem.setInput(input);
- mMsgSystem.getIPPortFast("Block", "Var", valueOut);
- ensure_equals("Port from message system matches input port", valueIn, valueOut);
- }
-
- template<> template<>
- void LLSDMessageSystemTestObject::test<5>()
- {
- LLSD input;
- U64 valueIn, valueOut;
- valueIn = 42;
- input["Block"]["Var"] = ll_sd_from_U64(valueIn);
- mMsgSystem.setInput(input);
- mMsgSystem.getU64Fast("Block", "Var", valueOut);
- ensure_equals("Port from message system matches input port", valueIn, valueOut);
- }
-
- template<> template<>
- void LLSDMessageSystemTestObject::test<6>()
- {
- LLSD input;
- std::string valueIn = "Value";
- input["Block"]["Var"] = valueIn;
- mMsgSystem.setInput(input);
- const U32 buffLen = 16;
- char buff[buffLen];
- mMsgSystem.getStringFast("Block", "Var", buffLen, buff);
- ensure_equals("string read from message system matches llsd input", std::string(buff), valueIn);
- }
-
- template<> template<>
- void LLSDMessageSystemTestObject::test<7>()
- {
- LLSD input;
- U32 valueIn, valueOut;
- valueIn = 42;
- input["Block"][0]["Var"] = ll_sd_from_U32(valueIn);
- input["Block"][1]["Var"] = ll_sd_from_U32(valueIn + 1);
- mMsgSystem.setInput(input);
- mMsgSystem.getU32Fast("Block", "Var", valueOut, 0);
- ensure_equals("U32 from message system matches input U32", valueIn, valueOut);
- mMsgSystem.getU32Fast("Block", "Var", valueOut, 1);
- ensure_equals("U32 from message system matches input U32", (valueIn + 1), valueOut);
- }
-}
diff --git a/linden/indra/test/llsd_new_tut.cpp b/linden/indra/test/llsd_new_tut.cpp
index d278a78..55e259d 100644
--- a/linden/indra/test/llsd_new_tut.cpp
+++ b/linden/indra/test/llsd_new_tut.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -31,82 +32,11 @@
#include "linden_common.h"
#include "lltut.h"
-#include "llsd.h"
+#include "llsdtraits.h"
#include "llstring.h"
namespace tut
{
- template
- class SDTraits
- {
- protected:
- typedef T (LLSD::*Getter)() const;
-
- LLSD::Type type;
- Getter getter;
-
- public:
- SDTraits();
-
- T get(const LLSD& actual)
- {
- return (actual.*getter)();
- }
-
- bool checkType(const LLSD& actual)
- {
- return actual.type() == type;
- }
- };
-
- template<>
- SDTraits::SDTraits()
- : type(LLSD::TypeBoolean), getter(&LLSD::asBoolean)
- { }
-
- template<>
- SDTraits::SDTraits()
- : type(LLSD::TypeInteger), getter(&LLSD::asInteger)
- { }
-
- template<>
- SDTraits::SDTraits()
- : type(LLSD::TypeReal), getter(&LLSD::asReal)
- { }
-
- template<>
- SDTraits::SDTraits()
- : type(LLSD::TypeUUID), getter(&LLSD::asUUID)
- { }
-
- template<>
- SDTraits::SDTraits()
- : type(LLSD::TypeString), getter(&LLSD::asString)
- { }
-
- template<>
- class SDTraits : public SDTraits
- { };
-
- template<>
- class SDTraits : public SDTraits
- { };
-
- template<>
- SDTraits::SDTraits()
- : type(LLSD::TypeDate), getter(&LLSD::asDate)
- { }
-
- template<>
- SDTraits::SDTraits()
- : type(LLSD::TypeURI), getter(&LLSD::asURI)
- { }
-
- template<>
- SDTraits::SDTraits()
- : type(LLSD::TypeBinary), getter(&LLSD::asBinary)
- { }
-
class SDCleanupCheck
{
private:
@@ -145,7 +75,7 @@ namespace tut
static void ensureTypeAndValue(const char* msg, const LLSD& actual,
T expectedValue)
{
- SDTraits traits;
+ LLSDTraits traits;
std::string s(msg);
@@ -353,7 +283,7 @@ namespace tut
}
LLSD u(str);
- SDTraits traits;
+ LLSDTraits traits;
ensure_equals(msg + " value", traits.get(u), vExpected);
}
diff --git a/linden/indra/test/llsdmessagebuilder_tut.cpp b/linden/indra/test/llsdmessagebuilder_tut.cpp
new file mode 100755
index 0000000..d48584a
--- /dev/null
+++ b/linden/indra/test/llsdmessagebuilder_tut.cpp
@@ -0,0 +1,279 @@
+/**
+ * @file llsdmessagebuilder_tut.cpp
+ * @date February 2006
+ * @brief LLSDMessageBuilder unit tests
+ *
+ * Copyright (c) 2006-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ */
+
+#include
+#include "lltut.h"
+
+#include "llsdmessagebuilder.h"
+#include "llsdmessagereader.h"
+#include "llsdtraits.h"
+#include "llquaternion.h"
+#include "u64.h"
+#include "v3dmath.h"
+#include "v3math.h"
+#include "v4math.h"
+
+namespace tut
+{
+ struct LLSDMessageBuilderTestData {
+ static LLSDMessageBuilder defaultBuilder()
+ {
+ LLSDMessageBuilder builder;
+ builder.newMessage("name");
+ builder.nextBlock("block");
+ return builder;
+ }
+
+ static LLSDMessageReader setReader(const LLSDMessageBuilder& builder)
+ {
+ LLSDMessageReader reader;
+ reader.setMessage("name", builder.getMessage());
+ return reader;
+ }
+ };
+
+ typedef test_group LLSDMessageBuilderTestGroup;
+ typedef LLSDMessageBuilderTestGroup::object LLSDMessageBuilderTestObject;
+ LLSDMessageBuilderTestGroup llsdMessageBuilderTestGroup("LLSDMessageBuilder");
+
+ template<> template<>
+ void LLSDMessageBuilderTestObject::test<1>()
+ // construction and test of undefined
+ {
+ LLSDMessageBuilder builder = defaultBuilder();
+ LLSDMessageReader reader = setReader(builder);
+ }
+
+ template<> template<>
+ void LLSDMessageBuilderTestObject::test<2>()
+ // BOOL
+ {
+ BOOL outValue, inValue = TRUE;
+ LLSDMessageBuilder builder = defaultBuilder();
+ builder.addBOOL("var", inValue);
+ LLSDMessageReader reader = setReader(builder);
+ reader.getBOOL("block", "var", outValue);
+ ensure_equals("Ensure BOOL", inValue, outValue);
+ }
+
+ template<> template<>
+ void LLSDMessageBuilderTestObject::test<3>()
+ // U8
+ {
+ U8 outValue, inValue = 2;
+ LLSDMessageBuilder builder = defaultBuilder();
+ builder.addU8("var", inValue);
+ LLSDMessageReader reader = setReader(builder);
+ reader.getU8("block", "var", outValue);
+ ensure_equals("Ensure U8", inValue, outValue);
+ }
+
+ template<> template<>
+ void LLSDMessageBuilderTestObject::test<4>()
+ // S16
+ {
+ S16 outValue, inValue = 90;
+ LLSDMessageBuilder builder = defaultBuilder();
+ builder.addS16("var", inValue);
+ LLSDMessageReader reader = setReader(builder);
+ reader.getS16("block", "var", outValue);
+ ensure_equals("Ensure S16", inValue, outValue);
+ }
+
+ template<> template<>
+ void LLSDMessageBuilderTestObject::test<5>()
+ // U16
+ {
+ U16 outValue, inValue = 3;
+ LLSDMessageBuilder builder = defaultBuilder();
+ builder.addU16("var", inValue);
+ LLSDMessageReader reader = setReader(builder);
+ reader.getU16("block", "var", outValue);
+ ensure_equals("Ensure U16", inValue, outValue);
+ }
+
+ template<> template<>
+ void LLSDMessageBuilderTestObject::test<6>()
+ // S32
+ {
+ S32 outValue, inValue = 44;
+ LLSDMessageBuilder builder = defaultBuilder();
+ builder.addS32("var", inValue);
+ LLSDMessageReader reader = setReader(builder);
+ reader.getS32("block", "var", outValue);
+ ensure_equals("Ensure S32", inValue, outValue);
+ }
+
+ template<> template<>
+ void LLSDMessageBuilderTestObject::test<7>()
+ // F32
+ {
+ F32 outValue, inValue = 121.44;
+ LLSDMessageBuilder builder = defaultBuilder();
+ builder.addF32("var", inValue);
+ LLSDMessageReader reader = setReader(builder);
+ reader.getF32("block", "var", outValue);
+ ensure_equals("Ensure F32", inValue, outValue);
+ }
+
+ template<> template<>
+ void LLSDMessageBuilderTestObject::test<8>()
+ // U32
+ {
+ U32 outValue, inValue = 88;
+ LLSDMessageBuilder builder = defaultBuilder();
+ builder.addU32("var", inValue);
+ LLSDMessageReader reader = setReader(builder);
+ reader.getU32("block", "var", outValue);
+ ensure_equals("Ensure U32", inValue, outValue);
+ }
+
+ template<> template<>
+ void LLSDMessageBuilderTestObject::test<9>()
+ // U64
+ {
+ U64 outValue, inValue = 121;
+ LLSDMessageBuilder builder = defaultBuilder();
+ builder.addU64("var", inValue);
+ LLSDMessageReader reader = setReader(builder);
+ reader.getU64("block", "var", outValue);
+ ensure_equals("Ensure U64", inValue, outValue);
+ }
+
+ template<> template<>
+ void LLSDMessageBuilderTestObject::test<10>()
+ // F64
+ {
+ F64 outValue, inValue = 3232143.33;
+ LLSDMessageBuilder builder = defaultBuilder();
+ builder.addF64("var", inValue);
+ LLSDMessageReader reader = setReader(builder);
+ reader.getF64("block", "var", outValue);
+ ensure_equals("Ensure F64", inValue, outValue);
+ }
+
+ template<> template<>
+ void LLSDMessageBuilderTestObject::test<11>()
+ // Vector3
+ {
+ LLVector3 outValue, inValue = LLVector3(1,2,3);
+ LLSDMessageBuilder builder = defaultBuilder();
+ builder.addVector3("var", inValue);
+ LLSDMessageReader reader = setReader(builder);
+ reader.getVector3("block", "var", outValue);
+ ensure_equals("Ensure Vector3", inValue, outValue);
+ }
+
+ template<> template<>
+ void LLSDMessageBuilderTestObject::test<12>()
+ // Vector4
+ {
+ LLVector4 outValue, inValue = LLVector4(1,2,3,4);
+ LLSDMessageBuilder builder = defaultBuilder();
+ builder.addVector4("var", inValue);
+ LLSDMessageReader reader = setReader(builder);
+ reader.getVector4("block", "var", outValue);
+ ensure_equals("Ensure Vector4", inValue, outValue);
+ }
+
+ template<> template<>
+ void LLSDMessageBuilderTestObject::test<13>()
+ // Vector3d
+ {
+ LLVector3d outValue, inValue = LLVector3d(1,2,3);
+ LLSDMessageBuilder builder = defaultBuilder();
+ builder.addVector3d("var", inValue);
+ LLSDMessageReader reader = setReader(builder);
+ reader.getVector3d("block", "var", outValue);
+ ensure_equals("Ensure Vector3d", inValue, outValue);
+ }
+
+ template<> template<>
+ void LLSDMessageBuilderTestObject::test<14>()
+ // Quaternion
+ {
+ LLQuaternion outValue, inValue = LLQuaternion(1,2,3,4);
+ LLSDMessageBuilder builder = defaultBuilder();
+ builder.addQuat("var", inValue);
+ LLSDMessageReader reader = setReader(builder);
+ reader.getQuat("block", "var", outValue);
+ ensure_equals("Ensure Quaternion", inValue, outValue);
+ }
+
+ template<> template<>
+ void LLSDMessageBuilderTestObject::test<15>()
+ // UUID
+ {
+ LLUUID outValue, inValue;
+ inValue.generate();
+ LLSDMessageBuilder builder = defaultBuilder();
+ builder.addUUID("var", inValue);
+ LLSDMessageReader reader = setReader(builder);
+ reader.getUUID("block", "var", outValue);
+ ensure_equals("Ensure UUID", inValue, outValue);
+ }
+
+ template<> template<>
+ void LLSDMessageBuilderTestObject::test<16>()
+ // IPAddr
+ {
+ U32 outValue, inValue = 12344556;
+ LLSDMessageBuilder builder = defaultBuilder();
+ builder.addIPAddr("var", inValue);
+ LLSDMessageReader reader = setReader(builder);
+ reader.getIPAddr("block", "var", outValue);
+ ensure_equals("Ensure IPAddr", inValue, outValue);
+ }
+
+ template<> template<>
+ void LLSDMessageBuilderTestObject::test<17>()
+ // IPPort
+ {
+ U16 outValue, inValue = 80;
+ LLSDMessageBuilder builder = defaultBuilder();
+ builder.addIPPort("var", inValue);
+ LLSDMessageReader reader = setReader(builder);
+ reader.getIPPort("block", "var", outValue);
+ ensure_equals("Ensure IPPort", inValue, outValue);
+ }
+
+ template<> template<>
+ void LLSDMessageBuilderTestObject::test<18>()
+ {
+ std::string outValue, inValue = "testing";
+ LLSDMessageBuilder builder = defaultBuilder();
+ builder.addString("var", inValue.c_str());
+ LLSDMessageReader reader = setReader(builder);
+ char buffer[MAX_STRING];
+ reader.getString("block", "var", MAX_STRING, buffer);
+ outValue = buffer;
+ ensure_equals("Ensure String", inValue, outValue);
+ }
+}
+
diff --git a/linden/indra/test/llsdmessagereader_tut.cpp b/linden/indra/test/llsdmessagereader_tut.cpp
new file mode 100755
index 0000000..707cf31
--- /dev/null
+++ b/linden/indra/test/llsdmessagereader_tut.cpp
@@ -0,0 +1,320 @@
+/**
+ * @file llsdmessagereader_tut.cpp
+ * @date February 2006
+ * @brief LLSDMessageReader unit tests
+ *
+ * Copyright (c) 2006-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ */
+
+#include
+#include "lltut.h"
+
+#include "llsdmessagereader.h"
+#include "llsdutil.h"
+
+namespace tut
+{
+ struct LLSDMessageReaderTestData {
+ static void ensureMessageName(const std::string& msg_name,
+ const LLSD& msg_data,
+ const std::string& expected_name)
+ {
+ LLSDMessageReader msg;
+ msg.setMessage(msg_name, msg_data);
+ ensure_equals("Ensure name", std::string(msg.getMessageName()),
+ expected_name);
+ }
+
+ static void ensureNumberOfBlocks(const LLSD& msg_data,
+ const std::string& block,
+ S32 expected_number)
+ {
+ LLSDMessageReader msg;
+ msg.setMessage("fakename", msg_data);
+ ensure_equals("Ensure number of blocks", msg.getNumberOfBlocks(block.c_str()),
+ expected_number);
+ }
+
+ static void ensureMessageSize(const LLSD& msg_data,
+ S32 expected_size)
+ {
+ LLSDMessageReader msg;
+ msg.setMessage("fakename", msg_data);
+ ensure_equals( "Ensure size", msg.getMessageSize(), expected_size);
+ }
+
+ static void ensureBool(const LLSD& msg_data,
+ const std::string& block,
+ const std::string& var,
+ S32 blocknum,
+ BOOL expected)
+ {
+ LLSDMessageReader msg;
+ msg.setMessage("fakename", msg_data);
+ BOOL test_data;
+ msg.getBOOL(block.c_str(), var.c_str(), test_data, blocknum);
+ ensure_equals( "Ensure bool field", test_data, expected);
+ }
+ };
+
+ typedef test_group LLSDMessageReaderTestGroup;
+ typedef LLSDMessageReaderTestGroup::object LLSDMessageReaderTestObject;
+ LLSDMessageReaderTestGroup llsdMessageReaderTestGroup("LLSDMessageReader");
+
+ template<> template<>
+ void LLSDMessageReaderTestObject::test<1>()
+ // construction and test of empty LLSD
+ {
+ LLSD message = LLSD::emptyMap();
+
+ ensureMessageName("", message, "");
+ ensureNumberOfBlocks(message, "Fakeblock", 0);
+ ensureMessageSize(message, 0);
+ }
+
+ template<> template<>
+ void LLSDMessageReaderTestObject::test<2>()
+ // construction and test of simple message with one block
+ {
+ LLSD message = LLSD::emptyMap();
+ message["block1"] = LLSD::emptyArray();
+ message["block1"][0] = LLSD::emptyMap();
+ message["block1"][0]["Field1"] = 0;
+
+ ensureMessageName("name2", message, "name2");
+ ensureNumberOfBlocks(message, "block1", 1);
+ ensureMessageSize(message, 0);
+ }
+
+ template<> template<>
+ void LLSDMessageReaderTestObject::test<3>()
+ // multiple blocks
+ {
+ LLSD message = LLSD::emptyMap();
+ message["block1"] = LLSD::emptyArray();
+ BOOL bool_true = TRUE;
+ BOOL bool_false = FALSE;
+ message["block1"][0] = LLSD::emptyMap();
+ message["block1"][0]["BoolField1"] = bool_true;
+ message["block1"][1] = LLSD::emptyMap();
+ message["block1"][1]["BoolField1"] = bool_false;
+ message["block1"][1]["BoolField2"] = bool_true;
+
+ ensureMessageName("name3", message, "name3");
+ ensureBool(message, "block1", "BoolField1", 0, TRUE);
+ ensureBool(message, "block1", "BoolField1", 1, FALSE);
+ ensureBool(message, "block1", "BoolField2", 1, TRUE);
+ ensureNumberOfBlocks(message, "block1", 2);
+ ensureMessageSize(message, 0);
+ }
+
+ template
+ LLSDMessageReader testType(const T& value)
+ {
+ LLSD message = LLSD::emptyMap();
+ message["block"][0]["var"] = value;
+ LLSDMessageReader msg;
+ msg.setMessage("fakename", message);
+ return msg;
+ }
+
+ template<> template<>
+ void LLSDMessageReaderTestObject::test<4>()
+ // S8
+ {
+ S8 outValue, inValue = -3;
+ LLSDMessageReader msg = testType(inValue);
+ msg.getS8("block", "var", outValue);
+ ensure_equals("Ensure S8", outValue, inValue);
+ }
+ template<> template<>
+ void
+ LLSDMessageReaderTestObject::test<5>()
+ // U8
+ {
+ U8 outValue, inValue = 2;
+ LLSDMessageReader msg = testType(inValue);
+ msg.getU8("block", "var", outValue);
+ ensure_equals("Ensure U8", outValue, inValue);
+ }
+ template<> template<>
+ void LLSDMessageReaderTestObject::test<6>()
+ // S16
+ {
+ S16 outValue, inValue = 90;
+ LLSDMessageReader msg = testType(inValue);
+ msg.getS16("block", "var", outValue);
+ ensure_equals("Ensure S16", outValue, inValue);
+ }
+ template<> template<>
+ void LLSDMessageReaderTestObject::test<7>()
+ // U16
+ {
+ U16 outValue, inValue = 3;
+ LLSDMessageReader msg = testType(inValue);
+ msg.getU16("block", "var", outValue);
+ ensure_equals("Ensure S16", outValue, inValue);
+ }
+ template<> template<>
+ void LLSDMessageReaderTestObject::test<8>()
+ // S32
+ {
+ S32 outValue, inValue = 44;
+ LLSDMessageReader msg = testType(inValue);
+ msg.getS32("block", "var", outValue);
+ ensure_equals("Ensure S32", outValue, inValue);
+ }
+ template<> template<>
+ void LLSDMessageReaderTestObject::test<9>()
+ // F32
+ {
+ F32 outValue, inValue = 121.44;
+ LLSDMessageReader msg = testType(inValue);
+ msg.getF32("block", "var", outValue);
+ ensure_equals("Ensure F32", outValue, inValue);
+ }
+ template<> template<>
+ void LLSDMessageReaderTestObject::test<10>()
+ // U32
+ {
+ U32 outValue, inValue = 88;
+ LLSD sdValue = ll_sd_from_U32(inValue);
+ LLSDMessageReader msg = testType(sdValue);
+ msg.getU32("block", "var", outValue);
+ ensure_equals("Ensure U32", outValue, inValue);
+ }
+ template<> template<>
+ void LLSDMessageReaderTestObject::test<11>()
+ // U64
+ {
+ U64 outValue, inValue = 121;
+ LLSD sdValue = ll_sd_from_U64(inValue);
+ LLSDMessageReader msg = testType(sdValue);
+ msg.getU64("block", "var", outValue);
+ ensure_equals("Ensure U64", outValue, inValue);
+ }
+ template<> template<>
+ void LLSDMessageReaderTestObject::test<12>()
+ // F64
+ {
+ F64 outValue, inValue = 3232143.33;
+ LLSDMessageReader msg = testType(inValue);
+ msg.getF64("block", "var", outValue);
+ ensure_equals("Ensure F64", outValue, inValue);
+ }
+ template<> template<>
+ void LLSDMessageReaderTestObject::test<13>()
+ // String
+ {
+ std::string outValue, inValue = "testing";
+ LLSDMessageReader msg = testType(inValue.c_str());
+
+ char buffer[MAX_STRING];
+ msg.getString("block", "var", MAX_STRING, buffer);
+ outValue = buffer;
+ ensure_equals("Ensure String", outValue, inValue);
+ }
+ template<> template<>
+ void LLSDMessageReaderTestObject::test<14>()
+ // Vector3
+ {
+ LLVector3 outValue, inValue = LLVector3(1,2,3);
+ LLSD sdValue = ll_sd_from_vector3(inValue);
+ LLSDMessageReader msg = testType(sdValue);
+ msg.getVector3("block", "var", outValue);
+ ensure_equals("Ensure Vector3", outValue, inValue);
+ }
+ template<> template<>
+ void LLSDMessageReaderTestObject::test<15>()
+ // Vector4
+ {
+ LLVector4 outValue, inValue = LLVector4(1,2,3,4);
+ LLSD sdValue = ll_sd_from_vector4(inValue);
+ LLSDMessageReader msg = testType(sdValue);
+ msg.getVector4("block", "var", outValue);
+ ensure_equals("Ensure Vector4", outValue, inValue);
+ }
+ template<> template<>
+ void LLSDMessageReaderTestObject::test<16>()
+ // Vector3d
+ {
+ LLVector3d outValue, inValue = LLVector3d(1,2,3);
+ LLSD sdValue = ll_sd_from_vector3d(inValue);
+ LLSDMessageReader msg = testType(sdValue);
+ msg.getVector3d("block", "var", outValue);
+ ensure_equals("Ensure Vector3d", outValue, inValue);
+ }
+ template<> template<>
+ void LLSDMessageReaderTestObject::test<17>()
+ // Quaternion
+ {
+ LLQuaternion outValue, inValue = LLQuaternion(1,2,3,4);
+ LLSD sdValue = ll_sd_from_quaternion(inValue);
+ LLSDMessageReader msg = testType(sdValue);
+ msg.getQuat("block", "var", outValue);
+ ensure_equals("Ensure Quaternion", outValue, inValue);
+ }
+ template<> template<>
+ void LLSDMessageReaderTestObject::test<18>()
+ // UUID
+ {
+ LLUUID outValue, inValue;
+ inValue.generate();
+ LLSDMessageReader msg = testType(inValue);
+ msg.getUUID("block", "var", outValue);
+ ensure_equals("Ensure UUID", outValue, inValue);
+ }
+ template<> template<>
+ void LLSDMessageReaderTestObject::test<19>()
+ // IPAddr
+ {
+ U32 outValue, inValue = 12344556;
+ LLSD sdValue = ll_sd_from_ipaddr(inValue);
+ LLSDMessageReader msg = testType(sdValue);
+ msg.getIPAddr("block", "var", outValue);
+ ensure_equals("Ensure IPAddr", outValue, inValue);
+ }
+ template<> template<>
+ void LLSDMessageReaderTestObject::test<20>()
+ // IPPort
+ {
+ U16 outValue, inValue = 80;
+ LLSDMessageReader msg = testType(inValue);
+ msg.getIPPort("block", "var", outValue);
+ ensure_equals("Ensure IPPort", outValue, inValue);
+ }
+ template<> template<>
+ void LLSDMessageReaderTestObject::test<21>()
+ // Binary
+ {
+ std::vector outValue(2), inValue(2);
+ inValue[0] = 0;
+ inValue[1] = 1;
+
+ LLSDMessageReader msg = testType(inValue);
+ msg.getBinaryData("block", "var", &(outValue[0]), inValue.size());
+ ensure_equals("Ensure Binary", outValue, inValue);
+ }
+}
+
diff --git a/linden/indra/test/llsdserialize_tut.cpp b/linden/indra/test/llsdserialize_tut.cpp
index c87d7d1..80a4336 100644
--- a/linden/indra/test/llsdserialize_tut.cpp
+++ b/linden/indra/test/llsdserialize_tut.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -33,7 +34,7 @@
#include "llsd.h"
#include "llsdserialize.h"
#include "lltut.h"
-
+#include "llformat.h"
namespace tut
{
@@ -212,6 +213,7 @@ namespace tut
{
std::stringstream stream;
mFormatter->format(v, stream);
+ //llinfos << "checkRoundTrip: length " << stream.str().length() << llendl;
LLSD w;
mParser->parse(stream, w);
@@ -226,6 +228,22 @@ namespace tut
throw;
}
}
+
+ static void fillmap(LLSD& root, U32 width, U32 depth)
+ {
+ if(depth == 0)
+ {
+ root["foo"] = "bar";
+ return;
+ }
+
+ for(U32 i = 0; i < width; ++i)
+ {
+ std::string key = llformat("child %d", i);
+ root[key] = LLSD::emptyMap();
+ fillmap(root[key], width, depth - 1);
+ }
+ }
void TestLLSDSerializeData::doRoundTripTests(const std::string& msg)
{
@@ -389,6 +407,10 @@ namespace tut
v[0][0] = true;
v[1][0] = false;
checkRoundTrip(msg + " nested arrays", v);
+
+ v = LLSD::emptyMap();
+ fillmap(v, 10, 6); // 10^6 maps
+ checkRoundTrip(msg + " many nested maps", v);
}
typedef tut::test_group TestLLSDSerialzeGroup;
@@ -547,7 +569,6 @@ namespace tut
"", v);
}
-
/*
TODO:
test XML parsing
diff --git a/linden/indra/test/llsdtraits.h b/linden/indra/test/llsdtraits.h
new file mode 100644
index 0000000..2e6a96a
--- /dev/null
+++ b/linden/indra/test/llsdtraits.h
@@ -0,0 +1,78 @@
+#ifndef LLSDTRAITS_H
+#define LLSDTRAITS_H
+
+#include "llsd.h"
+#include "llstring.h"
+
+template
+class LLSDTraits
+{
+ protected:
+ typedef T (LLSD::*Getter)() const;
+
+ LLSD::Type type;
+ Getter getter;
+
+ public:
+ LLSDTraits();
+
+ T get(const LLSD& actual)
+ {
+ return (actual.*getter)();
+ }
+
+ bool checkType(const LLSD& actual)
+ {
+ return actual.type() == type;
+ }
+};
+
+template<> inline
+LLSDTraits::LLSDTraits()
+ : type(LLSD::TypeBoolean), getter(&LLSD::asBoolean)
+{ }
+
+template<> inline
+LLSDTraits::LLSDTraits()
+ : type(LLSD::TypeInteger), getter(&LLSD::asInteger)
+{ }
+
+template<> inline
+LLSDTraits::LLSDTraits()
+ : type(LLSD::TypeReal), getter(&LLSD::asReal)
+{ }
+
+template<> inline
+LLSDTraits::LLSDTraits()
+ : type(LLSD::TypeUUID), getter(&LLSD::asUUID)
+{ }
+
+template<> inline
+LLSDTraits::LLSDTraits()
+ : type(LLSD::TypeString), getter(&LLSD::asString)
+{ }
+
+template<>
+class LLSDTraits : public LLSDTraits
+{ };
+
+template<>
+class LLSDTraits : public LLSDTraits
+{ };
+
+template<> inline
+LLSDTraits::LLSDTraits()
+ : type(LLSD::TypeDate), getter(&LLSD::asDate)
+{ }
+
+template<> inline
+LLSDTraits::LLSDTraits()
+ : type(LLSD::TypeURI), getter(&LLSD::asURI)
+{ }
+
+template<> inline
+LLSDTraits::LLSDTraits()
+ : type(LLSD::TypeBinary), getter(&LLSD::asBinary)
+{ }
+
+#endif // LLSDTRAITS_H
diff --git a/linden/indra/test/llservicebuilder_tut.cpp b/linden/indra/test/llservicebuilder_tut.cpp
new file mode 100644
index 0000000..fde0564
--- /dev/null
+++ b/linden/indra/test/llservicebuilder_tut.cpp
@@ -0,0 +1,96 @@
+/**
+* @file llservicebuilder_tut.cpp
+* @brief LLServiceBuilder unit tests
+* @date March 2007
+*
+* Copyright (c) 2006-2007, Linden Research, Inc.
+*
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+*/
+
+#include
+#include "lltut.h"
+
+#include "llsd.h"
+#include "llservicebuilder.h"
+
+namespace tut
+{
+
+ struct ServiceBuilderTestData {
+ LLServiceBuilder mServiceBuilder;
+ };
+
+ typedef test_group ServiceBuilderTestGroup;
+ typedef ServiceBuilderTestGroup::object ServiceBuilderTestObject;
+
+ ServiceBuilderTestGroup serviceBuilderTestGroup("ServiceBuilder");
+
+ template<> template<>
+ void ServiceBuilderTestObject::test<1>()
+ {
+ //Simple service build and reply with no mapping
+ LLSD test_block;
+ test_block["service-builder"] = "/agent/name";
+ mServiceBuilder.createServiceDefinition("ServiceBuilderTest", test_block["service-builder"]);
+ std::string test_url = mServiceBuilder.buildServiceURI("ServiceBuilderTest");
+ ensure_equals("Basic URL Creation", test_url , "/agent/name");
+ }
+
+ template<> template<>
+ void ServiceBuilderTestObject::test<2>()
+ {
+ //Simple replace test
+ LLSD test_block;
+ test_block["service-builder"] = "/agent/{$agent-id}/name";
+ mServiceBuilder.createServiceDefinition("ServiceBuilderTest", test_block["service-builder"]);
+ LLSD data_map;
+ data_map["agent-id"] = "257c631f-a0c5-4f29-8a9f-9031feaae6c6";
+ std::string test_url = mServiceBuilder.buildServiceURI("ServiceBuilderTest", data_map);
+ ensure_equals("Replacement URL Creation", test_url , "/agent/257c631f-a0c5-4f29-8a9f-9031feaae6c6/name");
+ }
+
+ template<> template<>
+ void ServiceBuilderTestObject::test<3>()
+ {
+ //Incorrect service test
+ LLSD test_block;
+ test_block["service-builder"] = "/agent/{$agent-id}/name";
+ mServiceBuilder.createServiceDefinition("ServiceBuilderTest", test_block["service-builder"]);
+ std::string test_url = mServiceBuilder.buildServiceURI("ServiceBuilder");
+ ensure_equals("Replacement URL Creation for Non-existant Service", test_url , "");
+ }
+
+ template<> template<>
+ void ServiceBuilderTestObject::test<4>()
+ {
+ //Incorrect service test
+ LLSD test_block;
+ test_block["service-builder"] = "/agent/{$agent-id}/name";
+ mServiceBuilder.createServiceDefinition("ServiceBuilderTest", test_block["service-builder"]);
+ LLSD data_map;
+ data_map["agent_id"] = "257c631f-a0c5-4f29-8a9f-9031feaae6c6";
+ std::string test_url = mServiceBuilder.buildServiceURI("ServiceBuilderTest", data_map);
+ ensure_equals("Replacement URL Creation for Non-existant Service", test_url , "/agent/{$agent-id}/name");
+ }
+}
+
diff --git a/linden/indra/test/lltiming_tut.cpp b/linden/indra/test/lltiming_tut.cpp
index 0b503cb..c2c9fd8 100644
--- a/linden/indra/test/lltiming_tut.cpp
+++ b/linden/indra/test/lltiming_tut.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/test/lltut.cpp b/linden/indra/test/lltut.cpp
index 1127f72..c872077 100644
--- a/linden/indra/test/lltut.cpp
+++ b/linden/indra/test/lltut.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/test/lltut.h b/linden/indra/test/lltut.h
index c8fb6bc..3e43df8 100644
--- a/linden/indra/test/lltut.h
+++ b/linden/indra/test/lltut.h
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -45,6 +46,22 @@ class LLSD;
namespace tut
{
+ inline void ensure_memory_matches(const char* msg,const void* actual, U32 actual_len, const void* expected,U32 expected_len)
+ {
+ if((expected_len != actual_len) ||
+ (memcmp(actual, expected, actual_len) != 0))
+ {
+ std::stringstream ss;
+ ss << (msg?msg:"") << (msg?": ":"") << "not equal";
+ throw tut::failure(ss.str().c_str());
+ }
+ }
+
+ inline void ensure_memory_matches(const void* actual, U32 actual_len, const void* expected,U32 expected_len)
+ {
+ ensure_memory_matches(NULL, actual, actual_len, expected, expected_len);
+ }
+
template
void ensure_not_equals(const char* msg,const Q& actual,const T& expected)
{
diff --git a/linden/indra/test/lluri_tut.cpp b/linden/indra/test/lluri_tut.cpp
index 31ea7d6..a08fe4e 100644
--- a/linden/indra/test/lluri_tut.cpp
+++ b/linden/indra/test/lluri_tut.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -242,6 +243,8 @@ namespace tut
"http:%2F%2F10.0.1.4:12032%2Fagent%2Fgod%2Fagent-id%2Fmap%2Flayer%2F%3Fresume=http:%2F%2Fstation3.ll.com:12032%2Fagent%2F203ad6df-b522-491d-ba48-4e24eb57aeff%2Fsend-postcard");
}
+
+#if LL_ENABLE_JANKY_DEPRECATED_WEB_SERVICE_CALLS
template<> template<>
void URITestObject::test<14>()
{
@@ -250,14 +253,6 @@ namespace tut
LLUUID id("11111111-2222-3333-4444-5566778899aa");
- checkParts(LLURI::buildAgentPresenceURI(id, NULL),
- "http", "//localhost:12040/agent/11111111-2222-3333-4444-5566778899aa/presence",
- "localhost:12040", "/agent/11111111-2222-3333-4444-5566778899aa/presence");
-
- checkParts(LLURI::buildBulkAgentPresenceURI(NULL),
- "http", "//localhost:12040/agent/presence",
- "localhost:12040", "/agent/presence");
-
checkParts(LLURI::buildAgentSessionURI(id, NULL),
"http", "//localhost:12040/agent/11111111-2222-3333-4444-5566778899aa/session",
"localhost:12040", "/agent/11111111-2222-3333-4444-5566778899aa/session");
@@ -266,5 +261,6 @@ namespace tut
"http", "//datasever:12345/agent/11111111-2222-3333-4444-5566778899aa/logininfo",
"datasever:12345", "/agent/11111111-2222-3333-4444-5566778899aa/logininfo");
}
+#endif // LL_ENABLE_JANKY_DEPRECATED_WEB_SERVICE_CALLS
}
diff --git a/linden/indra/test/lluserrelations_tut.cpp b/linden/indra/test/lluserrelations_tut.cpp
index e683803..f9b4615 100644
--- a/linden/indra/test/lluserrelations_tut.cpp
+++ b/linden/indra/test/lluserrelations_tut.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/test/math.cpp b/linden/indra/test/math.cpp
index be8a398..3f5a15c 100644
--- a/linden/indra/test/math.cpp
+++ b/linden/indra/test/math.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -32,6 +33,7 @@
#include "llmath.h"
#include "lluuid.h"
+#include "llcrc.h"
namespace tut
{
@@ -74,6 +76,95 @@ namespace tut
val = llabs(val);
ensure("double absolute value 2", (8937843.9394878 == val));
}
+
+ template<> template<>
+ void math_object::test<4>()
+ {
+ F32 val = 430903.9f;
+ S32 val1 = lltrunc(val);
+ ensure("float truncate value 1", (430903 == val1));
+ val = -2303.9f;
+ val1 = lltrunc(val);
+ ensure("float truncate value 2", (-2303 == val1));
+ }
+
+ template<> template<>
+ void math_object::test<5>()
+ {
+ F64 val = 387439393.987329839 ;
+ S32 val1 = lltrunc(val);
+ ensure("float truncate value 1", (387439393 == val1));
+ val = -387439393.987329839;
+ val1 = lltrunc(val);
+ ensure("float truncate value 2", (-387439393 == val1));
+ }
+
+ template<> template<>
+ void math_object::test<6>()
+ {
+ F32 val = 430903.2f;
+ S32 val1 = llfloor(val);
+ ensure("float llfloor value 1", (430903 == val1));
+ val = -430903.9f;
+ val1 = llfloor(val);
+ ensure("float llfloor value 2", (-430904 == val1));
+ }
+
+ template<> template<>
+ void math_object::test<7>()
+ {
+ F32 val = 430903.2f;
+ S32 val1 = llceil(val);
+ ensure("float llceil value 1", (430904 == val1));
+ val = -430903.9f;
+ val1 = llceil(val);
+ ensure("float llceil value 2", (-430903 == val1));
+ }
+
+ template<> template<>
+ void math_object::test<8>()
+ {
+ F32 val = 430903.2f;
+ S32 val1 = llround(val);
+ ensure("float llround value 1", (430903 == val1));
+ val = -430903.9f;
+ val1 = llround(val);
+ ensure("float llround value 2", (-430904 == val1));
+ }
+
+ template<> template<>
+ void math_object::test<9>()
+ {
+ F32 val = 430905.2654f, nearest = 100.f;
+ val = llround(val, nearest);
+ ensure("float llround value 1", (430900 == val));
+ val = -430905.2654f, nearest = 10.f;
+ val = llround(val, nearest);
+ ensure("float llround value 1", (-430910 == val));
+ }
+
+ template<> template<>
+ void math_object::test<10>()
+ {
+ F64 val = 430905.2654, nearest = 100.0;
+ val = llround(val, nearest);
+ ensure("double llround value 1", (430900 == val));
+ val = -430905.2654, nearest = 10.0;
+ val = llround(val, nearest);
+ ensure("double llround value 1", (-430910.00000 == val));
+ }
+
+ template<> template<>
+ void math_object::test<11>()
+ {
+ const F32 F_PI = 3.1415926535897932384626433832795f;
+ F32 angle = 3506.f;
+ angle = llsimple_angle(angle);
+ ensure("llsimple_angle value 1", (angle <=F_PI && angle >= -F_PI));
+ angle = -431.f;
+ angle = llsimple_angle(angle);
+ ensure("llsimple_angle value 1", (angle <=F_PI && angle >= -F_PI));
+ }
}
namespace tut
@@ -131,3 +222,55 @@ namespace tut
}
}
+
+namespace tut
+{
+ struct crc_data
+ {
+ };
+ typedef test_group crc_test;
+ typedef crc_test::object crc_object;
+ tut::crc_test tc("crc");
+
+ template<> template<>
+ void crc_object::test<1>()
+ {
+ /* Test buffer update and individual char update */
+ const char TEST_BUFFER[] = "hello $)$&Nd0";
+ LLCRC c1, c2;
+ c1.update((U8*)TEST_BUFFER, sizeof(TEST_BUFFER) - 1);
+ char* rh = (char*)TEST_BUFFER;
+ while(*rh != '\0')
+ {
+ c2.update(*rh);
+ ++rh;
+ }
+ ensure_equals("crc update 1", c1.getCRC(), c2.getCRC());
+ }
+
+ template<> template<>
+ void crc_object::test<2>()
+ {
+ /* Test mixing of buffer and individual char update */
+ const char TEST_BUFFER1[] = "Split Buffer one $^%$%#@$";
+ const char TEST_BUFFER2[] = "Split Buffer two )(8723#5dsds";
+ LLCRC c1, c2;
+ c1.update((U8*)TEST_BUFFER1, sizeof(TEST_BUFFER1) - 1);
+ char* rh = (char*)TEST_BUFFER2;
+ while(*rh != '\0')
+ {
+ c1.update(*rh);
+ ++rh;
+ }
+
+ rh = (char*)TEST_BUFFER1;
+ while(*rh != '\0')
+ {
+ c2.update(*rh);
+ ++rh;
+ }
+ c2.update((U8*)TEST_BUFFER2, sizeof(TEST_BUFFER2) - 1);
+
+ ensure_equals("crc update 2", c1.getCRC(), c2.getCRC());
+ }
+}
diff --git a/linden/indra/test/reflection_tut.cpp b/linden/indra/test/reflection_tut.cpp
index a7b46d4..7230c60 100644
--- a/linden/indra/test/reflection_tut.cpp
+++ b/linden/indra/test/reflection_tut.cpp
@@ -5,6 +5,7 @@
*
* Copyright (c) 2006-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
diff --git a/linden/indra/test/test.cpp b/linden/indra/test/test.cpp
index 9eb1639..8f6f672 100644
--- a/linden/indra/test/test.cpp
+++ b/linden/indra/test/test.cpp
@@ -6,6 +6,7 @@
*
* Copyright (c) 2005-2007, Linden Research, Inc.
*
+ * Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -62,7 +63,8 @@ public:
mVerboseMode(verbose_mode),
mTotalTests(0),
mPassedTests(0),
- mFailedTests(0)
+ mFailedTests(0),
+ mSkippedTests(0)
{
}
@@ -98,6 +100,10 @@ public:
++mFailedTests;
out << "abnormal termination";
break;
+ case tut::test_result::skip:
+ ++mSkippedTests;
+ out << "skipped";
+ break;
default:
++mFailedTests;
out << "unknown";
@@ -113,6 +119,12 @@ public:
std::cout << std::endl;
std::cout << "Total Tests: " << mTotalTests << std::endl;
std::cout << "Passed Tests : " << mPassedTests << std::endl;
+
+ if (mSkippedTests > 0)
+ {
+ std::cout << "Skipped Tests : " << mSkippedTests << std::endl;
+ }
+
if(mFailedTests > 0)
{
std::cout << "*********************************" << std::endl;
@@ -128,6 +140,7 @@ protected:
S32 mTotalTests;
S32 mPassedTests;
S32 mFailedTests;
+ S32 mSkippedTests;
};
static const apr_getopt_option_t TEST_CL_OPTIONS[] =
@@ -136,6 +149,7 @@ static const apr_getopt_option_t TEST_CL_OPTIONS[] =
{"list", 'l', 0, "List available test groups."},
{"verbose", 'v', 0, "Verbose output."},
{"group", 'g', 1, "Run test group specified by option argument."},
+ {"skip", 's', 1, "Skip test number specified by option argument. Only works when a specific group is being tested"},
{"wait", 'w', 0, "Wait for input before exit."},
{0, 0, 0, 0}
};
@@ -165,6 +179,8 @@ void stream_usage(std::ostream& s, const char* app)
s << "\tList all available test groups." << std::endl;
s << " " << app << " --group=uuid" << std::endl;
s << "\tRun the test group 'uuid'." << std::endl;
+ s << " " << app << " --skip=2" << std::endl;
+ s << "\tSkip test case 2." << std::endl;
}
void stream_groups(std::ostream& s, const char* app)
@@ -212,6 +228,7 @@ int main(int argc, char **argv)
// values used for controlling application
bool verbose_mode = false;
bool wait_at_exit = false;
+ int skip_test_id = 0;
std::string test_group;
// values use for options parsing
@@ -234,6 +251,9 @@ int main(int argc, char **argv)
case 'g':
test_group.assign(opt_arg);
break;
+ case 's':
+ skip_test_id = atoi(opt_arg);
+ break;
case 'h':
stream_usage(std::cout, argv[0]);
return 0;
@@ -264,7 +284,7 @@ int main(int argc, char **argv)
}
else
{
- tut::runner.get().run_tests(test_group);
+ tut::runner.get().run_tests(test_group, skip_test_id);
}
if (wait_at_exit)
diff --git a/linden/indra/test/test.vcproj b/linden/indra/test/test.vcproj
index 9255315..5df197a 100644
--- a/linden/indra/test/test.vcproj
+++ b/linden/indra/test/test.vcproj
@@ -145,7 +145,7 @@
Name="VCCustomBuildTool"/>
+ RelativePath=".\llsd_new_tut.cpp">
+ RelativePath=".\llsdmessagebuilder_tut.cpp">
+
+
+
+
+
+
[-name ] [-program ] [-silent]
+// Usage: updater -url [-name ] [-program ] [-silent]
//
#include
#include
#include
+#include
#include "llpreprocessor.h"
#include "llfile.h"
@@ -41,7 +43,7 @@
int gTotalBytesRead = 0;
HWND gWindow = NULL;
WCHAR gProgress[256];
-char* gUserServer;
+char* gUpdateURL;
char* gProgramName;
char* gProductName;
bool gIsSilent;
@@ -272,28 +274,20 @@ LRESULT CALLBACK WinProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
}
#define win_class_name L"FullScreen"
-#define UPDATE_URIBASE L"http://secondlife.com/update.php?userserver="
int parse_args(int argc, char **argv)
{
- // Check for old-type arguments.
- if (2 == argc)
- {
- gUserServer = argv[1];
- return 0;
- }
-
int j;
for (j = 1; j < argc; j++)
{
- if ((!strcmp(argv[j], "-userserver")) && (++j < argc))
+ if ((!strcmp(argv[j], "-name")) && (++j < argc))
{
- gUserServer = argv[j];
+ gProductName = argv[j];
}
- else if ((!strcmp(argv[j], "-name")) && (++j < argc))
+ else if ((!strcmp(argv[j], "-url")) && (++j < argc))
{
- gProductName = argv[j];
+ gUpdateURL = argv[j];
}
else if ((!strcmp(argv[j], "-program")) && (++j < argc))
{
@@ -306,7 +300,7 @@ int parse_args(int argc, char **argv)
}
// If nothing was set, let the caller know.
- if (!gUserServer && !gProductName && !gProgramName && !gIsSilent)
+ if (!gProductName && !gProgramName && !gIsSilent && !gUpdateURL)
{
return 1;
}
@@ -357,7 +351,7 @@ WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nSho
}
}
- gUserServer = NULL;
+ gUpdateURL = NULL;
gProgramName = NULL;
gProductName = NULL;
gIsSilent = false;
@@ -391,7 +385,6 @@ WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nSho
DEVMODE dev_mode = { 0 };
char update_exec_path[MAX_PATH]; /* Flawfinder: ignore */
char *ptr;
- WCHAR update_uri[4096];
const int WINDOW_WIDTH = 250;
const int WINDOW_HEIGHT = 100;
@@ -426,15 +419,15 @@ WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nSho
if (parse_args_result)
{
MessageBox(gWindow,
- L"Usage: updater -userserver [-name ] [-program ] [-silent]",
+ L"Usage: updater -url [-name ] [-program ] [-silent]",
L"Usage", MB_OK);
return parse_args_result;
}
// Did we get a userserver to work with?
- if (!gUserServer)
+ if (!gUpdateURL)
{
- MessageBox(gWindow, L"Please specify the IP address of the userserver on the command line",
+ MessageBox(gWindow, L"Please specify the download url from the command line",
L"Error", MB_OK);
return 1;
}
@@ -458,10 +451,9 @@ WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nSho
*(ptr + 2) = 'x';
*(ptr + 3) = 'e';
*(ptr + 4) = 0;
- wcscpy(update_uri, UPDATE_URIBASE); /* Flawfinder: ignore */
- WCHAR wcmdline[2048];
- mbstowcs(wcmdline, gUserServer, 2048);
- wcscat(update_uri, wcmdline); /* Flawfinder: ignore */
+
+ WCHAR update_uri[4096];
+ mbstowcs(update_uri, gUpdateURL, 4096);
int success;
int cancelled;
@@ -507,11 +499,13 @@ WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nSho
char params[2048]; /* Flawfinder: ignore */
if (gIsSilent && gProgramName)
{
- snprintf(params, sizeof(params), "/S /P=\"%s\"", gProgramName); /* Flawfinder: ignore */
+ _snprintf(params, sizeof(params), "/S /P=\"%s\"", gProgramName); /* Flawfinder: ignore */
+ params[2047] = '\0';
}
else if (gProgramName)
{
- snprintf(params, sizeof(params), "/P=\"%s\"", gProgramName); /* Flawfinder: ignore */
+ _snprintf(params, sizeof(params), "/P=\"%s\"", gProgramName); /* Flawfinder: ignore */
+ params[2047] = '\0';
}
else if (gIsSilent)
{
--
cgit v1.1