diff options
Diffstat (limited to 'indra/newview')
136 files changed, 3572 insertions, 2065 deletions
| diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 4adef84cd3..e7458529be 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -297,8 +297,6 @@ set(viewer_SOURCE_FILES      llnotify.cpp      lloutputmonitorctrl.cpp      lloverlaybar.cpp -    llpanelappearance.cpp -    llpanelappearancetab.cpp      llpanelavatar.cpp      llpanelavatarrow.cpp      llpanelavatartag.cpp @@ -322,7 +320,6 @@ set(viewer_SOURCE_FILES      llpanellandmedia.cpp      llpanellogin.cpp      llpanellookinfo.cpp -    llpanellooks.cpp      llpanelmaininventory.cpp      llpanelmediasettingsgeneral.cpp      llpanelmediasettingspermissions.cpp @@ -330,6 +327,7 @@ set(viewer_SOURCE_FILES      llpanelmeprofile.cpp      llpanelobject.cpp      llpanelobjectinventory.cpp +    llpaneloutfitsinventory.cpp      llpanelpeople.cpp      llpanelpeoplemenus.cpp      llpanelpermissions.cpp @@ -370,6 +368,7 @@ set(viewer_SOURCE_FILES      llsearchcombobox.cpp      llsearchhistory.cpp      llselectmgr.cpp +    llsidepanelappearance.cpp      llsidepanelinventory.cpp      llsidepanelinventorysubpanel.cpp      llsidepaneliteminfo.cpp @@ -792,8 +791,6 @@ set(viewer_HEADER_FILES      llnotify.h      lloutputmonitorctrl.h      lloverlaybar.h -    llpanelappearance.h -    llpanelappearancetab.h      llpanelavatar.h      llpanelavatarrow.h      llpanelavatartag.h @@ -817,7 +814,6 @@ set(viewer_HEADER_FILES      llpanellandmedia.h      llpanellogin.h      llpanellookinfo.h -    llpanellooks.h      llpanelmaininventory.h      llpanelmediasettingsgeneral.h      llpanelmediasettingspermissions.h @@ -825,6 +821,7 @@ set(viewer_HEADER_FILES      llpanelmeprofile.h      llpanelobject.h      llpanelobjectinventory.h +    llpaneloutfitsinventory.h      llpanelpeople.h      llpanelpeoplemenus.h      llpanelpermissions.h @@ -867,6 +864,7 @@ set(viewer_HEADER_FILES      llsearchcombobox.h      llsearchhistory.h      llselectmgr.h +    llsidepanelappearance.h      llsidepanelinventory.h      llsidepanelinventorysubpanel.h      llsidepaneliteminfo.h diff --git a/indra/newview/app_settings/ignorable_dialogs.xml b/indra/newview/app_settings/ignorable_dialogs.xml index ab18febccc..669235af1b 100644 --- a/indra/newview/app_settings/ignorable_dialogs.xml +++ b/indra/newview/app_settings/ignorable_dialogs.xml @@ -1,291 +1,291 @@ -<?xml version="1.0" ?> -<llsd> -<map> -    <key>FirstAppearance</key> -    <map> -      <key>Comment</key> -      <string>Enables FirstAppearance warning dialog</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -    <key>FirstAttach</key> -    <map> -      <key>Comment</key> -      <string>Enables FirstAttach warning dialog</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -    <key>FirstBalanceDecrease</key> -    <map> -      <key>Comment</key> -      <string>Enables FirstBalanceDecrease warning dialog</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -    <key>FirstBalanceIncrease</key> -    <map> -      <key>Comment</key> -      <string>Enables FirstBalanceIncrease warning dialog</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -    <key>FirstBuild</key> -    <map> -      <key>Comment</key> -      <string>Enables FirstBuild warning dialog</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -    <key>FirstDebugMenus</key> -    <map> -      <key>Comment</key> -      <string>Enables FirstDebugMenus warning dialog</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -    <key>FirstFlexible</key> -    <map> -      <key>Comment</key> -      <string>Enables FirstFlexible warning dialog</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -    <key>FirstGoTo</key> -    <map> -      <key>Comment</key> -      <string>Enables FirstGoTo warning dialog</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -    <key>FirstInventory</key> -    <map> -      <key>Comment</key> -      <string>Enables FirstInventory warning dialog</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -    <key>FirstLeftClickNoHit</key> -    <map> -      <key>Comment</key> -      <string>Enables FirstLeftClickNoHit warning dialog</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -    <key>FirstMap</key> -    <map> -      <key>Comment</key> -      <string>Enables FirstMap warning dialog</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -    <key>FirstMedia</key> -    <map> -      <key>Comment</key> -      <string>Enables FirstMedia warning dialog</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -    <key>FirstOverrideKeys</key> -    <map> -      <key>Comment</key> -      <string>Enables FirstOverrideKeys warning dialog</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -    <key>FirstSandbox</key> -    <map> -      <key>Comment</key> -      <string>Enables FirstSandbox warning dialog</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -    <key>FirstSculptedPrim</key> -    <map> -      <key>Comment</key> -      <string>Enables FirstSculptedPrim warning dialog</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -    <key>FirstSit</key> -    <map> -      <key>Comment</key> -      <string>Enables FirstSit warning dialog</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -    <key>FirstStreamingMusic</key> -    <map> -      <key>Comment</key> -      <string>Enables FirstStreamingMusic warning dialog</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -    <key>FirstStreamingVideo</key> -    <map> -      <key>Comment</key> -      <string>Enables FirstStreamingVideo warning dialog</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -    <key>FirstTeleport</key> -    <map> -      <key>Comment</key> -      <string>Enables FirstTeleport warning dialog</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -    <key>FirstVoice</key> -    <map> -      <key>Comment</key> -      <string>Enables FirstVoice warning dialog</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -    <key>AboutDirectX9</key> -    <map> -      <key>Comment</key> -      <string>Enables AboutDirectX9 warning dialog</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -    <key>BrowserLaunch</key> -    <map> -      <key>Comment</key> -      <string>Enables BrowserLaunch warning dialog</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -    <key>DeedObject</key> -    <map> -      <key>Comment</key> -      <string>Enables DeedObject warning dialog</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -  <key>NewClassified</key> -    <map> -      <key>Comment</key> -      <string>Enables NewClassified warning dialog</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -    <key>QuickTimeInstalled</key> -    <map> -      <key>Comment</key> -      <string>Enables QuickTimeInstalled warning dialog</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -    <key>ReturnToOwner</key> -    <map> -      <key>Comment</key> -      <string>Enables ReturnToOwner warning dialog</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -  </map> -</llsd> +<?xml version="1.0" ?>
 +<llsd>
 +<map>
 +    <key>FirstAppearance</key>
 +    <map>
 +      <key>Comment</key>
 +      <string>Enables FirstAppearance warning dialog</string>
 +      <key>Persist</key>
 +      <integer>1</integer>
 +      <key>Type</key>
 +      <string>Boolean</string>
 +      <key>Value</key>
 +      <integer>1</integer>
 +    </map>
 +    <key>FirstAttach</key>
 +    <map>
 +      <key>Comment</key>
 +      <string>Enables FirstAttach warning dialog</string>
 +      <key>Persist</key>
 +      <integer>1</integer>
 +      <key>Type</key>
 +      <string>Boolean</string>
 +      <key>Value</key>
 +      <integer>1</integer>
 +    </map>
 +    <key>FirstBalanceDecrease</key>
 +    <map>
 +      <key>Comment</key>
 +      <string>Enables FirstBalanceDecrease warning dialog</string>
 +      <key>Persist</key>
 +      <integer>1</integer>
 +      <key>Type</key>
 +      <string>Boolean</string>
 +      <key>Value</key>
 +      <integer>1</integer>
 +    </map>
 +    <key>FirstBalanceIncrease</key>
 +    <map>
 +      <key>Comment</key>
 +      <string>Enables FirstBalanceIncrease warning dialog</string>
 +      <key>Persist</key>
 +      <integer>1</integer>
 +      <key>Type</key>
 +      <string>Boolean</string>
 +      <key>Value</key>
 +      <integer>1</integer>
 +    </map>
 +    <key>FirstBuild</key>
 +    <map>
 +      <key>Comment</key>
 +      <string>Enables FirstBuild warning dialog</string>
 +      <key>Persist</key>
 +      <integer>1</integer>
 +      <key>Type</key>
 +      <string>Boolean</string>
 +      <key>Value</key>
 +      <integer>1</integer>
 +    </map>
 +    <key>FirstDebugMenus</key>
 +    <map>
 +      <key>Comment</key>
 +      <string>Enables FirstDebugMenus warning dialog</string>
 +      <key>Persist</key>
 +      <integer>1</integer>
 +      <key>Type</key>
 +      <string>Boolean</string>
 +      <key>Value</key>
 +      <integer>1</integer>
 +    </map>
 +    <key>FirstFlexible</key>
 +    <map>
 +      <key>Comment</key>
 +      <string>Enables FirstFlexible warning dialog</string>
 +      <key>Persist</key>
 +      <integer>1</integer>
 +      <key>Type</key>
 +      <string>Boolean</string>
 +      <key>Value</key>
 +      <integer>1</integer>
 +    </map>
 +    <key>FirstGoTo</key>
 +    <map>
 +      <key>Comment</key>
 +      <string>Enables FirstGoTo warning dialog</string>
 +      <key>Persist</key>
 +      <integer>1</integer>
 +      <key>Type</key>
 +      <string>Boolean</string>
 +      <key>Value</key>
 +      <integer>1</integer>
 +    </map>
 +    <key>FirstInventory</key>
 +    <map>
 +      <key>Comment</key>
 +      <string>Enables FirstInventory warning dialog</string>
 +      <key>Persist</key>
 +      <integer>1</integer>
 +      <key>Type</key>
 +      <string>Boolean</string>
 +      <key>Value</key>
 +      <integer>1</integer>
 +    </map>
 +    <key>FirstLeftClickNoHit</key>
 +    <map>
 +      <key>Comment</key>
 +      <string>Enables FirstLeftClickNoHit warning dialog</string>
 +      <key>Persist</key>
 +      <integer>1</integer>
 +      <key>Type</key>
 +      <string>Boolean</string>
 +      <key>Value</key>
 +      <integer>1</integer>
 +    </map>
 +    <key>FirstMap</key>
 +    <map>
 +      <key>Comment</key>
 +      <string>Enables FirstMap warning dialog</string>
 +      <key>Persist</key>
 +      <integer>1</integer>
 +      <key>Type</key>
 +      <string>Boolean</string>
 +      <key>Value</key>
 +      <integer>1</integer>
 +    </map>
 +    <key>FirstMedia</key>
 +    <map>
 +      <key>Comment</key>
 +      <string>Enables FirstMedia warning dialog</string>
 +      <key>Persist</key>
 +      <integer>1</integer>
 +      <key>Type</key>
 +      <string>Boolean</string>
 +      <key>Value</key>
 +      <integer>1</integer>
 +    </map>
 +    <key>FirstOverrideKeys</key>
 +    <map>
 +      <key>Comment</key>
 +      <string>Enables FirstOverrideKeys warning dialog</string>
 +      <key>Persist</key>
 +      <integer>1</integer>
 +      <key>Type</key>
 +      <string>Boolean</string>
 +      <key>Value</key>
 +      <integer>1</integer>
 +    </map>
 +    <key>FirstSandbox</key>
 +    <map>
 +      <key>Comment</key>
 +      <string>Enables FirstSandbox warning dialog</string>
 +      <key>Persist</key>
 +      <integer>1</integer>
 +      <key>Type</key>
 +      <string>Boolean</string>
 +      <key>Value</key>
 +      <integer>1</integer>
 +    </map>
 +    <key>FirstSculptedPrim</key>
 +    <map>
 +      <key>Comment</key>
 +      <string>Enables FirstSculptedPrim warning dialog</string>
 +      <key>Persist</key>
 +      <integer>1</integer>
 +      <key>Type</key>
 +      <string>Boolean</string>
 +      <key>Value</key>
 +      <integer>1</integer>
 +    </map>
 +    <key>FirstSit</key>
 +    <map>
 +      <key>Comment</key>
 +      <string>Enables FirstSit warning dialog</string>
 +      <key>Persist</key>
 +      <integer>1</integer>
 +      <key>Type</key>
 +      <string>Boolean</string>
 +      <key>Value</key>
 +      <integer>1</integer>
 +    </map>
 +    <key>FirstStreamingMusic</key>
 +    <map>
 +      <key>Comment</key>
 +      <string>Enables FirstStreamingMusic warning dialog</string>
 +      <key>Persist</key>
 +      <integer>1</integer>
 +      <key>Type</key>
 +      <string>Boolean</string>
 +      <key>Value</key>
 +      <integer>1</integer>
 +    </map>
 +    <key>FirstStreamingVideo</key>
 +    <map>
 +      <key>Comment</key>
 +      <string>Enables FirstStreamingVideo warning dialog</string>
 +      <key>Persist</key>
 +      <integer>1</integer>
 +      <key>Type</key>
 +      <string>Boolean</string>
 +      <key>Value</key>
 +      <integer>1</integer>
 +    </map>
 +    <key>FirstTeleport</key>
 +    <map>
 +      <key>Comment</key>
 +      <string>Enables FirstTeleport warning dialog</string>
 +      <key>Persist</key>
 +      <integer>1</integer>
 +      <key>Type</key>
 +      <string>Boolean</string>
 +      <key>Value</key>
 +      <integer>1</integer>
 +    </map>
 +    <key>FirstVoice</key>
 +    <map>
 +      <key>Comment</key>
 +      <string>Enables FirstVoice warning dialog</string>
 +      <key>Persist</key>
 +      <integer>1</integer>
 +      <key>Type</key>
 +      <string>Boolean</string>
 +      <key>Value</key>
 +      <integer>1</integer>
 +    </map>
 +    <key>AboutDirectX9</key>
 +    <map>
 +      <key>Comment</key>
 +      <string>Enables AboutDirectX9 warning dialog</string>
 +      <key>Persist</key>
 +      <integer>1</integer>
 +      <key>Type</key>
 +      <string>Boolean</string>
 +      <key>Value</key>
 +      <integer>1</integer>
 +    </map>
 +    <key>BrowserLaunch</key>
 +    <map>
 +      <key>Comment</key>
 +      <string>Enables BrowserLaunch warning dialog</string>
 +      <key>Persist</key>
 +      <integer>1</integer>
 +      <key>Type</key>
 +      <string>Boolean</string>
 +      <key>Value</key>
 +      <integer>1</integer>
 +    </map>
 +    <key>DeedObject</key>
 +    <map>
 +      <key>Comment</key>
 +      <string>Enables DeedObject warning dialog</string>
 +      <key>Persist</key>
 +      <integer>1</integer>
 +      <key>Type</key>
 +      <string>Boolean</string>
 +      <key>Value</key>
 +      <integer>1</integer>
 +    </map>
 +  <key>NewClassified</key>
 +    <map>
 +      <key>Comment</key>
 +      <string>Enables NewClassified warning dialog</string>
 +      <key>Persist</key>
 +      <integer>1</integer>
 +      <key>Type</key>
 +      <string>Boolean</string>
 +      <key>Value</key>
 +      <integer>1</integer>
 +    </map>
 +    <key>QuickTimeInstalled</key>
 +    <map>
 +      <key>Comment</key>
 +      <string>Enables QuickTimeInstalled warning dialog</string>
 +      <key>Persist</key>
 +      <integer>1</integer>
 +      <key>Type</key>
 +      <string>Boolean</string>
 +      <key>Value</key>
 +      <integer>1</integer>
 +    </map>
 +    <key>ReturnToOwner</key>
 +    <map>
 +      <key>Comment</key>
 +      <string>Enables ReturnToOwner warning dialog</string>
 +      <key>Persist</key>
 +      <integer>1</integer>
 +      <key>Type</key>
 +      <string>Boolean</string>
 +      <key>Value</key>
 +      <integer>1</integer>
 +    </map>
 +  </map>
 +</llsd>
 diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml index 10c197d09e..d7182dfaab 100644 --- a/indra/newview/character/avatar_lad.xml +++ b/indra/newview/character/avatar_lad.xml @@ -1,6 +1,6 @@  <?xml version="1.0" encoding="US-ASCII" standalone="yes"?>  <linden_avatar - version="1.0" wearable_definition_version="24">  + version="1.0" wearable_definition_version="22">     <!-- The wearable_definition_version is checked during asset upload. -->    <!-- If you increment it, check indra/lib/python/indra/assetutil.py.  -->    <skeleton diff --git a/indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt b/indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt index 30f9349111..185c0180fb 100644 --- a/indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt +++ b/indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt @@ -1,6 +1,6 @@ -The language files in this directory are Unicode (Little-Endian) format, also known as UTF-16 LE. - -This is the format required for NSIS Unicode.  See http://www.scratchpaper.com/ for details. - -James Cook -September 2008 +The language files in this directory are Unicode (Little-Endian) format, also known as UTF-16 LE.
 +
 +This is the format required for NSIS Unicode.  See http://www.scratchpaper.com/ for details.
 +
 +James Cook
 +September 2008
 diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 1257cf9789..fb2ecb3bed 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -31,84 +31,54 @@   */  #include "llviewerprecompiledheaders.h" -  #include "llagent.h"  -#include "llagentwearables.h" + +#include "pipeline.h"  #include "llagentlistener.h" +#include "llagentwearables.h" +#include "llagentui.h" +  #include "llanimationstates.h" +#include "llbottomtray.h"  #include "llcallingcard.h" +#include "llchannelmanager.h"  #include "llconsole.h" -#include "lldrawable.h"  #include "llfirstuse.h" -#include "llfloaterreg.h" -#include "llspeakers.h"  #include "llfloatercamera.h"  #include "llfloatercustomize.h" - -#include "llfloaterland.h" -#include "llfloatersnapshot.h" +#include "llfloaterreg.h"  #include "llfloatertools.h" -#include "llfloaterworldmap.h" -  #include "llgroupactions.h" - -#include "llfocusmgr.h"  #include "llgroupmgr.h"  #include "llhomelocationresponder.h" -#include "llimview.h"  #include "llhudmanager.h"  #include "lljoystickbutton.h" -#include "llmenugl.h"  #include "llmorphview.h"  #include "llmoveview.h" +#include "llnavigationbar.h" // to show/hide navigation bar when changing mouse look state +#include "llnearbychatbar.h"  #include "llparcel.h" -#include "llquantize.h" -#include "llrand.h" -#include "llregionhandle.h"  #include "llsdutil.h" -#include "llselectmgr.h" +#include "llsidetray.h"  #include "llsky.h" -#include "llslurl.h"  #include "llsmoothstep.h" -#include "llsidetray.h"  #include "llstatusbar.h" -#include "llteleportflags.h" -#include "llteleporthistory.h" -#include "lltexturestats.h" -#include "lltexturestats.h"  #include "lltool.h" -#include "lltoolcomp.h"  #include "lltoolmgr.h" -#include "lluictrlfactory.h" -#include "llurldispatcher.h" - -#include "llviewercamera.h" +#include "lltrans.h" +#include "llviewercontrol.h"  #include "llviewerdisplay.h" +#include "llviewerjoystick.h"  #include "llviewermediafocus.h"  #include "llviewerobjectlist.h"  #include "llviewerparcelmgr.h"  #include "llviewerstats.h" -#include "llviewerwindow.h" -#include "llviewercontrol.h" -#include "llviewerjoystick.h" -  #include "llvoavatarself.h"  #include "llwindow.h"  #include "llworld.h"  #include "llworldmap.h" -#include "pipeline.h" -#include "lltrans.h" -#include "llbottomtray.h" -#include "llnearbychatbar.h" -#include "stringize.h" -#include "llcapabilitylistener.h" - -#include "llnavigationbar.h" //to show/hide navigation bar when changing mouse look state -#include "llagentui.h" -#include "llchannelmanager.h" -  using namespace LLVOAvatarDefines;  extern LLMenuBarGL* gMenuBarView; @@ -6356,7 +6326,7 @@ void LLAgent::sendAgentSetAppearance()  			msg->addU8Fast(_PREHASH_TextureIndex, (U8)texture_index);  		}  		msg->nextBlockFast(_PREHASH_ObjectData); -		mAvatarObject->packTEMessage( gMessageSystem ); +		mAvatarObject->sendAppearanceMessage( gMessageSystem );  	}  	else  	{ diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index 99a9bdd8e6..4162dfce1e 100644 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -36,14 +36,13 @@  #include "indra_constants.h"  #include "llevent.h" 				// LLObservable base class  #include "llagentaccess.h" -#include "llagentaccess.h"  #include "llagentconstants.h" -#include "llhudeffectpointat.h" 	// ELookAtType -#include "llhudeffectlookat.h" 		// EPointAtType -#include "llpointer.h" +#include "llagentdata.h" 			// gAgentID, gAgentSessionID  #include "llcharacter.h" 			// LLAnimPauseRequest  #include "llfollowcam.h" 			// Ventrella -#include "llagentdata.h" 			// gAgentID, gAgentSessionID +#include "llhudeffectlookat.h" 		// EPointAtType +#include "llhudeffectpointat.h" 	// ELookAtType +#include "llpointer.h"  #include "lluicolor.h"  #include "llvoavatardefines.h" diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index 6cb96d1336..538dcb6f3d 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -62,7 +62,7 @@ class LLInitialWearablesFetch : public LLInventoryFetchDescendentsObserver  {  public:  	LLInitialWearablesFetch() {} -	~LLInitialWearablesFetch() {} +	~LLInitialWearablesFetch();  	virtual void done();  	struct InitialWearableData @@ -84,7 +84,6 @@ public:  protected:  	void processWearablesMessage();  	void processContents(); -	static void onIdle(void *userdata);  };  class LLLibraryOutfitsFetch : public LLInventoryFetchDescendentsObserver @@ -654,11 +653,13 @@ LLWearable* LLAgentWearables::getWearable(const EWearableType type, U32 index)  void LLAgentWearables::setWearable(const EWearableType type, U32 index, LLWearable *wearable)  { -	if (!getWearable(type,index)) +	LLWearable *old_wearable = getWearable(type,index); +	if (!old_wearable)  	{  		pushWearable(type,wearable);  		return;  	} +	  	wearableentry_map_t::iterator wearable_iter = mWearableDatas.find(type);  	if (wearable_iter == mWearableDatas.end())  	{ @@ -673,6 +674,7 @@ void LLAgentWearables::setWearable(const EWearableType type, U32 index, LLWearab  	else  	{  		wearable_vec[index] = wearable; +		old_wearable->setLabelUpdated();  		mAvatarObject->wearableUpdated(wearable->getType());  	}  } @@ -689,6 +691,7 @@ U32 LLAgentWearables::pushWearable(const EWearableType type, LLWearable *wearabl  	{  		mWearableDatas[type].push_back(wearable);  		mAvatarObject->wearableUpdated(wearable->getType()); +		wearable->setLabelUpdated();  		return mWearableDatas[type].size()-1;  	}  	return MAX_WEARABLES_PER_TYPE; @@ -718,6 +721,7 @@ void LLAgentWearables::popWearable(const EWearableType type, U32 index)  	{  		mWearableDatas[type].erase(mWearableDatas[type].begin() + index);  		mAvatarObject->wearableUpdated(wearable->getType()); +		wearable->setLabelUpdated();  	}  } @@ -1413,14 +1417,10 @@ void LLAgentWearables::removeWearableFinal(const EWearableType type, bool do_rem  		for (S32 i=max_entry; i>=0; i--)  		{  			LLWearable* old_wearable = getWearable(type,i); -			const LLUUID &item_id = getWearableItemID(type,i); -			popWearable(type,i); -			gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); -			LLAppearanceManager::instance().removeItemLinks(item_id,false); -  			//queryWearableCache(); // moved below  			if (old_wearable)  			{ +				popWearable(old_wearable);  				old_wearable->removeFromAvatar(TRUE);  			}  		} @@ -1429,16 +1429,11 @@ void LLAgentWearables::removeWearableFinal(const EWearableType type, bool do_rem  	else  	{  		LLWearable* old_wearable = getWearable(type, index); - -		const LLUUID &item_id = getWearableItemID(type,index); -		popWearable(type, index); -		gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); -		LLAppearanceManager::instance().removeItemLinks(item_id,false); -  		//queryWearableCache(); // moved below  		if (old_wearable)  		{ +			popWearable(old_wearable);  			old_wearable->removeFromAvatar(TRUE);  		}  	} @@ -1500,7 +1495,6 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it  				continue;  			} -			gInventory.addChangedMask(LLInventoryObserver::LABEL, old_item_id);  			// Assumes existing wearables are not dirty.  			if (old_wearable->isDirty())  			{ @@ -1509,9 +1503,9 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it  			}  		} -		setWearable(type,0,new_wearable);  		if (new_wearable)  			new_wearable->setItemID(new_item->getUUID()); +		setWearable(type,0,new_wearable);  	}  	std::vector<LLWearable*> wearables_being_removed; @@ -2159,6 +2153,11 @@ void LLLibraryOutfitsFetch::contentsDone(void)  // to avoid gInventory.notifyObservers recursion.  //-------------------------------------------------------------------- +LLInitialWearablesFetch::~LLInitialWearablesFetch() +{ +	llinfos << "~LLInitialWearablesFetch" << llendl; +} +  // virtual  void LLInitialWearablesFetch::done()  { @@ -2166,15 +2165,7 @@ void LLInitialWearablesFetch::done()  	// gInventory.notifyObservers.  The results will be handled in the next  	// idle tick instead.  	gInventory.removeObserver(this); -	gIdleCallbacks.addFunction(onIdle, this); -} - -// static -void LLInitialWearablesFetch::onIdle(void *data) -{ -	gIdleCallbacks.deleteFunction(onIdle, data); -	LLInitialWearablesFetch *self = reinterpret_cast<LLInitialWearablesFetch*>(data); -	self->processContents(); +	doOnIdle(boost::bind(&LLInitialWearablesFetch::processContents,this));  }  void LLInitialWearablesFetch::processContents() diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 80ac9e4085..d6265a85f6 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -40,7 +40,7 @@  #include "llinventorybridge.h"  #include "llinventoryobserver.h"  #include "llnotifications.h" -#include "llpanelappearance.h" +#include "llsidepanelappearance.h"  #include "llsidetray.h"  #include "llvoavatar.h"  #include "llvoavatarself.h" @@ -96,7 +96,8 @@ public:  		mAppend(append)  	{}  	~LLOutfitObserver() {} -	virtual void done(); //public +	virtual void done(); +	void doWearCategory();  protected:  	LLUUID mCatID; @@ -106,6 +107,12 @@ protected:  void LLOutfitObserver::done()  { +	gInventory.removeObserver(this); +	doOnIdle(boost::bind(&LLOutfitObserver::doWearCategory,this)); +} + +void LLOutfitObserver::doWearCategory() +{  	// We now have an outfit ready to be copied to agent inventory. Do  	// it, and wear that outfit normally.  	if(mCopyItems) @@ -175,6 +182,7 @@ void LLOutfitObserver::done()  		// Wear the inventory category.  		LLAppearanceManager::instance().wearInventoryCategoryOnAvatar(gInventory.getCategory(mCatID), mAppend);  	} +	delete this;  }  class LLOutfitFetch : public LLInventoryFetchDescendentsObserver @@ -222,7 +230,6 @@ void LLOutfitFetch::done()  	// loop.  	//dec_busy_count();  	gInventory.removeObserver(this); -	delete this;  	// increment busy count and either tell the inventory to check &  	// call done, or add this object to the inventory for observation. @@ -241,6 +248,7 @@ void LLOutfitFetch::done()  		// will call done for us when everything is here.  		gInventory.addObserver(outfit_observer);  	} +	delete this;  }  class LLUpdateAppearanceOnDestroy: public LLInventoryCallback @@ -457,7 +465,7 @@ void LLAppearanceManager::filterWearableItems(  // Create links to all listed items.  void LLAppearanceManager::linkAll(const LLUUID& category,  								  LLInventoryModel::item_array_t& items, -											   LLPointer<LLInventoryCallback> cb) +								  LLPointer<LLInventoryCallback> cb)  {  	for (S32 i=0; i<items.count(); i++)  	{ @@ -530,10 +538,10 @@ void LLAppearanceManager::updateCOF(const LLUUID& category, bool append)  							LLAssetType::AT_LINK_FOLDER, link_waiter);  		// Update the current outfit name of the appearance sidepanel. -		LLPanelAppearance* panel_appearance = dynamic_cast<LLPanelAppearance *>(LLSideTray::getInstance()->getPanel("panel_appearance")); +		LLSidepanelAppearance* panel_appearance = dynamic_cast<LLSidepanelAppearance *>(LLSideTray::getInstance()->getPanel("sidepanel_appearance"));  		if (panel_appearance)  		{ -			panel_appearance->refreshCurrentLookName(catp->getName()); +			panel_appearance->refreshCurrentOutfitName(catp->getName());  		}  	} @@ -571,7 +579,6 @@ void LLAppearanceManager::updateAgentWearables(LLWearableHoldingPattern* holder,  	if(wearables.count() > 0)  	{  		gAgentWearables.setWearableOutfit(items, wearables, !append); -		gInventory.notifyObservers();  	}  	delete holder; @@ -811,15 +818,23 @@ bool areMatchingWearables(const LLViewerInventoryItem *a, const LLViewerInventor  			(a->getWearableType() == b->getWearableType()));  } -void LLAppearanceManager::addItemLink( LLInventoryItem* item, bool do_update ) +void LLAppearanceManager::addCOFItemLink(const LLUUID &item_id, bool do_update )  { -	LLViewerInventoryItem *vitem = dynamic_cast<LLViewerInventoryItem*>(item); +	const LLInventoryItem *item = gInventory.getItem(item_id); +	addCOFItemLink(item); +} + +void LLAppearanceManager::addCOFItemLink(const LLInventoryItem *item, bool do_update ) +{		 +	const LLViewerInventoryItem *vitem = dynamic_cast<const LLViewerInventoryItem*>(item);  	if (!vitem)  	{  		llwarns << "not an llviewerinventoryitem, failed" << llendl;  		return;  	} -		 + +	gInventory.addChangedMask(LLInventoryObserver::LABEL, vitem->getLinkedUUID()); +  	LLInventoryModel::cat_array_t cat_array;  	LLInventoryModel::item_array_t item_array;  	gInventory.collectDescendents(LLAppearanceManager::getCOF(), @@ -831,7 +846,7 @@ void LLAppearanceManager::addItemLink( LLInventoryItem* item, bool do_update )  	{  		// Are these links to the same object?  		const LLViewerInventoryItem* inv_item = item_array.get(i).get(); -		if (inv_item->getLinkedUUID() == item->getLinkedUUID()) +		if (inv_item->getLinkedUUID() == vitem->getLinkedUUID())  		{  			linked_already = true;  		} @@ -842,7 +857,6 @@ void LLAppearanceManager::addItemLink( LLInventoryItem* item, bool do_update )  		{  			gAgentWearables.removeWearable(inv_item->getWearableType(),true,0);  			gInventory.purgeObject(inv_item->getUUID()); -			gInventory.notifyObservers();  		}  	}  	if (linked_already) @@ -878,8 +892,10 @@ void LLAppearanceManager::addEnsembleLink( LLInventoryCategory* cat, bool do_upd  #endif  } -void LLAppearanceManager::removeItemLinks(const LLUUID& item_id, bool do_update) +void LLAppearanceManager::removeCOFItemLinks(const LLUUID& item_id, bool do_update)  { +	gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); +  	LLInventoryModel::cat_array_t cat_array;  	LLInventoryModel::item_array_t item_array;  	gInventory.collectDescendents(LLAppearanceManager::getCOF(), @@ -891,7 +907,8 @@ void LLAppearanceManager::removeItemLinks(const LLUUID& item_id, bool do_update)  		const LLInventoryItem* item = item_array.get(i).get();  		if (item->getLinkedUUID() == item_id)  		{ -			gInventory.purgeObject(item_array.get(i)->getUUID()); +			const LLUUID& item_id = item_array.get(i)->getUUID(); +			gInventory.purgeObject(item_id);  		}  	}  	if (do_update) @@ -970,18 +987,13 @@ void dumpAttachmentSet(const std::set<LLUUID>& atts, const std::string& msg)  void LLAppearanceManager::registerAttachment(const LLUUID& item_id)  {         mRegisteredAttachments.insert(item_id); +	   gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);         //dumpAttachmentSet(mRegisteredAttachments,"after register:");  	   if (mAttachmentInvLinkEnabled)  	   { -		   LLViewerInventoryItem *item = gInventory.getItem(item_id); -		   if (item) -		   { -			   //LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Adding attachment link:"); -			   LLAppearanceManager::addItemLink(item,false);  // Add COF link for item. -			   gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); -			   gInventory.notifyObservers(); -		   } +		   //LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Adding attachment link:"); +		   LLAppearanceManager::addCOFItemLink(item_id, false);  // Add COF link for item.  	   }  	   else  	   { @@ -992,15 +1004,14 @@ void LLAppearanceManager::registerAttachment(const LLUUID& item_id)  void LLAppearanceManager::unregisterAttachment(const LLUUID& item_id)  {         mRegisteredAttachments.erase(item_id); +	   gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); +         //dumpAttachmentSet(mRegisteredAttachments,"after unregister:");  	   if (mAttachmentInvLinkEnabled)  	   {  		   //LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Removing attachment link:"); -		   LLAppearanceManager::removeItemLinks(item_id, false); -		   // BAP - needs to change for label to track link. -		   gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); -		   gInventory.notifyObservers(); +		   LLAppearanceManager::removeCOFItemLinks(item_id, false);  	   }  	   else  	   { @@ -1015,13 +1026,7 @@ void LLAppearanceManager::linkRegisteredAttachments()  		 ++it)  	{  		LLUUID item_id = *it; -		LLViewerInventoryItem *item = gInventory.getItem(item_id); -		if (item) -		{ -			addItemLink(item, false); -			gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); -			gInventory.notifyObservers(); -		} +		addCOFItemLink(item_id, false);  	}  	mRegisteredAttachments.clear();  } diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index 88d3320d1f..5daa6d067b 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -36,6 +36,7 @@  #include "llsingleton.h"  #include "llinventorymodel.h"  #include "llviewerinventory.h" +#include "llcallbacklist.h"  class LLWearable;  struct LLWearableHoldingPattern; @@ -53,12 +54,6 @@ public:  	void wearOutfitByName(const std::string& name);  	void changeOutfit(bool proceed, const LLUUID& category, bool append); -	// Add COF link to individual item. -	void addItemLink(LLInventoryItem* item, bool do_update = true); - -	// Add COF link to ensemble folder. -	void addEnsembleLink(LLInventoryCategory* item, bool do_update = true); -  	// Copy all items in a category.  	void shallowCopyCategory(const LLUUID& src_id, const LLUUID& dst_id,  							 LLPointer<LLInventoryCallback> cb); @@ -66,9 +61,6 @@ public:  	// Find the Current Outfit folder.  	LLUUID getCOF(); -	// Remove COF entries -	void removeItemLinks(const LLUUID& item_id, bool do_update = true); -  	void updateAgentWearables(LLWearableHoldingPattern* holder, bool append);  	// For debugging - could be moved elsewhere. @@ -81,6 +73,21 @@ public:  	void setAttachmentInvLinkEnable(bool val);  	void linkRegisteredAttachments(); +	// utility function for bulk linking. +	void linkAll(const LLUUID& category, +				 LLInventoryModel::item_array_t& items, +				 LLPointer<LLInventoryCallback> cb); + +	// Add COF link to individual item. +	void addCOFItemLink(const LLUUID& item_id, bool do_update = true); +	void addCOFItemLink(const LLInventoryItem *item, bool do_update = true); + +	// Remove COF entries +	void removeCOFItemLinks(const LLUUID& item_id, bool do_update = true); + +	// Add COF link to ensemble folder. +	void addEnsembleLink(LLInventoryCategory* item, bool do_update = true); +  protected:  	LLAppearanceManager();  	~LLAppearanceManager(); @@ -88,9 +95,6 @@ protected:  private:  	void filterWearableItems(LLInventoryModel::item_array_t& items, S32 max_per_type); -	void linkAll(const LLUUID& category, -						LLInventoryModel::item_array_t& items, -						LLPointer<LLInventoryCallback> cb);  	void getDescendentsOfAssetType(const LLUUID& category,   										  LLInventoryModel::item_array_t& items, @@ -111,4 +115,36 @@ private:  #define SUPPORT_ENSEMBLES 0 +// Shim class and template function to allow arbitrary boost::bind +// expressions to be run as one-time idle callbacks. +template <typename T> +class OnIdleCallback +{ +public: +	OnIdleCallback(T callable): +		mCallable(callable) +	{ +	} +	static void onIdle(void *data) +	{ +		gIdleCallbacks.deleteFunction(onIdle, data); +		OnIdleCallback<T>* self = reinterpret_cast<OnIdleCallback<T>*>(data); +		self->call(); +		delete self; +	} +	void call() +	{ +		mCallable(); +	} +private: +	T mCallable; +}; + +template <typename T> +void doOnIdle(T callable) +{ +	OnIdleCallback<T>* cb_functor = new OnIdleCallback<T>(callable); +	gIdleCallbacks.addFunction(&OnIdleCallback<T>::onIdle,cb_functor); +} +  #endif diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index f82d178089..3d7b324458 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -3534,6 +3534,7 @@ void LLAppViewer::idle()  		gEventNotifier.update();  		gIdleCallbacks.callFunctions(); +		gInventory.notifyObservers();  	}  	if (gDisconnected) diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index 958dbf226a..7985ccc2a1 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -237,7 +237,7 @@ void LLBottomTray::setVisible(BOOL visible)  			LLView* viewp = *child_it;  			std::string name = viewp->getName(); -			if ("chat_bar" == name || "movement_panel" == name || "cam_panel" == name || "snapshot_panel" == name) +			if ("chat_bar" == name || "movement_panel" == name || "cam_panel" == name || "snapshot_panel" == name || "gesture_panel" == name)  				continue;  			else   			{ @@ -317,6 +317,10 @@ BOOL LLBottomTray::postBuild()  	// Registering Chat Bar to receive Voice client status change notifications.  	gVoiceClient->addObserver(this); +	mObjectDefaultWidthMap[RS_BUTTON_GESTURES] = mGesturePanel->getRect().getWidth(); +	mObjectDefaultWidthMap[RS_BUTTON_MOVEMENT] = mMovementPanel->getRect().getWidth(); +	mObjectDefaultWidthMap[RS_BUTTON_CAMERA]   = mCamPanel->getRect().getWidth(); +  	return TRUE;  } @@ -402,7 +406,6 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent)  		}  	} -	lldebugs << "There is no enough width to reshape all children: " << extra_shrink_width << llendl;  	if (should_be_reshaped)  	{  		lldebugs << "Reshape all children with width: " << width << llendl; @@ -473,7 +476,12 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)  	S32 buttons_freed_width = 0;  	if (still_should_be_processed)  	{ -		processHideButton(RS_BUTTON_SNAPSHOT, &delta_width, &buttons_freed_width); +		processShrinkButtons(&delta_width); + +		if (delta_width < 0) +		{ +			processHideButton(RS_BUTTON_SNAPSHOT, &delta_width, &buttons_freed_width); +		}  		if (delta_width < 0)  		{ @@ -493,7 +501,7 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)  		if (delta_width < 0)  		{  			extra_shrink_width = -delta_width; -			lldebugs << "There is no enough room for bottom tray, resizing still should be processed: "  +			llwarns << "There is no enough width to reshape all children: "   				<< extra_shrink_width << llendl;  		} @@ -551,7 +559,7 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)  		processShowButton(RS_BUTTON_SNAPSHOT, &available_width, &buttons_required_width);  	} -	// if we have to show some buttons but whidth increasing is not enough... +	// if we have to show some buttons but width increasing is not enough...  	if (buttons_required_width > 0 && delta_width < buttons_required_width)  	{  		// ... let's shrink nearby chat & chiclet panels @@ -587,6 +595,8 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)  	// shown buttons take some space, rest should be processed by nearby chatbar & chiclet panels  	delta_width -= buttons_required_width; +	processExtendButtons(&delta_width); +  	// how many space can nearby chatbar take?  	S32 chatbar_panel_width_ = mNearbyChatBar->getRect().getWidth();  	if (delta_width > 0 && chatbar_panel_width_ < chatbar_panel_max_width) @@ -656,6 +666,119 @@ void LLBottomTray::processHideButton(EResizeState processed_object_type, S32* re  	}  } +void LLBottomTray::processShrinkButtons(S32* required_width) +{ +	processShrinkButton(RS_BUTTON_CAMERA, required_width); + +	if (*required_width < 0) +	{ +		processShrinkButton(RS_BUTTON_MOVEMENT, required_width); +	} +	if (*required_width < 0) +	{ +		processShrinkButton(RS_BUTTON_GESTURES, required_width); +	} +} + +void LLBottomTray::processShrinkButton(EResizeState processed_object_type, /*const std::string& panel_name, */S32* required_width) +{ +	LLPanel* panel = mStateProcessedObjectMap[processed_object_type]; +	if (NULL == panel) +	{ +		lldebugs << "There is no object to process for type: " << processed_object_type << llendl; +		return; +	} + +	if (panel->getVisible()) +	{ +		S32 panel_width = panel->getRect().getWidth(); +		S32 panel_min_width = 0; +		std::string panel_name = panel->getName(); +		bool success = mToolbarStack->getPanelMinSize(panel_name, &panel_min_width, NULL); +		S32 possible_shrink_width = panel_width - panel_min_width; + +		if (!success) +		{ +			lldebugs << "Panel was not found to get its min width: " << panel_name << llendl; +		} +		// we have some space to free by shrinking the button +		else if (possible_shrink_width > 0) +		{ +			// let calculate real width to shrink + +			// 1. apply all possible width +			*required_width += possible_shrink_width; + +			// 2. it it is too much...  +			if (*required_width > 0) +			{ +				// reduce applied shrunk width to the excessive value. +				possible_shrink_width -= *required_width; +				*required_width = 0; +			} +			panel->reshape(panel_width - possible_shrink_width, panel->getRect().getHeight()); + +			lldebugs << "Shrunk panel: " << panel_name +				<< ", shrunk width: " << possible_shrink_width +				<< ", rest width to process: " << *required_width +				<< llendl; +		} +	} +} + + +void LLBottomTray::processExtendButtons(S32* available_width) +{ +	processExtendButton(RS_BUTTON_GESTURES, available_width); + +	if (*available_width > 0) +	{ +		processExtendButton(RS_BUTTON_CAMERA, available_width); +	} +	if (*available_width > 0) +	{ +		processExtendButton(RS_BUTTON_MOVEMENT, available_width); +	} +} + +void LLBottomTray::processExtendButton(EResizeState processed_object_type, S32* available_width) +{ +	LLPanel* panel = mStateProcessedObjectMap[processed_object_type]; +	if (NULL == panel) +	{ +		lldebugs << "There is no object to process for type: " << processed_object_type << llendl; +		return; +	} + +	if (!panel->getVisible()) return; + +	S32 panel_max_width = mObjectDefaultWidthMap[processed_object_type]; +	S32 panel_width = panel->getRect().getWidth(); +	S32 possible_extend_width = panel_max_width - panel_width; + +	if (possible_extend_width > 0) +	{ +		// let calculate real width to extend + +		// 1. apply all possible width +		*available_width -= possible_extend_width; + +		// 2. it it is too much...  +		if (*available_width < 0) +		{ +			// reduce applied extended width to the excessive value. +			possible_extend_width += *available_width; +			*available_width = 0; +		} +		panel->reshape(panel_width + possible_extend_width, panel->getRect().getHeight()); + +		lldebugs << "Extending panel: " << panel->getName() +			<< ", extended width: " << possible_extend_width +			<< ", rest width to process: " << *available_width +			<< llendl; +	} +} +  bool LLBottomTray::canButtonBeShown(EResizeState processed_object_type) const  {  	bool can_be_shown = mResizeState & processed_object_type; diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h index 8989816bfe..97bcc23403 100644 --- a/indra/newview/llbottomtray.h +++ b/indra/newview/llbottomtray.h @@ -98,7 +98,6 @@ private:  		, RS_BUTTON_MOVEMENT	= 0x0010  		, RS_BUTTON_GESTURES	= 0x0020  		, RS_BUTTON_SPEAK		= 0x0040 -		, RS_RESIZABLE_BUTTONS			= /*RS_BUTTON_SNAPSHOT | */RS_BUTTON_CAMERA | RS_BUTTON_MOVEMENT | RS_BUTTON_GESTURES  	}EResizeState;  	S32 processWidthDecreased(S32 delta_width); @@ -108,6 +107,24 @@ private:  	void processHideButton(EResizeState processed_object_type, S32* required_width, S32* buttons_freed_width);  	/** +	 * Shrinks shown buttons to reduce total taken space. +	 * +	 * @param - required_width - width which buttons can use to be shrunk. It is a negative value. +	 * It is increased on the value processed by buttons. +	 */ +	void processShrinkButtons(S32* required_width); +	void processShrinkButton(EResizeState processed_object_type, S32* required_width); + +	/** +	 * Extends shown buttons to increase total taken space. +	 * +	 * @param - available_width - width which buttons can use to be extended. It is a positive value. +	 * It is decreased on the value processed by buttons. +	 */ +	void processExtendButtons(S32* available_width); +	void processExtendButton(EResizeState processed_object_type, S32* available_width); + +	/**  	 * Determines if specified by type object can be shown. It should be hidden by shrink before.  	 *  	 * Processes buttons a such way to show buttons in constant order: @@ -140,6 +157,9 @@ private:  	typedef std::map<EResizeState, LLPanel*> state_object_map_t;  	state_object_map_t mStateProcessedObjectMap; +	typedef std::map<EResizeState, S32> state_object_width_map_t; +	state_object_width_map_t mObjectDefaultWidthMap; +  protected:  	LLBottomTray(const LLSD& key = LLSD()); diff --git a/indra/newview/llcallingcard.h b/indra/newview/llcallingcard.h index bd58b2fbe6..47b0dcb903 100644 --- a/indra/newview/llcallingcard.h +++ b/indra/newview/llcallingcard.h @@ -45,6 +45,7 @@  //class LLInventoryObserver;  class LLMessageSystem;  class LLTrackingData; +  class LLFriendObserver  {  public: diff --git a/indra/newview/llchannelmanager.cpp b/indra/newview/llchannelmanager.cpp index 0aed5549a1..94c303a30f 100644 --- a/indra/newview/llchannelmanager.cpp +++ b/indra/newview/llchannelmanager.cpp @@ -37,7 +37,6 @@  #include "llappviewer.h"  #include "llviewercontrol.h"  #include "llimview.h" -#include "llbottomtray.h"  #include "llviewerwindow.h"  #include "llrootview.h"  #include "llsyswellwindow.h" diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index f9c4a23f12..4ce3b50ed5 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -46,22 +46,9 @@  #include "llfloaterreg.h"  #include "llmutelist.h" -static LLDefaultChildRegistry::Register<LLChatHistory> r("chat_history"); - -std::string formatCurrentTime() -{ -	time_t utc_time; -	utc_time = time_corrected(); -	std::string timeStr ="["+ LLTrans::getString("TimeHour")+"]:[" -		+LLTrans::getString("TimeMin")+"]"; - -	LLSD substitution; +#include "llsidetray.h"//for blocked objects panel -	substitution["datetime"] = (S32) utc_time; -	LLStringUtil::format (timeStr, substitution); - -	return timeStr; -} +static LLDefaultChildRegistry::Register<LLChatHistory> r("chat_history");  class LLChatHistoryHeader: public LLPanel  { @@ -92,6 +79,8 @@ public:  		else if (level == "block")  		{  			LLMuteList::getInstance()->add(LLMute(getAvatarId(), mFrom, LLMute::OBJECT)); + +			LLSideTray::getInstance()->showPanel("panel_block_list_sidetray", LLSD().insert("blocked_to_select", getAvatarId()));  		}  	} @@ -215,7 +204,7 @@ public:  		LLTextBox* timeBox = getChild<LLTextBox>("time_box"); -		timeBox->setValue(formatCurrentTime()); +		timeBox->setValue(chat.mTimeStr);  		LLAvatarIconCtrl* icon = getChild<LLAvatarIconCtrl>("avatar_icon"); @@ -348,7 +337,7 @@ LLView* LLChatHistory::getHeader(const LLChat& chat,const LLStyle::Params& style  void LLChatHistory::appendWidgetMessage(const LLChat& chat, const LLStyle::Params& input_append_params)  {  	LLView* view = NULL; -	std::string view_text = "\n[" + formatCurrentTime() + "] "; +	std::string view_text = "\n[" + chat.mTimeStr + "] ";  	if (utf8str_trim(chat.mFromName).size() != 0 && chat.mFromName != SYSTEM_FROM)  		view_text += chat.mFromName + ": "; diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp index b1dee46d2e..8a6935b71b 100644 --- a/indra/newview/llchatitemscontainerctrl.cpp +++ b/indra/newview/llchatitemscontainerctrl.cpp @@ -175,8 +175,6 @@ void LLNearbyChatToastPanel::init(LLSD& notification)  	caption->getChild<LLTextBox>("sender_name", false)->setText(str_sender , style_params); -	caption->getChild<LLTextBox>("msg_time", false)->setText(appendTime() , style_params ); -  	LLChatMsgBox* msg_text = getChild<LLChatMsgBox>("msg_text", false); @@ -189,8 +187,18 @@ void LLNearbyChatToastPanel::init(LLSD& notification)  			msg_text->setText(mFromName, style_params);  		}  		mText = mText.substr(3); -		style_params.font.style = "UNDERLINE"; +		style_params.font.style = "ITALIC"; +#define INFINITE_REFLOW_BUG 0 +#if INFINITE_REFLOW_BUG +		// This causes LLTextBase::reflow() to infinite loop until the viewer +		// runs out of memory, throws a bad_alloc exception from std::vector +		// in mLineInfoList, and the main loop catches it and continues. +		// It appears to be caused by addText() adding a line separator in the +		// middle of a line.  See EXT-2579, EXT-1949  		msg_text->addText(mText,style_params); +#else +		msg_text->appendText(mText, FALSE, style_params); +#endif  	}  	else   	{ diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index 4078fac4ec..caf6917d90 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -81,27 +81,17 @@ LLNotificationChiclet::Params::Params()  	button.tab_stop(FALSE);  	button.label(LLStringUtil::null); -	unread_notifications.name("unread"); -	unread_notifications.font(LLFontGL::getFontSansSerif()); -	unread_notifications.text_color=(LLColor4::white); -	unread_notifications.font_halign(LLFontGL::HCENTER); -	unread_notifications.mouse_opaque(FALSE);  }  LLNotificationChiclet::LLNotificationChiclet(const Params& p)  : LLChiclet(p)  , mButton(NULL) -, mCounterCtrl(NULL) +, mCounter(0)  {  	LLButton::Params button_params = p.button; -	button_params.rect(p.rect());  	mButton = LLUICtrlFactory::create<LLButton>(button_params);  	addChild(mButton); - 	LLChicletNotificationCounterCtrl::Params unread_params = p.unread_notifications; -	mCounterCtrl = LLUICtrlFactory::create<LLChicletNotificationCounterCtrl>(unread_params); -	addChild(mCounterCtrl); -  	// connect counter handlers to the signals  	connectCounterUpdatersToSignal("notify");  	connectCounterUpdatersToSignal("groupnotify"); @@ -126,13 +116,15 @@ void LLNotificationChiclet::connectCounterUpdatersToSignal(std::string notificat  void LLNotificationChiclet::setCounter(S32 counter)  { -	mCounterCtrl->setCounter(counter); -} +	std::string s_count; +	if(counter != 0) +	{ +		s_count = llformat("%d", counter); +	} -void LLNotificationChiclet::setShowCounter(bool show) -{ -	LLChiclet::setShowCounter(show); -	mCounterCtrl->setVisible(getShowCounter()); +	mButton->setLabel(s_count); + +	mCounter = counter;  }  boost::signals2::connection LLNotificationChiclet::setClickCallback( diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h index eab4a282f5..bb5dc1e550 100644 --- a/indra/newview/llchiclet.h +++ b/indra/newview/llchiclet.h @@ -638,13 +638,14 @@ public:  	/*virtual*/ void setCounter(S32 counter); -	/*virtual*/S32 getCounter() { return mCounterCtrl->getCounter(); } - -	/*virtual*/ void setShowCounter(bool show); +	// *TODO: mantipov: seems getCounter is not necessary for LLNotificationChiclet +	// but inherited interface requires it to implement.  +	// Probably it can be safe removed. +	/*virtual*/S32 getCounter() { return mCounter; }  	boost::signals2::connection setClickCallback(const commit_callback_t& cb); -	/*virtual*/ ~ LLNotificationChiclet(); +	/*virtual*/ ~LLNotificationChiclet();  	// methods for updating a number of unread System notifications  	void incUreadSystemNotifications() { setCounter(++mUreadSystemNotifications); } @@ -662,7 +663,7 @@ protected:  protected:  	LLButton* mButton; -	LLChicletNotificationCounterCtrl* mCounterCtrl; +	S32 mCounter;  };  /* diff --git a/indra/newview/llfloatergesture.cpp b/indra/newview/llfloatergesture.cpp index 854d02873a..af86274472 100644 --- a/indra/newview/llfloatergesture.cpp +++ b/indra/newview/llfloatergesture.cpp @@ -161,6 +161,7 @@ BOOL LLFloaterGesture::postBuild()  	getChild<LLUICtrl>("play_btn")->setCommitCallback(boost::bind(&LLFloaterGesture::onClickPlay, this));  	getChild<LLUICtrl>("stop_btn")->setCommitCallback(boost::bind(&LLFloaterGesture::onClickPlay, this)); +	getChild<LLButton>("activate_btn")->setClickedCallback(boost::bind(&LLFloaterGesture::onActivateBtnClick, this));  	getChild<LLUICtrl>("new_gesture_btn")->setCommitCallback(boost::bind(&LLFloaterGesture::onClickNew, this)); @@ -179,7 +180,7 @@ BOOL LLFloaterGesture::postBuild()  	childSetFocus("gesture_list"); -	LLCtrlListInterface *list = childGetListInterface("gesture_list"); +	LLCtrlListInterface *list = getGestureList();  	if (list)  	{  		const BOOL ascending = TRUE; @@ -198,7 +199,7 @@ void LLFloaterGesture::refreshAll()  {  	buildGestureList(); -	LLCtrlListInterface *list = childGetListInterface("gesture_list"); +	LLCtrlListInterface *list = getGestureList();  	if (!list) return;  	if (mSelectedID.isNull()) @@ -219,7 +220,7 @@ void LLFloaterGesture::refreshAll()  void LLFloaterGesture::buildGestureList()  { -	LLCtrlListInterface *list = childGetListInterface("gesture_list"); +	LLCtrlListInterface *list = getGestureList();  	LLCtrlScrollInterface *scroll = childGetScrollInterface("gesture_list");  	if (! (list && scroll)) return; @@ -347,7 +348,7 @@ void LLFloaterGesture::addGesture(const LLUUID& item_id , LLMultiGesture* gestur  void LLFloaterGesture::onClickInventory()  { -	LLCtrlListInterface *list = childGetListInterface("gesture_list"); +	LLCtrlListInterface *list = getGestureList();  	if (!list) return;  	const LLUUID& item_id = list->getCurrentID(); @@ -358,7 +359,7 @@ void LLFloaterGesture::onClickInventory()  void LLFloaterGesture::onClickPlay()  { -	LLCtrlListInterface *list = childGetListInterface("gesture_list"); +	LLCtrlListInterface *list = getGestureList();  	if (!list) return;  	const LLUUID& item_id = list->getCurrentID();  	if(item_id.isNull()) return; @@ -396,10 +397,27 @@ void LLFloaterGesture::onClickNew()  		LLInventoryType::IT_GESTURE, NOT_WEARABLE, PERM_MOVE | PERM_TRANSFER, cb);  } +void LLFloaterGesture::onActivateBtnClick() +{ +	LLCtrlListInterface* list = getGestureList(); +	 +	LLUUID gesture_inv_id = list->getSelectedValue(); +	LLGestureManager* gm = LLGestureManager::getInstance(); +	 +	if(gm->isGestureActive(gesture_inv_id)) +	{ +		gm->deactivateGesture(gesture_inv_id); +	} +	else +	{ +		gm->activateGesture(gesture_inv_id); +	} +} +  void LLFloaterGesture::onClickEdit()  { -	LLCtrlListInterface *list = childGetListInterface("gesture_list"); +	LLCtrlListInterface *list = getGestureList();  	if (!list) return;  	const LLUUID& item_id = list->getCurrentID(); diff --git a/indra/newview/llfloatergesture.h b/indra/newview/llfloatergesture.h index e7819d2a03..50bef818da 100644 --- a/indra/newview/llfloatergesture.h +++ b/indra/newview/llfloatergesture.h @@ -77,7 +77,11 @@ protected:  	void onClickNew();  	void onCommitList();  	void playGesture(LLUUID item_id); - +	LLCtrlListInterface* getGestureList() const  +	{ +		return childGetListInterface("gesture_list"); +	} +	void onActivateBtnClick();  protected:  	LLUUID mSelectedID;  	LLUUID mGestureFolderID; diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp index 3613ac803e..a1c6704657 100644 --- a/indra/newview/llfloateruipreview.cpp +++ b/indra/newview/llfloateruipreview.cpp @@ -431,9 +431,9 @@ BOOL LLFloaterUIPreview::postBuild()  	// get pointers to buttons and link to callbacks  	mLanguageSelection = main_panel_tmp->getChild<LLComboBox>("language_select_combo"); -	mLanguageSelection->setSelectionCallback(boost::bind(&LLFloaterUIPreview::onLanguageComboSelect, this, mLanguageSelection)); +	mLanguageSelection->setCommitCallback(boost::bind(&LLFloaterUIPreview::onLanguageComboSelect, this, mLanguageSelection));  	mLanguageSelection_2 = main_panel_tmp->getChild<LLComboBox>("language_select_combo_2"); -	mLanguageSelection_2->setSelectionCallback(boost::bind(&LLFloaterUIPreview::onLanguageComboSelect, this, mLanguageSelection)); +	mLanguageSelection_2->setCommitCallback(boost::bind(&LLFloaterUIPreview::onLanguageComboSelect, this, mLanguageSelection));  	LLPanel* editor_panel_tmp = main_panel_tmp->getChild<LLPanel>("editor_panel");  	mDisplayFloaterBtn = main_panel_tmp->getChild<LLButton>("display_floater");  	mDisplayFloaterBtn->setClickedCallback(boost::bind(&LLFloaterUIPreview::onClickDisplayFloater, this, PRIMARY_FLOATER)); diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp index d39a17ca3b..7323c421da 100644 --- a/indra/newview/llfolderviewitem.cpp +++ b/indra/newview/llfolderviewitem.cpp @@ -133,8 +133,8 @@ LLFolderViewItem::LLFolderViewItem(LLFolderViewItem::Params p)  	mIconOpen(p.icon_open),  	mListener(p.listener),  	mArrowImage(p.folder_arrow_image), -	mBoxImage(p.selection_image) -,	mDontShowInHierarhy(false) +	mBoxImage(p.selection_image), +	mDontShowInHierarchy(false)  {  	refresh();  } @@ -411,7 +411,7 @@ S32 LLFolderViewItem::arrange( S32* width, S32* height, S32 filter_generation)  S32 LLFolderViewItem::getItemHeight()  { -	if (mDontShowInHierarhy) return 0; +	if (mDontShowInHierarchy) return 0;  	S32 icon_height = mIcon->getHeight();  	S32 label_height = llround(getLabelFontForStyle(mLabelStyle)->getLineHeight()); @@ -819,7 +819,7 @@ BOOL LLFolderViewItem::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,  void LLFolderViewItem::draw()  { -	if (mDontShowInHierarhy) return; +	if (mDontShowInHierarchy) return;  	static LLUIColor sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", DEFAULT_WHITE);  	static LLUIColor sHighlightBgColor = LLUIColorTable::instance().getColor("MenuItemHighlightBgColor", DEFAULT_WHITE); @@ -995,14 +995,14 @@ void LLFolderViewItem::draw()  				S32 right = left + font->getWidth(combined_string, mStringMatchOffset, filter_string_length) + 2;  				S32 bottom = llfloor(getRect().getHeight() - font->getLineHeight() - 3);  				S32 top = getRect().getHeight(); - +				  				LLRect box_rect(left, top, right, bottom);  				sBoxImage->draw(box_rect, sFilterBGColor);  				F32 match_string_left = text_left + font->getWidthF32(combined_string, 0, mStringMatchOffset);  				F32 y = (F32)getRect().getHeight() - font->getLineHeight() - (F32)TEXT_PAD;  				font->renderUTF8( combined_string, mStringMatchOffset, match_string_left, y, -						   sFilterTextColor, LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, -					filter_string_length, S32_MAX, &right_x, FALSE ); +								  sFilterTextColor, LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, +								  filter_string_length, S32_MAX, &right_x, FALSE );  			}  		}  	} @@ -1253,6 +1253,10 @@ void LLFolderViewFolder::filter( LLInventoryFilter& filter)  			// filter self only on first pass through  			LLFolderViewItem::filter( filter );  		} +		if (mDontShowInHierarchy) +		{ +			setOpen(); +		}  	}  	if (getRoot()->getDebugFilters()) @@ -2166,6 +2170,7 @@ BOOL LLFolderViewFolder::handleMouseDown( S32 x, S32 y, MASK mask )  BOOL LLFolderViewFolder::handleDoubleClick( S32 x, S32 y, MASK mask )  { +	/* Disable outfit double click to wear  	const LLUUID &cat_uuid = getListener()->getUUID();  	const LLViewerInventoryCategory *cat = gInventory.getCategory(cat_uuid);  	if (cat && cat->getPreferredType() == LLFolderType::FT_OUTFIT) @@ -2173,6 +2178,7 @@ BOOL LLFolderViewFolder::handleDoubleClick( S32 x, S32 y, MASK mask )  		getListener()->performAction(NULL, NULL,"replaceoutfit");  		return TRUE;  	} +	*/  	BOOL handled = FALSE;  	if( mIsOpen ) diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h index 7c429fc76e..30387812a6 100644 --- a/indra/newview/llfolderviewitem.h +++ b/indra/newview/llfolderviewitem.h @@ -158,7 +158,7 @@ protected:  	LLUIImagePtr				mBoxImage;  	BOOL                            mIsLoading;  	LLTimer                         mTimeSinceRequestStart; -	bool						mDontShowInHierarhy; +	bool						mDontShowInHierarchy;  	// helper function to change the selection from the root.  	void changeSelectionFromRoot(LLFolderViewItem* selection, BOOL selected); @@ -201,8 +201,8 @@ public:  	// makes sure that this view and it's children are the right size.  	virtual S32 arrange( S32* width, S32* height, S32 filter_generation );  	virtual S32 getItemHeight(); -	void setDontShowInHierarchy(bool dont_show) { mDontShowInHierarhy = dont_show; } -	bool getDontShowInHierarchy() { return mDontShowInHierarhy; } +	void setDontShowInHierarchy(bool dont_show) { mDontShowInHierarchy = dont_show; } +	bool getDontShowInHierarchy() { return mDontShowInHierarchy; }  	// applies filters to control visibility of inventory items  	virtual void filter( LLInventoryFilter& filter); @@ -343,7 +343,7 @@ typedef bool (*sort_order_f)(LLFolderViewItem* a, LLFolderViewItem* b);  //  // An instance of an LLFolderViewFolder represents a collection of  // more folders and items. This is used to build the hierarchy of -// items found in the folder view. :) +// items found in the folder view.  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  class LLFolderViewFolder : public LLFolderViewItem diff --git a/indra/newview/llgesturemgr.cpp b/indra/newview/llgesturemgr.cpp index 8e774dc199..d85ac477e1 100644 --- a/indra/newview/llgesturemgr.cpp +++ b/indra/newview/llgesturemgr.cpp @@ -60,6 +60,9 @@  // Longest time, in seconds, to wait for all animations to stop playing  const F32 MAX_WAIT_ANIM_SECS = 30.f; +// If this gesture is a link, get the base gesture that this link points to, +// otherwise just return this id. +static const LLUUID& get_linked_uuid(const LLUUID& item_id);  // Lightweight constructor.  // init() does the heavy lifting. @@ -213,6 +216,8 @@ void LLGestureManager::activateGestureWithAsset(const LLUUID& item_id,  												BOOL inform_server,  												BOOL deactivate_similar)  { +	const LLUUID& base_item_id = get_linked_uuid(item_id); +  	if( !gAssetStorage )  	{  		llwarns << "LLGestureManager::activateGestureWithAsset without valid gAssetStorage" << llendl; @@ -233,13 +238,13 @@ void LLGestureManager::activateGestureWithAsset(const LLUUID& item_id,  	// For now, put NULL into the item map.  We'll build a gesture  	// class object when the asset data arrives. -	mActive[item_id] = NULL; +	mActive[base_item_id] = NULL;  	// Copy the UUID  	if (asset_id.notNull())  	{  		LLLoadInfo* info = new LLLoadInfo; -		info->mItemID = item_id; +		info->mItemID = base_item_id;  		info->mInformServer = inform_server;  		info->mDeactivateSimilar = deactivate_similar; @@ -259,7 +264,8 @@ void LLGestureManager::activateGestureWithAsset(const LLUUID& item_id,  void LLGestureManager::deactivateGesture(const LLUUID& item_id)  { -	item_map_t::iterator it = mActive.find(item_id); +	const LLUUID& base_item_id = get_linked_uuid(item_id); +	item_map_t::iterator it = mActive.find(base_item_id);  	if (it == mActive.end())  	{  		llwarns << "deactivateGesture for inactive gesture " << item_id << llendl; @@ -279,7 +285,7 @@ void LLGestureManager::deactivateGesture(const LLUUID& item_id)  	}  	mActive.erase(it); -	gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); +	gInventory.addChangedMask(LLInventoryObserver::LABEL, base_item_id);  	// Inform the database of this change  	LLMessageSystem* msg = gMessageSystem; @@ -301,6 +307,7 @@ void LLGestureManager::deactivateGesture(const LLUUID& item_id)  void LLGestureManager::deactivateSimilarGestures(LLMultiGesture* in, const LLUUID& in_item_id)  { +	const LLUUID& base_in_item_id = get_linked_uuid(in_item_id);  	std::vector<LLUUID> gest_item_ids;  	// Deactivate all gestures that match @@ -312,7 +319,7 @@ void LLGestureManager::deactivateSimilarGestures(LLMultiGesture* in, const LLUUI  		// Don't deactivate the gesture we are looking for duplicates of  		// (for replaceGesture) -		if (!gest || item_id == in_item_id)  +		if (!gest || item_id == base_in_item_id)   		{  			// legal, can have null pointers in list  			++it; @@ -387,14 +394,17 @@ void LLGestureManager::deactivateSimilarGestures(LLMultiGesture* in, const LLUUI  BOOL LLGestureManager::isGestureActive(const LLUUID& item_id)  { -	item_map_t::iterator it = mActive.find(item_id); +	const LLUUID& base_item_id = get_linked_uuid(item_id); +	item_map_t::iterator it = mActive.find(base_item_id);  	return (it != mActive.end());  }  BOOL LLGestureManager::isGesturePlaying(const LLUUID& item_id)  { -	item_map_t::iterator it = mActive.find(item_id); +	const LLUUID& base_item_id = get_linked_uuid(item_id); + +	item_map_t::iterator it = mActive.find(base_item_id);  	if (it == mActive.end()) return FALSE;  	LLMultiGesture* gesture = (*it).second; @@ -405,19 +415,21 @@ BOOL LLGestureManager::isGesturePlaying(const LLUUID& item_id)  void LLGestureManager::replaceGesture(const LLUUID& item_id, LLMultiGesture* new_gesture, const LLUUID& asset_id)  { -	item_map_t::iterator it = mActive.find(item_id); +	const LLUUID& base_item_id = get_linked_uuid(item_id); + +	item_map_t::iterator it = mActive.find(base_item_id);  	if (it == mActive.end())  	{ -		llwarns << "replaceGesture for inactive gesture " << item_id << llendl; +		llwarns << "replaceGesture for inactive gesture " << base_item_id << llendl;  		return;  	}  	LLMultiGesture* old_gesture = (*it).second;  	stopGesture(old_gesture); -	mActive.erase(item_id); +	mActive.erase(base_item_id); -	mActive[item_id] = new_gesture; +	mActive[base_item_id] = new_gesture;  	delete old_gesture;  	old_gesture = NULL; @@ -428,7 +440,7 @@ void LLGestureManager::replaceGesture(const LLUUID& item_id, LLMultiGesture* new  		mDeactivateSimilarNames.clear();  		LLLoadInfo* info = new LLLoadInfo; -		info->mItemID = item_id; +		info->mItemID = base_item_id;  		info->mInformServer = TRUE;  		info->mDeactivateSimilar = FALSE; @@ -445,16 +457,18 @@ void LLGestureManager::replaceGesture(const LLUUID& item_id, LLMultiGesture* new  void LLGestureManager::replaceGesture(const LLUUID& item_id, const LLUUID& new_asset_id)  { -	item_map_t::iterator it = LLGestureManager::instance().mActive.find(item_id); +	const LLUUID& base_item_id = get_linked_uuid(item_id); + +	item_map_t::iterator it = LLGestureManager::instance().mActive.find(base_item_id);  	if (it == mActive.end())  	{ -		llwarns << "replaceGesture for inactive gesture " << item_id << llendl; +		llwarns << "replaceGesture for inactive gesture " << base_item_id << llendl;  		return;  	}  	// mActive owns this gesture pointer, so clean up memory.  	LLMultiGesture* gesture = (*it).second; -	LLGestureManager::instance().replaceGesture(item_id, gesture, new_asset_id); +	LLGestureManager::instance().replaceGesture(base_item_id, gesture, new_asset_id);  }  void LLGestureManager::playGesture(LLMultiGesture* gesture) @@ -478,7 +492,9 @@ void LLGestureManager::playGesture(LLMultiGesture* gesture)  // Convenience function that looks up the item_id for you.  void LLGestureManager::playGesture(const LLUUID& item_id)  { -	item_map_t::iterator it = mActive.find(item_id); +	const LLUUID& base_item_id = get_linked_uuid(item_id); + +	item_map_t::iterator it = mActive.find(base_item_id);  	if (it == mActive.end()) return;  	LLMultiGesture* gesture = (*it).second; @@ -1074,7 +1090,9 @@ void LLGestureManager::stopGesture(LLMultiGesture* gesture)  void LLGestureManager::stopGesture(const LLUUID& item_id)  { -	item_map_t::iterator it = mActive.find(item_id); +	const LLUUID& base_item_id = get_linked_uuid(item_id); + +	item_map_t::iterator it = mActive.find(base_item_id);  	if (it == mActive.end()) return;  	LLMultiGesture* gesture = (*it).second; @@ -1171,3 +1189,15 @@ void LLGestureManager::done()  	}  	notifyObservers();  } + +// static +const LLUUID& get_linked_uuid(const LLUUID &item_id) +{ +	LLViewerInventoryItem* item = gInventory.getItem(item_id); +	if (item && item->getIsLinkType()) +	{ +		return item->getLinkedUUID(); +	} +	return item_id; +} + diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index 2c38802d59..dbbf98ad08 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -367,8 +367,6 @@ void LLIMFloater::setDocked(bool docked, bool pop_on_undock)  	LLNotificationsUI::LLScreenChannel* channel = dynamic_cast<LLNotificationsUI::LLScreenChannel*>  		(LLNotificationsUI::LLChannelManager::getInstance()->  											findChannelByID(LLUUID(gSavedSettings.getString("NotificationChannelUUID")))); - -	setCanResize(!docked);  	LLTransientDockableFloater::setDocked(docked, pop_on_undock); @@ -476,6 +474,7 @@ void LLIMFloater::updateMessages()  			chat.mFromID = from_id;  			chat.mFromName = from;  			chat.mText = message; +			chat.mTimeStr = time;  			//Handle IRC styled /me messages.  			std::string prefix = message.substr(0, 4); @@ -496,12 +495,12 @@ void LLIMFloater::updateMessages()  				if (from.size() > 0)  				{  					append_style_params.font.style = "ITALIC"; -					chat.mText = from + " "; +					chat.mText = from;  					mChatHistory->appendWidgetMessage(chat, append_style_params);  				}  				message = message.substr(3); -				append_style_params.font.style = "UNDERLINE"; +				append_style_params.font.style = "ITALIC";  				mChatHistory->appendText(message, FALSE, append_style_params);  			}  			else diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h index 065441b188..e2d500d821 100644 --- a/indra/newview/llimfloater.h +++ b/indra/newview/llimfloater.h @@ -63,7 +63,6 @@ public:  	// LLFloater overrides  	/*virtual*/ void onClose(bool app_quitting);  	/*virtual*/ void setDocked(bool docked, bool pop_on_undock = true); -	// override LLFloater's minimization according to EXT-1216  	// Make IM conversion visible and update the message history  	static LLIMFloater* show(const LLUUID& session_id); diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index ab8cc0bad7..ad80e7ed61 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -49,6 +49,7 @@  #include "llbottomtray.h"
  #include "llcallingcard.h"
  #include "llchat.h"
 +#include "llchiclet.h"
  #include "llresmgr.h"
  #include "llfloaterchat.h"
  #include "llfloaterchatterbox.h"
 diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp index 8dc7833f6a..baddd90d46 100644 --- a/indra/newview/llinspectavatar.cpp +++ b/indra/newview/llinspectavatar.cpp @@ -117,6 +117,9 @@ private:  	bool onVisibleZoomIn();  	void onClickMuteVolume();  	void onVolumeChange(const LLSD& data); + +	// Is used to determine if "Add friend" option should be enabled in gear menu +	bool isNotFriend();  	// Callback for gCacheName to look up avatar name  	void nameUpdatedCallback( @@ -208,6 +211,7 @@ LLInspectAvatar::LLInspectAvatar(const LLSD& sd)  		boost::bind(&LLInspectAvatar::onVisibleFreezeEject, this));	  	mVisibleCallbackRegistrar.add("InspectAvatar.VisibleZoomIn",   		boost::bind(&LLInspectAvatar::onVisibleZoomIn, this)); +	mEnableCallbackRegistrar.add("InspectAvatar.Gear.Enable", boost::bind(&LLInspectAvatar::isNotFriend, this));  	// can't make the properties request until the widgets are constructed  	// as it might return immediately, so do it in postBuild. @@ -473,6 +477,11 @@ void LLInspectAvatar::onClickViewProfile()  	closeFloater();  } +bool LLInspectAvatar::isNotFriend() +{ +	return !LLAvatarActions::isFriend(mAvatarID); +} +  bool LLInspectAvatar::onVisibleFindOnMap()  {  	return gAgent.isGodlike() || is_agent_mappable(mAvatarID); diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index d18f9affe3..173f2634aa 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -31,73 +31,37 @@   */
  #include "llviewerprecompiledheaders.h"
 -
 -#include <utility> // for std::pair<>
 -
 -#include "llfloaterinventory.h"
  #include "llinventorybridge.h"
 -#include "message.h"
 -
  #include "llagent.h"
  #include "llagentwearables.h"
 -#include "llcallingcard.h"
 -#include "llcheckboxctrl.h"		// for radio buttons
 -#include "llfloaterreg.h"
 -#include "llradiogroup.h"
 -#include "llspinctrl.h"
 -#include "lltextbox.h"
 -#include "llui.h"
 -
 -#include "llviewercontrol.h"
 -#include "llfirstuse.h"
 -#include "llfoldertype.h"
 -#include "llfloaterchat.h"
 +#include "llappearancemgr.h"
 +#include "llavataractions.h"
  #include "llfloatercustomize.h"
 -#include "llfloaterproperties.h"
 +#include "llfloaterinventory.h"
 +#include "llfloateropenobject.h"
 +#include "llfloaterreg.h"
  #include "llfloaterworldmap.h"
 -#include "llfocusmgr.h"
 -#include "llfolderview.h"
  #include "llfriendcard.h"
 -#include "llavataractions.h"
  #include "llgesturemgr.h"
 -#include "lliconctrl.h"
 +#include "llimfloater.h"
 +#include "llimview.h"
 +#include "llinventoryclipboard.h"
  #include "llinventoryfunctions.h"
  #include "llinventorymodel.h"
  #include "llinventorypanel.h"
 -#include "llinventoryclipboard.h"
 -#include "lllineeditor.h"
 -#include "llmenugl.h"
  #include "llpreviewanim.h"
  #include "llpreviewgesture.h"
 -#include "llpreviewnotecard.h"
 -#include "llpreviewscript.h"
 -#include "llpreviewsound.h"
  #include "llpreviewtexture.h"
 -#include "llresmgr.h"
 -#include "llscrollcontainer.h"
 -#include "llimview.h"
 -#include "lltooldraganddrop.h"
 -#include "llviewerfoldertype.h"
 -#include "llviewertexturelist.h"
 -#include "llviewerinventory.h"
 -#include "llviewerobjectlist.h"
 -#include "llviewerwindow.h"
 -#include "llvoavatar.h"
 -#include "llwearable.h"
 -#include "llwearablelist.h"
 -#include "llviewerassettype.h"
 -#include "llviewermessage.h"
 -#include "llviewerregion.h"
 -#include "llvoavatarself.h"
 -#include "lltabcontainer.h"
 -#include "lluictrlfactory.h"
  #include "llselectmgr.h"
  #include "llsidetray.h"
 -#include "llfloateropenobject.h"
  #include "lltrans.h"
 -#include "llappearancemgr.h"
 -#include "llimfloater.h"
 +#include "llviewerassettype.h"
 +#include "llviewermessage.h"
 +#include "llviewerobjectlist.h"
 +#include "llviewerwindow.h"
 +#include "llvoavatarself.h"
 +#include "llwearablelist.h"
  using namespace LLOldEvents;
 @@ -162,16 +126,6 @@ std::string ICON_NAME[ICON_NAME_COUNT] =  	"inv_item_linkfolder.tga"
  };
 -
 -// +=================================================+
 -// |        LLInventoryPanelObserver                 |
 -// +=================================================+
 -void LLInventoryPanelObserver::changed(U32 mask)
 -{
 -	mIP->modelChanged(mask);
 -}
 -
 -
  // +=================================================+
  // |        LLInvFVBridge                            |
  // +=================================================+
 @@ -229,37 +183,6 @@ BOOL LLInvFVBridge::isItemRemovable()  	return FALSE;
  }
 -// Sends an update to all link items that point to the base item.
 -void LLInvFVBridge::renameLinkedItems(const LLUUID &item_id, const std::string& new_name)
 -{
 -	LLInventoryModel* model = getInventoryModel();
 -	if(!model) return;
 -
 -	LLInventoryItem* itemp = model->getItem(mUUID);
 -	if (!itemp) return;
 -
 -	if (itemp->getIsLinkType())
 -	{
 -		return;
 -	}
 -
 -	LLInventoryModel::item_array_t item_array = model->collectLinkedItems(item_id);
 -	for (LLInventoryModel::item_array_t::iterator iter = item_array.begin();
 -		 iter != item_array.end();
 -		 iter++)
 -	{
 -		LLViewerInventoryItem *linked_item = (*iter);
 -		if (linked_item->getUUID() == item_id) continue;
 -
 -		LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(linked_item);
 -		new_item->rename(new_name);
 -		new_item->updateServer(FALSE);
 -		model->updateItem(new_item);
 -		// model->addChangedMask(LLInventoryObserver::LABEL, linked_item->getUUID());
 -	}
 -	model->notifyObservers();
 -}
 -
  // Can be moved to another folder
  BOOL LLInvFVBridge::isItemMovable() const
  {
 @@ -1682,6 +1605,25 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,  			// if target is an outfit or current outfit folder we use link
  			if (move_is_into_current_outfit || move_is_into_outfit)
  			{
 +				if (inv_cat->getPreferredType() == LLFolderType::FT_NONE)
 +				{
 +					if (move_is_into_current_outfit)
 +					{
 +						// traverse category and add all contents to currently worn.
 +						BOOL append = true;
 +						LLAppearanceManager::instance().wearInventoryCategory(inv_cat, false, append);
 +					}
 +					else
 +					{
 +						// Recursively create links in target outfit.
 +						LLInventoryModel::cat_array_t cats;
 +						LLInventoryModel::item_array_t items;
 +						gInventory.collectDescendents(inv_cat->getUUID(), cats, items, LLInventoryModel::EXCLUDE_TRASH);
 +						LLAppearanceManager::instance().linkAll(mUUID,items,NULL);
 +					}
 +				}
 +				else
 +				{
  #if SUPPORT_ENSEMBLES
  				// BAP - should skip if dup.
  				if (move_is_into_current_outfit)
 @@ -1700,6 +1642,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,  						cb);
  				}
  #endif
 +				}
  			}
  			else
  			{
 @@ -2888,9 +2831,11 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,  		}
  		const LLUUID& favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
 -
 +		const LLUUID& landmarks_id = model->findCategoryUUIDForType(LLFolderType::FT_LANDMARK);
 +		const BOOL folder_allows_reorder = ((mUUID == landmarks_id) || (mUUID == favorites_id));
 +	   
  		// we can move item inside a folder only if this folder is Favorites. See EXT-719
 -		accept = is_movable && ((mUUID != inv_item->getParentUUID()) || (mUUID == favorites_id));
 +		accept = is_movable && ((mUUID != inv_item->getParentUUID()) || folder_allows_reorder);
  		if(accept && drop)
  		{
  			if (inv_item->getType() == LLAssetType::AT_GESTURE
 @@ -2913,12 +2858,12 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,  			}
  			// if dragging from/into favorites folder only reorder items
 -			if ((mUUID == inv_item->getParentUUID()) && (favorites_id == mUUID))
 +			if ((mUUID == inv_item->getParentUUID()) && folder_allows_reorder)
  			{
  				LLInventoryModel::cat_array_t cats;
  				LLInventoryModel::item_array_t items;
  				LLIsType is_type(LLAssetType::AT_LANDMARK);
 -				model->collectDescendentsIf(favorites_id, cats, items, LLInventoryModel::EXCLUDE_TRASH, is_type);
 +				model->collectDescendentsIf(mUUID, cats, items, LLInventoryModel::EXCLUDE_TRASH, is_type);
  				LLInventoryPanel* panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
  				LLFolderViewItem* itemp = panel ? panel->getRootFolder()->getDraggingOverItem() : NULL;
 @@ -2948,7 +2893,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,  				// BAP - should skip if dup.
  				if (move_is_into_current_outfit)
  				{
 -					LLAppearanceManager::instance().addItemLink(inv_item);
 +					LLAppearanceManager::instance().addCOFItemLink(inv_item);
  				}
  				else
  				{
 @@ -3713,6 +3658,11 @@ void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  	}
  	else
  	{
 +		LLInventoryItem* item = getItem();
 +		if (item && item->getIsLinkType())
 +		{
 +			items.push_back(std::string("Find Original"));
 +		}
  		items.push_back(std::string("Open"));
  		items.push_back(std::string("Properties"));
 @@ -3938,6 +3888,7 @@ std::string LLObjectBridge::getLabelSuffix() const  	{
  		std::string attachment_point_name = avatar->getAttachedPointName(mUUID);
 +		// e.g. "(worn on ...)" / "(attached to ...)"
  		LLStringUtil::format_map_t args;
  		args["[ATTACHMENT_POINT]"] =  attachment_point_name.c_str();
  		return LLItemBridge::getLabelSuffix() + LLTrans::getString("WornOnAttachmentPoint", args);
 @@ -4195,7 +4146,7 @@ void wear_inventory_item_on_avatar( LLInventoryItem* item )  		lldebugs << "wear_inventory_item_on_avatar( " << item->getName()
  				 << " )" << llendl;
 -		LLAppearanceManager::instance().addItemLink(item);
 +		LLAppearanceManager::instance().addCOFItemLink(item);
  	}
  }
 @@ -4352,6 +4303,7 @@ std::string LLWearableBridge::getLabelSuffix() const  {
  	if( gAgentWearables.isWearingItem( mUUID ) )
  	{
 +		// e.g. "(worn)" 
  		return LLItemBridge::getLabelSuffix() + LLTrans::getString("worn");
  	}
  	else
 diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index 4c7b0a0517..49e64ebdde 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -107,22 +107,6 @@ struct LLAttachmentRezAction  	S32		mAttachPt;  }; - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Class LLInventoryPanelObserver -// -// Bridge to support knowing when the inventory has changed. -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -class LLInventoryPanelObserver : public LLInventoryObserver -{ -public: -	LLInventoryPanelObserver(LLInventoryPanel* ip) : mIP(ip) {} -	virtual ~LLInventoryPanelObserver() {} -	virtual void changed(U32 mask); -protected: -	LLInventoryPanel* mIP; -}; -  const std::string safe_inv_type_lookup(LLInventoryType::EType inv_type);  void hide_context_entries(LLMenuGL& menu,   						const std::vector<std::string> &entries_to_show, @@ -220,8 +204,6 @@ protected:  									 const LLUUID& new_parent,  									 BOOL restamp);  	void removeBatchNoCheck(LLDynamicArray<LLFolderViewEventListener*>& batch); -	void renameLinkedItems(const LLUUID &item_id, const std::string& new_name); -  protected:  	LLHandle<LLPanel> mInventoryPanel;  	const LLUUID mUUID;	// item id diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp index 7ec8d3d003..085c96c93d 100644 --- a/indra/newview/llinventoryfilter.cpp +++ b/indra/newview/llinventoryfilter.cpp @@ -100,13 +100,18 @@ BOOL LLInventoryFilter::check(LLFolderViewItem* item)  	bool passed_type = false;  	if (mFilterOps.mFilterForCategories)  	{ -		if (listener->getInventoryType() == LLInventoryType::IT_CATEGORY) +		// Pass if this item is a category of the filter type, or +		// if its parent is a category of the filter type. +		LLUUID uuid = listener->getUUID(); +		if (listener->getInventoryType() != LLInventoryType::IT_CATEGORY)  		{ -			LLViewerInventoryCategory *cat = gInventory.getCategory(listener->getUUID()); -			if (cat) -			{ -				passed_type |= ((1LL << cat->getPreferredType() & mFilterOps.mFilterTypes) != U64(0)); -			} +			const LLInventoryObject *obj = gInventory.getObject(uuid); +			uuid = obj->getParentUUID(); +		} +		LLViewerInventoryCategory *cat = gInventory.getCategory(uuid); +		if (cat) +		{ +			passed_type |= ((1LL << cat->getPreferredType() & mFilterOps.mFilterTypes) != U64(0));  		}  	}  	else diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h index 95cc68ddbe..efd40576a7 100644 --- a/indra/newview/llinventoryfunctions.h +++ b/indra/newview/llinventoryfunctions.h @@ -1,136 +1,136 @@ -/**  - * @file llinventoryfunctions.h - * @brief Miscellaneous inventory-related functions and classes - * class definition - * - * $LicenseInfo:firstyear=2001&license=viewergpl$ - *  - * Copyright (c) 2001-2009, Linden Research, Inc. - *  - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab.  Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 - *  - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at - * http://secondlifegrid.net/programs/open_source/licensing/flossexception - *  - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - *  - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ - */ - -#ifndef LL_LLINVENTORYFUNCTIONS_H -#define LL_LLINVENTORYFUNCTIONS_H - -#include "llassetstorage.h" -#include "lldarray.h" -#include "llfloater.h" -#include "llinventory.h" -#include "llinventoryfilter.h" -#include "llfolderview.h" -#include "llinventorymodel.h" -#include "lluictrlfactory.h" -#include <set> - - -class LLFolderViewItem; -class LLInventoryFilter; -class LLInventoryModel; -class LLInventoryPanel; -class LLInvFVBridge; -class LLInventoryFVBridgeBuilder; -class LLMenuBarGL; -class LLCheckBoxCtrl; -class LLSpinCtrl; -class LLScrollContainer; -class LLTextBox; -class LLIconCtrl; -class LLSaveFolderState; -class LLFilterEditor; -class LLTabContainer; - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// -// This is a collection of miscellaneous functions and classes -// that don't fit cleanly into any other class header. -// -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -class LLInventoryState -{ -public: -	// HACK: Until we can route this info through the instant message hierarchy -	static BOOL sWearNewClothing; -	static LLUUID sWearNewClothingTransactionID;	// wear all clothing in this transaction	 -}; - -class LLSelectFirstFilteredItem : public LLFolderViewFunctor -{ -public: -	LLSelectFirstFilteredItem() : mItemSelected(FALSE) {} -	virtual ~LLSelectFirstFilteredItem() {} -	virtual void doFolder(LLFolderViewFolder* folder); -	virtual void doItem(LLFolderViewItem* item); -	BOOL wasItemSelected() { return mItemSelected; } -protected: -	BOOL	mItemSelected; -}; - -class LLOpenFilteredFolders : public LLFolderViewFunctor -{ -public: -	LLOpenFilteredFolders()  {} -	virtual ~LLOpenFilteredFolders() {} -	virtual void doFolder(LLFolderViewFolder* folder); -	virtual void doItem(LLFolderViewItem* item); -}; - -class LLSaveFolderState : public LLFolderViewFunctor -{ -public: -	LLSaveFolderState() : mApply(FALSE) {} -	virtual ~LLSaveFolderState() {} -	virtual void doFolder(LLFolderViewFolder* folder); -	virtual void doItem(LLFolderViewItem* item) {} -	void setApply(BOOL apply); -	void clearOpenFolders() { mOpenFolders.clear(); } -protected: -	std::set<LLUUID> mOpenFolders; -	BOOL mApply; -}; - -class LLOpenFoldersWithSelection : public LLFolderViewFunctor -{ -public: -	LLOpenFoldersWithSelection() {} -	virtual ~LLOpenFoldersWithSelection() {} -	virtual void doFolder(LLFolderViewFolder* folder); -	virtual void doItem(LLFolderViewItem* item); -}; - -const std::string& get_item_icon_name(LLAssetType::EType asset_type, -							 LLInventoryType::EType inventory_type, -							 U32 attachment_point,  -							 BOOL item_is_multi ); - -LLUIImagePtr get_item_icon(LLAssetType::EType asset_type, -							 LLInventoryType::EType inventory_type, -							 U32 attachment_point,  -							 BOOL item_is_multi ); - -#endif // LL_LLINVENTORYFUNCTIONS_H - - - +/** 
 + * @file llinventoryfunctions.h
 + * @brief Miscellaneous inventory-related functions and classes
 + * class definition
 + *
 + * $LicenseInfo:firstyear=2001&license=viewergpl$
 + * 
 + * Copyright (c) 2001-2009, Linden Research, Inc.
 + * 
 + * Second Life Viewer Source Code
 + * The source code in this file ("Source Code") is provided by Linden Lab
 + * to you under the terms of the GNU General Public License, version 2.0
 + * ("GPL"), unless you have obtained a separate licensing agreement
 + * ("Other License"), formally executed by you and Linden Lab.  Terms of
 + * the GPL can be found in doc/GPL-license.txt in this distribution, or
 + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
 + * 
 + * There are special exceptions to the terms and conditions of the GPL as
 + * it is applied to this Source Code. View the full text of the exception
 + * in the file doc/FLOSS-exception.txt in this software distribution, or
 + * online at
 + * http://secondlifegrid.net/programs/open_source/licensing/flossexception
 + * 
 + * By copying, modifying or distributing this software, you acknowledge
 + * that you have read and understood your obligations described above,
 + * and agree to abide by those obligations.
 + * 
 + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
 + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
 + * COMPLETENESS OR PERFORMANCE.
 + * $/LicenseInfo$
 + */
 +
 +#ifndef LL_LLINVENTORYFUNCTIONS_H
 +#define LL_LLINVENTORYFUNCTIONS_H
 +
 +#include "llassetstorage.h"
 +#include "lldarray.h"
 +#include "llfloater.h"
 +#include "llinventory.h"
 +#include "llinventoryfilter.h"
 +#include "llfolderview.h"
 +#include "llinventorymodel.h"
 +#include "lluictrlfactory.h"
 +#include <set>
 +
 +
 +class LLFolderViewItem;
 +class LLInventoryFilter;
 +class LLInventoryModel;
 +class LLInventoryPanel;
 +class LLInvFVBridge;
 +class LLInventoryFVBridgeBuilder;
 +class LLMenuBarGL;
 +class LLCheckBoxCtrl;
 +class LLSpinCtrl;
 +class LLScrollContainer;
 +class LLTextBox;
 +class LLIconCtrl;
 +class LLSaveFolderState;
 +class LLFilterEditor;
 +class LLTabContainer;
 +
 +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 +//
 +// This is a collection of miscellaneous functions and classes
 +// that don't fit cleanly into any other class header.
 +//
 +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 +
 +class LLInventoryState
 +{
 +public:
 +	// HACK: Until we can route this info through the instant message hierarchy
 +	static BOOL sWearNewClothing;
 +	static LLUUID sWearNewClothingTransactionID;	// wear all clothing in this transaction	
 +};
 +
 +class LLSelectFirstFilteredItem : public LLFolderViewFunctor
 +{
 +public:
 +	LLSelectFirstFilteredItem() : mItemSelected(FALSE) {}
 +	virtual ~LLSelectFirstFilteredItem() {}
 +	virtual void doFolder(LLFolderViewFolder* folder);
 +	virtual void doItem(LLFolderViewItem* item);
 +	BOOL wasItemSelected() { return mItemSelected; }
 +protected:
 +	BOOL	mItemSelected;
 +};
 +
 +class LLOpenFilteredFolders : public LLFolderViewFunctor
 +{
 +public:
 +	LLOpenFilteredFolders()  {}
 +	virtual ~LLOpenFilteredFolders() {}
 +	virtual void doFolder(LLFolderViewFolder* folder);
 +	virtual void doItem(LLFolderViewItem* item);
 +};
 +
 +class LLSaveFolderState : public LLFolderViewFunctor
 +{
 +public:
 +	LLSaveFolderState() : mApply(FALSE) {}
 +	virtual ~LLSaveFolderState() {}
 +	virtual void doFolder(LLFolderViewFolder* folder);
 +	virtual void doItem(LLFolderViewItem* item) {}
 +	void setApply(BOOL apply);
 +	void clearOpenFolders() { mOpenFolders.clear(); }
 +protected:
 +	std::set<LLUUID> mOpenFolders;
 +	BOOL mApply;
 +};
 +
 +class LLOpenFoldersWithSelection : public LLFolderViewFunctor
 +{
 +public:
 +	LLOpenFoldersWithSelection() {}
 +	virtual ~LLOpenFoldersWithSelection() {}
 +	virtual void doFolder(LLFolderViewFolder* folder);
 +	virtual void doItem(LLFolderViewItem* item);
 +};
 +
 +const std::string& get_item_icon_name(LLAssetType::EType asset_type,
 +							 LLInventoryType::EType inventory_type,
 +							 U32 attachment_point, 
 +							 BOOL item_is_multi );
 +
 +LLUIImagePtr get_item_icon(LLAssetType::EType asset_type,
 +							 LLInventoryType::EType inventory_type,
 +							 U32 attachment_point, 
 +							 BOOL item_is_multi );
 +
 +#endif // LL_LLINVENTORYFUNCTIONS_H
 +
 +
 +
 diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 38a417f1a2..fbaab385fe 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -509,7 +509,7 @@ void LLInventoryModel::collectDescendentsIf(const LLUUID& id,  	}  } -void LLInventoryModel::updateLinkedItems(const LLUUID& object_id) +void LLInventoryModel::addChangedMaskForLinks(const LLUUID& object_id, U32 mask)  {  	const LLInventoryObject *obj = getObject(object_id);  	if (!obj || obj->getIsLinkType()) @@ -532,7 +532,7 @@ void LLInventoryModel::updateLinkedItems(const LLUUID& object_id)  		 cat_iter++)  	{  		LLViewerInventoryCategory *linked_cat = (*cat_iter); -		addChangedMask(LLInventoryObserver::LABEL, linked_cat->getUUID()); +		addChangedMask(mask, linked_cat->getUUID());  	};  	for (LLInventoryModel::item_array_t::iterator iter = item_array.begin(); @@ -540,9 +540,8 @@ void LLInventoryModel::updateLinkedItems(const LLUUID& object_id)  		 iter++)  	{  		LLViewerInventoryItem *linked_item = (*iter); -		addChangedMask(LLInventoryObserver::LABEL, linked_item->getUUID()); +		addChangedMask(mask, linked_item->getUUID());  	}; -	notifyObservers();  }  const LLUUID& LLInventoryModel::getLinkedItemID(const LLUUID& object_id) const @@ -1133,6 +1132,14 @@ void LLInventoryModel::notifyObservers(const std::string service_name)  		llwarns << "Call was made to notifyObservers within notifyObservers!" << llendl;  		return;  	} + +	if ((mModifyMask == LLInventoryObserver::NONE) && (service_name == "")) +	{ +		mModifyMask = LLInventoryObserver::NONE; +		mChangedItemIDs.clear(); +		return; +	} +  	mIsNotifyObservers = TRUE;  	for (observer_list_t::iterator iter = mObservers.begin();  		 iter != mObservers.end(); ) @@ -1180,7 +1187,7 @@ void LLInventoryModel::addChangedMask(U32 mask, const LLUUID& referent)  	// not sure what else might need to be accounted for this.  	if (mModifyMask & LLInventoryObserver::LABEL)  	{ -		updateLinkedItems(referent); +		addChangedMaskForLinks(referent, LLInventoryObserver::LABEL);  	}  } @@ -1199,7 +1206,7 @@ void LLInventoryModel::mock(const LLUUID& root_id)  		root_id,  		LLUUID::null,  		LLAssetType::AT_CATEGORY, -		LLFolderType::lookupNewCategoryName(LLFolderType::FT_ROOT_CATEGORY), +		LLFolderType::lookupNewCategoryName(LLFolderType::FT_ROOT_INVENTORY),  		gAgent.getID());  	addCategory(cat);  	gInventory.buildParentChildMap(); diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h index aa4ffb392f..da12dbdf7f 100644 --- a/indra/newview/llinventorymodel.h +++ b/indra/newview/llinventorymodel.h @@ -167,8 +167,6 @@ public:  	// Assumes item_id is itself not a linked item.  	item_array_t collectLinkedItems(const LLUUID& item_id,  									const LLUUID& start_folder_id = LLUUID::null); -	// Updates all linked items pointing to this id. -	void updateLinkedItems(const LLUUID& object_id);  	// Get the inventoryID that this item points to, else just return item_id  	const LLUUID& getLinkedItemID(const LLUUID& object_id) const; @@ -440,6 +438,9 @@ protected:  	bool messageUpdateCore(LLMessageSystem* msg, bool do_accounting); +	// Updates all linked items pointing to this id. +	void addChangedMaskForLinks(const LLUUID& object_id, U32 mask); +  protected:  	cat_array_t* getUnlockedCatArray(const LLUUID& id);  	item_array_t* getUnlockedItemArray(const LLUUID& id); diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 3a8b8bdf9e..99591dea57 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -36,8 +36,6 @@  #include "llinventorypanel.h"
 -// Seraph TODO: Remove unnecessary headers
 -
  #include "llagent.h"
  #include "llagentwearables.h"
  #include "llappearancemgr.h"
 @@ -56,6 +54,22 @@ const std::string LLInventoryPanel::RECENTITEMS_SORT_ORDER = std::string("Recent  const std::string LLInventoryPanel::INHERIT_SORT_ORDER = std::string("");
  static const LLInventoryFVBridgeBuilder INVENTORY_BRIDGE_BUILDER;
 +
 +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 +// Class LLInventoryPanelObserver
 +//
 +// Bridge to support knowing when the inventory has changed.
 +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 +class LLInventoryPanelObserver : public LLInventoryObserver
 +{
 +public:
 +	LLInventoryPanelObserver(LLInventoryPanel* ip) : mIP(ip) {}
 +	virtual ~LLInventoryPanelObserver() {}
 +	virtual void changed(U32 mask);
 +protected:
 +	LLInventoryPanel* mIP;
 +};
 +
  LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p) :	
  	LLPanel(p),
  	mInventoryObserver(NULL),
 @@ -131,27 +145,10 @@ BOOL LLInventoryPanel::postBuild()  	mInventoryObserver = new LLInventoryPanelObserver(this);
  	mInventory->addObserver(mInventoryObserver);
 -	// determine the root folder, if any, so inventory contents show just the children
 -	// of that folder (i.e. not including the folder itself).
 -	const LLFolderType::EType preferred_type = LLViewerFolderType::lookupTypeFromNewCategoryName(mStartFolderString);
 -
 -	if ("INVENTORY" == mStartFolderString)
 -	{
 -		mStartFolderID = gInventory.getRootFolderID();
 -	}
 -	else if ("LIBRARY" == mStartFolderString)
 -	{
 -		mStartFolderID = gInventory.getLibraryRootFolderID();
 -	}
 -	else
 -	{
 -		mStartFolderID = (preferred_type != LLFolderType::FT_NONE ? gInventory.findCategoryUUIDForType(preferred_type) : LLUUID::null);
 -	}
 -
  	// build view of inventory if we need default full hierarchy and inventory ready, otherwise wait for modelChanged() callback
  	if (mBuildDefaultHierarchy && mInventory->isInventoryUsable() && !mHasInventoryConnection)
  	{
 -		rebuildViewsFor(mStartFolderID);
 +		rebuildViews();
  		mHasInventoryConnection = true;
  		defaultOpenInventory();
  	}
 @@ -258,7 +255,7 @@ void LLInventoryPanel::modelChanged(U32 mask)  	// inventory just initialized, do complete build
  	if ((mask & LLInventoryObserver::ADD) && gInventory.getChangedIDs().empty() && !mHasInventoryConnection)
  	{
 -		rebuildViewsFor(mStartFolderID);
 +		rebuildViews();
  		mHasInventoryConnection = true;
  		defaultOpenInventory();
  		return;
 @@ -348,14 +345,6 @@ void LLInventoryPanel::modelChanged(U32 mask)  							view_item->destroyView();
  						}
  					}
 -					else
 -					{
 -						// Hmm, we got an ADD/REMOVE/STRUCTURE notification for this item but there's nothing to be done to it.
 -						llwarns << "Notification triggered for item that isn't changing.  "
 -								<< "Operation: ( mask: " << mask << " panel name: " << mStartFolderString << " ) "
 -								<< "Item: [ Name:" << model_item->getName() << " UUID: " << *id_it << " ]" << llendl;
 -						
 -					}
  				}
  				// This item has been removed from memory, but its associated UI element still exists.
 @@ -378,6 +367,24 @@ void LLInventoryPanel::modelChanged(U32 mask)  }
 +void LLInventoryPanel::rebuildViews()
 +{
 +	// Determine the root folder and rebuild the views starting
 +	// at that folder.
 +	const LLFolderType::EType preferred_type = LLViewerFolderType::lookupTypeFromNewCategoryName(mStartFolderString);
 +
 +	if ("LIBRARY" == mStartFolderString)
 +	{
 +		mStartFolderID = gInventory.getLibraryRootFolderID();
 +	}
 +	else
 +	{
 +		mStartFolderID = (preferred_type != LLFolderType::FT_NONE ? gInventory.findCategoryUUIDForType(preferred_type) : LLUUID::null);
 +	}
 +	
 +	rebuildViewsFor(mStartFolderID);
 +}
 +
  void LLInventoryPanel::rebuildViewsFor(const LLUUID& id)
  {
  	LLFolderViewItem* old_view = NULL;
 @@ -396,88 +403,86 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id)  {
  	LLMemType mt(LLMemType::MTYPE_INVENTORY_BUILD_NEW_VIEWS);
  	LLFolderViewItem* itemp = NULL;
 -	LLInventoryObject* objectp = NULL;
 -
 -	// Don't add the start folder (the inventory panel will show contents
 -	// beginning with the children of the starting folder, excluding the starting folder itself).
 -	if (id != mStartFolderID)
 +	LLInventoryObject* objectp = gInventory.getObject(id);
 +	if (objectp)
  	{
 -		objectp = gInventory.getObject(id);
 -		if (objectp)
 -		{		
 -			const LLUUID &parent_id = objectp->getParentUUID();
 -			// If this item's parent is the starting folder, then just add it to the top level (recall that 
 -			// the starting folder isn't actually represented in the view, parent_folder would be NULL in
 -			// this case otherwise).
 -			LLFolderViewFolder* parent_folder = (parent_id == mStartFolderID ?
 -				mFolders : (LLFolderViewFolder*)mFolders->getItemByID(parent_id));
 -
 +		const LLUUID &parent_id = objectp->getParentUUID();
 +		LLFolderViewFolder* parent_folder = (LLFolderViewFolder*)mFolders->getItemByID(parent_id);
 +		if (id == mStartFolderID)
 +			parent_folder = mFolders;
 +		
 +		if (!parent_folder)
 +		{
  			// This item exists outside the inventory's hierarchy, so don't add it.
 -			if (!parent_folder)
 -			{
 -				return;
 -			}
 -
 -			if (objectp->getType() <= LLAssetType::AT_NONE ||
 -				objectp->getType() >= LLAssetType::AT_COUNT)
 -			{
 -				llwarns << "LLInventoryPanel::buildNewViews called with invalid objectp->mType : " << 
 -					((S32) objectp->getType()) << " name " << objectp->getName() << " UUID " << objectp->getUUID() << llendl;
 -				return;
 -			}
 +			return;
 +		}
 +		
 +		if (objectp->getType() <= LLAssetType::AT_NONE ||
 +			objectp->getType() >= LLAssetType::AT_COUNT)
 +		{
 +			llwarns << "LLInventoryPanel::buildNewViews called with invalid objectp->mType : " << 
 +				((S32) objectp->getType()) << " name " << objectp->getName() << " UUID " << objectp->getUUID() << llendl;
 +			return;
 +		}
 +		
 +		if (objectp->getType() == LLAssetType::AT_CATEGORY &&
 +			objectp->getActualType() != LLAssetType::AT_LINK_FOLDER) 
 +		{
 +			LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(objectp->getType(),
 +																			objectp->getType(),
 +																			LLInventoryType::IT_CATEGORY,
 +																			this,
 +																			objectp->getUUID());
 -			if (objectp->getType() == LLAssetType::AT_CATEGORY &&
 -					 objectp->getActualType() != LLAssetType::AT_LINK_FOLDER) 
 +			if (new_listener)
  			{
 -				LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(objectp->getType(),
 -																				objectp->getType(),
 -																				LLInventoryType::IT_CATEGORY,
 -																				this,
 -																				objectp->getUUID());
 -
 -				if (new_listener)
 +				LLFolderViewFolder::Params p;
 +				p.name = new_listener->getDisplayName();
 +				p.icon = new_listener->getIcon();
 +				p.root = mFolders;
 +				p.listener = new_listener;
 +				p.tool_tip = p.name;
 +				LLFolderViewFolder* folderp = LLUICtrlFactory::create<LLFolderViewFolder>(p);
 +				folderp->setItemSortOrder(mFolders->getSortOrder());
 +				itemp = folderp;
 +
 +				// Hide the root folder, so we can show the contents of a folder
 +				// flat but still have the parent folder present for listener-related
 +				// operations.
 +				if (id == mStartFolderID)
  				{
 -					LLFolderViewFolder::Params p;
 -					p.name = new_listener->getDisplayName();
 -					p.icon = new_listener->getIcon();
 -					p.root = mFolders;
 -					p.listener = new_listener;
 -					p.tool_tip = p.name;
 -					LLFolderViewFolder* folderp = LLUICtrlFactory::create<LLFolderViewFolder>(p);
 -				
 -					folderp->setItemSortOrder(mFolders->getSortOrder());
 -					itemp = folderp;
 +					folderp->setDontShowInHierarchy(TRUE);
  				}
  			}
 -			else 
 +		}
 +		else 
 +		{
 +			// Build new view for item
 +			LLInventoryItem* item = (LLInventoryItem*)objectp;
 +			LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(item->getType(),
 +																			item->getActualType(),
 +																			item->getInventoryType(),
 +																			this,
 +																			item->getUUID(),
 +																			item->getFlags());
 +
 +			if (new_listener)
  			{
 -				// Build new view for item
 -				LLInventoryItem* item = (LLInventoryItem*)objectp;
 -				LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(item->getType(),
 -																				item->getActualType(),
 -																				item->getInventoryType(),
 -																				this,
 -																				item->getUUID(),
 -																				item->getFlags());
 -
 -				if (new_listener)
 -				{
 -					LLFolderViewItem::Params params;
 -					params.name(new_listener->getDisplayName());
 -					params.icon(new_listener->getIcon());
 -					params.creation_date(new_listener->getCreationDate());
 -					params.root(mFolders);
 -					params.listener(new_listener);
 -					params.rect(LLRect (0, 0, 0, 0));
 -					params.tool_tip = params.name;
 -					itemp = LLUICtrlFactory::create<LLFolderViewItem> (params);
 -				}
 +				LLFolderViewItem::Params params;
 +				params.name(new_listener->getDisplayName());
 +				params.icon(new_listener->getIcon());
 +				params.creation_date(new_listener->getCreationDate());
 +				params.root(mFolders);
 +				params.listener(new_listener);
 +				params.rect(LLRect (0, 0, 0, 0));
 +				params.tool_tip = params.name;
 +				itemp = LLUICtrlFactory::create<LLFolderViewItem> (params);
  			}
 +		}
 -			if (itemp)
 -			{
 -				itemp->addToFolder(parent_folder, mFolders);
 -			}
 +		if (itemp)
 +		{
 +			itemp->addToFolder(parent_folder, mFolders);
  		}
  	}
 @@ -875,3 +880,11 @@ void example_param_block_usage()  	LLUICtrlFactory::create<LLInventoryPanel>(param_block);
  }
 +
 +// +=================================================+
 +// |        LLInventoryPanelObserver                 |
 +// +=================================================+
 +void LLInventoryPanelObserver::changed(U32 mask)
 +{
 +	mIP->modelChanged(mask);
 +}
 diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h index e398c44105..0ccee337c9 100644 --- a/indra/newview/llinventorypanel.h +++ b/indra/newview/llinventorypanel.h @@ -162,6 +162,10 @@ public:  	void unSelectAll()	{ mFolders->setSelection(NULL, FALSE, FALSE); }  protected: +	// Destroys the old views, and regenerates them based on the +	// start folder ID. +	void rebuildViews(); +  	// Given the id and the parent, build all of the folder views.  	void rebuildViewsFor(const LLUUID& id);  	virtual void buildNewViews(const LLUUID& id); // made virtual to support derived classes. EXT-719 diff --git a/indra/newview/lljoystickbutton.cpp b/indra/newview/lljoystickbutton.cpp index 0acc67ff5a..2cc5c8335d 100644 --- a/indra/newview/lljoystickbutton.cpp +++ b/indra/newview/lljoystickbutton.cpp @@ -136,13 +136,13 @@ void LLJoystick::updateSlop()  bool LLJoystick::pointInCircle(S32 x, S32 y) const   {  -	if(this->getLocalRect().mTop!=this->getLocalRect().mRight) +	if(this->getLocalRect().getHeight() != this->getLocalRect().getWidth())  	{  		llwarns << "Joystick shape is not square"<<llendl; -		return TRUE; +		return true;  	}  	//center is x and y coordinates of center of joystick circle, and also its radius -	int center = this->getLocalRect().mTop/2; +	int center = this->getLocalRect().getHeight()/2;  	bool in_circle = (x - center) * (x - center) + (y - center) * (y - center) <= center * center;  	return in_circle;  } diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp index e3ba1b8e4a..93db337053 100644 --- a/indra/newview/llmoveview.cpp +++ b/indra/newview/llmoveview.cpp @@ -156,6 +156,31 @@ void LLFloaterMove::setEnabled(BOOL enabled)  	showModeButtons(enabled);  } +// *NOTE: we assume that setVisible() is called on floater close. +// virtual +void LLFloaterMove::setVisible(BOOL visible) +{ +	// Ignore excessive calls of this method (from LLTransientFloaterMgr?). +	if (getVisible() == visible) +		return; + +	if (visible) +	{ +		// Attach the Stand/Stop Flying panel. +		LLPanelStandStopFlying* ssf_panel = LLPanelStandStopFlying::getInstance(); +		ssf_panel->reparent(this); +		const LLRect& mode_actions_rect = mModeActionsPanel->getRect(); +		ssf_panel->setOrigin(mode_actions_rect.mLeft, mode_actions_rect.mBottom); +	} +	else +	{ +		// Detach the Stand/Stop Flying panel. +		LLPanelStandStopFlying::getInstance()->reparent(NULL); +	} + +	LLTransientDockableFloater::setVisible(visible); +} +  // static   F32 LLFloaterMove::getYawRate( F32 time )  { @@ -424,43 +449,6 @@ void LLFloaterMove::showModeButtons(BOOL bShow)  	if (NULL == mModeActionsPanel || mModeActionsPanel->getVisible() == bShow)  		return;  	mModeActionsPanel->setVisible(bShow); - -	if (isDocked()) -	{ -		return; -	} - -	updateHeight(bShow); -} - -void LLFloaterMove::updateHeight(bool show_mode_buttons) -{ -	static bool size_changed = false; -	static S32 origin_height = getRect().getHeight(); -	LLRect rect = getRect(); - -	static S32 mode_panel_height = mModeActionsPanel->getRect().getHeight(); - -	S32 newHeight = getRect().getHeight(); - -	if (!show_mode_buttons && origin_height == newHeight) -	{ -		newHeight -= mode_panel_height; -		size_changed = true; -	} -	else if (show_mode_buttons && origin_height > newHeight) -	{ -		newHeight += mode_panel_height; -		size_changed = true; -	} - -	if (!size_changed) -		return; - -	rect.setLeftTopAndSize(rect.mLeft, rect.mTop, rect.getWidth(), newHeight); -	reshape(rect.getWidth(), rect.getHeight()); -	setRect(rect); -	size_changed = false;  }  //static @@ -504,14 +492,6 @@ void LLFloaterMove::onOpen(const LLSD& key)  //virtual  void LLFloaterMove::setDocked(bool docked, bool pop_on_undock/* = true*/)  { -	LLDockableFloater::setDocked(docked, pop_on_undock); -	bool show_mode_buttons = isDocked() || !gAgent.getFlying(); - -	if (!isMinimized()) -	{ -		updateHeight(show_mode_buttons); -	} -  	LLTransientDockableFloater::setDocked(docked, pop_on_undock);  } @@ -535,7 +515,8 @@ void LLFloaterMove::setModeButtonToggleState(const EMovementMode mode)  /************************************************************************/  LLPanelStandStopFlying::LLPanelStandStopFlying() :  	mStandButton(NULL), -	mStopFlyingButton(NULL) +	mStopFlyingButton(NULL), +	mAttached(false)  {  	// make sure we have the only instance of this class  	static bool b = true; @@ -624,6 +605,45 @@ BOOL LLPanelStandStopFlying::handleToolTip(S32 x, S32 y, MASK mask)  	return TRUE;  } +void LLPanelStandStopFlying::reparent(LLFloaterMove* move_view) +{ +	LLPanel* parent = dynamic_cast<LLPanel*>(getParent()); +	if (!parent) +	{ +		llwarns << "Stand/stop flying panel parent is unset" << llendl; +		return; +	} + +	if (move_view != NULL) +	{ +		llassert(move_view != parent); // sanity check +	 +		// Save our original container. +		if (!mOriginalParent.get()) +			mOriginalParent = parent->getHandle(); + +		// Attach to movement controls. +		parent->removeChild(this); +		move_view->addChild(this); +		// Origin must be set by movement controls. +		mAttached = true; +	} +	else +	{ +		if (!mOriginalParent.get()) +		{ +			llwarns << "Original parent of the stand / stop flying panel not found" << llendl; +			return; +		} + +		// Detach from movement controls.  +		parent->removeChild(this); +		mOriginalParent.get()->addChild(this); +		mAttached = false; +		updatePosition(); // don't defer until next draw() to avoid flicker +	} +} +  //////////////////////////////////////////////////////////////////////////  // Private Section  ////////////////////////////////////////////////////////////////////////// @@ -668,27 +688,14 @@ void LLPanelStandStopFlying::onStopFlyingButtonClick()   */  void LLPanelStandStopFlying::updatePosition()  { -  	LLBottomTray* tray = LLBottomTray::getInstance(); -	if (!tray) return; +	if (!tray || mAttached) return;  	LLButton* movement_btn = tray->getChild<LLButton>(BOTTOM_TRAY_BUTTON_NAME); -	//align centers of a button and a floater +	// Align centers of the button and the panel.  	S32 x = movement_btn->calcScreenRect().getCenterX() - getRect().getWidth()/2; - -	S32 y = 0; - -	LLFloater *move_floater = LLFloaterReg::findInstance("moveview"); -	if (move_floater) -	{ -		if (move_floater->isDocked()) -		{ -			y = move_floater->getRect().mBottom + getRect().getHeight(); -		} -	} - -	setOrigin(x, y); +	setOrigin(x, 0);  } diff --git a/indra/newview/llmoveview.h b/indra/newview/llmoveview.h index cee6078ee9..06463f02af 100644 --- a/indra/newview/llmoveview.h +++ b/indra/newview/llmoveview.h @@ -46,6 +46,7 @@ class LLJoystickAgentSlide;  class LLFloaterMove  :	public LLTransientDockableFloater  { +	LOG_CLASS(LLFloaterMove);  	friend class LLFloaterReg;  private: @@ -55,6 +56,7 @@ public:  	/*virtual*/	BOOL	postBuild();  	/*virtual*/ void	setEnabled(BOOL enabled); +	/*virtual*/ void	setVisible(BOOL visible);  	static F32	getYawRate(F32 time);  	static void setFlyingMode(BOOL fly);  	void setFlyingModeImpl(BOOL fly); @@ -96,7 +98,6 @@ private:  	void updateButtonsWithMovementMode(const EMovementMode newMode);  	void updatePosition();  	void showModeButtons(BOOL bShow); -	void updateHeight(bool show_mode_buttons);  public: @@ -126,6 +127,7 @@ private:   */  class LLPanelStandStopFlying : public LLPanel  { +	LOG_CLASS(LLPanelStandStopFlying);  public:  	typedef enum stand_stop_flying_mode_t  	{ @@ -133,6 +135,19 @@ public:  		SSFM_STOP_FLYING  	} EStandStopFlyingMode; +	/** +	 * Attach or detach the panel to/from the movement controls floater. +	 *  +	 * Called when the floater gets opened/closed, user sits, stands up or starts/stops flying. +	 *  +	 * @param move_view The floater to attach to (not always accessible via floater registry). +	 *        If NULL is passed, the panel gets reparented to its original container. +	 * +	 * @see mAttached +	 * @see mOriginalParent  +	 */ +	void reparent(LLFloaterMove* move_view); +  	static LLPanelStandStopFlying* getInstance();  	static void setStandStopFlyingMode(EStandStopFlyingMode mode);  	static void clearStandStopFlyingMode(EStandStopFlyingMode mode); @@ -157,6 +172,23 @@ private:  	LLButton* mStandButton;  	LLButton* mStopFlyingButton; + +	/** +	 * The original parent of the panel. +	 *   +	 * Makes it possible to move (reparent) the panel to the movement controls floater and back. +	 *  +	 * @see reparent() +	 */ +	LLHandle<LLPanel> mOriginalParent; + +	/** +	 * True if the panel is currently attached to the movement controls floater. +	 *  +	 * @see reparent() +	 * @see updatePosition() +	 */ +	bool	mAttached;  }; diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp index 794d73a5ad..114d26af8a 100644 --- a/indra/newview/llnavigationbar.cpp +++ b/indra/newview/llnavigationbar.cpp @@ -186,7 +186,6 @@ LLNavigationBar::LLNavigationBar()  LLNavigationBar::~LLNavigationBar()  {  	mTeleportFinishConnection.disconnect(); -	LLSearchHistory::getInstance()->save();  }  BOOL LLNavigationBar::postBuild() @@ -217,7 +216,7 @@ BOOL LLNavigationBar::postBuild()  	mBtnHome->setClickedCallback(boost::bind(&LLNavigationBar::onHomeButtonClicked, this)); -	mCmbLocation->setSelectionCallback(boost::bind(&LLNavigationBar::onLocationSelection, this)); +	mCmbLocation->setCommitCallback(boost::bind(&LLNavigationBar::onLocationSelection, this));  	mSearchComboBox->setCommitCallback(boost::bind(&LLNavigationBar::onSearchCommit, this)); diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp index 4a5aa12e2d..09fd9b2949 100644 --- a/indra/newview/llnearbychat.cpp +++ b/indra/newview/llnearbychat.cpp @@ -89,8 +89,6 @@ BOOL LLNearbyChat::postBuild()  	mChatHistory = getChild<LLChatHistory>("chat_history"); -	setCanResize(true); -  	if(!LLDockableFloater::postBuild())  		return false; @@ -98,7 +96,7 @@ BOOL LLNearbyChat::postBuild()  	{  		setDockControl(new LLDockControl(  			LLBottomTray::getInstance()->getNearbyChatBar(), this, -			getDockTongue(), LLDockControl::LEFT, boost::bind(&LLNearbyChat::getAllowedRect, this, _1))); +			getDockTongue(), LLDockControl::TOP, boost::bind(&LLNearbyChat::getAllowedRect, this, _1)));  	}  	return true; @@ -179,7 +177,7 @@ void	LLNearbyChat::addMessage(const LLChat& chat)  			}  			message = message.substr(3); -			append_style_params.font.style = "UNDERLINE"; +			append_style_params.font.style = "ITALIC";  			mChatHistory->appendText(message, FALSE, append_style_params);  		}  		else @@ -217,13 +215,6 @@ void	LLNearbyChat::onOpen(const LLSD& key )  	}  } -void	LLNearbyChat::setDocked			(bool docked, bool pop_on_undock) -{ -	LLDockableFloater::setDocked(docked, pop_on_undock); - -	setCanResize(!docked); -} -  void LLNearbyChat::setRect	(const LLRect &rect)  {  	LLDockableFloater::setRect(rect); @@ -233,12 +224,3 @@ void LLNearbyChat::getAllowedRect(LLRect& rect)  {  	rect = gViewerWindow->getWorldViewRectScaled();  } -void LLNearbyChat::setMinimized	(BOOL minimize) -{ -	if(minimize && !isDocked()) -	{ -		setVisible(FALSE); -	} -	LLDockableFloater::setMinimized(minimize); -} - diff --git a/indra/newview/llnearbychat.h b/indra/newview/llnearbychat.h index 1f4e57cf89..561c2d3677 100644 --- a/indra/newview/llnearbychat.h +++ b/indra/newview/llnearbychat.h @@ -51,12 +51,9 @@ public:  	void	onNearbyChatContextMenuItemClicked(const LLSD& userdata);  	bool	onNearbyChatCheckContextMenuItem(const LLSD& userdata); -	void	setDocked			(bool docked, bool pop_on_undock = true); -  	/*virtual*/ void	onOpen	(const LLSD& key);  	virtual void setRect		(const LLRect &rect); -	virtual void setMinimized	(BOOL minimize);  private:  	virtual void    applySavedVariables(); diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp index 00502341fc..5e23662a0b 100644 --- a/indra/newview/llpanelimcontrolpanel.cpp +++ b/indra/newview/llpanelimcontrolpanel.cpp @@ -44,6 +44,7 @@  #include "llimview.h"  #include "llvoicechannel.h"  #include "llsidetray.h" +#include "lltrans.h"  void LLPanelChatControlPanel::onCallButtonClicked()  { @@ -161,6 +162,11 @@ void LLPanelIMControlPanel::onShareButtonClicked()  {  	LLSD key;  	LLSideTray::getInstance()->showPanel("sidepanel_inventory", key); + +	if (gIMMgr->hasSession(getSessionId())) +	{ +		LLIMModel::getInstance()->addMessage(getSessionId(), SYSTEM_FROM, LLUUID::null, LLTrans::getString("share_alert"), false); +	}  }  void LLPanelIMControlPanel::setSessionId(const LLUUID& session_id) diff --git a/indra/newview/llpanelimcontrolpanel.h b/indra/newview/llpanelimcontrolpanel.h index 923c5acbd2..7bfc432ef2 100644 --- a/indra/newview/llpanelimcontrolpanel.h +++ b/indra/newview/llpanelimcontrolpanel.h @@ -58,6 +58,7 @@ public:  	virtual void onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state);  	virtual void setSessionId(const LLUUID& session_id); +	const LLUUID& getSessionId() { return mSessionId; }  private:  	LLUUID mSessionId; diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index ce1a7f98df..e199db37ab 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -97,10 +97,10 @@ BOOL LLLandmarksPanel::postBuild()  	U32 sort_order = gSavedSettings.getU32(LLInventoryPanel::DEFAULT_SORT_ORDER);  	mSortByDate = sort_order & LLInventoryFilter::SO_DATE; -	initFavoritesInventroyPanel(); -	initLandmarksInventroyPanel(); -	initMyInventroyPanel(); -	initLibraryInventroyPanel(); +	initFavoritesInventoryPanel(); +	initLandmarksInventoryPanel(); +	initMyInventoryPanel(); +	initLibraryInventoryPanel();  	getChild<LLAccordionCtrlTab>("tab_favorites")->setDisplayChildren(true);  	getChild<LLAccordionCtrlTab>("tab_landmarks")->setDisplayChildren(true); @@ -357,7 +357,7 @@ void LLLandmarksPanel::setErrorStatus(U32 status, const std::string& reason)  // PRIVATE METHODS  ////////////////////////////////////////////////////////////////////////// -void LLLandmarksPanel::initFavoritesInventroyPanel() +void LLLandmarksPanel::initFavoritesInventoryPanel()  {  	mFavoritesInventoryPanel = getChild<LLInventorySubTreePanel>("favorites_list"); @@ -366,7 +366,7 @@ void LLLandmarksPanel::initFavoritesInventroyPanel()  	initAccordion("tab_favorites", mFavoritesInventoryPanel);  } -void LLLandmarksPanel::initLandmarksInventroyPanel() +void LLLandmarksPanel::initLandmarksInventoryPanel()  {  	mLandmarksInventoryPanel = getChild<LLInventorySubTreePanel>("landmarks_list"); @@ -380,7 +380,7 @@ void LLLandmarksPanel::initLandmarksInventroyPanel()  	initAccordion("tab_landmarks", mLandmarksInventoryPanel);  } -void LLLandmarksPanel::initMyInventroyPanel() +void LLLandmarksPanel::initMyInventoryPanel()  {  	mMyInventoryPanel= getChild<LLInventorySubTreePanel>("my_inventory_list"); @@ -389,7 +389,7 @@ void LLLandmarksPanel::initMyInventroyPanel()  	initAccordion("tab_inventory", mMyInventoryPanel);  } -void LLLandmarksPanel::initLibraryInventroyPanel() +void LLLandmarksPanel::initLibraryInventoryPanel()  {  	mLibraryInventoryPanel = getChild<LLInventorySubTreePanel>("library_list"); diff --git a/indra/newview/llpanellandmarks.h b/indra/newview/llpanellandmarks.h index 745f9364c2..097d79badf 100644 --- a/indra/newview/llpanellandmarks.h +++ b/indra/newview/llpanellandmarks.h @@ -78,10 +78,10 @@ protected:  	/*virtual*/ void setErrorStatus(U32 status, const std::string& reason);  private: -	void initFavoritesInventroyPanel(); -	void initLandmarksInventroyPanel(); -	void initMyInventroyPanel(); -	void initLibraryInventroyPanel(); +	void initFavoritesInventoryPanel(); +	void initLandmarksInventoryPanel(); +	void initMyInventoryPanel(); +	void initLibraryInventoryPanel();  	void initLandmarksPanel(LLInventorySubTreePanel* inventory_list);  	void initAccordion(const std::string& accordion_tab_name, LLInventorySubTreePanel* inventory_list);  	void onAccordionExpandedCollapsed(const LLSD& param, LLInventorySubTreePanel* inventory_list); diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index e3b2ab77aa..9f723169e1 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -49,7 +49,7 @@  #include "llviewermenu.h"
  #include "llviewertexturelist.h"
 -static LLRegisterPanelClassWrapper<LLPanelMainInventory> t_inventory("panel_main_inventory"); // Seraph is this redundant with constructor?
 +static LLRegisterPanelClassWrapper<LLPanelMainInventory> t_inventory("panel_main_inventory");
  void on_file_loaded_for_save(BOOL success, 
  							 LLViewerFetchedTexture *src_vi,
 @@ -197,28 +197,6 @@ BOOL LLPanelMainInventory::postBuild()  	return TRUE;
  }
 -void LLPanelMainInventory::initListCommandsHandlers()
 -{
 -	mListCommands = getChild<LLPanel>("bottom_panel");
 -
 -	mListCommands->childSetAction("options_gear_btn", boost::bind(&LLPanelMainInventory::onGearButtonClick, this));
 -	mListCommands->childSetAction("trash_btn", boost::bind(&LLPanelMainInventory::onTrashButtonClick, this));
 -	mListCommands->childSetAction("add_btn", boost::bind(&LLPanelMainInventory::onAddButtonClick, this));
 -
 -	LLDragAndDropButton* trash_btn = mListCommands->getChild<LLDragAndDropButton>("trash_btn");
 -	trash_btn->setDragAndDropHandler(boost::bind(&LLPanelMainInventory::handleDragAndDropToTrash, this
 -			,	_4 // BOOL drop
 -			,	_5 // EDragAndDropType cargo_type
 -			,	_7 // EAcceptance* accept
 -			));
 -
 -	mCommitCallbackRegistrar.add("Inventory.GearDefault.Custom.Action", boost::bind(&LLPanelMainInventory::onCustomAction, this, _2));
 -	mEnableCallbackRegistrar.add("Inventory.GearDefault.Enable", boost::bind(&LLPanelMainInventory::isActionEnabled, this, _2));
 -	mMenuGearDefault = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory_gear_default.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 -	mMenuAdd = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory_add.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 -	
 -}
 -
  // Destroys the object
  LLPanelMainInventory::~LLPanelMainInventory( void )
  {
 @@ -863,9 +841,30 @@ void LLFloaterInventoryFinder::selectNoTypes(void* user_data)  	self->childSetValue("check_snapshot", FALSE);
  }
 +//////////////////////////////////////////////////////////////////////////////////
 +// List Commands                                                                //
 +void LLPanelMainInventory::initListCommandsHandlers()
 +{
 +	mListCommands = getChild<LLPanel>("bottom_panel");
 +	mListCommands->childSetAction("options_gear_btn", boost::bind(&LLPanelMainInventory::onGearButtonClick, this));
 +	mListCommands->childSetAction("trash_btn", boost::bind(&LLPanelMainInventory::onTrashButtonClick, this));
 +	mListCommands->childSetAction("add_btn", boost::bind(&LLPanelMainInventory::onAddButtonClick, this));
 +	LLDragAndDropButton* trash_btn = mListCommands->getChild<LLDragAndDropButton>("trash_btn");
 +	trash_btn->setDragAndDropHandler(boost::bind(&LLPanelMainInventory::handleDragAndDropToTrash, this
 +			,	_4 // BOOL drop
 +			,	_5 // EDragAndDropType cargo_type
 +			,	_7 // EAcceptance* accept
 +			));
 +
 +	mCommitCallbackRegistrar.add("Inventory.GearDefault.Custom.Action", boost::bind(&LLPanelMainInventory::onCustomAction, this, _2));
 +	mEnableCallbackRegistrar.add("Inventory.GearDefault.Enable", boost::bind(&LLPanelMainInventory::isActionEnabled, this, _2));
 +	mMenuGearDefault = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory_gear_default.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 +	mMenuAdd = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory_add.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
 +	
 +}
  void LLPanelMainInventory::updateListCommands()
  {
 @@ -1018,3 +1017,6 @@ bool LLPanelMainInventory::handleDragAndDropToTrash(BOOL drop, EDragAndDropType  	}
  	return true;
  }
 +
 +// List Commands                                                              //
 +////////////////////////////////////////////////////////////////////////////////
 diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h index fbc0f09c50..627be21577 100644 --- a/indra/newview/llpanelmaininventory.h +++ b/indra/newview/llpanelmaininventory.h @@ -111,7 +111,20 @@ protected:  	void resetFilters();
  	void setSortBy(const LLSD& userdata);
 -	// List Commands Handlers
 +private:
 +	LLFloaterInventoryFinder* getFinder();
 +
 +	LLFilterEditor*				mFilterEditor;
 +	LLTabContainer*				mFilterTabs;
 +	LLHandle<LLFloater>			mFinderHandle;
 +	LLInventoryPanel*			mActivePanel;
 +	LLSaveFolderState*			mSavedFolderState;
 +	std::string					mFilterText;
 +
 +
 +	//////////////////////////////////////////////////////////////////////////////////
 +	// List Commands                                                                //
 +protected:
  	void initListCommandsHandlers();
  	void updateListCommands();
  	void onGearButtonClick();
 @@ -122,22 +135,12 @@ protected:  	BOOL isActionEnabled(const LLSD& command_name);
  	void onCustomAction(const LLSD& command_name);
  	bool handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept);
 -
 -
  private:
 -	LLFloaterInventoryFinder* getFinder();
 -
 -	LLFilterEditor*				mFilterEditor;
 -	LLTabContainer*				mFilterTabs;
 -	LLHandle<LLFloater>			mFinderHandle;
 -	LLInventoryPanel*			mActivePanel;
 -	LLSaveFolderState*			mSavedFolderState;
 -
  	LLPanel*					mListCommands;
  	LLMenuGL*					mMenuGearDefault;
  	LLMenuGL*					mMenuAdd;
 -
 -	std::string					mFilterText;
 +	// List Commands                                                              //
 +	////////////////////////////////////////////////////////////////////////////////
  };
  #endif // LL_LLPANELMAININVENTORY_H
 diff --git a/indra/newview/llpanelobjectinventory.h b/indra/newview/llpanelobjectinventory.h index 6722bb212e..7a39d8fabc 100644 --- a/indra/newview/llpanelobjectinventory.h +++ b/indra/newview/llpanelobjectinventory.h @@ -1,102 +1,102 @@ -/**  - * @file llpanelobjectinventory.h - * @brief LLPanelObjectInventory class definition - * - * $LicenseInfo:firstyear=2002&license=viewergpl$ - *  - * Copyright (c) 2002-2009, Linden Research, Inc. - *  - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab.  Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 - *  - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at - * http://secondlifegrid.net/programs/open_source/licensing/flossexception - *  - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - *  - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ - */ - -#ifndef LL_LLPANELOBJECTINVENTORY_H -#define LL_LLPANELOBJECTINVENTORY_H - -#include "llvoinventorylistener.h" -#include "llpanel.h" - -#include "llinventory.h" - -class LLScrollContainer; -class LLFolderView; -class LLFolderViewFolder; -class LLViewerObject; - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Class LLPanelObjectInventory -// -// This class represents the panel used to view and control a -// particular task's inventory. -// -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -class LLPanelObjectInventory : public LLPanel, public LLVOInventoryListener -{ -public: -	// dummy param block for template registration purposes -	struct Params : public LLPanel::Params {}; - -	LLPanelObjectInventory(const Params&); -	virtual ~LLPanelObjectInventory(); -	 -	virtual BOOL postBuild(); - -	void doToSelected(const LLSD& userdata); -	 -	void refresh(); -	const LLUUID& getTaskUUID() { return mTaskUUID;} -	void removeSelectedItem(); -	void startRenamingSelectedItem(); - -	LLFolderView* getRootFolder() const { return mFolders; } - -	virtual void draw(); -	virtual void deleteAllChildren(); -	virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void *cargo_data, EAcceptance *accept, std::string& tooltip_msg); -	 -	static void idle(void* user_data); - -protected: -	void reset(); -	/*virtual*/ void inventoryChanged(LLViewerObject* object, -								 InventoryObjectList* inventory, -								 S32 serial_num, -								 void* user_data); -	void updateInventory(); -	void createFolderViews(LLInventoryObject* inventory_root, InventoryObjectList& contents); -	void createViewsForCategory(InventoryObjectList* inventory, -								LLInventoryObject* parent, -								LLFolderViewFolder* folder); -	void clearContents(); - -private: -	LLScrollContainer* mScroller; -	LLFolderView* mFolders; -	 -	LLUUID mTaskUUID; -	BOOL mHaveInventory; -	BOOL mIsInventoryEmpty; -	BOOL mInventoryNeedsUpdate; -}; - -#endif // LL_LLPANELOBJECTINVENTORY_H +/** 
 + * @file llpanelobjectinventory.h
 + * @brief LLPanelObjectInventory class definition
 + *
 + * $LicenseInfo:firstyear=2002&license=viewergpl$
 + * 
 + * Copyright (c) 2002-2009, Linden Research, Inc.
 + * 
 + * Second Life Viewer Source Code
 + * The source code in this file ("Source Code") is provided by Linden Lab
 + * to you under the terms of the GNU General Public License, version 2.0
 + * ("GPL"), unless you have obtained a separate licensing agreement
 + * ("Other License"), formally executed by you and Linden Lab.  Terms of
 + * the GPL can be found in doc/GPL-license.txt in this distribution, or
 + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
 + * 
 + * There are special exceptions to the terms and conditions of the GPL as
 + * it is applied to this Source Code. View the full text of the exception
 + * in the file doc/FLOSS-exception.txt in this software distribution, or
 + * online at
 + * http://secondlifegrid.net/programs/open_source/licensing/flossexception
 + * 
 + * By copying, modifying or distributing this software, you acknowledge
 + * that you have read and understood your obligations described above,
 + * and agree to abide by those obligations.
 + * 
 + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
 + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
 + * COMPLETENESS OR PERFORMANCE.
 + * $/LicenseInfo$
 + */
 +
 +#ifndef LL_LLPANELOBJECTINVENTORY_H
 +#define LL_LLPANELOBJECTINVENTORY_H
 +
 +#include "llvoinventorylistener.h"
 +#include "llpanel.h"
 +
 +#include "llinventory.h"
 +
 +class LLScrollContainer;
 +class LLFolderView;
 +class LLFolderViewFolder;
 +class LLViewerObject;
 +
 +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 +// Class LLPanelObjectInventory
 +//
 +// This class represents the panel used to view and control a
 +// particular task's inventory.
 +//
 +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 +class LLPanelObjectInventory : public LLPanel, public LLVOInventoryListener
 +{
 +public:
 +	// dummy param block for template registration purposes
 +	struct Params : public LLPanel::Params {};
 +
 +	LLPanelObjectInventory(const Params&);
 +	virtual ~LLPanelObjectInventory();
 +	
 +	virtual BOOL postBuild();
 +
 +	void doToSelected(const LLSD& userdata);
 +	
 +	void refresh();
 +	const LLUUID& getTaskUUID() { return mTaskUUID;}
 +	void removeSelectedItem();
 +	void startRenamingSelectedItem();
 +
 +	LLFolderView* getRootFolder() const { return mFolders; }
 +
 +	virtual void draw();
 +	virtual void deleteAllChildren();
 +	virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void *cargo_data, EAcceptance *accept, std::string& tooltip_msg);
 +	
 +	static void idle(void* user_data);
 +
 +protected:
 +	void reset();
 +	/*virtual*/ void inventoryChanged(LLViewerObject* object,
 +								 InventoryObjectList* inventory,
 +								 S32 serial_num,
 +								 void* user_data);
 +	void updateInventory();
 +	void createFolderViews(LLInventoryObject* inventory_root, InventoryObjectList& contents);
 +	void createViewsForCategory(InventoryObjectList* inventory,
 +								LLInventoryObject* parent,
 +								LLFolderViewFolder* folder);
 +	void clearContents();
 +
 +private:
 +	LLScrollContainer* mScroller;
 +	LLFolderView* mFolders;
 +	
 +	LLUUID mTaskUUID;
 +	BOOL mHaveInventory;
 +	BOOL mIsInventoryEmpty;
 +	BOOL mInventoryNeedsUpdate;
 +};
 +
 +#endif // LL_LLPANELOBJECTINVENTORY_H
 diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp new file mode 100644 index 0000000000..5ad9bf056e --- /dev/null +++ b/indra/newview/llpaneloutfitsinventory.cpp @@ -0,0 +1,347 @@ +/** + * @file llpaneloutfitsinventory.cpp + * @brief Outfits inventory panel + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + * + * Copyright (c) 2001-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab.  Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llpaneloutfitsinventory.h" + +#include "llagent.h" +#include "llagentwearables.h" + +#include "llbutton.h" +#include "llfloaterreg.h" +#include "llfloaterworldmap.h" +#include "llfloaterinventory.h" +#include "llfoldervieweventlistener.h" +#include "llinventoryfunctions.h" +#include "llinventorypanel.h" +#include "lllandmark.h" +#include "llsidepanelappearance.h" +#include "llsidetray.h" +#include "lltabcontainer.h" +#include "llviewerfoldertype.h" +#include "llviewerjointattachment.h" +#include "llvoavatarself.h" + +// List Commands +#include "lldndbutton.h" +#include "llmenugl.h" +#include "llviewermenu.h" + +static LLRegisterPanelClassWrapper<LLPanelOutfitsInventory> t_inventory("panel_outfits_inventory"); + +LLPanelOutfitsInventory::LLPanelOutfitsInventory() : +	mInventoryPanel(NULL), +	mParent(NULL) +{ +	mSavedFolderState = new LLSaveFolderState(); +	mSavedFolderState->setApply(FALSE); +} + +LLPanelOutfitsInventory::~LLPanelOutfitsInventory() +{ +	delete mSavedFolderState; +} + +// virtual +BOOL LLPanelOutfitsInventory::postBuild() +{ +	mInventoryPanel = getChild<LLInventoryPanel>("outfits_list"); +	mInventoryPanel->setFilterTypes(1LL << LLFolderType::FT_OUTFIT, TRUE); +	mInventoryPanel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS); +	mInventoryPanel->openDefaultFolderForType(LLFolderType::FT_MY_OUTFITS); +	mInventoryPanel->setSelectCallback(boost::bind(&LLPanelOutfitsInventory::onSelectionChange, this, _1, _2)); +	 +	initListCommandsHandlers(); +	return TRUE; +} + +void LLPanelOutfitsInventory::updateParent() +{ +	if (mParent) +	{ +		mParent->updateVerbs(); +	} +} + +void LLPanelOutfitsInventory::setParent(LLSidepanelAppearance* parent) +{ +	mParent = parent; +} + +// virtual +void LLPanelOutfitsInventory::onSearchEdit(const std::string& string) +{ +	if (string == "") +	{ +		mInventoryPanel->setFilterSubString(LLStringUtil::null); + +		// re-open folders that were initially open +		mSavedFolderState->setApply(TRUE); +		getRootFolder()->applyFunctorRecursively(*mSavedFolderState); +		LLOpenFoldersWithSelection opener; +		getRootFolder()->applyFunctorRecursively(opener); +		getRootFolder()->scrollToShowSelection(); +	} + +	gInventory.startBackgroundFetch(); + +	if (mInventoryPanel->getFilterSubString().empty() && string.empty()) +	{ +		// current filter and new filter empty, do nothing +		return; +	} + +	// save current folder open state if no filter currently applied +	if (getRootFolder()->getFilterSubString().empty()) +	{ +		mSavedFolderState->setApply(FALSE); +		getRootFolder()->applyFunctorRecursively(*mSavedFolderState); +	} + +	// set new filter string +	mInventoryPanel->setFilterSubString(string); +} + +void LLPanelOutfitsInventory::onWear() +{ +	LLFolderViewEventListener* listenerp = getCorrectListenerForAction(); +	if (listenerp) +	{ +		listenerp->performAction(NULL, NULL,"replaceoutfit"); +	} +} + +void LLPanelOutfitsInventory::onEdit() +{ +} + +void LLPanelOutfitsInventory::onNew() +{ +	const std::string& outfit_name = LLViewerFolderType::lookupNewCategoryName(LLFolderType::FT_OUTFIT); +	LLUUID outfit_folder = gAgentWearables.makeNewOutfitLinks(outfit_name); +	getRootFolder()->setSelectionByID(outfit_folder, TRUE); +	getRootFolder()->setNeedsAutoRename(TRUE); +} + +void LLPanelOutfitsInventory::onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action) +{ +	updateParent(); +} + +void LLPanelOutfitsInventory::onSelectorButtonClicked() +{ +	/* +	  LLFolderViewItem* cur_item = getRootFolder()->getCurSelectedItem(); + +	  LLFolderViewEventListener* listenerp = cur_item->getListener(); +	  if (getIsCorrectType(listenerp)) +	  { +	  LLSD key; +	  key["type"] = "look"; +	  key["id"] = listenerp->getUUID(); + +	  LLSideTray::getInstance()->showPanel("sidepanel_appearance", key); +	  }  +	*/ +} + +LLFolderViewEventListener *LLPanelOutfitsInventory::getCorrectListenerForAction() +{ +	LLFolderViewItem* current_item = getRootFolder()->getCurSelectedItem(); +	if (!current_item) +		return NULL; + +	LLFolderViewEventListener* listenerp = current_item->getListener(); +	if (getIsCorrectType(listenerp)) +	{ +		return listenerp; +	} +	return NULL; +} + +bool LLPanelOutfitsInventory::getIsCorrectType(const LLFolderViewEventListener *listenerp) const +{ +	if (listenerp->getInventoryType() == LLInventoryType::IT_CATEGORY) +	{ +		LLViewerInventoryCategory *cat = gInventory.getCategory(listenerp->getUUID()); +		if (cat && cat->getPreferredType() == LLFolderType::FT_OUTFIT) +		{ +			return true; +		} +	} +	return false; +} + +LLFolderView *LLPanelOutfitsInventory::getRootFolder() +{ +	return mInventoryPanel->getRootFolder(); +} + +////////////////////////////////////////////////////////////////////////////////// +// List Commands                                                                // + +void LLPanelOutfitsInventory::initListCommandsHandlers() +{ +	mListCommands = getChild<LLPanel>("bottom_panel"); + +	mListCommands->childSetAction("options_gear_btn", boost::bind(&LLPanelOutfitsInventory::onGearButtonClick, this)); +	mListCommands->childSetAction("trash_btn", boost::bind(&LLPanelOutfitsInventory::onTrashButtonClick, this)); +	mListCommands->childSetAction("add_btn", boost::bind(&LLPanelOutfitsInventory::onAddButtonClick, this)); + +	LLDragAndDropButton* trash_btn = mListCommands->getChild<LLDragAndDropButton>("trash_btn"); +	trash_btn->setDragAndDropHandler(boost::bind(&LLPanelOutfitsInventory::handleDragAndDropToTrash, this +			,	_4 // BOOL drop +			,	_5 // EDragAndDropType cargo_type +			,	_7 // EAcceptance* accept +			)); + +	mCommitCallbackRegistrar.add("panel_outfits_inventory_gear_default.Custom.Action", boost::bind(&LLPanelOutfitsInventory::onCustomAction, this, _2)); +	mEnableCallbackRegistrar.add("panel_outfits_inventory_gear_default.Enable", boost::bind(&LLPanelOutfitsInventory::isActionEnabled, this, _2)); +	mMenuGearDefault = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("panel_outfits_inventory_gear_default.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); +} + +void LLPanelOutfitsInventory::updateListCommands() +{ +	bool trash_enabled = isActionEnabled("delete"); + +	mListCommands->childSetEnabled("trash_btn", trash_enabled); +} + +void LLPanelOutfitsInventory::onGearButtonClick() +{ +	showActionMenu(mMenuGearDefault,"options_gear_btn"); +} + +void LLPanelOutfitsInventory::onAddButtonClick() +{ +	onNew(); +} + +void LLPanelOutfitsInventory::showActionMenu(LLMenuGL* menu, std::string spawning_view_name) +{ +	if (menu) +	{ +		menu->buildDrawLabels(); +		menu->updateParent(LLMenuGL::sMenuContainer); +		LLView* spawning_view = getChild<LLView> (spawning_view_name); +		S32 menu_x, menu_y; +		//show menu in co-ordinates of panel +		spawning_view->localPointToOtherView(0, spawning_view->getRect().getHeight(), &menu_x, &menu_y, this); +		menu_y += menu->getRect().getHeight(); +		LLMenuGL::showPopup(this, menu, menu_x, menu_y); +	} +} + +void LLPanelOutfitsInventory::onTrashButtonClick() +{ +	onClipboardAction("delete"); +} + +void LLPanelOutfitsInventory::onClipboardAction(const LLSD& userdata) +{ +	std::string command_name = userdata.asString(); +	getActivePanel()->getRootFolder()->doToSelected(getActivePanel()->getModel(),command_name); +} + +void LLPanelOutfitsInventory::onCustomAction(const LLSD& userdata) +{ +	if (!isActionEnabled(userdata)) +		return; + +	const std::string command_name = userdata.asString(); +	if (command_name == "new") +	{ +		onNew(); +	} +	if (command_name == "edit") +	{ +		onEdit(); +	} +	if (command_name == "wear") +	{ +		onWear(); +	} +	if (command_name == "delete") +	{ +		onClipboardAction("delete"); +	} +} + +BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata) +{ +	const std::string command_name = userdata.asString(); +	if (command_name == "delete") +	{ +		BOOL can_delete = FALSE; +		LLFolderView *folder = getActivePanel()->getRootFolder(); +		if (folder) +		{ +			can_delete = TRUE; +			std::set<LLUUID> selection_set; +			folder->getSelectionList(selection_set); +			for (std::set<LLUUID>::iterator iter = selection_set.begin(); +				 iter != selection_set.end(); +				 ++iter) +			{ +				const LLUUID &item_id = (*iter); +				LLFolderViewItem *item = folder->getItemByID(item_id); +				can_delete &= item->getListener()->isItemRemovable(); +			} +			return can_delete; +		} +		return FALSE; +	} +	if (command_name == "edit" ||  +		command_name == "wear") +	{ +		return (getCorrectListenerForAction() != NULL); +	} +	return TRUE; +} + +bool LLPanelOutfitsInventory::handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept) +{ +	*accept = ACCEPT_NO; + +	const bool is_enabled = isActionEnabled("delete"); +	if (is_enabled) *accept = ACCEPT_YES_MULTI; + +	if (is_enabled && drop) +	{ +		onClipboardAction("delete"); +	} +	return true; +} + +// List Commands                                                              // +//////////////////////////////////////////////////////////////////////////////// + diff --git a/indra/newview/llpaneloutfitsinventory.h b/indra/newview/llpaneloutfitsinventory.h new file mode 100644 index 0000000000..4d903a389b --- /dev/null +++ b/indra/newview/llpaneloutfitsinventory.h @@ -0,0 +1,102 @@ +/** + * @file llpaneloutfitsinventory.h + * @brief Outfits inventory panel + * class definition + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + * + * Copyright (c) 2001-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab.  Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLPANELOUTFITSINVENTORY_H +#define LL_LLPANELOUTFITSINVENTORY_H + +#include "llpanel.h" +#include "llinventoryobserver.h" + +class LLFolderView; +class LLFolderViewItem; +class LLFolderViewEventListener; +class LLInventoryPanel; +class LLSaveFolderState; +class LLButton; +class LLMenuGL; +class LLSidepanelAppearance; + +class LLPanelOutfitsInventory : public LLPanel +{ +public: +	LLPanelOutfitsInventory(); +	virtual ~LLPanelOutfitsInventory(); + +	/*virtual*/ BOOL postBuild(); +	 +	void onSearchEdit(const std::string& string); +	void onWear(); +	void onEdit(); +	void onNew(); + +	void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action); +	void onSelectorButtonClicked(); + +	LLInventoryPanel* getActivePanel() { return mInventoryPanel; } + +	// If a compatible listener type is selected, then return a pointer to that. +	// Otherwise, return NULL. +	LLFolderViewEventListener* getCorrectListenerForAction(); +	void setParent(LLSidepanelAppearance *parent); +protected: +	void updateParent(); +	bool getIsCorrectType(const LLFolderViewEventListener *listenerp) const; +	LLFolderView* getRootFolder(); + +private: +	LLSidepanelAppearance*      mParent; +	LLInventoryPanel*			mInventoryPanel; +	LLSaveFolderState*			mSavedFolderState; + + +	////////////////////////////////////////////////////////////////////////////////// +	// List Commands                                                                // +protected: +	void initListCommandsHandlers(); +	void updateListCommands(); +	void onGearButtonClick(); +	void onAddButtonClick(); +	void showActionMenu(LLMenuGL* menu, std::string spawning_view_name); +	void onTrashButtonClick(); +	void onClipboardAction(const LLSD& userdata); +	BOOL isActionEnabled(const LLSD& command_name); +	void onCustomAction(const LLSD& command_name); +	bool handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept); +private: +	LLPanel*					mListCommands; +	LLMenuGL*					mMenuGearDefault; +	LLMenuGL*					mMenuAdd; +	//                                                                            // +	//////////////////////////////////////////////////////////////////////////////// +}; + +#endif //LL_LLPANELOUTFITSINVENTORY_H diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp index 04b4226f82..10b90b08d7 100644 --- a/indra/newview/llpanelpicks.cpp +++ b/indra/newview/llpanelpicks.cpp @@ -230,6 +230,8 @@ void LLPanelPicks::processProperties(void* data, EAvatarProcessorType type)  			updateButtons();  		}  	} +	if(!mPicksList->size() && !mClassifiedsList->size()) +		childSetVisible("empty_picks_panel_text", true);  }  LLPickItem* LLPanelPicks::getSelectedPickItem() diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp index 963d39de8a..6ba3790fe2 100644 --- a/indra/newview/llpanelplaceinfo.cpp +++ b/indra/newview/llpanelplaceinfo.cpp @@ -57,7 +57,11 @@ LLPanelPlaceInfo::LLPanelPlaceInfo()  :	LLPanel(),  	mParcelID(),  	mRequestedID(), -	mPosRegion() +	mPosRegion(), +	mScrollingPanelMinHeight(0), +	mScrollingPanelWidth(0), +	mScrollingPanel(NULL), +	mScrollContainer(NULL)  {}  //virtual @@ -83,6 +87,12 @@ BOOL LLPanelPlaceInfo::postBuild()  	mMaturityRatingIcon = getChild<LLIconCtrl>("maturity_icon");  	mMaturityRatingText = getChild<LLTextBox>("maturity_value"); +	mScrollingPanel = getChild<LLPanel>("scrolling_panel"); +	mScrollContainer = getChild<LLScrollContainer>("place_scroll"); + +	mScrollingPanelMinHeight = mScrollContainer->getScrolledViewRect().getHeight(); +	mScrollingPanelWidth = mScrollingPanel->getRect().getWidth(); +  	return TRUE;  } @@ -231,6 +241,27 @@ void LLPanelPlaceInfo::processParcelInfo(const LLParcelData& parcel_data)  }  // virtual +void LLPanelPlaceInfo::reshape(S32 width, S32 height, BOOL called_from_parent) +{ +	LLPanel::reshape(width, height, called_from_parent); + +	if (!mScrollContainer || !mScrollingPanel) +		return; + +	static LLUICachedControl<S32> scrollbar_size ("UIScrollbarSize", 0); + +	S32 scroll_height = mScrollContainer->getRect().getHeight(); +	if (mScrollingPanelMinHeight >= scroll_height) +	{ +		mScrollingPanel->reshape(mScrollingPanelWidth, mScrollingPanelMinHeight); +	} +	else +	{ +		mScrollingPanel->reshape(mScrollingPanelWidth + scrollbar_size, scroll_height); +	} +} + +// virtual  void LLPanelPlaceInfo::handleVisibilityChange(BOOL new_visibility)  {  	LLPanel::handleVisibilityChange(new_visibility); diff --git a/indra/newview/llpanelplaceinfo.h b/indra/newview/llpanelplaceinfo.h index 133933a880..b9bf92b534 100644 --- a/indra/newview/llpanelplaceinfo.h +++ b/indra/newview/llpanelplaceinfo.h @@ -45,6 +45,7 @@ class LLIconCtrl;  class LLInventoryItem;  class LLPanelPickEdit;  class LLParcel; +class LLScrollContainer;  class LLTextBox;  class LLTextureCtrl;  class LLViewerRegion; @@ -92,6 +93,7 @@ public:  	/*virtual*/ void processParcelInfo(const LLParcelData& parcel_data); +	/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);  	/*virtual*/ void handleVisibilityChange (BOOL new_visibility);  	// Create a pick for the location specified @@ -110,8 +112,12 @@ protected:  	LLUUID					mRequestedID;  	LLVector3				mPosRegion;  	std::string				mCurrentTitle; +	S32						mScrollingPanelMinHeight; +	S32						mScrollingPanelWidth;  	INFO_TYPE 				mInfoType; +	LLScrollContainer*		mScrollContainer; +	LLPanel*				mScrollingPanel;  	LLTextBox*				mTitle;  	LLTextureCtrl*			mSnapshotCtrl;  	LLTextBox*				mRegionName; diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp index eb10d97b37..257a21ca15 100644 --- a/indra/newview/llpanelplaces.cpp +++ b/indra/newview/llpanelplaces.cpp @@ -80,7 +80,6 @@ static const std::string TELEPORT_HISTORY_INFO_TYPE	= "teleport_history";  // Helper functions  static bool is_agent_in_selected_parcel(LLParcel* parcel);  static void onSLURLBuilt(std::string& slurl); -static void setAllChildrenVisible(LLView* view, BOOL visible);  //Observer classes  class LLPlacesParcelObserver : public LLParcelObserver @@ -223,7 +222,7 @@ BOOL LLPanelPlaces::postBuild()  	notes_editor->setKeystrokeCallback(boost::bind(&LLPanelPlaces::onEditButtonClicked, this));  	LLComboBox* folder_combo = mLandmarkInfo->getChild<LLComboBox>("folder_combo"); -	folder_combo->setSelectionCallback(boost::bind(&LLPanelPlaces::onEditButtonClicked, this)); +	folder_combo->setCommitCallback(boost::bind(&LLPanelPlaces::onEditButtonClicked, this));  	return TRUE;  } @@ -700,8 +699,6 @@ void LLPanelPlaces::onBackButtonClicked()  void LLPanelPlaces::togglePickPanel(BOOL visible)  { -	setAllChildrenVisible(this, !visible); -  	if (mPickPanel)  		mPickPanel->setVisible(visible);  } @@ -911,16 +908,3 @@ static void onSLURLBuilt(std::string& slurl)  	LLNotifications::instance().add("CopySLURL", args);  } - -static void setAllChildrenVisible(LLView* view, BOOL visible) -{ -	const LLView::child_list_t* children = view->getChildList(); -	for (LLView::child_list_const_iter_t child_it = children->begin(); child_it != children->end(); ++child_it) -	{ -		LLView* child = *child_it; -		if (child->getParent() == view) -		{ -			child->setVisible(visible); -		} -	} -} diff --git a/indra/newview/llscrollingpanelparam.cpp b/indra/newview/llscrollingpanelparam.cpp index 1fbaeb94f5..b5e55df1f5 100644 --- a/indra/newview/llscrollingpanelparam.cpp +++ b/indra/newview/llscrollingpanelparam.cpp @@ -73,9 +73,9 @@ LLScrollingPanelParam::LLScrollingPanelParam( const LLPanel::Params& panel_param  	F32 min_weight = param->getMinWeight();  	F32 max_weight = param->getMaxWeight(); -	mHintMin = new LLVisualParamHint( pos_x, pos_y, PARAM_HINT_WIDTH, PARAM_HINT_HEIGHT, mesh, param,  min_weight); +	mHintMin = new LLVisualParamHint( pos_x, pos_y, PARAM_HINT_WIDTH, PARAM_HINT_HEIGHT, mesh, (LLViewerVisualParam*) wearable->getVisualParam(param->getID()),  min_weight);  	pos_x += PARAM_HINT_WIDTH + 3 * BTN_BORDER; -	mHintMax = new LLVisualParamHint( pos_x, pos_y, PARAM_HINT_WIDTH, PARAM_HINT_HEIGHT, mesh, param, max_weight ); +	mHintMax = new LLVisualParamHint( pos_x, pos_y, PARAM_HINT_WIDTH, PARAM_HINT_HEIGHT, mesh, (LLViewerVisualParam*) wearable->getVisualParam(param->getID()), max_weight );  	mHintMin->setAllowsUpdates( FALSE );  	mHintMax->setAllowsUpdates( FALSE ); diff --git a/indra/newview/llsearchcombobox.cpp b/indra/newview/llsearchcombobox.cpp index f95671685b..93a70b6471 100644 --- a/indra/newview/llsearchcombobox.cpp +++ b/indra/newview/llsearchcombobox.cpp @@ -82,7 +82,7 @@ LLSearchComboBox::LLSearchComboBox(const Params&p)  	setButtonVisible(p.dropdown_button_visible);  	mTextEntry->setCommitCallback(boost::bind(&LLComboBox::onTextCommit, this, _2));  	mTextEntry->setKeystrokeCallback(boost::bind(&LLComboBox::onTextEntry, this, _1), NULL); -	setSelectionCallback(boost::bind(&LLSearchComboBox::onSelectionCommit, this)); +	setCommitCallback(boost::bind(&LLSearchComboBox::onSelectionCommit, this));  	setPrearrangeCallback(boost::bind(&LLSearchComboBox::onSearchPrearrange, this, _2));  	mSearchButton->setCommitCallback(boost::bind(&LLSearchComboBox::onTextCommit, this, _2));  } diff --git a/indra/newview/llsearchhistory.h b/indra/newview/llsearchhistory.h index 253ef21e9e..eb6efdb86f 100644 --- a/indra/newview/llsearchhistory.h +++ b/indra/newview/llsearchhistory.h @@ -34,12 +34,15 @@  #define LL_LLSEARCHHISTORY_H  #include "llsingleton.h" +#include "llui.h" +  /**   * Search history container able to save and load history from file.   * History is stored in chronological order, most recent at the beginning.   */ -class LLSearchHistory : public LLSingleton<LLSearchHistory> +class LLSearchHistory : public LLSingleton<LLSearchHistory>, private LLDestroyClass<LLSearchHistory>  { +	friend class LLDestroyClass<LLSearchHistory>;  public:  	// Forward declaration @@ -130,6 +133,12 @@ protected:  private: +	// Implementation of LLDestroyClass<LLSearchHistory> +	static void destroyClass() +	{ +		LLSearchHistory::getInstance()->save(); +	} +  	search_history_list_t mSearchHistory;  }; diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp new file mode 100644 index 0000000000..aeab3e2876 --- /dev/null +++ b/indra/newview/llsidepanelappearance.cpp @@ -0,0 +1,372 @@ +/** + * @file llsidepanelappearance.cpp + * @brief Side Bar "Appearance" panel + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + * + * Copyright (c) 2004-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab.  Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" +#include "llsidepanelappearance.h" + +#include "llagent.h" +#include "llagentwearables.h" +#include "llfiltereditor.h" +#include "llfloaterreg.h" +#include "llfloaterworldmap.h" +#include "llpaneleditwearable.h" +#include "llpaneloutfitsinventory.h" +#include "lltextbox.h" +#include "lluictrlfactory.h" +#include "llviewerregion.h" +#include "llvoavatarself.h" +#include "llwearable.h" + +static LLRegisterPanelClassWrapper<LLSidepanelAppearance> t_appearance("sidepanel_appearance"); + +class LLCurrentlyWornFetchObserver : public LLInventoryFetchObserver +{ +public: +	LLCurrentlyWornFetchObserver(LLSidepanelAppearance *panel) : +		mPanel(panel) +	{} +	~LLCurrentlyWornFetchObserver() {} +	virtual void done() +	{ +		mPanel->inventoryFetched(); +		gInventory.removeObserver(this); +	} +private: +	LLSidepanelAppearance *mPanel; +}; + +LLSidepanelAppearance::LLSidepanelAppearance() : +	LLPanel(), +	mFilterSubString(LLStringUtil::null), +	mFilterEditor(NULL), +	mLookInfo(NULL), +	mCurrLookPanel(NULL) +{ +	//LLUICtrlFactory::getInstance()->buildPanel(this, "panel_appearance.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder() +	mFetchWorn = new LLCurrentlyWornFetchObserver(this); +} + +LLSidepanelAppearance::~LLSidepanelAppearance() +{ +} + +// virtual +BOOL LLSidepanelAppearance::postBuild() +{ +	mEditAppearanceBtn = getChild<LLButton>("editappearance_btn"); +	mEditAppearanceBtn->setClickedCallback(boost::bind(&LLSidepanelAppearance::onEditAppearanceButtonClicked, this)); + +	mWearBtn = getChild<LLButton>("wear_btn"); +	mWearBtn->setClickedCallback(boost::bind(&LLSidepanelAppearance::onWearButtonClicked, this)); + +	mEditBtn = getChild<LLButton>("edit_btn"); +	mEditBtn->setClickedCallback(boost::bind(&LLSidepanelAppearance::onEditButtonClicked, this)); + +	mNewLookBtn = getChild<LLButton>("newlook_btn"); +	mNewLookBtn->setClickedCallback(boost::bind(&LLSidepanelAppearance::onNewOutfitButtonClicked, this)); +	mNewLookBtn->setEnabled(false); + +	mOverflowBtn = getChild<LLButton>("overflow_btn"); + +	mFilterEditor = getChild<LLFilterEditor>("Filter"); +	if (mFilterEditor) +	{ +		mFilterEditor->setCommitCallback(boost::bind(&LLSidepanelAppearance::onFilterEdit, this, _2)); +	} + +	mPanelOutfitsInventory = dynamic_cast<LLPanelOutfitsInventory *>(getChild<LLPanel>("panel_outfits_inventory")); +	mPanelOutfitsInventory->setParent(this); + +	mLookInfo = dynamic_cast<LLPanelLookInfo*>(getChild<LLPanel>("panel_look_info")); +	if (mLookInfo) +	{ +		LLButton* back_btn = mLookInfo->getChild<LLButton>("back_btn"); +		if (back_btn) +		{ +			back_btn->setClickedCallback(boost::bind(&LLSidepanelAppearance::onBackButtonClicked, this)); +		} + +		// *TODO: Assign the action to an appropriate event. +		// mOverflowBtn->setClickedCallback(boost::bind(&LLSidepanelAppearance::toggleMediaPanel, this)); +	} + +	mEditWearable = dynamic_cast<LLPanelEditWearable*>(getChild<LLPanel>("panel_edit_wearable")); +	if (mEditWearable) +	{ +		LLButton* edit_wearable_back_btn = mEditWearable->getChild<LLButton>("back_btn"); +		if (edit_wearable_back_btn) +		{ +			edit_wearable_back_btn->setClickedCallback(boost::bind(&LLSidepanelAppearance::onEditWearBackClicked, this)); +		} +	} + +	mCurrentLookName = getChild<LLTextBox>("currentlook_name"); +	 +	mCurrLookPanel = getChild<LLPanel>("panel_currentlook"); + +	return TRUE; +} + +// virtual +void LLSidepanelAppearance::onOpen(const LLSD& key) +{ +	fetchInventory(); +	refreshCurrentOutfitName(); + +	if(key.size() == 0) +		return; + +	toggleLookInfoPanel(TRUE); +	updateVerbs(); +	 +	mLookInfoType = key["type"].asString(); + +	if (mLookInfoType == "look") +	{ +		LLInventoryCategory *pLook = gInventory.getCategory(key["id"].asUUID()); +		if (pLook) +			mLookInfo->displayLookInfo(pLook); +	} +} + +void LLSidepanelAppearance::onFilterEdit(const std::string& search_string) +{ +	if (mFilterSubString != search_string) +	{ +		mFilterSubString = search_string; + +		// Searches are case-insensitive +		LLStringUtil::toUpper(mFilterSubString); +		LLStringUtil::trimHead(mFilterSubString); + +		mPanelOutfitsInventory->onSearchEdit(mFilterSubString); +	} +} + +void LLSidepanelAppearance::onWearButtonClicked() +{ +	if (!mLookInfo->getVisible()) +	{ +		mPanelOutfitsInventory->onWear(); +	} +} + +void LLSidepanelAppearance::onEditAppearanceButtonClicked() +{ +	if (gAgentWearables.areWearablesLoaded()) +	{ +		gAgent.changeCameraToCustomizeAvatar(); +	} +} + +void LLSidepanelAppearance::onEditButtonClicked() +{ +	toggleLookInfoPanel(FALSE); +	toggleWearableEditPanel(TRUE, NULL); +	/*if (mLookInfo->getVisible()) +	  { +	  } +	  else +	  { +	  mPanelOutfitsInventory->onEdit(); +	  }*/ +} + +void LLSidepanelAppearance::onNewOutfitButtonClicked() +{ +	if (!mLookInfo->getVisible()) +	{ +		mPanelOutfitsInventory->onNew(); +	} +} + + +void LLSidepanelAppearance::onBackButtonClicked() +{ +	toggleLookInfoPanel(FALSE); +} + +void LLSidepanelAppearance::onEditWearBackClicked() +{ +	mEditWearable->saveChanges(); +	toggleWearableEditPanel(FALSE, NULL); +	toggleLookInfoPanel(TRUE); +} + +void LLSidepanelAppearance::toggleLookInfoPanel(BOOL visible) +{ +	if (!mLookInfo) +		return; + +	mLookInfo->setVisible(visible); +	mPanelOutfitsInventory->setVisible(!visible); +	mFilterEditor->setVisible(!visible); +	mWearBtn->setVisible(!visible); +	mEditBtn->setVisible(!visible); +	mNewLookBtn->setVisible(!visible); +	mOverflowBtn->setVisible(!visible); +	mCurrLookPanel->setVisible(!visible); +} + +void LLSidepanelAppearance::toggleWearableEditPanel(BOOL visible, LLWearable *wearable) +{ +	if (!wearable) +	{ +		wearable = gAgentWearables.getWearable(WT_SHAPE, 0); +	} +	if (!mEditWearable || !wearable) +	{ +		return; +	} + +	mEditWearable->setVisible(visible); +	mFilterEditor->setVisible(!visible); +	mPanelOutfitsInventory->setVisible(!visible); +} + +void LLSidepanelAppearance::updateVerbs() +{ +	bool is_look_info_visible = mLookInfo->getVisible(); +	mOverflowBtn->setEnabled(false); + +	if (!is_look_info_visible) +	{ +		const bool is_correct_type = (mPanelOutfitsInventory->getCorrectListenerForAction() != NULL); +		mEditBtn->setEnabled(is_correct_type); +		mWearBtn->setEnabled(is_correct_type); +	} +	else +	{ +		mEditBtn->setEnabled(FALSE); +		mWearBtn->setEnabled(FALSE); +	} +} + +void LLSidepanelAppearance::refreshCurrentOutfitName(const std::string name) +{ +	if (name == "") +	{ +		const LLUUID current_outfit_cat = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); +		LLInventoryModel::cat_array_t cat_array; +		LLInventoryModel::item_array_t item_array; +		// Can't search on AT_OUTFIT since links to categories return AT_CATEGORY for type since they don't +		// return preferred type. +		LLIsType is_category( LLAssetType::AT_CATEGORY );  +		gInventory.collectDescendentsIf(current_outfit_cat, +										cat_array, +										item_array, +										false, +										is_category, +										false); +		for (LLInventoryModel::item_array_t::const_iterator iter = item_array.begin(); +			 iter != item_array.end(); +			 iter++) +		{ +			const LLViewerInventoryItem *item = (*iter); +			const LLViewerInventoryCategory *cat = item->getLinkedCategory(); +			if (cat && cat->getPreferredType() == LLFolderType::FT_OUTFIT) +			{ +				mCurrentLookName->setText(cat->getName()); +				return; +			} +		} +		mCurrentLookName->setText(std::string("")); +	} +	else +	{ +		mCurrentLookName->setText(name); +	} +} + +//static +void LLSidepanelAppearance::editWearable(LLWearable *wearable, void *data) +{ +	LLSidepanelAppearance *panel = (LLSidepanelAppearance*) data; +	panel->toggleLookInfoPanel(FALSE); +	panel->toggleWearableEditPanel(TRUE, wearable); +} + +// Fetch currently worn items and only enable the New Look button after everything's been +// fetched.  Alternatively, we could stuff this logic into llagentwearables::makeNewOutfitLinks. +void LLSidepanelAppearance::fetchInventory() +{ + +	mNewLookBtn->setEnabled(false); +	LLInventoryFetchObserver::item_ref_t ids; +	LLUUID item_id; +	for(S32 type = (S32)WT_SHAPE; type < (S32)WT_COUNT; ++type) +	{ +		// MULTI_WEARABLE: +		item_id = gAgentWearables.getWearableItemID((EWearableType)type,0); +		if(item_id.notNull()) +		{ +			ids.push_back(item_id); +		} +	} + +	LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); +	if( avatar ) +	{ +		for (LLVOAvatar::attachment_map_t::const_iterator iter = avatar->mAttachmentPoints.begin();  +			 iter != avatar->mAttachmentPoints.end(); ++iter) +		{ +			LLViewerJointAttachment* attachment = iter->second; +			if (!attachment) continue; +			for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin(); +				 attachment_iter != attachment->mAttachedObjects.end(); +				 ++attachment_iter) +			{ +				LLViewerObject* attached_object = (*attachment_iter); +				if (!attached_object) continue; +				const LLUUID& item_id = attached_object->getItemID(); +				if (item_id.isNull()) continue; +				ids.push_back(item_id); +			} +		} +	} + +	mFetchWorn->fetchItems(ids); +	// If no items to be fetched, done will never be triggered. +	// TODO: Change LLInventoryFetchObserver::fetchItems to trigger done() on this condition. +	if (mFetchWorn->isEverythingComplete()) +	{ +		mFetchWorn->done(); +	} +	else +	{ +		gInventory.addObserver(mFetchWorn); +	} +} + +void LLSidepanelAppearance::inventoryFetched() +{ +	mNewLookBtn->setEnabled(true); +} diff --git a/indra/newview/llsidepanelappearance.h b/indra/newview/llsidepanelappearance.h new file mode 100644 index 0000000000..496a1fef72 --- /dev/null +++ b/indra/newview/llsidepanelappearance.h @@ -0,0 +1,102 @@ +/**  + * @file llsidepanelappearance.h + * @brief Side Bar "Appearance" panel + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + *  + * Copyright (c) 2004-2009, Linden Research, Inc. + *  + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab.  Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + *  + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception + *  + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + *  + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLSIDEPANELAPPEARANCE_H +#define LL_LLSIDEPANELAPPEARANCE_H + +#include "llpanel.h" +#include "llinventoryobserver.h" + +#include "llinventory.h" +#include "llpanellookinfo.h" + +class LLFilterEditor; +class LLCurrentlyWornFetchObserver; +class LLPanelEditWearable; +class LLWearable; +class LLPanelOutfitsInventory; + +class LLSidepanelAppearance : public LLPanel +{ +public: +	LLSidepanelAppearance(); +	virtual ~LLSidepanelAppearance(); + +	/*virtual*/ BOOL postBuild(); +	/*virtual*/ void onOpen(const LLSD& key); + +	void refreshCurrentOutfitName(const std::string name = ""); + +	static void editWearable(LLWearable *wearable, void *data); + +	void fetchInventory(); +	void inventoryFetched(); +	void updateVerbs(); + +private: +	void onFilterEdit(const std::string& search_string); + +	void onEditAppearanceButtonClicked(); +	void onWearButtonClicked(); +	void onEditButtonClicked(); +	void onNewOutfitButtonClicked(); +	void onBackButtonClicked(); +	void onEditWearBackClicked(); +	void toggleLookInfoPanel(BOOL visible); +	void toggleWearableEditPanel(BOOL visible, LLWearable* wearable); + +	LLFilterEditor*			mFilterEditor; +	LLPanelOutfitsInventory* mPanelOutfitsInventory; +	LLPanelLookInfo*		mLookInfo; +	LLPanelEditWearable*	mEditWearable; + +	LLButton*					mEditAppearanceBtn; +	LLButton*					mWearBtn; +	LLButton*					mEditBtn; +	LLButton*					mNewLookBtn; +	LLButton*					mOverflowBtn; +	LLPanel*					mCurrLookPanel; + +	LLTextBox*					mCurrentLookName; + +	// Used to make sure the user's inventory is in memory. +	LLCurrentlyWornFetchObserver* mFetchWorn; + +	// Search string for filtering landmarks and teleport +	// history locations +	std::string					mFilterSubString; + +	// Information type currently shown in Look Information panel +	std::string					mLookInfoType; + +}; + +#endif //LL_LLSIDEPANELAPPEARANCE_H diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index 6aa5c53194..58962b67d6 100644 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -46,7 +46,8 @@ static LLRegisterPanelClassWrapper<LLSidepanelInventory> t_inventory("sidepanel_  LLSidepanelInventory::LLSidepanelInventory()
  	:	LLPanel(),
 -		mItemPanel(NULL)
 +		mItemPanel(NULL),
 +		mPanelMainInventory(NULL)
  {
  	//LLUICtrlFactory::getInstance()->buildPanel(this, "panel_inventory.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
 @@ -80,8 +81,8 @@ BOOL LLSidepanelInventory::postBuild()  		mOverflowBtn = mInventoryPanel->getChild<LLButton>("overflow_btn");
  		mOverflowBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onOverflowButtonClicked, this));
 -		LLPanelMainInventory *panel_main_inventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory");
 -		panel_main_inventory->setSelectCallback(boost::bind(&LLSidepanelInventory::onSelectionChange, this, _1, _2));
 +		mPanelMainInventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory");
 +		mPanelMainInventory->setSelectCallback(boost::bind(&LLSidepanelInventory::onSelectionChange, this, _1, _2));
  	}
  	// UI elements from item panel
 @@ -127,6 +128,10 @@ void LLSidepanelInventory::onOpen(const LLSD& key)  			mTaskPanel->setObjectSelection(LLSelectMgr::getInstance()->getSelection());
  		showTaskInfoPanel();
  	}
 +	if (key.has("select"))
 +	{
 +		mPanelMainInventory->getPanel()->setSelection(key["select"].asUUID(), TAKE_FOCUS_NO);
 +	}
  }
  void LLSidepanelInventory::onInfoButtonClicked()
 diff --git a/indra/newview/llsidepanelinventory.h b/indra/newview/llsidepanelinventory.h index 681af7fafa..9eba77b5c3 100644 --- a/indra/newview/llsidepanelinventory.h +++ b/indra/newview/llsidepanelinventory.h @@ -68,6 +68,7 @@ private:  	LLPanel*					mInventoryPanel; // Main inventory view
  	LLSidepanelItemInfo*		mItemPanel; // Individual item view
  	LLSidepanelTaskInfo*		mTaskPanel; // Individual in-world object view
 +	LLPanelMainInventory*		mPanelMainInventory;
  protected:
  	void 						onInfoButtonClicked();
 diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp index 95fed37c30..539536b527 100644 --- a/indra/newview/llsyswellwindow.cpp +++ b/indra/newview/llsyswellwindow.cpp @@ -332,7 +332,9 @@ void LLSysWellWindow::reshapeWindow()  		new_window_height = MAX_WINDOW_HEIGHT;  	}  	S32 newY = curRect.mTop + new_window_height - curRect.getHeight(); -	curRect.setLeftTopAndSize(curRect.mLeft, newY, MIN_WINDOW_WIDTH, new_window_height); +	S32 newWidth = curRect.getWidth() < MIN_WINDOW_WIDTH ? MIN_WINDOW_WIDTH +			: curRect.getWidth(); +	curRect.setLeftTopAndSize(curRect.mLeft, newY, newWidth, new_window_height);  	reshape(curRect.getWidth(), curRect.getHeight(), TRUE);  	setRect(curRect); diff --git a/indra/newview/llsyswellwindow.h b/indra/newview/llsyswellwindow.h index cbc5f7358f..3e4cdbdcbe 100644 --- a/indra/newview/llsyswellwindow.h +++ b/indra/newview/llsyswellwindow.h @@ -39,12 +39,13 @@  #include "llbutton.h"  #include "llscreenchannel.h"  #include "llscrollcontainer.h" -#include "llchiclet.h"  #include "llimview.h"  #include "boost/shared_ptr.hpp"  class LLFlatListView; +class LLChiclet; +class LLIMChiclet;  class LLSysWellWindow : public LLDockableFloater, LLIMSessionObserver  { diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp index c33c652935..845e71378a 100644 --- a/indra/newview/lltexturecache.cpp +++ b/indra/newview/lltexturecache.cpp @@ -917,7 +917,7 @@ BOOL LLTextureCache::isInLocal(const LLUUID& id)  //static  const S32 MAX_REASONABLE_FILE_SIZE = 512*1024*1024; // 512 MB -F32 LLTextureCache::sHeaderCacheVersion = 1.3f; +F32 LLTextureCache::sHeaderCacheVersion = 1.4f;  U32 LLTextureCache::sCacheMaxEntries = MAX_REASONABLE_FILE_SIZE / TEXTURE_CACHE_ENTRY_SIZE;  S64 LLTextureCache::sCacheMaxTexturesSize = 0; // no limit  const char* entries_filename = "texture.entries"; diff --git a/indra/newview/lltoastgroupnotifypanel.cpp b/indra/newview/lltoastgroupnotifypanel.cpp index f82573f46c..d1bdcb1354 100644 --- a/indra/newview/lltoastgroupnotifypanel.cpp +++ b/indra/newview/lltoastgroupnotifypanel.cpp @@ -40,7 +40,7 @@  #include "lliconctrl.h"  #include "llinventoryfunctions.h"  #include "llnotify.h" -#include "lltextbox.h" +#include "llviewertexteditor.h"  #include "lluiconstants.h"  #include "llui.h" @@ -54,7 +54,7 @@  #include "llfloaterinventory.h"  #include "llinventorytype.h" -const S32 LLToastGroupNotifyPanel::DEFAULT_MESSAGE_MAX_LINE_COUNT	= 4; +const S32 LLToastGroupNotifyPanel::DEFAULT_MESSAGE_MAX_LINE_COUNT	= 7;  LLToastGroupNotifyPanel::LLToastGroupNotifyPanel(LLNotificationPtr& notification)  :	LLToastPanel(notification), @@ -84,11 +84,6 @@ LLToastGroupNotifyPanel::LLToastGroupNotifyPanel(LLNotificationPtr& notification  	//message body  	const std::string& message = payload["message"].asString(); - -	LLTextBox* pSubjectText = getChild<LLTextBox>("subject"); -	pSubjectText->setValue(subject); - -	LLTextBox* pDateTimeText = getChild<LLTextBox>("datetime");  	std::string timeStr = "["+LLTrans::getString("UTCTimeWeek")+"],["  							+LLTrans::getString("UTCTimeDay")+"] ["  							+LLTrans::getString("UTCTimeMth")+"] [" @@ -102,20 +97,23 @@ LLToastGroupNotifyPanel::LLToastGroupNotifyPanel(LLNotificationPtr& notification  	LLSD substitution;  	substitution["datetime"] = (S32) notice_date.secondsSinceEpoch();  	LLStringUtil::format(timeStr, substitution); -	pDateTimeText->setValue(timeStr); -	LLTextBox* pMessageText = getChild<LLTextBox>("message"); - -	//If message is empty let it be invisible and not take place at the panel -	if(message.size() != 0) -	{ -		pMessageText->setVisible(TRUE); -		pMessageText->setValue(message); -	} -	else -	{ -		pMessageText->setVisible(FALSE); -	} +	LLViewerTextEditor* pMessageText = getChild<LLViewerTextEditor>("message"); +	pMessageText->clear(); + +	LLStyle::Params style; +	LLFontGL* subject_font = LLFontGL::getFontByName(getString("subject_font")); +	if (subject_font)  +		style.font = subject_font; +	pMessageText->appendText(subject, FALSE, style); + +	LLFontGL* date_font = LLFontGL::getFontByName(getString("date_font")); +	if (date_font) +		style.font = date_font; +	pMessageText->appendText(timeStr + "\n", TRUE, style); +	 +	style.font = pMessageText->getDefaultFont(); +	pMessageText->appendText(message, TRUE, style);  	//attachment  	BOOL hasInventory = payload["inventory_offer"].isDefined(); diff --git a/indra/newview/lltoastimpanel.cpp b/indra/newview/lltoastimpanel.cpp index d2cc6d0726..9040bdb41a 100644 --- a/indra/newview/lltoastimpanel.cpp +++ b/indra/newview/lltoastimpanel.cpp @@ -64,7 +64,7 @@ LLToastIMPanel::LLToastIMPanel(LLToastIMPanel::Params &p) :	LLToastPanel(p.notif  		style_params.font.style ="ITALIC";  		mMessage->appendText(p.from + " ", FALSE, style_params); -		style_params.font.style = "UNDERLINE"; +		style_params.font.style = "ITALIC";  		mMessage->appendText(p.message.substr(3), FALSE, style_params);  	}  	else diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp index 48b68e4292..699424ef36 100644 --- a/indra/newview/lltoastnotifypanel.cpp +++ b/indra/newview/lltoastnotifypanel.cpp @@ -48,7 +48,6 @@ const LLFontGL* LLToastNotifyPanel::sFontSmall = NULL;  LLToastNotifyPanel::LLToastNotifyPanel(LLNotificationPtr& notification) :   LLToastPanel(notification),  mTextBox(NULL), -mIcon(NULL),  mInfoPanel(NULL),  mControlPanel(NULL),  mNumOptions(0), @@ -58,7 +57,6 @@ mAddedDefaultBtn(false)  	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_notification.xml");  	mInfoPanel = getChild<LLPanel>("info_panel");  	mControlPanel = getChild<LLPanel>("control_panel"); -	mIcon = getChild<LLIconCtrl>("info_icon");  	// customize panel's attributes  	// is it intended for displaying a tip @@ -94,26 +92,6 @@ mAddedDefaultBtn(false)  	// preliminary adjust panel's layout  	mIsTip ? adjustPanelForTipNotice() : adjustPanelForScriptNotice(form); -	// choose a right icon -	if (mIsTip) -	{ -		// use the tip notification icon -		mIcon->setValue("notify_tip_icon.tga"); -		LLRect icon_rect = mIcon->getRect(); -		icon_rect.setLeftTopAndSize(icon_rect.mLeft, getRect().getHeight() - VPAD, icon_rect.getWidth(), icon_rect.getHeight()); -		mIcon->setRect(icon_rect); -	} -	else if (mIsCaution) -	{ -		// use the caution notification icon -		mIcon->setValue("notify_caution_icon.tga"); -	} -	else -	{ -		// use the default notification icon -		mIcon->setValue("notify_box_icon.tga"); -	} -  	// adjust text options according to the notification type  	// add a caution textbox at the top of a caution notification  	if (mIsCaution && !mIsTip) diff --git a/indra/newview/lltoastnotifypanel.h b/indra/newview/lltoastnotifypanel.h index 66534edcdf..eea70705ec 100644 --- a/indra/newview/lltoastnotifypanel.h +++ b/indra/newview/lltoastnotifypanel.h @@ -73,7 +73,6 @@ private:  	// panel elements  	LLTextBase*		mTextBox; -	LLIconCtrl*		mIcon;  	LLPanel*		mInfoPanel;		// a panel, that contains an information  	LLPanel*		mControlPanel;	// a panel, that contains buttons (if present) diff --git a/indra/newview/lltoolmorph.cpp b/indra/newview/lltoolmorph.cpp index d7d7b5f44b..4fb75f7a49 100644 --- a/indra/newview/lltoolmorph.cpp +++ b/indra/newview/lltoolmorph.cpp @@ -146,8 +146,9 @@ void LLVisualParamHint::preRender(BOOL clear_depth)  {  	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	mLastParamWeight = avatarp->getVisualParamWeight(mVisualParam); -	avatarp->setVisualParamWeight(mVisualParam, mVisualParamWeight); +	mLastParamWeight = mVisualParam->getWeight(); +	mVisualParam->setWeight(mVisualParamWeight, FALSE); +	avatarp->setVisualParamWeight(mVisualParam->getID(), mVisualParamWeight, FALSE);  	avatarp->setVisualParamWeight("Blink_Left", 0.f);  	avatarp->setVisualParamWeight("Blink_Right", 0.f);  	avatarp->updateComposites(); @@ -242,7 +243,8 @@ BOOL LLVisualParamHint::render()  		gGL.setSceneBlendType(LLRender::BT_ALPHA);  		gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);  	} -	avatarp->setVisualParamWeight(mVisualParam, mLastParamWeight); +	avatarp->setVisualParamWeight(mVisualParam->getID(), mLastParamWeight); +	mVisualParam->setWeight(mLastParamWeight, FALSE);  	gGL.color4f(1,1,1,1);  	mGLTexturep->setGLTextureCreated(true);  	return TRUE; diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index 1d62ead843..089535dfab 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -1215,11 +1215,6 @@ void LLViewerInventoryItem::rename(const std::string& n)  const LLPermissions& LLViewerInventoryItem::getPermissions() const  { -	if (const LLViewerInventoryItem *linked_item = getLinkedItem()) -	{ -		return linked_item->getPermissions(); -	} -  	// Use the actual permissions of the symlink, not its parent.  	return LLInventoryItem::getPermissions();	  } diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 68a9aaef75..6a6aa1061d 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -5189,7 +5189,7 @@ void show_debug_menus()  		gMenuBarView->setItemEnabled("Develop", qamode);  		// Server ('Admin') menu hidden when not in godmode. -		const bool show_server_menu = debug && (gAgent.getGodLevel() > GOD_NOT || gAgent.getAdminOverride()); +		const bool show_server_menu = (gAgent.getGodLevel() > GOD_NOT || (debug && gAgent.getAdminOverride()));  		gMenuBarView->setItemVisible("Admin", show_server_menu);  		gMenuBarView->setItemEnabled("Admin", show_server_menu);  	} diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index ef6a621323..11b2f07f1b 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -939,6 +939,11 @@ void open_offer(const std::vector<LLUUID>& items, const std::string& from_name)  		   !from_name.empty())  		{  			view = LLFloaterInventory::showAgentInventory(); +			//TODO:this should be moved to the end of method after all the checks, +			//but first decide what to do with active inventory if any (EK) +			LLSD key; +			key["select"] = item->getUUID(); +			LLSideTray::getInstance()->showPanel("sidepanel_inventory", key);  		}  		else  		{ diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 6037c06f9d..db66faef81 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1566,8 +1566,6 @@ void LLViewerWindow::initWorldUI()  	LLPanel* panel_ssf_container = getRootView()->getChild<LLPanel>("stand_stop_flying_container");  	LLPanelStandStopFlying* panel_stand_stop_flying	= LLPanelStandStopFlying::getInstance(); -	panel_stand_stop_flying->setShape(panel_ssf_container->getLocalRect()); -	panel_stand_stop_flying->setFollowsAll();  	panel_ssf_container->addChild(panel_stand_stop_flying);  	panel_ssf_container->setVisible(TRUE); @@ -3955,7 +3953,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei  		return FALSE ;  	} -	BOOL high_res = scale_factor > 1.f; +	BOOL high_res = scale_factor >= 2.f; // Font scaling is slow, only do so if rez is much higher  	if (high_res)  	{  		send_agent_pause(); diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index b6c1ee2f11..75e35e5221 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -6267,7 +6267,7 @@ LLColor4 LLVOAvatar::getDummyColor()  	return DUMMY_COLOR;  } -void LLVOAvatar::dumpAvatarTEs( const std::string& context ) +void LLVOAvatar::dumpAvatarTEs( const std::string& context ) const  {	  	/* const char* te_name[] = {  			"TEX_HEAD_BODYPAINT   ", diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 2fd1a506a9..4b3e850e7a 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -889,7 +889,7 @@ public:  	static void			dumpArchetypeXML(void*);  	static void			dumpBakedStatus();  	const std::string 	getBakedStatusForPrintout() const; -	void				dumpAvatarTEs(const std::string& context); +	void				dumpAvatarTEs(const std::string& context) const;  	static F32 			sUnbakedTime; // Total seconds with >=1 unbaked avatars  	static F32 			sUnbakedUpdateTime; // Last time stats were updated (to prevent multiple updates per frame)  diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 711e9f90fc..d9c5e932a2 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -2074,6 +2074,49 @@ void LLVOAvatarSelf::setInvisible(BOOL newvalue)  	}  } +// HACK: this will null out the avatar's local texture IDs before the TE message is sent +//       to ensure local texture IDs are not sent to other clients in the area. +//       this is a short-term solution. The long term solution will be to not set the texture +//       IDs in the avatar object, and keep them only in the wearable. +//       This will involve further refactoring that is too risky for the initial release of 2.0. +bool LLVOAvatarSelf::sendAppearanceMessage(LLMessageSystem *mesgsys) const +{ +	LLUUID texture_id[TEX_NUM_INDICES]; +	// pack away current TEs to make sure we don't send them out +	for (LLVOAvatarDictionary::Textures::const_iterator iter = LLVOAvatarDictionary::getInstance()->getTextures().begin(); +		 iter != LLVOAvatarDictionary::getInstance()->getTextures().end(); +		 ++iter) +	{ +		const ETextureIndex index = iter->first; +		const LLVOAvatarDictionary::TextureEntry *texture_dict = iter->second; +		if (!texture_dict->mIsBakedTexture) +		{ +			LLTextureEntry* entry = getTE((U8) index); +			texture_id[index] = entry->getID(); +			entry->setID(IMG_DEFAULT_AVATAR); +		} +	} + +	bool success = packTEMessage(mesgsys); + +	// unpack TEs to make sure we don't re-trigger a bake +	for (LLVOAvatarDictionary::Textures::const_iterator iter = LLVOAvatarDictionary::getInstance()->getTextures().begin(); +		 iter != LLVOAvatarDictionary::getInstance()->getTextures().end(); +		 ++iter) +	{ +		const ETextureIndex index = iter->first; +		const LLVOAvatarDictionary::TextureEntry *texture_dict = iter->second; +		if (!texture_dict->mIsBakedTexture) +		{ +			LLTextureEntry* entry = getTE((U8) index); +			entry->setID(texture_id[index]); +		} +	} + +	return success; +} + +  //------------------------------------------------------------------------  // needsRenderBeam()  //------------------------------------------------------------------------ diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h index 6702f030fe..a1cad82eff 100644 --- a/indra/newview/llvoavatarself.h +++ b/indra/newview/llvoavatarself.h @@ -310,6 +310,7 @@ public:  public:  	static void		onChangeSelfInvisible(BOOL newvalue);  	void			setInvisible(BOOL newvalue); +	bool			sendAppearanceMessage(LLMessageSystem *mesgsys) const;  /**                    Appearance   **                                                                            ** diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp index ae32ec7d11..8f63df8c29 100644 --- a/indra/newview/llvoicechannel.cpp +++ b/indra/newview/llvoicechannel.cpp @@ -33,6 +33,7 @@  #include "llviewerprecompiledheaders.h"  #include "llagent.h" +#include "llfloatercall.h"  #include "llfloaterreg.h"  #include "llimview.h"  #include "llnotifications.h" @@ -408,9 +409,14 @@ void LLVoiceChannel::doSetState(const EState& new_state)  void LLVoiceChannel::toggleCallWindowIfNeeded(EState state)  { +	LLFloaterCall* floater = dynamic_cast<LLFloaterCall*>(LLFloaterReg::getInstance("voice_call", mSessionID)); +	if (!floater) +		return; +  	if (state == STATE_CONNECTED)  	{ -		LLFloaterReg::showInstance("voice_call", mSessionID); +		floater->init(mSessionID); +		floater->openFloater(mSessionID);  	}  	// By checking that current state is CONNECTED we make sure that the call window  	// has been shown, hence there's something to hide. This helps when user presses @@ -418,7 +424,8 @@ void LLVoiceChannel::toggleCallWindowIfNeeded(EState state)  	// *TODO: move this check to LLFloaterCall?  	else if (state == STATE_HUNG_UP && mState == STATE_CONNECTED)  	{ -		LLFloaterReg::hideInstance("voice_call", mSessionID); +		floater->reset(); +		floater->closeFloater();  	}  } @@ -747,6 +754,8 @@ LLVoiceChannelP2P::LLVoiceChannelP2P(const LLUUID& session_id, const std::string  void LLVoiceChannelP2P::handleStatusChange(EStatusType type)  { +	llinfos << "P2P CALL CHANNEL STATUS CHANGE: incoming=" << int(mReceivedCall) << " newstatus=" << LLVoiceClientStatusObserver::status2string(type) << " (mState=" << mState << ")" << llendl; +  	// status updates  	switch(type)  	{ @@ -873,6 +882,8 @@ void LLVoiceChannelP2P::setState(EState state)  	// *HACK: Open/close the call window if needed.  	toggleCallWindowIfNeeded(state); +	llinfos << "P2P CALL STATE CHANGE: incoming=" << int(mReceivedCall) << " oldstate=" << mState << " newstate=" << state << llendl; +  	if (mReceivedCall) // incoming call  	{  		// you only "answer" voice invites in p2p mode @@ -889,7 +900,8 @@ void LLVoiceChannelP2P::setState(EState state)  		mCallDialogPayload["session_id"] = mSessionID;  		mCallDialogPayload["session_name"] = mSessionName;  		mCallDialogPayload["other_user_id"] = mOtherUserID; -		if (state == STATE_RINGING) +		if (state == STATE_RINGING || +		    state == STATE_CALL_STARTED)  		{  			// *HACK: open outgoing call floater if needed, might be better done elsewhere.  			// *TODO: should move this squirrelly ui-fudging crap into LLOutgoingCallDialog itself @@ -901,6 +913,7 @@ void LLVoiceChannelP2P::setState(EState state)  					ocd->getChild<LLTextBox>("calling")->setVisible(true);  					ocd->getChild<LLTextBox>("leaving")->setVisible(true);  					ocd->getChild<LLTextBox>("connecting")->setVisible(false); +					ocd->getChild<LLTextBox>("noanswer")->setVisible(false);  				}  			}  		} @@ -912,16 +925,29 @@ void LLVoiceChannelP2P::setState(EState state)  					ocd->getChild<LLTextBox>("calling")->setVisible(false);  					ocd->getChild<LLTextBox>("leaving")->setVisible(false);  					ocd->getChild<LLTextBox>("connecting")->setVisible(true); +					ocd->getChild<LLTextBox>("noanswer")->setVisible(false);  				}			  				}*/ +		else if (state == STATE_ERROR) +		{ +			LLOutgoingCallDialog *ocd = dynamic_cast<LLOutgoingCallDialog*>(LLFloaterReg::showInstance("outgoing_call", mCallDialogPayload, TRUE)); +			if (ocd) +			{ +				ocd->getChild<LLTextBox>("calling")->setVisible(false); +				ocd->getChild<LLTextBox>("leaving")->setVisible(false); +				ocd->getChild<LLTextBox>("connecting")->setVisible(false); +				ocd->getChild<LLTextBox>("noanswer")->setVisible(true); +			}			 +		}  		else if (state == STATE_HUNG_UP ||  			 state == STATE_CONNECTED)  		{ -				LLOutgoingCallDialog *ocd = dynamic_cast<LLOutgoingCallDialog*>(LLFloaterReg::showInstance("outgoing_call", mCallDialogPayload, TRUE)); -				if (ocd) -				{ -					ocd->closeFloater(); -				}			 +			// hide popup +			LLOutgoingCallDialog *ocd = dynamic_cast<LLOutgoingCallDialog*>(LLFloaterReg::showInstance("outgoing_call", mCallDialogPayload, TRUE)); +			if (ocd) +			{ +				ocd->closeFloater(); +			}			  		}  	} diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp index e37dffd526..ced0b64896 100644 --- a/indra/newview/llwearable.cpp +++ b/indra/newview/llwearable.cpp @@ -38,6 +38,7 @@  #include "lllocaltextureobject.h"  #include "llviewertexturelist.h"  #include "llinventorymodel.h" +#include "llinventoryobserver.h"  #include "llviewerregion.h"  #include "llvoavatar.h"  #include "llvoavatarself.h" @@ -225,7 +226,13 @@ BOOL LLWearable::importFile( LLFILE* file )  		return FALSE;  	} -	if( mDefinitionVersion > LLWearable::sCurrentDefinitionVersion ) + +	// Temoprary hack to allow wearables with definition version 24 to still load. +	// This should only affect lindens and NDA'd testers who have saved wearables in 2.0 +	// the extra check for version == 24 can be removed before release, once internal testers +	// have loaded these wearables again. See hack pt 2 at bottom of function to ensure that +	// these wearables get re-saved with version definition 22. +	if( mDefinitionVersion > LLWearable::sCurrentDefinitionVersion && mDefinitionVersion != 24 )  	{  		llwarns << "Wearable asset has newer version (" << mDefinitionVersion << ") than XML (" << LLWearable::sCurrentDefinitionVersion << ")" << llendl;  		return FALSE; @@ -414,6 +421,18 @@ BOOL LLWearable::importFile( LLFILE* file )  	// copy all saved param values to working params  	revertValues(); +	// Hack pt 2. If the wearable we just loaded has definition version 24, +	// then force a re-save of this wearable after slamming the version number to 22. +	// This number was incorrectly incremented for internal builds before release, and +	// this fix will ensure that the affected wearables are re-saved with the right version number. +	// the versions themselves are compatible. This code can be removed before release. +	if( mDefinitionVersion == 24 ) +	{ +		mDefinitionVersion = 22; +		U32 index = gAgentWearables.getWearableIndex(this); +		gAgentWearables.saveWearable(mType,index,TRUE); +	} +  	return TRUE;  } @@ -1080,6 +1099,12 @@ void LLWearable::destroyTextures()  	mSavedTEMap.clear();  } + +void LLWearable::setLabelUpdated() const +{  +	gInventory.addChangedMask(LLInventoryObserver::LABEL, getItemID()); +} +  struct LLWearableSaveData  {  	EWearableType mType; diff --git a/indra/newview/llwearable.h b/indra/newview/llwearable.h index fd19a86406..0863adb7f5 100644 --- a/indra/newview/llwearable.h +++ b/indra/newview/llwearable.h @@ -128,6 +128,8 @@ public:  	BOOL				isOnTop() const; +	// Something happened that requires the wearable's label to be updated (e.g. worn/unworn). +	void				setLabelUpdated() const;  private:  	typedef std::map<S32, LLLocalTextureObject*> te_map_t; diff --git a/indra/newview/skins/default/html/da/loading/loading.html b/indra/newview/skins/default/html/da/loading/loading.html index 5f3426eb60..cdad5702b9 100644 --- a/indra/newview/skins/default/html/da/loading/loading.html +++ b/indra/newview/skins/default/html/da/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> -<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> -<table width="100%" height="100%" border="0"> -	<tr> -		<td align="center" valign="middle" style="font-size:0.8em;"> -			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   Indlæser... -		</td> -	</tr> -</table> -</body> +<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
 +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
 +<table width="100%" height="100%" border="0">
 +	<tr>
 +		<td align="center" valign="middle" style="font-size:0.8em;">
 +			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   Indlæser...
 +		</td>
 +	</tr>
 +</table>
 +</body>
 diff --git a/indra/newview/skins/default/html/de/loading/loading.html b/indra/newview/skins/default/html/de/loading/loading.html index 44a621b216..3eddbc24f5 100644 --- a/indra/newview/skins/default/html/de/loading/loading.html +++ b/indra/newview/skins/default/html/de/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> -<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> -<table width="100%" height="100%" border="0"> -	<tr> -		<td align="center" valign="middle" style="font-size:0.8em;"> -			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   Wird geladen... -		</td> -	</tr> -</table> -</body> +<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
 +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
 +<table width="100%" height="100%" border="0">
 +	<tr>
 +		<td align="center" valign="middle" style="font-size:0.8em;">
 +			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   Wird geladen...
 +		</td>
 +	</tr>
 +</table>
 +</body>
 diff --git a/indra/newview/skins/default/html/en-us/loading/loading.html b/indra/newview/skins/default/html/en-us/loading/loading.html index 1c62d2f73e..34e5c84c4d 100644 --- a/indra/newview/skins/default/html/en-us/loading/loading.html +++ b/indra/newview/skins/default/html/en-us/loading/loading.html @@ -1,9 +1,9 @@ -<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> -<table width="100%" height="100%" border="0"> -	<tr> -		<td align="center" valign="middle" style="font-size:0.8em;"> -			<img src="sl_logo_rotate_black.gif" align="absmiddle"><br/>   loading... -		</td> -	</tr> -</table> -</body> +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
 +<table width="100%" height="100%" border="0">
 +	<tr>
 +		<td align="center" valign="middle" style="font-size:0.8em;">
 +			<img src="sl_logo_rotate_black.gif" align="absmiddle"><br/>   loading...
 +		</td>
 +	</tr>
 +</table>
 +</body>
 diff --git a/indra/newview/skins/default/html/es/loading/loading.html b/indra/newview/skins/default/html/es/loading/loading.html index c4260b34c0..f03284ba8c 100644 --- a/indra/newview/skins/default/html/es/loading/loading.html +++ b/indra/newview/skins/default/html/es/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> -<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> -<table width="100%" height="100%" border="0"> -	<tr> -		<td align="center" valign="middle" style="font-size:0.8em;"> -			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   Cargando... -		</td> -	</tr> -</table> -</body> +<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
 +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
 +<table width="100%" height="100%" border="0">
 +	<tr>
 +		<td align="center" valign="middle" style="font-size:0.8em;">
 +			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   Cargando...
 +		</td>
 +	</tr>
 +</table>
 +</body>
 diff --git a/indra/newview/skins/default/html/fr/loading/loading.html b/indra/newview/skins/default/html/fr/loading/loading.html index b3953448e9..23c0ef03bc 100644 --- a/indra/newview/skins/default/html/fr/loading/loading.html +++ b/indra/newview/skins/default/html/fr/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> -<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> -<table width="100%" height="100%" border="0"> -	<tr> -		<td align="center" valign="middle" style="font-size:0.8em;"> -			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   Chargement... -		</td> -	</tr> -</table> -</body> +<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
 +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
 +<table width="100%" height="100%" border="0">
 +	<tr>
 +		<td align="center" valign="middle" style="font-size:0.8em;">
 +			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   Chargement...
 +		</td>
 +	</tr>
 +</table>
 +</body>
 diff --git a/indra/newview/skins/default/html/hu/loading/loading.html b/indra/newview/skins/default/html/hu/loading/loading.html index ab15a073ba..ade91f76c2 100644 --- a/indra/newview/skins/default/html/hu/loading/loading.html +++ b/indra/newview/skins/default/html/hu/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> -<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> -<table width="100%" height="100%" border="0"> -	<tr> -		<td align="center" valign="middle" style="font-size:0.8em;"> -			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   Betöltés folyamatban... -		</td> -	</tr> -</table> -</body> +<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
 +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
 +<table width="100%" height="100%" border="0">
 +	<tr>
 +		<td align="center" valign="middle" style="font-size:0.8em;">
 +			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   Betöltés folyamatban...
 +		</td>
 +	</tr>
 +</table>
 +</body>
 diff --git a/indra/newview/skins/default/html/it/loading/loading.html b/indra/newview/skins/default/html/it/loading/loading.html index ab37e41f04..0f9af31f6e 100644 --- a/indra/newview/skins/default/html/it/loading/loading.html +++ b/indra/newview/skins/default/html/it/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> -<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> -<table width="100%" height="100%" border="0"> -	<tr> -		<td align="center" valign="middle" style="font-size:0.8em;"> -			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   Attendi... -		</td> -	</tr> -</table> -</body> +<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
 +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
 +<table width="100%" height="100%" border="0">
 +	<tr>
 +		<td align="center" valign="middle" style="font-size:0.8em;">
 +			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   Attendi...
 +		</td>
 +	</tr>
 +</table>
 +</body>
 diff --git a/indra/newview/skins/default/html/ja/loading/loading.html b/indra/newview/skins/default/html/ja/loading/loading.html index 35cf74a35f..069dc5d12f 100644 --- a/indra/newview/skins/default/html/ja/loading/loading.html +++ b/indra/newview/skins/default/html/ja/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> -<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> -<table width="100%" height="100%" border="0"> -	<tr> -		<td align="center" valign="middle" style="font-size:0.8em;"> -			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   ロード中... -		</td> -	</tr> -</table> -</body> +<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
 +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
 +<table width="100%" height="100%" border="0">
 +	<tr>
 +		<td align="center" valign="middle" style="font-size:0.8em;">
 +			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   ロード中...
 +		</td>
 +	</tr>
 +</table>
 +</body>
 diff --git a/indra/newview/skins/default/html/nl/loading/loading.html b/indra/newview/skins/default/html/nl/loading/loading.html index 0215bd7e47..39a8691f3f 100644 --- a/indra/newview/skins/default/html/nl/loading/loading.html +++ b/indra/newview/skins/default/html/nl/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> -<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> -<table width="100%" height="100%" border="0"> -	<tr> -		<td align="center" valign="middle" style="font-size:0.8em;"> -			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   Laden... -		</td> -	</tr> -</table> -</body> +<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
 +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
 +<table width="100%" height="100%" border="0">
 +	<tr>
 +		<td align="center" valign="middle" style="font-size:0.8em;">
 +			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   Laden...
 +		</td>
 +	</tr>
 +</table>
 +</body>
 diff --git a/indra/newview/skins/default/html/pl/loading/loading.html b/indra/newview/skins/default/html/pl/loading/loading.html index 50f3dfb0c5..515890c2d5 100644 --- a/indra/newview/skins/default/html/pl/loading/loading.html +++ b/indra/newview/skins/default/html/pl/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> -<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> -<table width="100%" height="100%" border="0"> -	<tr> -		<td align="center" valign="middle" style="font-size:0.8em;"> -			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   Ładowanie... -		</td> -	</tr> -</table> -</body> +<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
 +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
 +<table width="100%" height="100%" border="0">
 +	<tr>
 +		<td align="center" valign="middle" style="font-size:0.8em;">
 +			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   Ładowanie...
 +		</td>
 +	</tr>
 +</table>
 +</body>
 diff --git a/indra/newview/skins/default/html/pt/loading/loading.html b/indra/newview/skins/default/html/pt/loading/loading.html index a83e1123d0..635ea62406 100644 --- a/indra/newview/skins/default/html/pt/loading/loading.html +++ b/indra/newview/skins/default/html/pt/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> -<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> -<table width="100%" height="100%" border="0"> -	<tr> -		<td align="center" valign="middle" style="font-size:0.8em;"> -			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   Carregando... -		</td> -	</tr> -</table> -</body> +<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
 +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
 +<table width="100%" height="100%" border="0">
 +	<tr>
 +		<td align="center" valign="middle" style="font-size:0.8em;">
 +			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   Carregando...
 +		</td>
 +	</tr>
 +</table>
 +</body>
 diff --git a/indra/newview/skins/default/html/ru/loading/loading.html b/indra/newview/skins/default/html/ru/loading/loading.html index 892c0b9f7f..dcc0d73c1a 100644 --- a/indra/newview/skins/default/html/ru/loading/loading.html +++ b/indra/newview/skins/default/html/ru/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> -<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> -<table width="100%" height="100%" border="0"> -	<tr> -		<td align="center" valign="middle" style="font-size:0.8em;"> -			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   Загрузка... -		</td> -	</tr> -</table> -</body> +<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
 +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
 +<table width="100%" height="100%" border="0">
 +	<tr>
 +		<td align="center" valign="middle" style="font-size:0.8em;">
 +			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   Загрузка...
 +		</td>
 +	</tr>
 +</table>
 +</body>
 diff --git a/indra/newview/skins/default/html/tr/loading/loading.html b/indra/newview/skins/default/html/tr/loading/loading.html index 1ac07bff34..e7812e7c8e 100644 --- a/indra/newview/skins/default/html/tr/loading/loading.html +++ b/indra/newview/skins/default/html/tr/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> -<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> -<table width="100%" height="100%" border="0"> -	<tr> -		<td align="center" valign="middle" style="font-size:0.8em;"> -			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   Yükleniyor... -		</td> -	</tr> -</table> -</body> +<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
 +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
 +<table width="100%" height="100%" border="0">
 +	<tr>
 +		<td align="center" valign="middle" style="font-size:0.8em;">
 +			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   Yükleniyor...
 +		</td>
 +	</tr>
 +</table>
 +</body>
 diff --git a/indra/newview/skins/default/html/uk/loading/loading.html b/indra/newview/skins/default/html/uk/loading/loading.html index 3b5b8679b4..0f67994635 100644 --- a/indra/newview/skins/default/html/uk/loading/loading.html +++ b/indra/newview/skins/default/html/uk/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> -<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> -<table width="100%" height="100%" border="0"> -	<tr> -		<td align="center" valign="middle" style="font-size:0.8em;"> -			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   Завантаж... -		</td> -	</tr> -</table> -</body> +<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
 +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
 +<table width="100%" height="100%" border="0">
 +	<tr>
 +		<td align="center" valign="middle" style="font-size:0.8em;">
 +			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   Завантаж...
 +		</td>
 +	</tr>
 +</table>
 +</body>
 diff --git a/indra/newview/skins/default/html/zh/loading/loading.html b/indra/newview/skins/default/html/zh/loading/loading.html index d1d5d25c92..462ea291d9 100644 --- a/indra/newview/skins/default/html/zh/loading/loading.html +++ b/indra/newview/skins/default/html/zh/loading/loading.html @@ -1,10 +1,10 @@ -<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> -<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;"> -<table width="100%" height="100%" border="0"> -	<tr> -		<td align="center" valign="middle" style="font-size:0.8em;"> -			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   请等待... -		</td> -	</tr> -</table> -</body> +<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
 +<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
 +<table width="100%" height="100%" border="0">
 +	<tr>
 +		<td align="center" valign="middle" style="font-size:0.8em;">
 +			<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/>   请等待...
 +		</td>
 +	</tr>
 +</table>
 +</body>
 diff --git a/indra/newview/skins/default/xui/da/panel_edit_profile.xml b/indra/newview/skins/default/xui/da/panel_edit_profile.xml index b4d0fa20ef..74b7c7dd72 100644 --- a/indra/newview/skins/default/xui/da/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/da/panel_edit_profile.xml @@ -1,45 +1,45 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel name="edit_profile_panel"> -   <string name="CaptionTextAcctInfo"> -       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION] -   </string> -   <string name="AcctTypeResident" -    value="Beboer" /> -   <string name="AcctTypeTrial" -    value="På prøve" /> -   <string name="AcctTypeCharterMember" -    value="æresmedlem" /> -   <string name="AcctTypeEmployee" -    value="Linden Lab medarbejder" /> -   <string name="PaymentInfoUsed" -    value="Betalende medlem" /> -   <string name="PaymentInfoOnFile" -    value="Registreret betalende" /> -   <string name="NoPaymentInfoOnFile" -    value="Ingen betalingsinfo" /> -   <string name="AgeVerified" -    value="Alders-checket" /> -   <string name="NotAgeVerified" -    value="Ikke alders-checket" /> -   <string name="partner_edit_link_url"> -       http://www.secondlife.com/account/partners.php?lang=da -   </string> -    <panel name="scroll_content_panel"> -    <panel name="data_panel" > -     <panel name="lifes_images_panel"> -          <panel name="second_life_image_panel"> -              <text name="second_life_photo_title_text"> -			[SECOND_LIFE]: -              </text> -          </panel> -      </panel> -        <text name="title_partner_text" value="Partner:"/> -        <panel name="partner_data_panel"> -            <text name="partner_text" value="[FIRST] [LAST]"/> -         </panel> -      <text name="text_box3"> -	Optaget autosvar: -      </text> -    </panel> -    </panel> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 +<panel name="edit_profile_panel">
 +   <string name="CaptionTextAcctInfo">
 +       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
 +   </string>
 +   <string name="AcctTypeResident"
 +    value="Beboer" />
 +   <string name="AcctTypeTrial"
 +    value="På prøve" />
 +   <string name="AcctTypeCharterMember"
 +    value="æresmedlem" />
 +   <string name="AcctTypeEmployee"
 +    value="Linden Lab medarbejder" />
 +   <string name="PaymentInfoUsed"
 +    value="Betalende medlem" />
 +   <string name="PaymentInfoOnFile"
 +    value="Registreret betalende" />
 +   <string name="NoPaymentInfoOnFile"
 +    value="Ingen betalingsinfo" />
 +   <string name="AgeVerified"
 +    value="Alders-checket" />
 +   <string name="NotAgeVerified"
 +    value="Ikke alders-checket" />
 +   <string name="partner_edit_link_url">
 +       http://www.secondlife.com/account/partners.php?lang=da
 +   </string>
 +    <panel name="scroll_content_panel">
 +    <panel name="data_panel" >
 +     <panel name="lifes_images_panel">
 +          <panel name="second_life_image_panel">
 +              <text name="second_life_photo_title_text">
 +			[SECOND_LIFE]:
 +              </text>
 +          </panel>
 +      </panel>
 +        <text name="title_partner_text" value="Partner:"/>
 +        <panel name="partner_data_panel">
 +            <text name="partner_text" value="[FIRST] [LAST]"/>
 +         </panel>
 +      <text name="text_box3">
 +	Optaget autosvar:
 +      </text>
 +    </panel>
 +    </panel>
 +</panel>
 diff --git a/indra/newview/skins/default/xui/en/floater_aaa.xml b/indra/newview/skins/default/xui/en/floater_aaa.xml index e4ab533bc5..4bbd561882 100644 --- a/indra/newview/skins/default/xui/en/floater_aaa.xml +++ b/indra/newview/skins/default/xui/en/floater_aaa.xml @@ -5,6 +5,6 @@   name="floater_aaa"   can_resize="true"    width="1024"> - <string name="Nudge Parabuild">1</string> + <string name="Nudge Parabuild">2</string>    <panel filename="main_view.xml" follows="all" width="1024" height="768" top="0"/>  </floater> diff --git a/indra/newview/skins/default/xui/en/floater_gesture.xml b/indra/newview/skins/default/xui/en/floater_gesture.xml index a3ac878202..21d292847a 100644 --- a/indra/newview/skins/default/xui/en/floater_gesture.xml +++ b/indra/newview/skins/default/xui/en/floater_gesture.xml @@ -83,7 +83,20 @@                   tool_tip="Make new gesture"                   top_delta="0"                   width="18" /> -                <button +              <button +                 follows="bottom|left" +                 font="SansSerifBigBold" +                 height="10" +                 image_hover_selected="Activate_Checkmark" +                 image_selected="Activate_Checkmark" +                 image_unselected="Activate_Checkmark" +                 layout="topleft" +                 left_pad="5" +                 name="activate_btn" +                 tool_tip="Activate/Deactivate selected gesture" +                 top="10" +                 width="10" /> +              <button                   follows="bottom|right"                   font="SansSerifBigBold"                   height="18" diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml index 9e2dbc881f..e972cf39bf 100644 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml @@ -8,66 +8,71 @@   left="0"   name="panel_im"   top="0" + can_close="true"   can_dock="true" - can_minimize="false" + can_minimize="true"   visible="true" - width="320" + width="350"   can_resize="true"   min_width="300"   min_height="350"> -  <layout_stack follows="all" -                height="350" -                width="300" -                layout="topleft" -                orientation="horizontal" -                name="im_panels" -                top="20" -                left="0"> +  <layout_stack +  follows="all" +  height="350" +  width="300" +  layout="topleft" +  orientation="horizontal" +  name="im_panels" +  top="20" +  left="0">      <layout_panel        name="panel_im_control_panel"        layout="topleft" -      top_delta="-3" -      height="350"        follows="left"        label="IM Control Panel"        auto_resize="false"        user_resize="false" /> -    <layout_panel height="350" -                  width="" -                  left_delta="110" -                  top="0" -                  user_resize="false"> -      <button height="20" -      	      follows="left|top" -              top="0" -              image_overlay="TabIcon_Open_Off" -              layout="topleft" -              width="25" -              name="slide_left_btn" /> -      <button height="20" -      	      follows="left|top" -              top="0" -              image_overlay="TabIcon_Close_Off" -              width="25" -              name="slide_right_btn" /> -      <chat_history -       length="1" -       follows="all" -       height="275" -       layout="topleft" -       name="chat_history" -       parse_highlights="true" -       allow_html="true" -       width="160"> -      </chat_history> -      <line_editor -       follows="left|right" -       height="20" -       label="To" -       layout="topleft" -       name="chat_editor" -       width="160"> -      </line_editor> +    <layout_panel +       left="0" +       top="0" +       user_resize="false"> +        <button +          height="20" +          follows="left|top" +          top="0" +          left="2" +          image_overlay="TabIcon_Open_Off" +          layout="topleft" +          width="25" +          name="slide_left_btn" /> +         <button +          height="20" +          follows="left|top" +          top="0" +          left="2" +          image_overlay="TabIcon_Close_Off" +          width="25" +          name="slide_right_btn" /> +        <chat_history +         length="1" +	 font="SansSerifSmall" +         follows="left|right|top" +         height="280" +         name="chat_history" +         parse_highlights="true" +         allow_html="true" +        left="1" +         width="180"> +        </chat_history> +        <line_editor +         follows="left|right|top" +	 font="SansSerifSmall" +         height="20" +         label="To" +         name="chat_editor" +         top_pad="1" +         width="180"> +        </line_editor>      </layout_panel>    </layout_stack>  </floater> diff --git a/indra/newview/skins/default/xui/en/floater_inventory.xml b/indra/newview/skins/default/xui/en/floater_inventory.xml index b48c962413..dca1692e4a 100644 --- a/indra/newview/skins/default/xui/en/floater_inventory.xml +++ b/indra/newview/skins/default/xui/en/floater_inventory.xml @@ -30,13 +30,12 @@       name="Fetched">          Fetched      </floater.string> -<panel +    <panel       bottom="560"  	 class="panel_main_inventory"  	 filename="panel_main_inventory.xml"  	 follows="all"  	 layout="topleft" -	 hide_top_panel="true"  	 left="0"  	 label="Inventory Panel"  	 name="Inventory Panel" diff --git a/indra/newview/skins/default/xui/en/floater_nearby_chat.xml b/indra/newview/skins/default/xui/en/floater_nearby_chat.xml index 4f2d74b417..d8534bfe0b 100644 --- a/indra/newview/skins/default/xui/en/floater_nearby_chat.xml +++ b/indra/newview/skins/default/xui/en/floater_nearby_chat.xml @@ -3,9 +3,9 @@   legacy_header_height="18"   can_minimize="false"   can_tear_off="false" - can_resize="false" + can_resize="true"   can_drag_on_left="false" - can_close="false" + can_close="true"   can_dock="true"   bevel_style="in"   height="300" diff --git a/indra/newview/skins/default/xui/en/floater_outgoing_call.xml b/indra/newview/skins/default/xui/en/floater_outgoing_call.xml index 82417de8a7..ae4d5042ef 100644 --- a/indra/newview/skins/default/xui/en/floater_outgoing_call.xml +++ b/indra/newview/skins/default/xui/en/floater_outgoing_call.xml @@ -59,6 +59,17 @@ Connecting to [CALLEE_NAME]  Calling [CALLEE_NAME]      </text>      <text +     font="SansSerifLarge" +     height="20" +     layout="topleft" +     left="77" +     name="noanswer" +     top="27" +     width="315" +     word_wrap="true"> +No Answer.  Please try again later. +    </text> +    <text       font="SansSerif"       height="50"       layout="topleft" diff --git a/indra/newview/skins/default/xui/en/floater_perm_prefs.xml b/indra/newview/skins/default/xui/en/floater_perm_prefs.xml index 6faab84159..4909b8988f 100644 --- a/indra/newview/skins/default/xui/en/floater_perm_prefs.xml +++ b/indra/newview/skins/default/xui/en/floater_perm_prefs.xml @@ -22,10 +22,10 @@           height="16"           label="Share with group"           layout="topleft" -         left_delta="-250" +         left="10"           name="share_with_group" -         top_delta="2" -         width="106" /> +         top="5" +         width="150" />          <check_box           control_name="EveryoneCopy"           height="16" @@ -33,8 +33,8 @@           layout="topleft"           left_delta="0"           name="everyone_copy" -         top_pad="16" -         width="130" /> +         top_pad="5" +         width="150" />          <text           type="string"           length="1" @@ -43,8 +43,8 @@           layout="topleft"           left_delta="0"           name="NextOwnerLabel" -         top_pad="16" -         width="88"> +         top_pad="5" +         width="150">              Next owner can:          </text>          <check_box @@ -54,17 +54,17 @@           layout="topleft"           left_delta="0"           name="next_owner_modify" -         top_pad="14" -         width="78" /> +         top_pad="5" +         width="150" />          <check_box           control_name="NextOwnerCopy"           height="16"           label="Copy"           layout="topleft" -         left_delta="78" +         left_delta="0"           name="next_owner_copy" -         top_delta="0" -         width="88" > +         top_pad="5" +         width="150" >  		    <check_box.commit_callback  			function="Perms.Copy" />  		</check_box> @@ -76,10 +76,10 @@           initial_value="true"           label="Resell/Give away"           layout="topleft" -         left_delta="88" +         left_delta="0"           name="next_owner_transfer" -         top_delta="0" -         width="106" /> +         top_pad="5" +         width="150" />      </panel>      <button       height="20" diff --git a/indra/newview/skins/default/xui/en/floater_stats.xml b/indra/newview/skins/default/xui/en/floater_stats.xml index 68a4867167..f9dacf0207 100644 --- a/indra/newview/skins/default/xui/en/floater_stats.xml +++ b/indra/newview/skins/default/xui/en/floater_stats.xml @@ -405,179 +405,179 @@  				 show_bar="false"  				 show_mean="false" >  			  </stat_bar> +		  </stat_view> -			  <stat_bar -				 name="simagentups" -				 label="Agent Updates/Sec" -				 stat="simagentups" -				 precision="1" -				 bar_min="0.f" -				 bar_max="100.f"  -				 tick_spacing="25.f" -				 label_spacing="50.f"  -				 show_per_sec="false" -				 show_bar="false" -				 show_mean="false" > -			  </stat_bar> +			<stat_bar +			   name="simagentups" +			   label="Agent Updates/Sec" +			   stat="simagentups" +			   precision="1" +			   bar_min="0.f" +			   bar_max="100.f"  +			   tick_spacing="25.f" +			   label_spacing="50.f"  +			   show_per_sec="false" +			   show_bar="false" +			   show_mean="false" > +			</stat_bar> -			  <stat_bar -				 name="simmainagents" -				 label="Main Agents" -				 stat="simmainagents" -				 precision="0" -				 bar_min="0.f" -				 bar_max="80.f"  -				 tick_spacing="10.f" -				 label_spacing="40.f"  -				 show_per_sec="false" -				 show_bar="false" -				 show_mean="false" > -			  </stat_bar> +			<stat_bar +			   name="simmainagents" +			   label="Main Agents" +			   stat="simmainagents" +			   precision="0" +			   bar_min="0.f" +			   bar_max="80.f"  +			   tick_spacing="10.f" +			   label_spacing="40.f"  +			   show_per_sec="false" +			   show_bar="false" +			   show_mean="false" > +			</stat_bar> -			  <stat_bar -				 name="simchildagents" -				 label="Child Agents" -				 stat="simchildagents" -				 precision="0" -				 bar_min="0.f" -				 bar_max="40.f"  -				 tick_spacing="5.f" -				 label_spacing="10.f"  -				 show_per_sec="false" -				 show_bar="false" -				 show_mean="false" > -			  </stat_bar> +			<stat_bar +			   name="simchildagents" +			   label="Child Agents" +			   stat="simchildagents" +			   precision="0" +			   bar_min="0.f" +			   bar_max="40.f"  +			   tick_spacing="5.f" +			   label_spacing="10.f"  +			   show_per_sec="false" +			   show_bar="false" +			   show_mean="false" > +			</stat_bar> -			  <stat_bar -				 name="simobjects" -				 label="Objects" -				 stat="simobjects" -				 precision="0" -				 bar_min="0.f" -				 bar_max="30000.f"  -				 tick_spacing="5000.f" -				 label_spacing="10000.f"  -				 show_per_sec="false" -				 show_bar="false" -				 show_mean="false" > -			  </stat_bar> +			<stat_bar +			   name="simobjects" +			   label="Objects" +			   stat="simobjects" +			   precision="0" +			   bar_min="0.f" +			   bar_max="30000.f"  +			   tick_spacing="5000.f" +			   label_spacing="10000.f"  +			   show_per_sec="false" +			   show_bar="false" +			   show_mean="false" > +			</stat_bar> -			  <stat_bar -				 name="simactiveobjects" -				 label="Active Objects" -				 stat="simactiveobjects" -				 precision="0" -				 bar_min="0.f" -				 bar_max="800.f"  -				 tick_spacing="100.f" -				 label_spacing="200.f"  -				 show_per_sec="false" -				 show_bar="false" -				 show_mean="false" > -			  </stat_bar> +			<stat_bar +			   name="simactiveobjects" +			   label="Active Objects" +			   stat="simactiveobjects" +			   precision="0" +			   bar_min="0.f" +			   bar_max="800.f"  +			   tick_spacing="100.f" +			   label_spacing="200.f"  +			   show_per_sec="false" +			   show_bar="false" +			   show_mean="false" > +			</stat_bar> -			  <stat_bar -				 name="simactivescripts" -				 label="Active Scripts" -				 stat="simactivescripts" -				 precision="0" -				 bar_min="0.f" -				 bar_max="800.f"  -				 tick_spacing="100.f" -				 label_spacing="200.f"  -				 show_per_sec="false" -				 show_bar="false" -				 show_mean="false" > -			  </stat_bar> +			<stat_bar +			   name="simactivescripts" +			   label="Active Scripts" +			   stat="simactivescripts" +			   precision="0" +			   bar_min="0.f" +			   bar_max="800.f"  +			   tick_spacing="100.f" +			   label_spacing="200.f"  +			   show_per_sec="false" +			   show_bar="false" +			   show_mean="false" > +			</stat_bar> -			  <stat_bar -				 name="simscripteps" -				 label="Script Events" -				 stat="simscripteps" -				 unit_label="eps" -				 precision="0" -				 bar_min="0.f" -				 bar_max="20000.f"  -				 tick_spacing="2500.f" -				 label_spacing="5000.f"  -				 show_per_sec="false" -				 show_bar="false" -				 show_mean="false" > -			  </stat_bar> +			<stat_bar +			   name="simscripteps" +			   label="Script Events" +			   stat="simscripteps" +			   unit_label="eps" +			   precision="0" +			   bar_min="0.f" +			   bar_max="20000.f"  +			   tick_spacing="2500.f" +			   label_spacing="5000.f"  +			   show_per_sec="false" +			   show_bar="false" +			   show_mean="false" > +			</stat_bar> -			  <stat_bar -				 name="siminpps" -				 label="Packets In" -				 stat="siminpps" -				 unit_label="pps" -				 precision="0" -				 bar_min="0.f" -				 bar_max="2000.f"  -				 tick_spacing="250.f" -				 label_spacing="1000.f"  -				 show_per_sec="false" -				 show_bar="false" -				 show_mean="false" > -			  </stat_bar> +			<stat_bar +			   name="siminpps" +			   label="Packets In" +			   stat="siminpps" +			   unit_label="pps" +			   precision="0" +			   bar_min="0.f" +			   bar_max="2000.f"  +			   tick_spacing="250.f" +			   label_spacing="1000.f"  +			   show_per_sec="false" +			   show_bar="false" +			   show_mean="false" > +			</stat_bar> -			  <stat_bar -				 name="simoutpps" -				 label="Packets Out" -				 stat="simoutpps" -				 unit_label="pps"  -				 precision="0" -				 bar_min="0.f" -				 bar_max="2000.f"  -				 tick_spacing="250.f" -				 label_spacing="1000.f"  -				 show_per_sec="false" -				 show_bar="false" -				 show_mean="false" > -			  </stat_bar> +			<stat_bar +			   name="simoutpps" +			   label="Packets Out" +			   stat="simoutpps" +			   unit_label="pps"  +			   precision="0" +			   bar_min="0.f" +			   bar_max="2000.f"  +			   tick_spacing="250.f" +			   label_spacing="1000.f"  +			   show_per_sec="false" +			   show_bar="false" +			   show_mean="false" > +			</stat_bar> -			  <stat_bar -				 name="simpendingdownloads" -				 label="Pending Downloads" -				 stat="simpendingdownloads" -				 precision="0" -				 bar_min="0.f" -				 bar_max="800.f"  -				 tick_spacing="100.f" -				 label_spacing="200.f"  -				 show_per_sec="false" -				 show_bar="false" -				 show_mean="false" > -			  </stat_bar> +			<stat_bar +			   name="simpendingdownloads" +			   label="Pending Downloads" +			   stat="simpendingdownloads" +			   precision="0" +			   bar_min="0.f" +			   bar_max="800.f"  +			   tick_spacing="100.f" +			   label_spacing="200.f"  +			   show_per_sec="false" +			   show_bar="false" +			   show_mean="false" > +			</stat_bar> -			  <stat_bar -				 name="simpendinguploads" -				 label="Pending Uploads" -				 stat="simpendinguploads" -				 precision="0" -				 bar_min="0.f" -				 bar_max="100.f"  -				 tick_spacing="25.f" -				 label_spacing="50.f"  -				 show_per_sec="false" -				 show_bar="false" -				 show_mean="false" > -			  </stat_bar> +			<stat_bar +			   name="simpendinguploads" +			   label="Pending Uploads" +			   stat="simpendinguploads" +			   precision="0" +			   bar_min="0.f" +			   bar_max="100.f"  +			   tick_spacing="25.f" +			   label_spacing="50.f"  +			   show_per_sec="false" +			   show_bar="false" +			   show_mean="false" > +			</stat_bar> -			  <stat_bar -				 name="simtotalunackedbytes" -				 label="Total Unacked Bytes" -				 stat="simtotalunackedbytes" -				 unit_label="kb" -				 precision="0" -				 bar_min="0.f" -				 bar_max="100000.f"  -				 tick_spacing="25000.f" -				 label_spacing="50000.f"  -				 show_per_sec="false" -				 show_bar="false" -				 show_mean="false" > -			  </stat_bar> -			</stat_view> +			<stat_bar +			   name="simtotalunackedbytes" +			   label="Total Unacked Bytes" +			   stat="simtotalunackedbytes" +			   unit_label="kb" +			   precision="0" +			   bar_min="0.f" +			   bar_max="100000.f"  +			   tick_spacing="25000.f" +			   label_spacing="50000.f"  +			   show_per_sec="false" +			   show_bar="false" +			   show_mean="false" > +			</stat_bar>  			<stat_view  			   name="simperf" diff --git a/indra/newview/skins/default/xui/en/floater_sys_well.xml b/indra/newview/skins/default/xui/en/floater_sys_well.xml index e1f07a49e7..be6d63716c 100644 --- a/indra/newview/skins/default/xui/en/floater_sys_well.xml +++ b/indra/newview/skins/default/xui/en/floater_sys_well.xml @@ -15,7 +15,7 @@   height="23"   can_minimize="true"   can_tear_off="false" - can_resize="false" + can_resize="true"   can_drag_on_left="false"   can_close="false"   can_dock="true" diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index 59964ef39f..87d31b8f9b 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -269,6 +269,7 @@     halign="left"     left="13"     name="RenderingCost" +   tool_tip="Shows the rendering cost calculated for this object"     top_pad="9"     type="string"     width="100"> @@ -306,6 +307,7 @@       layout="topleft"       follows="left|top"       name="combobox grid mode" +     tool_tip="Choose the type of grid ruler for positioning the object"       width="108">          <combo_box.item           label="World grid" @@ -329,7 +331,7 @@       image_unselected="ForwardArrow_Off"       layout="topleft"       name="Options..." -     tool_tip="Grid options" +     tool_tip="See more grid options"       top_delta="0"       right="-10"       width="18" @@ -786,7 +788,7 @@              </panel.string>              <panel.string               name="text modify warning"> -                This object has linked parts +                You must select entire object to set permissions              </panel.string>              <panel.string               name="Cost Default"> @@ -1070,7 +1072,7 @@ even though the user gets a free copy.               follows="left|top|right"               layout="topleft"               name="perm_modify" -             width="250"> +             width="264">                  You can modify this object              </text>              <text diff --git a/indra/newview/skins/default/xui/en/floater_world_map.xml b/indra/newview/skins/default/xui/en/floater_world_map.xml index 387ffbd5b3..c60cc163c8 100644 --- a/indra/newview/skins/default/xui/en/floater_world_map.xml +++ b/indra/newview/skins/default/xui/en/floater_world_map.xml @@ -340,6 +340,8 @@           label="Landmarks"           name="item1"           value="None" /> +		<combo_box.commit_callback +		function="WMap.Landmark"/>      </combo_box>      <icon       color="0.5 0 0 1" diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml index 9e35c95d45..14a4949df7 100644 --- a/indra/newview/skins/default/xui/en/main_view.xml +++ b/indra/newview/skins/default/xui/en/main_view.xml @@ -10,7 +10,7 @@    <layout_stack border_size="0"                  follows="all"                  mouse_opaque="false" -                height="772" +                height="768"                  name="menu_stack"                  orientation="vertical"                  top="0"> diff --git a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml index 590621062c..a731996a1a 100644 --- a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml +++ b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml @@ -17,6 +17,8 @@     name="add_friend">
      <menu_item_call.on_click
       function="InspectAvatar.AddFriend"/>
 +    <menu_item_call.on_enable
 +     function="InspectAvatar.Gear.Enable"/>
    </menu_item_call>
    <menu_item_call
     label="IM"
 diff --git a/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml index 5c8a8ee208..3842c2a8db 100644 --- a/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml +++ b/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml @@ -61,6 +61,7 @@       layout="topleft"       left_delta="0"       name="Block object by name..." +     tool_tip="Pick an object to block by name"       top_pad="4"       width="210" >          <button.commit_callback diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index a902f50582..00711a29e0 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -94,7 +94,7 @@           min_height="28"           width="82"           top_delta="0" -         min_width="82" +         min_width="52"           name="gesture_panel"           user_resize="false">           <gesture_combo_box @@ -105,9 +105,13 @@            name="Gesture"            left="0"            top="3" -         use_ellipses="true"            width="82" -          tool_tip="Shows/hides gestures"/> +          tool_tip="Shows/hides gestures"> +             <gesture_combo_box.drop_down_button +              font="SansSerifSmall" +              pad_right="10"  +              use_ellipses="true" /> +         </gesture_combo_box>          </layout_panel>  		 <icon           auto_resize="false" @@ -131,7 +135,7 @@           name="movement_panel"           user_resize="false"           width="80" -         min_width="80"> +         min_width="49">              <button               follows="left|right"               height="23" @@ -167,7 +171,7 @@           height="28"           layout="topleft"           min_height="28" -         min_width="80" +         min_width="49"           name="cam_panel"           user_resize="false"           width="80"> @@ -295,8 +299,8 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.           min_height="28"           top="0"           name="sys_well_panel" -         width="34" -         min_width="34" +         width="54" +         min_width="54"           user_resize="false">              <chiclet_notification               follows="right" @@ -305,22 +309,21 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.               left="0"               name="sys_well"               top="4" -             width="34"> +             width="54">                <button                auto_resize="true"                 halign="right"                 height="23"                 follows="right"                 flash_color="EmphasisColor" +               left="0"                 name="Unread"                 image_overlay="Notices_Unread" -               width="20" +               image_overlay_alignment="right"  +               pad_right="6" +               pad_left="6" +               width="54"                 /> -               <unread_notifications -               width="34" -               height="20" -               left="0" -               top="19" />  	    </chiclet_notification>          </layout_panel>         <icon diff --git a/indra/newview/skins/default/xui/en/panel_chat_header.xml b/indra/newview/skins/default/xui/en/panel_chat_header.xml index 323ee957e7..7a3eae35a9 100644 --- a/indra/newview/skins/default/xui/en/panel_chat_header.xml +++ b/indra/newview/skins/default/xui/en/panel_chat_header.xml @@ -3,13 +3,13 @@        background_visible="true"       bevel_style="in"       bg_alpha_color="black" -     follows="top" +     follows="top|left|right"       height="24" - label="im_header" - layout="topleft" - name="im_header" - width="300"> -             <avatar_icon +     label="im_header" +     layout="topleft" +     name="im_header" +     width="300"> +            <avatar_icon           follows="left"           height="18"           image_name="Generic_Person" diff --git a/indra/newview/skins/default/xui/en/panel_chat_item.xml b/indra/newview/skins/default/xui/en/panel_chat_item.xml index 01917052d1..2b29796f0a 100644 --- a/indra/newview/skins/default/xui/en/panel_chat_item.xml +++ b/indra/newview/skins/default/xui/en/panel_chat_item.xml @@ -34,12 +34,12 @@  		use_ellipses="true"          	mouse_opaque="true"  		name="sender_name" -        	width="175"> +        	width="150">  	      Jerry Knight      	</text> -   <!-- 	<icon top="22" left="170" width="15" height="15" follows="top|right" +   <!-- 	<icon top="22" left="215" width="15" height="15" follows="top|right"        		image_name="icn_voice-pvtfocus.tga" visible="false" name="msg_inspector" />--> -    	<!--<icon top="22" left="190" width="10" height="10" follows="top|right" +    	<!--<icon top="22" left="215" width="10" height="10" follows="top|right"        		image_name="speaking_indicator.tga"	name="msg_icon"/>-->  	 <text              font="SansSerifSmall" diff --git a/indra/newview/skins/default/xui/en/panel_group_notify.xml b/indra/newview/skins/default/xui/en/panel_group_notify.xml index fa7fc34239..d22d58329c 100644 --- a/indra/newview/skins/default/xui/en/panel_group_notify.xml +++ b/indra/newview/skins/default/xui/en/panel_group_notify.xml @@ -1,117 +1,105 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel - background_visible="true" - bevel_style="in" - bg_alpha_color="0 0 0 0" - height="135" - label="instant_message" - layout="topleft" - left="0" - name="panel_group_notify" - top="0" - width="305"> -    <string -     name="message_max_lines_count" -     value="4" /> -    <panel -     background_visible="true" -     bevel_style="in" -     bg_alpha_color="black" -     follows="top" -     height="30" -     label="header" -     layout="topleft" -     left="0" -     name="header" -     top="0" -     width="305"> -        <icon -         follows="left|top|right|bottom" -         height="20" -         layout="topleft" -         left="5" -         mouse_opaque="true" -         name="group_icon" -         top="5" -         width="20" /> -        <text -         follows="left|top|right|bottom" -         font="SansSerifBigBold" -         height="20" -         layout="topleft" -         left_pad="10" -         name="title" -         text_color="GroupNotifyTextColor" -         top="5" -         use_ellipses="true" -         value="Sender Name / Group Name" -         width="230" /> -    </panel> -    <text -     follows="top" -     font="SansSerifBig" -     height="20" -     layout="topleft" -     left="25" -     name="subject" -     text_color="GroupNotifyTextColor" -     top="40" -     use_ellipses="true" -     value="subject" -     width="270" -     wrap="true" /> -    <text -     follows="top" -     font="SansSerif" -     height="20" -     layout="topleft" -     left="25" -     name="datetime" -     text_color="GroupNotifyTextColor" -     top="80" -     use_ellipses="true" -     value="datetime" -     width="270" -     wrap="true" /> -    <text -     follows="left|top|bottom|right" -     height="0" -     layout="topleft" -     left="25" -     name="message" -     text_color="GroupNotifyTextColor" -     top="100" -     use_ellipses="true" -     value="message" -     width="270" -     wrap="true" /> -    <icon -     bottom="122" -     follows="left|bottom|right" -     height="15" -     layout="topleft" -     left="25" -     mouse_opaque="true" -     name="attachment_icon" -     width="15" /> -    <text -     bottom="122" -     follows="left|bottom|right" -     font="SansSerif" -     height="15" -     layout="topleft" -     left="45" -     name="attachment" -     text_color="GroupNotifyTextColor" -     value="Attachment" -     width="280" /> -    <button -     bottom="130" -     follows="bottom" -     height="20" -     label="OK" -     layout="topleft" -     left="25" -     name="btn_ok" -     width="70" /> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 +<panel
 + background_visible="true"
 + bevel_style="in"
 + bg_alpha_color="0 0 0 0"
 + height="90"
 + label="instant_message"
 + layout="topleft"
 + left="0"
 + name="panel_group_notify"
 + top="0"
 + width="305">
 +    <string
 +     name="message_max_lines_count"
 +     value="7" />
 +    <string
 +     name="subject_font"
 +     value="SANSSERIF_BIG" />
 +    <string
 +     name="date_font"
 +     value="SANSSERIF" />
 +    <panel
 +     background_visible="true"
 +     bevel_style="in"
 +     bg_alpha_color="black"
 +     follows="top"
 +     height="30"
 +     label="header"
 +     layout="topleft"
 +     left="0"
 +     name="header"
 +     top="0"
 +     width="305">
 +        <icon
 +         follows="left|top|right|bottom"
 +         height="20"
 +         layout="topleft"
 +         left="5"
 +         mouse_opaque="true"
 +         name="group_icon"
 +         top="5"
 +         width="20" />
 +        <text
 +         follows="left|top|right|bottom"
 +         font="SansSerifBigBold"
 +         height="20"
 +         layout="topleft"
 +         left_pad="10"
 +         name="title"
 +         text_color="GroupNotifyTextColor"
 +         top="5"
 +         use_ellipses="true"
 +         value="Sender Name / Group Name"
 +         width="230" />
 +    </panel>
 +    <text_editor
 +     allow_html="true"
 +     enabled="true"
 +     follows="left|top|bottom|right"
 +     height="0"
 +     layout="topleft"
 +     left="25"
 +     max_length="2147483647"
 +     name="message"
 +     parse_highlights="true"
 +     read_only="true"
 +     text_color="GroupNotifyTextColor"
 +     top="40"
 +     type="string"
 +     use_ellipses="true"
 +     value="message"
 +     width="270" 
 +	 word_wrap="true" >
 +    </text_editor>
 +    <icon
 +     bottom="60"
 +     follows="left|bottom|right"
 +     height="15"
 +     layout="topleft"
 +     left="25"
 +     mouse_opaque="true"
 +     name="attachment_icon"
 +     width="15" />
 +    <text
 +     bottom="60"
 +     follows="left|bottom|right"
 +     font="SansSerif"
 +     height="15"
 +     layout="topleft"
 +     left="45"
 +     name="attachment"
 +     text_color="GroupNotifyTextColor"
 +     value="Attachment"
 +     use_ellipses="true"
 +     width="250" />
 +    <button
 +     bottom="85"
 +     follows="bottom"
 +     height="20"
 +     label="OK"
 +     layout="topleft"
 +     left="25"
 +     name="btn_ok"
 +     width="70" />
 +</panel>
 diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml index 9573904c93..73d843e6dd 100644 --- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml +++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml @@ -38,28 +38,29 @@       label="Teleport"       name="teleport_btn"       width="100" /> -    <button +  <!--  <button       follows="left|top"       height="20"       label="Share"       name="share_btn" -     width="100" /> -    <button +     width="100" />--> +     <!--Removing pay button to save space - will update spec - verified by Erica/Steve --> + <!--   <button       follows="left|top"       height="20"       label="Pay"       name="pay_btn" -     width="100" /> +     width="100" />-->      <panel       background_visible="true"       bg_alpha_color="DkGray2"       border="false" -     follows="left|top" +     top_pad="10" +     follows="left|bottom"       height="70" -     left="0" -     left_pad="0" +     left="1"       name="panel_call_buttons" -     width="110"> +     width="109">          <button           bottom="10"           height="20" diff --git a/indra/newview/skins/default/xui/en/panel_landmark_info.xml b/indra/newview/skins/default/xui/en/panel_landmark_info.xml index b01ddbf75a..a219e30b8b 100644 --- a/indra/newview/skins/default/xui/en/panel_landmark_info.xml +++ b/indra/newview/skins/default/xui/en/panel_landmark_info.xml @@ -87,8 +87,8 @@       width="313">          <panel           bg_alpha_color="DkGray2" -         follows="all" -         height="533" +         follows="left|top|right" +         height="610"           layout="topleft"           left="0"           min_height="300" @@ -145,7 +145,7 @@               top_pad="10"               width="18" />              <text -             follows="right|top" +             follows="left|top|right"               height="16"               layout="topleft"               left_pad="8" diff --git a/indra/newview/skins/default/xui/en/panel_landmarks.xml b/indra/newview/skins/default/xui/en/panel_landmarks.xml index f05684db10..4b91dc6294 100644 --- a/indra/newview/skins/default/xui/en/panel_landmarks.xml +++ b/indra/newview/skins/default/xui/en/panel_landmarks.xml @@ -63,7 +63,7 @@               left="0"               mouse_opaque="true"               name="my_inventory_list" -             start_folder="INVENTORY" +             start_folder="My Inventory"               width="380"/>            </accordion_tab>            <accordion_tab diff --git a/indra/newview/skins/default/xui/en/panel_notification.xml b/indra/newview/skins/default/xui/en/panel_notification.xml index 462188ee24..df37f9973c 100644 --- a/indra/newview/skins/default/xui/en/panel_notification.xml +++ b/indra/newview/skins/default/xui/en/panel_notification.xml @@ -90,15 +90,4 @@      name="control_panel"      top_pad="0">    </panel> -  <!-- -  <icon -    follows="left|top" -    height="32" -    image_name="notify_tip_icon.tga" -    layout="topleft" -    left="8" -    mouse_opaque="false" -    name="info_icon" -    top="20" -    width="32" />  -->  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml new file mode 100644 index 0000000000..f511ec0d6f --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml @@ -0,0 +1,81 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel name="Outfits"  +	  bottom="0"  +	  height="326"  +	  left="0"  +	  width="310" +	  border="true" +	  follows="left|top|right|bottom"> +	 <inventory_panel  +	 	 allow_multi_select="true"  +		 border="true"  +		 bottom="0" +	     follows="left|top|right|bottom"  +		 height="326"  +		 left="0"  +		 mouse_opaque="true" +	     name="outfits_list" +		 width="310" +		 start_folder="My Outfits"/> +	<button bottom="0" +		 halign="center" +		 height="16" +		 label=">" +		 enabled="false" +	     mouse_opaque="false" +		 name="selector" +		 width="20" +		 left="0" +		 visible="false" +	     follows="right|bottom" +		 tool_tip="View outfit properties"/> +    <panel +     background_visible="true" +     bevel_style="none" +     bottom="0" +     follows="left|right|bottom" +     height="30" +     layout="bottomleft" +     left="0" +	 visible="true" +     name="bottom_panel" +     width="310"> +        <button +         follows="bottom|left" +         tool_tip="Show additional options" +         height="18" +         image_disabled="OptionsMenu_Disabled" +         image_selected="OptionsMenu_Press" +         image_unselected="OptionsMenu_Off" +         layout="topleft" +         left="10" +         name="options_gear_btn" +         picture_style="true" +         top="6" +         width="18" /> +        <button +         follows="bottom|left" +         height="18" +         image_selected="AddItem_Press" +         image_unselected="AddItem_Off" +         image_disabled="AddItem_Disabled" +         layout="topleft" +         left_pad="5" +         name="add_btn" +         picture_style="true" +         tool_tip="Add new item" +         width="18" /> +        <dnd_button +         follows="bottom|right" +         height="18" +         image_selected="TrashItem_Press" +         image_unselected="TrashItem_Off" +         layout="topleft" +         right="-5" +         name="trash_btn" +         picture_style="true" +         tool_tip="Remove selected item" +         top="6" +         width="18" /> +    </panel> +</panel> diff --git a/indra/newview/skins/default/xui/en/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/en/panel_outfits_inventory_gear_default.xml new file mode 100644 index 0000000000..c8c79f8761 --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_outfits_inventory_gear_default.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<menu + bottom="806" + layout="topleft" + left="0" + mouse_opaque="false" + name="menu_gear_default" + visible="false"> +    <menu_item_call +     label="New Outfit" +     layout="topleft" +     name="new"> +        <on_click +         function="panel_outfits_inventory_gear_default.Custom.Action" +         parameter="new" /> +        <on_enable +		 function="panel_outfits_inventory_gear_default.Enable" +		 parameter="new" /> +    </menu_item_call> +    <menu_item_call +     label="Wear Outfit" +     layout="topleft" +     name="wear"> +        <on_click +         function="panel_outfits_inventory_gear_default.Custom.Action" +         parameter="wear" /> +        <on_enable +		 function="panel_outfits_inventory_gear_default.Enable" +		 parameter="wear" /> +    </menu_item_call> +    <menu_item_call +     label="Delete Outfit" +     layout="topleft" +     name="delete"> +        <on_click +         function="panel_outfits_inventory_gear_default.Custom.Action" +         parameter="delete" /> +        <on_enable +		 function="panel_outfits_inventory_gear_default.Enable" +		 parameter="delete" /> +    </menu_item_call> +</menu> diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml index 79cda98cc6..5cefe3e4ab 100644 --- a/indra/newview/skins/default/xui/en/panel_picks.xml +++ b/indra/newview/skins/default/xui/en/panel_picks.xml @@ -14,7 +14,18 @@   <string    name="no_classifieds"    value="No Classifieds" /> -      + <text +  type="string" +  follows="all" +  height="535" +  layout="topleft" +  left="6" +  name="empty_picks_panel_text" +  top="10" +  visible="false"  +  width="313"> +   There are no any picks/classifieds here + </text>   <accordion    follows="all"    height="465" diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml index e6084202d7..9ab5c6b4f7 100644 --- a/indra/newview/skins/default/xui/en/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml @@ -172,7 +172,7 @@       width="313">          <panel           bg_alpha_color="DkGray2" -         follows="all" +         follows="left|top|right"           height="533"           layout="topleft"           left="0" @@ -192,7 +192,7 @@              <layout_stack               border_size="0"               clip="false" -             follows="all" +             follows="left|top|right"               height="50"               layout="topleft"               mouse_opaque="false" @@ -305,7 +305,7 @@               top_delta="0"               width="18" />              <text -             follows="right|top" +             follows="left|top|right"               height="16"               layout="topleft"               left_pad="8" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml index d454b9e5c8..8ef2cdfc37 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml @@ -350,7 +350,7 @@       border="false"       follows="top|left"       height="145" -     label="DeviceSettings" +     label="Device Settings"       layout="topleft"       left="0"       name="device_settings_panel" diff --git a/indra/newview/skins/default/xui/en/panel_side_tray.xml b/indra/newview/skins/default/xui/en/panel_side_tray.xml index a419a02d75..d02354a647 100644 --- a/indra/newview/skins/default/xui/en/panel_side_tray.xml +++ b/indra/newview/skins/default/xui/en/panel_side_tray.xml @@ -120,9 +120,9 @@      background_visible="true"    >        <panel -        class="panel_appearance" -        name="panel_appearance" -        filename="panel_appearance.xml" +        class="sidepanel_appearance" +        name="sidepanel_appearance" +        filename="sidepanel_appearance.xml"          label="Edit Appearance"          font="SansSerifBold"        /> diff --git a/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml b/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml index 566fc95230..9839075862 100644 --- a/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml +++ b/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml @@ -7,6 +7,24 @@   layout="topleft"   name="home_tab"   width="333"> +  <scroll_container +   color="DkGray" +   follows="all" +   layout="topleft" +   left="0" +   name="profile_scroll" +   opaque="true" +   height="560" +   width="333" +   top="0"> +  <panel +   background_visible="true" +   height="560" +   layout="topleft" +   name="profile_scroll_panel" +   top="0" +   left="0" +   width="311">      <panel       background_visible="true"       bg_alpha_color="DkGray2" @@ -242,4 +260,6 @@              Browse your inventory.          </text>      </panel> +  </panel> +  </scroll_container>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml index 8fc78c6701..b1afe76500 100644 --- a/indra/newview/skins/default/xui/en/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml @@ -48,38 +48,40 @@       image_unselected="BuyArrow_Off"       image_pressed="BuyArrow_Press"       height="16" -     left="-245" +     left="-200"       name="buycurrency" -     pad_right="22px" +     pad_right="20px"       tool_tip="My Balance: Click to buy more L$"       top="1" -     width="117" /> -    <button -     follows="right|bottom" -     height="16" -     image_selected="parcel_drk_VoiceNo" -     image_unselected="parcel_drk_Voice" -     is_toggle="true" -     left_pad="15" -     top="1" -     name="volume_btn" -     width="16" /> +     width="90" />      <text       type="string"       length="1" +     font="SansSerifSmall"       text_readonly_color="TimeTextColor"       follows="right|bottom"       halign="right"       height="16"       top="5"       layout="topleft" -     left_pad="7" +     left_pad="-5"       name="TimeText"       text_color="TimeTextColor"       tool_tip="Current time (Pacific)"       width="80">          12:00 AM      </text> +    <button +     follows="right|bottom" +     height="16" +     image_selected="parcel_drk_VoiceNo" +     image_unselected="parcel_drk_Voice" +     is_toggle="true" +     left_pad="5" +     top="1" +     name="volume_btn" +     tool_tip="Global Volume Control" +     width="16" />      <text       enabled="true"       follows="right|bottom" diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml index 1f67a0a732..3384852f27 100644 --- a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml @@ -18,7 +18,7 @@       visible="false"       width="380" />      <icon -     height="24" +     height="20"       follows="top|right|left"       image_name="ListItem_Select"       layout="topleft" @@ -26,7 +26,7 @@       name="selected_icon"       top="0"       visible="false" -     width="320" /> +     width="380" />      <icon       height="16"       follows="top|left" @@ -46,7 +46,7 @@       text_color="white"       top="4"       value="..." -     width="242" /> +     width="330" />      <button       follows="right"       height="20" @@ -55,7 +55,7 @@       left_pad="5"       right="-3"       name="profile_btn" -     top_delta="-2" +     top="1"       visible="false"       width="20" />  </panel> diff --git a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml new file mode 100644 index 0000000000..041297a542 --- /dev/null +++ b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml @@ -0,0 +1,104 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel +	  background_visible="true" +	  follows="all" +	  height="400" +	  label="Appearance" +	  layout="topleft" +	  min_height="350" +	  min_width="240" +	  name="appearance panel" +	  width="333"> +     <string +		 name="looks_tab_title" +		 value="Outfits" /> +     <panel +		 left="5" width="320" height="55" +		 background_visible="true" +		 background_opaque="false" +		 bg_alpha_color="0.2 0.2 0.2 1.0" +		 name="panel_currentlook" +		 follows="left|top|right"> +		<text +			 top="-5" width="200" left="5" height="10" follows="left|right|top" +        	 font="SansSerif" text_color="LtGray" word_wrap="true" +        	 mouse_opaque="false" name="currentlook_title"> +					Current Outfit +    	</text> +  		<text +			 top="-30" left="8" height="10" follows="left|right|top" +      		 font="SansSerifBold" text_color="white" word_wrap="true" +      		 mouse_opaque="false" name="currentlook_name" > +					MyOutfit +  		</text> +  	    <button +  	     	 follows="left|right|top" +  	     	 font="SansSerif" +  	     	 top="28" right="-105" width="60" height="20" +  	     	 layout="topleft" +  		 	 label="Edit" +  	     	 name="editappearance_btn"/> +	</panel> + +    <filter_editor +  	     follows="left|top|right" +  	     font="SansSerif" +  	     label="Filter" +  	     layout="topleft" +  	     left="15"  +		 width="313" +		 height="20" +  	     name="Filter" /> +    <panel +   	     class="panel_outfits_inventory" +   	     filename="panel_outfits_inventory.xml" + 	     name="panel_outfits_inventory" +  	     follows="all" +  	     height="271" +  	     halign="center" +  	     layout="topleft" +  	     left="10" +  	     top_pad="19" +  	     width="313" /> +    <button +  	     follows="bottom|left" +     font="SansSerifSmall" +  	     height="25" +  	     label="Wear" +  	     layout="topleft" +  	     left="10" +  	     name="wear_btn" +     	 top_pad="0" +       	 width="80" /> +    <button +    	 follows="bottom|left" +     font="SansSerifSmall" +  	     height="25" +  	     label="New Outfit" +  	     layout="topleft" +  	     left_pad="0" +  	     name="newlook_btn" +  	     top_delta="0" +   	     width="90" /> + +	<panel +       	 class="panel_look_info" +       	 filename="panel_look_info.xml" +       	 follows="all" +       	 layout="topleft" +       	 left="0" +       	 name="panel_look_info" +       	 top="-200" +       	 visible="false" /> + +	<panel +	   	 class="panel_edit_wearable" +	   	 filename="panel_edit_wearable.xml" +	   	 follows="all" +	   	 layout="topleft" +	   	 left="0" +	   	 name="panel_edit_wearable" +	   	 top="-200" +	   	 visible="false" +	   	 width="333" /> +</panel> diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 761c17cfd2..e76763d7eb 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -1747,10 +1747,10 @@ Clears (deletes) the media and all params from the given face.    </string>    <!-- Avatar busy/away mode --> -	<string name="AvatarSetNotAway">Set Not Away</string> -	<string name="AvatarSetAway">Set Away</string> -	<string name="AvatarSetNotBusy">Set Not Busy</string> -	<string name="AvatarSetBusy">Set Busy</string> +	<string name="AvatarSetNotAway">Not Away</string> +	<string name="AvatarSetAway">Away</string> +	<string name="AvatarSetNotBusy">Not Busy</string> +	<string name="AvatarSetBusy">Busy</string>  	<!-- Wearable Types -->  	<string name="shape">Shape</string> @@ -2868,6 +2868,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE].    <string name="inventory_item_offered-im">      Inventory item offered    </string> +  <string name="share_alert"> +    Drag items from inventory here +  </string>    <string name="only_user_message">      You are the only user in this session. diff --git a/indra/newview/skins/default/xui/es/panel_edit_profile.xml b/indra/newview/skins/default/xui/es/panel_edit_profile.xml index c12dd8d58c..bcf4128e01 100644 --- a/indra/newview/skins/default/xui/es/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/es/panel_edit_profile.xml @@ -1,45 +1,45 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel name="edit_profile_panel"> -   <string name="CaptionTextAcctInfo"> -       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION] -   </string> -   <string name="AcctTypeResident" -    value="Residente" /> -   <string name="AcctTypeTrial" -    value="Prueba" /> -   <string name="AcctTypeCharterMember" -    value="Miembro fundador" /> -   <string name="AcctTypeEmployee" -    value="Empleado de Linden Lab" /> -   <string name="PaymentInfoUsed" -    value="Ha usado una forma de pago" /> -   <string name="PaymentInfoOnFile" -    value="Hay infor. de la forma de pago" /> -   <string name="NoPaymentInfoOnFile" -    value="Sin infor. de la forma de pago" /> -   <string name="AgeVerified" -    value="Edad verificada" /> -   <string name="NotAgeVerified" -    value="Edad no verificada" /> -   <string name="partner_edit_link_url"> -       http://www.secondlife.com/account/partners.php?lang=es -   </string> -    <panel name="scroll_content_panel"> -    <panel name="data_panel" > -     <panel name="lifes_images_panel"> -          <panel name="second_life_image_panel"> -              <text name="second_life_photo_title_text"> -			[SECOND_LIFE]: -              </text> -          </panel> -      </panel> -        <text name="title_partner_text" value="Compañero/a:"/> -        <panel name="partner_data_panel"> -            <text name="partner_text" value="[FIRST] [LAST]"/> -         </panel> -      <text name="text_box3"> -	Mensaje en el estado ocupado: -      </text> -    </panel> -    </panel> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 +<panel name="edit_profile_panel">
 +   <string name="CaptionTextAcctInfo">
 +       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
 +   </string>
 +   <string name="AcctTypeResident"
 +    value="Residente" />
 +   <string name="AcctTypeTrial"
 +    value="Prueba" />
 +   <string name="AcctTypeCharterMember"
 +    value="Miembro fundador" />
 +   <string name="AcctTypeEmployee"
 +    value="Empleado de Linden Lab" />
 +   <string name="PaymentInfoUsed"
 +    value="Ha usado una forma de pago" />
 +   <string name="PaymentInfoOnFile"
 +    value="Hay infor. de la forma de pago" />
 +   <string name="NoPaymentInfoOnFile"
 +    value="Sin infor. de la forma de pago" />
 +   <string name="AgeVerified"
 +    value="Edad verificada" />
 +   <string name="NotAgeVerified"
 +    value="Edad no verificada" />
 +   <string name="partner_edit_link_url">
 +       http://www.secondlife.com/account/partners.php?lang=es
 +   </string>
 +    <panel name="scroll_content_panel">
 +    <panel name="data_panel" >
 +     <panel name="lifes_images_panel">
 +          <panel name="second_life_image_panel">
 +              <text name="second_life_photo_title_text">
 +			[SECOND_LIFE]:
 +              </text>
 +          </panel>
 +      </panel>
 +        <text name="title_partner_text" value="Compañero/a:"/>
 +        <panel name="partner_data_panel">
 +            <text name="partner_text" value="[FIRST] [LAST]"/>
 +         </panel>
 +      <text name="text_box3">
 +	Mensaje en el estado ocupado:
 +      </text>
 +    </panel>
 +    </panel>
 +</panel>
 diff --git a/indra/newview/skins/default/xui/it/panel_edit_profile.xml b/indra/newview/skins/default/xui/it/panel_edit_profile.xml index 33f3c367c2..0eba7bf3b6 100644 --- a/indra/newview/skins/default/xui/it/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/it/panel_edit_profile.xml @@ -1,45 +1,45 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel name="edit_profile_panel"> -   <string name="CaptionTextAcctInfo"> -       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION] -   </string> -   <string name="AcctTypeResident" -    value="Residente" /> -   <string name="AcctTypeTrial" -    value="Prova" /> -   <string name="AcctTypeCharterMember" -    value="Membro privilegiato" /> -   <string name="AcctTypeEmployee" -    value="Impiegato della Linden Lab" /> -   <string name="PaymentInfoUsed" -    value="Info. di pagamento usate" /> -   <string name="PaymentInfoOnFile" -    value="Info. di pagamento in archivio" /> -   <string name="NoPaymentInfoOnFile" -    value="Nessuna info. di pagamento" /> -   <string name="AgeVerified" -    value="Età verificata" /> -   <string name="NotAgeVerified" -    value="Età non verificata" /> -   <string name="partner_edit_link_url"> -       http://www.secondlife.com/account/partners.php?lang=it -   </string> -    <panel name="scroll_content_panel"> -    <panel name="data_panel" > -     <panel name="lifes_images_panel"> -          <panel name="second_life_image_panel"> -              <text name="second_life_photo_title_text"> -			[SECOND_LIFE]: -              </text> -          </panel> -      </panel> -        <text name="title_partner_text" value="Partner:"/> -        <panel name="partner_data_panel"> -            <text name="partner_text" value="[FIRST] [LAST]"/> -         </panel> -      <text name="text_box3"> -	Risposta agli IM quando sono in 'Occupato': -      </text> -    </panel> -    </panel> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 +<panel name="edit_profile_panel">
 +   <string name="CaptionTextAcctInfo">
 +       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
 +   </string>
 +   <string name="AcctTypeResident"
 +    value="Residente" />
 +   <string name="AcctTypeTrial"
 +    value="Prova" />
 +   <string name="AcctTypeCharterMember"
 +    value="Membro privilegiato" />
 +   <string name="AcctTypeEmployee"
 +    value="Impiegato della Linden Lab" />
 +   <string name="PaymentInfoUsed"
 +    value="Info. di pagamento usate" />
 +   <string name="PaymentInfoOnFile"
 +    value="Info. di pagamento in archivio" />
 +   <string name="NoPaymentInfoOnFile"
 +    value="Nessuna info. di pagamento" />
 +   <string name="AgeVerified"
 +    value="Età verificata" />
 +   <string name="NotAgeVerified"
 +    value="Età non verificata" />
 +   <string name="partner_edit_link_url">
 +       http://www.secondlife.com/account/partners.php?lang=it
 +   </string>
 +    <panel name="scroll_content_panel">
 +    <panel name="data_panel" >
 +     <panel name="lifes_images_panel">
 +          <panel name="second_life_image_panel">
 +              <text name="second_life_photo_title_text">
 +			[SECOND_LIFE]:
 +              </text>
 +          </panel>
 +      </panel>
 +        <text name="title_partner_text" value="Partner:"/>
 +        <panel name="partner_data_panel">
 +            <text name="partner_text" value="[FIRST] [LAST]"/>
 +         </panel>
 +      <text name="text_box3">
 +	Risposta agli IM quando sono in 'Occupato':
 +      </text>
 +    </panel>
 +    </panel>
 +</panel>
 diff --git a/indra/newview/skins/default/xui/nl/panel_edit_profile.xml b/indra/newview/skins/default/xui/nl/panel_edit_profile.xml index 172395e20a..00f8c087de 100644 --- a/indra/newview/skins/default/xui/nl/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/nl/panel_edit_profile.xml @@ -1,45 +1,45 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel name="edit_profile_panel"> -   <string name="CaptionTextAcctInfo"> -       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION] -   </string> -   <string name="AcctTypeResident" -    value="Inwoner" /> -   <string name="AcctTypeTrial" -    value="Proef" /> -   <string name="AcctTypeCharterMember" -    value="Charter lid" /> -   <string name="AcctTypeEmployee" -    value="Linden Lab werknemer" /> -   <string name="PaymentInfoUsed" -    value="Betalingsinformatie gebruikt" /> -   <string name="PaymentInfoOnFile" -    value="Betalingsinformatie aanwezig" /> -   <string name="NoPaymentInfoOnFile" -    value="Geen betalingsinfo aanwezig" /> -   <string name="AgeVerified" -    value="Leeftijd geverifieerd" /> -   <string name="NotAgeVerified" -    value="Leeftijd niet geverifieerd" /> -   <string name="partner_edit_link_url"> -       http://www.secondlife.com/account/partners.php?lang=nl -   </string> -    <panel name="scroll_content_panel"> -    <panel name="data_panel" > -     <panel name="lifes_images_panel"> -          <panel name="second_life_image_panel"> -              <text name="second_life_photo_title_text"> -			[SECOND_LIFE]: -              </text> -          </panel> -      </panel> -        <text name="title_partner_text" value="Partner:"/> -        <panel name="partner_data_panel"> -            <text name="partner_text" value="[FIRST] [LAST]"/> -         </panel> -      <text name="text_box3"> -	Antwoord bij Niet Storen: -      </text> -    </panel> -    </panel> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 +<panel name="edit_profile_panel">
 +   <string name="CaptionTextAcctInfo">
 +       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
 +   </string>
 +   <string name="AcctTypeResident"
 +    value="Inwoner" />
 +   <string name="AcctTypeTrial"
 +    value="Proef" />
 +   <string name="AcctTypeCharterMember"
 +    value="Charter lid" />
 +   <string name="AcctTypeEmployee"
 +    value="Linden Lab werknemer" />
 +   <string name="PaymentInfoUsed"
 +    value="Betalingsinformatie gebruikt" />
 +   <string name="PaymentInfoOnFile"
 +    value="Betalingsinformatie aanwezig" />
 +   <string name="NoPaymentInfoOnFile"
 +    value="Geen betalingsinfo aanwezig" />
 +   <string name="AgeVerified"
 +    value="Leeftijd geverifieerd" />
 +   <string name="NotAgeVerified"
 +    value="Leeftijd niet geverifieerd" />
 +   <string name="partner_edit_link_url">
 +       http://www.secondlife.com/account/partners.php?lang=nl
 +   </string>
 +    <panel name="scroll_content_panel">
 +    <panel name="data_panel" >
 +     <panel name="lifes_images_panel">
 +          <panel name="second_life_image_panel">
 +              <text name="second_life_photo_title_text">
 +			[SECOND_LIFE]:
 +              </text>
 +          </panel>
 +      </panel>
 +        <text name="title_partner_text" value="Partner:"/>
 +        <panel name="partner_data_panel">
 +            <text name="partner_text" value="[FIRST] [LAST]"/>
 +         </panel>
 +      <text name="text_box3">
 +	Antwoord bij Niet Storen:
 +      </text>
 +    </panel>
 +    </panel>
 +</panel>
 diff --git a/indra/newview/skins/default/xui/pl/panel_edit_profile.xml b/indra/newview/skins/default/xui/pl/panel_edit_profile.xml index 97fa3118f8..e449a92d7e 100644 --- a/indra/newview/skins/default/xui/pl/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/pl/panel_edit_profile.xml @@ -1,45 +1,45 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel name="edit_profile_panel"> -   <string name="CaptionTextAcctInfo"> -       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION] -   </string> -   <string name="AcctTypeResident" -    value="Rezydent" /> -   <string name="AcctTypeTrial" -    value="Próbne" /> -   <string name="AcctTypeCharterMember" -    value="Członek-zalożyciel" /> -   <string name="AcctTypeEmployee" -    value="Pracownik Linden Lab" /> -   <string name="PaymentInfoUsed" -    value="Dane Konta Używane" /> -   <string name="PaymentInfoOnFile" -    value="Dane Konta Dostępne" /> -   <string name="NoPaymentInfoOnFile" -    value="Brak Danych Konta" /> -   <string name="AgeVerified" -    value="Wiek Zweryfikowany" /> -   <string name="NotAgeVerified" -    value="Brak Weryfikacji Wieku" /> -   <string name="partner_edit_link_url"> -       http://www.secondlife.com/account/partners.php?lang=pl -   </string> -    <panel name="scroll_content_panel"> -    <panel name="data_panel" > -     <panel name="lifes_images_panel"> -          <panel name="second_life_image_panel"> -              <text name="second_life_photo_title_text"> -			[SECOND_LIFE]: -              </text> -          </panel> -      </panel> -        <text name="title_partner_text" value="Partner:"/> -        <panel name="partner_data_panel"> -            <text name="partner_text" value="[FIRST] [LAST]"/> -         </panel> -      <text name="text_box3"> -	Pracuś Mówi: -      </text> -    </panel> -    </panel> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 +<panel name="edit_profile_panel">
 +   <string name="CaptionTextAcctInfo">
 +       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
 +   </string>
 +   <string name="AcctTypeResident"
 +    value="Rezydent" />
 +   <string name="AcctTypeTrial"
 +    value="Próbne" />
 +   <string name="AcctTypeCharterMember"
 +    value="Członek-zalożyciel" />
 +   <string name="AcctTypeEmployee"
 +    value="Pracownik Linden Lab" />
 +   <string name="PaymentInfoUsed"
 +    value="Dane Konta Używane" />
 +   <string name="PaymentInfoOnFile"
 +    value="Dane Konta Dostępne" />
 +   <string name="NoPaymentInfoOnFile"
 +    value="Brak Danych Konta" />
 +   <string name="AgeVerified"
 +    value="Wiek Zweryfikowany" />
 +   <string name="NotAgeVerified"
 +    value="Brak Weryfikacji Wieku" />
 +   <string name="partner_edit_link_url">
 +       http://www.secondlife.com/account/partners.php?lang=pl
 +   </string>
 +    <panel name="scroll_content_panel">
 +    <panel name="data_panel" >
 +     <panel name="lifes_images_panel">
 +          <panel name="second_life_image_panel">
 +              <text name="second_life_photo_title_text">
 +			[SECOND_LIFE]:
 +              </text>
 +          </panel>
 +      </panel>
 +        <text name="title_partner_text" value="Partner:"/>
 +        <panel name="partner_data_panel">
 +            <text name="partner_text" value="[FIRST] [LAST]"/>
 +         </panel>
 +      <text name="text_box3">
 +	Pracuś Mówi:
 +      </text>
 +    </panel>
 +    </panel>
 +</panel>
 diff --git a/indra/newview/skins/default/xui/pt/panel_edit_profile.xml b/indra/newview/skins/default/xui/pt/panel_edit_profile.xml index a989cab167..e97e77cfe6 100644 --- a/indra/newview/skins/default/xui/pt/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/pt/panel_edit_profile.xml @@ -1,45 +1,45 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel name="edit_profile_panel"> -   <string name="CaptionTextAcctInfo"> -       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION] -   </string> -   <string name="AcctTypeResident" -    value="Residente" /> -   <string name="AcctTypeTrial" -    value="Teste" /> -   <string name="AcctTypeCharterMember" -    value="Estatuto do membro" /> -   <string name="AcctTypeEmployee" -    value="Contratado da Linden Lab" /> -   <string name="PaymentInfoUsed" -    value="Infor. de pagamento utilizadas" /> -   <string name="PaymentInfoOnFile" -    value="Infor. de pagamento no arquivo" /> -   <string name="NoPaymentInfoOnFile" -    value="Sem infor. de pagamento no arquivo" /> -   <string name="AgeVerified" -    value="Idade Verificada" /> -   <string name="NotAgeVerified" -    value="Idade não Verificada" /> -   <string name="partner_edit_link_url"> -       http://www.secondlife.com/account/partners.php?lang=pt -   </string> -    <panel name="scroll_content_panel"> -    <panel name="data_panel" > -     <panel name="lifes_images_panel"> -          <panel name="second_life_image_panel"> -              <text name="second_life_photo_title_text"> -			[SECOND_LIFE]: -              </text> -          </panel> -      </panel> -        <text name="title_partner_text" value="Parceiro:"/> -        <panel name="partner_data_panel"> -            <text name="partner_text" value="[FIRST] [LAST]"/> -         </panel> -      <text name="text_box3"> -	Resposta no Modo Ocupado: -      </text> -    </panel> -    </panel> -</panel> +<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 +<panel name="edit_profile_panel">
 +   <string name="CaptionTextAcctInfo">
 +       [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
 +   </string>
 +   <string name="AcctTypeResident"
 +    value="Residente" />
 +   <string name="AcctTypeTrial"
 +    value="Teste" />
 +   <string name="AcctTypeCharterMember"
 +    value="Estatuto do membro" />
 +   <string name="AcctTypeEmployee"
 +    value="Contratado da Linden Lab" />
 +   <string name="PaymentInfoUsed"
 +    value="Infor. de pagamento utilizadas" />
 +   <string name="PaymentInfoOnFile"
 +    value="Infor. de pagamento no arquivo" />
 +   <string name="NoPaymentInfoOnFile"
 +    value="Sem infor. de pagamento no arquivo" />
 +   <string name="AgeVerified"
 +    value="Idade Verificada" />
 +   <string name="NotAgeVerified"
 +    value="Idade não Verificada" />
 +   <string name="partner_edit_link_url">
 +       http://www.secondlife.com/account/partners.php?lang=pt
 +   </string>
 +    <panel name="scroll_content_panel">
 +    <panel name="data_panel" >
 +     <panel name="lifes_images_panel">
 +          <panel name="second_life_image_panel">
 +              <text name="second_life_photo_title_text">
 +			[SECOND_LIFE]:
 +              </text>
 +          </panel>
 +      </panel>
 +        <text name="title_partner_text" value="Parceiro:"/>
 +        <panel name="partner_data_panel">
 +            <text name="partner_text" value="[FIRST] [LAST]"/>
 +         </panel>
 +      <text name="text_box3">
 +	Resposta no Modo Ocupado:
 +      </text>
 +    </panel>
 +    </panel>
 +</panel>
 diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 64cfdf2704..4193343d64 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -243,7 +243,7 @@ class WindowsManifest(ViewerManifest):              # Get kdu dll, continue if missing.              try: -                self.path('%s/llkdu.dll' % self.args['configuration'], dst='llkdu.dll') +                self.path('llkdu.dll', dst='llkdu.dll')              except RuntimeError:                  print "Skipping llkdu.dll" | 
