summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/CMakeLists.txt1
-rw-r--r--indra/newview/app_settings/settings.xml24
-rw-r--r--indra/newview/installers/darwin/firstlook-dmg/_DS_Storebin12292 -> 12292 bytes
-rw-r--r--indra/newview/installers/darwin/fix_application_icon_position.sh17
-rw-r--r--indra/newview/installers/darwin/publicnightly-dmg/_DS_Storebin12292 -> 12292 bytes
-rw-r--r--indra/newview/installers/darwin/release-dmg/_DS_Storebin12292 -> 12292 bytes
-rw-r--r--indra/newview/installers/darwin/releasecandidate-dmg/_DS_Storebin12292 -> 12292 bytes
-rw-r--r--indra/newview/llappearancemgr.cpp1
-rw-r--r--indra/newview/llavatarlist.h10
-rw-r--r--indra/newview/llavatarlistitem.cpp88
-rw-r--r--indra/newview/llavatarlistitem.h15
-rw-r--r--indra/newview/llbottomtray.cpp1
-rw-r--r--indra/newview/llchathistory.cpp89
-rw-r--r--indra/newview/llchatitemscontainerctrl.cpp4
-rw-r--r--indra/newview/lldrawable.h1
-rw-r--r--indra/newview/llexpandabletextbox.cpp18
-rw-r--r--indra/newview/llexpandabletextbox.h11
-rw-r--r--indra/newview/llfloateranimpreview.cpp64
-rw-r--r--indra/newview/llfloaterhelpbrowser.cpp19
-rw-r--r--indra/newview/llfloaterland.cpp22
-rw-r--r--indra/newview/llfloatermap.cpp4
-rw-r--r--indra/newview/llfloaterscriptlimits.cpp987
-rw-r--r--indra/newview/llfloaterscriptlimits.h76
-rw-r--r--indra/newview/llfloatersnapshot.cpp4
-rw-r--r--indra/newview/llfloateruipreview.cpp4
-rw-r--r--indra/newview/llfolderviewitem.cpp4
-rw-r--r--indra/newview/llgrouplist.cpp22
-rw-r--r--indra/newview/llgrouplist.h11
-rw-r--r--indra/newview/llgroupmgr.cpp12
-rw-r--r--indra/newview/llimfloater.cpp25
-rw-r--r--indra/newview/llimfloater.h1
-rw-r--r--indra/newview/llimfloatercontainer.cpp16
-rw-r--r--indra/newview/llimfloatercontainer.h4
-rw-r--r--indra/newview/llimview.cpp53
-rw-r--r--indra/newview/llimview.h10
-rw-r--r--indra/newview/llinspect.cpp24
-rw-r--r--indra/newview/llinspect.h3
-rw-r--r--indra/newview/llinspectavatar.cpp13
-rw-r--r--indra/newview/llinspectobject.cpp11
-rw-r--r--indra/newview/llinspectremoteobject.cpp5
-rw-r--r--indra/newview/llinventorybridge.cpp30
-rw-r--r--indra/newview/llinventorybridge.h2
-rw-r--r--indra/newview/llinventorymodel.cpp140
-rw-r--r--indra/newview/lllocationinputctrl.cpp14
-rw-r--r--indra/newview/lllogchat.cpp12
-rw-r--r--indra/newview/llnamelistctrl.cpp2
-rw-r--r--indra/newview/llnavigationbar.cpp137
-rw-r--r--indra/newview/llnavigationbar.h59
-rw-r--r--indra/newview/llnearbychat.cpp52
-rw-r--r--indra/newview/llnearbychat.h6
-rw-r--r--indra/newview/llnotificationhandlerutil.cpp14
-rw-r--r--indra/newview/lloutputmonitorctrl.cpp5
-rw-r--r--indra/newview/llpanelclassified.cpp4
-rw-r--r--indra/newview/llpanelimcontrolpanel.cpp2
-rw-r--r--indra/newview/llpanellogin.cpp17
-rw-r--r--indra/newview/llpanellogin.h3
-rw-r--r--indra/newview/llpanelme.cpp4
-rw-r--r--indra/newview/llpanelpeople.cpp6
-rw-r--r--indra/newview/llpanelplaceprofile.cpp40
-rw-r--r--indra/newview/llpanelplaces.cpp57
-rw-r--r--indra/newview/llpanelplaces.h8
-rw-r--r--indra/newview/llpanelteleporthistory.cpp3
-rw-r--r--indra/newview/llparticipantlist.cpp3
-rw-r--r--indra/newview/llpreviewscript.cpp2
-rw-r--r--indra/newview/llscreenchannel.cpp23
-rw-r--r--indra/newview/llsidepanelinventory.cpp16
-rw-r--r--indra/newview/llspeakingindicatormanager.cpp41
-rw-r--r--indra/newview/llstartup.cpp12
-rw-r--r--indra/newview/llteleporthistory.cpp2
-rw-r--r--indra/newview/lltoolplacer.h1
-rw-r--r--indra/newview/llvieweraudio.cpp25
-rw-r--r--indra/newview/llviewerfloaterreg.cpp1
-rw-r--r--indra/newview/llviewermessage.cpp65
-rw-r--r--indra/newview/llviewermessage.h5
-rw-r--r--indra/newview/llviewerparcelmgr.cpp36
-rw-r--r--indra/newview/llviewerparcelmgr.h12
-rw-r--r--indra/newview/llviewertexteditor.cpp2
-rw-r--r--indra/newview/llviewerwindow.cpp135
-rw-r--r--indra/newview/llviewerwindow.h7
-rw-r--r--indra/newview/llvoicechannel.cpp18
-rw-r--r--indra/newview/llvoiceclient.cpp12
-rw-r--r--indra/newview/llvoiceclient.h1
-rw-r--r--indra/newview/skins/default/colors.xml26
-rw-r--r--indra/newview/skins/default/textures/bottomtray/Move_Fly_Off.pngbin393 -> 3347 bytes
-rw-r--r--indra/newview/skins/default/textures/build/Object_Cone_Selected.pngbin0 -> 576 bytes
-rw-r--r--indra/newview/skins/default/textures/build/Object_Cube_Selected.pngbin0 -> 477 bytes
-rw-r--r--indra/newview/skins/default/textures/build/Object_Cylinder_Selected.pngbin0 -> 443 bytes
-rw-r--r--indra/newview/skins/default/textures/build/Object_Grass_Selected.pngbin0 -> 757 bytes
-rw-r--r--indra/newview/skins/default/textures/build/Object_Hemi_Cone_Selected.pngbin0 -> 531 bytes
-rw-r--r--indra/newview/skins/default/textures/build/Object_Hemi_Cylinder_Selected.pngbin0 -> 463 bytes
-rw-r--r--indra/newview/skins/default/textures/build/Object_Hemi_Sphere_Selected.pngbin0 -> 696 bytes
-rw-r--r--indra/newview/skins/default/textures/build/Object_Prism_Selected.pngbin0 -> 485 bytes
-rw-r--r--indra/newview/skins/default/textures/build/Object_Pyramid_Selected.pngbin0 -> 594 bytes
-rw-r--r--indra/newview/skins/default/textures/build/Object_Ring_Selected.pngbin0 -> 738 bytes
-rw-r--r--indra/newview/skins/default/textures/build/Object_Sphere_Selected.pngbin0 -> 1003 bytes
-rw-r--r--indra/newview/skins/default/textures/build/Object_Tetrahedron_Selected.pngbin0 -> 558 bytes
-rw-r--r--indra/newview/skins/default/textures/build/Object_Torus_Selected.pngbin0 -> 825 bytes
-rw-r--r--indra/newview/skins/default/textures/build/Object_Tree_Selected.pngbin0 -> 839 bytes
-rw-r--r--indra/newview/skins/default/textures/build/Object_Tube_Selected.pngbin0 -> 552 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Parcel_FlyNo_Dark.pngbin424 -> 3221 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Parcel_FlyNo_Light.pngbin429 -> 3235 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Parcel_Fly_Dark.pngbin271 -> 3077 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Parcel_M_Dark.pngbin333 -> 348 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Parcel_M_Light.pngbin322 -> 335 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Parcel_PG_Dark.pngbin407 -> 400 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Parcel_PG_Light.pngbin387 -> 403 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Parcel_R_Dark.pngbin319 -> 357 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Parcel_R_Light.pngbin309 -> 355 bytes
-rw-r--r--indra/newview/skins/default/textures/textures.xml20
-rw-r--r--indra/newview/skins/default/xui/en/floater_aaa.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_animation_preview.xml6
-rw-r--r--indra/newview/skins/default/xui/en/floater_beacons.xml3
-rw-r--r--indra/newview/skins/default/xui/en/floater_color_picker.xml61
-rw-r--r--indra/newview/skins/default/xui/en/floater_help_browser.xml29
-rw-r--r--indra/newview/skins/default/xui/en/floater_im_session.xml10
-rw-r--r--indra/newview/skins/default/xui/en/floater_inventory.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_live_lsleditor.xml45
-rw-r--r--indra/newview/skins/default/xui/en/floater_map.xml40
-rw-r--r--indra/newview/skins/default/xui/en/floater_pay_object.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_preview_animation.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_preview_sound.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_script_limits.xml1
-rw-r--r--indra/newview/skins/default/xui/en/floater_script_preview.xml12
-rw-r--r--indra/newview/skins/default/xui/en/floater_snapshot.xml3
-rw-r--r--indra/newview/skins/default/xui/en/floater_test_checkbox.xml79
-rw-r--r--indra/newview/skins/default/xui/en/floater_tools.xml41
-rw-r--r--indra/newview/skins/default/xui/en/floater_world_map.xml40
-rw-r--r--indra/newview/skins/default/xui/en/menu_inventory.xml2
-rw-r--r--indra/newview/skins/default/xui/en/menu_login.xml1
-rw-r--r--indra/newview/skins/default/xui/en/menu_object.xml20
-rw-r--r--indra/newview/skins/default/xui/en/menu_participant_list.xml3
-rw-r--r--indra/newview/skins/default/xui/en/menu_viewer.xml61
-rw-r--r--indra/newview/skins/default/xui/en/panel_chat_header.xml7
-rw-r--r--indra/newview/skins/default/xui/en/panel_classified_info.xml54
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_profile.xml137
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_general.xml87
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml152
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_land_money.xml168
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_notices.xml82
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_roles.xml243
-rw-r--r--indra/newview/skins/default/xui/en/panel_im_control_panel.xml34
-rw-r--r--indra/newview/skins/default/xui/en/panel_landmarks.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_login.xml26
-rw-r--r--indra/newview/skins/default/xui/en/panel_me.xml10
-rw-r--r--indra/newview/skins/default/xui/en/panel_my_profile.xml61
-rw-r--r--indra/newview/skins/default/xui/en/panel_navigation_bar.xml22
-rw-r--r--indra/newview/skins/default/xui/en/panel_people.xml22
-rw-r--r--indra/newview/skins/default/xui/en/panel_pick_info.xml14
-rw-r--r--indra/newview/skins/default/xui/en/panel_places.xml5
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_chat.xml38
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_general.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_sound.xml35
-rw-r--r--indra/newview/skins/default/xui/en/panel_profile.xml69
-rw-r--r--indra/newview/skins/default/xui/en/panel_profile_view.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_script_ed.xml120
-rw-r--r--indra/newview/skins/default/xui/en/panel_script_limits_my_avatar.xml45
-rw-r--r--indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml38
-rw-r--r--indra/newview/skins/default/xui/en/panel_side_tray.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_status_bar.xml17
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_task_info.xml2
-rw-r--r--indra/newview/skins/default/xui/en/strings.xml1
-rw-r--r--indra/newview/skins/default/xui/en/widgets/avatar_list_item.xml44
-rw-r--r--indra/newview/skins/default/xui/en/widgets/expandable_text.xml9
-rw-r--r--indra/newview/skins/default/xui/en/widgets/filter_editor.xml2
-rw-r--r--indra/newview/skins/default/xui/en/widgets/location_input.xml4
-rw-r--r--indra/newview/skins/default/xui/en/widgets/menu_item.xml2
-rw-r--r--indra/newview/skins/default/xui/en/widgets/tab_container.xml4
167 files changed, 2916 insertions, 1874 deletions
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 40c6b727a1..407036f76e 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -7,6 +7,7 @@ include(Boost)
include(BuildVersion)
include(DBusGlib)
include(DirectX)
+include(DragDrop)
include(ELFIO)
include(FMOD)
include(OPENAL)
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 8aaa7a69c1..576713ca0d 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -5527,6 +5527,17 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>PrimMediaDragNDrop</key>
+ <map>
+ <key>Comment</key>
+ <string>Enable drag and drop of URLs onto prim faces</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>PrimMediaMaxRetries</key>
<map>
<key>Comment</key>
@@ -7814,7 +7825,7 @@
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
- <integer>1</integer>
+ <integer>0</integer>
</map>
<key>ShowCrosshairs</key>
<map>
@@ -10843,6 +10854,17 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>SLURLDragNDrop</key>
+ <map>
+ <key>Comment</key>
+ <string>Enable drag and drop of SLURLs onto the viewer</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>soundsbeacon</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/installers/darwin/firstlook-dmg/_DS_Store b/indra/newview/installers/darwin/firstlook-dmg/_DS_Store
index 9d9fd897e7..495ec37f53 100644
--- a/indra/newview/installers/darwin/firstlook-dmg/_DS_Store
+++ b/indra/newview/installers/darwin/firstlook-dmg/_DS_Store
Binary files differ
diff --git a/indra/newview/installers/darwin/fix_application_icon_position.sh b/indra/newview/installers/darwin/fix_application_icon_position.sh
index a0b72a89f2..c6b92589db 100644
--- a/indra/newview/installers/darwin/fix_application_icon_position.sh
+++ b/indra/newview/installers/darwin/fix_application_icon_position.sh
@@ -4,11 +4,14 @@ cp -r ./../../../build-darwin-i386/newview/*.dmg ~/Desktop/TempBuild.dmg
hdid ~/Desktop/TempBuild.dmg
open -a finder /Volumes/Second\ Life\ Installer
osascript dmg-cleanup.applescript
-cp /Volumes/Second\ Life\ Installer/.DS_Store ~/Desktop/_DS_Store
-chflags nohidden ~/Desktop/_DS_Store
-cp ~/Desktop/_DS_Store ./firstlook-dmg/_DS_Store
-cp ~/Desktop/_DS_Store ./publicnightly-dmg/_DS_Store
-cp ~/Desktop/_DS_Store ./release-dmg/_DS_Store
-cp ~/Desktop/_DS_Store ./releasecandidate-dmg/_DS_Store
umount /Volumes/Second\ Life\ Installer/
-rm ~/Desktop/_DS_Store ~/Desktop/TempBuild.dmg
+hdid ~/Desktop/TempBuild.dmg
+open -a finder /Volumes/Second\ Life\ Installer
+#cp /Volumes/Second\ Life\ Installer/.DS_Store ~/Desktop/_DS_Store
+#chflags nohidden ~/Desktop/_DS_Store
+#cp ~/Desktop/_DS_Store ./firstlook-dmg/_DS_Store
+#cp ~/Desktop/_DS_Store ./publicnightly-dmg/_DS_Store
+#cp ~/Desktop/_DS_Store ./release-dmg/_DS_Store
+#cp ~/Desktop/_DS_Store ./releasecandidate-dmg/_DS_Store
+#umount /Volumes/Second\ Life\ Installer/
+#rm ~/Desktop/_DS_Store ~/Desktop/TempBuild.dmg
diff --git a/indra/newview/installers/darwin/publicnightly-dmg/_DS_Store b/indra/newview/installers/darwin/publicnightly-dmg/_DS_Store
index 9d9fd897e7..495ec37f53 100644
--- a/indra/newview/installers/darwin/publicnightly-dmg/_DS_Store
+++ b/indra/newview/installers/darwin/publicnightly-dmg/_DS_Store
Binary files differ
diff --git a/indra/newview/installers/darwin/release-dmg/_DS_Store b/indra/newview/installers/darwin/release-dmg/_DS_Store
index 9d9fd897e7..495ec37f53 100644
--- a/indra/newview/installers/darwin/release-dmg/_DS_Store
+++ b/indra/newview/installers/darwin/release-dmg/_DS_Store
Binary files differ
diff --git a/indra/newview/installers/darwin/releasecandidate-dmg/_DS_Store b/indra/newview/installers/darwin/releasecandidate-dmg/_DS_Store
index 9d9fd897e7..495ec37f53 100644
--- a/indra/newview/installers/darwin/releasecandidate-dmg/_DS_Store
+++ b/indra/newview/installers/darwin/releasecandidate-dmg/_DS_Store
Binary files differ
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 8f4ce4498e..5088c65122 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -1081,7 +1081,6 @@ void LLAppearanceManager::addCOFItemLink(const LLInventoryItem *item, bool do_up
// MULTI-WEARABLES: revisit if more than one per type is allowed.
else if (areMatchingWearables(vitem,inv_item))
{
- gAgentWearables.removeWearable(inv_item->getWearableType(),true,0);
if (inv_item->getIsLinkType())
{
gInventory.purgeObject(inv_item->getUUID());
diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h
index a58a562378..aeed4fee08 100644
--- a/indra/newview/llavatarlist.h
+++ b/indra/newview/llavatarlist.h
@@ -57,11 +57,11 @@ public:
struct Params : public LLInitParam::Block<Params, LLFlatListView::Params>
{
- Optional<bool> ignore_online_status; // show all items as online
- Optional<bool> show_last_interaction_time; // show most recent interaction time. *HACK: move this to a derived class
- Optional<bool> show_info_btn;
- Optional<bool> show_profile_btn;
- Optional<bool> show_speaking_indicator;
+ Optional<bool> ignore_online_status, // show all items as online
+ show_last_interaction_time, // show most recent interaction time. *HACK: move this to a derived class
+ show_info_btn,
+ show_profile_btn,
+ show_speaking_indicator;
Params();
};
diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
index 2bcd097717..846b2843dd 100644
--- a/indra/newview/llavatarlistitem.cpp
+++ b/indra/newview/llavatarlistitem.cpp
@@ -48,6 +48,17 @@ S32 LLAvatarListItem::sLeftPadding = 0;
S32 LLAvatarListItem::sRightNamePadding = 0;
S32 LLAvatarListItem::sChildrenWidths[LLAvatarListItem::ALIC_COUNT];
+static LLWidgetNameRegistry::StaticRegistrar sRegisterAvatarListItemParams(&typeid(LLAvatarListItem::Params), "avatar_list_item");
+
+LLAvatarListItem::Params::Params()
+: default_style("default_style"),
+ voice_call_invited_style("voice_call_invited_style"),
+ voice_call_joined_style("voice_call_joined_style"),
+ voice_call_left_style("voice_call_left_style"),
+ online_style("online_style"),
+ offline_style("offline_style")
+{};
+
LLAvatarListItem::LLAvatarListItem(bool not_from_ui_factory/* = true*/)
: LLPanel(),
@@ -166,9 +177,30 @@ void LLAvatarListItem::setHighlight(const std::string& highlight)
void LLAvatarListItem::setState(EItemState item_style)
{
- item_style_map_t& item_styles_params_map = getItemStylesParams();
+ const LLAvatarListItem::Params& params = LLUICtrlFactory::getDefaultParams<LLAvatarListItem>();
- mAvatarNameStyle = item_styles_params_map[item_style];
+ switch(item_style)
+ {
+ default:
+ case IS_DEFAULT:
+ mAvatarNameStyle = params.default_style();
+ break;
+ case IS_VOICE_INVITED:
+ mAvatarNameStyle = params.voice_call_invited_style();
+ break;
+ case IS_VOICE_JOINED:
+ mAvatarNameStyle = params.voice_call_joined_style();
+ break;
+ case IS_VOICE_LEFT:
+ mAvatarNameStyle = params.voice_call_left_style();
+ break;
+ case IS_ONLINE:
+ mAvatarNameStyle = params.online_style();
+ break;
+ case IS_OFFLINE:
+ mAvatarNameStyle = params.offline_style();
+ break;
+ }
// *NOTE: You cannot set the style on a text box anymore, you must
// rebuild the text. This will cause problems if the text contains
@@ -353,58 +385,6 @@ std::string LLAvatarListItem::formatSeconds(U32 secs)
}
// static
-LLAvatarListItem::item_style_map_t& LLAvatarListItem::getItemStylesParams()
-{
- static item_style_map_t item_styles_params_map;
- if (!item_styles_params_map.empty()) return item_styles_params_map;
-
- LLPanel::Params params = LLUICtrlFactory::getDefaultParams<LLPanel>();
- LLPanel* params_panel = LLUICtrlFactory::create<LLPanel>(params);
-
- BOOL sucsess = LLUICtrlFactory::instance().buildPanel(params_panel, "panel_avatar_list_item_params.xml");
-
- if (sucsess)
- {
-
- item_styles_params_map.insert(
- std::make_pair(IS_DEFAULT,
- params_panel->getChild<LLTextBox>("default_style")->getDefaultStyle()));
-
- item_styles_params_map.insert(
- std::make_pair(IS_VOICE_INVITED,
- params_panel->getChild<LLTextBox>("voice_call_invited_style")->getDefaultStyle()));
-
- item_styles_params_map.insert(
- std::make_pair(IS_VOICE_JOINED,
- params_panel->getChild<LLTextBox>("voice_call_joined_style")->getDefaultStyle()));
-
- item_styles_params_map.insert(
- std::make_pair(IS_VOICE_LEFT,
- params_panel->getChild<LLTextBox>("voice_call_left_style")->getDefaultStyle()));
-
- item_styles_params_map.insert(
- std::make_pair(IS_ONLINE,
- params_panel->getChild<LLTextBox>("online_style")->getDefaultStyle()));
-
- item_styles_params_map.insert(
- std::make_pair(IS_OFFLINE,
- params_panel->getChild<LLTextBox>("offline_style")->getDefaultStyle()));
- }
- else
- {
- item_styles_params_map.insert(std::make_pair(IS_DEFAULT, LLStyle::Params()));
- item_styles_params_map.insert(std::make_pair(IS_VOICE_INVITED, LLStyle::Params()));
- item_styles_params_map.insert(std::make_pair(IS_VOICE_JOINED, LLStyle::Params()));
- item_styles_params_map.insert(std::make_pair(IS_VOICE_LEFT, LLStyle::Params()));
- item_styles_params_map.insert(std::make_pair(IS_ONLINE, LLStyle::Params()));
- item_styles_params_map.insert(std::make_pair(IS_OFFLINE, LLStyle::Params()));
- }
- if (params_panel) params_panel->die();
-
- return item_styles_params_map;
-}
-
-// static
LLAvatarListItem::icon_color_map_t& LLAvatarListItem::getItemIconColorMap()
{
static icon_color_map_t item_icon_color_map;
diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h
index 61c0a8660e..426d80e0a8 100644
--- a/indra/newview/llavatarlistitem.h
+++ b/indra/newview/llavatarlistitem.h
@@ -46,6 +46,18 @@ class LLAvatarIconCtrl;
class LLAvatarListItem : public LLPanel, public LLFriendObserver
{
public:
+ struct Params : public LLInitParam::Block<Params, LLPanel::Params>
+ {
+ Optional<LLStyle::Params> default_style,
+ voice_call_invited_style,
+ voice_call_joined_style,
+ voice_call_left_style,
+ online_style,
+ offline_style;
+
+ Params();
+ };
+
typedef enum e_item_state_type {
IS_DEFAULT,
IS_VOICE_INVITED,
@@ -143,9 +155,6 @@ private:
std::string formatSeconds(U32 secs);
- typedef std::map<EItemState, LLStyle::Params> item_style_map_t;
- static item_style_map_t& getItemStylesParams();
-
typedef std::map<EItemState, LLColor4> icon_color_map_t;
static icon_color_map_t& getItemIconColorMap();
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index a2d594cfa2..0102e9488e 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -474,6 +474,7 @@ void LLBottomTray::onContextMenuItemClicked(const LLSD& userdata)
else if (item == "paste")
{
edit_box->paste();
+ edit_box->setFocus(TRUE);
}
else if (item == "delete")
{
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index a570862675..1dc0e8c0a7 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -53,8 +53,11 @@
#include "llagent.h"
#include "llnotificationsutil.h"
#include "lltoastnotifypanel.h"
+#include "lltooltip.h"
#include "llviewerregion.h"
+#include "llviewertexteditor.h"
#include "llworld.h"
+#include "lluiconstants.h"
#include "llsidetray.h"//for blocked objects panel
@@ -110,6 +113,34 @@ public:
return LLPanel::handleMouseUp(x,y,mask);
}
+ //*TODO remake it using mouse enter/leave and static LLHandle<LLIconCtrl> to add/remove as a child
+ BOOL handleToolTip(S32 x, S32 y, MASK mask)
+ {
+ LLViewerTextEditor* name = getChild<LLViewerTextEditor>("user_name");
+ if (name && name->parentPointInView(x, y) && mAvatarID.notNull() && SYSTEM_FROM != mFrom)
+ {
+
+ // Spawn at right side of the name textbox.
+ LLRect sticky_rect = name->calcScreenRect();
+ S32 icon_x = llmin(sticky_rect.mLeft + name->getTextBoundingRect().getWidth() + 7, sticky_rect.mRight - 3);
+
+ LLToolTip::Params params;
+ params.background_visible(false);
+ params.click_callback(boost::bind(&LLChatHistoryHeader::onHeaderPanelClick, this, 0, 0, 0));
+ params.delay_time(0.0f); // spawn instantly on hover
+ params.image(LLUI::getUIImage("Info_Small"));
+ params.message("");
+ params.padding(0);
+ params.pos(LLCoordGL(icon_x, sticky_rect.mTop - 2));
+ params.sticky_rect(sticky_rect);
+
+ LLToolTipMgr::getInstance()->show(params);
+ return TRUE;
+ }
+
+ return LLPanel::handleToolTip(x, y, mask);
+ }
+
void onObjectIconContextMenuItemClicked(const LLSD& userdata)
{
std::string level = userdata.asString();
@@ -518,7 +549,7 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
chatters += *it;
if (++it != mUnreadChatSources.end())
{
- chatters += ",";
+ chatters += ", ";
}
}
LLStringUtil::format_map_t args;
@@ -579,19 +610,26 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
url += "?name=" + chat.mFromName;
url += "&owner=" + args["owner_id"].asString();
- LLViewerRegion *region = LLWorld::getInstance()->getRegionFromPosAgent(chat.mPosAgent);
- if (region)
+ std::string slurl = args["slurl"].asString();
+ if (slurl.empty())
{
- S32 x, y, z;
- LLSLURL::globalPosToXYZ(LLVector3d(chat.mPosAgent), x, y, z);
- url += "&slurl=" + region->getName() + llformat("/%d/%d/%d", x, y, z);
+ LLViewerRegion *region = LLWorld::getInstance()->getRegionFromPosAgent(chat.mPosAgent);
+ if (region)
+ {
+ S32 x, y, z;
+ LLSLURL::globalPosToXYZ(LLVector3d(chat.mPosAgent), x, y, z);
+ slurl = region->getName() + llformat("/%d/%d/%d", x, y, z);
+ }
}
+ url += "&slurl=" + slurl;
// set the link for the object name to be the objectim SLapp
+ // (don't let object names with hyperlinks override our objectim Url)
LLStyle::Params link_params(style_params);
link_params.color.control = "HTMLLinkColor";
link_params.link_href = url;
- mEditor->appendText(chat.mFromName + delimiter, false, link_params);
+ mEditor->appendText("<nolink>" + chat.mFromName + "</nolink>" + delimiter,
+ false, link_params);
}
else if ( chat.mFromName != SYSTEM_FROM && chat.mFromID.notNull() )
{
@@ -664,8 +702,36 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
{
LLToastNotifyPanel* notify_box = new LLToastNotifyPanel(
notification);
+ //we can't set follows in xml since it broke toasts behavior
notify_box->setFollowsLeft();
notify_box->setFollowsRight();
+ notify_box->setFollowsTop();
+
+ LLButton* accept_button = notify_box->getChild<LLButton> ("Accept",
+ TRUE);
+ if (accept_button != NULL)
+ {
+ accept_button->setFollowsNone();
+ accept_button->setOrigin(2*HPAD, accept_button->getRect().mBottom);
+ }
+
+ LLButton* decline_button = notify_box->getChild<LLButton> (
+ "Decline", TRUE);
+ if (accept_button != NULL && decline_button != NULL)
+ {
+ decline_button->setFollowsNone();
+ decline_button->setOrigin(4*HPAD
+ + accept_button->getRect().getWidth(),
+ decline_button->getRect().mBottom);
+ }
+
+ LLTextEditor* text_editor = notify_box->getChild<LLTextEditor>("text_editor_box", TRUE);
+ S32 text_heigth = 0;
+ if(text_editor != NULL)
+ {
+ text_heigth = text_editor->getTextBoundingRect().getHeight();
+ }
+
//Prepare the rect for the view
LLRect target_rect = mEditor->getDocumentView()->getRect();
// squeeze down the widget by subtracting padding off left and right
@@ -675,6 +741,15 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
notify_box->getRect().getHeight());
notify_box->setOrigin(target_rect.mLeft, notify_box->getRect().mBottom);
+ if (text_editor != NULL)
+ {
+ S32 text_heigth_delta =
+ text_editor->getTextBoundingRect().getHeight()
+ - text_heigth;
+ notify_box->reshape(target_rect.getWidth(),
+ notify_box->getRect().getHeight() + text_heigth_delta);
+ }
+
LLInlineViewSegment::Params params;
params.view = notify_box;
params.left_pad = mLeftWidgetPad;
diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp
index f7f7ee83af..f772aea4bd 100644
--- a/indra/newview/llchatitemscontainerctrl.cpp
+++ b/indra/newview/llchatitemscontainerctrl.cpp
@@ -258,8 +258,12 @@ BOOL LLNearbyChatToastPanel::handleMouseDown (S32 x, S32 y, MASK mask)
BOOL LLNearbyChatToastPanel::handleMouseUp (S32 x, S32 y, MASK mask)
{
+ /*
+ fix for request EXT-4780
+ leaving this commented since I don't remember why ew block those messages...
if(mSourceType != CHAT_SOURCE_AGENT)
return LLPanel::handleMouseUp(x,y,mask);
+ */
LLChatMsgBox* text_box = getChild<LLChatMsgBox>("msg_text", false);
S32 local_x = x - text_box->getRect().mLeft;
diff --git a/indra/newview/lldrawable.h b/indra/newview/lldrawable.h
index 27c9ab319a..c3c6cbe12f 100644
--- a/indra/newview/lldrawable.h
+++ b/indra/newview/lldrawable.h
@@ -44,7 +44,6 @@
#include "llquaternion.h"
#include "xform.h"
#include "llmemtype.h"
-#include "llprimitive.h"
#include "lldarray.h"
#include "llviewerobject.h"
#include "llrect.h"
diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp
index 9f6412c0ab..3818ee6f78 100644
--- a/indra/newview/llexpandabletextbox.cpp
+++ b/indra/newview/llexpandabletextbox.cpp
@@ -116,7 +116,7 @@ LLExpandableTextBox::LLTextBoxEx::Params::Params()
}
LLExpandableTextBox::LLTextBoxEx::LLTextBoxEx(const Params& p)
-: LLTextBox(p),
+: LLTextEditor(p),
mExpanderLabel(p.more_label),
mExpanderVisible(false)
{
@@ -127,7 +127,7 @@ LLExpandableTextBox::LLTextBoxEx::LLTextBoxEx(const Params& p)
void LLExpandableTextBox::LLTextBoxEx::reshape(S32 width, S32 height, BOOL called_from_parent)
{
hideExpandText();
- LLTextBox::reshape(width, height, called_from_parent);
+ LLTextEditor::reshape(width, height, called_from_parent);
if (getTextPixelHeight() > getRect().getHeight())
{
@@ -140,7 +140,7 @@ void LLExpandableTextBox::LLTextBoxEx::setText(const LLStringExplicit& text,cons
// LLTextBox::setText will obliterate the expander segment, so make sure
// we generate it again by clearing mExpanderVisible
mExpanderVisible = false;
- LLTextBox::setText(text, input_params);
+ LLTextEditor::setText(text, input_params);
// text contents have changed, segments are cleared out
// so hide the expander and determine if we need it
@@ -169,8 +169,7 @@ void LLExpandableTextBox::LLTextBoxEx::showExpandText()
std::pair<S32, S32> visible_lines = getVisibleLines(true);
S32 last_line = visible_lines.second - 1;
- LLStyle::Params expander_style = getDefaultStyle();
- expander_style.font.name(LLFontGL::nameFromFont(expander_style.font));
+ LLStyle::Params expander_style(getDefaultStyleParams());
expander_style.font.style = "UNDERLINE";
expander_style.color = LLUIColorTable::instance().getColor("HTMLLinkColor");
LLExpanderSegment* expanderp = new LLExpanderSegment(new LLStyle(expander_style), getLineStart(last_line), getLength() + 1, mExpanderLabel, *this);
@@ -186,8 +185,8 @@ void LLExpandableTextBox::LLTextBoxEx::hideExpandText()
if (mExpanderVisible)
{
// this will overwrite the expander segment and all text styling with a single style
- LLNormalTextSegment* segmentp = new LLNormalTextSegment(
- new LLStyle(getDefaultStyle()), 0, getLength() + 1, *this);
+ LLStyleConstSP sp(new LLStyle(getDefaultStyleParams()));
+ LLNormalTextSegment* segmentp = new LLNormalTextSegment(sp, 0, getLength() + 1, *this);
insertSegment(segmentp);
mExpanderVisible = false;
@@ -202,6 +201,11 @@ S32 LLExpandableTextBox::LLTextBoxEx::getVerticalTextDelta()
return text_height - textbox_height;
}
+S32 LLExpandableTextBox::LLTextBoxEx::getTextPixelHeight()
+{
+ return getTextBoundingRect().getHeight();
+}
+
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llexpandabletextbox.h b/indra/newview/llexpandabletextbox.h
index 2b4f9e527c..58316ddb98 100644
--- a/indra/newview/llexpandabletextbox.h
+++ b/indra/newview/llexpandabletextbox.h
@@ -33,7 +33,7 @@
#ifndef LL_LLEXPANDABLETEXTBOX_H
#define LL_LLEXPANDABLETEXTBOX_H
-#include "lltextbox.h"
+#include "lltexteditor.h"
#include "llscrollcontainer.h"
/**
@@ -49,10 +49,10 @@ protected:
* Extended text box. "More" link will appear at end of text if
* text is too long to fit into text box size.
*/
- class LLTextBoxEx : public LLTextBox
+ class LLTextBoxEx : public LLTextEditor
{
public:
- struct Params : public LLInitParam::Block<Params, LLTextBox::Params>
+ struct Params : public LLInitParam::Block<Params, LLTextEditor::Params>
{
Mandatory<std::string> more_label;
Params();
@@ -70,6 +70,11 @@ protected:
virtual S32 getVerticalTextDelta();
/**
+ * Returns the height of text rect.
+ */
+ S32 getTextPixelHeight();
+
+ /**
* Shows "More" link
*/
void showExpandText();
diff --git a/indra/newview/llfloateranimpreview.cpp b/indra/newview/llfloateranimpreview.cpp
index 60f150bd96..904655cdc8 100644
--- a/indra/newview/llfloateranimpreview.cpp
+++ b/indra/newview/llfloateranimpreview.cpp
@@ -86,38 +86,40 @@ const F32 BASE_ANIM_TIME_OFFSET = 5.f;
std::string STATUS[] =
{
- "E_ST_OK",
- "E_ST_EOF",
- "E_ST_NO_CONSTRAINT",
- "E_ST_NO_FILE",
-"E_ST_NO_HIER",
-"E_ST_NO_JOINT",
-"E_ST_NO_NAME",
-"E_ST_NO_OFFSET",
-"E_ST_NO_CHANNELS",
-"E_ST_NO_ROTATION",
-"E_ST_NO_AXIS",
-"E_ST_NO_MOTION",
-"E_ST_NO_FRAMES",
-"E_ST_NO_FRAME_TIME",
-"E_ST_NO_POS",
-"E_ST_NO_ROT",
-"E_ST_NO_XLT_FILE",
-"E_ST_NO_XLT_HEADER",
-"E_ST_NO_XLT_NAME",
-"E_ST_NO_XLT_IGNORE",
-"E_ST_NO_XLT_RELATIVE",
-"E_ST_NO_XLT_OUTNAME",
-"E_ST_NO_XLT_MATRIX",
-"E_ST_NO_XLT_MERGECHILD",
-"E_ST_NO_XLT_MERGEPARENT",
-"E_ST_NO_XLT_PRIORITY",
-"E_ST_NO_XLT_LOOP",
-"E_ST_NO_XLT_EASEIN",
-"E_ST_NO_XLT_EASEOUT",
-"E_ST_NO_XLT_HAND",
-"E_ST_NO_XLT_EMOTE",
+ "E_ST_OK",
+ "E_ST_EOF",
+ "E_ST_NO_CONSTRAINT",
+ "E_ST_NO_FILE",
+ "E_ST_NO_HIER",
+ "E_ST_NO_JOINT",
+ "E_ST_NO_NAME",
+ "E_ST_NO_OFFSET",
+ "E_ST_NO_CHANNELS",
+ "E_ST_NO_ROTATION",
+ "E_ST_NO_AXIS",
+ "E_ST_NO_MOTION",
+ "E_ST_NO_FRAMES",
+ "E_ST_NO_FRAME_TIME",
+ "E_ST_NO_POS",
+ "E_ST_NO_ROT",
+ "E_ST_NO_XLT_FILE",
+ "E_ST_NO_XLT_HEADER",
+ "E_ST_NO_XLT_NAME",
+ "E_ST_NO_XLT_IGNORE",
+ "E_ST_NO_XLT_RELATIVE",
+ "E_ST_NO_XLT_OUTNAME",
+ "E_ST_NO_XLT_MATRIX",
+ "E_ST_NO_XLT_MERGECHILD",
+ "E_ST_NO_XLT_MERGEPARENT",
+ "E_ST_NO_XLT_PRIORITY",
+ "E_ST_NO_XLT_LOOP",
+ "E_ST_NO_XLT_EASEIN",
+ "E_ST_NO_XLT_EASEOUT",
+ "E_ST_NO_XLT_HAND",
+ "E_ST_NO_XLT_EMOTE",
+ "E_ST_BAD_ROOT"
};
+
//-----------------------------------------------------------------------------
// LLFloaterAnimPreview()
//-----------------------------------------------------------------------------
diff --git a/indra/newview/llfloaterhelpbrowser.cpp b/indra/newview/llfloaterhelpbrowser.cpp
index 2e0ae3265e..f3c6b286ab 100644
--- a/indra/newview/llfloaterhelpbrowser.cpp
+++ b/indra/newview/llfloaterhelpbrowser.cpp
@@ -85,13 +85,22 @@ void LLFloaterHelpBrowser::onClose(bool app_quitting)
void LLFloaterHelpBrowser::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
{
- if(event == MEDIA_EVENT_LOCATION_CHANGED)
+ switch (event)
{
+ case MEDIA_EVENT_LOCATION_CHANGED:
setCurrentURL(self->getLocation());
- }
- else if(event == MEDIA_EVENT_NAVIGATE_COMPLETE)
- {
- // nothing yet
+ break;
+
+ case MEDIA_EVENT_NAVIGATE_BEGIN:
+ childSetText("status_text", getString("loading_text"));
+ break;
+
+ case MEDIA_EVENT_NAVIGATE_COMPLETE:
+ childSetText("status_text", getString("done_text"));
+ break;
+
+ default:
+ break;
}
}
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 0ad283d7c6..8cd63deebe 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -427,8 +427,26 @@ BOOL LLPanelLandGeneral::postBuild()
mBtnBuyLand = getChild<LLButton>("Buy Land...");
mBtnBuyLand->setClickedCallback(onClickBuyLand, (void*)&BUY_PERSONAL_LAND);
- mBtnScriptLimits = getChild<LLButton>("Scripts...");
- mBtnScriptLimits->setClickedCallback(onClickScriptLimits, this);
+ // note: on region change this will not be re checked, should not matter on Agni as
+ // 99% of the time all regions will return the same caps. In case of an erroneous setting
+ // to enabled the floater will just throw an error when trying to get it's cap
+ std::string url = gAgent.getRegion()->getCapability("LandResources");
+ if (!url.empty())
+ {
+ mBtnScriptLimits = getChild<LLButton>("Scripts...");
+ if(mBtnScriptLimits)
+ {
+ mBtnScriptLimits->setClickedCallback(onClickScriptLimits, this);
+ }
+ }
+ else
+ {
+ mBtnScriptLimits = getChild<LLButton>("Scripts...");
+ if(mBtnScriptLimits)
+ {
+ mBtnScriptLimits->setVisible(false);
+ }
+ }
mBtnBuyGroupLand = getChild<LLButton>("Buy For Group...");
mBtnBuyGroupLand->setClickedCallback(onClickBuyLand, (void*)&BUY_GROUP_LAND);
diff --git a/indra/newview/llfloatermap.cpp b/indra/newview/llfloatermap.cpp
index 568f4b254e..051ab585e2 100644
--- a/indra/newview/llfloatermap.cpp
+++ b/indra/newview/llfloatermap.cpp
@@ -142,8 +142,8 @@ void LLFloaterMap::setDirectionPos( LLTextBox* text_box, F32 rotation )
// Rotation is in radians.
// Rotation of 0 means x = 1, y = 0 on the unit circle.
- F32 map_half_height = (F32)(getRect().getHeight() / 2);
- F32 map_half_width = (F32)(getRect().getWidth() / 2);
+ F32 map_half_height = (F32)(getRect().getHeight() / 2) - getHeaderHeight()/2;
+ F32 map_half_width = (F32)(getRect().getWidth() / 2) ;
F32 text_half_height = (F32)(text_box->getRect().getHeight() / 2);
F32 text_half_width = (F32)(text_box->getRect().getWidth() / 2);
F32 radius = llmin( map_half_height - text_half_height, map_half_width - text_half_width );
diff --git a/indra/newview/llfloaterscriptlimits.cpp b/indra/newview/llfloaterscriptlimits.cpp
index 8875e35821..4194416a01 100644
--- a/indra/newview/llfloaterscriptlimits.cpp
+++ b/indra/newview/llfloaterscriptlimits.cpp
@@ -59,10 +59,30 @@
/// LLFloaterScriptLimits
///----------------------------------------------------------------------------
-// due to server side bugs the full summary display is not possible
-// until they are fixed this define creates a simple version of the
-// summary which only shows available & correct information
-#define USE_SIMPLE_SUMMARY
+// debug switches, won't work in release
+#ifndef LL_RELEASE_FOR_DOWNLOAD
+
+// dump responder replies to llinfos for debugging
+//#define DUMP_REPLIES_TO_LLINFOS
+
+#ifdef DUMP_REPLIES_TO_LLINFOS
+#include "llsdserialize.h"
+#include "llwindow.h"
+#endif
+
+// use fake LLSD responses to check the viewer side is working correctly
+// I'm syncing this with the server side efforts so hopfully we can keep
+// the to-ing and fro-ing between the two teams to a minimum
+//#define USE_FAKE_RESPONSES
+
+#ifdef USE_FAKE_RESPONSES
+const S32 FAKE_NUMBER_OF_URLS = 329;
+const S32 FAKE_AVAILABLE_URLS = 731;
+const S32 FAKE_AMOUNT_OF_MEMORY = 66741;
+const S32 FAKE_AVAILABLE_MEMORY = 895577;
+#endif
+
+#endif
const S32 SIZE_OF_ONE_KB = 1024;
@@ -87,32 +107,41 @@ BOOL LLFloaterScriptLimits::postBuild()
}
mTab = getChild<LLTabContainer>("scriptlimits_panels");
+
+ if(!mTab)
+ {
+ llinfos << "Error! couldn't get scriptlimits_panels, aborting Script Information setup" << llendl;
+ return FALSE;
+ }
// contruct the panels
- LLPanelScriptLimitsRegionMemory* panel_memory;
- panel_memory = new LLPanelScriptLimitsRegionMemory;
- mInfoPanels.push_back(panel_memory);
+ std::string land_url = gAgent.getRegion()->getCapability("LandResources");
+ if (!land_url.empty())
+ {
+ LLPanelScriptLimitsRegionMemory* panel_memory;
+ panel_memory = new LLPanelScriptLimitsRegionMemory;
+ mInfoPanels.push_back(panel_memory);
+ LLUICtrlFactory::getInstance()->buildPanel(panel_memory, "panel_script_limits_region_memory.xml");
+ mTab->addTabPanel(panel_memory);
+ }
- LLUICtrlFactory::getInstance()->buildPanel(panel_memory, "panel_script_limits_region_memory.xml");
- mTab->addTabPanel(panel_memory);
-
- LLPanelScriptLimitsRegionURLs* panel_urls = new LLPanelScriptLimitsRegionURLs;
- mInfoPanels.push_back(panel_urls);
- LLUICtrlFactory::getInstance()->buildPanel(panel_urls, "panel_script_limits_region_urls.xml");
- mTab->addTabPanel(panel_urls);
-
- LLPanelScriptLimitsAttachment* panel_attachments = new LLPanelScriptLimitsAttachment;
- mInfoPanels.push_back(panel_attachments);
- LLUICtrlFactory::getInstance()->buildPanel(panel_attachments, "panel_script_limits_my_avatar.xml");
- mTab->addTabPanel(panel_attachments);
-
- if(selectParcelPanel)
+ std::string attachment_url = gAgent.getRegion()->getCapability("AttachmentResources");
+ if (!attachment_url.empty())
+ {
+ LLPanelScriptLimitsAttachment* panel_attachments = new LLPanelScriptLimitsAttachment;
+ mInfoPanels.push_back(panel_attachments);
+ LLUICtrlFactory::getInstance()->buildPanel(panel_attachments, "panel_script_limits_my_avatar.xml");
+ mTab->addTabPanel(panel_attachments);
+ }
+
+ if(mInfoPanels.size() > 0)
{
mTab->selectTab(0);
}
- else
+
+ if(!selectParcelPanel && (mInfoPanels.size() > 1))
{
- mTab->selectTab(2);
+ mTab->selectTab(1);
}
return TRUE;
@@ -160,6 +189,20 @@ void LLPanelScriptLimitsInfo::updateChild(LLUICtrl* child_ctr)
void fetchScriptLimitsRegionInfoResponder::result(const LLSD& content)
{
+ //we don't need to test with a fake respose here (shouldn't anyway)
+
+#ifdef DUMP_REPLIES_TO_LLINFOS
+
+ LLSDNotationStreamer notation_streamer(content);
+ std::ostringstream nice_llsd;
+ nice_llsd << notation_streamer;
+
+ OSMessageBox(nice_llsd.str(), "main cap response:", 0);
+
+ llinfos << "main cap response:" << content << llendl;
+
+#endif
+
// at this point we have an llsd which should contain ether one or two urls to the services we want.
// first we look for the details service:
if(content.has("ScriptResourceDetails"))
@@ -173,24 +216,6 @@ void fetchScriptLimitsRegionInfoResponder::result(const LLSD& content)
{
llinfos << "Failed to get llfloaterscriptlimits instance" << llendl;
}
- else
- {
-
-// temp - only show info if we get details - there's nothing to show if not until the sim gets fixed
-#ifdef USE_SIMPLE_SUMMARY
-
- LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels");
- LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel");
- std::string msg = LLTrans::getString("ScriptLimitsRequestDontOwnParcel");
- panel_memory->childSetValue("loading_text", LLSD(msg));
- LLPanelScriptLimitsRegionURLs* panel_urls = (LLPanelScriptLimitsRegionURLs*)tab->getChild<LLPanel>("script_limits_region_urls_panel");
- panel_urls->childSetValue("loading_text", LLSD(msg));
-
- // intentional early out as we dont want the resource summary if we are using the "simple summary"
- // and the details are missing
- return;
-#endif
- }
}
// then the summary service:
@@ -205,8 +230,61 @@ void fetchScriptLimitsRegionInfoResponder::error(U32 status, const std::string&
llinfos << "Error from responder " << reason << llendl;
}
-void fetchScriptLimitsRegionSummaryResponder::result(const LLSD& content)
+void fetchScriptLimitsRegionSummaryResponder::result(const LLSD& content_ref)
{
+#ifdef USE_FAKE_RESPONSES
+
+ LLSD fake_content;
+ LLSD summary = LLSD::emptyMap();
+ LLSD available = LLSD::emptyArray();
+ LLSD available_urls = LLSD::emptyMap();
+ LLSD available_memory = LLSD::emptyMap();
+ LLSD used = LLSD::emptyArray();
+ LLSD used_urls = LLSD::emptyMap();
+ LLSD used_memory = LLSD::emptyMap();
+
+ used_urls["type"] = "urls";
+ used_urls["amount"] = FAKE_NUMBER_OF_URLS;
+ available_urls["type"] = "urls";
+ available_urls["amount"] = FAKE_AVAILABLE_URLS;
+ used_memory["type"] = "memory";
+ used_memory["amount"] = FAKE_AMOUNT_OF_MEMORY;
+ available_memory["type"] = "memory";
+ available_memory["amount"] = FAKE_AVAILABLE_MEMORY;
+
+//summary response:{'summary':{'available':[{'amount':i731,'type':'urls'},{'amount':i895577,'type':'memory'},{'amount':i731,'type':'urls'},{'amount':i895577,'type':'memory'}],'used':[{'amount':i329,'type':'urls'},{'amount':i66741,'type':'memory'}]}}
+
+ used.append(used_urls);
+ used.append(used_memory);
+ available.append(available_urls);
+ available.append(available_memory);
+
+ summary["available"] = available;
+ summary["used"] = used;
+
+ fake_content["summary"] = summary;
+
+ const LLSD& content = fake_content;
+
+#else
+
+ const LLSD& content = content_ref;
+
+#endif
+
+
+#ifdef DUMP_REPLIES_TO_LLINFOS
+
+ LLSDNotationStreamer notation_streamer(content);
+ std::ostringstream nice_llsd;
+ nice_llsd << notation_streamer;
+
+ OSMessageBox(nice_llsd.str(), "summary response:", 0);
+
+ llinfos << "summary response:" << *content << llendl;
+
+#endif
+
LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits");
if(!instance)
{
@@ -217,8 +295,6 @@ void fetchScriptLimitsRegionSummaryResponder::result(const LLSD& content)
LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels");
LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel");
panel_memory->setRegionSummary(content);
- LLPanelScriptLimitsRegionURLs* panel_urls = (LLPanelScriptLimitsRegionURLs*)tab->getChild<LLPanel>("script_limits_region_urls_panel");
- panel_urls->setRegionSummary(content);
}
}
@@ -227,8 +303,82 @@ void fetchScriptLimitsRegionSummaryResponder::error(U32 status, const std::strin
llinfos << "Error from responder " << reason << llendl;
}
-void fetchScriptLimitsRegionDetailsResponder::result(const LLSD& content)
+void fetchScriptLimitsRegionDetailsResponder::result(const LLSD& content_ref)
{
+#ifdef USE_FAKE_RESPONSES
+/*
+Updated detail service, ** denotes field added:
+
+result (map)
++-parcels (array of maps)
+ +-id (uuid)
+ +-local_id (S32)**
+ +-name (string)
+ +-owner_id (uuid) (in ERS as owner, but owner_id in code)
+ +-objects (array of maps)
+ +-id (uuid)
+ +-name (string)
+ +-owner_id (uuid) (in ERS as owner, in code as owner_id)
+ +-owner_name (sting)**
+ +-location (map)**
+ +-x (float)
+ +-y (float)
+ +-z (float)
+ +-resources (map) (this is wrong in the ERS but right in code)
+ +-type (string)
+ +-amount (int)
+*/
+ LLSD fake_content;
+ LLSD resource = LLSD::emptyMap();
+ LLSD location = LLSD::emptyMap();
+ LLSD object = LLSD::emptyMap();
+ LLSD objects = LLSD::emptyArray();
+ LLSD parcel = LLSD::emptyMap();
+ LLSD parcels = LLSD::emptyArray();
+
+ resource["urls"] = FAKE_NUMBER_OF_URLS;
+ resource["memory"] = FAKE_AMOUNT_OF_MEMORY;
+
+ location["x"] = 128.0f;
+ location["y"] = 128.0f;
+ location["z"] = 0.0f;
+
+ object["id"] = LLUUID("d574a375-0c6c-fe3d-5733-da669465afc7");
+ object["name"] = "Gabs fake Object!";
+ object["owner_id"] = LLUUID("8dbf2d41-69a0-4e5e-9787-0c9d297bc570");
+ object["owner_name"] = "Gabs Linden";
+ object["location"] = location;
+ object["resources"] = resource;
+
+ objects.append(object);
+
+ parcel["id"] = LLUUID("da05fb28-0d20-e593-2728-bddb42dd0160");
+ parcel["local_id"] = 42;
+ parcel["name"] = "Gabriel Linden\'s Sub Plot";
+ parcel["objects"] = objects;
+ parcels.append(parcel);
+
+ fake_content["parcels"] = parcels;
+ const LLSD& content = fake_content;
+
+#else
+
+ const LLSD& content = content_ref;
+
+#endif
+
+#ifdef DUMP_REPLIES_TO_LLINFOS
+
+ LLSDNotationStreamer notation_streamer(content);
+ std::ostringstream nice_llsd;
+ nice_llsd << notation_streamer;
+
+ OSMessageBox(nice_llsd.str(), "details response:", 0);
+
+ llinfos << "details response:" << content << llendl;
+
+#endif
+
LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits");
if(!instance)
@@ -238,11 +388,22 @@ void fetchScriptLimitsRegionDetailsResponder::result(const LLSD& content)
else
{
LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels");
- LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel");
- panel_memory->setRegionDetails(content);
-
- LLPanelScriptLimitsRegionURLs* panel_urls = (LLPanelScriptLimitsRegionURLs*)tab->getChild<LLPanel>("script_limits_region_urls_panel");
- panel_urls->setRegionDetails(content);
+ if(tab)
+ {
+ LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel");
+ if(panel_memory)
+ {
+ panel_memory->setRegionDetails(content);
+ }
+ else
+ {
+ llinfos << "Failed to get scriptlimits memory panel" << llendl;
+ }
+ }
+ else
+ {
+ llinfos << "Failed to get scriptlimits_panels" << llendl;
+ }
}
}
@@ -251,8 +412,61 @@ void fetchScriptLimitsRegionDetailsResponder::error(U32 status, const std::strin
llinfos << "Error from responder " << reason << llendl;
}
-void fetchScriptLimitsAttachmentInfoResponder::result(const LLSD& content)
+void fetchScriptLimitsAttachmentInfoResponder::result(const LLSD& content_ref)
{
+
+#ifdef USE_FAKE_RESPONSES
+
+ // just add the summary, as that's all I'm testing currently!
+ LLSD fake_content = LLSD::emptyMap();
+ LLSD summary = LLSD::emptyMap();
+ LLSD available = LLSD::emptyArray();
+ LLSD available_urls = LLSD::emptyMap();
+ LLSD available_memory = LLSD::emptyMap();
+ LLSD used = LLSD::emptyArray();
+ LLSD used_urls = LLSD::emptyMap();
+ LLSD used_memory = LLSD::emptyMap();
+
+ used_urls["type"] = "urls";
+ used_urls["amount"] = FAKE_NUMBER_OF_URLS;
+ available_urls["type"] = "urls";
+ available_urls["amount"] = FAKE_AVAILABLE_URLS;
+ used_memory["type"] = "memory";
+ used_memory["amount"] = FAKE_AMOUNT_OF_MEMORY;
+ available_memory["type"] = "memory";
+ available_memory["amount"] = FAKE_AVAILABLE_MEMORY;
+
+ used.append(used_urls);
+ used.append(used_memory);
+ available.append(available_urls);
+ available.append(available_memory);
+
+ summary["available"] = available;
+ summary["used"] = used;
+
+ fake_content["summary"] = summary;
+ fake_content["attachments"] = content_ref["attachments"];
+
+ const LLSD& content = fake_content;
+
+#else
+
+ const LLSD& content = content_ref;
+
+#endif
+
+#ifdef DUMP_REPLIES_TO_LLINFOS
+
+ LLSDNotationStreamer notation_streamer(content);
+ std::ostringstream nice_llsd;
+ nice_llsd << notation_streamer;
+
+ OSMessageBox(nice_llsd.str(), "attachment response:", 0);
+
+ llinfos << "attachment response:" << content << llendl;
+
+#endif
+
LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits");
if(!instance)
@@ -262,8 +476,22 @@ void fetchScriptLimitsAttachmentInfoResponder::result(const LLSD& content)
else
{
LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels");
- LLPanelScriptLimitsAttachment* panel = (LLPanelScriptLimitsAttachment*)tab->getChild<LLPanel>("script_limits_my_avatar_panel");
- panel->setAttachmentDetails(content);
+ if(tab)
+ {
+ LLPanelScriptLimitsAttachment* panel = (LLPanelScriptLimitsAttachment*)tab->getChild<LLPanel>("script_limits_my_avatar_panel");
+ if(panel)
+ {
+ panel->setAttachmentDetails(content);
+ }
+ else
+ {
+ llinfos << "Failed to get script_limits_my_avatar_panel" << llendl;
+ }
+ }
+ else
+ {
+ llinfos << "Failed to get scriptlimits_panels" << llendl;
+ }
}
}
@@ -309,7 +537,7 @@ void LLPanelScriptLimitsRegionMemory::processParcelInfo(const LLParcelData& parc
{
std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestWaiting");
childSetValue("loading_text", LLSD(msg_waiting));
- }
+ }
}
void LLPanelScriptLimitsRegionMemory::setParcelID(const LLUUID& parcel_id)
@@ -341,6 +569,11 @@ void LLPanelScriptLimitsRegionMemory::onNameCache(
std::string name = first_name + " " + last_name;
LLScrollListCtrl *list = getChild<LLScrollListCtrl>("scripts_list");
+ if(!list)
+ {
+ return;
+ }
+
std::vector<LLSD>::iterator id_itor;
for (id_itor = mObjectListItems.begin(); id_itor != mObjectListItems.end(); ++id_itor)
{
@@ -351,33 +584,8 @@ void LLPanelScriptLimitsRegionMemory::onNameCache(
if(item)
{
- item->getColumn(2)->setValue(LLSD(name));
- element["columns"][2]["value"] = name;
- }
- }
- }
-
- // fill in the url's tab if needed, all urls must have memory so we can do it all here
- LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits");
- if(instance)
- {
- LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels");
- LLPanelScriptLimitsRegionMemory* panel = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_urls_panel");
-
- LLScrollListCtrl *list = panel->getChild<LLScrollListCtrl>("scripts_list");
- std::vector<LLSD>::iterator id_itor;
- for (id_itor = mObjectListItems.begin(); id_itor != mObjectListItems.end(); ++id_itor)
- {
- LLSD element = *id_itor;
- if(element["owner_id"].asUUID() == id)
- {
- LLScrollListItem* item = list->getItem(element["id"].asUUID());
-
- if(item)
- {
- item->getColumn(2)->setValue(LLSD(name));
- element["columns"][2]["value"] = name;
- }
+ item->getColumn(3)->setValue(LLSD(name));
+ element["columns"][3]["value"] = name;
}
}
}
@@ -386,6 +594,12 @@ void LLPanelScriptLimitsRegionMemory::onNameCache(
void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content)
{
LLScrollListCtrl *list = getChild<LLScrollListCtrl>("scripts_list");
+
+ if(!list)
+ {
+ llinfos << "Error getting the scripts_list control" << llendl;
+ return;
+ }
S32 number_parcels = content["parcels"].size();
@@ -394,130 +608,197 @@ void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content)
std::string msg_parcels = LLTrans::getString("ScriptLimitsParcelsOwned", args_parcels);
childSetValue("parcels_listed", LLSD(msg_parcels));
- S32 total_objects = 0;
- S32 total_size = 0;
-
std::vector<LLUUID> names_requested;
+ // This makes the assumption that all objects will have the same set
+ // of attributes, ie they will all have, or none will have locations
+ // This is a pretty safe assumption as it's reliant on server version.
+ bool has_locations = false;
+ bool has_local_ids = false;
+
for(S32 i = 0; i < number_parcels; i++)
{
std::string parcel_name = content["parcels"][i]["name"].asString();
LLUUID parcel_id = content["parcels"][i]["id"].asUUID();
S32 number_objects = content["parcels"][i]["objects"].size();
+
+ S32 local_id = 0;
+ if(content["parcels"][i].has("local_id"))
+ {
+ // if any locations are found flag that we can use them and turn on the highlight button
+ has_local_ids = true;
+ local_id = content["parcels"][i]["local_id"].asInteger();
+ }
+
for(S32 j = 0; j < number_objects; j++)
{
S32 size = content["parcels"][i]["objects"][j]["resources"]["memory"].asInteger() / SIZE_OF_ONE_KB;
- total_size += size;
+
+ S32 urls = content["parcels"][i]["objects"][j]["resources"]["urls"].asInteger();
std::string name_buf = content["parcels"][i]["objects"][j]["name"].asString();
LLUUID task_id = content["parcels"][i]["objects"][j]["id"].asUUID();
LLUUID owner_id = content["parcels"][i]["objects"][j]["owner_id"].asUUID();
-
+
+ F32 location_x = 0.0f;
+ F32 location_y = 0.0f;
+ F32 location_z = 0.0f;
+
+ if(content["parcels"][i]["objects"][j].has("location"))
+ {
+ // if any locations are found flag that we can use them and turn on the highlight button
+ LLVector3 vec = ll_vector3_from_sd(content["parcels"][i]["objects"][j]["location"]);
+ has_locations = true;
+ location_x = vec.mV[0];
+ location_y = vec.mV[1];
+ location_z = vec.mV[2];
+ }
+
std::string owner_buf;
-
- BOOL name_is_cached = gCacheName->getFullName(owner_id, owner_buf);
- if(!name_is_cached)
+
+ // in the future the server will give us owner names, so see if we're there yet:
+ if(content["parcels"][i]["objects"][j].has("owner_name"))
+ {
+ owner_buf = content["parcels"][i]["objects"][j]["owner_name"].asString();
+ }
+ // ...and if not use the slightly more painful method of disovery:
+ else
{
- if(std::find(names_requested.begin(), names_requested.end(), owner_id) == names_requested.end())
+ BOOL name_is_cached = gCacheName->getFullName(owner_id, owner_buf);
+ if(!name_is_cached)
{
- names_requested.push_back(owner_id);
- gCacheName->get(owner_id, TRUE,
- boost::bind(&LLPanelScriptLimitsRegionMemory::onNameCache,
- this, _1, _2, _3));
+ if(std::find(names_requested.begin(), names_requested.end(), owner_id) == names_requested.end())
+ {
+ names_requested.push_back(owner_id);
+ gCacheName->get(owner_id, TRUE,
+ boost::bind(&LLPanelScriptLimitsRegionMemory::onNameCache,
+ this, _1, _2, _3));
+ }
}
}
LLSD element;
element["id"] = task_id;
- element["owner_id"] = owner_id;
element["columns"][0]["column"] = "size";
element["columns"][0]["value"] = llformat("%d", size);
element["columns"][0]["font"] = "SANSSERIF";
- element["columns"][1]["column"] = "name";
- element["columns"][1]["value"] = name_buf;
+ element["columns"][1]["column"] = "urls";
+ element["columns"][1]["value"] = llformat("%d", urls);
element["columns"][1]["font"] = "SANSSERIF";
- element["columns"][2]["column"] = "owner";
- element["columns"][2]["value"] = owner_buf;
+ element["columns"][2]["column"] = "name";
+ element["columns"][2]["value"] = name_buf;
element["columns"][2]["font"] = "SANSSERIF";
- element["columns"][3]["column"] = "location";
- element["columns"][3]["value"] = parcel_name;
+ element["columns"][3]["column"] = "owner";
+ element["columns"][3]["value"] = owner_buf;
element["columns"][3]["font"] = "SANSSERIF";
+ element["columns"][4]["column"] = "parcel";
+ element["columns"][4]["value"] = parcel_name;
+ element["columns"][4]["font"] = "SANSSERIF";
+ element["columns"][5]["column"] = "location";
+ if(has_locations)
+ {
+ element["columns"][5]["value"] = llformat("<%0.1f,%0.1f,%0.1f>", location_x, location_y, location_z);
+ }
+ else
+ {
+ element["columns"][5]["value"] = "";
+ }
+ element["columns"][5]["font"] = "SANSSERIF";
list->addElement(element, ADD_SORTED);
+
+ element["owner_id"] = owner_id;
+ element["local_id"] = local_id;
mObjectListItems.push_back(element);
- total_objects++;
}
}
- mParcelMemoryUsed =total_size;
- mGotParcelMemoryUsed = TRUE;
- populateParcelMemoryText();
-}
+ if (has_locations)
+ {
+ LLButton* btn = getChild<LLButton>("highlight_btn");
+ if(btn)
+ {
+ btn->setVisible(true);
+ }
+ }
-void LLPanelScriptLimitsRegionMemory::populateParcelMemoryText()
-{
- if(mGotParcelMemoryUsed && mGotParcelMemoryMax)
+ if (has_local_ids)
{
-#ifdef USE_SIMPLE_SUMMARY
- LLStringUtil::format_map_t args_parcel_memory;
- args_parcel_memory["[COUNT]"] = llformat ("%d", mParcelMemoryUsed);
- std::string msg_parcel_memory = LLTrans::getString("ScriptLimitsMemoryUsedSimple", args_parcel_memory);
- childSetValue("memory_used", LLSD(msg_parcel_memory));
-#else
- S32 parcel_memory_available = mParcelMemoryMax - mParcelMemoryUsed;
+ LLButton* btn = getChild<LLButton>("return_btn");
+ if(btn)
+ {
+ btn->setVisible(true);
+ }
+ }
- LLStringUtil::format_map_t args_parcel_memory;
- args_parcel_memory["[COUNT]"] = llformat ("%d", mParcelMemoryUsed);
- args_parcel_memory["[MAX]"] = llformat ("%d", mParcelMemoryMax);
- args_parcel_memory["[AVAILABLE]"] = llformat ("%d", parcel_memory_available);
- std::string msg_parcel_memory = LLTrans::getString("ScriptLimitsMemoryUsed", args_parcel_memory);
- childSetValue("memory_used", LLSD(msg_parcel_memory));
-#endif
+ // save the structure to make object return easier
+ mContent = content;
- childSetValue("loading_text", LLSD(std::string("")));
- }
+ childSetValue("loading_text", LLSD(std::string("")));
}
void LLPanelScriptLimitsRegionMemory::setRegionSummary(LLSD content)
{
- if(content["summary"]["available"][0]["type"].asString() == std::string("memory"))
+ if(content["summary"]["used"][0]["type"].asString() == std::string("memory"))
{
- mParcelMemoryMax = content["summary"]["available"][0]["amount"].asInteger();
- mGotParcelMemoryMax = TRUE;
+ mParcelMemoryUsed = content["summary"]["used"][0]["amount"].asInteger() / SIZE_OF_ONE_KB;
+ mParcelMemoryMax = content["summary"]["available"][0]["amount"].asInteger() / SIZE_OF_ONE_KB;
+ mGotParcelMemoryUsed = TRUE;
}
- else if(content["summary"]["available"][1]["type"].asString() == std::string("memory"))
+ else if(content["summary"]["used"][1]["type"].asString() == std::string("memory"))
{
- mParcelMemoryMax = content["summary"]["available"][1]["amount"].asInteger();
- mGotParcelMemoryMax = TRUE;
+ mParcelMemoryUsed = content["summary"]["used"][1]["amount"].asInteger() / SIZE_OF_ONE_KB;
+ mParcelMemoryMax = content["summary"]["available"][1]["amount"].asInteger() / SIZE_OF_ONE_KB;
+ mGotParcelMemoryUsed = TRUE;
}
else
{
llinfos << "summary doesn't contain memory info" << llendl;
return;
}
-/*
- currently this is broken on the server, so we get this value from the details section
- and update via populateParcelMemoryText() when both sets of information have been returned
-
- when the sim is fixed this should be used instead:
- if(content["summary"]["used"][0]["type"].asString() == std::string("memory"))
+
+ if(content["summary"]["used"][0]["type"].asString() == std::string("urls"))
{
- mParcelMemoryUsed = content["summary"]["used"][0]["amount"].asInteger();
- mGotParcelMemoryUsed = TRUE;
+ mParcelURLsUsed = content["summary"]["used"][0]["amount"].asInteger();
+ mParcelURLsMax = content["summary"]["available"][0]["amount"].asInteger();
+ mGotParcelURLsUsed = TRUE;
}
- else if(content["summary"]["used"][1]["type"].asString() == std::string("memory"))
+ else if(content["summary"]["used"][1]["type"].asString() == std::string("urls"))
{
- mParcelMemoryUsed = content["summary"]["used"][1]["amount"].asInteger();
- mGotParcelMemoryUsed = TRUE;
+ mParcelURLsUsed = content["summary"]["used"][1]["amount"].asInteger();
+ mParcelURLsMax = content["summary"]["available"][1]["amount"].asInteger();
+ mGotParcelURLsUsed = TRUE;
}
else
{
- //ERROR!!!
+ llinfos << "summary doesn't contain urls info" << llendl;
return;
- }*/
+ }
- populateParcelMemoryText();
+ if((mParcelMemoryUsed >= 0) && (mParcelMemoryMax >= 0))
+ {
+ S32 parcel_memory_available = mParcelMemoryMax - mParcelMemoryUsed;
+
+ LLStringUtil::format_map_t args_parcel_memory;
+ args_parcel_memory["[COUNT]"] = llformat ("%d", mParcelMemoryUsed);
+ args_parcel_memory["[MAX]"] = llformat ("%d", mParcelMemoryMax);
+ args_parcel_memory["[AVAILABLE]"] = llformat ("%d", parcel_memory_available);
+ std::string msg_parcel_memory = LLTrans::getString("ScriptLimitsMemoryUsed", args_parcel_memory);
+ childSetValue("memory_used", LLSD(msg_parcel_memory));
+ }
+
+ if((mParcelURLsUsed >= 0) && (mParcelURLsMax >= 0))
+ {
+ S32 parcel_urls_available = mParcelURLsMax - mParcelURLsUsed;
+
+ LLStringUtil::format_map_t args_parcel_urls;
+ args_parcel_urls["[COUNT]"] = llformat ("%d", mParcelURLsUsed);
+ args_parcel_urls["[MAX]"] = llformat ("%d", mParcelURLsMax);
+ args_parcel_urls["[AVAILABLE]"] = llformat ("%d", parcel_urls_available);
+ std::string msg_parcel_urls = LLTrans::getString("ScriptLimitsURLsUsed", args_parcel_urls);
+ childSetValue("urls_used", LLSD(msg_parcel_urls));
+ }
}
BOOL LLPanelScriptLimitsRegionMemory::postBuild()
@@ -530,6 +811,10 @@ BOOL LLPanelScriptLimitsRegionMemory::postBuild()
childSetValue("loading_text", LLSD(msg_waiting));
LLScrollListCtrl *list = getChild<LLScrollListCtrl>("scripts_list");
+ if(!list)
+ {
+ return FALSE;
+ }
//set all columns to resizable mode even if some columns will be empty
for(S32 column = 0; column < list->getNumColumns(); column++)
@@ -548,18 +833,11 @@ BOOL LLPanelScriptLimitsRegionMemory::StartRequestChain()
LLFloaterLand* instance = LLFloaterReg::getTypedInstance<LLFloaterLand>("about_land");
if(!instance)
{
- //this isnt really an error...
-// llinfos << "Failed to get about land instance" << llendl;
-// std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestError");
childSetValue("loading_text", LLSD(std::string("")));
//might have to do parent post build here
//if not logic below could use early outs
return FALSE;
}
-
- LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels");
- LLPanelScriptLimitsRegionURLs* panel_urls = (LLPanelScriptLimitsRegionURLs*)tab->getChild<LLPanel>("script_limits_region_urls_panel");
-
LLParcel* parcel = instance->getCurrentSelectedParcel();
LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
@@ -575,7 +853,6 @@ BOOL LLPanelScriptLimitsRegionMemory::StartRequestChain()
{
std::string msg_wrong_region = LLTrans::getString("ScriptLimitsRequestWrongRegion");
childSetValue("loading_text", LLSD(msg_wrong_region));
- panel_urls->childSetValue("loading_text", LLSD(msg_wrong_region));
return FALSE;
}
@@ -605,14 +882,12 @@ BOOL LLPanelScriptLimitsRegionMemory::StartRequestChain()
std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestError");
childSetValue("loading_text", LLSD(msg_waiting));
- panel_urls->childSetValue("loading_text", LLSD(msg_waiting));
}
}
else
{
- std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestError");
+ std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestNoParcelSelected");
childSetValue("loading_text", LLSD(msg_waiting));
- panel_urls->childSetValue("loading_text", LLSD(msg_waiting));
}
return LLPanelScriptLimitsInfo::postBuild();
@@ -629,10 +904,13 @@ void LLPanelScriptLimitsRegionMemory::clearList()
mGotParcelMemoryUsed = FALSE;
mGotParcelMemoryMax = FALSE;
+ mGotParcelURLsUsed = FALSE;
+ mGotParcelURLsMax = FALSE;
LLStringUtil::format_map_t args_parcel_memory;
std::string msg_empty_string("");
childSetValue("memory_used", LLSD(msg_empty_string));
+ childSetValue("urls_used", LLSD(msg_empty_string));
childSetValue("parcels_listed", LLSD(msg_empty_string));
mObjectListItems.clear();
@@ -647,13 +925,16 @@ void LLPanelScriptLimitsRegionMemory::onClickRefresh(void* userdata)
if(instance)
{
LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels");
- LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel");
- panel_memory->clearList();
-
- LLPanelScriptLimitsRegionURLs* panel_urls = (LLPanelScriptLimitsRegionURLs*)tab->getChild<LLPanel>("script_limits_region_urls_panel");
- panel_urls->clearList();
+ if(tab)
+ {
+ LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel");
+ if(panel_memory)
+ {
+ panel_memory->clearList();
- panel_memory->StartRequestChain();
+ panel_memory->StartRequestChain();
+ }
+ }
return;
}
else
@@ -665,78 +946,80 @@ void LLPanelScriptLimitsRegionMemory::onClickRefresh(void* userdata)
void LLPanelScriptLimitsRegionMemory::showBeacon()
{
-/* LLScrollListCtrl* list = getChild<LLScrollListCtrl>("scripts_list");
+ LLScrollListCtrl* list = getChild<LLScrollListCtrl>("scripts_list");
if (!list) return;
LLScrollListItem* first_selected = list->getFirstSelected();
if (!first_selected) return;
- std::string name = first_selected->getColumn(1)->getValue().asString();
- std::string pos_string = first_selected->getColumn(3)->getValue().asString();
+ std::string name = first_selected->getColumn(2)->getValue().asString();
+ std::string pos_string = first_selected->getColumn(5)->getValue().asString();
- llinfos << ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" <<llendl;
- llinfos << "name = " << name << " pos = " << pos_string << llendl;
-
F32 x, y, z;
S32 matched = sscanf(pos_string.c_str(), "<%g,%g,%g>", &x, &y, &z);
if (matched != 3) return;
LLVector3 pos_agent(x, y, z);
LLVector3d pos_global = gAgent.getPosGlobalFromAgent(pos_agent);
- llinfos << "name = " << name << " pos = " << pos_string << llendl;
+
std::string tooltip("");
- LLTracker::trackLocation(pos_global, name, tooltip, LLTracker::LOCATION_ITEM);*/
+ LLTracker::trackLocation(pos_global, name, tooltip, LLTracker::LOCATION_ITEM);
}
// static
void LLPanelScriptLimitsRegionMemory::onClickHighlight(void* userdata)
{
-/* llinfos << "LLPanelRegionGeneralInfo::onClickHighlight" << llendl;
+ llinfos << "LLPanelRegionGeneralInfo::onClickHighlight" << llendl;
LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits");
if(instance)
{
LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels");
- LLPanelScriptLimitsRegionMemory* panel = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel");
- panel->showBeacon();
+ if(tab)
+ {
+ LLPanelScriptLimitsRegionMemory* panel = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel");
+ if(panel)
+ {
+ panel->showBeacon();
+ }
+ }
return;
}
else
{
llwarns << "could not find LLPanelScriptLimitsRegionMemory instance after highlight button clicked" << llendl;
-// std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestError");
-// panel->childSetValue("loading_text", LLSD(msg_waiting));
return;
- }*/
+ }
}
-void LLPanelScriptLimitsRegionMemory::returnObjects()
+void LLPanelScriptLimitsRegionMemory::returnObjectsFromParcel(S32 local_id)
{
-/* llinfos << "started" << llendl;
LLMessageSystem *msg = gMessageSystem;
LLViewerRegion* region = gAgent.getRegion();
if (!region) return;
- llinfos << "got region" << llendl;
LLCtrlListInterface *list = childGetListInterface("scripts_list");
if (!list || list->getItemCount() == 0) return;
- llinfos << "got list" << llendl;
- std::vector<LLUUID>::iterator id_itor;
+ std::vector<LLSD>::iterator id_itor;
bool start_message = true;
- for (id_itor = mObjectListIDs.begin(); id_itor != mObjectListIDs.end(); ++id_itor)
+ for (id_itor = mObjectListItems.begin(); id_itor != mObjectListItems.end(); ++id_itor)
{
- LLUUID task_id = *id_itor;
- llinfos << task_id << llendl;
- if (!list->isSelected(task_id))
+ LLSD element = *id_itor;
+ if (!list->isSelected(element["id"].asUUID()))
{
- llinfos << "not selected" << llendl;
// Selected only
continue;
}
- llinfos << "selected" << llendl;
+
+ if(element["local_id"].asInteger() != local_id)
+ {
+ // Not the parcel we are looking for
+ continue;
+ }
+
if (start_message)
{
msg->newMessageFast(_PREHASH_ParcelReturnObjects);
@@ -744,285 +1027,74 @@ void LLPanelScriptLimitsRegionMemory::returnObjects()
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
msg->addUUIDFast(_PREHASH_SessionID,gAgent.getSessionID());
msg->nextBlockFast(_PREHASH_ParcelData);
- msg->addS32Fast(_PREHASH_LocalID, -1); // Whole region
- msg->addS32Fast(_PREHASH_ReturnType, RT_LIST);
+ msg->addS32Fast(_PREHASH_LocalID, element["local_id"].asInteger());
+ msg->addU32Fast(_PREHASH_ReturnType, RT_LIST);
start_message = false;
- llinfos << "start message" << llendl;
}
msg->nextBlockFast(_PREHASH_TaskIDs);
- msg->addUUIDFast(_PREHASH_TaskID, task_id);
- llinfos << "added id" << llendl;
+ msg->addUUIDFast(_PREHASH_TaskID, element["id"].asUUID());
if (msg->isSendFullFast(_PREHASH_TaskIDs))
{
msg->sendReliable(region->getHost());
start_message = true;
- llinfos << "sent 1" << llendl;
}
}
if (!start_message)
{
msg->sendReliable(region->getHost());
- llinfos << "sent 2" << llendl;
- }*/
+ }
}
-// static
-void LLPanelScriptLimitsRegionMemory::onClickReturn(void* userdata)
+void LLPanelScriptLimitsRegionMemory::returnObjects()
{
-/* llinfos << "LLPanelRegionGeneralInfo::onClickReturn" << llendl;
- LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits");
- if(instance)
+ if(!mContent.has("parcels"))
{
- LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels");
- LLPanelScriptLimitsRegionMemory* panel = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel");
- panel->returnObjects();
return;
}
- else
- {
- llwarns << "could not find LLPanelScriptLimitsRegionMemory instance after highlight button clicked" << llendl;
-// std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestError");
-// panel->childSetValue("loading_text", LLSD(msg_waiting));
- return;
- }*/
-}
-
-///----------------------------------------------------------------------------
-// URLs Panel
-///----------------------------------------------------------------------------
-
-void LLPanelScriptLimitsRegionURLs::setRegionDetails(LLSD content)
-{
- LLScrollListCtrl *list = getChild<LLScrollListCtrl>("scripts_list");
-
- S32 number_parcels = content["parcels"].size();
-
- LLStringUtil::format_map_t args_parcels;
- args_parcels["[PARCELS]"] = llformat ("%d", number_parcels);
- std::string msg_parcels = LLTrans::getString("ScriptLimitsParcelsOwned", args_parcels);
- childSetValue("parcels_listed", LLSD(msg_parcels));
-
- S32 total_objects = 0;
- S32 total_size = 0;
+ S32 number_parcels = mContent["parcels"].size();
+
+ // a message per parcel containing all objects to be returned from that parcel
for(S32 i = 0; i < number_parcels; i++)
{
- std::string parcel_name = content["parcels"][i]["name"].asString();
- llinfos << parcel_name << llendl;
-
- S32 number_objects = content["parcels"][i]["objects"].size();
- for(S32 j = 0; j < number_objects; j++)
+ S32 local_id = 0;
+ if(mContent["parcels"][i].has("local_id"))
{
- if(content["parcels"][i]["objects"][j]["resources"].has("urls"))
- {
- S32 size = content["parcels"][i]["objects"][j]["resources"]["urls"].asInteger();
- total_size += size;
-
- std::string name_buf = content["parcels"][i]["objects"][j]["name"].asString();
- LLUUID task_id = content["parcels"][i]["objects"][j]["id"].asUUID();
- LLUUID owner_id = content["parcels"][i]["objects"][j]["owner_id"].asUUID();
-
- std::string owner_buf;
- gCacheName->getFullName(owner_id, owner_buf); //dont care if this fails as the memory tab will request and fill the field
-
- LLSD element;
-
- element["id"] = task_id;
- element["columns"][0]["column"] = "urls";
- element["columns"][0]["value"] = llformat("%d", size);
- element["columns"][0]["font"] = "SANSSERIF";
- element["columns"][1]["column"] = "name";
- element["columns"][1]["value"] = name_buf;
- element["columns"][1]["font"] = "SANSSERIF";
- element["columns"][2]["column"] = "owner";
- element["columns"][2]["value"] = owner_buf;
- element["columns"][2]["font"] = "SANSSERIF";
- element["columns"][3]["column"] = "location";
- element["columns"][3]["value"] = parcel_name;
- element["columns"][3]["font"] = "SANSSERIF";
-
- list->addElement(element);
- mObjectListItems.push_back(element);
- total_objects++;
- }
+ local_id = mContent["parcels"][i]["local_id"].asInteger();
+ returnObjectsFromParcel(local_id);
}
}
-
- mParcelURLsUsed =total_size;
- mGotParcelURLsUsed = TRUE;
- populateParcelURLsText();
-}
-
-void LLPanelScriptLimitsRegionURLs::populateParcelURLsText()
-{
- if(mGotParcelURLsUsed && mGotParcelURLsMax)
- {
-
-#ifdef USE_SIMPLE_SUMMARY
- LLStringUtil::format_map_t args_parcel_urls;
- args_parcel_urls["[COUNT]"] = llformat ("%d", mParcelURLsUsed);
- std::string msg_parcel_urls = LLTrans::getString("ScriptLimitsURLsUsedSimple", args_parcel_urls);
- childSetValue("urls_used", LLSD(msg_parcel_urls));
-#else
- S32 parcel_urls_available = mParcelURLsMax - mParcelURLsUsed;
- LLStringUtil::format_map_t args_parcel_urls;
- args_parcel_urls["[COUNT]"] = llformat ("%d", mParcelURLsUsed);
- args_parcel_urls["[MAX]"] = llformat ("%d", mParcelURLsMax);
- args_parcel_urls["[AVAILABLE]"] = llformat ("%d", parcel_urls_available);
- std::string msg_parcel_urls = LLTrans::getString("ScriptLimitsURLsUsed", args_parcel_urls);
- childSetValue("urls_used", LLSD(msg_parcel_urls));
-#endif
-
- childSetValue("loading_text", LLSD(std::string("")));
-
- }
+ onClickRefresh(NULL);
}
-void LLPanelScriptLimitsRegionURLs::setRegionSummary(LLSD content)
-{
- if(content["summary"]["available"][0]["type"].asString() == std::string("urls"))
- {
- mParcelURLsMax = content["summary"]["available"][0]["amount"].asInteger();
- mGotParcelURLsMax = TRUE;
- }
- else if(content["summary"]["available"][1]["type"].asString() == std::string("urls"))
- {
- mParcelURLsMax = content["summary"]["available"][1]["amount"].asInteger();
- mGotParcelURLsMax = TRUE;
- }
- else
- {
- llinfos << "summary contains no url info" << llendl;
- return;
- }
-/*
- currently this is broken on the server, so we get this value from the details section
- and update via populateParcelMemoryText() when both sets of information have been returned
-
- when the sim is fixed this should be used instead:
- if(content["summary"]["used"][0]["type"].asString() == std::string("urls"))
- {
- mParcelURLsUsed = content["summary"]["used"][0]["amount"].asInteger();
- mGotParcelURLsUsed = TRUE;
- }
- else if(content["summary"]["used"][1]["type"].asString() == std::string("urls"))
- {
- mParcelURLsUsed = content["summary"]["used"][1]["amount"].asInteger();
- mGotParcelURLsUsed = TRUE;
- }
- else
- {
- //ERROR!!!
- return;
- }*/
-
- populateParcelURLsText();
-}
-
-BOOL LLPanelScriptLimitsRegionURLs::postBuild()
-{
- childSetAction("refresh_list_btn", onClickRefresh, this);
- childSetAction("highlight_btn", onClickHighlight, this);
- childSetAction("return_btn", onClickReturn, this);
-
- std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestWaiting");
- childSetValue("loading_text", LLSD(msg_waiting));
- return FALSE;
-}
-
-void LLPanelScriptLimitsRegionURLs::clearList()
-{
- LLCtrlListInterface *list = childGetListInterface("scripts_list");
-
- if (list)
- {
- list->operateOnAll(LLCtrlListInterface::OP_DELETE);
- }
-
- mGotParcelURLsUsed = FALSE;
- mGotParcelURLsMax = FALSE;
-
- LLStringUtil::format_map_t args_parcel_urls;
- std::string msg_empty_string("");
- childSetValue("urls_used", LLSD(msg_empty_string));
- childSetValue("parcels_listed", LLSD(msg_empty_string));
-
- mObjectListItems.clear();
-}
-
-// static
-void LLPanelScriptLimitsRegionURLs::onClickRefresh(void* userdata)
-{
- llinfos << "Refresh clicked" << llendl;
-
- LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits");
- if(instance)
- {
- LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels");
- LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel");
- // use the memory panel to re-request all the info
- panel_memory->clearList();
-
- LLPanelScriptLimitsRegionURLs* panel_urls = (LLPanelScriptLimitsRegionURLs*)tab->getChild<LLPanel>("script_limits_region_urls_panel");
- // but the urls panel to clear itself
- panel_urls->clearList();
-
- panel_memory->StartRequestChain();
- return;
- }
- else
- {
- llwarns << "could not find LLPanelScriptLimitsRegionMemory instance after refresh button clicked" << llendl;
- return;
- }
-}
// static
-void LLPanelScriptLimitsRegionURLs::onClickHighlight(void* userdata)
+void LLPanelScriptLimitsRegionMemory::onClickReturn(void* userdata)
{
-/* llinfos << "Highlight clicked" << llendl;
+ llinfos << "LLPanelRegionGeneralInfo::onClickReturn" << llendl;
LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits");
if(instance)
{
LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels");
- LLPanelScriptLimitsRegionMemory* panel = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel");
- // use the beacon function from the memory panel
- panel->showBeacon();
+ if(tab)
+ {
+ LLPanelScriptLimitsRegionMemory* panel = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel");
+ if(panel)
+ {
+ panel->returnObjects();
+ }
+ }
return;
}
else
{
llwarns << "could not find LLPanelScriptLimitsRegionMemory instance after highlight button clicked" << llendl;
-// std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestError");
-// panel->childSetValue("loading_text", LLSD(msg_waiting));
- return;
- }*/
-}
-
-// static
-void LLPanelScriptLimitsRegionURLs::onClickReturn(void* userdata)
-{
-/* llinfos << "Return clicked" << llendl;
- LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits");
- if(instance)
- {
- LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels");
- LLPanelScriptLimitsRegionMemory* panel = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel");
- // use the return function from the memory panel
- panel->returnObjects();
return;
}
- else
- {
- llwarns << "could not find LLPanelScriptLimitsRegionMemory instance after highlight button clicked" << llendl;
-// std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestError");
-// panel->childSetValue("loading_text", LLSD(msg_waiting));
- return;
- }*/
}
///----------------------------------------------------------------------------
@@ -1047,6 +1119,12 @@ BOOL LLPanelScriptLimitsAttachment::requestAttachmentDetails()
void LLPanelScriptLimitsAttachment::setAttachmentDetails(LLSD content)
{
LLScrollListCtrl *list = getChild<LLScrollListCtrl>("scripts_list");
+
+ if(!list)
+ {
+ return;
+ }
+
S32 number_attachments = content["attachments"].size();
for(int i = 0; i < number_attachments; i++)
@@ -1096,6 +1174,8 @@ void LLPanelScriptLimitsAttachment::setAttachmentDetails(LLSD content)
list->addElement(element);
}
}
+
+ setAttachmentSummary(content);
childSetValue("loading_text", LLSD(std::string("")));
}
@@ -1122,6 +1202,69 @@ void LLPanelScriptLimitsAttachment::clearList()
childSetValue("loading_text", LLSD(msg_waiting));
}
+void LLPanelScriptLimitsAttachment::setAttachmentSummary(LLSD content)
+{
+ if(content["summary"]["used"][0]["type"].asString() == std::string("memory"))
+ {
+ mAttachmentMemoryUsed = content["summary"]["used"][0]["amount"].asInteger() / SIZE_OF_ONE_KB;
+ mAttachmentMemoryMax = content["summary"]["available"][0]["amount"].asInteger() / SIZE_OF_ONE_KB;
+ mGotAttachmentMemoryUsed = TRUE;
+ }
+ else if(content["summary"]["used"][1]["type"].asString() == std::string("memory"))
+ {
+ mAttachmentMemoryUsed = content["summary"]["used"][1]["amount"].asInteger() / SIZE_OF_ONE_KB;
+ mAttachmentMemoryMax = content["summary"]["available"][1]["amount"].asInteger() / SIZE_OF_ONE_KB;
+ mGotAttachmentMemoryUsed = TRUE;
+ }
+ else
+ {
+ llinfos << "attachment details don't contain memory summary info" << llendl;
+ return;
+ }
+
+ if(content["summary"]["used"][0]["type"].asString() == std::string("urls"))
+ {
+ mAttachmentURLsUsed = content["summary"]["used"][0]["amount"].asInteger();
+ mAttachmentURLsMax = content["summary"]["available"][0]["amount"].asInteger();
+ mGotAttachmentURLsUsed = TRUE;
+ }
+ else if(content["summary"]["used"][1]["type"].asString() == std::string("urls"))
+ {
+ mAttachmentURLsUsed = content["summary"]["used"][1]["amount"].asInteger();
+ mAttachmentURLsMax = content["summary"]["available"][1]["amount"].asInteger();
+ mGotAttachmentURLsUsed = TRUE;
+ }
+ else
+ {
+ llinfos << "attachment details don't contain urls summary info" << llendl;
+ return;
+ }
+
+ if((mAttachmentMemoryUsed >= 0) && (mAttachmentMemoryMax >= 0))
+ {
+ S32 attachment_memory_available = mAttachmentMemoryMax - mAttachmentMemoryUsed;
+
+ LLStringUtil::format_map_t args_attachment_memory;
+ args_attachment_memory["[COUNT]"] = llformat ("%d", mAttachmentMemoryUsed);
+ args_attachment_memory["[MAX]"] = llformat ("%d", mAttachmentMemoryMax);
+ args_attachment_memory["[AVAILABLE]"] = llformat ("%d", attachment_memory_available);
+ std::string msg_attachment_memory = LLTrans::getString("ScriptLimitsMemoryUsed", args_attachment_memory);
+ childSetValue("memory_used", LLSD(msg_attachment_memory));
+ }
+
+ if((mAttachmentURLsUsed >= 0) && (mAttachmentURLsMax >= 0))
+ {
+ S32 attachment_urls_available = mAttachmentURLsMax - mAttachmentURLsUsed;
+
+ LLStringUtil::format_map_t args_attachment_urls;
+ args_attachment_urls["[COUNT]"] = llformat ("%d", mAttachmentURLsUsed);
+ args_attachment_urls["[MAX]"] = llformat ("%d", mAttachmentURLsMax);
+ args_attachment_urls["[AVAILABLE]"] = llformat ("%d", attachment_urls_available);
+ std::string msg_attachment_urls = LLTrans::getString("ScriptLimitsURLsUsed", args_attachment_urls);
+ childSetValue("urls_used", LLSD(msg_attachment_urls));
+ }
+}
+
// static
void LLPanelScriptLimitsAttachment::onClickRefresh(void* userdata)
{
diff --git a/indra/newview/llfloaterscriptlimits.h b/indra/newview/llfloaterscriptlimits.h
index e675d14515..4c1ecc1019 100644
--- a/indra/newview/llfloaterscriptlimits.h
+++ b/indra/newview/llfloaterscriptlimits.h
@@ -166,10 +166,10 @@ public:
BOOL StartRequestChain();
- void populateParcelMemoryText();
BOOL getLandScriptResources();
void clearList();
void showBeacon();
+ void returnObjectsFromParcel(S32 local_id);
void returnObjects();
private:
@@ -178,69 +178,30 @@ private:
const std::string& first_name,
const std::string& last_name);
+ LLSD mContent;
LLUUID mParcelId;
BOOL mGotParcelMemoryUsed;
+ BOOL mGotParcelMemoryUsedDetails;
BOOL mGotParcelMemoryMax;
S32 mParcelMemoryMax;
S32 mParcelMemoryUsed;
+ S32 mParcelMemoryUsedDetails;
- std::vector<LLSD> mObjectListItems;
-
-protected:
-
-// LLRemoteParcelInfoObserver interface:
-/*virtual*/ void processParcelInfo(const LLParcelData& parcel_data);
-/*virtual*/ void setParcelID(const LLUUID& parcel_id);
-/*virtual*/ void setErrorStatus(U32 status, const std::string& reason);
-
- static void onClickRefresh(void* userdata);
- static void onClickHighlight(void* userdata);
- static void onClickReturn(void* userdata);
-};
-
-/////////////////////////////////////////////////////////////////////////////
-// URLs panel
-/////////////////////////////////////////////////////////////////////////////
-
-class LLPanelScriptLimitsRegionURLs : public LLPanelScriptLimitsInfo
-{
-
-public:
- LLPanelScriptLimitsRegionURLs()
- : LLPanelScriptLimitsInfo(),
-
- mParcelId(LLUUID()),
- mGotParcelURLsUsed(FALSE),
- mGotParcelURLsMax(FALSE),
- mParcelURLsMax(0),
- mParcelURLsUsed(0)
- {
- };
-
- ~LLPanelScriptLimitsRegionURLs()
- {
- };
-
- // LLPanel
- virtual BOOL postBuild();
-
- void setRegionDetails(LLSD content);
- void setRegionSummary(LLSD content);
-
- void populateParcelURLsText();
- void clearList();
-
-private:
-
- LLUUID mParcelId;
BOOL mGotParcelURLsUsed;
+ BOOL mGotParcelURLsUsedDetails;
BOOL mGotParcelURLsMax;
S32 mParcelURLsMax;
S32 mParcelURLsUsed;
+ S32 mParcelURLsUsedDetails;
std::vector<LLSD> mObjectListItems;
protected:
+
+// LLRemoteParcelInfoObserver interface:
+/*virtual*/ void processParcelInfo(const LLParcelData& parcel_data);
+/*virtual*/ void setParcelID(const LLUUID& parcel_id);
+/*virtual*/ void setErrorStatus(U32 status, const std::string& reason);
static void onClickRefresh(void* userdata);
static void onClickHighlight(void* userdata);
@@ -266,11 +227,26 @@ public:
void setAttachmentDetails(LLSD content);
+ void setAttachmentSummary(LLSD content);
BOOL requestAttachmentDetails();
void clearList();
private:
+ BOOL mGotAttachmentMemoryUsed;
+ BOOL mGotAttachmentMemoryUsedDetails;
+ BOOL mGotAttachmentMemoryMax;
+ S32 mAttachmentMemoryMax;
+ S32 mAttachmentMemoryUsed;
+ S32 mAttachmentMemoryUsedDetails;
+
+ BOOL mGotAttachmentURLsUsed;
+ BOOL mGotAttachmentURLsUsedDetails;
+ BOOL mGotAttachmentURLsMax;
+ S32 mAttachmentURLsMax;
+ S32 mAttachmentURLsUsed;
+ S32 mAttachmentURLsUsedDetails;
+
protected:
static void onClickRefresh(void* userdata);
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index a0031f0193..b6e9fb3f6c 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -2084,6 +2084,10 @@ void LLFloaterSnapshot::draw()
S32 offset_x = (getRect().getWidth() - previewp->getThumbnailWidth()) / 2 ;
S32 offset_y = thumbnail_rect.mBottom + (thumbnail_rect.getHeight() - previewp->getThumbnailHeight()) / 2 ;
+ if (! gSavedSettings.getBOOL("AdvanceSnapshot"))
+ {
+ offset_y += getUIWinHeightShort() - getUIWinHeightLong();
+ }
glMatrixMode(GL_MODELVIEW);
gl_draw_scaled_image(offset_x, offset_y,
diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp
index 645f8ef054..c6e12476bd 100644
--- a/indra/newview/llfloateruipreview.cpp
+++ b/indra/newview/llfloateruipreview.cpp
@@ -1091,7 +1091,9 @@ void LLFloaterUIPreview::onClickEditFloater()
char *args2 = new char[args.size() + 1]; // Windows requires that the second parameter to CreateProcessA be a writable (non-const) string...
strcpy(args2, args.c_str());
- if(!CreateProcessA(exe_path.c_str(), args2, NULL, NULL, FALSE, 0, NULL, exe_dir.c_str(), &sinfo, &pinfo))
+ // we don't want the current directory to be the executable directory, since the file path is now relative. By using
+ // NULL for the current directory instead of exe_dir.c_str(), the path to the target file will work.
+ if(!CreateProcessA(exe_path.c_str(), args2, NULL, NULL, FALSE, 0, NULL, NULL, &sinfo, &pinfo))
{
// DWORD dwErr = GetLastError();
std::string warning = "Creating editor process failed!";
diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp
index b05eb84e52..f154de39c9 100644
--- a/indra/newview/llfolderviewitem.cpp
+++ b/indra/newview/llfolderviewitem.cpp
@@ -2540,13 +2540,11 @@ bool LLInventorySort::operator()(const LLFolderViewItem* const& a, const LLFolde
{
static const LLUUID& favorites_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
- static const LLUUID& landmarks_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK);
LLUUID a_uuid = a->getParentFolder()->getListener()->getUUID();
LLUUID b_uuid = b->getParentFolder()->getListener()->getUUID();
- if ((a_uuid == favorites_folder_id && b_uuid == favorites_folder_id) ||
- (a_uuid == landmarks_folder_id && b_uuid == landmarks_folder_id))
+ if ((a_uuid == favorites_folder_id && b_uuid == favorites_folder_id))
{
// *TODO: mantipov: probably it is better to add an appropriate method to LLFolderViewItem
// or to LLInvFVBridge
diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp
index e01709aa3a..1ed1113f4d 100644
--- a/indra/newview/llgrouplist.cpp
+++ b/indra/newview/llgrouplist.cpp
@@ -72,6 +72,8 @@ public:
static const LLGroupComparator GROUP_COMPARATOR;
LLGroupList::Params::Params()
+: no_groups_msg("no_groups_msg")
+, no_filtered_groups_msg("no_filtered_groups_msg")
{
}
@@ -79,15 +81,14 @@ LLGroupList::Params::Params()
LLGroupList::LLGroupList(const Params& p)
: LLFlatListView(p)
, mDirty(true) // to force initial update
+ , mNoFilteredGroupsMsg(p.no_filtered_groups_msg)
+ , mNoGroupsMsg(p.no_groups_msg)
{
// Listen for agent group changes.
gAgent.addListener(this, "new group");
mShowIcons = gSavedSettings.getBOOL("GroupListShowIcons");
setCommitOnSelectionChange(true);
- // TODO: implement context menu
- // display a context menu appropriate for a list of group names
-// setContextMenu(LLScrollListCtrl::MENU_GROUP);
// Set default sort order.
setComparator(&GROUP_COMPARATOR);
@@ -158,6 +159,18 @@ void LLGroupList::refresh()
LLUUID id;
bool have_filter = !mNameFilter.empty();
+ // set no items message depend on filter state & total count of groups
+ if (have_filter)
+ {
+ // groups were filtered
+ setNoItemsCommentText(mNoFilteredGroupsMsg);
+ }
+ else if (0 == count)
+ {
+ // user is not a member of any group
+ setNoItemsCommentText(mNoGroupsMsg);
+ }
+
clear();
for(S32 i = 0; i < count; ++i)
@@ -173,7 +186,8 @@ void LLGroupList::refresh()
sort();
// Add "none" to list at top if filter not set (what's the point of filtering "none"?).
- if (!have_filter)
+ // but only if some real groups exists. EXT-4838
+ if (!have_filter && count > 0)
{
std::string loc_none = LLTrans::getString("GroupsNone");
addNewItem(LLUUID::null, loc_none, LLUUID::null, ADD_TOP);
diff --git a/indra/newview/llgrouplist.h b/indra/newview/llgrouplist.h
index f7afe0c0b2..f3ac676edd 100644
--- a/indra/newview/llgrouplist.h
+++ b/indra/newview/llgrouplist.h
@@ -53,6 +53,15 @@ class LLGroupList: public LLFlatListView, public LLOldEvents::LLSimpleListener
public:
struct Params : public LLInitParam::Block<Params, LLFlatListView::Params>
{
+ /**
+ * Contains a message for empty list when user is not a member of any group
+ */
+ Optional<std::string> no_groups_msg;
+
+ /**
+ * Contains a message for empty list when all groups don't match passed filter
+ */
+ Optional<std::string> no_filtered_groups_msg;
Params();
};
@@ -80,6 +89,8 @@ private:
bool mShowIcons;
bool mDirty;
std::string mNameFilter;
+ std::string mNoFilteredGroupsMsg;
+ std::string mNoGroupsMsg;
};
class LLButton;
diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp
index 8bd0e520c3..72a52ba13b 100644
--- a/indra/newview/llgroupmgr.cpp
+++ b/indra/newview/llgroupmgr.cpp
@@ -1714,6 +1714,8 @@ void LLGroupMgr::sendGroupMemberEjects(const LLUUID& group_id,
for (std::vector<LLUUID>::iterator it = member_ids.begin();
it != member_ids.end(); ++it)
{
+ LLUUID& ejected_member_id = (*it);
+
// Can't use 'eject' to leave a group.
if ((*it) == gAgent.getID()) continue;
@@ -1734,7 +1736,7 @@ void LLGroupMgr::sendGroupMemberEjects(const LLUUID& group_id,
}
msg->nextBlock("EjectData");
- msg->addUUID("EjecteeID",(*it));
+ msg->addUUID("EjecteeID",ejected_member_id);
if (msg->isSendFull())
{
@@ -1746,13 +1748,15 @@ void LLGroupMgr::sendGroupMemberEjects(const LLUUID& group_id,
for (LLGroupMemberData::role_list_t::iterator rit = (*mit).second->roleBegin();
rit != (*mit).second->roleEnd(); ++rit)
{
- if ((*rit).first.notNull())
+ if ((*rit).first.notNull() && (*rit).second!=0)
{
- (*rit).second->removeMember(*it);
+ (*rit).second->removeMember(ejected_member_id);
}
}
- delete (*mit).second;
+
group_datap->mMembers.erase(*it);
+
+ delete (*mit).second;
}
}
diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index 9e52d4c6c2..1eac90371d 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -510,6 +510,20 @@ void LLIMFloater::setVisible(BOOL visible)
}
}
+BOOL LLIMFloater::getVisible()
+{
+ if(isChatMultiTab())
+ {
+ LLIMFloaterContainer* im_container = LLIMFloaterContainer::getInstance();
+ // getVisible() returns TRUE when Tabbed IM window is minimized.
+ return !im_container->isMinimized() && im_container->getVisible();
+ }
+ else
+ {
+ return LLTransientDockableFloater::getVisible();
+ }
+}
+
//static
bool LLIMFloater::toggle(const LLUUID& session_id)
{
@@ -558,6 +572,12 @@ void LLIMFloater::sessionInitReplyReceived(const LLUUID& im_session_id)
setKey(im_session_id);
mControlPanel->setSessionId(im_session_id);
}
+
+ // updating "Call" button from group control panel here to enable it without placing into draw() (EXT-4796)
+ if(gAgent.isInGroup(im_session_id))
+ {
+ mControlPanel->updateCallButton();
+ }
//*TODO here we should remove "starting session..." warning message if we added it in postBuild() (IB)
@@ -585,6 +605,9 @@ void LLIMFloater::updateMessages()
{
// LLUIColor chat_color = LLUIColorTable::instance().getColor("IMChatColor");
+ LLSD chat_args;
+ chat_args["use_plain_text_chat_history"] = use_plain_text_chat_history;
+
std::ostringstream message;
std::list<LLSD>::const_reverse_iterator iter = messages.rbegin();
std::list<LLSD>::const_reverse_iterator iter_end = messages.rend();
@@ -614,7 +637,7 @@ void LLIMFloater::updateMessages()
chat.mText = message;
}
- mChatHistory->appendMessage(chat, use_plain_text_chat_history);
+ mChatHistory->appendMessage(chat, chat_args);
mLastMessageIndex = msg["index"].asInteger();
}
}
diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h
index 9552b30737..2f034d02b8 100644
--- a/indra/newview/llimfloater.h
+++ b/indra/newview/llimfloater.h
@@ -58,6 +58,7 @@ public:
// LLView overrides
/*virtual*/ BOOL postBuild();
/*virtual*/ void setVisible(BOOL visible);
+ /*virtual*/ BOOL getVisible();
// Check typing timeout timer.
/*virtual*/ void draw();
diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp
index 784c2eaaf9..22eb9a51d2 100644
--- a/indra/newview/llimfloatercontainer.cpp
+++ b/indra/newview/llimfloatercontainer.cpp
@@ -52,6 +52,7 @@ LLIMFloaterContainer::~LLIMFloaterContainer(){}
BOOL LLIMFloaterContainer::postBuild()
{
+ LLIMModel::instance().mNewMsgSignal.connect(boost::bind(&LLIMFloaterContainer::onNewMessageReceived, this, _1));
// Do not call base postBuild to not connect to mCloseSignal to not close all floaters via Close button
// mTabContainer will be initialized in LLMultiFloater::addChild()
return TRUE;
@@ -162,6 +163,21 @@ void LLIMFloaterContainer::onCloseFloater(LLUUID id)
{
LLAvatarPropertiesProcessor::instance().removeObserver(id, this);
LLGroupMgr::instance().removeObserver(id, this);
+
+}
+
+void LLIMFloaterContainer::onNewMessageReceived(const LLSD& data)
+{
+ LLUUID session_id = data["from_id"].asUUID();
+ LLFloater* floaterp = get_ptr_in_map(mSessions, session_id);
+ LLFloater* current_floater = LLMultiFloater::getActiveFloater();
+
+ if(floaterp && current_floater && floaterp != current_floater)
+ {
+ if(LLMultiFloater::isFloaterFlashing(floaterp))
+ LLMultiFloater::setFloaterFlashing(floaterp, FALSE);
+ LLMultiFloater::setFloaterFlashing(floaterp, TRUE);
+ }
}
LLIMFloaterContainer* LLIMFloaterContainer::findInstance()
diff --git a/indra/newview/llimfloatercontainer.h b/indra/newview/llimfloatercontainer.h
index e4a32dbe1d..bc06f0cbd3 100644
--- a/indra/newview/llimfloatercontainer.h
+++ b/indra/newview/llimfloatercontainer.h
@@ -66,10 +66,12 @@ public:
static LLIMFloaterContainer* getInstance();
private:
- typedef std::map<LLUUID,LLPanel*> avatarID_panel_map_t;
+ typedef std::map<LLUUID,LLFloater*> avatarID_panel_map_t;
avatarID_panel_map_t mSessions;
void onCloseFloater(LLUUID avatar_id);
+
+ void onNewMessageReceived(const LLSD& data);
};
#endif // LL_LLIMFLOATERCONTAINER_H
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index b7d4db853e..0c64c2b032 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -1467,6 +1467,7 @@ LLCallDialog::LLCallDialog(const LLSD& payload)
mPayload(payload),
mLifetime(DEFAULT_LIFETIME)
{
+ setAutoFocus(FALSE);
}
void LLCallDialog::getAllowedRect(LLRect& rect)
@@ -1708,6 +1709,8 @@ BOOL LLOutgoingCallDialog::postBuild()
childSetAction("Cancel", onCancel, this);
+ setCanDrag(FALSE);
+
return success;
}
@@ -1794,7 +1797,7 @@ BOOL LLIncomingCallDialog::postBuild()
childSetAction("Accept", onAccept, this);
childSetAction("Reject", onReject, this);
childSetAction("Start IM", onStartIM, this);
- childSetFocus("Accept");
+ setDefaultBtn("Accept");
std::string notify_box_type = mPayload["notify_box_type"].asString();
if(notify_box_type != "VoiceInviteGroup" && notify_box_type != "VoiceInviteAdHoc")
@@ -1807,6 +1810,8 @@ BOOL LLIncomingCallDialog::postBuild()
mLifetimeTimer.stop();
}
+ setCanDrag(FALSE);
+
return TRUE;
}
@@ -2424,7 +2429,7 @@ void LLIMMgr::inviteToSession(
}
else
{
- LLFloaterReg::showInstance("incoming_call", payload, TRUE);
+ LLFloaterReg::showInstance("incoming_call", payload, FALSE);
}
mPendingInvitations[session_id.asString()] = LLSD();
}
@@ -2437,7 +2442,7 @@ void LLIMMgr::onInviteNameLookup(LLSD payload, const LLUUID& id, const std::stri
std::string notify_box_type = payload["notify_box_type"].asString();
- LLFloaterReg::showInstance("incoming_call", payload, TRUE);
+ LLFloaterReg::showInstance("incoming_call", payload, FALSE);
}
//*TODO disconnects all sessions
@@ -2984,48 +2989,6 @@ public:
}
};
-LLCallInfoDialog::LLCallInfoDialog(const LLSD& payload) : LLCallDialog(payload)
-{
-}
-
-BOOL LLCallInfoDialog::postBuild()
-{
- // init notification's lifetime
- std::istringstream ss( getString("lifetime") );
- if (!(ss >> mLifetime))
- {
- mLifetime = DEFAULT_LIFETIME;
- }
- return LLCallDialog::postBuild();
-}
-
-void LLCallInfoDialog::onOpen(const LLSD& key)
-{
- if(key.has("msg"))
- {
- std::string msg = key["msg"];
- getChild<LLTextBox>("msg")->setValue(msg);
- }
-
- mLifetimeTimer.start();
-}
-
-void LLCallInfoDialog::show(const std::string& status_name, const LLSD& args)
-{
- LLUIString message = LLTrans::getString(status_name);
- message.setArgs(args);
-
- LLSD payload;
- payload["msg"] = message;
- LLFloater* inst = LLFloaterReg::findInstance("call_info");
-
- // avoid recreate instance with the same message
- if (inst == NULL || message.getString() != inst->getChild<LLTextBox>("msg")->getValue())
- {
- LLFloaterReg::showInstance("call_info", payload);
- }
-}
-
LLHTTPRegistration<LLViewerChatterBoxSessionStartReply>
gHTTPRegistrationMessageChatterboxsessionstartreply(
"/message/ChatterBoxSessionStartReply");
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index b573490fa3..1c7aaa3f1b 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -530,16 +530,6 @@ private:
void hideAllText();
};
-class LLCallInfoDialog : public LLCallDialog
-{
-public:
- LLCallInfoDialog(const LLSD& payload);
- /*virtual*/ BOOL postBuild();
- /*virtual*/ void onOpen(const LLSD& key);
-
- static void show(const std::string& status_name, const LLSD& args);
-};
-
// Globals
extern LLIMMgr *gIMMgr;
diff --git a/indra/newview/llinspect.cpp b/indra/newview/llinspect.cpp
index c7b8db9635..c7b651f37c 100644
--- a/indra/newview/llinspect.cpp
+++ b/indra/newview/llinspect.cpp
@@ -34,6 +34,7 @@
#include "llcontrol.h" // LLCachedControl
#include "llui.h" // LLUI::sSettingsGroups
+#include "llviewermenu.h"
LLInspect::LLInspect(const LLSD& key)
: LLFloater(key),
@@ -108,3 +109,26 @@ void LLInspect::onMouseLeave(S32 x, S32 y, MASK mask)
{
mOpenTimer.unpause();
}
+
+bool LLInspect::childHasVisiblePopupMenu()
+{
+ // Child text-box may spawn a pop-up menu, if mouse is over the menu, Inspector
+ // will hide(which is not expected).
+ // This is an attempt to find out if child control has spawned a menu.
+
+ LLView* child_menu = gMenuHolder->getVisibleMenu();
+ if(child_menu)
+ {
+ LLRect floater_rc = calcScreenRect();
+ LLRect menu_screen_rc = child_menu->calcScreenRect();
+ S32 mx, my;
+ LLUI::getMousePositionScreen(&mx, &my);
+
+ // This works wrong if we spawn a menu near Inspector and menu overlaps Inspector.
+ if(floater_rc.overlaps(menu_screen_rc) && menu_screen_rc.pointInRect(mx, my))
+ {
+ return true;
+ }
+ }
+ return false;
+}
diff --git a/indra/newview/llinspect.h b/indra/newview/llinspect.h
index a1cb9cd71c..f8c86618d2 100644
--- a/indra/newview/llinspect.h
+++ b/indra/newview/llinspect.h
@@ -56,6 +56,9 @@ public:
/*virtual*/ void onFocusLost();
protected:
+
+ virtual bool childHasVisiblePopupMenu();
+
LLFrameTimer mCloseTimer;
LLFrameTimer mOpenTimer;
};
diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index 3a41aebf28..b2cdc0738f 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -393,11 +393,18 @@ void LLInspectAvatar::onMouseLeave(S32 x, S32 y, MASK mask)
{
LLMenuGL* gear_menu = getChild<LLMenuButton>("gear_btn")->getMenu();
LLMenuGL* gear_menu_self = getChild<LLMenuButton>("gear_self_btn")->getMenu();
- if ( !(gear_menu && gear_menu->getVisible()) &&
- !(gear_menu_self && gear_menu_self->getVisible()))
+ if ( gear_menu && gear_menu->getVisible() &&
+ gear_menu_self && gear_menu_self->getVisible() )
{
- mOpenTimer.unpause();
+ return;
+ }
+
+ if(childHasVisiblePopupMenu())
+ {
+ return;
}
+
+ mOpenTimer.unpause();
}
void LLInspectAvatar::updateModeratorPanel()
diff --git a/indra/newview/llinspectobject.cpp b/indra/newview/llinspectobject.cpp
index dd313c528d..1a5795a2ae 100644
--- a/indra/newview/llinspectobject.cpp
+++ b/indra/newview/llinspectobject.cpp
@@ -575,10 +575,17 @@ void LLInspectObject::updateSecureBrowsing()
void LLInspectObject::onMouseLeave(S32 x, S32 y, MASK mask)
{
LLMenuGL* gear_menu = getChild<LLMenuButton>("gear_btn")->getMenu();
- if ( !(gear_menu && gear_menu->getVisible()))
+ if ( gear_menu && gear_menu->getVisible() )
{
- mOpenTimer.unpause();
+ return;
+ }
+
+ if(childHasVisiblePopupMenu())
+ {
+ return;
}
+
+ mOpenTimer.unpause();
}
void LLInspectObject::onClickBuy()
diff --git a/indra/newview/llinspectremoteobject.cpp b/indra/newview/llinspectremoteobject.cpp
index 898f1cd9ac..66e4a1bf66 100644
--- a/indra/newview/llinspectremoteobject.cpp
+++ b/indra/newview/llinspectremoteobject.cpp
@@ -167,7 +167,8 @@ void LLInspectRemoteObject::nameCallback(const LLUUID& id, const std::string& fi
void LLInspectRemoteObject::update()
{
// show the object name as the inspector's title
- getChild<LLUICtrl>("object_name")->setValue(mName);
+ // (don't hyperlink URLs in object names)
+ getChild<LLUICtrl>("object_name")->setValue("<nolink>" + mName + "</nolink>");
// show the object's owner - click it to show profile
std::string owner = mOwner;
@@ -192,7 +193,7 @@ void LLInspectRemoteObject::update()
std::string url;
if (! mSLurl.empty())
{
- std::string url = "secondlife:///app/teleport/" + mSLurl;
+ url = "secondlife:///app/teleport/" + mSLurl;
}
getChild<LLUICtrl>("object_slurl")->setValue(url);
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 5d3142459a..c22eca037d 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -3788,6 +3788,21 @@ void LLGestureBridge::performAction(LLFolderView* folder, LLInventoryModel* mode
gInventory.updateItem(item);
gInventory.notifyObservers();
}
+ else if("play" == action)
+ {
+ if(!LLGestureManager::instance().isGestureActive(mUUID))
+ {
+ // we need to inform server about gesture activating to be consistent with LLPreviewGesture and LLGestureComboList.
+ BOOL inform_server = TRUE;
+ BOOL deactivate_similar = FALSE;
+ LLGestureManager::instance().setGestureLoadedCallback(mUUID, boost::bind(&LLGestureBridge::playGesture, mUUID));
+ LLGestureManager::instance().activateGestureWithAsset(mUUID, gInventory.getItem(mUUID)->getAssetUUID(), inform_server, deactivate_similar);
+ }
+ else
+ {
+ playGesture(mUUID);
+ }
+ }
else LLItemBridge::performAction(folder, model, action);
}
@@ -3873,6 +3888,20 @@ void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
hide_context_entries(menu, items, disabled_items);
}
+// static
+void LLGestureBridge::playGesture(const LLUUID& item_id)
+{
+ if (LLGestureManager::instance().isGesturePlaying(item_id))
+ {
+ LLGestureManager::instance().stopGesture(item_id);
+ }
+ else
+ {
+ LLGestureManager::instance().playGesture(item_id);
+ }
+}
+
+
// +=================================================+
// | LLAnimationBridge |
// +=================================================+
@@ -4649,6 +4678,7 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
{
case LLAssetType::AT_CLOTHING:
items.push_back(std::string("Take Off"));
+ // Fallthrough since clothing and bodypart share wear options
case LLAssetType::AT_BODYPART:
if (get_is_item_worn(item->getUUID()))
{
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index 8e83fe8312..1f16c63261 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -493,6 +493,8 @@ public:
virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
+ static void playGesture(const LLUUID& item_id);
+
protected:
LLGestureBridge(LLInventoryPanel* inventory, const LLUUID& uuid)
: LLItemBridge(inventory, uuid) {}
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index bdf1ebddac..7ec976604a 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -142,105 +142,6 @@ bool LLCanCache::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
return rv;
}
-/*
-This namespace contains a functionality to remove LM prefixes were used to store sort order of
-Favorite Landmarks in landmarks' names.
-Once being in Favorites folder LM inventory Item has such prefix.
-Due to another solution is implemented in EXT-3985 these prefixes should be removed.
-
-*NOTE: It will be unnecessary after the first successful session in viewer 2.0.
-Can be removed before public release.
-
-Implementation details:
-At the first run with this patch it patches all cached landmarks: removes LM sort prefixes and
-updates them on the viewer and server sides.
-Also it calls fetching agent's inventory to process not yet loaded landmarks too.
-If fetching is successfully done it will store special per-agent empty file-marker
-in the user temporary folder (where cached inventory is loaded) while caching agent's inventory.
-After that in will not affect the viewer until cached marker is removed.
-*/
-namespace LMSortPrefix
-{
- bool cleanup_done = false;
- const std::string getMarkerPath()
- {
- std::string path(gDirUtilp->getExpandedFilename(LL_PATH_CACHE, gAgentID.asString()));
- std::string marker_filename = llformat("%s-lm_prefix_marker", path.c_str());
-
- return marker_filename;
- }
- bool wasClean()
- {
- static bool was_clean = false;
- static bool already_init = false;
- if (already_init) return was_clean;
-
- already_init = true;
- std::string path_to_marker = getMarkerPath();
- was_clean = LLFile::isfile(path_to_marker);
-
- return was_clean;
- }
-
- void setLandmarksWereCleaned()
- {
- if (cleanup_done)
- {
- std::string path_to_marker = getMarkerPath();
- LLFILE* file = LLFile::fopen(path_to_marker, "w");
- if(!file)
- {
- llwarns << "unable to save marker that LM prefixes were removed: " << path_to_marker << llendl;
- return;
- }
-
- fclose(file);
- }
- }
-
- void removePrefix(LLPointer<LLViewerInventoryItem> inv_item)
- {
- if (wasClean())
- {
- LL_INFOS_ONCE("") << "Inventory was cleaned for this avatar. Patch can be removed." << LL_ENDL;
- return;
- }
-
- if (LLInventoryType::IT_LANDMARK != inv_item->getInventoryType()) return;
-
- std::string old_name = inv_item->getName();
-
- S32 sort_field = -1;
- std::string display_name;
- BOOL exists = LLViewerInventoryItem::extractSortFieldAndDisplayName(old_name, &sort_field, &display_name);
- if (exists && sort_field != -1)
- {
- llinfos << "Removing Landmark sort field and separator for: " << old_name << " | " << inv_item->getUUID() << llendl;
- LLUUID parent_uuid = inv_item->getParentUUID();
- if (gInventory.getCategory(parent_uuid))
- {
- llinfos << "parent folder is: " << gInventory.getCategory(parent_uuid)->getName() << llendl;
- }
-
-
- // mark item completed to avoid error while copying and updating server
- inv_item->setComplete(TRUE);
- LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(inv_item.get());
- new_item->rename(display_name);
- gInventory.updateItem(new_item);
- new_item->updateServer(FALSE);
-
- gInventory.notifyObservers();
- }
- }
-
- void completeCleanup()
- {
- // background fetch is completed. can save marker
- cleanup_done = true;
- }
-}
-
///----------------------------------------------------------------------------
/// Class LLInventoryModel
///----------------------------------------------------------------------------
@@ -317,7 +218,10 @@ BOOL LLInventoryModel::isObjectDescendentOf(const LLUUID& obj_id,
const LLViewerInventoryCategory *LLInventoryModel::getFirstNondefaultParent(const LLUUID& obj_id) const
{
const LLInventoryObject* obj = getObject(obj_id);
- const LLUUID& parent_id = obj->getParentUUID();
+
+ // Search up the parent chain until we get to root or an acceptable folder.
+ // This assumes there are no cycles in the tree else we'll get a hang.
+ LLUUID parent_id = obj->getParentUUID();
while (!parent_id.isNull())
{
const LLViewerInventoryCategory *cat = getCategory(parent_id);
@@ -329,6 +233,7 @@ const LLViewerInventoryCategory *LLInventoryModel::getFirstNondefaultParent(cons
{
return cat;
}
+ parent_id = cat->getParentUUID();
}
return NULL;
}
@@ -1835,8 +1740,6 @@ void LLInventoryModel::stopBackgroundFetch()
gIdleCallbacks.deleteFunction(&LLInventoryModel::backgroundFetch, NULL);
sBulkFetchCount=0;
sMinTimeBetweenFetches=0.0f;
-
- LMSortPrefix::completeCleanup();
}
}
@@ -1983,13 +1886,6 @@ void LLInventoryModel::cache(
const LLUUID& parent_folder_id,
const LLUUID& agent_id)
{
- if (getRootFolderID() == parent_folder_id)
- {
- // *TODO: mantipov: can be removed before public release, EXT-3985
- //save marker to avoid fetching inventory on future sessions
- LMSortPrefix::setLandmarksWereCleaned();
- }
-
lldebugs << "Caching " << parent_folder_id << " for " << agent_id
<< llendl;
LLViewerInventoryCategory* root_cat = getCategory(parent_folder_id);
@@ -2800,28 +2696,6 @@ void LLInventoryModel::buildParentChildMap()
// The inv tree is built.
mIsAgentInvUsable = true;
- {// *TODO: mantipov: can be removed before public release, EXT-3985
- /*
- *HACK: mantipov: to cleanup landmarks were marked with sort index prefix in name.
- Is necessary to be called once per account after EXT-3985 is implemented.
- So, let fetch agent's inventory, processing will be done in processInventoryDescendents()
- Should be removed before public release.
- */
- if (!LMSortPrefix::wasClean())
- {
- cat_array_t cats;
- item_array_t items;
- collectDescendents(agent_inv_root_id, cats, items, INCLUDE_TRASH);
-
- for (item_array_t::const_iterator it= items.begin(); it != items.end(); ++it)
- {
- LMSortPrefix::removePrefix(*it);
- }
-
- gInventory.startBackgroundFetch(agent_inv_root_id);
- }
- }
-
llinfos << "Inventory initialized, notifying observers" << llendl;
addChangedMask(LLInventoryObserver::ALL, LLUUID::null);
notifyObservers();
@@ -3587,10 +3461,6 @@ void LLInventoryModel::processInventoryDescendents(LLMessageSystem* msg,void**)
continue;
}
gInventory.updateItem(titem);
-
- {// *TODO: mantipov: can be removed before public release, EXT-3985
- LMSortPrefix::removePrefix(titem);
- }
}
// set version and descendentcount according to message.
diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp
index 0e93e28f2d..4f40a0a532 100644
--- a/indra/newview/lllocationinputctrl.cpp
+++ b/indra/newview/lllocationinputctrl.cpp
@@ -722,14 +722,12 @@ void LLLocationInputCtrl::refreshParcelIcons()
}
bool allow_buy = vpm->canAgentBuyParcel(current_parcel, false);
- bool allow_voice = agent_region->isVoiceEnabled() && current_parcel->getParcelFlagAllowVoice();
- bool allow_fly = !agent_region->getBlockFly() && current_parcel->getAllowFly();
- bool allow_push = !agent_region->getRestrictPushObject() && !current_parcel->getRestrictPushObject();
- bool allow_build = current_parcel->getAllowModify(); // true when anyone is allowed to build. See EXT-4610.
- bool allow_scripts = !(agent_region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS) &&
- !(agent_region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS) &&
- current_parcel->getAllowOtherScripts();
- bool allow_damage = agent_region->getAllowDamage() || current_parcel->getAllowDamage();
+ bool allow_voice = vpm->allowAgentVoice(agent_region, current_parcel);
+ bool allow_fly = vpm->allowAgentFly(agent_region, current_parcel);
+ bool allow_push = vpm->allowAgentPush(agent_region, current_parcel);
+ bool allow_build = vpm->allowAgentBuild(current_parcel); // true when anyone is allowed to build. See EXT-4610.
+ bool allow_scripts = vpm->allowAgentScripts(agent_region, current_parcel);
+ bool allow_damage = vpm->allowAgentDamage(agent_region, current_parcel);
// Most icons are "block this ability"
mForSaleBtn->setVisible(allow_buy);
diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp
index dc187bf36c..96ce01c05f 100644
--- a/indra/newview/lllogchat.cpp
+++ b/indra/newview/lllogchat.cpp
@@ -138,16 +138,20 @@ void LLLogChat::saveHistory(const std::string& filename,
const LLUUID& from_id,
const std::string& line)
{
- if(!filename.size())
+ std::string tmp_filename = filename;
+ LLStringUtil::trim(tmp_filename);
+ if (tmp_filename.empty())
{
- llinfos << "Filename is Empty!" << llendl;
+ std::string warn = "Chat history filename [" + filename + "] is empty!";
+ llwarning(warn, 666);
+ llassert(tmp_filename.size());
return;
}
-
+
llofstream file (LLLogChat::makeLogFileName(filename), std::ios_base::app);
if (!file.is_open())
{
- llinfos << "Couldn't open chat history log!" << llendl;
+ llwarns << "Couldn't open chat history log! - " + filename << llendl;
return;
}
diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp
index 9f04558d50..8c875c9b63 100644
--- a/indra/newview/llnamelistctrl.cpp
+++ b/indra/newview/llnamelistctrl.cpp
@@ -162,7 +162,7 @@ BOOL LLNameListCtrl::handleToolTip(S32 x, S32 y, MASK mask)
localRectToScreen(cell_rect, &sticky_rect);
// Spawn at right side of cell
- LLCoordGL pos( sticky_rect.mRight - 16, sticky_rect.mTop );
+ LLCoordGL pos( sticky_rect.mRight - 16, sticky_rect.mTop + (sticky_rect.getHeight()-16)/2 );
LLPointer<LLUIImage> icon = LLUI::getUIImage("Info_Small");
// Should we show a group or an avatar inspector?
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index 71dc0f9011..59708fcfb5 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -34,6 +34,8 @@
#include "llnavigationbar.h"
+#include "v2math.h"
+
#include "llregionhandle.h"
#include "llfloaterreg.h"
@@ -181,6 +183,77 @@ void LLTeleportHistoryMenuItem::onMouseLeave(S32 x, S32 y, MASK mask)
mArrowIcon->setVisible(FALSE);
}
+static LLDefaultChildRegistry::Register<LLPullButton> menu_button("pull_button");
+
+LLPullButton::LLPullButton(const LLPullButton::Params& params):
+ LLButton(params)
+ , mClickDraggingSignal(NULL)
+{
+ setDirectionFromName(params.direction);
+}
+boost::signals2::connection LLPullButton::setClickDraggingCallback( const commit_signal_t::slot_type& cb )
+{
+ if (!mClickDraggingSignal) mClickDraggingSignal = new commit_signal_t();
+ return mClickDraggingSignal->connect(cb);
+}
+
+/*virtual*/
+void LLPullButton::onMouseLeave(S32 x, S32 y, MASK mask)
+{
+ LLButton::onMouseLeave(x, y, mask);
+
+ if(mMouseDownTimer.getStarted() )
+ {
+ const LLVector2 cursor_direction = LLVector2(F32(x),F32(y)) - mLastMouseDown;
+ if( angle_between(mDraggingDirection, cursor_direction) < 0.5 * F_PI_BY_TWO)//call if angle < pi/4
+ {
+ if(mClickDraggingSignal)
+ {
+ (*mClickDraggingSignal)(this, LLSD());
+ }
+ }
+ }
+
+}
+
+/*virtual*/
+BOOL LLPullButton::handleMouseDown(S32 x, S32 y, MASK mask)
+ {
+ BOOL handled = LLButton::handleMouseDown(x,y, mask);
+ if(handled)
+ {
+ mLastMouseDown.set(F32(x), F32(y));
+ }
+ return handled;
+}
+
+/*virtual*/
+BOOL LLPullButton::handleMouseUp(S32 x, S32 y, MASK mask)
+{
+ mLastMouseDown.clear();
+ return LLButton::handleMouseUp(x, y, mask);
+}
+
+void LLPullButton::setDirectionFromName(const std::string& name)
+{
+ if (name == "left")
+ {
+ mDraggingDirection.set(F32(-1), F32(0));
+ }
+ else if (name == "right")
+ {
+ mDraggingDirection.set(F32(0), F32(1));
+ }
+ else if (name == "down")
+ {
+ mDraggingDirection.set(F32(0), F32(-1));
+ }
+ else if (name == "up")
+ {
+ mDraggingDirection.set(F32(0), F32(1));
+ }
+}
+
//-- LNavigationBar ----------------------------------------------------------
/*
@@ -215,8 +288,8 @@ LLNavigationBar::~LLNavigationBar()
BOOL LLNavigationBar::postBuild()
{
- mBtnBack = getChild<LLButton>("back_btn");
- mBtnForward = getChild<LLButton>("forward_btn");
+ mBtnBack = getChild<LLPullButton>("back_btn");
+ mBtnForward = getChild<LLPullButton>("forward_btn");
mBtnHome = getChild<LLButton>("home_btn");
mCmbLocation= getChild<LLLocationInputCtrl>("location_combo");
@@ -224,20 +297,15 @@ BOOL LLNavigationBar::postBuild()
fillSearchComboBox();
- if (!mBtnBack || !mBtnForward || !mBtnHome ||
- !mCmbLocation || !mSearchComboBox)
- {
- llwarns << "Malformed navigation bar" << llendl;
- return FALSE;
- }
-
mBtnBack->setEnabled(FALSE);
mBtnBack->setClickedCallback(boost::bind(&LLNavigationBar::onBackButtonClicked, this));
- mBtnBack->setHeldDownCallback(boost::bind(&LLNavigationBar::onBackOrForwardButtonHeldDown, this, _2));
-
+ mBtnBack->setHeldDownCallback(boost::bind(&LLNavigationBar::onBackOrForwardButtonHeldDown, this,_1, _2));
+ mBtnBack->setClickDraggingCallback(boost::bind(&LLNavigationBar::showTeleportHistoryMenu, this,_1));
+
mBtnForward->setEnabled(FALSE);
mBtnForward->setClickedCallback(boost::bind(&LLNavigationBar::onForwardButtonClicked, this));
- mBtnForward->setHeldDownCallback(boost::bind(&LLNavigationBar::onBackOrForwardButtonHeldDown, this, _2));
+ mBtnForward->setHeldDownCallback(boost::bind(&LLNavigationBar::onBackOrForwardButtonHeldDown, this, _1, _2));
+ mBtnForward->setClickDraggingCallback(boost::bind(&LLNavigationBar::showTeleportHistoryMenu, this,_1));
mBtnHome->setClickedCallback(boost::bind(&LLNavigationBar::onHomeButtonClicked, this));
@@ -332,10 +400,10 @@ void LLNavigationBar::onBackButtonClicked()
LLTeleportHistory::getInstance()->goBack();
}
-void LLNavigationBar::onBackOrForwardButtonHeldDown(const LLSD& param)
+void LLNavigationBar::onBackOrForwardButtonHeldDown(LLUICtrl* ctrl, const LLSD& param)
{
if (param["count"].asInteger() == 0)
- showTeleportHistoryMenu();
+ showTeleportHistoryMenu(ctrl);
}
void LLNavigationBar::onForwardButtonClicked()
@@ -571,7 +639,7 @@ void LLNavigationBar::onRegionNameResponse(
gAgent.teleportViaLocation(global_pos);
}
-void LLNavigationBar::showTeleportHistoryMenu()
+void LLNavigationBar::showTeleportHistoryMenu(LLUICtrl* btn_ctrl)
{
// Don't show the popup if teleport history is empty.
if (LLTeleportHistory::getInstance()->isEmpty())
@@ -585,14 +653,43 @@ void LLNavigationBar::showTeleportHistoryMenu()
if (mTeleportHistoryMenu == NULL)
return;
- // *TODO: why to draw/update anything before showing the menu?
- mTeleportHistoryMenu->buildDrawLabels();
mTeleportHistoryMenu->updateParent(LLMenuGL::sMenuContainer);
const S32 MENU_SPAWN_PAD = -1;
- LLMenuGL::showPopup(mBtnBack, mTeleportHistoryMenu, 0, MENU_SPAWN_PAD);
-
+ LLMenuGL::showPopup(btn_ctrl, mTeleportHistoryMenu, 0, MENU_SPAWN_PAD);
+ LLButton* nav_button = dynamic_cast<LLButton*>(btn_ctrl);
+ if(nav_button)
+ {
+ if(mHistoryMenuConnection.connected())
+ {
+ LL_WARNS("Navgationbar")<<"mHistoryMenuConnection should be disconnected at this moment."<<LL_ENDL;
+ mHistoryMenuConnection.disconnect();
+ }
+ mHistoryMenuConnection = gMenuHolder->setMouseUpCallback(boost::bind(&LLNavigationBar::onNavigationButtonHeldUp, this, nav_button));
+ // pressed state will be update after mouseUp in onBackOrForwardButtonHeldUp();
+ nav_button->setForcePressedState(true);
+ }
// *HACK pass the mouse capturing to the drop-down menu
- gFocusMgr.setMouseCapture( NULL );
+ // it need to let menu handle mouseup event
+ gFocusMgr.setMouseCapture(gMenuHolder);
+}
+/**
+ * Taking into account the HACK above, this callback-function is responsible for correct handling of mouseUp event in case of holding-down the navigation buttons..
+ * We need to process this case separately to update a pressed state of navigation button.
+ */
+void LLNavigationBar::onNavigationButtonHeldUp(LLButton* nav_button)
+{
+ if(nav_button)
+ {
+ nav_button->setForcePressedState(false);
+ }
+ if(gFocusMgr.getMouseCapture() == gMenuHolder)
+ {
+ // we had passed mouseCapture in showTeleportHistoryMenu()
+ // now we MUST release mouseCapture to continue a proper mouseevent workflow.
+ gFocusMgr.setMouseCapture(NULL);
+ }
+ //gMenuHolder is using to display bunch of menus. Disconnect signal to avoid unnecessary calls.
+ mHistoryMenuConnection.disconnect();
}
void LLNavigationBar::handleLoginComplete()
diff --git a/indra/newview/llnavigationbar.h b/indra/newview/llnavigationbar.h
index 9d0687f193..9d0abc7a3a 100644
--- a/indra/newview/llnavigationbar.h
+++ b/indra/newview/llnavigationbar.h
@@ -34,14 +34,61 @@
#define LL_LLNAVIGATIONBAR_H
#include "llpanel.h"
+#include "llbutton.h"
-class LLButton;
class LLLocationInputCtrl;
class LLMenuGL;
class LLSearchEditor;
class LLSearchComboBox;
/**
+ * This button is able to handle click-dragging mouse event.
+ * It has appropriated signal for this event.
+ * Dragging direction can be set from xml by attribute called 'direction'
+ *
+ * *TODO: move to llui?
+ */
+
+class LLPullButton : public LLButton
+{
+ LOG_CLASS(LLPullButton);
+
+public:
+
+ struct Params : public LLInitParam::Block<Params, LLButton::Params>
+ {
+ Optional<std::string> direction; // left, right, down, up
+
+ Params()
+ : direction("direction","down")
+ {}
+ };
+
+ /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask);
+
+ /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask);
+
+ /*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);
+
+ boost::signals2::connection setClickDraggingCallback( const commit_signal_t::slot_type& cb );
+
+ /* virtual*/ ~LLPullButton()
+ {
+ delete mClickDraggingSignal;
+ }
+
+protected:
+ friend class LLUICtrlFactory;
+ // convert string name into direction vector
+ void setDirectionFromName(const std::string& name);
+ LLPullButton(const LLPullButton::Params& params);
+
+ commit_signal_t* mClickDraggingSignal;
+ LLVector2 mLastMouseDown;
+ LLVector2 mDraggingDirection;
+};
+
+/**
* Web browser-like navigation bar.
*/
class LLNavigationBar
@@ -70,13 +117,14 @@ public:
private:
void rebuildTeleportHistoryMenu();
- void showTeleportHistoryMenu();
+ void showTeleportHistoryMenu(LLUICtrl* btn_ctrl);
void invokeSearch(std::string search_text);
// callbacks
void onTeleportHistoryMenuItemClicked(const LLSD& userdata);
void onTeleportHistoryChanged();
void onBackButtonClicked();
- void onBackOrForwardButtonHeldDown(const LLSD& param);
+ void onBackOrForwardButtonHeldDown(LLUICtrl* ctrl, const LLSD& param);
+ void onNavigationButtonHeldUp(LLButton* nav_button);
void onForwardButtonClicked();
void onHomeButtonClicked();
void onLocationSelection();
@@ -94,8 +142,8 @@ private:
void fillSearchComboBox();
LLMenuGL* mTeleportHistoryMenu;
- LLButton* mBtnBack;
- LLButton* mBtnForward;
+ LLPullButton* mBtnBack;
+ LLPullButton* mBtnForward;
LLButton* mBtnHome;
LLSearchComboBox* mSearchComboBox;
LLLocationInputCtrl* mCmbLocation;
@@ -103,6 +151,7 @@ private:
LLRect mDefaultFpRect;
boost::signals2::connection mTeleportFailedConnection;
boost::signals2::connection mTeleportFinishConnection;
+ boost::signals2::connection mHistoryMenuConnection;
bool mPurgeTPHistoryItems;
// if true, save location to location history when teleport finishes
bool mSaveToLocationHistory;
diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp
index 90482eb74d..6de47fccd2 100644
--- a/indra/newview/llnearbychat.cpp
+++ b/indra/newview/llnearbychat.cpp
@@ -62,6 +62,12 @@
static const S32 RESIZE_BAR_THICKNESS = 3;
+const static std::string IM_TIME("time");
+const static std::string IM_TEXT("message");
+const static std::string IM_FROM("from");
+const static std::string IM_FROM_ID("from_id");
+
+
LLNearbyChat::LLNearbyChat(const LLSD& key)
: LLDockableFloater(NULL, false, false, key)
,mChatHistory(NULL)
@@ -194,6 +200,18 @@ void LLNearbyChat::addMessage(const LLChat& chat,bool archive,const LLSD &args)
mMessageArchive.push_back(chat);
if(mMessageArchive.size()>200)
mMessageArchive.erase(mMessageArchive.begin());
+
+ if (gSavedPerAccountSettings.getBOOL("LogChat"))
+ {
+ if (chat.mChatType != CHAT_TYPE_WHISPER && chat.mChatType != CHAT_TYPE_SHOUT)
+ {
+ LLLogChat::saveHistory("chat", chat.mFromName, chat.mFromID, chat.mText);
+ }
+ else
+ {
+ LLLogChat::saveHistory("chat", "", chat.mFromID, chat.mFromName + " " + chat.mText);
+ }
+ }
}
}
@@ -262,6 +280,39 @@ void LLNearbyChat::processChatHistoryStyleUpdate(const LLSD& newvalue)
nearby_chat->updateChatHistoryStyle();
}
+void LLNearbyChat::loadHistory()
+{
+ std::list<LLSD> history;
+ LLLogChat::loadAllHistory("chat", history);
+
+ std::list<LLSD>::const_iterator it = history.begin();
+ while (it != history.end())
+ {
+ const LLSD& msg = *it;
+
+ std::string from = msg[IM_FROM];
+ LLUUID from_id = LLUUID::null;
+ if (msg[IM_FROM_ID].isUndefined())
+ {
+ gCacheName->getUUID(from, from_id);
+ }
+
+ LLChat chat;
+ chat.mFromName = from;
+ chat.mFromID = from_id;
+ chat.mText = msg[IM_TEXT].asString();
+ chat.mTimeStr = msg[IM_TIME].asString();
+ addMessage(chat);
+
+ it++;
+ }
+}
+
+//static
+LLNearbyChat* LLNearbyChat::getInstance()
+{
+ return LLFloaterReg::getTypedInstance<LLNearbyChat>("nearby_chat", LLSD());
+}
////////////////////////////////////////////////////////////////////////////////
//
@@ -278,3 +329,4 @@ void LLNearbyChat::onFocusLost()
setBackgroundOpaque(false);
LLPanel::onFocusLost();
}
+
diff --git a/indra/newview/llnearbychat.h b/indra/newview/llnearbychat.h
index 5fb8ade19e..6ef2a1fee3 100644
--- a/indra/newview/llnearbychat.h
+++ b/indra/newview/llnearbychat.h
@@ -47,6 +47,8 @@ public:
~LLNearbyChat();
BOOL postBuild ();
+
+ /** @param archive true - to save a message to the chat history log */
void addMessage (const LLChat& message,bool archive = true, const LLSD &args = LLSD());
void onNearbyChatContextMenuItemClicked(const LLSD& userdata);
bool onNearbyChatCheckContextMenuItem(const LLSD& userdata);
@@ -65,6 +67,10 @@ public:
static void processChatHistoryStyleUpdate(const LLSD& newvalue);
+ void loadHistory();
+
+ static LLNearbyChat* getInstance();
+
private:
virtual void applySavedVariables();
diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp
index 16218f6d53..b8e0892b02 100644
--- a/indra/newview/llnotificationhandlerutil.cpp
+++ b/indra/newview/llnotificationhandlerutil.cpp
@@ -153,7 +153,7 @@ void LLHandlerUtil::logToIMP2P(const LLNotificationPtr& notification, bool to_fi
{
const std::string name = LLHandlerUtil::getSubstitutionName(notification);
- const std::string session_name = notification->getPayload().has(
+ std::string session_name = notification->getPayload().has(
"SESSION_NAME") ? notification->getPayload()["SESSION_NAME"].asString() : name;
// don't create IM p2p session with objects, it's necessary condition to log
@@ -162,6 +162,18 @@ void LLHandlerUtil::logToIMP2P(const LLNotificationPtr& notification, bool to_fi
{
LLUUID from_id = notification->getPayload()["from_id"];
+ //*HACK for ServerObjectMessage the sesson name is really weird, see EXT-4779
+ if (SERVER_OBJECT_MESSAGE == notification->getName())
+ {
+ session_name = "chat";
+ }
+
+ //there still appears a log history file with weird name " .txt"
+ if (" " == session_name || "{waiting}" == session_name || "{nobody}" == session_name)
+ {
+ llwarning("Weird session name (" + session_name + ") for notification " + notification->getName(), 666)
+ }
+
if(to_file_only)
{
logToIM(IM_NOTHING_SPECIAL, session_name, name, notification->getMessage(),
diff --git a/indra/newview/lloutputmonitorctrl.cpp b/indra/newview/lloutputmonitorctrl.cpp
index f816dc589d..388fdeea7a 100644
--- a/indra/newview/lloutputmonitorctrl.cpp
+++ b/indra/newview/lloutputmonitorctrl.cpp
@@ -251,6 +251,11 @@ void LLOutputMonitorCtrl::setSpeakerId(const LLUUID& speaker_id)
{
if (speaker_id.isNull() || speaker_id == mSpeakerId) return;
+ if (mSpeakerId.notNull())
+ {
+ // Unregister previous registration to avoid crash. EXT-4782.
+ LLSpeakingIndicatorManager::unregisterSpeakingIndicator(mSpeakerId, this);
+ }
mSpeakerId = speaker_id;
LLSpeakingIndicatorManager::registerSpeakingIndicator(mSpeakerId, this);
diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp
index 3f5d80c123..1e46827c1a 100644
--- a/indra/newview/llpanelclassified.cpp
+++ b/indra/newview/llpanelclassified.cpp
@@ -1231,12 +1231,14 @@ void LLPanelClassifiedInfo::processProperties(void* data, EAvatarProcessorType t
static std::string mature_str = getString("type_mature");
static std::string pg_str = getString("type_pg");
+ static LLUIString price_str = getString("l$_price");
bool mature = is_cf_mature(c_info->flags);
childSetValue("content_type", mature ? mature_str : pg_str);
childSetValue("auto_renew", is_cf_auto_renew(c_info->flags));
- childSetTextArg("price_for_listing", "[PRICE]", llformat("%d", c_info->price_for_listing));
+ price_str.setArg("[PRICE]", llformat("%d", c_info->price_for_listing));
+ childSetValue("price_for_listing", LLSD(price_str));
setInfoLoaded(true);
}
diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp
index ff1e43b526..d491583b56 100644
--- a/indra/newview/llpanelimcontrolpanel.cpp
+++ b/indra/newview/llpanelimcontrolpanel.cpp
@@ -280,8 +280,6 @@ void LLPanelGroupControlPanel::draw()
// Need to resort the participant list if it's in sort by recent speaker order.
if (mParticipantList)
mParticipantList->updateRecentSpeakersOrder();
- //* TODO: find better way to properly enable call button for group and remove this call from draw()
- updateCallButton();
LLPanelChatControlPanel::draw();
}
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 87d101b00f..af9e791223 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -689,6 +689,23 @@ void LLPanelLogin::refreshLocation( bool force_visible )
}
// static
+void LLPanelLogin::updateLocationUI()
+{
+ if (!sInstance) return;
+
+ std::string sim_string = LLURLSimString::sInstance.mSimString;
+ if (!sim_string.empty())
+ {
+ // Replace "<Type region name>" with this region name
+ LLComboBox* combo = sInstance->getChild<LLComboBox>("start_location_combo");
+ combo->remove(2);
+ combo->add( sim_string );
+ combo->setTextEntry(sim_string);
+ combo->setCurrentByIndex( 2 );
+ }
+}
+
+// static
void LLPanelLogin::closePanel()
{
if (sInstance)
diff --git a/indra/newview/llpanellogin.h b/indra/newview/llpanellogin.h
index 97350ce5c7..1fdc3a9361 100644
--- a/indra/newview/llpanellogin.h
+++ b/indra/newview/llpanellogin.h
@@ -71,6 +71,7 @@ public:
static void addServer(const std::string& server, S32 domain_name);
static void refreshLocation( bool force_visible );
+ static void updateLocationUI();
static void getFields(std::string *firstname, std::string *lastname,
std::string *password);
@@ -102,7 +103,7 @@ private:
static void onPassKey(LLLineEditor* caller, void* user_data);
static void onSelectServer(LLUICtrl*, void*);
static void onServerComboLostFocus(LLFocusableElement*);
-
+
private:
LLPointer<LLUIImage> mLogoImage;
boost::scoped_ptr<LLPanelLoginListener> mListener;
diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index 0f0fb4b94e..ea66ef7d2c 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -198,6 +198,10 @@ void LLPanelMyProfileEdit::processProfileProperties(const LLAvatarData* avatar_d
{
fillCommonData(avatar_data);
+ // 'Home page' was hidden in LLPanelAvatarProfile::fillCommonData() to fix EXT-4734
+ // Show 'Home page' in Edit My Profile (EXT-4873)
+ childSetVisible("homepage_edit", true);
+
fillPartnerData(avatar_data);
fillAccountStatus(avatar_data);
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index b01cdcc832..423ee61e25 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -516,7 +516,6 @@ BOOL LLPanelPeople::postBuild()
mRecentList->setShowIcons("RecentListShowIcons");
mGroupList = getChild<LLGroupList>("group_list");
- mGroupList->setNoItemsCommentText(getString("no_groups"));
mNearbyList->setContextMenu(&LLPanelPeopleMenus::gNearbyMenu);
mRecentList->setContextMenu(&LLPanelPeopleMenus::gNearbyMenu);
@@ -668,6 +667,11 @@ void LLPanelPeople::updateFriendList()
lldebugs << "Friends Cards were not found" << llendl;
}
+ // show special help text for just created account to help found friends. EXT-4836
+ static LLTextBox* no_friends_text = getChild<LLTextBox>("no_friends_msg");
+ no_friends_text->setVisible(all_friendsp.size() == 0);
+
+
LLAvatarTracker::buddy_map_t::const_iterator buddy_it = all_buddies.begin();
for (; buddy_it != all_buddies.end(); ++buddy_it)
{
diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp
index 9b31ef23a2..9e5f9da0ea 100644
--- a/indra/newview/llpanelplaceprofile.cpp
+++ b/indra/newview/llpanelplaceprofile.cpp
@@ -340,8 +340,10 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
std::string on = getString("on");
std::string off = getString("off");
+ LLViewerParcelMgr* vpm = LLViewerParcelMgr::getInstance();
+
// Processing parcel characteristics
- if (region->isVoiceEnabled() && parcel->getParcelFlagAllowVoice())
+ if (vpm->allowAgentVoice(region, parcel))
{
mVoiceIcon->setValue(icon_voice);
mVoiceText->setText(on);
@@ -352,7 +354,7 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
mVoiceText->setText(off);
}
- if (!region->getBlockFly() && parcel->getAllowFly())
+ if (vpm->allowAgentFly(region, parcel))
{
mFlyIcon->setValue(icon_fly);
mFlyText->setText(on);
@@ -363,18 +365,18 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
mFlyText->setText(off);
}
- if (region->getRestrictPushObject() || parcel->getRestrictPushObject())
+ if (vpm->allowAgentPush(region, parcel))
{
- mPushIcon->setValue(icon_push_no);
- mPushText->setText(off);
+ mPushIcon->setValue(icon_push);
+ mPushText->setText(on);
}
else
{
- mPushIcon->setValue(icon_push);
- mPushText->setText(on);
+ mPushIcon->setValue(icon_push_no);
+ mPushText->setText(off);
}
- if (parcel->getAllowModify())
+ if (vpm->allowAgentBuild(parcel))
{
mBuildIcon->setValue(icon_build);
mBuildText->setText(on);
@@ -385,20 +387,18 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
mBuildText->setText(off);
}
- if ((region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS) ||
- (region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS) ||
- !parcel->getAllowOtherScripts())
+ if (vpm->allowAgentScripts(region, parcel))
{
- mScriptsIcon->setValue(icon_scripts_no);
- mScriptsText->setText(off);
+ mScriptsIcon->setValue(icon_scripts);
+ mScriptsText->setText(on);
}
else
{
- mScriptsIcon->setValue(icon_scripts);
- mScriptsText->setText(on);
+ mScriptsIcon->setValue(icon_scripts_no);
+ mScriptsText->setText(off);
}
- if (region->getAllowDamage() || parcel->getAllowDamage())
+ if (vpm->allowAgentDamage(region, parcel))
{
mDamageIcon->setValue(icon_damage);
mDamageText->setText(on);
@@ -461,12 +461,8 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
S32 claim_price;
S32 rent_price;
F32 dwell;
- BOOL for_sale = parcel->getForSale();
- LLViewerParcelMgr::getInstance()->getDisplayInfo(&area,
- &claim_price,
- &rent_price,
- &for_sale,
- &dwell);
+ BOOL for_sale;
+ vpm->getDisplayInfo(&area, &claim_price, &rent_price, &for_sale, &dwell);
if (for_sale)
{
const LLUUID& auth_buyer_id = parcel->getAuthorizedBuyerID();
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index 29cfbbe606..a49386cb5c 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -70,6 +70,7 @@
#include "lltoggleablemenu.h"
#include "llviewerinventory.h"
#include "llviewermenu.h"
+#include "llviewermessage.h"
#include "llviewerparcelmgr.h"
#include "llviewerregion.h"
#include "llviewerwindow.h"
@@ -105,22 +106,35 @@ private:
LLPanelPlaces* mPlaces;
};
-class LLPlacesInventoryObserver : public LLInventoryObserver
+class LLPlacesInventoryObserver : public LLInventoryAddedObserver
{
public:
LLPlacesInventoryObserver(LLPanelPlaces* places_panel) :
- LLInventoryObserver(),
- mPlaces(places_panel)
+ mPlaces(places_panel),
+ mTabsCreated(false)
{}
/*virtual*/ void changed(U32 mask)
{
- if (mPlaces)
- mPlaces->changedInventory(mask);
+ LLInventoryAddedObserver::changed(mask);
+
+ if (!mTabsCreated && mPlaces)
+ {
+ mPlaces->createTabs();
+ mTabsCreated = true;
+ }
+ }
+
+protected:
+ /*virtual*/ void done()
+ {
+ mPlaces->showAddedLandmarkInfo(mAdded);
+ mAdded.clear();
}
private:
LLPanelPlaces* mPlaces;
+ bool mTabsCreated;
};
class LLPlacesRemoteParcelInfoObserver : public LLRemoteParcelInfoObserver
@@ -943,7 +957,7 @@ void LLPanelPlaces::changedParcelSelection()
updateVerbs();
}
-void LLPanelPlaces::changedInventory(U32 mask)
+void LLPanelPlaces::createTabs()
{
if (!(gInventory.isInventoryUsable() && LLTeleportHistory::getInstance()))
return;
@@ -979,10 +993,6 @@ void LLPanelPlaces::changedInventory(U32 mask)
// Filter applied to show all items.
if (mActivePanel)
mActivePanel->onSearchEdit(mActivePanel->getFilterSubString());
-
- // we don't need to monitor inventory changes anymore,
- // so remove the observer
- gInventory.removeObserver(mInventoryObserver);
}
void LLPanelPlaces::changedGlobalPos(const LLVector3d &global_pos)
@@ -991,6 +1001,33 @@ void LLPanelPlaces::changedGlobalPos(const LLVector3d &global_pos)
updateVerbs();
}
+void LLPanelPlaces::showAddedLandmarkInfo(const std::vector<LLUUID>& items)
+{
+ for (std::vector<LLUUID>::const_iterator item_iter = items.begin();
+ item_iter != items.end();
+ ++item_iter)
+ {
+ const LLUUID& item_id = (*item_iter);
+ if(!highlight_offered_item(item_id))
+ {
+ continue;
+ }
+
+ LLInventoryItem* item = gInventory.getItem(item_id);
+
+ if (LLAssetType::AT_LANDMARK == item->getType())
+ {
+ // Created landmark is passed to Places panel to allow its editing.
+ // If the panel is closed we don't reopen it until created landmark is loaded.
+ if("create_landmark" == getPlaceInfoType() && !getItem())
+ {
+ setItem(item);
+ }
+ break;
+ }
+ }
+}
+
void LLPanelPlaces::updateVerbs()
{
bool is_place_info_visible;
diff --git a/indra/newview/llpanelplaces.h b/indra/newview/llpanelplaces.h
index 110d7a1054..78fcbbb11d 100644
--- a/indra/newview/llpanelplaces.h
+++ b/indra/newview/llpanelplaces.h
@@ -66,11 +66,15 @@ public:
// Called on parcel selection change to update place information.
void changedParcelSelection();
- // Called on agent inventory change to find out when inventory gets usable.
- void changedInventory(U32 mask);
+ // Called once on agent inventory first change to find out when inventory gets usable
+ // and to create "My Landmarks" and "Teleport History" tabs.
+ void createTabs();
// Called when we receive the global 3D position of a parcel.
void changedGlobalPos(const LLVector3d &global_pos);
+ // Opens landmark info panel when agent creates or receives landmark.
+ void showAddedLandmarkInfo(const std::vector<LLUUID>& items);
+
void setItem(LLInventoryItem* item);
LLInventoryItem* getItem() { return mItem; }
diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index 43e0f9a88c..90c8f2551f 100644
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -940,6 +940,9 @@ bool LLTeleportHistoryPanel::onClearTeleportHistoryDialog(const LLSD& notificati
if (0 == option)
{
+ // order does matter, call this first or teleport history will contain one record(current location)
+ LLTeleportHistory::getInstance()->purgeItems();
+
LLTeleportHistoryStorage *th = LLTeleportHistoryStorage::getInstance();
th->purgeItems();
th->save();
diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp
index f83f3eba96..ad47e351ee 100644
--- a/indra/newview/llparticipantlist.cpp
+++ b/indra/newview/llparticipantlist.cpp
@@ -583,7 +583,8 @@ void LLParticipantList::LLParticipantListMenu::moderateVoiceOtherParticipants(co
bool LLParticipantList::LLParticipantListMenu::enableContextMenuItem(const LLSD& userdata)
{
std::string item = userdata.asString();
- if (item == "can_mute_text" || "can_block" == item || "can_share" == item || "can_im" == item)
+ if (item == "can_mute_text" || "can_block" == item || "can_share" == item || "can_im" == item
+ || "can_pay" == item || "can_add" == item)
{
return mUUIDs.front() != gAgentID;
}
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index fccf71f3cb..7bcbe334ff 100644
--- a/indra/newview/llpreviewscript.cpp
+++ b/indra/newview/llpreviewscript.cpp
@@ -1904,7 +1904,7 @@ void LLLiveLSLEditor::uploadAssetViaCaps(const std::string& url,
const LLUUID& item_id,
BOOL is_running)
{
- llinfos << "Update Task Inventory via capability" << llendl;
+ llinfos << "Update Task Inventory via capability " << url << llendl;
LLSD body;
body["task_id"] = task_id;
body["item_id"] = item_id;
diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp
index a00b6a9288..8f36c0e88a 100644
--- a/indra/newview/llscreenchannel.cpp
+++ b/indra/newview/llscreenchannel.cpp
@@ -487,10 +487,21 @@ void LLScreenChannel::showToastsBottom()
toast_rect.setOriginAndSize(getRect().mLeft, bottom + toast_margin, toast_rect.getWidth() ,toast_rect.getHeight());
(*it).toast->setRect(toast_rect);
- // don't show toasts if there is not enough space
if(floater && floater->overlapsScreenChannel())
{
+ if(it == mToastList.rbegin())
+ {
+ // move first toast above docked floater
+ S32 shift = floater->getRect().getHeight();
+ if(floater->getDockControl())
+ {
+ shift += floater->getDockControl()->getTongueHeight();
+ }
+ (*it).toast->translate(0, shift);
+ }
+
LLRect world_rect = gViewerWindow->getWorldViewRectScaled();
+ // don't show toasts if there is not enough space
if(toast_rect.mTop > world_rect.mTop)
{
break;
@@ -802,16 +813,6 @@ void LLScreenChannel::updateShowToastsState()
S32 channel_bottom = gViewerWindow->getWorldViewRectScaled().mBottom + gSavedSettings.getS32("ChannelBottomPanelMargin");;
LLRect this_rect = getRect();
- // adjust channel's height
- if(floater->overlapsScreenChannel())
- {
- channel_bottom += floater->getRect().getHeight();
- if(floater->getDockControl())
- {
- channel_bottom += floater->getDockControl()->getTongueHeight();
- }
- }
-
if(channel_bottom != this_rect.mBottom)
{
setRect(LLRect(this_rect.mLeft, this_rect.mTop, this_rect.mRight, channel_bottom));
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index 5383158cd3..3fd5309947 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -164,7 +164,21 @@ void LLSidepanelInventory::onWearButtonClicked()
void LLSidepanelInventory::onPlayButtonClicked()
{
- performActionOnSelection("activate");
+ const LLInventoryItem *item = getSelectedItem();
+ if (!item)
+ {
+ return;
+ }
+
+ switch(item->getInventoryType())
+ {
+ case LLInventoryType::IT_GESTURE:
+ performActionOnSelection("play");
+ break;
+ default:
+ performActionOnSelection("open");
+ break;
+ }
}
void LLSidepanelInventory::onTeleportButtonClicked()
diff --git a/indra/newview/llspeakingindicatormanager.cpp b/indra/newview/llspeakingindicatormanager.cpp
index 5e1d408e8d..d33c050ee4 100644
--- a/indra/newview/llspeakingindicatormanager.cpp
+++ b/indra/newview/llspeakingindicatormanager.cpp
@@ -114,6 +114,13 @@ private:
void switchSpeakerIndicators(const speaker_ids_t& speakers_uuids, BOOL switch_on);
/**
+ * Ensures that passed instance of Speaking Indicator does not exist among registered ones.
+ * If yes, it will be removed.
+ */
+ void ensureInstanceDoesNotExist(LLSpeakingIndicator* const speaking_indicator);
+
+
+ /**
* Multimap with all registered speaking indicators
*/
speaking_indicators_mmap_t mSpeakingIndicators;
@@ -135,7 +142,11 @@ void SpeakingIndicatorManager::registerSpeakingIndicator(const LLUUID& speaker_i
{
// do not exclude agent's indicators. They should be processed in the same way as others. See EXT-3889.
- LL_DEBUGS("SpeakingIndicator") << "Registering indicator: " << speaker_id << LL_ENDL;
+ LL_DEBUGS("SpeakingIndicator") << "Registering indicator: " << speaker_id << "|"<< speaking_indicator << LL_ENDL;
+
+
+ ensureInstanceDoesNotExist(speaking_indicator);
+
speaking_indicator_value_t value_type(speaker_id, speaking_indicator);
mSpeakingIndicators.insert(value_type);
@@ -148,12 +159,14 @@ void SpeakingIndicatorManager::registerSpeakingIndicator(const LLUUID& speaker_i
void SpeakingIndicatorManager::unregisterSpeakingIndicator(const LLUUID& speaker_id, const LLSpeakingIndicator* const speaking_indicator)
{
+ LL_DEBUGS("SpeakingIndicator") << "Unregistering indicator: " << speaker_id << "|"<< speaking_indicator << LL_ENDL;
speaking_indicators_mmap_t::iterator it;
it = mSpeakingIndicators.find(speaker_id);
for (;it != mSpeakingIndicators.end(); ++it)
{
if (it->second == speaking_indicator)
{
+ LL_DEBUGS("SpeakingIndicator") << "Unregistered." << LL_ENDL;
mSpeakingIndicators.erase(it);
break;
}
@@ -231,6 +244,32 @@ void SpeakingIndicatorManager::switchSpeakerIndicators(const speaker_ids_t& spea
}
}
+void SpeakingIndicatorManager::ensureInstanceDoesNotExist(LLSpeakingIndicator* const speaking_indicator)
+{
+ LL_DEBUGS("SpeakingIndicator") << "Searching for an registered indicator instance: " << speaking_indicator << LL_ENDL;
+ speaking_indicators_mmap_t::iterator it = mSpeakingIndicators.begin();
+ for (;it != mSpeakingIndicators.end(); ++it)
+ {
+ if (it->second == speaking_indicator)
+ {
+ LL_DEBUGS("SpeakingIndicator") << "Found" << LL_ENDL;
+ break;
+ }
+ }
+
+ // It is possible with LLOutputMonitorCtrl the same instance of indicator is registered several
+ // times with different UUIDs. This leads to crash after instance is destroyed because the
+ // only one (specified by UUID in unregisterSpeakingIndicator()) is removed from the map.
+ // So, using stored deleted pointer leads to crash. See EXT-4782.
+ if (it != mSpeakingIndicators.end())
+ {
+ llwarns << "The same instance of indicator has already been registered, removing it: " << it->first << "|"<< speaking_indicator << llendl;
+ llassert(it == mSpeakingIndicators.end());
+ mSpeakingIndicators.erase(it);
+ }
+}
+
+
/************************************************************************/
/* LLSpeakingIndicatorManager namespace implementation */
/************************************************************************/
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 6b816f8786..522adc05ce 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -67,6 +67,7 @@
#include "llmemorystream.h"
#include "llmessageconfig.h"
#include "llmoveview.h"
+#include "llnearbychat.h"
#include "llnotifications.h"
#include "llnotificationsutil.h"
#include "llteleporthistory.h"
@@ -904,7 +905,8 @@ bool idle_startup()
LLFile::mkdir(gDirUtilp->getChatLogsDir());
LLFile::mkdir(gDirUtilp->getPerAccountChatLogsDir());
- //good as place as any to create user windlight directories
+
+ //good a place as any to create user windlight directories
std::string user_windlight_path_name(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight", ""));
LLFile::mkdir(user_windlight_path_name.c_str());
@@ -1284,6 +1286,14 @@ bool idle_startup()
LLAppViewer::instance()->loadNameCache();
}
+ //gCacheName is required for nearby chat history loading
+ //so I just moved nearby history loading a few states further
+ if (!gNoRender && gSavedPerAccountSettings.getBOOL("LogShowHistory"))
+ {
+ LLNearbyChat* nearby_chat = LLNearbyChat::getInstance();
+ if (nearby_chat) nearby_chat->loadHistory();
+ }
+
// *Note: this is where gWorldMap used to be initialized.
// register null callbacks for audio until the audio system is initialized
diff --git a/indra/newview/llteleporthistory.cpp b/indra/newview/llteleporthistory.cpp
index ce00dec802..dcc85392f7 100644
--- a/indra/newview/llteleporthistory.cpp
+++ b/indra/newview/llteleporthistory.cpp
@@ -173,6 +173,8 @@ void LLTeleportHistory::purgeItems()
// reset the count
mRequestedItem = -1;
mCurrentItem = 0;
+
+ onHistoryChanged();
}
// static
diff --git a/indra/newview/lltoolplacer.h b/indra/newview/lltoolplacer.h
index b7422380d4..df07f1854c 100644
--- a/indra/newview/lltoolplacer.h
+++ b/indra/newview/lltoolplacer.h
@@ -33,7 +33,6 @@
#ifndef LL_TOOLPLACER_H
#define LL_TOOLPLACER_H
-#include "llprimitive.h"
#include "llpanel.h"
#include "lltool.h"
diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp
index 38103f9e41..934981b0ad 100644
--- a/indra/newview/llvieweraudio.cpp
+++ b/indra/newview/llvieweraudio.cpp
@@ -242,10 +242,29 @@ void audio_update_wind(bool force_update)
// outside the fade-in.
F32 master_volume = gSavedSettings.getBOOL("MuteAudio") ? 0.f : gSavedSettings.getF32("AudioLevelMaster");
F32 ambient_volume = gSavedSettings.getBOOL("MuteAmbient") ? 0.f : gSavedSettings.getF32("AudioLevelAmbient");
+ F32 max_wind_volume = master_volume * ambient_volume;
- F32 wind_volume = master_volume * ambient_volume;
- gAudiop->mMaxWindGain = wind_volume;
-
+ const F32 WIND_SOUND_TRANSITION_TIME = 2.f;
+ // amount to change volume this frame
+ F32 volume_delta = (LLFrameTimer::getFrameDeltaTimeF32() / WIND_SOUND_TRANSITION_TIME) * max_wind_volume;
+ if (force_update)
+ {
+ // initialize wind volume (force_update) by using large volume_delta
+ // which is sufficient to completely turn off or turn on wind noise
+ volume_delta = max_wind_volume;
+ }
+
+ // mute wind when not flying
+ if (gAgent.getFlying())
+ {
+ // volume increases by volume_delta, up to no more than max_wind_volume
+ gAudiop->mMaxWindGain = llmin(gAudiop->mMaxWindGain + volume_delta, max_wind_volume);
+ }
+ else
+ {
+ // volume decreases by volume_delta, down to no less than 0
+ gAudiop->mMaxWindGain = llmax(gAudiop->mMaxWindGain - volume_delta, 0.f);
+ }
last_camera_water_height = camera_water_height;
gAudiop->updateWind(gRelativeWindVec, camera_water_height);
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index f78ca6b190..30316d9dac 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -204,7 +204,6 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("openobject", "floater_openobject.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterOpenObject>);
LLFloaterReg::add("outgoing_call", "floater_outgoing_call.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLOutgoingCallDialog>);
- LLFloaterReg::add("call_info", "floater_call_info.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLCallInfoDialog>);
LLFloaterReg::add("parcel_info", "floater_preview_url.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterParcelInfo>);
LLFloaterPayUtil::registerFloater();
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index d0964450e8..4f6f0f9dd6 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -860,29 +860,12 @@ void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& f
++item_iter)
{
const LLUUID& item_id = (*item_iter);
- LLInventoryItem* item = gInventory.getItem(item_id);
- if(!item)
+ if(!highlight_offered_item(item_id))
{
- LL_WARNS("Messaging") << "Unable to show inventory item: " << item_id << LL_ENDL;
continue;
}
- ////////////////////////////////////////////////////////////////////////////////
- // Don't highlight if it's in certain "quiet" folders which don't need UI
- // notification (e.g. trash, cof, lost-and-found).
- const BOOL user_is_away = gAwayTimer.getStarted();
- if(!user_is_away)
- {
- const LLViewerInventoryCategory *parent = gInventory.getFirstNondefaultParent(item_id);
- if (parent)
- {
- const LLFolderType::EType parent_type = parent->getPreferredType();
- if (LLViewerFolderType::lookupIsQuietType(parent_type))
- {
- continue;
- }
- }
- }
+ LLInventoryItem* item = gInventory.getItem(item_id);
////////////////////////////////////////////////////////////////////////////////
// Special handling for various types.
@@ -929,10 +912,11 @@ void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& f
LLPanelPlaces *places_panel = dynamic_cast<LLPanelPlaces*>(LLSideTray::getInstance()->getPanel("panel_places"));
if (places_panel)
{
- // we are creating a landmark
+ // Landmark creation handling is moved to LLPanelPlaces::showAddedLandmarkInfo()
+ // TODO* LLPanelPlaces dependency is going to be removed. See EXT-4347.
if("create_landmark" == places_panel->getPlaceInfoType() && !places_panel->getItem())
{
- places_panel->setItem(item);
+ //places_panel->setItem(item);
}
// we are opening a group notice attachment
else
@@ -982,6 +966,34 @@ void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& f
}
}
+bool highlight_offered_item(const LLUUID& item_id)
+{
+ LLInventoryItem* item = gInventory.getItem(item_id);
+ if(!item)
+ {
+ LL_WARNS("Messaging") << "Unable to show inventory item: " << item_id << LL_ENDL;
+ return false;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // Don't highlight if it's in certain "quiet" folders which don't need UI
+ // notification (e.g. trash, cof, lost-and-found).
+ if(!gAgent.getAFK())
+ {
+ const LLViewerInventoryCategory *parent = gInventory.getFirstNondefaultParent(item_id);
+ if (parent)
+ {
+ const LLFolderType::EType parent_type = parent->getPreferredType();
+ if (LLViewerFolderType::lookupIsQuietType(parent_type))
+ {
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+
void inventory_offer_mute_callback(const LLUUID& blocked_id,
const std::string& first_name,
const std::string& last_name,
@@ -2169,6 +2181,12 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
chat.mFromID = from_id ^ gAgent.getSessionID();
}
+ if(SYSTEM_FROM == name)
+ {
+ // System's UUID is NULL (fixes EXT-4766)
+ chat.mFromID = from_id = LLUUID::null;
+ }
+
LLSD query_string;
query_string["owner"] = from_id;
query_string["slurl"] = location;
@@ -2190,7 +2208,10 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
LLNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance<LLNearbyChat>("nearby_chat", LLSD());
if(nearby_chat)
{
- nearby_chat->addMessage(chat);
+ LLSD args;
+ args["owner_id"] = from_id;
+ args["slurl"] = location;
+ nearby_chat->addMessage(chat, true, args);
}
diff --git a/indra/newview/llviewermessage.h b/indra/newview/llviewermessage.h
index 1415c16090..7dd629dcfd 100644
--- a/indra/newview/llviewermessage.h
+++ b/indra/newview/llviewermessage.h
@@ -203,6 +203,11 @@ void process_initiate_download(LLMessageSystem* msg, void**);
void start_new_inventory_observer();
void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& from_name);
+// Returns true if item is not in certain "quiet" folder which don't need UI
+// notification (e.g. trash, cof, lost-and-found) and agent is not AFK, false otherwise.
+// Returns false if item is not found.
+bool highlight_offered_item(const LLUUID& item_id);
+
struct LLOfferInfo
{
LLOfferInfo()
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index b85b42c710..7ec650629d 100644
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -666,31 +666,38 @@ bool LLViewerParcelMgr::allowAgentBuild() const
}
}
+// Return whether anyone can build on the given parcel
+bool LLViewerParcelMgr::allowAgentBuild(const LLParcel* parcel) const
+{
+ return parcel->getAllowModify();
+}
+
bool LLViewerParcelMgr::allowAgentVoice() const
{
- LLViewerRegion* region = gAgent.getRegion();
+ return allowAgentVoice(gAgent.getRegion(), mAgentParcel);
+}
+
+bool LLViewerParcelMgr::allowAgentVoice(const LLViewerRegion* region, const LLParcel* parcel) const
+{
return region && region->isVoiceEnabled()
- && mAgentParcel && mAgentParcel->getParcelFlagAllowVoice();
+ && parcel && parcel->getParcelFlagAllowVoice();
}
-bool LLViewerParcelMgr::allowAgentFly() const
+bool LLViewerParcelMgr::allowAgentFly(const LLViewerRegion* region, const LLParcel* parcel) const
{
- LLViewerRegion* region = gAgent.getRegion();
return region && !region->getBlockFly()
- && mAgentParcel && mAgentParcel->getAllowFly();
+ && parcel && parcel->getAllowFly();
}
// Can the agent be pushed around by LLPushObject?
-bool LLViewerParcelMgr::allowAgentPush() const
+bool LLViewerParcelMgr::allowAgentPush(const LLViewerRegion* region, const LLParcel* parcel) const
{
- LLViewerRegion* region = gAgent.getRegion();
return region && !region->getRestrictPushObject()
- && mAgentParcel && !mAgentParcel->getRestrictPushObject();
+ && parcel && !parcel->getRestrictPushObject();
}
-bool LLViewerParcelMgr::allowAgentScripts() const
+bool LLViewerParcelMgr::allowAgentScripts(const LLViewerRegion* region, const LLParcel* parcel) const
{
- LLViewerRegion* region = gAgent.getRegion();
// *NOTE: This code does not take into account group-owned parcels
// and the flag to allow group-owned scripted objects to run.
// This mirrors the traditional menu bar parcel icon code, but is not
@@ -698,15 +705,14 @@ bool LLViewerParcelMgr::allowAgentScripts() const
return region
&& !(region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS)
&& !(region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS)
- && mAgentParcel
- && mAgentParcel->getAllowOtherScripts();
+ && parcel
+ && parcel->getAllowOtherScripts();
}
-bool LLViewerParcelMgr::allowAgentDamage() const
+bool LLViewerParcelMgr::allowAgentDamage(const LLViewerRegion* region, const LLParcel* parcel) const
{
- LLViewerRegion* region = gAgent.getRegion();
return (region && region->getAllowDamage())
- || (mAgentParcel && mAgentParcel->getAllowDamage());
+ || (parcel && parcel->getAllowDamage());
}
BOOL LLViewerParcelMgr::isOwnedAt(const LLVector3d& pos_global) const
diff --git a/indra/newview/llviewerparcelmgr.h b/indra/newview/llviewerparcelmgr.h
index 379190789b..98be8e2c7b 100644
--- a/indra/newview/llviewerparcelmgr.h
+++ b/indra/newview/llviewerparcelmgr.h
@@ -171,26 +171,28 @@ public:
// Can this agent build on the parcel he is on?
// Used for parcel property icons in nav bar.
bool allowAgentBuild() const;
+ bool allowAgentBuild(const LLParcel* parcel) const;
// Can this agent speak on the parcel he is on?
// Used for parcel property icons in nav bar.
bool allowAgentVoice() const;
-
+ bool allowAgentVoice(const LLViewerRegion* region, const LLParcel* parcel) const;
+
// Can this agent start flying on this parcel?
// Used for parcel property icons in nav bar.
- bool allowAgentFly() const;
+ bool allowAgentFly(const LLViewerRegion* region, const LLParcel* parcel) const;
// Can this agent be pushed by llPushObject() on this parcel?
// Used for parcel property icons in nav bar.
- bool allowAgentPush() const;
+ bool allowAgentPush(const LLViewerRegion* region, const LLParcel* parcel) const;
// Can scripts written by non-parcel-owners run on the agent's current
// parcel? Used for parcel property icons in nav bar.
- bool allowAgentScripts() const;
+ bool allowAgentScripts(const LLViewerRegion* region, const LLParcel* parcel) const;
// Can the agent be damaged here?
// Used for parcel property icons in nav bar.
- bool allowAgentDamage() const;
+ bool allowAgentDamage(const LLViewerRegion* region, const LLParcel* parcel) const;
F32 getHoverParcelWidth() const
{ return F32(mHoverEastNorth.mdV[VX] - mHoverWestSouth.mdV[VX]); }
diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp
index a5d671eb27..7f5680b6df 100644
--- a/indra/newview/llviewertexteditor.cpp
+++ b/indra/newview/llviewertexteditor.cpp
@@ -246,7 +246,7 @@ public:
return FALSE;
}
- /*virtual*/ const LLStyleSP getStyle() const { return mStyle; }
+ /*virtual*/ LLStyleConstSP getStyle() const { return mStyle; }
private:
LLUIImagePtr mImage;
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index b4484ac736..bdf6587aea 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -51,6 +51,7 @@
#include "llviewquery.h"
#include "llxmltree.h"
+#include "llslurl.h"
//#include "llviewercamera.h"
#include "llrender.h"
@@ -80,6 +81,9 @@
#include "timing.h"
#include "llviewermenu.h"
#include "lltooltip.h"
+#include "llmediaentry.h"
+#include "llurldispatcher.h"
+#include "llurlsimstring.h"
// newview includes
#include "llagent.h"
@@ -795,6 +799,137 @@ BOOL LLViewerWindow::handleMiddleMouseDown(LLWindow *window, LLCoordGL pos, MAS
// Always handled as far as the OS is concerned.
return TRUE;
}
+
+LLWindowCallbacks::DragNDropResult LLViewerWindow::handleDragNDrop( LLWindow *window, LLCoordGL pos, MASK mask, LLWindowCallbacks::DragNDropAction action, std::string data)
+{
+ LLWindowCallbacks::DragNDropResult result = LLWindowCallbacks::DND_NONE;
+
+ const bool prim_media_dnd_enabled = gSavedSettings.getBOOL("PrimMediaDragNDrop");
+ const bool slurl_dnd_enabled = gSavedSettings.getBOOL("SLURLDragNDrop");
+
+ if ( prim_media_dnd_enabled || slurl_dnd_enabled )
+ {
+ switch(action)
+ {
+ // Much of the handling for these two cases is the same.
+ case LLWindowCallbacks::DNDA_TRACK:
+ case LLWindowCallbacks::DNDA_DROPPED:
+ case LLWindowCallbacks::DNDA_START_TRACKING:
+ {
+ bool drop = (LLWindowCallbacks::DNDA_DROPPED == action);
+
+ if (slurl_dnd_enabled)
+ {
+ // special case SLURLs
+ if ( LLSLURL::isSLURL( data ) )
+ {
+ if (drop)
+ {
+ LLURLDispatcher::dispatch( data, NULL, true );
+ LLURLSimString::setStringRaw( LLSLURL::stripProtocol( data ) );
+ LLPanelLogin::refreshLocation( true );
+ LLPanelLogin::updateLocationUI();
+ }
+ return LLWindowCallbacks::DND_MOVE;
+ };
+ }
+
+ if (prim_media_dnd_enabled)
+ {
+ LLPickInfo pick_info = pickImmediate( pos.mX, pos.mY, TRUE /*BOOL pick_transparent*/ );
+
+ LLUUID object_id = pick_info.getObjectID();
+ S32 object_face = pick_info.mObjectFace;
+ std::string url = data;
+
+ lldebugs << "Object: picked at " << pos.mX << ", " << pos.mY << " - face = " << object_face << " - URL = " << url << llendl;
+
+ LLVOVolume *obj = dynamic_cast<LLVOVolume*>(static_cast<LLViewerObject*>(pick_info.getObject()));
+
+ if (obj && obj->permModify() && !obj->getRegion()->getCapability("ObjectMedia").empty())
+ {
+ LLTextureEntry *te = obj->getTE(object_face);
+ if (te)
+ {
+ if (drop)
+ {
+ if (! te->hasMedia())
+ {
+ // Create new media entry
+ LLSD media_data;
+ // XXX Should we really do Home URL too?
+ media_data[LLMediaEntry::HOME_URL_KEY] = url;
+ media_data[LLMediaEntry::CURRENT_URL_KEY] = url;
+ media_data[LLMediaEntry::AUTO_PLAY_KEY] = true;
+ obj->syncMediaData(object_face, media_data, true, true);
+ // XXX This shouldn't be necessary, should it ?!?
+ if (obj->getMediaImpl(object_face))
+ obj->getMediaImpl(object_face)->navigateReload();
+ obj->sendMediaDataUpdate();
+
+ result = LLWindowCallbacks::DND_COPY;
+ }
+ else {
+ // Check the whitelist
+ if (te->getMediaData()->checkCandidateUrl(url))
+ {
+ // just navigate to the URL
+ if (obj->getMediaImpl(object_face))
+ {
+ obj->getMediaImpl(object_face)->navigateTo(url);
+ }
+ else {
+ // This is very strange. Navigation should
+ // happen via the Impl, but we don't have one.
+ // This sends it to the server, which /should/
+ // trigger us getting it. Hopefully.
+ LLSD media_data;
+ media_data[LLMediaEntry::CURRENT_URL_KEY] = url;
+ obj->syncMediaData(object_face, media_data, true, true);
+ obj->sendMediaDataUpdate();
+ }
+ result = LLWindowCallbacks::DND_LINK;
+ }
+ }
+ LLSelectMgr::getInstance()->unhighlightObjectOnly(mDragHoveredObject);
+ mDragHoveredObject = NULL;
+
+ }
+ else {
+ // Check the whitelist, if there's media (otherwise just show it)
+ if (te->getMediaData() == NULL || te->getMediaData()->checkCandidateUrl(url))
+ {
+ if ( obj != mDragHoveredObject)
+ {
+ // Highlight the dragged object
+ LLSelectMgr::getInstance()->unhighlightObjectOnly(mDragHoveredObject);
+ mDragHoveredObject = obj;
+ LLSelectMgr::getInstance()->highlightObjectOnly(mDragHoveredObject);
+ }
+ result = (! te->hasMedia()) ? LLWindowCallbacks::DND_COPY : LLWindowCallbacks::DND_LINK;
+ }
+ }
+ }
+ }
+ }
+ }
+ break;
+
+ case LLWindowCallbacks::DNDA_STOP_TRACKING:
+ // The cleanup case below will make sure things are unhilighted if necessary.
+ break;
+ }
+
+ if (prim_media_dnd_enabled &&
+ result == LLWindowCallbacks::DND_NONE && !mDragHoveredObject.isNull())
+ {
+ LLSelectMgr::getInstance()->unhighlightObjectOnly(mDragHoveredObject);
+ mDragHoveredObject = NULL;
+ }
+ }
+
+ return result;
+}
BOOL LLViewerWindow::handleMiddleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask)
{
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index c0a9180b53..98d2958d9a 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -166,7 +166,8 @@ public:
/*virtual*/ BOOL handleRightMouseUp(LLWindow *window, LLCoordGL pos, MASK mask);
/*virtual*/ BOOL handleMiddleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask);
/*virtual*/ BOOL handleMiddleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask);
- /*virtual*/ void handleMouseMove(LLWindow *window, LLCoordGL pos, MASK mask);
+ /*virtual*/ LLWindowCallbacks::DragNDropResult handleDragNDrop(LLWindow *window, LLCoordGL pos, MASK mask, LLWindowCallbacks::DragNDropAction action, std::string data);
+ void handleMouseMove(LLWindow *window, LLCoordGL pos, MASK mask);
/*virtual*/ void handleMouseLeave(LLWindow *window);
/*virtual*/ void handleResize(LLWindow *window, S32 x, S32 y);
/*virtual*/ void handleFocus(LLWindow *window);
@@ -472,6 +473,10 @@ protected:
static std::string sSnapshotDir;
static std::string sMovieBaseName;
+
+private:
+ // Object temporarily hovered over while dragging
+ LLPointer<LLViewerObject> mDragHoveredObject;
};
void toggle_flying(void*);
diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp
index 9d49fb69d6..bb09a18cc3 100644
--- a/indra/newview/llvoicechannel.cpp
+++ b/indra/newview/llvoicechannel.cpp
@@ -389,13 +389,16 @@ void LLVoiceChannel::setState(EState state)
switch(state)
{
case STATE_RINGING:
- LLCallInfoDialog::show("ringing", mNotifyArgs);
+ //TODO: remove or redirect this call status notification
+// LLCallInfoDialog::show("ringing", mNotifyArgs);
break;
case STATE_CONNECTED:
- LLCallInfoDialog::show("connected", mNotifyArgs);
+ //TODO: remove or redirect this call status notification
+// LLCallInfoDialog::show("connected", mNotifyArgs);
break;
case STATE_HUNG_UP:
- LLCallInfoDialog::show("hang_up", mNotifyArgs);
+ //TODO: remove or redirect this call status notification
+// LLCallInfoDialog::show("hang_up", mNotifyArgs);
break;
default:
break;
@@ -635,7 +638,8 @@ void LLVoiceChannelGroup::setState(EState state)
case STATE_RINGING:
if ( !mIsRetrying )
{
- LLCallInfoDialog::show("ringing", mNotifyArgs);
+ //TODO: remove or redirect this call status notification
+// LLCallInfoDialog::show("ringing", mNotifyArgs);
}
doSetState(state);
@@ -701,7 +705,8 @@ void LLVoiceChannelProximal::handleStatusChange(EStatusType status)
//skip showing "Voice not available at your current location" when agent voice is disabled (EXT-4749)
if(LLVoiceClient::voiceEnabled() && gVoiceClient->voiceWorking())
{
- LLCallInfoDialog::show("unavailable", mNotifyArgs);
+ //TODO: remove or redirect this call status notification
+// LLCallInfoDialog::show("unavailable", mNotifyArgs);
}
return;
default:
@@ -901,7 +906,8 @@ void LLVoiceChannelP2P::setState(EState state)
// so provide a special purpose message here
if (mReceivedCall && state == STATE_RINGING)
{
- LLCallInfoDialog::show("answering", mNotifyArgs);
+ //TODO: remove or redirect this call status notification
+// LLCallInfoDialog::show("answering", mNotifyArgs);
doSetState(state);
return;
}
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index c062dd1732..b6e7e73b9d 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -1258,7 +1258,6 @@ LLVoiceClient::LLVoiceClient() :
mEarLocation(0),
mSpeakerVolumeDirty(true),
mSpeakerMuteDirty(true),
- mSpeakerVolume(0),
mMicVolume(0),
mMicVolumeDirty(true),
@@ -1271,6 +1270,8 @@ LLVoiceClient::LLVoiceClient() :
mAPIVersion = LLTrans::getString("NotConnected");
+ mSpeakerVolume = scale_speaker_volume(0);
+
#if LL_DARWIN || LL_LINUX || LL_SOLARIS
// HACK: THIS DOES NOT BELONG HERE
// When the vivox daemon dies, the next write attempt on our socket generates a SIGPIPE, which kills us.
@@ -3525,7 +3526,7 @@ void LLVoiceClient::buildLocalAudioUpdates(std::ostringstream &stream)
if(mSpeakerMuteDirty)
{
- const char *muteval = ((mSpeakerVolume == 0)?"true":"false");
+ const char *muteval = ((mSpeakerVolume <= scale_speaker_volume(0))?"true":"false");
mSpeakerMuteDirty = false;
@@ -5979,9 +5980,11 @@ bool LLVoiceClient::voiceEnabled()
return gSavedSettings.getBOOL("EnableVoiceChat") && !gSavedSettings.getBOOL("CmdLineDisableVoice");
}
+//AD *TODO: investigate possible merge of voiceWorking() and voiceEnabled() into one non-static method
bool LLVoiceClient::voiceWorking()
{
- return (stateLoggedIn <= mState) && (mState <= stateLeavingSession);
+ //Added stateSessionTerminated state to avoid problems with call in parcels with disabled voice (EXT-4758)
+ return (stateLoggedIn <= mState) && (mState <= stateSessionTerminated);
}
void LLVoiceClient::setLipSyncEnabled(BOOL enabled)
@@ -6062,7 +6065,8 @@ void LLVoiceClient::setVoiceVolume(F32 volume)
if(scaled_volume != mSpeakerVolume)
{
- if((scaled_volume == 0) || (mSpeakerVolume == 0))
+ int min_volume = scale_speaker_volume(0);
+ if((scaled_volume == min_volume) || (mSpeakerVolume == min_volume))
{
mSpeakerMuteDirty = true;
}
diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h
index 8f668dff19..a96cf18e27 100644
--- a/indra/newview/llvoiceclient.h
+++ b/indra/newview/llvoiceclient.h
@@ -192,6 +192,7 @@ static void updatePosition(void);
void setVoiceEnabled(bool enabled);
static bool voiceEnabled();
// Checks is voice working judging from mState
+ // Returns true if vivox has successfully logged in and is not in error state
bool voiceWorking();
void setUsePTT(bool usePTT);
void setPTTIsToggle(bool PTTIsToggle);
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index 219b3dbeb6..ec196245a1 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -47,7 +47,7 @@
<color
name="Black"
value="0 0 0 1" />
- <color
+ <colork
name="Black_10"
value="0 0 0 0.1" />
<color
@@ -77,6 +77,16 @@
<color
name="Purple"
value="1 0 1 1" />
+ <color
+ name="Lime"
+ value=".8 1 .73 1" />
+ <color
+ name="LtYellow"
+ value="1 1 .79 1" />
+ <color
+ name="LtOrange"
+ value="1 .85 .73 1" />
+
<!-- This color name makes potentially unused colors show up bright purple.
Leave this here until all Unused? are removed below, otherwise
the viewer generates many warnings on startup. -->
@@ -97,7 +107,7 @@
value="1 0.82 0.46 1" />
<color
name="AlertCautionTextColor"
- reference="Yellow" />
+ reference="LtYellow" />
<color
name="AgentLinkColor"
reference="White" />
@@ -226,10 +236,10 @@
reference="White" />
<color
name="ColorPaletteEntry16"
- reference="White" />
+ reference="LtYellow" />
<color
name="ColorPaletteEntry17"
- reference="White" />
+ reference="LtGreen" />
<color
name="ColorPaletteEntry18"
reference="LtGray" />
@@ -544,7 +554,7 @@
reference="White" />
<color
name="ObjectChatColor"
- reference="EmphasisColor" />
+ reference="EmphasisColor_35" />
<color
name="OverdrivenColor"
reference="Red" />
@@ -592,7 +602,7 @@
value="0.39 0.39 0.39 1" />
<color
name="ScriptErrorColor"
- value="0.82 0.27 0.27 1" />
+ value="Red" />
<color
name="ScrollBGStripeColor"
reference="Transparent" />
@@ -649,7 +659,7 @@
reference="FrogGreen" />
<color
name="SystemChatColor"
- reference="White" />
+ reference="LtGray" />
<color
name="TextBgFocusColor"
reference="White" />
@@ -703,7 +713,7 @@
reference="White" />
<color
name="llOwnerSayChatColor"
- reference="LtGray" />
+ reference="LtYellow" />
<!-- New Colors -->
<color
diff --git a/indra/newview/skins/default/textures/bottomtray/Move_Fly_Off.png b/indra/newview/skins/default/textures/bottomtray/Move_Fly_Off.png
index 28ff6ba976..9e7291d6fb 100644
--- a/indra/newview/skins/default/textures/bottomtray/Move_Fly_Off.png
+++ b/indra/newview/skins/default/textures/bottomtray/Move_Fly_Off.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/build/Object_Cone_Selected.png b/indra/newview/skins/default/textures/build/Object_Cone_Selected.png
new file mode 100644
index 0000000000..d50dc69ffe
--- /dev/null
+++ b/indra/newview/skins/default/textures/build/Object_Cone_Selected.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/build/Object_Cube_Selected.png b/indra/newview/skins/default/textures/build/Object_Cube_Selected.png
new file mode 100644
index 0000000000..3d6964530d
--- /dev/null
+++ b/indra/newview/skins/default/textures/build/Object_Cube_Selected.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/build/Object_Cylinder_Selected.png b/indra/newview/skins/default/textures/build/Object_Cylinder_Selected.png
new file mode 100644
index 0000000000..3ed0389961
--- /dev/null
+++ b/indra/newview/skins/default/textures/build/Object_Cylinder_Selected.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/build/Object_Grass_Selected.png b/indra/newview/skins/default/textures/build/Object_Grass_Selected.png
new file mode 100644
index 0000000000..3ebd5ea7a1
--- /dev/null
+++ b/indra/newview/skins/default/textures/build/Object_Grass_Selected.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/build/Object_Hemi_Cone_Selected.png b/indra/newview/skins/default/textures/build/Object_Hemi_Cone_Selected.png
new file mode 100644
index 0000000000..3bdc4d1fd5
--- /dev/null
+++ b/indra/newview/skins/default/textures/build/Object_Hemi_Cone_Selected.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/build/Object_Hemi_Cylinder_Selected.png b/indra/newview/skins/default/textures/build/Object_Hemi_Cylinder_Selected.png
new file mode 100644
index 0000000000..0912442e29
--- /dev/null
+++ b/indra/newview/skins/default/textures/build/Object_Hemi_Cylinder_Selected.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/build/Object_Hemi_Sphere_Selected.png b/indra/newview/skins/default/textures/build/Object_Hemi_Sphere_Selected.png
new file mode 100644
index 0000000000..33db4a2de8
--- /dev/null
+++ b/indra/newview/skins/default/textures/build/Object_Hemi_Sphere_Selected.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/build/Object_Prism_Selected.png b/indra/newview/skins/default/textures/build/Object_Prism_Selected.png
new file mode 100644
index 0000000000..9e80fe2b84
--- /dev/null
+++ b/indra/newview/skins/default/textures/build/Object_Prism_Selected.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/build/Object_Pyramid_Selected.png b/indra/newview/skins/default/textures/build/Object_Pyramid_Selected.png
new file mode 100644
index 0000000000..d36bfa55d4
--- /dev/null
+++ b/indra/newview/skins/default/textures/build/Object_Pyramid_Selected.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/build/Object_Ring_Selected.png b/indra/newview/skins/default/textures/build/Object_Ring_Selected.png
new file mode 100644
index 0000000000..962f6efb93
--- /dev/null
+++ b/indra/newview/skins/default/textures/build/Object_Ring_Selected.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/build/Object_Sphere_Selected.png b/indra/newview/skins/default/textures/build/Object_Sphere_Selected.png
new file mode 100644
index 0000000000..715d597144
--- /dev/null
+++ b/indra/newview/skins/default/textures/build/Object_Sphere_Selected.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/build/Object_Tetrahedron_Selected.png b/indra/newview/skins/default/textures/build/Object_Tetrahedron_Selected.png
new file mode 100644
index 0000000000..b2ea680f23
--- /dev/null
+++ b/indra/newview/skins/default/textures/build/Object_Tetrahedron_Selected.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/build/Object_Torus_Selected.png b/indra/newview/skins/default/textures/build/Object_Torus_Selected.png
new file mode 100644
index 0000000000..1fc22686eb
--- /dev/null
+++ b/indra/newview/skins/default/textures/build/Object_Torus_Selected.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/build/Object_Tree_Selected.png b/indra/newview/skins/default/textures/build/Object_Tree_Selected.png
new file mode 100644
index 0000000000..5bd87f8a2f
--- /dev/null
+++ b/indra/newview/skins/default/textures/build/Object_Tree_Selected.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/build/Object_Tube_Selected.png b/indra/newview/skins/default/textures/build/Object_Tube_Selected.png
new file mode 100644
index 0000000000..a4c3f39e14
--- /dev/null
+++ b/indra/newview/skins/default/textures/build/Object_Tube_Selected.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Dark.png
index 0455a52fdc..e0b18b2451 100644
--- a/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Dark.png
+++ b/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Dark.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Light.png b/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Light.png
index be0c379d84..101aaa42b1 100644
--- a/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Light.png
+++ b/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Light.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_Fly_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_Fly_Dark.png
index ed4a512e04..c27f18e3c7 100644
--- a/indra/newview/skins/default/textures/icons/Parcel_Fly_Dark.png
+++ b/indra/newview/skins/default/textures/icons/Parcel_Fly_Dark.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_M_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_M_Dark.png
index 2f5871b8ff..60e6a00a25 100644
--- a/indra/newview/skins/default/textures/icons/Parcel_M_Dark.png
+++ b/indra/newview/skins/default/textures/icons/Parcel_M_Dark.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_M_Light.png b/indra/newview/skins/default/textures/icons/Parcel_M_Light.png
index 724ac22744..55f97f3b4e 100644
--- a/indra/newview/skins/default/textures/icons/Parcel_M_Light.png
+++ b/indra/newview/skins/default/textures/icons/Parcel_M_Light.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_PG_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_PG_Dark.png
index f0565f02dd..11ab1f1e60 100644
--- a/indra/newview/skins/default/textures/icons/Parcel_PG_Dark.png
+++ b/indra/newview/skins/default/textures/icons/Parcel_PG_Dark.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_PG_Light.png b/indra/newview/skins/default/textures/icons/Parcel_PG_Light.png
index f32b0570a1..b536762ddc 100644
--- a/indra/newview/skins/default/textures/icons/Parcel_PG_Light.png
+++ b/indra/newview/skins/default/textures/icons/Parcel_PG_Light.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_R_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_R_Dark.png
index e0e6e14cca..bf618752f6 100644
--- a/indra/newview/skins/default/textures/icons/Parcel_R_Dark.png
+++ b/indra/newview/skins/default/textures/icons/Parcel_R_Dark.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_R_Light.png b/indra/newview/skins/default/textures/icons/Parcel_R_Light.png
index efca6776da..a67bbd0cc5 100644
--- a/indra/newview/skins/default/textures/icons/Parcel_R_Light.png
+++ b/indra/newview/skins/default/textures/icons/Parcel_R_Light.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 21d89908cd..a2d882d9d9 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -322,20 +322,35 @@ with the same filename but different name
<texture name="NoEntryPassLines" file_name="world/NoEntryPassLines.png" use_mips="true" preload="false" />
<texture name="Object_Cone" file_name="build/Object_Cone.png" preload="false" />
+ <texture name="Object_Cone_Selected" file_name="build/Object_Cone_Selected.png" preload="false" />
<texture name="Object_Cube" file_name="build/Object_Cube.png" preload="false" />
+ <texture name="Object_Cube_Selected" file_name="build/Object_Cube_Selected.png" preload="false" />
<texture name="Object_Cylinder" file_name="build/Object_Cylinder.png" preload="false" />
+ <texture name="Object_Cylinder_Selected" file_name="build/Object_Cylinder_Selected.png" preload="false" />
<texture name="Object_Grass" file_name="build/Object_Grass.png" preload="false" />
+ <texture name="Object_Grass_Selected" file_name="build/Object_Grass_Selected.png" preload="false" />
<texture name="Object_Hemi_Cone" file_name="build/Object_Hemi_Cone.png" preload="false" />
+ <texture name="Object_Hemi_Cone_Selected" file_name="build/Object_Hemi_Cone_Selected.png" preload="false" />
<texture name="Object_Hemi_Cylinder" file_name="build/Object_Hemi_Cylinder.png" preload="false" />
+ <texture name="Object_Hemi_Cylinder_Selected" file_name="build/Object_Hemi_Cylinder_Selected.png" preload="false" />
<texture name="Object_Hemi_Sphere" file_name="build/Object_Hemi_Sphere.png" preload="false" />
+ <texture name="Object_Hemi_Sphere_Selected" file_name="build/Object_Hemi_Sphere_Selected.png" preload="false" />
<texture name="Object_Prism" file_name="build/Object_Prism.png" preload="false" />
+ <texture name="Object_Prism_Selected" file_name="build/Object_Prism_Selected.png" preload="false" />
<texture name="Object_Pyramid" file_name="build/Object_Pyramid.png" preload="false" />
+ <texture name="Object_Pyramid_Selected" file_name="build/Object_Pyramid_Selected.png" preload="false" />
<texture name="Object_Ring" file_name="build/Object_Ring.png" preload="false" />
+ <texture name="Object_Ring_Selected" file_name="build/Object_Ring_Selected.png" preload="false" />
<texture name="Object_Sphere" file_name="build/Object_Sphere.png" preload="false" />
+ <texture name="Object_Sphere_Selected" file_name="build/Object_Sphere_Selected.png" preload="false" />
<texture name="Object_Tetrahedron" file_name="build/Object_Tetrahedron.png" preload="false" />
+ <texture name="Object_Tetrahedron_Selected" file_name="build/Object_Tetrahedron_Selected.png" preload="false" />
<texture name="Object_Torus" file_name="build/Object_Torus.png" preload="false" />
+ <texture name="Object_Torus_Selected" file_name="build/Object_Torus_Selected.png" preload="false" />
<texture name="Object_Tree" file_name="build/Object_Tree.png" preload="false" />
+ <texture name="Object_Tree_Selected" file_name="build/Object_Tree_Selected.png" preload="false" />
<texture name="Object_Tube" file_name="build/Object_Tube.png" preload="false" />
+ <texture name="Object_Tube_Selected" file_name="build/Object_Tube_Selected.png" preload="false" />
<texture name="OptionsMenu_Disabled" file_name="icons/OptionsMenu_Disabled.png" preload="false" />
<texture name="OptionsMenu_Off" file_name="icons/OptionsMenu_Off.png" preload="false" />
@@ -586,10 +601,15 @@ with the same filename but different name
scale.left="4" scale.top="28" scale.right="60" scale.bottom="4" />
<texture name="Tool_Create" file_name="build/Tool_Create.png" preload="false" />
+ <texture name="Tool_Create_Selected" file_name="build/Tool_Create_Selected.png" preload="false" />
<texture name="Tool_Dozer" file_name="build/Tool_Dozer.png" preload="false" />
+ <texture name="Tool_Dozer_Selected" file_name="build/Tool_Dozer_Selected.png" preload="false" />
<texture name="Tool_Face" file_name="build/Tool_Face.png" preload="false" />
+ <texture name="Tool_Face_Selected" file_name="build/Tool_Face_Selected.png" preload="false" />
<texture name="Tool_Grab" file_name="build/Tool_Grab.png" preload="false" />
+ <texture name="Tool_Grab_Selected" file_name="build/Tool_Grab_Selected.png" preload="false" />
<texture name="Tool_Zoom" file_name="build/Tool_Zoom.png" preload="false" />
+ <texture name="Tool_Zoom_Selected" file_name="build/Tool_Zoom_Selected.png" preload="false" />
<texture name="Toolbar_Divider" file_name="containers/Toolbar_Divider.png" preload="false" />
<texture name="Toolbar_Left_Off" file_name="containers/Toolbar_Left_Off.png" preload="false" scale.left="5" scale.bottom="4" scale.top="24" scale.right="30" />
diff --git a/indra/newview/skins/default/xui/en/floater_aaa.xml b/indra/newview/skins/default/xui/en/floater_aaa.xml
index 7236351f2e..b9bc45a10b 100644
--- a/indra/newview/skins/default/xui/en/floater_aaa.xml
+++ b/indra/newview/skins/default/xui/en/floater_aaa.xml
@@ -19,7 +19,7 @@
width="320">
<string name="nudge_parabuild" translate="false">Nudge 1</string>
<string name="test_the_vlt">This string CHANGE2 is extracted.</string>
- <string name="testing_eli">Just a test. change here. more change.</string>
+ <string name="testing_eli">Just a test. changes.</string>
<chat_history
allow_html="true"
bg_readonly_color="ChatHistoryBgColor"
diff --git a/indra/newview/skins/default/xui/en/floater_animation_preview.xml b/indra/newview/skins/default/xui/en/floater_animation_preview.xml
index 4f4288b654..1ffedde29b 100644
--- a/indra/newview/skins/default/xui/en/floater_animation_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_animation_preview.xml
@@ -147,7 +147,11 @@ Maximum animation length is [MAX_LENGTH] seconds.
name="E_ST_NO_XLT_EMOTE">
Cannot read emote name.
</floater.string>
- <text
+ <floater.string
+ name="E_ST_BAD_ROOT">
+ Incorrect root joint name, use "hip".
+ </floater.string>
+ <text
type="string"
length="1"
bottom="42"
diff --git a/indra/newview/skins/default/xui/en/floater_beacons.xml b/indra/newview/skins/default/xui/en/floater_beacons.xml
index c8f6c613af..4fc2b698d8 100644
--- a/indra/newview/skins/default/xui/en/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/en/floater_beacons.xml
@@ -25,7 +25,7 @@
name="label_show"
text_color="White"
type="string">
- Show:
+ Show :
</text>
<check_box
control_name="renderbeacons"
@@ -117,6 +117,7 @@
<check_box
control_name="soundsbeacon"
height="16"
+ left="0"
label="Sound sources"
layout="topleft"
name="sounds" >
diff --git a/indra/newview/skins/default/xui/en/floater_color_picker.xml b/indra/newview/skins/default/xui/en/floater_color_picker.xml
index 0daef29bc5..2fa112af8c 100644
--- a/indra/newview/skins/default/xui/en/floater_color_picker.xml
+++ b/indra/newview/skins/default/xui/en/floater_color_picker.xml
@@ -13,20 +13,19 @@
type="string"
length="1"
follows="left|top"
- font="SansSerif"
- height="10"
+ height="20"
layout="topleft"
- left="12"
+ left="10"
mouse_opaque="false"
name="r_val_text"
- top="35"
+ top="25"
width="413">
Red:
</text>
<spinner
decimal_digits="0"
follows="left"
- height="16"
+ height="20"
increment="1"
initial_value="128"
layout="topleft"
@@ -39,20 +38,18 @@
type="string"
length="1"
follows="left|top"
- font="SansSerif"
- height="10"
+ height="20"
layout="topleft"
- left="12"
+ left="10"
mouse_opaque="false"
name="g_val_text"
- top="56"
width="413">
Green:
</text>
<spinner
decimal_digits="0"
follows="left"
- height="16"
+ height="20"
increment="1"
initial_value="128"
layout="topleft"
@@ -65,20 +62,18 @@
type="string"
length="1"
follows="left|top"
- font="SansSerif"
- height="10"
+ height="20"
layout="topleft"
- left="12"
+ left="10"
mouse_opaque="false"
name="b_val_text"
- top="77"
width="413">
Blue:
</text>
<spinner
decimal_digits="0"
follows="left"
- height="16"
+ height="20"
increment="1"
initial_value="128"
layout="topleft"
@@ -91,20 +86,18 @@
type="string"
length="1"
follows="left|top"
- font="SansSerif"
- height="10"
+ height="20"
layout="topleft"
- left="12"
+ left="10"
mouse_opaque="false"
name="h_val_text"
- top="108"
width="413">
Hue:
</text>
<spinner
decimal_digits="0"
follows="left"
- height="16"
+ height="20"
increment="1"
initial_value="180"
layout="topleft"
@@ -117,20 +110,18 @@
type="string"
length="1"
follows="left|top"
- font="SansSerif"
- height="10"
+ height="20"
layout="topleft"
- left="12"
+ left="10"
mouse_opaque="false"
name="s_val_text"
- top="129"
width="413">
Sat:
</text>
<spinner
decimal_digits="0"
follows="left"
- height="16"
+ height="20"
increment="1"
initial_value="50"
layout="topleft"
@@ -143,20 +134,18 @@
type="string"
length="1"
follows="left|top"
- font="SansSerif"
- height="10"
+ height="20"
layout="topleft"
- left="12"
+ left="10"
mouse_opaque="false"
name="l_val_text"
- top="150"
width="413">
Lum:
</text>
<spinner
decimal_digits="0"
follows="left"
- height="16"
+ height="20"
increment="1"
initial_value="50"
layout="topleft"
@@ -170,11 +159,11 @@
height="20"
label="Apply now"
layout="topleft"
- left="12"
+ left="10"
name="apply_immediate"
top_pad="185"
width="100" />
- <button
+ <button
follows="left|bottom"
height="28"
image_selected="eye_button_active.tga"
@@ -185,7 +174,7 @@
width="28" />
<button
follows="right|bottom"
- height="20"
+ height="23"
label="OK"
label_selected="OK"
layout="topleft"
@@ -195,7 +184,7 @@
width="100" />
<button
follows="right|bottom"
- height="20"
+ height="23"
label="Cancel"
label_selected="Cancel"
layout="topleft"
@@ -209,7 +198,7 @@
follows="left|top"
height="16"
layout="topleft"
- left="12"
+ left="10"
name="Current color:"
top="172"
width="110">
@@ -221,7 +210,7 @@
follows="left|top"
height="16"
layout="topleft"
- left="12"
+ left="10"
name="(Drag below to save.)"
top_pad="66"
width="130">
diff --git a/indra/newview/skins/default/xui/en/floater_help_browser.xml b/indra/newview/skins/default/xui/en/floater_help_browser.xml
index e83bc1555c..be32e917e5 100644
--- a/indra/newview/skins/default/xui/en/floater_help_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_help_browser.xml
@@ -4,8 +4,8 @@
can_resize="true"
height="480"
layout="topleft"
- min_height="140"
- min_width="467"
+ min_height="150"
+ min_width="500"
name="floater_help_browser"
help_topic="floater_help_browser"
save_rect="true"
@@ -13,37 +13,44 @@
title="HELP BROWSER"
width="620">
<floater.string
- name="home_page_url">
- http://www.secondlife.com
+ name="loading_text">
+ Loading...
</floater.string>
<floater.string
- name="support_page_url">
- http://support.secondlife.com
+ name="done_text">
</floater.string>
<layout_stack
bottom="480"
follows="left|right|top|bottom"
layout="topleft"
- left="10"
+ left="5"
name="stack1"
top="20"
- width="600">
+ width="610">
<layout_panel
- height="1"
layout="topleft"
left_delta="0"
- name="external_controls"
top_delta="0"
+ name="external_controls"
user_resize="false"
width="590">
<web_browser
- bottom="-4"
+ bottom="-11"
follows="left|right|top|bottom"
layout="topleft"
left="0"
name="browser"
top="0"
+ height="500"
width="590" />
+ <text
+ follows="bottom|left"
+ height="16"
+ layout="topleft"
+ left_delta="2"
+ name="status_text"
+ top_pad="5"
+ width="150" />
</layout_panel>
</layout_stack>
</floater>
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 9aaa660574..d2e5473157 100644
--- a/indra/newview/skins/default/xui/en/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_session.xml
@@ -12,7 +12,7 @@
can_minimize="true"
can_close="true"
visible="false"
- width="440"
+ width="360"
can_resize="true"
min_width="250"
min_height="190">
@@ -20,7 +20,7 @@
animate="false"
follows="all"
height="320"
- width="440"
+ width="360"
layout="topleft"
orientation="horizontal"
name="im_panels"
@@ -38,7 +38,7 @@
left="0"
top="0"
height="200"
- width="325"
+ width="245"
user_resize="true">
<button
height="20"
@@ -65,7 +65,7 @@
parse_highlights="true"
allow_html="true"
left="1"
- width="320">
+ width="240">
</chat_history>
<line_editor
bottom="0"
@@ -75,7 +75,7 @@
label="To"
layout="bottomleft"
name="chat_editor"
- width="320">
+ width="240">
</line_editor>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/en/floater_inventory.xml b/indra/newview/skins/default/xui/en/floater_inventory.xml
index 4434f5b421..6d4620f9ab 100644
--- a/indra/newview/skins/default/xui/en/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/en/floater_inventory.xml
@@ -12,11 +12,11 @@
save_rect="true"
save_visibility="true"
single_instance="false"
- title="INVENTORY"
+ title="MY INVENTORY"
width="467">
<floater.string
name="Title">
- Inventory
+ MY INVENTORY
</floater.string>
<floater.string
name="TitleFetching">
diff --git a/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml
index e94717fe32..990be55847 100644
--- a/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml
@@ -5,7 +5,7 @@
border_style="line"
can_resize="true"
follows="left|top"
- height="570"
+ height="580"
layout="topleft"
min_height="271"
min_width="290"
@@ -13,7 +13,7 @@
help_topic="script_ed_float"
save_rect="true"
title="SCRIPT: NEW SCRIPT"
- width="500">
+ width="508">
<floater.string
name="not_allowed">
You can not view or edit this script, since it has been set as &quot;no copy&quot;. You need full permissions to view or edit a script inside an object.
@@ -24,19 +24,31 @@
</floater.string>
<floater.string
name="Title">
- Script: [NAME]
+ SCRIPT: [NAME]
</floater.string>
+ <panel
+ bevel_style="none"
+
+ border_style="line"
+ follows="left|top|right|bottom"
+ height="522"
+ layout="topleft"
+ left="10"
+ name="script ed panel"
+ top="20"
+ width="497" />
<button
- follows="right|bottom"
- height="20"
+ follows="left|bottom"
+ height="23"
label="Reset"
label_selected="Reset"
layout="topleft"
- left="358"
name="Reset"
- top="545"
- width="128" />
+ left="10"
+ width="61" />
<check_box
+ left_delta="71"
+ top_delta="3"
enabled="false"
follows="left|bottom"
font="SansSerif"
@@ -44,30 +56,17 @@
initial_value="true"
label="Running"
layout="topleft"
- left_delta="-350"
name="running"
- top_delta="2"
width="100" />
<check_box
- enabled="false"
+ left_delta="75"
+ enabled="true"
follows="left|bottom"
font="SansSerif"
height="18"
initial_value="true"
label="Mono"
layout="topleft"
- left_delta="70"
name="mono"
- top_delta="0"
width="100" />
- <panel
- bevel_style="none"
- border_style="line"
- follows="left|top|right|bottom"
- height="506"
- layout="topleft"
- left="1"
- name="script ed panel"
- top="18"
- width="497" />
</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_map.xml b/indra/newview/skins/default/xui/en/floater_map.xml
index 3ddb7bc349..1903e7c714 100644
--- a/indra/newview/skins/default/xui/en/floater_map.xml
+++ b/indra/newview/skins/default/xui/en/floater_map.xml
@@ -6,7 +6,7 @@
center_horiz="true"
center_vert="true"
follows="top|right"
- height="225"
+ height="218"
layout="topleft"
min_height="60"
min_width="174"
@@ -55,116 +55,116 @@
</floater.string>
<net_map
bg_color="NetMapBackgroundColor"
- bottom="225"
follows="top|left|bottom|right"
layout="topleft"
left="0"
mouse_opaque="false"
name="Net Map"
- right="198"
- top="2" />
+ width="200"
+ height="200"
+ top="18"/>
<text
type="string"
length="1"
- bottom="225"
+ bottom="218"
label="N"
layout="topleft"
left="0"
name="floater_map_north"
right="10"
text_color="1 1 1 0.7"
- top="215">
+ top="209">
N
</text>
<text
type="string"
length="1"
- bottom="225"
+ bottom="218"
label="E"
layout="topleft"
left="0"
name="floater_map_east"
right="10"
text_color="1 1 1 0.7"
- top="215">
+ top="209">
E
</text>
<text
type="string"
length="1"
- bottom="225"
+ bottom="205"
label="W"
layout="topleft"
left="0"
name="floater_map_west"
right="11"
text_color="1 1 1 0.7"
- top="215">
+ top="195">
W
</text>
<text
type="string"
length="1"
- bottom="225"
+ bottom="218"
label="S"
layout="topleft"
left="0"
name="floater_map_south"
right="10"
text_color="1 1 1 0.7"
- top="215">
+ top="209">
S
</text>
<text
type="string"
length="1"
- bottom="225"
+ bottom="218"
label="SE"
layout="topleft"
left="0"
name="floater_map_southeast"
right="20"
text_color="1 1 1 0.7"
- top="215">
+ top="209">
SE
</text>
<text
type="string"
length="1"
- bottom="225"
+ bottom="218"
label="NE"
layout="topleft"
left="0"
name="floater_map_northeast"
right="20"
text_color="1 1 1 0.7"
- top="215">
+ top="209">
NE
</text>
<text
type="string"
length="1"
- bottom="225"
+ bottom="218"
label="SW"
layout="topleft"
left="0"
name="floater_map_southwest"
right="20"
text_color="1 1 1 0.7"
- top="215">
+ top="209">
SW
</text>
<text
type="string"
length="1"
- bottom="225"
+ bottom="218"
label="NW"
layout="topleft"
left="0"
name="floater_map_northwest"
right="20"
text_color="1 1 1 0.7"
- top="215">
+ top="209">
NW
</text>
</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_pay_object.xml b/indra/newview/skins/default/xui/en/floater_pay_object.xml
index 455018f467..d09a0a0535 100644
--- a/indra/newview/skins/default/xui/en/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/en/floater_pay_object.xml
@@ -36,7 +36,7 @@
top_delta="3"
name="payee_name"
width="184">
- Ericacita Moostopolison
+ [FIRST] [LAST]
</text>
<text
type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_preview_animation.xml b/indra/newview/skins/default/xui/en/floater_preview_animation.xml
index bbfb362337..6dc073728b 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_animation.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_animation.xml
@@ -38,7 +38,7 @@
width="170" />
<button
height="20"
- label="Play in World"
+ label="Play Inworld"
label_selected="Stop"
layout="topleft"
left="10"
diff --git a/indra/newview/skins/default/xui/en/floater_preview_sound.xml b/indra/newview/skins/default/xui/en/floater_preview_sound.xml
index 68a78d5017..f3be8c4131 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_sound.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_sound.xml
@@ -38,8 +38,8 @@
<button
follows="left|top"
height="22"
- label="Play in World"
- label_selected="Play in World"
+ label="Play Inworld"
+ label_selected="Play Inworld"
layout="topleft"
name="Sound play btn"
sound_flags="0"
diff --git a/indra/newview/skins/default/xui/en/floater_script_limits.xml b/indra/newview/skins/default/xui/en/floater_script_limits.xml
index 98c44ad1b3..6b36cdfcc5 100644
--- a/indra/newview/skins/default/xui/en/floater_script_limits.xml
+++ b/indra/newview/skins/default/xui/en/floater_script_limits.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
legacy_header_height="18"
+ can_resize="true"
height="570"
help_topic="scriptlimits"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/floater_script_preview.xml b/indra/newview/skins/default/xui/en/floater_script_preview.xml
index bb0702c353..d0cd00d147 100644
--- a/indra/newview/skins/default/xui/en/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_script_preview.xml
@@ -3,26 +3,24 @@
legacy_header_height="18"
auto_tile="true"
can_resize="true"
- height="550"
+ height="570"
layout="topleft"
- left_delta="343"
min_height="271"
min_width="290"
name="preview lsl text"
help_topic="preview_lsl_text"
save_rect="true"
title="SCRIPT: ROTATION SCRIPT"
- top_delta="0"
- width="500">
+ width="508">
<floater.string
name="Title">
- Script: [NAME]
+ SCRIPT: [NAME]
</floater.string>
<panel
follows="left|top|right|bottom"
- height="508"
+ height="522"
layout="topleft"
- left="0"
+ left="10"
name="script panel"
top="42"
width="497" />
diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml
index 60c9810e95..2c9402f6cb 100644
--- a/indra/newview/skins/default/xui/en/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml
@@ -46,8 +46,11 @@
<ui_ctrl
height="90"
width="90"
+ layout="topleft"
name="thumbnail_placeholder"
top_pad="6"
+ follows="left|top"
+ left="10"
/>
<text
type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_test_checkbox.xml b/indra/newview/skins/default/xui/en/floater_test_checkbox.xml
index c828f6b284..1935edfcc1 100644
--- a/indra/newview/skins/default/xui/en/floater_test_checkbox.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_checkbox.xml
@@ -72,83 +72,4 @@
name="font_checkbox"
top_pad="14"
width="150" />
-
-<chiclet_im_p2p
- height="25"
- name="im_p2p_chiclet"
- show_speaker="false"
- width="25">
- <chiclet_im_p2p.chiclet_button
- height="25"
- image_selected="PushButton_Selected"
- image_unselected="PushButton_Off"
- name="chiclet_button"
- tab_stop="false"
- width="25"/>
- <chiclet_im_p2p.speaker
- auto_update="true"
- draw_border="false"
- height="25"
- left="25"
- name="speaker"
- visible="false"
- width="20" />
- <chiclet_im_p2p.avatar_icon
- bottom="3"
- follows="left|top|bottom"
- height="20"
- left="2"
- mouse_opaque="false"
- name="avatar_icon"
- width="21" />
- <chiclet_im_p2p.unread_notifications
- height="25"
- font_halign="center"
- left="25"
- mouse_opaque="false"
- name="unread"
- text_color="white"
- v_pad="5"
- visible="false"
- width="20"/>
- <chiclet_im_p2p.new_message_icon
- bottom="11"
- height="14"
- image_name="Unread_Chiclet"
- left="12"
- name="new_message_icon"
- visible="false"
- width="14" />
-</chiclet_im_p2p>
-
-
-<chiclet_offer
- height="25"
- name="offer_chiclet"
- width="25">
- <chiclet_offer.chiclet_button
- height="25"
- image_selected="PushButton_Selected"
- image_unselected="PushButton_Off"
- name="chiclet_button"
- tab_stop="false"
- width="25"/>
- <chiclet_offer.icon
- bottom="3"
- default_icon="Generic_Object_Small"
- follows="all"
- height="19"
- left="3"
- mouse_opaque="false"
- name="chiclet_icon"
- width="19" />
- <chiclet_offer.new_message_icon
- bottom="11"
- height="14"
- image_name="Unread_Chiclet"
- left="12"
- name="new_message_icon"
- visible="false"
- width="14" />
-</chiclet_offer>
</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index 5ada9c0f71..710c4447d4 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -70,7 +70,7 @@
height="20"
image_disabled="Tool_Zoom"
image_disabled_selected="Tool_Zoom"
- image_selected="Tool_Zoom"
+ image_selected="Tool_Zoom_Selected"
image_unselected="Tool_Zoom"
layout="topleft"
left="10"
@@ -86,7 +86,7 @@
height="20"
image_disabled="Tool_Grab"
image_disabled_selected="Tool_Grab"
- image_selected="Tool_Grab"
+ image_selected="Tool_Grab_Selected"
image_unselected="Tool_Grab"
layout="topleft"
left_pad="20"
@@ -102,7 +102,7 @@
height="20"
image_disabled="Tool_Face"
image_disabled_selected="Tool_Face"
- image_selected="Tool_Face"
+ image_selected="Tool_Face_Selected"
image_unselected="Tool_Face"
layout="topleft"
left_pad="20"
@@ -118,7 +118,7 @@
height="20"
image_disabled="Tool_Create"
image_disabled_selected="Tool_Create"
- image_selected="Tool_Create"
+ image_selected="Tool_Create_Selected"
image_unselected="Tool_Create"
layout="topleft"
left_pad="20"
@@ -134,7 +134,7 @@
height="20"
image_disabled="Tool_Dozer"
image_disabled_selected="Tool_Dozer"
- image_selected="Tool_Dozer"
+ image_selected="Tool_Dozer_Selected"
image_unselected="Tool_Dozer"
layout="topleft"
left_pad="20"
@@ -344,7 +344,7 @@
height="20"
image_disabled="Object_Cube"
image_disabled_selected="Object_Cube"
- image_selected="Object_Cube"
+ image_selected="Object_Cube_Selected"
image_unselected="Object_Cube"
layout="topleft"
left="4"
@@ -357,7 +357,7 @@
height="20"
image_disabled="Object_Prism"
image_disabled_selected="Object_Prism"
- image_selected="Object_Prism"
+ image_selected="Object_Prism_Selected"
image_unselected="Object_Prism"
layout="topleft"
left_delta="26"
@@ -370,7 +370,7 @@
height="20"
image_disabled="Object_Pyramid"
image_disabled_selected="Object_Pyramid"
- image_selected="Object_Pyramid"
+ image_selected="Object_Pyramid_Selected"
image_unselected="Object_Pyramid"
layout="topleft"
left_delta="26"
@@ -383,7 +383,7 @@
height="20"
image_disabled="Object_Tetrahedron"
image_disabled_selected="Object_Tetrahedron"
- image_selected="Object_Tetrahedron"
+ image_selected="Object_Tetrahedron_Selected"
image_unselected="Object_Tetrahedron"
layout="topleft"
left_delta="26"
@@ -396,7 +396,7 @@
height="20"
image_disabled="Object_Cylinder"
image_disabled_selected="Object_Cylinder"
- image_selected="Object_Cylinder"
+ image_selected="Object_Cylinder_Selected"
image_unselected="Object_Cylinder"
layout="topleft"
left_delta="26"
@@ -409,7 +409,7 @@
height="20"
image_disabled="Object_Hemi_Cylinder"
image_disabled_selected="Object_Hemi_Cylinder"
- image_selected="Object_Hemi_Cylinder"
+ image_selected="Object_Hemi_Cylinder_Selected"
image_unselected="Object_Hemi_Cylinder"
layout="topleft"
left_delta="26"
@@ -422,7 +422,7 @@
height="20"
image_disabled="Object_Cone"
image_disabled_selected="Object_Cone"
- image_selected="Object_Cone"
+ image_selected="Object_Cone_Selected"
image_unselected="Object_Cone"
layout="topleft"
left_delta="26"
@@ -435,7 +435,7 @@
height="20"
image_disabled="Object_Hemi_Cone"
image_disabled_selected="Object_Hemi_Cone"
- image_selected="Object_Hemi_Cone"
+ image_selected="Object_Hemi_Cone_Selected"
image_unselected="Object_Hemi_Cone"
layout="topleft"
left_delta="26"
@@ -448,7 +448,7 @@
height="20"
image_disabled="Object_Sphere"
image_disabled_selected="Object_Sphere"
- image_selected="Object_Sphere"
+ image_selected="Object_Sphere_Selected"
image_unselected="Object_Sphere"
layout="topleft"
left_delta="26"
@@ -461,7 +461,7 @@
height="20"
image_disabled="Object_Hemi_Sphere"
image_disabled_selected="Object_Hemi_Sphere"
- image_selected="Object_Hemi_Sphere"
+ image_selected="Object_Hemi_Sphere_Selected"
image_unselected="Object_Hemi_Sphere"
layout="topleft"
left_delta="26"
@@ -474,7 +474,7 @@
height="20"
image_disabled="Object_Torus"
image_disabled_selected="Object_Torus"
- image_selected="Object_Torus"
+ image_selected="Object_Torus_Selected"
image_unselected="Object_Torus"
layout="topleft"
left="4"
@@ -487,7 +487,7 @@
height="20"
image_disabled="Object_Tube"
image_disabled_selected="Object_Tube"
- image_selected="Object_Tube"
+ image_selected="Object_Tube_Selected"
image_unselected="Object_Tube"
layout="topleft"
left_delta="26"
@@ -500,7 +500,7 @@
height="20"
image_disabled="Object_Ring"
image_disabled_selected="Object_Ring"
- image_selected="Object_Ring"
+ image_selected="Object_Ring_Selected"
image_unselected="Object_Ring"
layout="topleft"
left_delta="26"
@@ -513,7 +513,7 @@
height="20"
image_disabled="Object_Tree"
image_disabled_selected="Object_Tree"
- image_selected="Object_Tree"
+ image_selected="Object_Tree_Selected"
image_unselected="Object_Tree"
layout="topleft"
left_delta="26"
@@ -526,8 +526,9 @@
height="20"
image_disabled="Object_Grass"
image_disabled_selected="Object_Grass"
- image_selected="Object_Grass"
+ image_selected="Object_Grass_Selected"
image_unselected="Object_Grass"
+ image_overlay_color="Red"
layout="topleft"
left_delta="26"
name="ToolGrass"
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 65c9c2a8fa..e1df50bf58 100644
--- a/indra/newview/skins/default/xui/en/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/en/floater_world_map.xml
@@ -403,7 +403,7 @@
height="16"
image_name="map_track_16.tga"
layout="topleft"
- left="5"
+ left="3"
top="11"
mouse_opaque="true"
name="friends_icon"
@@ -415,7 +415,7 @@
label="Online Friends"
layout="topleft"
top_delta="-4"
- left_pad="5"
+ left_pad="7"
max_chars="60"
name="friend combo"
tool_tip="Show friends on map"
@@ -433,7 +433,7 @@
height="16"
image_name="map_track_16.tga"
layout="topleft"
- left="5"
+ left="3"
top_pad="8"
mouse_opaque="true"
name="landmark_icon"
@@ -445,7 +445,7 @@
label="My Landmarks"
layout="topleft"
top_delta="-3"
- left_pad="5"
+ left_pad="7"
max_chars="64"
name="landmark combo"
tool_tip="Landmark to show on map"
@@ -463,7 +463,7 @@
height="16"
image_name="map_track_16.tga"
layout="topleft"
- left="5"
+ left="3"
top_pad="7"
mouse_opaque="true"
name="region_icon"
@@ -476,7 +476,7 @@
label="Regions by Name"
layout="topleft"
top_delta="-2"
- left_pad="5"
+ left_pad="7"
name="location"
select_on_focus="true"
tool_tip="Type the name of a region"
@@ -497,6 +497,19 @@
<button.commit_callback
function="WMap.Location" />
</button>
+ <button
+ image_overlay="Refresh_Off"
+ follows="top|right"
+ height="23"
+ layout="topleft"
+ left="0"
+ name="Clear"
+ tool_tip="Clear tracking lines and reset map"
+ top_pad="5"
+ width="23">
+ <button.commit_callback
+ function="WMap.Clear" />
+ </button>
<scroll_list
draw_stripes="false"
bg_writeable_color="MouseGray"
@@ -505,7 +518,7 @@
layout="topleft"
left="28"
name="search_results"
- top_pad="5"
+ top_pad="-23"
width="209"
sort_column="1">
<scroll_list.columns
@@ -545,19 +558,6 @@
<button.commit_callback
function="WMap.CopySLURL" />
</button>
- <!-- <button
- follows="right|bottom"
- height="23"
- label="Clear"
- layout="topleft"
- left="10"
- name="Clear"
- tool_tip="Stop tracking"
- top_pad="5"
- width="105">
- <button.commit_callback
- function="WMap.Clear" />
- </button>-->
<button
enabled="false"
follows="right|bottom"
diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml
index 1e10467148..1993af6730 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory.xml
@@ -516,7 +516,7 @@
layout="topleft"
name="Animation Separator" />
<menu_item_call
- label="Play in World"
+ label="Play Inworld"
layout="topleft"
name="Animation Play">
<menu_item_call.on_click
diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml
index bbe6892b27..ba74104594 100644
--- a/indra/newview/skins/default/xui/en/menu_login.xml
+++ b/indra/newview/skins/default/xui/en/menu_login.xml
@@ -60,6 +60,7 @@
</menu_item_call>
</menu>
<menu
+ visible="false"
create_jump_keys="true"
label="Debug"
name="Debug"
diff --git a/indra/newview/skins/default/xui/en/menu_object.xml b/indra/newview/skins/default/xui/en/menu_object.xml
index 35518cd13b..56028bb2e5 100644
--- a/indra/newview/skins/default/xui/en/menu_object.xml
+++ b/indra/newview/skins/default/xui/en/menu_object.xml
@@ -87,16 +87,6 @@
label="Remove &gt;"
name="Remove">
<menu_item_call
- enabled="false"
- label="Take"
- name="Pie Object Take">
- <menu_item_call.on_click
- function="Tools.BuyOrTake" />
- <menu_item_call.on_enable
- function="Tools.EnableBuyOrTake"
- parameter="Buy,Take" />
- </menu_item_call>
- <menu_item_call
enabled="false"
label="Report Abuse"
name="Report Abuse...">
@@ -134,6 +124,16 @@
</menu_item_call>
</context_menu>
<menu_item_separator layout="topleft" />
+ <menu_item_call
+ enabled="false"
+ label="Take"
+ name="Pie Object Take">
+ <menu_item_call.on_click
+ function="Tools.BuyOrTake" />
+ <menu_item_call.on_enable
+ function="Tools.EnableBuyOrTake"
+ parameter="Buy,Take" />
+ </menu_item_call>
<menu_item_call
enabled="false"
label="Take Copy"
diff --git a/indra/newview/skins/default/xui/en/menu_participant_list.xml b/indra/newview/skins/default/xui/en/menu_participant_list.xml
index 805ffbae66..d03a7e3d41 100644
--- a/indra/newview/skins/default/xui/en/menu_participant_list.xml
+++ b/indra/newview/skins/default/xui/en/menu_participant_list.xml
@@ -78,6 +78,9 @@
name="Pay">
<menu_item_call.on_click
function="Avatar.Pay" />
+ <menu_item_call.on_enable
+ function="ParticipantList.EnableItem"
+ parameter="can_pay" />
</menu_item_call>
<menu_item_separator
layout="topleft" />
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index a98a049c17..7a4f63bfe4 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -662,6 +662,18 @@
<menu_item_call.on_enable
function="Tools.EnableUnlink" />
</menu_item_call>
+ <menu_item_check
+ label="Edit Linked Parts"
+ layout="topleft"
+ name="Edit Linked Parts">
+ <menu_item_check.on_check
+ control="EditLinkedParts" />
+ <menu_item_check.on_click
+ function="Tools.EditLinkedParts"
+ parameter="EditLinkedParts" />
+ <menu_item_check.on_enable
+ function="Tools.EnableToolNotPie" />
+ </menu_item_check>
<menu_item_separator
layout="topleft" />
<menu_item_call
@@ -799,18 +811,6 @@
layout="topleft"
name="Options"
tear_off="true">
- <menu_item_check
- label="Edit Linked Parts"
- layout="topleft"
- name="Edit Linked Parts">
- <menu_item_check.on_check
- control="EditLinkedParts" />
- <menu_item_check.on_click
- function="Tools.EditLinkedParts"
- parameter="EditLinkedParts" />
- <menu_item_check.on_enable
- function="Tools.EnableToolNotPie" />
- </menu_item_check>
<menu_item_call
label="Set Default Upload Permissions"
layout="topleft"
@@ -819,10 +819,10 @@
function="Floater.Toggle"
parameter="perm_prefs" />
</menu_item_call>
- <menu_item_check
- label="Show Advanced Permissions"
- layout="topleft"
- name="DebugPermissions">
+ <menu_item_check
+ label="Show Advanced Permissions"
+ layout="topleft"
+ name="DebugPermissions">
<menu_item_check.on_check
function="CheckControl"
parameter="DebugPermissions" />
@@ -832,13 +832,7 @@
</menu_item_check>
<menu_item_separator
layout="topleft" />
- <menu
- create_jump_keys="true"
- label="Selection"
- layout="topleft"
- name="Selection"
- tear_off="true">
- <menu_item_check
+ <menu_item_check
label="Select Only My Objects"
layout="topleft"
name="Select Only My Objects">
@@ -866,14 +860,9 @@
control="RectangleSelectInclusive" />
<menu_item_check.on_click
function="Tools.SelectBySurrounding" />
- </menu_item_check>
- </menu>
- <menu
- create_jump_keys="true"
- label="Show"
- layout="topleft"
- name="Show"
- tear_off="true">
+ </menu_item_check>
+ <menu_item_separator
+ layout="topleft" />
<menu_item_check
label="Show Hidden Selection"
layout="topleft"
@@ -902,13 +891,8 @@
function="ToggleControl"
parameter="ShowSelectionBeam" />
</menu_item_check>
- </menu>
- <menu
- create_jump_keys="true"
- label="Grid"
- layout="topleft"
- name="Grid"
- tear_off="true">
+ <menu_item_separator
+ layout="topleft" />
<menu_item_check
label="Snap to Grid"
layout="topleft"
@@ -953,7 +937,6 @@
<menu_item_call.on_enable
function="Tools.EnableToolNotPie" />
</menu_item_call>
- </menu>
</menu>
<menu
create_jump_keys="true"
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 39c4923f12..89d632c4c6 100644
--- a/indra/newview/skins/default/xui/en/panel_chat_header.xml
+++ b/indra/newview/skins/default/xui/en/panel_chat_header.xml
@@ -21,19 +21,20 @@
width="18" />
<text_editor
allow_scroll="false"
- v_pad = "0"
+ v_pad = "7"
read_only = "true"
follows="left|right"
font.style="BOLD"
- height="12"
+ height="24"
layout="topleft"
left_pad="5"
right="-120"
name="user_name"
text_color="white"
bg_readonly_color="black"
- top="8"
+ top="0"
use_ellipses="true"
+ valign="bottom"
value="Ericag Vader" />
<text
font="SansSerifSmall"
diff --git a/indra/newview/skins/default/xui/en/panel_classified_info.xml b/indra/newview/skins/default/xui/en/panel_classified_info.xml
index 677bdbc3d2..31719aad20 100644
--- a/indra/newview/skins/default/xui/en/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_classified_info.xml
@@ -18,6 +18,10 @@
name="type_pg">
General Content
</panel.string>
+ <panel.string
+ name="l$_price">
+ L$[PRICE]
+ </panel.string>
<button
follows="top|right"
height="23"
@@ -71,8 +75,11 @@
name="classified_snapshot"
top="20"
width="290" />
- <text
+ <text_editor
+ allow_scroll="false"
+ bg_visible="false"
follows="left|top|right"
+ h_pad="0"
height="35"
width="290"
layout="topleft"
@@ -81,35 +88,53 @@
left="10"
top_pad="10"
name="classified_name"
+ read_only="true"
text_color="white"
+ v_pad="0"
value="[name]"
use_ellipses="true" />
- <text
+ <text_editor
+ allow_scroll="false"
+ bg_visible="false"
follows="left|top"
+ h_pad="0"
height="25"
layout="topleft"
left="10"
name="classified_location"
+ read_only="true"
width="290"
word_wrap="true"
+ v_pad="0"
value="[loading...]" />
- <text
+ <text_editor
+ allow_scroll="false"
+ bg_visible="false"
follows="left|top|right"
+ h_pad="0"
height="18"
layout="topleft"
left="10"
name="content_type"
+ read_only="true"
width="290"
top_pad="5"
+ v_pad="0"
value="[content type]" />
- <text
+ <text_editor
+ allow_html="true"
+ allow_scroll="false"
+ bg_visible="false"
follows="left|top|right"
+ h_pad="0"
height="18"
layout="topleft"
left="10"
name="category"
+ read_only="true"
width="290"
top_pad="5"
+ v_pad="0"
value="[category]" />
<check_box
enabled="false"
@@ -119,26 +144,37 @@
left="10"
name="auto_renew"
top_pad="5"
+ v_pad="0"
width="290" />
- <text
+ <text_editor
+ allow_scroll="false"
+ bg_visible="false"
follows="left|top"
+ h_pad="0"
halign="left"
height="16"
layout="topleft"
left="10"
name="price_for_listing"
+ read_only="true"
top_pad="5"
tool_tip="Price for listing."
- width="105">
- L$[PRICE]
- </text>
- <text
+ v_pad="0"
+ width="105" />
+ <text_editor
+ allow_html="true"
+ allow_scroll="false"
+ bg_visible="false"
follows="left|top|right"
+ h_pad="0"
height="200"
layout="topleft"
left="10"
+ max_length="1023"
name="classified_desc"
+ read_only="true"
width="290"
+ v_pad="0"
value="[description]"
word_wrap="true" />
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
index 8268937e7f..2a2199fc87 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
@@ -60,32 +60,33 @@
<scroll_container
color="DkGray2"
follows="all"
- height="505"
+ height="493"
min_height="300"
layout="topleft"
- left="0"
+ left="9"
+ width="290"
name="profile_scroll"
reserve_scroll_corner="true"
opaque="true"
- top="0">
+ top="10">
<panel
name="scroll_content_panel"
follows="left|top|right"
layout="topleft"
top="0"
- height="505"
+ height="493"
min_height="300"
left="0"
- width="313">
+ width="290">
<panel
name="data_panel"
follows="left|top|right"
layout="topleft"
top="0"
- height="505"
+ height="493"
min_height="300"
left="0"
- width="313">
+ width="290">
<panel
name="lifes_images_panel"
follows="left|top|right"
@@ -93,7 +94,7 @@
layout="topleft"
top="0"
left="0"
- width="285">
+ width="290">
<panel
follows="left|top"
height="117"
@@ -101,25 +102,26 @@
left="10"
name="second_life_image_panel"
top="0"
- width="285">
+ width="280">
<text
follows="left|top|right"
font.style="BOLD"
height="15"
layout="topleft"
left="0"
+ top="10"
name="second_life_photo_title_text"
text_color="white"
value="[SECOND_LIFE]:"
- width="170" />
+ width="100" />
<texture_picker
allow_no_texture="true"
default_image_name="None"
enabled="false"
follows="top|left"
- height="117"
+ height="124"
layout="topleft"
- left="0"
+ left="1"
name="2nd_life_pic"
top_pad="0"
width="102" />
@@ -140,13 +142,13 @@
length="1"
follows="left|top|right"
font="SansSerifSmall"
- height="100"
+ height="102"
layout="topleft"
- left="120"
- top="18"
+ left="123"
+ top="25"
max_length="512"
name="sl_description_edit"
- width="173"
+ width="157"
word_wrap="true">
</text_editor>
<panel
@@ -163,18 +165,19 @@
height="15"
layout="topleft"
left="0"
+ top_pad="10"
name="real_world_photo_title_text"
text_color="white"
value="Real World:"
- width="173" />
+ width="100" />
<texture_picker
allow_no_texture="true"
default_image_name="None"
enabled="false"
follows="top|left"
- height="117"
+ height="124"
layout="topleft"
- left="0"
+ left="1"
name="real_world_pic"
top_pad="0"
width="102" />
@@ -194,13 +197,13 @@
length="1"
follows="left|top|right"
font="SansSerifSmall"
- height="100"
+ height="102"
layout="topleft"
- left="120"
+ left="123"
max_length="512"
- top="142"
+ top="157"
name="fl_description_edit"
- width="173"
+ width="157"
word_wrap="true">
</text_editor>
<text
@@ -215,7 +218,7 @@
name="title_homepage_text"
text_color="white"
top_pad="10"
- width="285">
+ width="100">
Homepage:
</text>
<line_editor
@@ -227,19 +230,19 @@
top_pad="0"
value="http://"
name="homepage_edit"
- width="285">
+ width="270">
</line_editor>
<check_box
follows="left|top"
font="SansSerifSmall"
label="Show me in Search results"
layout="topleft"
- left="10"
+ left="8"
name="show_in_search_checkbox"
height="15"
text_enabled_color="white"
- top_pad="10"
- width="240" />
+ top_pad="12"
+ width="100" />
<text
follows="left|top"
font="SansSerifSmall"
@@ -249,9 +252,24 @@
left="10"
name="title_acc_status_text"
text_color="white"
- top_pad="5"
+ top_pad="10"
value="My Account:"
- width="285" />
+ width="100" />
+ <text_editor
+ allow_scroll="false"
+ bg_visible="false"
+ follows="left|top|right"
+ h_pad="0"
+ height="28"
+ layout="topleft"
+ left="10"
+ name="acc_status_text"
+ read_only="true"
+ top_pad="5"
+ v_pad="0"
+ value="Resident. No payment info on file."
+ width="200"
+ word_wrap="true" />
<text
type="string"
follows="left|top"
@@ -261,17 +279,7 @@
left="10"
name="my_account_link"
value="[[URL] Go to My Dashboard]"
- width="285" />
- <text
- follows="left|top|right"
- height="20"
- layout="topleft"
- left="10"
- name="acc_status_text"
- top_pad="5"
- value="Resident. No payment info on file."
- width="285"
- word_wrap="true" />
+ width="200" />
<text
follows="left|top"
font="SansSerifSmall"
@@ -281,26 +289,16 @@
left="10"
name="title_partner_text"
text_color="white"
- top_pad="0"
+ top_pad="10"
value="My Partner:"
width="150" />
- <text
- follows="left|top"
- height="15"
- halign="right"
- layout="topleft"
- left_pad="10"
- right="-10"
- name="partner_edit_link"
- value="[[URL] Edit]"
- width="50" />
<panel
follows="left|top|right"
height="15"
layout="topleft"
left="10"
name="partner_data_panel"
- width="285">
+ width="200">
<name_box
follows="left|top|right"
height="30"
@@ -310,36 +308,43 @@
link="true"
name="partner_text"
top="0"
- width="285"
+ width="200"
word_wrap="true" />
</panel>
+ <text
+ follows="left|top"
+ height="15"
+ layout="topleft"
+ left="10"
+ name="partner_edit_link"
+ value="[[URL] Edit]"
+ width="50" />
</panel>
</panel>
</scroll_container>
<panel
follows="bottom|left"
- height="20"
- left="10"
+ height="28"
+ left="0"
name="profile_me_buttons_panel"
- top_pad="5"
- width="303">
+ top_pad="0"
+ width="313">
<button
follows="bottom|left"
- height="19"
+ height="23"
label="Save Changes"
layout="topleft"
- left="0"
+ left="9"
name="save_btn"
- top="0"
- width="130" />
+ top="5"
+ width="152" />
<button
follows="bottom|left"
- height="19"
+ height="23"
label="Cancel"
layout="topleft"
- left_pad="10"
+ left_pad="4"
name="cancel_btn"
- right="-1"
- width="130" />
+ width="152" />
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_general.xml b/indra/newview/skins/default/xui/en/panel_group_general.xml
index b903032ed5..618167181f 100644
--- a/indra/newview/skins/default/xui/en/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_general.xml
@@ -1,12 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
- follows="all"
- height="395"
label="General"
+ follows="all"
+ height="604"
+ width="313"
class="panel_group_general"
- layout="topleft"
- name="general_tab"
- width="323">
+ name="general_tab">
<panel.string
name="help_text">
The General tab contains general information about this group, a list of members, general Group Preferences and member options.
@@ -25,12 +24,14 @@ Hover your mouse over the options for more help.
type="string"
follows="left|top|right"
left="5"
- height="60"
+ height="150"
layout="topleft"
max_length="511"
name="charter"
top="5"
right="-1"
+ bg_readonly_color="DkGray2"
+ text_readonly_color="White"
word_wrap="true">
Group Charter
</text_editor>
@@ -38,8 +39,8 @@ Hover your mouse over the options for more help.
column_padding="0"
draw_heading="true"
follows="left|top|right"
- heading_height="20"
- height="156"
+ heading_height="23"
+ height="200"
layout="topleft"
left="0"
name="visible_members"
@@ -63,17 +64,29 @@ Hover your mouse over the options for more help.
height="12"
layout="left|top|right"
left="5"
+ text_color="EmphasisColor"
+ name="my_group_settngs_label"
+ top_pad="10"
+ width="300">
+ Me
+ </text>
+ <text
+ follows="left|top|right"
+ type="string"
+ height="12"
+ layout="left|top|right"
+ left="10"
name="active_title_label"
top_pad="5"
width="300">
- My Title
+ My title:
</text>
<combo_box
follows="left|top|right"
- height="20"
+ height="23"
layout="topleft"
- left="5"
- right="-5"
+ left="10"
+ right="-5"
name="active_title"
tool_tip="Sets the title that appears in your avatar&apos;s name tag when this group is active."
top_pad="2" />
@@ -82,7 +95,7 @@ Hover your mouse over the options for more help.
font="SansSerifSmall"
label="Receive group notices"
layout="topleft"
- left="5"
+ left="10"
name="receive_notices"
tool_tip="Sets whether you want to receive Notices from this group. Uncheck this box if this group is spamming you."
top_pad="5"
@@ -91,36 +104,46 @@ Hover your mouse over the options for more help.
height="16"
label="Show in my profile"
layout="topleft"
- left="5"
+ left="10"
name="list_groups_in_profile"
tool_tip="Sets whether you want to show this group in your profile"
top_pad="5"
width="295" />
- <panel
+ <panel
background_visible="true"
bevel_style="in"
border="true"
bg_alpha_color="FloaterUnfocusBorderColor"
follows="left|top|right"
- height="88"
+ height="140"
+ width="313"
layout="topleft"
- left="2"
- right="-1"
+ left="0"
name="preferences_container"
- top_pad="2">
+ top_pad="5">
+ <text
+ follows="left|top|right"
+ type="string"
+ height="12"
+ layout="left|top|right"
+ left="5"
+ text_color="EmphasisColor"
+ name="group_settngs_label"
+ width="300">
+ Group
+ </text>
<check_box
follows="right|top|left"
height="16"
- label="Open enrollment"
+ label="Anyone can join"
layout="topleft"
left="10"
name="open_enrollement"
tool_tip="Sets whether this group allows new members to join without being invited."
- top_pad="5"
width="90" />
<check_box
height="16"
- label="Enrollment fee"
+ label="Cost to join"
layout="topleft"
left_delta="0"
name="check_enrollment_fee"
@@ -129,27 +152,26 @@ Hover your mouse over the options for more help.
width="300" />
<spinner
decimal_digits="0"
- follows="left|top|right"
+ follows="left|top"
halign="left"
- height="16"
+ height="23"
increment="1"
label_width="15"
label="L$"
layout="topleft"
- right="-30"
max_val="99999"
- left_pad="0"
+ left="30"
name="spin_enrollment_fee"
tool_tip="New members must pay this fee to join the group when Enrollment Fee is checked."
- width="80" />
- <combo_box
- follows="left|top|right"
- height="20"
+ width="170" />
+ <combo_box
+ follows="left|top"
+ height="23"
layout="topleft"
left="10"
name="group_mature_check"
tool_tip="Sets whether your group contains information rated as Moderate"
- top_pad="0"
+ top_pad="4"
width="190">
<combo_box.item
label="General Content"
@@ -161,7 +183,7 @@ Hover your mouse over the options for more help.
value="Mature" />
</combo_box>
<check_box
- follows="left|top|right"
+ follows="left|top"
height="16"
initial_value="true"
label="Show in search"
@@ -171,5 +193,6 @@ Hover your mouse over the options for more help.
tool_tip="Let people see this group in search results"
top_pad="4"
width="300" />
+
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
index 1968d96205..9727c54c6b 100644
--- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
@@ -2,17 +2,17 @@
<panel
background_visible="true"
follows="all"
- height="635"
- label="Group Info"
+ height="570"
+ label="Group Profile"
layout="topleft"
- min_height="460"
+ min_height="350"
left="0"
top="20"
name="GroupInfo"
- width="323">
+ width="313">
<panel.string
name="default_needs_apply_text">
- There are unsaved changes to the current tab
+ There are unsaved changes
</panel.string>
<panel.string
name="want_apply_text">
@@ -26,6 +26,14 @@ background_visible="true"
name="group_join_free">
Free
</panel.string>
+ <panel
+ name="group_info_top"
+ follows="top|left"
+ top="0"
+ left="0"
+ height="129"
+ width="313"
+ layout="topleft">
<button
follows="top|right"
height="23"
@@ -37,18 +45,19 @@ background_visible="true"
top="2"
width="23" />
<text
- allow_html="false"
- follows="top|left|right"
- font="SansSerifHugeBold"
- height="26"
layout="topleft"
- left_pad="10"
name="group_name"
- text_color="white"
- top="0"
value="(Loading...)"
+ font="SansSerifHuge"
+ height="20"
+ left_pad="5"
+ text_color="white"
+ top="3"
use_ellipses="true"
- width="300" />
+ width="270"
+ follows="top|left"
+ word_wrap="true"
+ mouse_opaque="false"/>
<line_editor
follows="left|top"
font="SansSerif"
@@ -58,7 +67,7 @@ background_visible="true"
max_length="35"
name="group_name_editor"
top_delta="5"
- width="250"
+ width="270"
height="20"
visible="false" />
<texture_picker
@@ -66,22 +75,25 @@ background_visible="true"
height="113"
label=""
layout="topleft"
- left="20"
+ left="10"
name="insignia"
no_commit_on_selection="true"
tool_tip="Click to choose a picture"
top_pad="5"
width="100" />
<text
+ font="SansSerifSmall"
+ text_color="White_50"
+ width="190"
+ follows="top|left"
+ layout="topleft"
+ mouse_opaque="false"
type="string"
- follows="left|top"
height="16"
length="1"
- layout="topleft"
left_pad="10"
name="prepend_founded_by"
- top_delta="0"
- width="140">
+ top_delta="0">
Founder:
</text>
<name_box
@@ -94,9 +106,9 @@ background_visible="true"
name="founder_name"
top_pad="2"
use_ellipses="true"
- width="140" />
+ width="190" />
<text
- font="SansSerifBig"
+ font="SansSerifMedium"
text_color="EmphasisColor"
type="string"
follows="left|top"
@@ -106,7 +118,7 @@ background_visible="true"
name="join_cost_text"
top_pad="10"
visible="true"
- width="140">
+ width="190">
Free
</text>
<button
@@ -118,17 +130,31 @@ background_visible="true"
name="btn_join"
visible="true"
width="120" />
+ </panel>
+ <layout_stack
+ name="layout"
+ orientation="vertical"
+ follows="all"
+ left="0"
+ top_pad="0"
+ height="437"
+ width="313"
+ border_size="0">
+ <layout_panel
+ name="group_accordions"
+ follows="all"
+ layout="topleft"
+ auto_resize="true"
+ >
<accordion
+ left="0"
+ top="0"
single_expansion="true"
follows="all"
- height="478"
layout="topleft"
- left="0"
- name="groups_accordion"
- top_pad="10"
- width="323">
+ name="groups_accordion">
<accordion_tab
- expanded="false"
+ expanded="true"
layout="topleft"
name="group_general_tab"
title="General">
@@ -138,12 +164,13 @@ background_visible="true"
filename="panel_group_general.xml"
layout="topleft"
left="0"
+ follows="all"
help_topic="group_general_tab"
name="group_general_tab_panel"
top="0" />
</accordion_tab>
<accordion_tab
- expanded="true"
+ expanded="false"
layout="topleft"
name="group_roles_tab"
title="Roles">
@@ -186,28 +213,37 @@ background_visible="true"
top="0" />
</accordion_tab>
</accordion>
- <panel
+ </layout_panel>
+ <layout_panel
+ height="25"
+ layout="topleft"
+ auto_resize="false"
+ left="0"
name="button_row"
- height="23"
follows="bottom|left"
- top_pad="-1"
- width="323">
+ width="313">
<button
- follows="top|left"
- height="22"
+ follows="bottom|left"
+ height="23"
image_overlay="Refresh_Off"
layout="topleft"
- left="10"
+ left="5"
+ top="0"
name="btn_refresh"
width="23" />
<button
- height="22"
- label="Create"
- label_selected="New group"
+ follows="bottom|left"
+ height="18"
+ image_selected="AddItem_Press"
+ image_unselected="AddItem_Off"
+ image_disabled="AddItem_Disabled"
+ layout="topleft"
+ left_pad="2"
+ top_delta="3"
name="btn_create"
- left_pad="10"
- visible="false"
- width="100" />
+ visible="true"
+ tool_tip="Create a new Group"
+ width="18" />
<!-- <button
left_pad="10"
height="20"
@@ -217,28 +253,30 @@ background_visible="true"
visible="false"
width="65" />-->
<button
- follows="bottom|right"
- label="Group Chat"
+ follows="bottom|left"
+ label="Chat"
name="btn_chat"
- right="-184"
left_pad="2"
- height="22"
- width="85" />
+ height="23"
+ top_delta="-3"
+ width="60" />
<button
- follows="bottom|right"
- label="Group Call"
+ follows="bottom|left"
+ left_pad="2"
+ height="23"
name="btn_call"
- right="-97"
- left_pad="2"
- height="22"
- width="85" />
+ label="Group Call"
+ layout="topleft"
+ tool_tip="Call this group"
+ width="95" />
<button
- height="22"
+ follows="bottom|left"
+ height="23"
label="Save"
label_selected="Save"
name="btn_apply"
- left_pad="10"
- right="-10"
+ left_pad="2"
width="85" />
- </panel>
+ </layout_panel>
+ </layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_land_money.xml b/indra/newview/skins/default/xui/en/panel_group_land_money.xml
index db156f7877..38b0f234d5 100644
--- a/indra/newview/skins/default/xui/en/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_land_money.xml
@@ -2,13 +2,13 @@
<panel
border="false"
follows="all"
- height="420"
+ height="500"
label="Land &amp; L$"
layout="topleft"
left="0"
name="land_money_tab"
top="0"
- width="310">
+ width="313">
<panel.string
name="help_text">
A warning appears until the Total Land in Use is less than or = to the Total Contribution.
@@ -41,16 +41,24 @@
width="260">
Group Owned Land
</text> -->
+ <panel
+ name="layout_panel_landmoney"
+ follows="top|left|right"
+ left="0"
+ right="-1"
+ height="250"
+ width="313"
+ >
<scroll_list
draw_heading="true"
follows="top|left|right"
- heading_height="20"
height="130"
layout="topleft"
left="0"
+ right="-1"
top="0"
name="group_parcel_list"
- width="310">
+ width="313">
<scroll_list.columns
label="Parcel"
name="name"
@@ -67,16 +75,12 @@
label="Area"
name="area"
width="50" />
- <scroll_list.columns
- label=""
- name="hidden"
- width="-1" />
</scroll_list>
<text
type="string"
follows="left|top"
halign="right"
- height="15"
+ height="16"
layout="topleft"
left="0"
name="total_contributed_land_label"
@@ -87,30 +91,30 @@
text_color="EmphasisColor"
type="string"
follows="left|top"
- height="15"
+ height="16"
layout="topleft"
left_pad="5"
name="total_contributed_land_value"
top_delta="0"
- width="120">
+ width="90">
[AREA] m²
</text>
<button
follows="top"
- height="20"
+ height="23"
label="Map"
label_selected="Map"
layout="topleft"
name="map_button"
- right="-5"
+ top_delta="-4"
left_pad="0"
- width="95"
+ width="60"
enabled="false" />
<text
type="string"
follows="left|top"
halign="right"
- height="15"
+ height="16"
layout="topleft"
left="0"
name="total_land_in_use_label"
@@ -122,7 +126,7 @@
text_color="EmphasisColor"
type="string"
follows="left|top"
- height="15"
+ height="16"
layout="topleft"
left_pad="5"
name="total_land_in_use_value"
@@ -134,7 +138,7 @@
type="string"
follows="left|top"
halign="right"
- height="15"
+ height="16"
layout="topleft"
left="0"
name="land_available_label"
@@ -146,7 +150,7 @@
text_color="EmphasisColor"
type="string"
follows="left|top"
- height="15"
+ height="16"
layout="topleft"
left_pad="5"
name="land_available_value"
@@ -158,7 +162,7 @@
type="string"
follows="left|top"
halign="right"
- height="15"
+ height="16"
layout="topleft"
left="0"
name="your_contribution_label"
@@ -190,21 +194,22 @@
<text
type="string"
follows="left|top"
- halign="right"
- height="12"
+ halign="left"
+ height="16"
layout="topleft"
left="140"
name="your_contribution_max_value"
top_pad="2"
- width="95">
+ width="170">
([AMOUNT] max)
</text>
<icon
- height="18"
- image_name="BuyArrow_Over"
+ height="16"
+ image_name="Parcel_Exp_Color"
layout="topleft"
left="75"
name="group_over_limit_icon"
+ color="Green"
top_pad="0"
visible="true"
width="18" />
@@ -212,12 +217,11 @@
follows="left|top"
type="string"
word_wrap="true"
- font="SansSerifSmall"
height="20"
layout="topleft"
left_pad="2"
name="group_over_limit_text"
- text_color="EmphasisColor"
+ text_color="ColorPaletteEntry29"
top_delta="0"
width="213">
More land credits are needed to support land in use
@@ -235,39 +239,39 @@
width="100">
Group L$
</text>
+ </panel>
<tab_container
follows="all"
- height="180"
+ height="230"
halign="center"
layout="topleft"
left="0"
+ right="-1"
name="group_money_tab_container"
tab_position="top"
- tab_height="20"
top_pad="2"
- tab_min_width="75"
- width="310">
+ tab_min_width="90"
+ width="313">
<panel
border="false"
follows="all"
- height="180"
label="PLANNING"
layout="topleft"
left="0"
help_topic="group_money_planning_tab"
name="group_money_planning_tab"
- top="5"
- width="300">
+ top="0"
+ width="313">
<text_editor
type="string"
follows="all"
- height="140"
+ height="200"
layout="topleft"
left="0"
max_length="4096"
name="group_money_planning_text"
top="2"
- width="300"
+ width="313"
word_wrap="true">
Loading...
</text_editor>
@@ -275,92 +279,88 @@
<panel
border="false"
follows="all"
- height="180"
label="DETAILS"
layout="topleft"
left="0"
help_topic="group_money_details_tab"
name="group_money_details_tab"
top="0"
- width="300">
+ width="313">
<text_editor
type="string"
follows="all"
- height="140"
+ height="185"
layout="topleft"
left="0"
max_length="4096"
name="group_money_details_text"
top="2"
- width="300"
+ width="313"
word_wrap="true">
Loading...
</text_editor>
-
- <button
- height="20"
- image_overlay="Arrow_Left_Off"
- layout="topleft"
- left="5"
- name="earlier_details_button"
- tool_tip="Go back in time"
- top_pad="10"
- width="25" />
<button
- height="20"
- image_overlay="Arrow_Right_Off"
- layout="topleft"
- left_pad="5"
- name="later_details_button"
- tool_tip="Go forward in time"
- top_delta="0"
- width="25" />
-
-
- </panel>
+ follows="left|top"
+ height="18"
+ image_overlay="Arrow_Left_Off"
+ layout="topleft"
+ name="earlier_details_button"
+ tool_tip="Back"
+ left="200"
+ top_pad="0"
+ width="25" />
+ <button
+ follows="left|top"
+ height="18"
+ image_overlay="Arrow_Right_Off"
+ layout="topleft"
+ name="later_details_button"
+ tool_tip="Next"
+ left_pad="15"
+ width="25" />
+ </panel>
<panel
border="false"
follows="all"
- height="180"
label="SALES"
layout="topleft"
- left_delta="0"
+ left="0"
help_topic="group_money_sales_tab"
- mouse_opaque="false"
name="group_money_sales_tab"
top="0"
- width="300">
+ width="313">
<text_editor
type="string"
follows="all"
- height="130"
+ height="185"
layout="topleft"
left="0"
max_length="4096"
name="group_money_sales_text"
top="2"
- width="300"
+ width="313"
word_wrap="true">
Loading...
</text_editor>
- <button
- height="20"
- image_overlay="Arrow_Left_Off"
- layout="topleft"
- left="5"
- name="earlier_sales_button"
- tool_tip="Go back in time"
- top_pad="10"
- width="25" />
- <button
- height="20"
- image_overlay="Arrow_Right_Off"
- layout="topleft"
- left_pad="5"
- name="later_sales_button"
- tool_tip="Go forward in time"
- top_delta="0"
- width="25" />
+ <button
+ follows="left|top"
+ height="18"
+ image_overlay="Arrow_Left_Off"
+ layout="topleft"
+ name="earlier_sales_button"
+ tool_tip="Back"
+ left="200"
+ top_pad="0"
+ width="25" />
+ <button
+ follows="left|top"
+ height="18"
+ image_overlay="Arrow_Right_Off"
+ layout="topleft"
+ left_pad="15"
+ name="later_sales_button"
+ tool_tip="Next"
+ width="25" />
</panel>
</tab_container>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_notices.xml b/indra/newview/skins/default/xui/en/panel_group_notices.xml
index 0d9c2c2162..5f46ad7860 100644
--- a/indra/newview/skins/default/xui/en/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_notices.xml
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
follows="all"
- height="463"
+ height="530"
label="Notices"
layout="topleft"
left="0"
name="notices_tab"
top="0"
- width="310">
+ width="313">
<panel.string
name="help_text">
Notices let you send a message and an optionally attached item.
@@ -23,26 +23,28 @@ You can turn off Notices on the General tab.
type="string"
word_wrap="true"
height="24"
- halign="right"
+ halign="left"
layout="topleft"
+ text_color="White_50"
left="5"
name="lbl2"
+ right="-1"
top="5"
width="300">
Notices are kept for 14 days.
Maximum 200 per group daily
</text>
<scroll_list
- follows="left|top"
+ follows="left|top|right"
column_padding="0"
draw_heading="true"
- heading_height="16"
- height="125"
+ height="175"
layout="topleft"
- left="2"
+ left="0"
+ right="-1"
name="notice_list"
top_pad="0"
- width="300">
+ width="313">
<scroll_list.columns
label=""
name="icon"
@@ -71,8 +73,8 @@ Maximum 200 per group daily
visible="false">
None found
</text>
- <button
- follows="bottom|left"
+ <button
+ follows="top|left"
height="18"
image_selected="AddItem_Press"
image_unselected="AddItem_Off"
@@ -85,24 +87,25 @@ Maximum 200 per group daily
width="18" />
<button
follows="top|left"
- height="22"
+ height="23"
image_overlay="Refresh_Off"
layout="topleft"
name="refresh_notices"
- right="-5"
+ left_pad="230"
tool_tip="Refresh list of notices"
top_delta="0"
width="23" />
<panel
- follows="left|top"
+ follows="left|top|right"
height="280"
label="Create New Notice"
layout="topleft"
left="0"
+ right="-1"
top_pad="0"
visible="true"
name="panel_create_new_notice"
- width="300">
+ width="313">
<text
follows="left|top"
type="string"
@@ -204,13 +207,16 @@ Maximum 200 per group daily
width="72" />
<button
follows="left|top"
- height="23"
- label="Remove"
layout="topleft"
- left="70"
+ left="140"
name="remove_attachment"
- top_delta="45"
- width="90" />
+ top_delta="50"
+ height="18"
+ image_selected="TrashItem_Press"
+ image_unselected="TrashItem_Off"
+ image_disabled="TrashItem_Disabled"
+ tool_tip="Remove attachment from your notification"
+ width="18" />
<button
follows="left|top"
height="23"
@@ -231,18 +237,19 @@ Maximum 200 per group daily
width="280" />
</panel>
<panel
- follows="left|top"
+ follows="left|top|right"
height="280"
label="View Past Notice"
layout="topleft"
left="0"
+ right="-1"
visible="false"
name="panel_view_past_notice"
- top="180"
- width="300">
+ top="230"
+ width="313">
<text
type="string"
- font="SansSerifBig"
+ font="SansSerifMedium"
height="16"
layout="topleft"
left="10"
@@ -280,7 +287,7 @@ Maximum 200 per group daily
border_style="line"
border_thickness="1"
enabled="false"
- height="16"
+ height="20"
layout="topleft"
left_pad="3"
max_length="63"
@@ -301,40 +308,35 @@ Maximum 200 per group daily
Message:
</text>
<text_editor
+ follows="top|left|right"
enabled="false"
height="160"
layout="topleft"
- left="10"
+ left="0"
+ right="-1"
max_length="511"
name="view_message"
- top_delta="-35"
- width="285"
+ top_delta="-40"
+ width="313"
word_wrap="true" />
<line_editor
enabled="false"
- height="16"
+ height="20"
layout="topleft"
- left_delta="0"
+ left="5"
max_length="63"
mouse_opaque="false"
name="view_inventory_name"
top_pad="8"
- width="285" />
- <icon
- height="16"
- layout="topleft"
- left_delta="0"
- name="view_inv_icon"
- top_delta="0"
- width="16" />
+ width="250"/>
<button
follows="left|top"
height="23"
- label="Open attachment"
+ label="Open Attachment"
layout="topleft"
- right="-10"
+ left="5"
name="open_attachment"
top_pad="5"
- width="135" />
+ width="180" />
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_roles.xml b/indra/newview/skins/default/xui/en/panel_group_roles.xml
index 5f6b670cd2..25a0213bde 100644
--- a/indra/newview/skins/default/xui/en/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml
@@ -1,16 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
follows="all"
- height="552"
+ height="680"
label="Members &amp; Roles"
layout="topleft"
left="0"
top="0"
name="roles_tab"
- width="310">
+ width="313">
<panel.string
name="default_needs_apply_text">
- There are unsaved changes to the current tab
+ There are unsaved changes
</panel.string>
<panel.string
name="want_apply_text">
@@ -20,17 +20,18 @@
name="help_text" />
<tab_container
border="false"
- follows="left|top"
+ follows="left|top|right"
height="552"
halign="center"
layout="topleft"
left="0"
+ right="-1"
name="roles_tab_container"
tab_position="top"
- tab_height="20"
- tab_min_width="75"
+ tab_height="22"
+ tab_min_width="90"
top="0"
- width="310">
+ width="313">
<panel
border="false"
follows="all"
@@ -38,11 +39,11 @@
label="MEMBERS"
layout="topleft"
left="0"
+ right="-1"
help_topic="roles_members_tab"
name="members_sub_tab"
tool_tip="Members"
- class="panel_group_members_subtab"
- width="310">
+ class="panel_group_members_subtab">
<panel.string
name="help_text">
You can add or remove Roles assigned to Members.
@@ -65,24 +66,23 @@ clicking on their names.
layout="topleft"
top="5"
left="5"
- width="280"
- height="20"
- follows="top"
- max_length="250"
+ right="-5"
+ height="22"
+ search_button_visible="false"
+ follows="left|top|right"
label="Filter Members"
name="filter_input" />
<name_list
- column_padding="0"
+ column_padding="2"
draw_heading="true"
- heading_height="20"
height="240"
- follows="left|top"
+ follows="left|top|right"
layout="topleft"
left="0"
+ right="-1"
multi_select="true"
name="member_list"
- top_pad="2"
- width="300">
+ top_pad="5">
<name_list.columns
label="Member"
name="name"
@@ -94,33 +94,33 @@ clicking on their names.
<name_list.columns
label="Status"
name="online"
- relative_width="0.15" />
+ relative_width="0.14" />
</name_list>
<button
- height="20"
- follows="bottom|left"
+ height="23"
+ follows="top|left"
label="Invite"
- left="5"
+ left="0"
name="member_invite"
width="100" />
<button
- height="20"
+ height="23"
label="Eject"
- left_pad="5"
- right="-5"
+ follows="top|left"
+ left_pad="10"
name="member_eject"
width="100" />
</panel>
<panel
border="false"
- height="230"
+ height="303"
label="ROLES"
layout="topleft"
left="0"
+ right="-1"
help_topic="roles_roles_tab"
name="roles_sub_tab"
- class="panel_group_roles_subtab"
- width="310">
+ class="panel_group_roles_subtab">
<!-- <button
enabled="false"
height="20"
@@ -157,22 +157,23 @@ including the Everyone and Owner Roles.
layout="topleft"
top="5"
left="5"
- width="280"
- height="20"
+ right="-5"
+ height="22"
+ search_button_visible="false"
follows="left|top|right"
- max_length="250"
label="Filter Roles"
name="filter_input" />
<scroll_list
column_padding="0"
draw_heading="true"
draw_stripes="false"
- follows="left|top"
- heading_height="20"
- height="170"
+ heading_height="23"
+ height="130"
layout="topleft"
search_column="1"
left="0"
+ follows="left|top|right"
+ right="-1"
name="role_list"
top_pad="2"
width="310">
@@ -190,28 +191,29 @@ including the Everyone and Owner Roles.
relative_width="0.15" />
</scroll_list>
<button
- follows="bottom|left"
- height="20"
+ follows="top|left"
+ height="23"
label="New Role"
layout="topleft"
- left="5"
+ left="0"
name="role_create"
- width="100" />
+ width="120" />
<button
- height="20"
+ height="23"
+ follows="top|left"
label="Delete Role"
layout="topleft"
- left_pad="5"
- right="-5"
+ left_pad="10"
name="role_delete"
- width="100" />
+ width="120" />
</panel>
<panel
border="false"
- height="220"
+ height="303"
label="ABILITIES"
layout="topleft"
left="0"
+ right="-1"
help_topic="roles_actions_tab"
name="actions_sub_tab"
class="panel_group_actions_subtab"
@@ -238,13 +240,12 @@ things in this group. There&apos;s a broad variety of Abilities.
layout="topleft"
top="5"
left="5"
- width="280"
- height="20"
+ right="-5"
+ height="22"
+ search_button_visible="false"
follows="left|top|right"
- max_length="250"
label="Filter Abilities"
name="filter_input" />
-
<scroll_list
column_padding="0"
draw_stripes="true"
@@ -252,6 +253,7 @@ things in this group. There&apos;s a broad variety of Abilities.
follows="left|top"
layout="topleft"
left="0"
+ right="-1"
name="action_list"
search_column="2"
tool_tip="Select an Ability to view more details"
@@ -273,35 +275,39 @@ things in this group. There&apos;s a broad variety of Abilities.
</panel>
</tab_container>
<panel
- height="252"
+ height="350"
+ background_visible="true"
+ bg_alpha_color="FloaterUnfocusBorderColor"
layout="topleft"
- follows="left|top"
+ follows="top|left|right"
left="0"
- mouse_opaque="false"
+ right="-1"
+ width="313"
+ mouse_opaque="false"
name="members_footer"
- top="300"
- visible="false"
- width="310">
+ top="325"
+ visible="false">
<text
type="string"
- height="14"
+ height="16"
layout="topleft"
follows="left|top"
- left="0"
+ left="5"
+ top="8"
+ text_color="EmphasisColor"
name="static"
- top_pad="5"
width="300">
Assigned Roles
</text>
<scroll_list
draw_stripes="true"
- follows="left|top"
- height="90"
+ follows="left|top|right"
+ height="150"
layout="topleft"
left="0"
+ right="-1"
name="member_assigned_roles"
- top_pad="0"
- width="300">
+ top_pad="0">
<scroll_list.columns
label=""
name="checkbox"
@@ -311,27 +317,29 @@ things in this group. There&apos;s a broad variety of Abilities.
name="role"
width="270" />
</scroll_list>
- <text
+ <text
type="string"
- height="14"
+ height="16"
layout="topleft"
follows="left|top"
- left="0"
- name="static2"
+ left="5"
top_pad="5"
+ text_color="EmphasisColor"
+ name="static2"
width="285">
Allowed Abilities
</text>
<scroll_list
draw_stripes="true"
- height="90"
+ follows="left|top|right"
+ height="150"
layout="topleft"
left="0"
+ right="-1"
name="member_allowed_actions"
search_column="2"
tool_tip="For details of each allowed ability see the abilities tab"
- top_pad="0"
- width="300">
+ top_pad="0">
<scroll_list.columns
label=""
name="icon"
@@ -347,30 +355,37 @@ things in this group. There&apos;s a broad variety of Abilities.
</scroll_list>
</panel>
<panel
- height="297"
+ height="550"
+ background_visible="true"
+ bg_alpha_color="FloaterUnfocusBorderColor"
layout="topleft"
+ follows="top|left|right"
left="0"
+ right="-1"
+ width="313"
+ mouse_opaque="false"
name="roles_footer"
top_delta="0"
- top="220"
- visible="false"
- width="310">
+ top="209"
+ visible="false">
<text
type="string"
- height="14"
+ height="16"
layout="topleft"
- left="0"
+ follows="left|top"
+ left="5"
+ top="5"
name="static"
- top="0"
width="300">
Role Name
</text>
<line_editor
type="string"
- follows="left|top"
height="20"
layout="topleft"
left="0"
+ follows="left|top|right"
+ right="-1"
max_length="295"
name="role_name"
top_pad="0"
@@ -378,8 +393,10 @@ things in this group. There&apos;s a broad variety of Abilities.
</line_editor>
<text
type="string"
- height="14"
+ height="16"
layout="topleft"
+ follows="left|top"
+ left="5"
name="static3"
top_pad="5"
width="300">
@@ -387,19 +404,22 @@ things in this group. There&apos;s a broad variety of Abilities.
</text>
<line_editor
type="string"
- follows="left|top"
height="20"
layout="topleft"
+ left="0"
+ follows="left|top|right"
+ right="-1"
max_length="295"
name="role_title"
top_pad="0"
width="300">
</line_editor>
- <text
+ <text
type="string"
- height="14"
+ height="16"
layout="topleft"
- left="0"
+ follows="left|top"
+ left="5"
name="static2"
top_pad="5"
width="200">
@@ -407,11 +427,12 @@ things in this group. There&apos;s a broad variety of Abilities.
</text>
<text_editor
type="string"
- halign="left"
- height="35"
layout="topleft"
left="0"
+ follows="left|top|right"
+ right="-1"
max_length="295"
+ height="35"
name="role_description"
top_pad="0"
width="300"
@@ -419,10 +440,11 @@ things in this group. There&apos;s a broad variety of Abilities.
</text_editor>
<text
type="string"
- height="14"
+ height="16"
layout="topleft"
follows="left|top"
- left="0"
+ left="5"
+ text_color="EmphasisColor"
name="static4"
top_pad="5"
width="300">
@@ -430,15 +452,18 @@ things in this group. There&apos;s a broad variety of Abilities.
</text>
<name_list
draw_stripes="true"
- height="60"
+ height="128"
layout="topleft"
left="0"
+ follows="left|top|right"
+ right="-1"
name="role_assigned_members"
top_pad="0"
width="300" />
<check_box
height="15"
label="Reveal members"
+ left="5"
layout="topleft"
name="role_visible_in_list"
tool_tip="Sets whether members of this role are visible in the General tab to people outside of the group."
@@ -446,20 +471,23 @@ things in this group. There&apos;s a broad variety of Abilities.
width="300" />
<text
type="string"
- height="13"
+ height="16"
layout="topleft"
follows="left|top"
- left="0"
+ left="5"
+ text_color="EmphasisColor"
name="static5"
- top_pad="5"
+ top_pad="2"
width="300">
Allowed Abilities
</text>
<scroll_list
draw_stripes="true"
- height="60"
+ height="140"
layout="topleft"
left="0"
+ follows="left|top|right"
+ right="-1"
name="role_allowed_actions"
search_column="2"
tool_tip="For details of each allowed ability see the abilities tab"
@@ -480,14 +508,19 @@ things in this group. There&apos;s a broad variety of Abilities.
</scroll_list>
</panel>
<panel
- height="303"
+ height="424"
+ background_visible="true"
+ bg_alpha_color="FloaterUnfocusBorderColor"
layout="topleft"
+ follows="top|left|right"
left="0"
+ right="-1"
+ width="313"
+ mouse_opaque="false"
name="actions_footer"
top_delta="0"
top="255"
- visible="false"
- width="310">
+ visible="false">
<text_editor
bg_readonly_color="Transparent"
text_readonly_color="EmphasisColor"
@@ -495,44 +528,54 @@ things in this group. There&apos;s a broad variety of Abilities.
type="string"
enabled="false"
halign="left"
- height="90"
layout="topleft"
+ follows="left|top|right"
+ left="0"
+ right="-1"
+ height="90"
max_length="512"
name="action_description"
- top_pad="0"
- width="295"
+ top="0"
word_wrap="true">
This Ability is &apos;Eject Members from this Group&apos;. Only an Owner can eject another Owner.
</text_editor>
<text
type="string"
- height="14"
+ height="16"
layout="topleft"
+ follows="left|top"
left="5"
name="static2"
- top_pad="5"
+ top_pad="1"
width="300">
Roles with this ability
</text>
<scroll_list
- height="65"
+ height="172"
layout="topleft"
+ follows="left|top|right"
left="5"
+ right="-1"
name="action_roles"
top_pad="0"
width="300" />
<text
type="string"
- height="14"
+ height="16"
layout="topleft"
+ follows="left|top"
+ left="5"
name="static3"
top_pad="5"
width="300">
Members with this ability
</text>
<name_list
- height="100"
+ height="122"
+ follows="left|top|right"
layout="topleft"
+ left="5"
+ right="-1"
name="action_members"
top_pad="0"
width="300" />
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 2e3d5a7320..c7e5b25e06 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
@@ -30,7 +30,7 @@
left="5"
name="button_stack"
orientation="vertical"
- top_pad="0"
+ top_pad="-5"
width="105">
<layout_panel
mouse_opaque="false"
@@ -55,7 +55,7 @@
user_resize="false">
<button
follows="left|top|right"
- height="20"
+ height="23"
label="Profile"
name="view_profile_btn"
top="0"
@@ -72,7 +72,7 @@
user_resize="false">
<button
follows="left|top|right"
- height="20"
+ height="23"
label="Add Friend"
name="add_friend_btn"
top="5"
@@ -90,9 +90,10 @@
<button
auto_resize="false"
follows="left|top|right"
- height="20"
+ height="23"
label="Teleport"
name="teleport_btn"
+ tool_tip = "Offer to teleport this person"
width="100" />
</layout_panel>
<layout_panel
@@ -107,7 +108,7 @@
<button
auto_resize="true"
follows="left|top|right"
- height="20"
+ height="23"
label="Share"
name="share_btn"
width="100" />
@@ -119,11 +120,28 @@
layout="topleft"
min_height="25"
width="100"
+ name="share_btn_panel"
+ user_resize="false">
+ <button
+ auto_resize="true"
+ follows="left|top|right"
+ height="23"
+ label="Pay"
+ name="pay_btn"
+ width="100" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="25"
+ layout="topleft"
+ min_height="25"
+ width="100"
name="call_btn_panel"
user_resize="false">
<button
follows="left|top|right"
- height="20"
+ height="23"
label="Call"
name="call_btn"
width="100" />
@@ -140,7 +158,7 @@
visible="false">
<button
follows="left|top|right"
- height="20"
+ height="23"
label="Leave Call"
name="end_call_btn"
width="100" />
@@ -157,7 +175,7 @@
visible="false">
<button
follows="left|top|right"
- height="20"
+ height="23"
label="Voice Controls"
name="voice_ctrls_btn"
width="100" />
diff --git a/indra/newview/skins/default/xui/en/panel_landmarks.xml b/indra/newview/skins/default/xui/en/panel_landmarks.xml
index 039e1ae086..91d4cd6e83 100644
--- a/indra/newview/skins/default/xui/en/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/en/panel_landmarks.xml
@@ -38,7 +38,7 @@
<accordion_tab
layout="topleft"
name="tab_landmarks"
- title="Landmarks">
+ title="My Landmarks">
<places_inventory_panel
allow_multi_select="true"
border="false"
diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index 4657d39a0f..c04414abbb 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -122,11 +122,23 @@ label="Remember"
top_pad="3"
name="remember_check"
width="135" />
+<button
+ follows="left|bottom"
+ height="23"
+ image_unselected="PushButton_On"
+ image_selected="PushButton_On_Selected"
+ label="Log In"
+ label_color="White"
+ layout="topleft"
+ left_pad="10"
+ name="connect_btn"
+ top="35"
+ width="90" />
<text
follows="left|bottom"
font="SansSerifSmall"
height="15"
- left_pad="8"
+ left_pad="18"
name="start_location_text"
top="20"
width="130">
@@ -163,18 +175,6 @@ top_pad="2"
name="server_combo"
width="135"
visible="false" />
-<button
- follows="left|bottom"
- height="23"
- image_unselected="PushButton_On"
- image_selected="PushButton_On_Selected"
- label="Log In"
- label_color="White"
- layout="topleft"
- left_pad="15"
- name="connect_btn"
- top="35"
- width="90" />
</layout_panel>
<layout_panel
follows="right|bottom"
diff --git a/indra/newview/skins/default/xui/en/panel_me.xml b/indra/newview/skins/default/xui/en/panel_me.xml
index e779e37419..a30d80f101 100644
--- a/indra/newview/skins/default/xui/en/panel_me.xml
+++ b/indra/newview/skins/default/xui/en/panel_me.xml
@@ -4,7 +4,7 @@
border="false"
follows="all"
height="570"
- label="My Profile"
+ label="My Profile!!!!!"
layout="topleft"
left="0"
name="panel_me"
@@ -29,23 +29,23 @@
height="570"
halign="center"
layout="topleft"
- left="10"
+ left="6"
name="tabs"
tab_min_width="95"
tab_height="30"
tab_position="top"
top_pad="10"
- width="313">
+ width="315">
<panel
class="panel_my_profile"
filename="panel_my_profile.xml"
- label="PROFILE"
+ label="MY PROFILE"
help_topic="panel_my_profile_tab"
name="panel_profile" />
<panel
class="panel_picks"
filename="panel_picks.xml"
- label="PICKS"
+ label="MY PICKS"
help_topic="panel_my_picks_tab"
name="panel_picks" />
</tab_container>
diff --git a/indra/newview/skins/default/xui/en/panel_my_profile.xml b/indra/newview/skins/default/xui/en/panel_my_profile.xml
index 4164ce73dd..d519569543 100644
--- a/indra/newview/skins/default/xui/en/panel_my_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_my_profile.xml
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
follows="all"
- height="500"
+ height="535"
label="Profile"
layout="topleft"
left="0"
name="panel_profile"
top="0"
- width="313">
+ width="315">
<string
name="CaptionTextAcctInfo">
[ACCTTYPE]
@@ -41,8 +41,8 @@
layout="topleft"
left="0"
top="0"
- height="480"
- width="313"
+ height="522"
+ width="315"
border_size="0">
<layout_panel
name="profile_stack"
@@ -50,9 +50,9 @@
layout="topleft"
top="0"
left="0"
- height="480"
+ height="492"
user_resize="false"
- width="313">
+ width="315">
<scroll_container
color="DkGray2"
follows="all"
@@ -60,13 +60,13 @@
left="0"
name="profile_scroll"
opaque="true"
- height="480"
- width="313"
+ height="492"
+ width="315"
top="0">
<panel
layout="topleft"
follows="left|top|right"
- height="505"
+ height="492"
name="scroll_content_panel"
top="0"
left="0"
@@ -84,9 +84,9 @@
default_image_name="None"
enabled="false"
follows="top|left"
- height="117"
+ height="124"
layout="topleft"
- left="0"
+ left="3"
name="2nd_life_pic"
top="10"
width="102" />
@@ -96,7 +96,7 @@
layout="topleft"
name="2nd_life_edit_icon"
label=""
- left="0"
+ left="3"
tool_tip="Click the Edit Profile button below to change image"
top="10"
width="102" />
@@ -130,7 +130,7 @@
follows="left|top|right"
height="117"
layout="topleft"
- top_pad="10"
+ top_pad="0"
left="10"
name="first_life_image_panel"
width="297">
@@ -139,9 +139,9 @@
default_image_name="None"
enabled="false"
follows="top|left"
- height="117"
+ height="124"
layout="topleft"
- left="0"
+ left="3"
name="real_world_pic"
width="102" />
<icon
@@ -150,7 +150,7 @@
layout="topleft"
name="real_world_edit_icon"
label=""
- left="0"
+ left="3"
tool_tip="Click the Edit Profile button below to change image"
top="4"
width="102" />
@@ -206,13 +206,18 @@
top_pad="10"
value="Resident Since:"
width="300" />
- <text
+ <text_editor
+ allow_scroll="false"
+ bg_visible="false"
follows="left|top"
+ h_pad="0"
height="15"
layout="topleft"
left="10"
name="register_date"
+ read_only="true"
translate="false"
+ v_pad="0"
value="05/31/2376"
width="300"
word_wrap="true" />
@@ -238,19 +243,24 @@
top_delta="0"
value="Go to Dashboard"
width="100"/> -->
- <text
+ <text_editor
+ allow_scroll="false"
+ bg_visible="false"
follows="left|top"
+ h_pad="0"
height="28"
layout="topleft"
left="10"
name="acc_status_text"
+ read_only="true"
top_pad="0"
translate="false"
+ v_pad="0"
width="300"
word_wrap="true">
Resident. No payment info on file.
Linden.
- </text>
+ </text_editor>
<text
follows="left|top"
font.style="BOLD"
@@ -299,7 +309,7 @@
layout="topleft"
left="7"
name="sl_groups"
- top_pad="0"
+ top_pad="0"
translate="false"
width="298"
expanded_bg_visible="true"
@@ -379,23 +389,20 @@
<button
follows="bottom|right"
height="23"
- left="20"
+ left="4"
top="5"
label="Edit Profile"
- layout="topleft"
name="edit_profile_btn"
tool_tip="Edit your personal information"
- width="130" />
+ width="152" />
<button
follows="bottom|right"
height="23"
label="Edit Appearance"
- left_pad="10"
- layout="topleft"
+ left_pad="4"
name="edit_appearance_btn"
- top="5"
tool_tip="Create/edit your appearance: physical data, clothes and etc."
- width="130" />
+ width="152" />
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
index baa6c2e51f..02eddc9212 100644
--- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
@@ -39,8 +39,9 @@
layout="topleft"
name="navigation_panel"
width="600">
- <button
+ <pull_button
follows="left|top"
+ direction="down"
height="23"
image_overlay="Arrow_Left_Off"
layout="topleft"
@@ -49,8 +50,9 @@
tool_tip="Go back to previous location"
top="2"
width="31" />
- <button
+ <pull_button
follows="left|top"
+ direction="down"
height="23"
image_overlay="Arrow_Right_Off"
layout="topleft"
@@ -139,11 +141,12 @@
font="SansSerifSmall"
height="15"
layout="topleft"
- left="0"
+ left="102"
name="favorite"
image_drag_indication="Accordion_ArrowOpened_Off"
bottom="55"
- width="590">
+ tool_tip="Drag Landmarks here for quick access to your favorite places in Second Life!"
+ width="590">
<chevron_button name=">>"
image_unselected="TabIcon_Close_Off"
image_selected="TabIcon_Close_Off"
@@ -154,4 +157,15 @@
top="15"
height="15"/>
</favorites_bar>
+ <text
+ follows="left|top"
+ font.style="BOLD"
+ height="15"
+ layout="topleft"
+ left="10"
+ top_pad="-12"
+ name="favorites_bar_label"
+ text_color="LtGray"
+ tool_tip="Drag Landmarks here for quick access to your favorite places in Second Life!"
+ width="102">Favorites Bar</text>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index da3a2274c9..3b5add33a8 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -24,9 +24,6 @@ background_visible="true"
name="no_friends"
value="No friends" />
<string
- name="no_groups"
- value="No groups" />
- <string
name="people_filter_label"
value="Filter People" />
<string
@@ -47,7 +44,7 @@ background_visible="true"
follows="all"
height="500"
layout="topleft"
- left="10"
+ left="6"
name="tabs"
tab_min_width="70"
tab_height="30"
@@ -116,7 +113,7 @@ background_visible="true"
<panel
follows="all"
height="500"
- label="FRIENDS"
+ label="MY FRIENDS"
layout="topleft"
left="0"
help_topic="people_friends_tab"
@@ -163,6 +160,17 @@ background_visible="true"
width="313" />
</accordion_tab>
</accordion>
+ <text
+ follows="all"
+ height="450"
+ left="10"
+ name="no_friends_msg"
+ top="10"
+ width="293"
+ wrap="true">
+ To add friends try [secondlife:///app/search/people global search] or click on a user to add them as a friend.
+If you're looking for people to hang out with, [secondlife:///app/worldmap try the Map].
+ </text>
<panel
follows="left|right|bottom"
height="30"
@@ -213,7 +221,7 @@ background_visible="true"
<panel
follows="all"
height="500"
- label="GROUPS"
+ label="MY GROUPS"
layout="topleft"
left="0"
help_topic="people_groups_tab"
@@ -226,6 +234,8 @@ background_visible="true"
layout="topleft"
left="0"
name="group_list"
+ no_filtered_groups_msg="No groups"
+ no_groups_msg="[secondlife:///app/search/groups Trying searching for some groups to join.]"
top="0"
width="313" />
<panel
diff --git a/indra/newview/skins/default/xui/en/panel_pick_info.xml b/indra/newview/skins/default/xui/en/panel_pick_info.xml
index 7489988722..375f369ba7 100644
--- a/indra/newview/skins/default/xui/en/panel_pick_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_pick_info.xml
@@ -61,8 +61,11 @@
name="pick_snapshot"
top="20"
width="280" />
- <text
+ <text_editor
+ allow_scroll="false"
+ bg_visible="false"
follows="left|top|right"
+ h_pad="0"
height="35"
width="280"
layout="topleft"
@@ -71,17 +74,24 @@
left="10"
top_pad="10"
name="pick_name"
+ read_only="true"
text_color="white"
+ v_pad="0"
value="[name]"
use_ellipses="true" />
- <text
+ <text_editor
+ allow_scroll="false"
+ bg_visible="false"
follows="left|top|right"
+ h_pad="0"
height="25"
layout="topleft"
left="10"
name="pick_location"
+ read_only="true"
width="280"
word_wrap="true"
+ v_pad="0"
value="[loading...]" />
<text_editor
bg_readonly_color="DkGray2"
diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml
index 9bfd8b91d8..c4e4b9aa9b 100644
--- a/indra/newview/skins/default/xui/en/panel_places.xml
+++ b/indra/newview/skins/default/xui/en/panel_places.xml
@@ -17,12 +17,13 @@ background_visible="true"
name="teleport_history_tab_title"
value="TELEPORT HISTORY" />
<filter_editor
+ text_pad_left="14"
follows="left|top|right"
- font="SansSerif"
+ font="SansSerifSmall"
height="23"
layout="topleft"
left="15"
- label="Filter Places"
+ label="Filter My Places"
max_length="300"
name="Filter"
top="3"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
index 6e0b94ac2b..433dfc17fe 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
@@ -23,7 +23,7 @@
layout="topleft"
left="0"
name="radio"
- value="0"
+ value="0"
top="10"
width="125" />
<radio_item
@@ -32,7 +32,7 @@
layout="topleft"
left_delta="145"
name="radio2"
- value="1"
+ value="1"
top_delta="0"
width="125" />
<radio_item
@@ -41,7 +41,7 @@
layout="topleft"
left_delta="170"
name="radio3"
- value="2"
+ value="2"
top_delta="0"
width="125" />
</radio_group>
@@ -105,7 +105,7 @@
</text>
<color_swatch
can_apply_immediately="true"
- color="0.6 0.6 1 1"
+ color="LtGray"
follows="left|top"
height="47"
label_width="60"
@@ -136,7 +136,7 @@
</text>
<color_swatch
can_apply_immediately="true"
- color="0.8 1 1 1"
+ color="LtGray"
follows="left|top"
height="47"
label_width="44"
@@ -167,7 +167,7 @@
</text>
<color_swatch
can_apply_immediately="true"
- color="0.82 0.82 0.99 1"
+ color="Red"
follows="left|top"
height="47"
layout="topleft"
@@ -197,7 +197,7 @@
</text>
<color_swatch
can_apply_immediately="true"
- color="0.7 0.9 0.7 1"
+ color="EmphasisColor_35"
follows="left|top"
height="47"
layout="topleft"
@@ -227,7 +227,7 @@
</text>
<color_swatch
can_apply_immediately="true"
- color="0.7 0.9 0.7 1"
+ color="LtYellow"
follows="left|top"
height="47"
layout="topleft"
@@ -257,7 +257,7 @@
</text>
<color_swatch
can_apply_immediately="true"
- color="0.6 0.6 1 1"
+ color="EmphasisColor"
follows="left|top"
height="47"
layout="topleft"
@@ -316,22 +316,30 @@
<text
left="30"
height="20"
- width="300"
+ width="120"
top_pad="20">
- Show IMs in: (Requires restart)
+ Show IMs in:
</text>
+ <text
+ left_pad="6"
+ height="20"
+ width="100"
+ text_color="White_25"
+ >
+ (requires restart)
+ </text>
<radio_group
height="30"
layout="topleft"
- left_delta="30"
+ left="30"
control_name="ChatWindow"
name="chat_window"
top_pad="0"
- tool_tip="Show your Instant Messages in separate windows, or in one window with many tabs (Requires restart)"
+ tool_tip="Show your Instant Messages in separate floaters, or in one floater with many tabs (Requires restart)"
width="331">
<radio_item
height="16"
- label="Multiple windows"
+ label="Separate windows"
layout="topleft"
left="0"
name="radio"
@@ -340,7 +348,7 @@
width="150" />
<radio_item
height="16"
- label="One window"
+ label="Tabs"
layout="topleft"
left_delta="0"
name="radio2"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
index 22c75a595e..b496f95422 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
@@ -323,7 +323,6 @@
follows="left|top"
height="13"
layout="topleft"
- text_color="white"
left="30"
mouse_opaque="false"
name="text_box3"
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 d8e3f4ccfb..39a8e53c7f 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
@@ -34,8 +34,8 @@
control_name="MuteAudio"
follows="top|right"
height="18"
- image_selected="Parcel_VoiceNo_Dark"
- image_unselected="Parcel_Voice_Dark"
+ image_selected="AudioMute_Off"
+ image_unselected="Audio_Off"
is_toggle="true"
layout="topleft"
left_pad="16"
@@ -79,8 +79,8 @@
disabled_control="MuteAudio"
follows="top|right"
height="18"
- image_selected="Parcel_VoiceNo_Dark"
- image_unselected="Parcel_Voice_Dark"
+ image_selected="AudioMute_Off"
+ image_unselected="Audio_Off"
is_toggle="true"
layout="topleft"
left_pad="16"
@@ -114,8 +114,8 @@
disabled_control="MuteAudio"
follows="top|right"
height="18"
- image_selected="Parcel_VoiceNo_Dark"
- image_unselected="Parcel_Voice_Dark"
+ image_selected="AudioMute_Off"
+ image_unselected="Audio_Off"
is_toggle="true"
layout="topleft"
left_pad="16"
@@ -149,8 +149,8 @@
disabled_control="MuteAudio"
follows="top|right"
height="18"
- image_selected="Parcel_VoiceNo_Dark"
- image_unselected="Parcel_Voice_Dark"
+ image_selected="AudioMute_Off"
+ image_unselected="Audio_Off"
is_toggle="true"
layout="topleft"
left_pad="16"
@@ -184,8 +184,8 @@
disabled_control="MuteAudio"
follows="top|right"
height="18"
- image_selected="Parcel_VoiceNo_Dark"
- image_unselected="Parcel_Voice_Dark"
+ image_selected="AudioMute_Off"
+ image_unselected="Audio_Off"
is_toggle="true"
layout="topleft"
left_pad="16"
@@ -219,8 +219,8 @@
disabled_control="MuteAudio"
follows="top|right"
height="18"
- image_selected="Parcel_VoiceNo_Dark"
- image_unselected="Parcel_Voice_Dark"
+ image_selected="AudioMute_Off"
+ image_unselected="Audio_Off"
is_toggle="true"
layout="topleft"
left_pad="16"
@@ -236,9 +236,10 @@
disabled_control="CmdLineDisableVoice"
label="Enable voice"
layout="topleft"
- left="28"
+ font.style="BOLD"
+ left="101"
name="enable_voice_check"
- top_pad="5"
+ top_pad="13"
width="110"
>
</check_box>
@@ -270,8 +271,8 @@
disabled_control="MuteAudio"
follows="top|right"
height="18"
- image_selected="Parcel_VoiceNo_Dark"
- image_unselected="Parcel_Voice_Dark"
+ image_selected="AudioMute_Off"
+ image_unselected="Audio_Off"
is_toggle="true"
layout="topleft"
left_pad="16"
@@ -365,7 +366,7 @@
name="device_settings_panel"
class="panel_voice_device_settings"
width="501"
- top="285">
+ top="280">
<panel.string
name="default_text">
Default
diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml
index 1f0ace5843..351df22042 100644
--- a/indra/newview/skins/default/xui/en/panel_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile.xml
@@ -7,7 +7,7 @@
left="0"
name="panel_profile"
top="0"
- width="313">
+ width="317">
<string
name="CaptionTextAcctInfo">
[ACCTTYPE]
@@ -41,8 +41,8 @@
layout="topleft"
left="0"
top="0"
- height="517"
- width="313"
+ height="524"
+ width="317"
border_size="0">
<layout_panel
name="profile_stack"
@@ -50,8 +50,8 @@
layout="topleft"
top="0"
left="0"
- height="505"
- width="313">
+ height="524"
+ width="317">
<scroll_container
color="DkGray2"
follows="all"
@@ -59,8 +59,8 @@
left="0"
name="profile_scroll"
opaque="true"
- height="505"
- width="313"
+ height="524"
+ width="317"
top="0">
<panel
layout="topleft"
@@ -73,9 +73,9 @@
width="297">
<panel
follows="left|top|right"
- height="117"
+ height="124"
layout="topleft"
- left="10"
+ left="13"
name="second_life_image_panel"
top="0"
width="297">
@@ -84,7 +84,7 @@
default_image_name="None"
enabled="false"
follows="top|left"
- height="117"
+ height="124"
layout="topleft"
left="0"
name="2nd_life_pic"
@@ -103,7 +103,7 @@
width="180" />
<expandable_text
follows="left|top|right"
- height="95"
+ height="97"
layout="topleft"
left="107"
textbox.max_length="512"
@@ -118,10 +118,10 @@
</panel>
<panel
follows="left|top|right"
- height="117"
+ height="124"
layout="topleft"
- top_pad="10"
- left="10"
+ top_pad="0"
+ left="13"
name="first_life_image_panel"
width="297">
<texture_picker
@@ -129,7 +129,7 @@
default_image_name="None"
enabled="false"
follows="top|left"
- height="117"
+ height="124"
layout="topleft"
left="0"
name="real_world_pic"
@@ -147,7 +147,7 @@
width="180" />
<expandable_text
follows="left|top|right"
- height="95"
+ height="97"
layout="topleft"
left="107"
textbox.max_length="512"
@@ -173,8 +173,7 @@
value="http://librarianavengers.org"
width="300"
word_wrap="false"
- use_ellipses="true"
- />
+ use_ellipses="true" />
<text
follows="left|top"
font.style="BOLD"
@@ -186,13 +185,18 @@
top_pad="10"
value="Resident Since:"
width="300" />
- <text
+ <text_editor
+ allow_scroll="false"
+ bg_visible="false"
follows="left|top"
+ h_pad="0"
height="15"
layout="topleft"
left="10"
name="register_date"
+ read_only="true"
translate="false"
+ v_pad="0"
value="05/31/2376"
width="300"
word_wrap="true" />
@@ -218,19 +222,24 @@
top_delta="0"
value="Go to Dashboard"
width="100"/> -->
- <text
+ <text_editor
+ allow_scroll="false"
+ bg_visible="false"
follows="left|top"
+ h_pad="0"
height="28"
layout="topleft"
left="10"
name="acc_status_text"
+ read_only="true"
top_pad="0"
translate="false"
+ v_pad="0"
width="300"
word_wrap="true">
Resident. No payment info on file.
Linden.
- </text>
+ </text_editor>
<text
follows="left|top"
font.style="BOLD"
@@ -295,13 +304,13 @@
layout="topleft"
name="profile_buttons_panel"
auto_resize="false"
- width="313">
+ width="317">
<button
follows="bottom|left"
height="23"
label="Add Friend"
layout="topleft"
- left="0"
+ left="2"
mouse_opaque="false"
name="add_friend"
tool_tip="Offer friendship to the Resident"
@@ -316,7 +325,7 @@
tool_tip="Open instant message session"
top="5"
left_pad="3"
- width="45" />
+ width="39" />
<button
follows="bottom|left"
height="23"
@@ -326,7 +335,7 @@
tool_tip="Call this Resident"
left_pad="3"
top="5"
- width="45" />
+ width="43" />
<button
enabled="false"
follows="bottom|left"
@@ -337,7 +346,7 @@
tool_tip="Show the Resident on the map"
top="5"
left_pad="3"
- width="45" />
+ width="41" />
<button
follows="bottom|left"
height="23"
@@ -347,8 +356,8 @@
tool_tip="Offer teleport"
left_pad="3"
top="5"
- width="85" />
- <!-- <button
+ width="69" />
+ <button
follows="bottom|right"
height="23"
label="▼"
@@ -357,8 +366,8 @@
tool_tip="Pay money to or share inventory with the Resident"
right="-1"
top="5"
- left_pad="3"
- width="23" />-->
+ left_pad="3"
+ width="23" />
</layout_panel>
<layout_panel
follows="bottom|left"
diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml
index d46e1f9852..f5396951ca 100644
--- a/indra/newview/skins/default/xui/en/panel_profile_view.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml
@@ -54,14 +54,14 @@
height="535"
halign="center"
layout="topleft"
- left="10"
+ left="5"
min_width="333"
name="tabs"
tab_min_width="80"
tab_height="30"
tab_position="top"
top_pad="5"
- width="313">
+ width="317">
<panel
class="panel_profile"
filename="panel_profile.xml"
diff --git a/indra/newview/skins/default/xui/en/panel_script_ed.xml b/indra/newview/skins/default/xui/en/panel_script_ed.xml
index 765e2ae623..d14355b9f4 100644
--- a/indra/newview/skins/default/xui/en/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/en/panel_script_ed.xml
@@ -2,13 +2,12 @@
<panel
bevel_style="none"
border_style="line"
- bottom="550"
follows="left|top|right|bottom"
- height="508"
+ height="522"
layout="topleft"
left="0"
name="script panel"
- width="500">
+ width="497">
<panel.string
name="loading">
Loading...
@@ -29,71 +28,17 @@
name="Title">
Script: [NAME]
</panel.string>
- <text_editor
- type="string"
- length="1"
- bottom="393"
- follows="left|top|right|bottom"
- font="Monospace"
- height="376"
- ignore_tab="false"
- layout="topleft"
- left="4"
- max_length="65536"
- name="Script Editor"
- width="492"
- show_line_numbers="true"
- handle_edit_keys_directly="true"
- word_wrap="true">
- Loading...
- </text_editor>
- <button
- bottom="499"
- follows="right|bottom"
- height="20"
- label="Save"
- label_selected="Save"
- layout="topleft"
- left="360"
- name="Save_btn"
- width="128" />
- <scroll_list
- bottom="457"
- follows="left|right|bottom"
- height="60"
- layout="topleft"
- left="4"
- name="lsl errors"
- width="492" />
- <combo_box
- bottom="499"
- follows="left|bottom"
- height="20"
- label="Insert..."
- layout="topleft"
- left="12"
- name="Insert..."
- width="128" />
- <text
- bottom="473"
- follows="left|bottom"
- height="12"
- layout="topleft"
- left="12"
- name="line_col"
- width="128" />
<menu_bar
bg_visible="false"
- bottom="18"
- follows="left|top|right"
+ follows="left|top"
height="18"
layout="topleft"
- left="8"
+ left="0"
mouse_opaque="false"
name="script_menu"
width="476">
<menu
- bottom="18"
+ top="0"
height="62"
label="File"
layout="topleft"
@@ -113,11 +58,10 @@
name="Revert All Changes" />
</menu>
<menu
- bottom="-647"
+ top="0"
height="198"
label="Edit"
layout="topleft"
- left="222"
mouse_opaque="false"
name="Edit"
width="139">
@@ -169,11 +113,10 @@
name="Search / Replace..." />
</menu>
<menu
- bottom="18"
+ top="0"
height="34"
label="Help"
layout="topleft"
- left="0"
mouse_opaque="false"
name="Help"
width="112">
@@ -187,4 +130,53 @@
name="Keyword Help..." />
</menu>
</menu_bar>
+ <text_editor
+ left="0"
+ type="string"
+ length="1"
+ follows="left|top|right|bottom"
+ font="Monospace"
+ height="376"
+ ignore_tab="false"
+ layout="topleft"
+ max_length="65536"
+ name="Script Editor"
+ width="487"
+ show_line_numbers="true"
+ handle_edit_keys_directly="true"
+ word_wrap="true">
+ Loading...
+ </text_editor>
+ <scroll_list
+ top_pad="10"
+ left="0"
+ follows="left|right|bottom"
+ height="60"
+ layout="topleft"
+ name="lsl errors"
+ width="487" />
+ <text
+ follows="left|bottom"
+ height="12"
+ layout="topleft"
+ left="0"
+ name="line_col"
+ width="128" />
+ <combo_box
+ follows="left|bottom"
+ height="23"
+ label="Insert..."
+ layout="topleft"
+ name="Insert..."
+ width="128" />
+ <button
+ follows="right|bottom"
+ height="23"
+ label="Save"
+ label_selected="Save"
+ layout="topleft"
+ top_pad="-35"
+ right="487"
+ name="Save_btn"
+ width="61" />
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/en/panel_script_limits_my_avatar.xml
index d98f690339..629d8567d1 100644
--- a/indra/newview/skins/default/xui/en/panel_script_limits_my_avatar.xml
+++ b/indra/newview/skins/default/xui/en/panel_script_limits_my_avatar.xml
@@ -9,7 +9,44 @@
name="script_limits_my_avatar_panel"
top="0"
width="480">
- <text
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="10"
+ name="script_memory"
+ top_pad="24"
+ text_color="White"
+ width="480">
+ Avatar Script Usage
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="30"
+ name="memory_used"
+ top_delta="18"
+ width="480">
+
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="30"
+ name="urls_used"
+ top_delta="18"
+ width="480">
+
+ </text>
+ <text
type="string"
length="1"
follows="left|top"
@@ -17,7 +54,7 @@
layout="topleft"
left="10"
name="loading_text"
- top="10"
+ top="80"
text_color="EmphasisColor"
width="480">
Loading...
@@ -25,12 +62,12 @@
<scroll_list
draw_heading="true"
follows="all"
- height="500"
+ height="415"
layout="topleft"
left_delta="0"
multi_select="true"
name="scripts_list"
- top_delta="17"
+ top="100"
width="460">
<scroll_list.columns
label="Size (kb)"
diff --git a/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml
index 0fa3c1cf2e..9dff00fa0b 100644
--- a/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml
+++ b/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml
@@ -33,7 +33,7 @@
top_delta="18"
visible="true"
width="480">
- Parcels Owned:
+
</text>
<text
type="string"
@@ -45,7 +45,19 @@
name="memory_used"
top_delta="18"
width="480">
- Memory used:
+ </text>
+
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="30"
+ name="urls_used"
+ top_delta="18"
+ width="480">
+
</text>
<text
type="string"
@@ -55,7 +67,7 @@
layout="topleft"
left="10"
name="loading_text"
- top_delta="32"
+ top_delta="12"
text_color="EmphasisColor"
width="480">
Loading...
@@ -73,7 +85,11 @@
<scroll_list.columns
label="Size (kb)"
name="size"
- width="70" />
+ width="72" />
+ <scroll_list.columns
+ label="URLs"
+ name="urls"
+ width="48" />
<scroll_list.columns
label="Object Name"
name="name"
@@ -83,11 +99,13 @@
name="owner"
width="100" />
<scroll_list.columns
- label="Parcel / Location"
- name="location"
+ label="Parcel"
+ name="parcel"
width="130" />
-<!-- <scroll_list.commit_callback
- function="TopObjects.CommitObjectsList" />-->
+ <scroll_list.columns
+ label="Location"
+ name="location"
+ width="80" />
</scroll_list>
<button
follows="bottom|left"
@@ -102,8 +120,8 @@
<button
follows="bottom|right"
height="19"
- visible="false"
label="Highlight"
+ visible="false"
layout="bottomright"
left="370"
name="highlight_btn"
@@ -112,8 +130,8 @@
<button
follows="bottom|right"
height="19"
- visible="false"
label="Return"
+ visible="false"
layout="bottomright"
name="return_btn"
top="34"
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 3f836a661d..eb95de3a7c 100644
--- a/indra/newview/skins/default/xui/en/panel_side_tray.xml
+++ b/indra/newview/skins/default/xui/en/panel_side_tray.xml
@@ -91,7 +91,7 @@
class="panel_group_info_sidetray"
name="panel_group_info_sidetray"
filename="panel_group_info_sidetray.xml"
- label="Group Info"
+ label="Group Profile"
font="SansSerifBold"
/>
<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 7a6089c74e..5754f67045 100644
--- a/indra/newview/skins/default/xui/en/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml
@@ -49,7 +49,7 @@
image_unselected="spacer35.tga"
image_pressed="spacer35.tga"
height="16"
- right="-228"
+ right="-204"
label_shadow="false"
name="buycurrency"
tool_tip="My Balance"
@@ -69,15 +69,16 @@
left_pad="0"
label_shadow="false"
name="buyL"
- pad_right="20px"
+ pad_right="20"
+ pad_bottom="2"
tool_tip="Click to buy more L$"
top="2"
- width="100" />
+ width="71" />
<text
type="string"
font="SansSerifSmall"
text_readonly_color="TimeTextColor"
- follows="right|bottom"
+ follows="right|top"
halign="right"
height="16"
top="5"
@@ -85,11 +86,11 @@
left_pad="0"
name="TimeText"
tool_tip="Current time (Pacific)"
- width="85">
- 12:00 AM
+ width="89">
+ 24:00 AM PST
</text>
<button
- follows="right|bottom"
+ follows="right|top"
height="15"
image_selected="AudioMute_Off"
image_pressed="Audio_Press"
@@ -101,7 +102,7 @@
tool_tip="Global Volume Control"
width="16" />
<text
- follows="right|bottom"
+ follows="right|top"
halign="center"
height="12"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
index 74f97dca4e..d2c9e56bc3 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
@@ -85,7 +85,7 @@
left="45"
name="where"
text_color="LtGray_50"
- value="(In World)"
+ value="(inworld)"
width="150" />
<panel
follows="all"
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 81e52dadcf..dbf65f0080 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -2052,6 +2052,7 @@ this texture in your inventory
<string name="ScriptLimitsURLsUsed">URLs used: [COUNT] out of [MAX]; [AVAILABLE] available</string>
<string name="ScriptLimitsURLsUsedSimple">URLs used: [COUNT]</string>
<string name="ScriptLimitsRequestError">Error requesting information</string>
+ <string name="ScriptLimitsRequestNoParcelSelected">No Parcel Selected</string>
<string name="ScriptLimitsRequestWrongRegion">Error: script information is only available in your current region</string>
<string name="ScriptLimitsRequestWaiting">Retrieving information...</string>
<string name="ScriptLimitsRequestDontOwnParcel">You do not have permission to examine this parcel</string>
diff --git a/indra/newview/skins/default/xui/en/widgets/avatar_list_item.xml b/indra/newview/skins/default/xui/en/widgets/avatar_list_item.xml
new file mode 100644
index 0000000000..ed8df69bf4
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/avatar_list_item.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<avatar_list_item
+ height="0"
+ layout="topleft"
+ left="0"
+ name="avatar_list_item"
+ top="0"
+ width="0">
+ <!-- DEFAULT styles for avatar item -->
+ <default_style
+ font="SansSerifSmall"
+ font.style="NORMAL"
+ color="DkGray"/>
+
+ <!-- styles for avatar item INVITED to voice call -->
+ <voice_call_invited_style
+ font="SansSerifSmall"
+ font.style="NORMAL"
+ color="0.5 0.5 0.5 0.5"/>
+
+ <!-- styles for avatar item JOINED to voice call -->
+ <voice_call_joined_style
+ font="SansSerifSmall"
+ font.style="NORMAL"
+ color="white"/>
+
+ <!-- styles for avatar item which HAS LEFT voice call -->
+ <voice_call_left_style
+ font="SansSerifSmall"
+ font.style="ITALIC"
+ color="LtGray_50"/>
+
+ <!-- styles for ONLINE avatar item -->
+ <online_style
+ font="SansSerifSmall"
+ font.style="NORMAL"
+ color="white"/>
+
+ <!-- styles for OFFLINE avatar item -->
+ <offline_style
+ font="SansSerifSmall"
+ font.style="NORMAL"
+ color="0.5 0.5 0.5 1.0"/>
+</avatar_list_item>
diff --git a/indra/newview/skins/default/xui/en/widgets/expandable_text.xml b/indra/newview/skins/default/xui/en/widgets/expandable_text.xml
index f59c46b2f5..d9b6387f0d 100644
--- a/indra/newview/skins/default/xui/en/widgets/expandable_text.xml
+++ b/indra/newview/skins/default/xui/en/widgets/expandable_text.xml
@@ -2,10 +2,13 @@
<expandable_text
max_height="300" >
<textbox
- more_label="More"
+ allow_html="true"
+ allow_scroll="true"
+ bg_visible="false"
+ more_label="More"
follows="left|top|right"
name="text"
- allow_scroll="true"
+ read_only="true"
use_ellipses="true"
word_wrap="true"
tab_stop="true"
@@ -16,4 +19,4 @@
name="scroll"
follows="all"
/>
-</expandable_text> \ No newline at end of file
+</expandable_text>
diff --git a/indra/newview/skins/default/xui/en/widgets/filter_editor.xml b/indra/newview/skins/default/xui/en/widgets/filter_editor.xml
index 48baa2812d..1228f6be3d 100644
--- a/indra/newview/skins/default/xui/en/widgets/filter_editor.xml
+++ b/indra/newview/skins/default/xui/en/widgets/filter_editor.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<filter_editor
clear_button_visible="true"
- search_button_visible="true"
+ search_button_visible="false"
text_pad_left="7"
select_on_focus="true"
text_tentative_color="TextFgTentativeColor"
diff --git a/indra/newview/skins/default/xui/en/widgets/location_input.xml b/indra/newview/skins/default/xui/en/widgets/location_input.xml
index 70a58b8e03..2163660206 100644
--- a/indra/newview/skins/default/xui/en/widgets/location_input.xml
+++ b/indra/newview/skins/default/xui/en/widgets/location_input.xml
@@ -96,7 +96,7 @@
name="damage_icon"
width="14"
height="13"
- top="21"
+ top="19"
left="2"
follows="right|top"
image_name="Parcel_Damage_Dark"
@@ -106,7 +106,7 @@
name="damage_text"
width="35"
height="18"
- top="16"
+ top="17"
follows="right|top"
halign="right"
font="SansSerifSmall"
diff --git a/indra/newview/skins/default/xui/en/widgets/menu_item.xml b/indra/newview/skins/default/xui/en/widgets/menu_item.xml
index c65244ae22..563f3dc5c2 100644
--- a/indra/newview/skins/default/xui/en/widgets/menu_item.xml
+++ b/indra/newview/skins/default/xui/en/widgets/menu_item.xml
@@ -1,3 +1,3 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<!-- Use this for the top-level menu styling -->
-<menu_item font="SansSerif" />
+<menu_item font="SansSerifSmall" />
diff --git a/indra/newview/skins/default/xui/en/widgets/tab_container.xml b/indra/newview/skins/default/xui/en/widgets/tab_container.xml
index 3f5a4b8379..597c4e83b6 100644
--- a/indra/newview/skins/default/xui/en/widgets/tab_container.xml
+++ b/indra/newview/skins/default/xui/en/widgets/tab_container.xml
@@ -14,8 +14,8 @@ label_pad_left - padding to the left of tab button labels
tab_top_image_selected="TabTop_Left_Selected"
tab_bottom_image_unselected="Toolbar_Left_Off"
tab_bottom_image_selected="Toolbar_Left_Selected"
- tab_left_image_unselected="TabTop_Middle_Off"
- tab_left_image_selected="TabTop_Middle_Selected"/>
+ tab_left_image_unselected="SegmentedBtn_Left_Disabled"
+ tab_left_image_selected="SegmentedBtn_Left_Off"/>
<middle_tab tab_top_image_unselected="TabTop_Middle_Off"
tab_top_image_selected="TabTop_Middle_Selected"
tab_bottom_image_unselected="Toolbar_Middle_Off"