diff options
author | Jacek Antonelli | 2009-08-29 17:44:38 -0500 |
---|---|---|
committer | Jacek Antonelli | 2009-08-29 22:49:51 -0500 |
commit | 6a5aab98892df74f60743f5b789959c9593d6647 (patch) | |
tree | 62da18f8540879ed01e12eeb0ce49375474272e4 /linden/indra/newview/llviewermenu.cpp | |
parent | Merge branch 'mac-openal-url' into next (diff) | |
parent | Converted 1.23 XUI files to unix line endings. (diff) | |
download | meta-impy-6a5aab98892df74f60743f5b789959c9593d6647.zip meta-impy-6a5aab98892df74f60743f5b789959c9593d6647.tar.gz meta-impy-6a5aab98892df74f60743f5b789959c9593d6647.tar.bz2 meta-impy-6a5aab98892df74f60743f5b789959c9593d6647.tar.xz |
Merged SL 1.23.4 into Imprudence.
Conflicts:
linden/doc/contributions.txt
linden/indra/CMakeLists.txt
linden/indra/cmake/APR.cmake
linden/indra/cmake/CopyWinLibs.cmake
linden/indra/cmake/OPENAL.cmake
linden/indra/develop.py
linden/indra/llaudio/audioengine.cpp
linden/indra/llcommon/indra_constants.h
linden/indra/llcommon/llversionviewer.h
linden/indra/llcrashlogger/llcrashlogger.cpp
linden/indra/llmedia/llmediaimplgstreamer.cpp
linden/indra/llmedia/llmediaimplgstreamer.h
linden/indra/llmedia/llmediaimplgstreamer_syms.cpp
linden/indra/llmedia/llmediaimplgstreamer_syms.h
linden/indra/llmedia/llmediaimplgstreamer_syms_raw.inc
linden/indra/llmedia/llmediamanager.cpp
linden/indra/llmessage/llassetstorage.cpp
linden/indra/llui/lltexteditor.cpp
linden/indra/llvfs/lldir.cpp
linden/indra/newview/CMakeLists.txt
linden/indra/newview/English.lproj/InfoPlist.strings
linden/indra/newview/Info-Imprudence.plist
linden/indra/newview/app_settings/logcontrol.xml
linden/indra/newview/app_settings/settings.xml
linden/indra/newview/installers/windows/installer_template.nsi
linden/indra/newview/llagent.cpp
linden/indra/newview/llappviewer.cpp
linden/indra/newview/llcallingcard.cpp
linden/indra/newview/llfilepicker.cpp
linden/indra/newview/llfloateractivespeakers.cpp
linden/indra/newview/llfloateravatarpicker.cpp
linden/indra/newview/llfloaterbulkpermission.cpp
linden/indra/newview/llfloaterbulkpermission.h
linden/indra/newview/llfloaterchat.cpp
linden/indra/newview/llfloatergodtools.cpp
linden/indra/newview/llfloaterhtmlhelp.cpp
linden/indra/newview/llfloatertools.cpp
linden/indra/newview/llfloatertools.h
linden/indra/newview/llfloatertopobjects.cpp
linden/indra/newview/llinventorybridge.cpp
linden/indra/newview/llinventoryview.cpp
linden/indra/newview/llnetmap.cpp
linden/indra/newview/llnetmap.h
linden/indra/newview/llpanelland.cpp
linden/indra/newview/llpanellogin.cpp
linden/indra/newview/llpanelobject.cpp
linden/indra/newview/llprefsim.cpp
linden/indra/newview/lltexturecache.cpp
linden/indra/newview/lltoolbrush.cpp
linden/indra/newview/llvieweraudio.cpp
linden/indra/newview/llviewermenu.cpp
linden/indra/newview/llviewermessage.cpp
linden/indra/newview/llviewerparcelmedia.cpp
linden/indra/newview/llvoavatar.cpp
linden/indra/newview/llwebbrowserctrl.cpp
linden/indra/newview/llworldmapview.cpp
linden/indra/newview/pipeline.cpp
linden/indra/newview/res/viewerRes.rc
linden/indra/newview/skins/default/colors_base.xml
linden/indra/newview/skins/default/xui/de/floater_active_speakers.xml
linden/indra/newview/skins/default/xui/de/floater_instant_message_ad_hoc.xml
linden/indra/newview/skins/default/xui/de/floater_instant_message_group.xml
linden/indra/newview/skins/default/xui/de/floater_joystick.xml
linden/indra/newview/skins/default/xui/de/floater_mute_object.xml
linden/indra/newview/skins/default/xui/de/floater_sim_release_message.xml
linden/indra/newview/skins/default/xui/de/panel_media_controls.xml
linden/indra/newview/skins/default/xui/de/panel_preferences_voice.xml
linden/indra/newview/skins/default/xui/de/strings.xml
linden/indra/newview/skins/default/xui/de/teleport_strings.xml
linden/indra/newview/skins/default/xui/en-us/alerts.xml
linden/indra/newview/skins/default/xui/en-us/floater_about_land.xml
linden/indra/newview/skins/default/xui/en-us/floater_avatar_picker.xml
linden/indra/newview/skins/default/xui/en-us/floater_beacons.xml
linden/indra/newview/skins/default/xui/en-us/floater_bulk_perms.xml
linden/indra/newview/skins/default/xui/en-us/floater_buy_land.xml
linden/indra/newview/skins/default/xui/en-us/floater_chatterbox.xml
linden/indra/newview/skins/default/xui/en-us/floater_inventory_view_finder.xml
linden/indra/newview/skins/default/xui/en-us/floater_media_browser.xml
linden/indra/newview/skins/default/xui/en-us/floater_mini_map.xml
linden/indra/newview/skins/default/xui/en-us/floater_tools.xml
linden/indra/newview/skins/default/xui/en-us/menu_login.xml
linden/indra/newview/skins/default/xui/en-us/menu_mini_map.xml
linden/indra/newview/skins/default/xui/en-us/menu_pie_attachment.xml
linden/indra/newview/skins/default/xui/en-us/menu_pie_avatar.xml
linden/indra/newview/skins/default/xui/en-us/menu_pie_object.xml
linden/indra/newview/skins/default/xui/en-us/menu_pie_self.xml
linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml
linden/indra/newview/skins/default/xui/en-us/notify.xml
linden/indra/newview/skins/default/xui/en-us/panel_bars.xml
linden/indra/newview/skins/default/xui/en-us/panel_groups.xml
linden/indra/newview/skins/default/xui/en-us/panel_media_controls.xml
linden/indra/newview/skins/default/xui/en-us/panel_mini_map.xml
linden/indra/newview/skins/default/xui/en-us/panel_preferences_im.xml
linden/indra/newview/skins/default/xui/en-us/panel_preferences_input.xml
linden/indra/newview/skins/default/xui/en-us/panel_preferences_voice.xml
linden/indra/newview/skins/default/xui/en-us/strings.xml
linden/indra/newview/skins/default/xui/es/alerts.xml
linden/indra/newview/skins/default/xui/es/floater_about.xml
linden/indra/newview/skins/default/xui/es/floater_about_land.xml
linden/indra/newview/skins/default/xui/es/floater_animation_preview.xml
linden/indra/newview/skins/default/xui/es/floater_auction.xml
linden/indra/newview/skins/default/xui/es/floater_avatar_picker.xml
linden/indra/newview/skins/default/xui/es/floater_avatar_textures.xml
linden/indra/newview/skins/default/xui/es/floater_build_options.xml
linden/indra/newview/skins/default/xui/es/floater_bumps.xml
linden/indra/newview/skins/default/xui/es/floater_buy_contents.xml
linden/indra/newview/skins/default/xui/es/floater_buy_currency.xml
linden/indra/newview/skins/default/xui/es/floater_buy_land.xml
linden/indra/newview/skins/default/xui/es/floater_buy_object.xml
linden/indra/newview/skins/default/xui/es/floater_chat_history.xml
linden/indra/newview/skins/default/xui/es/floater_choose_group.xml
linden/indra/newview/skins/default/xui/es/floater_clothing.xml
linden/indra/newview/skins/default/xui/es/floater_color_picker.xml
linden/indra/newview/skins/default/xui/es/floater_critical.xml
linden/indra/newview/skins/default/xui/es/floater_customize.xml
linden/indra/newview/skins/default/xui/es/floater_directory.xml
linden/indra/newview/skins/default/xui/es/floater_gesture.xml
linden/indra/newview/skins/default/xui/es/floater_group_info.xml
linden/indra/newview/skins/default/xui/es/floater_html.xml
linden/indra/newview/skins/default/xui/es/floater_im.xml
linden/indra/newview/skins/default/xui/es/floater_image_preview.xml
linden/indra/newview/skins/default/xui/es/floater_import.xml
linden/indra/newview/skins/default/xui/es/floater_instant_message.xml
linden/indra/newview/skins/default/xui/es/floater_inventory.xml
linden/indra/newview/skins/default/xui/es/floater_inventory_item_properties.xml
linden/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml
linden/indra/newview/skins/default/xui/es/floater_land_holdings.xml
linden/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml
linden/indra/newview/skins/default/xui/es/floater_moveview.xml
linden/indra/newview/skins/default/xui/es/floater_mute.xml
linden/indra/newview/skins/default/xui/es/floater_name_description.xml
linden/indra/newview/skins/default/xui/es/floater_new_im.xml
linden/indra/newview/skins/default/xui/es/floater_new_outfit_dialog.xml
linden/indra/newview/skins/default/xui/es/floater_openobject.xml
linden/indra/newview/skins/default/xui/es/floater_pay.xml
linden/indra/newview/skins/default/xui/es/floater_pay_object.xml
linden/indra/newview/skins/default/xui/es/floater_postcard.xml
linden/indra/newview/skins/default/xui/es/floater_preferences.xml
linden/indra/newview/skins/default/xui/es/floater_preview_animation.xml
linden/indra/newview/skins/default/xui/es/floater_preview_embedded_texture.xml
linden/indra/newview/skins/default/xui/es/floater_preview_gesture.xml
linden/indra/newview/skins/default/xui/es/floater_preview_notecard.xml
linden/indra/newview/skins/default/xui/es/floater_preview_notecard_keep_discard.xml
linden/indra/newview/skins/default/xui/es/floater_preview_sound.xml
linden/indra/newview/skins/default/xui/es/floater_preview_texture.xml
linden/indra/newview/skins/default/xui/es/floater_preview_texture_keep_discard.xml
linden/indra/newview/skins/default/xui/es/floater_price_for_listing.xml
linden/indra/newview/skins/default/xui/es/floater_profile.xml
linden/indra/newview/skins/default/xui/es/floater_report_abuse.xml
linden/indra/newview/skins/default/xui/es/floater_script_debug.xml
linden/indra/newview/skins/default/xui/es/floater_script_ed_panel.xml
linden/indra/newview/skins/default/xui/es/floater_script_preview.xml
linden/indra/newview/skins/default/xui/es/floater_script_queue.xml
linden/indra/newview/skins/default/xui/es/floater_script_search.xml
linden/indra/newview/skins/default/xui/es/floater_sell_land.xml
linden/indra/newview/skins/default/xui/es/floater_settings_debug.xml
linden/indra/newview/skins/default/xui/es/floater_snapshot.xml
linden/indra/newview/skins/default/xui/es/floater_sound_preview.xml
linden/indra/newview/skins/default/xui/es/floater_telehub.xml
linden/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml
linden/indra/newview/skins/default/xui/es/floater_tools.xml
linden/indra/newview/skins/default/xui/es/floater_top_objects.xml
linden/indra/newview/skins/default/xui/es/floater_tos.xml
linden/indra/newview/skins/default/xui/es/floater_wearable_save_as.xml
linden/indra/newview/skins/default/xui/es/floater_world_map.xml
linden/indra/newview/skins/default/xui/es/menu_inventory.xml
linden/indra/newview/skins/default/xui/es/menu_pie_attachment.xml
linden/indra/newview/skins/default/xui/es/menu_pie_avatar.xml
linden/indra/newview/skins/default/xui/es/menu_pie_land.xml
linden/indra/newview/skins/default/xui/es/menu_pie_object.xml
linden/indra/newview/skins/default/xui/es/menu_pie_self.xml
linden/indra/newview/skins/default/xui/es/menu_viewer.xml
linden/indra/newview/skins/default/xui/es/notify.xml
linden/indra/newview/skins/default/xui/es/panel_avatar.xml
linden/indra/newview/skins/default/xui/es/panel_avatar_classified.xml
linden/indra/newview/skins/default/xui/es/panel_avatar_pick.xml
linden/indra/newview/skins/default/xui/es/panel_chat_bar.xml
linden/indra/newview/skins/default/xui/es/panel_classified.xml
linden/indra/newview/skins/default/xui/es/panel_event.xml
linden/indra/newview/skins/default/xui/es/panel_group.xml
linden/indra/newview/skins/default/xui/es/panel_group_finder.xml
linden/indra/newview/skins/default/xui/es/panel_group_general.xml
linden/indra/newview/skins/default/xui/es/panel_group_invite.xml
linden/indra/newview/skins/default/xui/es/panel_group_land_money.xml
linden/indra/newview/skins/default/xui/es/panel_group_notices.xml
linden/indra/newview/skins/default/xui/es/panel_group_roles.xml
linden/indra/newview/skins/default/xui/es/panel_group_voting.xml
linden/indra/newview/skins/default/xui/es/panel_land_covenant.xml
linden/indra/newview/skins/default/xui/es/panel_login.xml
linden/indra/newview/skins/default/xui/es/panel_overlaybar.xml
linden/indra/newview/skins/default/xui/es/panel_place.xml
linden/indra/newview/skins/default/xui/es/panel_place_small.xml
linden/indra/newview/skins/default/xui/es/panel_preferences_audio.xml
linden/indra/newview/skins/default/xui/es/panel_preferences_chat.xml
linden/indra/newview/skins/default/xui/es/panel_preferences_general.xml
linden/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml
linden/indra/newview/skins/default/xui/es/panel_preferences_im.xml
linden/indra/newview/skins/default/xui/es/panel_preferences_input.xml
linden/indra/newview/skins/default/xui/es/panel_preferences_network.xml
linden/indra/newview/skins/default/xui/es/panel_preferences_popups.xml
linden/indra/newview/skins/default/xui/es/panel_region_covenant.xml
linden/indra/newview/skins/default/xui/es/panel_region_debug.xml
linden/indra/newview/skins/default/xui/es/panel_region_estate.xml
linden/indra/newview/skins/default/xui/es/panel_region_general.xml
linden/indra/newview/skins/default/xui/es/panel_region_terrain.xml
linden/indra/newview/skins/default/xui/es/panel_region_texture.xml
linden/indra/newview/skins/default/xui/es/panel_scrolling_param.xml
linden/indra/newview/skins/default/xui/es/panel_status_bar.xml
linden/indra/newview/skins/default/xui/es/panel_toolbar.xml
linden/indra/newview/skins/default/xui/es/panel_top_pick.xml
linden/indra/newview/skins/default/xui/fr/alerts.xml
linden/indra/newview/skins/default/xui/fr/floater_about.xml
linden/indra/newview/skins/default/xui/fr/floater_about_land.xml
linden/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml
linden/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml
linden/indra/newview/skins/default/xui/fr/floater_beacons.xml
linden/indra/newview/skins/default/xui/fr/floater_buy_contents.xml
linden/indra/newview/skins/default/xui/fr/floater_buy_currency.xml
linden/indra/newview/skins/default/xui/fr/floater_buy_land.xml
linden/indra/newview/skins/default/xui/fr/floater_chat_history.xml
linden/indra/newview/skins/default/xui/fr/floater_clothing.xml
linden/indra/newview/skins/default/xui/fr/floater_customize.xml
linden/indra/newview/skins/default/xui/fr/floater_directory.xml
linden/indra/newview/skins/default/xui/fr/floater_god_tools.xml
linden/indra/newview/skins/default/xui/fr/floater_group_info.xml
linden/indra/newview/skins/default/xui/fr/floater_html.xml
linden/indra/newview/skins/default/xui/fr/floater_im.xml
linden/indra/newview/skins/default/xui/fr/floater_instant_message.xml
linden/indra/newview/skins/default/xui/fr/floater_instant_message_group.xml
linden/indra/newview/skins/default/xui/fr/floater_inventory.xml
linden/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml
linden/indra/newview/skins/default/xui/fr/floater_joystick.xml
linden/indra/newview/skins/default/xui/fr/floater_land_holdings.xml
linden/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml
linden/indra/newview/skins/default/xui/fr/floater_media_browser.xml
linden/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml
linden/indra/newview/skins/default/xui/fr/floater_name_description.xml
linden/indra/newview/skins/default/xui/fr/floater_preview_gesture.xml
linden/indra/newview/skins/default/xui/fr/floater_profile.xml
linden/indra/newview/skins/default/xui/fr/floater_report_abuse.xml
linden/indra/newview/skins/default/xui/fr/floater_script_search.xml
linden/indra/newview/skins/default/xui/fr/floater_sell_land.xml
linden/indra/newview/skins/default/xui/fr/floater_snapshot.xml
linden/indra/newview/skins/default/xui/fr/floater_sound_preview.xml
linden/indra/newview/skins/default/xui/fr/floater_tools.xml
linden/indra/newview/skins/default/xui/fr/floater_top_objects.xml
linden/indra/newview/skins/default/xui/fr/floater_world_map.xml
linden/indra/newview/skins/default/xui/fr/menu_inventory.xml
linden/indra/newview/skins/default/xui/fr/menu_login.xml
linden/indra/newview/skins/default/xui/fr/menu_pie_attachment.xml
linden/indra/newview/skins/default/xui/fr/menu_pie_avatar.xml
linden/indra/newview/skins/default/xui/fr/menu_pie_object.xml
linden/indra/newview/skins/default/xui/fr/menu_viewer.xml
linden/indra/newview/skins/default/xui/fr/notify.xml
linden/indra/newview/skins/default/xui/fr/panel_audio.xml
linden/indra/newview/skins/default/xui/fr/panel_avatar.xml
linden/indra/newview/skins/default/xui/fr/panel_avatar_classified.xml
linden/indra/newview/skins/default/xui/fr/panel_classified.xml
linden/indra/newview/skins/default/xui/fr/panel_event.xml
linden/indra/newview/skins/default/xui/fr/panel_friends.xml
linden/indra/newview/skins/default/xui/fr/panel_group_general.xml
linden/indra/newview/skins/default/xui/fr/panel_group_invite.xml
linden/indra/newview/skins/default/xui/fr/panel_group_land_money.xml
linden/indra/newview/skins/default/xui/fr/panel_group_roles.xml
linden/indra/newview/skins/default/xui/fr/panel_login.xml
linden/indra/newview/skins/default/xui/fr/panel_media_controls.xml
linden/indra/newview/skins/default/xui/fr/panel_media_remote_expanded.xml
linden/indra/newview/skins/default/xui/fr/panel_overlaybar.xml
linden/indra/newview/skins/default/xui/fr/panel_place.xml
linden/indra/newview/skins/default/xui/fr/panel_place_small.xml
linden/indra/newview/skins/default/xui/fr/panel_preferences_audio.xml
linden/indra/newview/skins/default/xui/fr/panel_preferences_general.xml
linden/indra/newview/skins/default/xui/fr/panel_preferences_im.xml
linden/indra/newview/skins/default/xui/fr/panel_preferences_input.xml
linden/indra/newview/skins/default/xui/fr/panel_preferences_network.xml
linden/indra/newview/skins/default/xui/fr/panel_preferences_voice.xml
linden/indra/newview/skins/default/xui/fr/panel_region_covenant.xml
linden/indra/newview/skins/default/xui/fr/panel_region_debug.xml
linden/indra/newview/skins/default/xui/fr/panel_region_general.xml
linden/indra/newview/skins/default/xui/fr/panel_voice_controls.xml
linden/indra/newview/skins/default/xui/fr/role_actions.xml
linden/indra/newview/skins/default/xui/fr/strings.xml
linden/indra/newview/skins/default/xui/fr/teleport_strings.xml
linden/indra/newview/skins/default/xui/ja/floater_active_speakers.xml
linden/indra/newview/skins/default/xui/ja/floater_html.xml
linden/indra/newview/skins/default/xui/ja/floater_instant_message_ad_hoc.xml
linden/indra/newview/skins/default/xui/ja/floater_instant_message_group.xml
linden/indra/newview/skins/default/xui/ja/floater_joystick.xml
linden/indra/newview/skins/default/xui/ja/floater_media_browser.xml
linden/indra/newview/skins/default/xui/ja/floater_windlight_options.xml
linden/indra/newview/skins/default/xui/ja/menu_login.xml
linden/indra/newview/skins/default/xui/ja/panel_friends.xml
linden/indra/newview/skins/default/xui/ja/panel_media_controls.xml
linden/indra/newview/skins/default/xui/ja/panel_media_remote_expanded.xml
linden/indra/newview/skins/default/xui/ja/panel_preferences_voice.xml
linden/indra/newview/skins/default/xui/ja/panel_speaker_controls.xml
linden/indra/newview/skins/default/xui/ja/strings.xml
linden/indra/newview/skins/default/xui/ja/teleport_strings.xml
linden/indra/newview/skins/default/xui/ko/panel_media_controls.xml
linden/indra/newview/skins/default/xui/pt/alerts.xml
linden/indra/newview/skins/default/xui/pt/floater_about.xml
linden/indra/newview/skins/default/xui/pt/floater_about_land.xml
linden/indra/newview/skins/default/xui/pt/floater_active_speakers.xml
linden/indra/newview/skins/default/xui/pt/floater_animation_preview.xml
linden/indra/newview/skins/default/xui/pt/floater_auction.xml
linden/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml
linden/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml
linden/indra/newview/skins/default/xui/pt/floater_beacons.xml
linden/indra/newview/skins/default/xui/pt/floater_build_options.xml
linden/indra/newview/skins/default/xui/pt/floater_bumps.xml
linden/indra/newview/skins/default/xui/pt/floater_buy_contents.xml
linden/indra/newview/skins/default/xui/pt/floater_buy_currency.xml
linden/indra/newview/skins/default/xui/pt/floater_buy_land.xml
linden/indra/newview/skins/default/xui/pt/floater_buy_object.xml
linden/indra/newview/skins/default/xui/pt/floater_chat_history.xml
linden/indra/newview/skins/default/xui/pt/floater_clothing.xml
linden/indra/newview/skins/default/xui/pt/floater_color_picker.xml
linden/indra/newview/skins/default/xui/pt/floater_critical.xml
linden/indra/newview/skins/default/xui/pt/floater_customize.xml
linden/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml
linden/indra/newview/skins/default/xui/pt/floater_directory.xml
linden/indra/newview/skins/default/xui/pt/floater_env_settings.xml
linden/indra/newview/skins/default/xui/pt/floater_gesture.xml
linden/indra/newview/skins/default/xui/pt/floater_god_tools.xml
linden/indra/newview/skins/default/xui/pt/floater_group_info.xml
linden/indra/newview/skins/default/xui/pt/floater_im.xml
linden/indra/newview/skins/default/xui/pt/floater_image_preview.xml
linden/indra/newview/skins/default/xui/pt/floater_inspect.xml
linden/indra/newview/skins/default/xui/pt/floater_instant_message.xml
linden/indra/newview/skins/default/xui/pt/floater_instant_message_ad_hoc.xml
linden/indra/newview/skins/default/xui/pt/floater_instant_message_group.xml
linden/indra/newview/skins/default/xui/pt/floater_inventory.xml
linden/indra/newview/skins/default/xui/pt/floater_inventory_item_properties.xml
linden/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml
linden/indra/newview/skins/default/xui/pt/floater_joystick.xml
linden/indra/newview/skins/default/xui/pt/floater_lagmeter.xml
linden/indra/newview/skins/default/xui/pt/floater_land_holdings.xml
linden/indra/newview/skins/default/xui/pt/floater_landmark_ctrl.xml
linden/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml
linden/indra/newview/skins/default/xui/pt/floater_lsl_guide.xml
linden/indra/newview/skins/default/xui/pt/floater_media_browser.xml
linden/indra/newview/skins/default/xui/pt/floater_moveview.xml
linden/indra/newview/skins/default/xui/pt/floater_mute.xml
linden/indra/newview/skins/default/xui/pt/floater_mute_object.xml
linden/indra/newview/skins/default/xui/pt/floater_name_description.xml
linden/indra/newview/skins/default/xui/pt/floater_new_outfit_dialog.xml
linden/indra/newview/skins/default/xui/pt/floater_openobject.xml
linden/indra/newview/skins/default/xui/pt/floater_pay.xml
linden/indra/newview/skins/default/xui/pt/floater_postcard.xml
linden/indra/newview/skins/default/xui/pt/floater_preferences.xml
linden/indra/newview/skins/default/xui/pt/floater_preview_animation.xml
linden/indra/newview/skins/default/xui/pt/floater_preview_classified.xml
linden/indra/newview/skins/default/xui/pt/floater_preview_event.xml
linden/indra/newview/skins/default/xui/pt/floater_preview_gesture.xml
linden/indra/newview/skins/default/xui/pt/floater_preview_notecard_keep_discard.xml
linden/indra/newview/skins/default/xui/pt/floater_preview_sound.xml
linden/indra/newview/skins/default/xui/pt/floater_preview_url.xml
linden/indra/newview/skins/default/xui/pt/floater_price_for_listing.xml
linden/indra/newview/skins/default/xui/pt/floater_profile.xml
linden/indra/newview/skins/default/xui/pt/floater_report_abuse.xml
linden/indra/newview/skins/default/xui/pt/floater_script_debug.xml
linden/indra/newview/skins/default/xui/pt/floater_script_queue.xml
linden/indra/newview/skins/default/xui/pt/floater_script_search.xml
linden/indra/newview/skins/default/xui/pt/floater_sell_land.xml
linden/indra/newview/skins/default/xui/pt/floater_settings_debug.xml
linden/indra/newview/skins/default/xui/pt/floater_sim_release_message.xml
linden/indra/newview/skins/default/xui/pt/floater_snapshot.xml
linden/indra/newview/skins/default/xui/pt/floater_sound_preview.xml
linden/indra/newview/skins/default/xui/pt/floater_telehub.xml
linden/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml
linden/indra/newview/skins/default/xui/pt/floater_tools.xml
linden/indra/newview/skins/default/xui/pt/floater_top_objects.xml
linden/indra/newview/skins/default/xui/pt/floater_tos.xml
linden/indra/newview/skins/default/xui/pt/floater_url_entry.xml
linden/indra/newview/skins/default/xui/pt/floater_water.xml
linden/indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml
linden/indra/newview/skins/default/xui/pt/floater_windlight_options.xml
linden/indra/newview/skins/default/xui/pt/floater_world_map.xml
linden/indra/newview/skins/default/xui/pt/menu_inventory.xml
linden/indra/newview/skins/default/xui/pt/menu_pie_attachment.xml
linden/indra/newview/skins/default/xui/pt/menu_pie_avatar.xml
linden/indra/newview/skins/default/xui/pt/menu_pie_land.xml
linden/indra/newview/skins/default/xui/pt/menu_pie_object.xml
linden/indra/newview/skins/default/xui/pt/menu_viewer.xml
linden/indra/newview/skins/default/xui/pt/notify.xml
linden/indra/newview/skins/default/xui/pt/panel_account_details.xml
linden/indra/newview/skins/default/xui/pt/panel_account_planning.xml
linden/indra/newview/skins/default/xui/pt/panel_account_transactions.xml
linden/indra/newview/skins/default/xui/pt/panel_audio_device.xml
linden/indra/newview/skins/default/xui/pt/panel_avatar.xml
linden/indra/newview/skins/default/xui/pt/panel_avatar_classified.xml
linden/indra/newview/skins/default/xui/pt/panel_avatar_pick.xml
linden/indra/newview/skins/default/xui/pt/panel_chat_bar.xml
linden/indra/newview/skins/default/xui/pt/panel_classified.xml
linden/indra/newview/skins/default/xui/pt/panel_event.xml
linden/indra/newview/skins/default/xui/pt/panel_friends.xml
linden/indra/newview/skins/default/xui/pt/panel_group.xml
linden/indra/newview/skins/default/xui/pt/panel_group_finder.xml
linden/indra/newview/skins/default/xui/pt/panel_group_general.xml
linden/indra/newview/skins/default/xui/pt/panel_group_invite.xml
linden/indra/newview/skins/default/xui/pt/panel_group_land_money.xml
linden/indra/newview/skins/default/xui/pt/panel_group_notices.xml
linden/indra/newview/skins/default/xui/pt/panel_group_roles.xml
linden/indra/newview/skins/default/xui/pt/panel_group_voting.xml
linden/indra/newview/skins/default/xui/pt/panel_land_covenant.xml
linden/indra/newview/skins/default/xui/pt/panel_login.xml
linden/indra/newview/skins/default/xui/pt/panel_overlaybar.xml
linden/indra/newview/skins/default/xui/pt/panel_place.xml
linden/indra/newview/skins/default/xui/pt/panel_place_small.xml
linden/indra/newview/skins/default/xui/pt/panel_preferences_audio.xml
linden/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml
linden/indra/newview/skins/default/xui/pt/panel_preferences_general.xml
linden/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml
linden/indra/newview/skins/default/xui/pt/panel_preferences_im.xml
linden/indra/newview/skins/default/xui/pt/panel_preferences_input.xml
linden/indra/newview/skins/default/xui/pt/panel_preferences_network.xml
linden/indra/newview/skins/default/xui/pt/panel_preferences_popups.xml
linden/indra/newview/skins/default/xui/pt/panel_preferences_voice.xml
linden/indra/newview/skins/default/xui/pt/panel_preferences_web.xml
linden/indra/newview/skins/default/xui/pt/panel_region_covenant.xml
linden/indra/newview/skins/default/xui/pt/panel_region_debug.xml
linden/indra/newview/skins/default/xui/pt/panel_region_estate.xml
linden/indra/newview/skins/default/xui/pt/panel_region_general.xml
linden/indra/newview/skins/default/xui/pt/panel_region_terrain.xml
linden/indra/newview/skins/default/xui/pt/panel_region_texture.xml
linden/indra/newview/skins/default/xui/pt/panel_scrolling_param.xml
linden/indra/newview/skins/default/xui/pt/panel_speaker_controls.xml
linden/indra/newview/skins/default/xui/pt/panel_status_bar.xml
linden/indra/newview/skins/default/xui/pt/panel_toolbar.xml
linden/indra/newview/skins/default/xui/pt/panel_top_pick.xml
linden/indra/newview/skins/default/xui/pt/panel_voice_controls.xml
linden/indra/newview/skins/default/xui/pt/panel_voice_enable.xml
linden/indra/newview/skins/default/xui/pt/panel_voice_options.xml
linden/indra/newview/skins/default/xui/pt/strings.xml
linden/indra/newview/skins/default/xui/pt/teleport_strings.xml
linden/indra/newview/skins/default/xui/zh/floater_env_settings.xml
linden/indra/newview/skins/default/xui/zh/floater_instant_message_ad_hoc.xml
linden/indra/newview/skins/default/xui/zh/floater_lagmeter.xml
linden/indra/newview/skins/default/xui/zh/floater_landmark_ctrl.xml
linden/indra/newview/skins/default/xui/zh/floater_post_process.xml
linden/indra/newview/skins/default/xui/zh/floater_settings_debug.xml
linden/indra/newview/skins/default/xui/zh/floater_windlight_options.xml
linden/indra/newview/skins/default/xui/zh/menu_pie_attachment.xml
linden/indra/newview/skins/default/xui/zh/menu_pie_avatar.xml
linden/indra/newview/skins/default/xui/zh/menu_pie_land.xml
linden/indra/newview/skins/default/xui/zh/menu_pie_object.xml
linden/indra/newview/skins/default/xui/zh/menu_viewer.xml
linden/indra/newview/skins/default/xui/zh/panel_avatar.xml
linden/indra/newview/skins/default/xui/zh/panel_friends.xml
linden/indra/newview/skins/default/xui/zh/panel_group_general.xml
linden/indra/newview/skins/default/xui/zh/panel_group_invite.xml
linden/indra/newview/skins/default/xui/zh/panel_group_land_money.xml
linden/indra/newview/skins/default/xui/zh/panel_group_notices.xml
linden/indra/newview/skins/default/xui/zh/panel_group_roles.xml
linden/indra/newview/skins/default/xui/zh/panel_preferences_audio.xml
linden/indra/newview/skins/default/xui/zh/panel_preferences_im.xml
linden/indra/newview/skins/default/xui/zh/panel_region_covenant.xml
linden/indra/newview/skins/default/xui/zh/panel_speaker_controls.xml
linden/indra/newview/skins/default/xui/zh/panel_voice_options.xml
linden/indra/newview/skins/default/xui/zh/strings.xml
linden/indra/newview/skins/silver/colors_base.xml
linden/indra/newview/skins/silver/xui/en-us/floater_about_land.xml
linden/indra/newview/skins/silver/xui/en-us/floater_directory.xml
linden/indra/newview/skins/silver/xui/en-us/floater_tools.xml
linden/indra/newview/skins/silver/xui/en-us/panel_media_controls.xml
linden/indra/newview/viewer_manifest.py
linden/install.xml
Diffstat (limited to 'linden/indra/newview/llviewermenu.cpp')
-rw-r--r-- | linden/indra/newview/llviewermenu.cpp | 718 |
1 files changed, 403 insertions, 315 deletions
diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp index 2940bdd..e9bd756 100644 --- a/linden/indra/newview/llviewermenu.cpp +++ b/linden/indra/newview/llviewermenu.cpp | |||
@@ -1,3 +1,4 @@ | |||
1 | |||
1 | /** | 2 | /** |
2 | * @file llviewermenu.cpp | 3 | * @file llviewermenu.cpp |
3 | * @brief Builds menus out of items. | 4 | * @brief Builds menus out of items. |
@@ -17,7 +18,8 @@ | |||
17 | * There are special exceptions to the terms and conditions of the GPL as | 18 | * There are special exceptions to the terms and conditions of the GPL as |
18 | * it is applied to this Source Code. View the full text of the exception | 19 | * it is applied to this Source Code. View the full text of the exception |
19 | * in the file doc/FLOSS-exception.txt in this software distribution, or | 20 | * in the file doc/FLOSS-exception.txt in this software distribution, or |
20 | * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception | 21 | * online at |
22 | * http://secondlifegrid.net/programs/open_source/licensing/flossexception | ||
21 | * | 23 | * |
22 | * By copying, modifying or distributing this software, you acknowledge | 24 | * By copying, modifying or distributing this software, you acknowledge |
23 | * that you have read and understood your obligations described above, | 25 | * that you have read and understood your obligations described above, |
@@ -101,12 +103,16 @@ | |||
101 | #include "llfloatereditui.h" | 103 | #include "llfloatereditui.h" |
102 | #include "llfloaterchatterbox.h" | 104 | #include "llfloaterchatterbox.h" |
103 | #include "llfloaterfriends.h" | 105 | #include "llfloaterfriends.h" |
106 | #include "llfloaterfonttest.h" | ||
104 | #include "llfloatergesture.h" | 107 | #include "llfloatergesture.h" |
105 | #include "llfloatergodtools.h" | 108 | #include "llfloatergodtools.h" |
106 | #include "llfloatergroupinfo.h" | 109 | #include "llfloatergroupinfo.h" |
107 | #include "llfloatergroupinvite.h" | 110 | #include "llfloatergroupinvite.h" |
108 | #include "llfloatergroups.h" | 111 | #include "llfloatergroups.h" |
109 | #include "llfloaterhtmlhelp.h" | 112 | #include "llfloaterhtml.h" |
113 | #include "llfloaterhtmlcurrency.h" | ||
114 | #include "llfloaterhtmlhelp.h" // gViewerHtmlHelp | ||
115 | #include "llfloaterhtmlsimple.h" | ||
110 | #include "llfloaterhud.h" | 116 | #include "llfloaterhud.h" |
111 | #include "llfloaterinspect.h" | 117 | #include "llfloaterinspect.h" |
112 | #include "llfloaterlagmeter.h" | 118 | #include "llfloaterlagmeter.h" |
@@ -116,6 +122,7 @@ | |||
116 | #include "llfloatermute.h" | 122 | #include "llfloatermute.h" |
117 | #include "llfloateropenobject.h" | 123 | #include "llfloateropenobject.h" |
118 | #include "llfloaterpermissionsmgr.h" | 124 | #include "llfloaterpermissionsmgr.h" |
125 | #include "llfloaterperms.h" | ||
119 | #include "llfloaterpostprocess.h" | 126 | #include "llfloaterpostprocess.h" |
120 | #include "llfloaterpreference.h" | 127 | #include "llfloaterpreference.h" |
121 | #include "llfloaterregioninfo.h" | 128 | #include "llfloaterregioninfo.h" |
@@ -184,6 +191,7 @@ | |||
184 | #include "llviewercamera.h" | 191 | #include "llviewercamera.h" |
185 | #include "llviewergenericmessage.h" | 192 | #include "llviewergenericmessage.h" |
186 | #include "llviewergesture.h" | 193 | #include "llviewergesture.h" |
194 | #include "llviewerimagelist.h" // gImageList | ||
187 | #include "llviewerinventory.h" | 195 | #include "llviewerinventory.h" |
188 | #include "llviewermenufile.h" // init_menu_file() | 196 | #include "llviewermenufile.h" // init_menu_file() |
189 | #include "llviewermessage.h" | 197 | #include "llviewermessage.h" |
@@ -207,9 +215,11 @@ | |||
207 | #include "llwlanimator.h" | 215 | #include "llwlanimator.h" |
208 | #include "llwlparammanager.h" | 216 | #include "llwlparammanager.h" |
209 | #include "llwaterparammanager.h" | 217 | #include "llwaterparammanager.h" |
218 | #include "llfloaternotificationsconsole.h" | ||
210 | 219 | ||
211 | #include "lltexlayer.h" | 220 | #include "lltexlayer.h" |
212 | 221 | ||
222 | using namespace LLVOAvatarDefines; | ||
213 | void init_client_menu(LLMenuGL* menu); | 223 | void init_client_menu(LLMenuGL* menu); |
214 | void init_server_menu(LLMenuGL* menu); | 224 | void init_server_menu(LLMenuGL* menu); |
215 | 225 | ||
@@ -283,9 +293,6 @@ typedef LLMemberListener<LLView> view_listener_t; | |||
283 | void handle_leave_group(void *); | 293 | void handle_leave_group(void *); |
284 | 294 | ||
285 | // File Menu | 295 | // File Menu |
286 | const char* upload_pick(void* data); | ||
287 | void handle_upload(void* data); | ||
288 | //void handle_upload_object(void* data); | ||
289 | void handle_compress_image(void*); | 296 | void handle_compress_image(void*); |
290 | BOOL enable_save_as(void *); | 297 | BOOL enable_save_as(void *); |
291 | 298 | ||
@@ -294,6 +301,8 @@ void handle_dump_group_info(void *); | |||
294 | void handle_dump_capabilities_info(void *); | 301 | void handle_dump_capabilities_info(void *); |
295 | void handle_dump_focus(void*); | 302 | void handle_dump_focus(void*); |
296 | 303 | ||
304 | // Advanced->Consoles menu | ||
305 | void handle_show_notifications_console(void*); | ||
297 | void handle_region_dump_settings(void*); | 306 | void handle_region_dump_settings(void*); |
298 | void handle_region_dump_temp_asset_data(void*); | 307 | void handle_region_dump_temp_asset_data(void*); |
299 | void handle_region_clear_temp_asset_data(void*); | 308 | void handle_region_clear_temp_asset_data(void*); |
@@ -307,7 +316,7 @@ void label_sit_or_stand(std::string& label, void*); | |||
307 | // declarations handle this mess. | 316 | // declarations handle this mess. |
308 | BOOL enable_take(); | 317 | BOOL enable_take(); |
309 | void handle_take(); | 318 | void handle_take(); |
310 | void confirm_take(S32 option, void* data); | 319 | bool confirm_take(const LLSD& notification, const LLSD& response); |
311 | BOOL enable_buy(void*); | 320 | BOOL enable_buy(void*); |
312 | void handle_buy(void *); | 321 | void handle_buy(void *); |
313 | void handle_buy_object(LLSaleInfo sale_info); | 322 | void handle_buy_object(LLSaleInfo sale_info); |
@@ -329,7 +338,6 @@ void handle_agent_stop_moving(void*); | |||
329 | void print_packets_lost(void*); | 338 | void print_packets_lost(void*); |
330 | void drop_packet(void*); | 339 | void drop_packet(void*); |
331 | void velocity_interpolate( void* data ); | 340 | void velocity_interpolate( void* data ); |
332 | void update_fov(S32 increments); | ||
333 | void toggle_wind_audio(void); | 341 | void toggle_wind_audio(void); |
334 | void toggle_water_audio(void); | 342 | void toggle_water_audio(void); |
335 | void handle_rebake_textures(void*); | 343 | void handle_rebake_textures(void*); |
@@ -358,7 +366,8 @@ void run_vectorize_perf_test(void *) | |||
358 | 366 | ||
359 | // Debug UI | 367 | // Debug UI |
360 | void handle_web_search_demo(void*); | 368 | void handle_web_search_demo(void*); |
361 | void handle_slurl_test(void*); | 369 | void handle_web_browser_test(void*); |
370 | void handle_buy_currency_test(void*); | ||
362 | void handle_save_to_xml(void*); | 371 | void handle_save_to_xml(void*); |
363 | void handle_load_from_xml(void*); | 372 | void handle_load_from_xml(void*); |
364 | 373 | ||
@@ -465,7 +474,6 @@ BOOL enable_grab_texture(void*); | |||
465 | void handle_dump_region_object_cache(void*); | 474 | void handle_dump_region_object_cache(void*); |
466 | 475 | ||
467 | BOOL menu_ui_enabled(void *user_data); | 476 | BOOL menu_ui_enabled(void *user_data); |
468 | void check_toggle_control( LLUICtrl *, void* user_data ); | ||
469 | BOOL menu_check_control( void* user_data); | 477 | BOOL menu_check_control( void* user_data); |
470 | void menu_toggle_variable( void* user_data ); | 478 | void menu_toggle_variable( void* user_data ); |
471 | BOOL menu_check_variable( void* user_data); | 479 | BOOL menu_check_variable( void* user_data); |
@@ -652,7 +660,7 @@ void init_menus() | |||
652 | gViewerWindow->setMenuBackgroundColor(false, | 660 | gViewerWindow->setMenuBackgroundColor(false, |
653 | LLViewerLogin::getInstance()->isInProductionGrid()); | 661 | LLViewerLogin::getInstance()->isInProductionGrid()); |
654 | 662 | ||
655 | // *TODO:Get the cost info from the server | 663 | // Assume L$10 for now, the server will tell us the real cost at login |
656 | const std::string upload_cost("10"); | 664 | const std::string upload_cost("10"); |
657 | gMenuHolder->childSetLabelArg("Upload Image", "[COST]", upload_cost); | 665 | gMenuHolder->childSetLabelArg("Upload Image", "[COST]", upload_cost); |
658 | gMenuHolder->childSetLabelArg("Upload Sound", "[COST]", upload_cost); | 666 | gMenuHolder->childSetLabelArg("Upload Sound", "[COST]", upload_cost); |
@@ -747,7 +755,16 @@ void init_client_menu(LLMenuGL* menu) | |||
747 | (void*)gDebugView->mMemoryView, | 755 | (void*)gDebugView->mMemoryView, |
748 | '0', MASK_CONTROL|MASK_SHIFT ) ); | 756 | '0', MASK_CONTROL|MASK_SHIFT ) ); |
749 | #endif | 757 | #endif |
758 | |||
750 | sub->appendSeparator(); | 759 | sub->appendSeparator(); |
760 | |||
761 | // Debugging view for unified notifications | ||
762 | sub->append(new LLMenuItemCallGL("Notifications Console...", | ||
763 | &handle_show_notifications_console, NULL, NULL, '5', MASK_CONTROL|MASK_SHIFT )); | ||
764 | |||
765 | |||
766 | sub->appendSeparator(); | ||
767 | |||
751 | sub->append(new LLMenuItemCallGL("Region Info to Debug Console", | 768 | sub->append(new LLMenuItemCallGL("Region Info to Debug Console", |
752 | &handle_region_dump_settings, NULL)); | 769 | &handle_region_dump_settings, NULL)); |
753 | sub->append(new LLMenuItemCallGL("Group Info to Debug Console", | 770 | sub->append(new LLMenuItemCallGL("Group Info to Debug Console", |
@@ -942,13 +959,6 @@ void init_client_menu(LLMenuGL* menu) | |||
942 | &menu_check_control, | 959 | &menu_check_control, |
943 | (void*)"SaveMinidump")); | 960 | (void*)"SaveMinidump")); |
944 | 961 | ||
945 | // TomY Temporary menu item so we can test this floater | ||
946 | menu->append(new LLMenuItemCheckGL("Clothing...", | ||
947 | &handle_clothing, | ||
948 | NULL, | ||
949 | NULL, | ||
950 | NULL)); | ||
951 | |||
952 | menu->append(new LLMenuItemCallGL("Debug Settings...", LLFloaterSettingsDebug::show, NULL, NULL)); | 962 | menu->append(new LLMenuItemCallGL("Debug Settings...", LLFloaterSettingsDebug::show, NULL, NULL)); |
953 | menu->append(new LLMenuItemCheckGL("View Admin Options", &handle_admin_override_toggle, NULL, &check_admin_override, NULL, 'V', MASK_CONTROL | MASK_ALT)); | 963 | menu->append(new LLMenuItemCheckGL("View Admin Options", &handle_admin_override_toggle, NULL, &check_admin_override, NULL, 'V', MASK_CONTROL | MASK_ALT)); |
954 | 964 | ||
@@ -991,6 +1001,7 @@ void init_debug_world_menu(LLMenuGL* menu) | |||
991 | 1001 | ||
992 | void handle_export_menus_to_xml(void*) | 1002 | void handle_export_menus_to_xml(void*) |
993 | { | 1003 | { |
1004 | |||
994 | LLFilePicker& picker = LLFilePicker::instance(); | 1005 | LLFilePicker& picker = LLFilePicker::instance(); |
995 | if(!picker.getSaveFile(LLFilePicker::FFSAVE_XML)) | 1006 | if(!picker.getSaveFile(LLFilePicker::FFSAVE_XML)) |
996 | { | 1007 | { |
@@ -1012,7 +1023,14 @@ extern BOOL gDebugSelectMgr; | |||
1012 | 1023 | ||
1013 | void init_debug_ui_menu(LLMenuGL* menu) | 1024 | void init_debug_ui_menu(LLMenuGL* menu) |
1014 | { | 1025 | { |
1015 | menu->append(new LLMenuItemCallGL("SLURL Test", &handle_slurl_test)); | 1026 | menu->append(new LLMenuItemCheckGL("Rotate Mini-Map", menu_toggle_control, NULL, menu_check_control, (void*)"MiniMapRotate")); |
1027 | menu->append(new LLMenuItemCheckGL("Use default system color picker", menu_toggle_control, NULL, menu_check_control, (void*)"UseDefaultColorPicker")); | ||
1028 | menu->append(new LLMenuItemCheckGL("Show search panel in overlay bar", menu_toggle_control, NULL, menu_check_control, (void*)"ShowSearchBar")); | ||
1029 | menu->appendSeparator(); | ||
1030 | |||
1031 | menu->append(new LLMenuItemCallGL("Web Browser Test", &handle_web_browser_test)); | ||
1032 | // commented out until work is complete: DEV-32268 | ||
1033 | // menu->append(new LLMenuItemCallGL("Buy Currency Test", &handle_buy_currency_test)); | ||
1016 | menu->append(new LLMenuItemCallGL("Editable UI", &edit_ui)); | 1034 | menu->append(new LLMenuItemCallGL("Editable UI", &edit_ui)); |
1017 | menu->append(new LLMenuItemCallGL( "Dump SelectMgr", &dump_select_mgr)); | 1035 | menu->append(new LLMenuItemCallGL( "Dump SelectMgr", &dump_select_mgr)); |
1018 | menu->append(new LLMenuItemCallGL( "Dump Inventory", &dump_inventory)); | 1036 | menu->append(new LLMenuItemCallGL( "Dump Inventory", &dump_inventory)); |
@@ -1036,6 +1054,7 @@ void init_debug_ui_menu(LLMenuGL* menu) | |||
1036 | menu->appendSeparator(); | 1054 | menu->appendSeparator(); |
1037 | menu->append(new LLMenuItemCheckGL("Show Time", menu_toggle_control, NULL, menu_check_control, (void*)"DebugShowTime")); | 1055 | menu->append(new LLMenuItemCheckGL("Show Time", menu_toggle_control, NULL, menu_check_control, (void*)"DebugShowTime")); |
1038 | menu->append(new LLMenuItemCheckGL("Show Render Info", menu_toggle_control, NULL, menu_check_control, (void*)"DebugShowRenderInfo")); | 1056 | menu->append(new LLMenuItemCheckGL("Show Render Info", menu_toggle_control, NULL, menu_check_control, (void*)"DebugShowRenderInfo")); |
1057 | menu->append(new LLMenuItemCheckGL("Show Matrices", menu_toggle_control, NULL, menu_check_control, (void*)"DebugShowRenderMatrices")); | ||
1039 | menu->append(new LLMenuItemCheckGL("Show Color Under Cursor", menu_toggle_control, NULL, menu_check_control, (void*)"DebugShowColor")); | 1058 | menu->append(new LLMenuItemCheckGL("Show Color Under Cursor", menu_toggle_control, NULL, menu_check_control, (void*)"DebugShowColor")); |
1040 | 1059 | ||
1041 | menu->createJumpKeys(); | 1060 | menu->createJumpKeys(); |
@@ -1044,6 +1063,7 @@ void init_debug_ui_menu(LLMenuGL* menu) | |||
1044 | void init_debug_xui_menu(LLMenuGL* menu) | 1063 | void init_debug_xui_menu(LLMenuGL* menu) |
1045 | { | 1064 | { |
1046 | menu->append(new LLMenuItemCallGL("Floater Test...", LLFloaterTest::show)); | 1065 | menu->append(new LLMenuItemCallGL("Floater Test...", LLFloaterTest::show)); |
1066 | menu->append(new LLMenuItemCallGL("Font Test...", LLFloaterFontTest::show)); | ||
1047 | menu->append(new LLMenuItemCallGL("Export Menus to XML...", handle_export_menus_to_xml)); | 1067 | menu->append(new LLMenuItemCallGL("Export Menus to XML...", handle_export_menus_to_xml)); |
1048 | menu->append(new LLMenuItemCallGL("Edit UI...", LLFloaterEditUI::show)); | 1068 | menu->append(new LLMenuItemCallGL("Edit UI...", LLFloaterEditUI::show)); |
1049 | menu->append(new LLMenuItemCallGL("Load from XML...", handle_load_from_xml)); | 1069 | menu->append(new LLMenuItemCallGL("Load from XML...", handle_load_from_xml)); |
@@ -1173,6 +1193,9 @@ void init_debug_rendering_menu(LLMenuGL* menu) | |||
1173 | sub_menu->append(new LLMenuItemCheckGL("Octree", &LLPipeline::toggleRenderDebug, NULL, | 1193 | sub_menu->append(new LLMenuItemCheckGL("Octree", &LLPipeline::toggleRenderDebug, NULL, |
1174 | &LLPipeline::toggleRenderDebugControl, | 1194 | &LLPipeline::toggleRenderDebugControl, |
1175 | (void*)LLPipeline::RENDER_DEBUG_OCTREE)); | 1195 | (void*)LLPipeline::RENDER_DEBUG_OCTREE)); |
1196 | sub_menu->append(new LLMenuItemCheckGL("Shadow Frusta", &LLPipeline::toggleRenderDebug, NULL, | ||
1197 | &LLPipeline::toggleRenderDebugControl, | ||
1198 | (void*)LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA)); | ||
1176 | sub_menu->append(new LLMenuItemCheckGL("Occlusion", &LLPipeline::toggleRenderDebug, NULL, | 1199 | sub_menu->append(new LLMenuItemCheckGL("Occlusion", &LLPipeline::toggleRenderDebug, NULL, |
1177 | &LLPipeline::toggleRenderDebugControl, | 1200 | &LLPipeline::toggleRenderDebugControl, |
1178 | (void*)LLPipeline::RENDER_DEBUG_OCCLUSION)); | 1201 | (void*)LLPipeline::RENDER_DEBUG_OCCLUSION)); |
@@ -1298,8 +1321,6 @@ void init_debug_rendering_menu(LLMenuGL* menu) | |||
1298 | menu->createJumpKeys(); | 1321 | menu->createJumpKeys(); |
1299 | } | 1322 | } |
1300 | 1323 | ||
1301 | extern BOOL gDebugAvatarRotation; | ||
1302 | |||
1303 | void init_debug_avatar_menu(LLMenuGL* menu) | 1324 | void init_debug_avatar_menu(LLMenuGL* menu) |
1304 | { | 1325 | { |
1305 | LLMenuGL* sub_menu = new LLMenuGL("Grab Baked Texture"); | 1326 | LLMenuGL* sub_menu = new LLMenuGL("Grab Baked Texture"); |
@@ -1344,9 +1365,15 @@ void init_debug_avatar_menu(LLMenuGL* menu) | |||
1344 | //menu->append(new LLMenuItemToggleGL("Show Attachment Points", &LLVOAvatar::sShowAttachmentPoints)); | 1365 | //menu->append(new LLMenuItemToggleGL("Show Attachment Points", &LLVOAvatar::sShowAttachmentPoints)); |
1345 | //diabling collision plane due to DEV-14477 -brad | 1366 | //diabling collision plane due to DEV-14477 -brad |
1346 | //menu->append(new LLMenuItemToggleGL("Show Collision Plane", &LLVOAvatar::sShowFootPlane)); | 1367 | //menu->append(new LLMenuItemToggleGL("Show Collision Plane", &LLVOAvatar::sShowFootPlane)); |
1347 | menu->append(new LLMenuItemToggleGL("Show Collision Skeleton", &LLVOAvatar::sShowCollisionVolumes)); | 1368 | menu->append(new LLMenuItemCheckGL("Show Collision Skeleton", |
1348 | menu->append(new LLMenuItemToggleGL( "Display Agent Target", &LLAgent::sDebugDisplayTarget)); | 1369 | &LLPipeline::toggleRenderDebug, NULL, |
1349 | menu->append(new LLMenuItemToggleGL( "Debug Rotation", &gDebugAvatarRotation)); | 1370 | &LLPipeline::toggleRenderDebugControl, |
1371 | (void*)LLPipeline::RENDER_DEBUG_AVATAR_VOLUME)); | ||
1372 | menu->append(new LLMenuItemCheckGL("Display Agent Target", | ||
1373 | &LLPipeline::toggleRenderDebug, NULL, | ||
1374 | &LLPipeline::toggleRenderDebugControl, | ||
1375 | (void*)LLPipeline::RENDER_DEBUG_AGENT_TARGET)); | ||
1376 | menu->append(new LLMenuItemToggleGL( "Debug Rotation", &LLVOAvatar::sDebugAvatarRotation)); | ||
1350 | menu->append(new LLMenuItemCallGL("Dump Attachments", handle_dump_attachments)); | 1377 | menu->append(new LLMenuItemCallGL("Dump Attachments", handle_dump_attachments)); |
1351 | menu->append(new LLMenuItemCallGL("Refresh Appearance", handle_rebake_textures, NULL, NULL, 'R', MASK_ALT | MASK_CONTROL )); | 1378 | menu->append(new LLMenuItemCallGL("Refresh Appearance", handle_rebake_textures, NULL, NULL, 'R', MASK_ALT | MASK_CONTROL )); |
1352 | #ifndef LL_RELEASE_FOR_DOWNLOAD | 1379 | #ifndef LL_RELEASE_FOR_DOWNLOAD |
@@ -1358,11 +1385,12 @@ void init_debug_avatar_menu(LLMenuGL* menu) | |||
1358 | 1385 | ||
1359 | void init_debug_baked_texture_menu(LLMenuGL* menu) | 1386 | void init_debug_baked_texture_menu(LLMenuGL* menu) |
1360 | { | 1387 | { |
1361 | menu->append(new LLMenuItemCallGL("Iris", handle_grab_texture, enable_grab_texture, (void*) LLVOAvatar::TEX_EYES_BAKED)); | 1388 | menu->append(new LLMenuItemCallGL("Iris", handle_grab_texture, enable_grab_texture, (void*) TEX_EYES_BAKED)); |
1362 | menu->append(new LLMenuItemCallGL("Head", handle_grab_texture, enable_grab_texture, (void*) LLVOAvatar::TEX_HEAD_BAKED)); | 1389 | menu->append(new LLMenuItemCallGL("Head", handle_grab_texture, enable_grab_texture, (void*) TEX_HEAD_BAKED)); |
1363 | menu->append(new LLMenuItemCallGL("Upper Body", handle_grab_texture, enable_grab_texture, (void*) LLVOAvatar::TEX_UPPER_BAKED)); | 1390 | menu->append(new LLMenuItemCallGL("Upper Body", handle_grab_texture, enable_grab_texture, (void*) TEX_UPPER_BAKED)); |
1364 | menu->append(new LLMenuItemCallGL("Lower Body", handle_grab_texture, enable_grab_texture, (void*) LLVOAvatar::TEX_LOWER_BAKED)); | 1391 | menu->append(new LLMenuItemCallGL("Lower Body", handle_grab_texture, enable_grab_texture, (void*) TEX_LOWER_BAKED)); |
1365 | menu->append(new LLMenuItemCallGL("Skirt", handle_grab_texture, enable_grab_texture, (void*) LLVOAvatar::TEX_SKIRT_BAKED)); | 1392 | menu->append(new LLMenuItemCallGL("Skirt", handle_grab_texture, enable_grab_texture, (void*) TEX_SKIRT_BAKED)); |
1393 | menu->append(new LLMenuItemCallGL("Hair", handle_grab_texture, enable_grab_texture, (void*) TEX_HAIR_BAKED)); | ||
1366 | menu->createJumpKeys(); | 1394 | menu->createJumpKeys(); |
1367 | } | 1395 | } |
1368 | 1396 | ||
@@ -1570,15 +1598,20 @@ class LLObjectEnableTouch : public view_listener_t | |||
1570 | 1598 | ||
1571 | // Update label based on the node touch name if available. | 1599 | // Update label based on the node touch name if available. |
1572 | LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(); | 1600 | LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(); |
1601 | |||
1602 | std::string touch_text; | ||
1573 | if (node && node->mValid && !node->mTouchName.empty()) | 1603 | if (node && node->mValid && !node->mTouchName.empty()) |
1574 | { | 1604 | { |
1575 | gMenuHolder->childSetText("Object Touch", node->mTouchName); | 1605 | touch_text = node->mTouchName; |
1576 | } | 1606 | } |
1577 | else | 1607 | else |
1578 | { | 1608 | { |
1579 | gMenuHolder->childSetText("Object Touch", userdata["data"].asString()); | 1609 | touch_text = userdata["data"].asString(); |
1580 | } | 1610 | } |
1581 | 1611 | ||
1612 | gMenuHolder->childSetText("Object Touch", touch_text); | ||
1613 | gMenuHolder->childSetText("Attachment Object Touch", touch_text); | ||
1614 | |||
1582 | return true; | 1615 | return true; |
1583 | } | 1616 | } |
1584 | }; | 1617 | }; |
@@ -2146,9 +2179,10 @@ class LLGoToObject : public view_listener_t | |||
2146 | //--------------------------------------------------------------------------- | 2179 | //--------------------------------------------------------------------------- |
2147 | // Parcel freeze, eject, etc. | 2180 | // Parcel freeze, eject, etc. |
2148 | //--------------------------------------------------------------------------- | 2181 | //--------------------------------------------------------------------------- |
2149 | void callback_freeze(S32 option, void* data) | 2182 | bool callback_freeze(const LLSD& notification, const LLSD& response) |
2150 | { | 2183 | { |
2151 | LLUUID* avatar_id = (LLUUID*) data; | 2184 | LLUUID avatar_id = notification["payload"]["avatar_id"].asUUID(); |
2185 | S32 option = LLNotification::getSelectedOption(notification, response); | ||
2152 | 2186 | ||
2153 | if (0 == option || 1 == option) | 2187 | if (0 == option || 1 == option) |
2154 | { | 2188 | { |
@@ -2160,7 +2194,7 @@ void callback_freeze(S32 option, void* data) | |||
2160 | } | 2194 | } |
2161 | 2195 | ||
2162 | LLMessageSystem* msg = gMessageSystem; | 2196 | LLMessageSystem* msg = gMessageSystem; |
2163 | LLViewerObject* avatar = gObjectList.findObject(*avatar_id); | 2197 | LLViewerObject* avatar = gObjectList.findObject(avatar_id); |
2164 | 2198 | ||
2165 | if (avatar) | 2199 | if (avatar) |
2166 | { | 2200 | { |
@@ -2169,16 +2203,15 @@ void callback_freeze(S32 option, void* data) | |||
2169 | msg->addUUID("AgentID", gAgent.getID()); | 2203 | msg->addUUID("AgentID", gAgent.getID()); |
2170 | msg->addUUID("SessionID", gAgent.getSessionID()); | 2204 | msg->addUUID("SessionID", gAgent.getSessionID()); |
2171 | msg->nextBlock("Data"); | 2205 | msg->nextBlock("Data"); |
2172 | msg->addUUID("TargetID", *avatar_id ); | 2206 | msg->addUUID("TargetID", avatar_id ); |
2173 | msg->addU32("Flags", flags ); | 2207 | msg->addU32("Flags", flags ); |
2174 | msg->sendReliable( avatar->getRegion()->getHost() ); | 2208 | msg->sendReliable( avatar->getRegion()->getHost() ); |
2175 | } | 2209 | } |
2176 | } | 2210 | } |
2177 | 2211 | return false; | |
2178 | delete avatar_id; | ||
2179 | avatar_id = NULL; | ||
2180 | } | 2212 | } |
2181 | 2213 | ||
2214 | |||
2182 | class LLAvatarFreeze : public view_listener_t | 2215 | class LLAvatarFreeze : public view_listener_t |
2183 | { | 2216 | { |
2184 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 2217 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
@@ -2186,23 +2219,25 @@ class LLAvatarFreeze : public view_listener_t | |||
2186 | LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() ); | 2219 | LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() ); |
2187 | if( avatar ) | 2220 | if( avatar ) |
2188 | { | 2221 | { |
2189 | LLUUID* avatar_id = new LLUUID( avatar->getID() ); | ||
2190 | std::string fullname = avatar->getFullname(); | 2222 | std::string fullname = avatar->getFullname(); |
2223 | LLSD payload; | ||
2224 | payload["avatar_id"] = avatar->getID(); | ||
2191 | 2225 | ||
2192 | if (!fullname.empty()) | 2226 | if (!fullname.empty()) |
2193 | { | 2227 | { |
2194 | LLStringUtil::format_map_t args; | 2228 | LLSD args; |
2195 | args["[AVATAR_NAME]"] = fullname; | 2229 | args["AVATAR_NAME"] = fullname; |
2196 | gViewerWindow->alertXml("FreezeAvatarFullname", | 2230 | LLNotifications::instance().add("FreezeAvatarFullname", |
2197 | args, | 2231 | args, |
2198 | callback_freeze, | 2232 | payload, |
2199 | (void*)avatar_id); | 2233 | callback_freeze); |
2200 | } | 2234 | } |
2201 | else | 2235 | else |
2202 | { | 2236 | { |
2203 | gViewerWindow->alertXml("FreezeAvatar", | 2237 | LLNotifications::instance().add("FreezeAvatar", |
2204 | callback_freeze, | 2238 | LLSD(), |
2205 | (void*)avatar_id); | 2239 | payload, |
2240 | callback_freeze); | ||
2206 | } | 2241 | } |
2207 | } | 2242 | } |
2208 | return true; | 2243 | return true; |
@@ -2248,26 +2283,16 @@ class LLAvatarDebug : public view_listener_t | |||
2248 | } | 2283 | } |
2249 | }; | 2284 | }; |
2250 | 2285 | ||
2251 | struct MenuCallbackData | 2286 | bool callback_eject(const LLSD& notification, const LLSD& response) |
2252 | { | ||
2253 | bool ban_enabled; | ||
2254 | LLUUID avatar_id; | ||
2255 | }; | ||
2256 | |||
2257 | void callback_eject(S32 option, void* data) | ||
2258 | { | 2287 | { |
2259 | MenuCallbackData *callback_data = (MenuCallbackData*)data; | 2288 | S32 option = LLNotification::getSelectedOption(notification, response); |
2260 | if (!callback_data) | ||
2261 | { | ||
2262 | return; | ||
2263 | } | ||
2264 | if (2 == option) | 2289 | if (2 == option) |
2265 | { | 2290 | { |
2266 | // Cancle button. | 2291 | // Cancel button. |
2267 | return; | 2292 | return false; |
2268 | } | 2293 | } |
2269 | LLUUID avatar_id = callback_data->avatar_id; | 2294 | LLUUID avatar_id = notification["payload"]["avatar_id"].asUUID(); |
2270 | bool ban_enabled = callback_data->ban_enabled; | 2295 | bool ban_enabled = notification["payload"]["ban_enabled"].asBoolean(); |
2271 | 2296 | ||
2272 | if (0 == option) | 2297 | if (0 == option) |
2273 | { | 2298 | { |
@@ -2309,10 +2334,7 @@ void callback_eject(S32 option, void* data) | |||
2309 | msg->sendReliable( avatar->getRegion()->getHost() ); | 2334 | msg->sendReliable( avatar->getRegion()->getHost() ); |
2310 | } | 2335 | } |
2311 | } | 2336 | } |
2312 | 2337 | return false; | |
2313 | |||
2314 | delete callback_data; | ||
2315 | callback_data = NULL; | ||
2316 | } | 2338 | } |
2317 | 2339 | ||
2318 | class LLAvatarEject : public view_listener_t | 2340 | class LLAvatarEject : public view_listener_t |
@@ -2322,8 +2344,8 @@ class LLAvatarEject : public view_listener_t | |||
2322 | LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() ); | 2344 | LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() ); |
2323 | if( avatar ) | 2345 | if( avatar ) |
2324 | { | 2346 | { |
2325 | MenuCallbackData *data = new MenuCallbackData; | 2347 | LLSD payload; |
2326 | (*data).avatar_id = avatar->getID(); | 2348 | payload["avatar_id"] = avatar->getID(); |
2327 | std::string fullname = avatar->getFullname(); | 2349 | std::string fullname = avatar->getFullname(); |
2328 | 2350 | ||
2329 | const LLVector3d& pos = avatar->getPositionGlobal(); | 2351 | const LLVector3d& pos = avatar->getPositionGlobal(); |
@@ -2331,40 +2353,42 @@ class LLAvatarEject : public view_listener_t | |||
2331 | 2353 | ||
2332 | if (LLViewerParcelMgr::getInstance()->isParcelOwnedByAgent(parcel,GP_LAND_MANAGE_BANNED)) | 2354 | if (LLViewerParcelMgr::getInstance()->isParcelOwnedByAgent(parcel,GP_LAND_MANAGE_BANNED)) |
2333 | { | 2355 | { |
2334 | (*data).ban_enabled = true; | 2356 | payload["ban_enabled"] = true; |
2335 | if (!fullname.empty()) | 2357 | if (!fullname.empty()) |
2336 | { | 2358 | { |
2337 | LLStringUtil::format_map_t args; | 2359 | LLSD args; |
2338 | args["[AVATAR_NAME]"] = fullname; | 2360 | args["AVATAR_NAME"] = fullname; |
2339 | gViewerWindow->alertXml("EjectAvatarFullname", | 2361 | LLNotifications::instance().add("EjectAvatarFullname", |
2340 | args, | 2362 | args, |
2341 | callback_eject, | 2363 | payload, |
2342 | (void*)data); | 2364 | callback_eject); |
2343 | } | 2365 | } |
2344 | else | 2366 | else |
2345 | { | 2367 | { |
2346 | gViewerWindow->alertXml("EjectAvatar", | 2368 | LLNotifications::instance().add("EjectAvatarFullname", |
2347 | callback_eject, | 2369 | LLSD(), |
2348 | (void*)data); | 2370 | payload, |
2371 | callback_eject); | ||
2349 | } | 2372 | } |
2350 | } | 2373 | } |
2351 | else | 2374 | else |
2352 | { | 2375 | { |
2353 | (*data).ban_enabled = false; | 2376 | payload["ban_enabled"] = false; |
2354 | if (!fullname.empty()) | 2377 | if (!fullname.empty()) |
2355 | { | 2378 | { |
2356 | LLStringUtil::format_map_t args; | 2379 | LLSD args; |
2357 | args["[AVATAR_NAME]"] = fullname; | 2380 | args["AVATAR_NAME"] = fullname; |
2358 | gViewerWindow->alertXml("EjectAvatarFullnameNoBan", | 2381 | LLNotifications::instance().add("EjectAvatarFullnameNoBan", |
2359 | args, | 2382 | args, |
2360 | callback_eject, | 2383 | payload, |
2361 | (void*)data); | 2384 | callback_eject); |
2362 | } | 2385 | } |
2363 | else | 2386 | else |
2364 | { | 2387 | { |
2365 | gViewerWindow->alertXml("EjectAvatarNoBan", | 2388 | LLNotifications::instance().add("EjectAvatarNoBan", |
2366 | callback_eject, | 2389 | LLSD(), |
2367 | (void*)data); | 2390 | payload, |
2391 | callback_eject); | ||
2368 | } | 2392 | } |
2369 | } | 2393 | } |
2370 | } | 2394 | } |
@@ -2411,13 +2435,16 @@ class LLAvatarGiveCard : public view_listener_t | |||
2411 | if(dest && dest->isAvatar()) | 2435 | if(dest && dest->isAvatar()) |
2412 | { | 2436 | { |
2413 | bool found_name = false; | 2437 | bool found_name = false; |
2414 | LLStringUtil::format_map_t args; | 2438 | LLSD args; |
2439 | LLSD old_args; | ||
2415 | LLNameValue* nvfirst = dest->getNVPair("FirstName"); | 2440 | LLNameValue* nvfirst = dest->getNVPair("FirstName"); |
2416 | LLNameValue* nvlast = dest->getNVPair("LastName"); | 2441 | LLNameValue* nvlast = dest->getNVPair("LastName"); |
2417 | if(nvfirst && nvlast) | 2442 | if(nvfirst && nvlast) |
2418 | { | 2443 | { |
2419 | args["[FIRST]"] = nvfirst->getString(); | 2444 | args["FIRST"] = nvfirst->getString(); |
2420 | args["[LAST]"] = nvlast->getString(); | 2445 | args["LAST"] = nvlast->getString(); |
2446 | old_args["FIRST"] = nvfirst->getString(); | ||
2447 | old_args["LAST"] = nvlast->getString(); | ||
2421 | found_name = true; | 2448 | found_name = true; |
2422 | } | 2449 | } |
2423 | LLViewerRegion* region = dest->getRegion(); | 2450 | LLViewerRegion* region = dest->getRegion(); |
@@ -2439,11 +2466,11 @@ class LLAvatarGiveCard : public view_listener_t | |||
2439 | transaction_id.generate(); | 2466 | transaction_id.generate(); |
2440 | msg->addUUIDFast(_PREHASH_TransactionID, transaction_id); | 2467 | msg->addUUIDFast(_PREHASH_TransactionID, transaction_id); |
2441 | msg->sendReliable(dest_host); | 2468 | msg->sendReliable(dest_host); |
2442 | LLNotifyBox::showXml("OfferedCard", args); | 2469 | LLNotifications::instance().add("OfferedCard", args); |
2443 | } | 2470 | } |
2444 | else | 2471 | else |
2445 | { | 2472 | { |
2446 | gViewerWindow->alertXml("CantOfferCallingCard", args); | 2473 | LLNotifications::instance().add("CantOfferCallingCard", old_args); |
2447 | } | 2474 | } |
2448 | } | 2475 | } |
2449 | return true; | 2476 | return true; |
@@ -2460,8 +2487,9 @@ void login_done(S32 which, void *user) | |||
2460 | } | 2487 | } |
2461 | 2488 | ||
2462 | 2489 | ||
2463 | void callback_leave_group(S32 option, void *userdata) | 2490 | bool callback_leave_group(const LLSD& notification, const LLSD& response) |
2464 | { | 2491 | { |
2492 | S32 option = LLNotification::getSelectedOption(notification, response); | ||
2465 | if (option == 0) | 2493 | if (option == 0) |
2466 | { | 2494 | { |
2467 | LLMessageSystem *msg = gMessageSystem; | 2495 | LLMessageSystem *msg = gMessageSystem; |
@@ -2474,15 +2502,16 @@ void callback_leave_group(S32 option, void *userdata) | |||
2474 | msg->addUUIDFast(_PREHASH_GroupID, gAgent.mGroupID ); | 2502 | msg->addUUIDFast(_PREHASH_GroupID, gAgent.mGroupID ); |
2475 | gAgent.sendReliableMessage(); | 2503 | gAgent.sendReliableMessage(); |
2476 | } | 2504 | } |
2505 | return false; | ||
2477 | } | 2506 | } |
2478 | 2507 | ||
2479 | void handle_leave_group(void *) | 2508 | void handle_leave_group(void *) |
2480 | { | 2509 | { |
2481 | if (gAgent.getGroupID() != LLUUID::null) | 2510 | if (gAgent.getGroupID() != LLUUID::null) |
2482 | { | 2511 | { |
2483 | LLStringUtil::format_map_t args; | 2512 | LLSD args; |
2484 | args["[GROUP]"] = gAgent.mGroupName; | 2513 | args["GROUP"] = gAgent.mGroupName; |
2485 | gViewerWindow->alertXml("GroupLeaveConfirmMember", args, callback_leave_group); | 2514 | LLNotifications::instance().add("GroupLeaveConfirmMember", args, LLSD(), callback_leave_group); |
2486 | } | 2515 | } |
2487 | } | 2516 | } |
2488 | 2517 | ||
@@ -2545,7 +2574,7 @@ void handle_buy_object(LLSaleInfo sale_info) | |||
2545 | { | 2574 | { |
2546 | if(!LLSelectMgr::getInstance()->selectGetAllRootsValid()) | 2575 | if(!LLSelectMgr::getInstance()->selectGetAllRootsValid()) |
2547 | { | 2576 | { |
2548 | LLNotifyBox::showXml("UnableToBuyWhileDownloading"); | 2577 | LLNotifications::instance().add("UnableToBuyWhileDownloading"); |
2549 | return; | 2578 | return; |
2550 | } | 2579 | } |
2551 | 2580 | ||
@@ -2554,7 +2583,7 @@ void handle_buy_object(LLSaleInfo sale_info) | |||
2554 | BOOL owners_identical = LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name); | 2583 | BOOL owners_identical = LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name); |
2555 | if (!owners_identical) | 2584 | if (!owners_identical) |
2556 | { | 2585 | { |
2557 | LLNotifyBox::showXml("CannotBuyObjectsFromDifferentOwners"); | 2586 | LLNotifications::instance().add("CannotBuyObjectsFromDifferentOwners"); |
2558 | return; | 2587 | return; |
2559 | } | 2588 | } |
2560 | 2589 | ||
@@ -2564,7 +2593,7 @@ void handle_buy_object(LLSaleInfo sale_info) | |||
2564 | valid &= LLSelectMgr::getInstance()->selectGetAggregatePermissions(ag_perm); | 2593 | valid &= LLSelectMgr::getInstance()->selectGetAggregatePermissions(ag_perm); |
2565 | if(!valid || !sale_info.isForSale() || !perm.allowTransferTo(gAgent.getID())) | 2594 | if(!valid || !sale_info.isForSale() || !perm.allowTransferTo(gAgent.getID())) |
2566 | { | 2595 | { |
2567 | LLNotifyBox::showXml("ObjectNotForSale"); | 2596 | LLNotifications::instance().add("ObjectNotForSale"); |
2568 | return; | 2597 | return; |
2569 | } | 2598 | } |
2570 | 2599 | ||
@@ -2617,6 +2646,11 @@ void handle_region_dump_settings(void*) | |||
2617 | } | 2646 | } |
2618 | } | 2647 | } |
2619 | 2648 | ||
2649 | void handle_show_notifications_console(void *) | ||
2650 | { | ||
2651 | LLFloaterNotificationConsole::showInstance(); | ||
2652 | } | ||
2653 | |||
2620 | void handle_dump_group_info(void *) | 2654 | void handle_dump_group_info(void *) |
2621 | { | 2655 | { |
2622 | llinfos << "group " << gAgent.mGroupName << llendl; | 2656 | llinfos << "group " << gAgent.mGroupName << llendl; |
@@ -2710,22 +2744,22 @@ void set_god_level(U8 god_level) | |||
2710 | // inventory in items may change in god mode | 2744 | // inventory in items may change in god mode |
2711 | gObjectList.dirtyAllObjectInventory(); | 2745 | gObjectList.dirtyAllObjectInventory(); |
2712 | 2746 | ||
2713 | if(gViewerWindow) | 2747 | if(gViewerWindow) |
2714 | { | 2748 | { |
2715 | gViewerWindow->setMenuBackgroundColor(god_level > GOD_NOT, | 2749 | gViewerWindow->setMenuBackgroundColor(god_level > GOD_NOT, |
2716 | LLViewerLogin::getInstance()->isInProductionGrid()); | 2750 | LLViewerLogin::getInstance()->isInProductionGrid()); |
2717 | } | 2751 | } |
2718 | 2752 | ||
2719 | LLStringUtil::format_map_t args; | 2753 | LLSD args; |
2720 | if(god_level > GOD_NOT) | 2754 | if(god_level > GOD_NOT) |
2721 | { | 2755 | { |
2722 | args["[LEVEL]"] = llformat("%d",(S32)god_level); | 2756 | args["LEVEL"] = llformat("%d",(S32)god_level); |
2723 | LLNotifyBox::showXml("EnteringGodMode", args); | 2757 | LLNotifications::instance().add("EnteringGodMode", args); |
2724 | } | 2758 | } |
2725 | else | 2759 | else |
2726 | { | 2760 | { |
2727 | args["[LEVEL]"] = llformat("%d",(S32)old_god_level); | 2761 | args["LEVEL"] = llformat("%d",(S32)old_god_level); |
2728 | LLNotifyBox::showXml("LeavingGodMode", args); | 2762 | LLNotifications::instance().add("LeavingGodMode", args); |
2729 | } | 2763 | } |
2730 | 2764 | ||
2731 | 2765 | ||
@@ -2850,13 +2884,13 @@ void request_friendship(const LLUUID& dest_id) | |||
2850 | if(dest && dest->isAvatar()) | 2884 | if(dest && dest->isAvatar()) |
2851 | { | 2885 | { |
2852 | std::string fullname; | 2886 | std::string fullname; |
2853 | LLStringUtil::format_map_t args; | 2887 | LLSD args; |
2854 | LLNameValue* nvfirst = dest->getNVPair("FirstName"); | 2888 | LLNameValue* nvfirst = dest->getNVPair("FirstName"); |
2855 | LLNameValue* nvlast = dest->getNVPair("LastName"); | 2889 | LLNameValue* nvlast = dest->getNVPair("LastName"); |
2856 | if(nvfirst && nvlast) | 2890 | if(nvfirst && nvlast) |
2857 | { | 2891 | { |
2858 | args["[FIRST]"] = nvfirst->getString(); | 2892 | args["FIRST"] = nvfirst->getString(); |
2859 | args["[LAST]"] = nvlast->getString(); | 2893 | args["LAST"] = nvlast->getString(); |
2860 | fullname = nvfirst->getString(); | 2894 | fullname = nvfirst->getString(); |
2861 | fullname += " "; | 2895 | fullname += " "; |
2862 | fullname += nvlast->getString(); | 2896 | fullname += nvlast->getString(); |
@@ -2867,7 +2901,7 @@ void request_friendship(const LLUUID& dest_id) | |||
2867 | } | 2901 | } |
2868 | else | 2902 | else |
2869 | { | 2903 | { |
2870 | gViewerWindow->alertXml("CantOfferFriendship"); | 2904 | LLNotifications::instance().add("CantOfferFriendship"); |
2871 | } | 2905 | } |
2872 | } | 2906 | } |
2873 | } | 2907 | } |
@@ -2877,12 +2911,10 @@ class LLEditEnableCustomizeAvatar : public view_listener_t | |||
2877 | { | 2911 | { |
2878 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 2912 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
2879 | { | 2913 | { |
2880 | LLVOAvatar* avatar = gAgent.getAvatarObject(); | 2914 | bool new_value = (gAgent.getAvatarObject() && |
2881 | 2915 | gAgent.getAvatarObject()->isFullyLoaded() && | |
2882 | bool enabled = ((avatar && avatar->isFullyLoaded()) && | 2916 | gAgent.areWearablesLoaded()); |
2883 | (gAgent.getWearablesLoaded())); | 2917 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); |
2884 | |||
2885 | gMenuHolder->findControl(userdata["control"].asString())->setValue(enabled); | ||
2886 | return true; | 2918 | return true; |
2887 | } | 2919 | } |
2888 | }; | 2920 | }; |
@@ -3069,86 +3101,6 @@ void velocity_interpolate( void* data ) | |||
3069 | } | 3101 | } |
3070 | 3102 | ||
3071 | 3103 | ||
3072 | void update_fov(S32 increments) | ||
3073 | { | ||
3074 | F32 old_fov = LLViewerCamera::getInstance()->getDefaultFOV(); | ||
3075 | // for each increment, FoV is 20% bigger | ||
3076 | F32 new_fov = old_fov * pow(1.2f, increments); | ||
3077 | |||
3078 | // cap the FoV | ||
3079 | new_fov = llclamp(new_fov, MIN_FIELD_OF_VIEW, MAX_FIELD_OF_VIEW); | ||
3080 | |||
3081 | if (new_fov != old_fov) | ||
3082 | { | ||
3083 | LLMessageSystem* msg = gMessageSystem; | ||
3084 | msg->newMessageFast(_PREHASH_AgentFOV); | ||
3085 | msg->nextBlockFast(_PREHASH_AgentData); | ||
3086 | msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); | ||
3087 | msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); | ||
3088 | msg->addU32Fast(_PREHASH_CircuitCode, gMessageSystem->mOurCircuitCode); | ||
3089 | |||
3090 | msg->nextBlockFast(_PREHASH_FOVBlock); | ||
3091 | msg->addU32Fast(_PREHASH_GenCounter, 0); | ||
3092 | msg->addF32Fast(_PREHASH_VerticalAngle, new_fov); | ||
3093 | |||
3094 | gAgent.sendReliableMessage(); | ||
3095 | |||
3096 | // force agent to update dirty patches | ||
3097 | LLViewerCamera::getInstance()->setDefaultFOV(new_fov); | ||
3098 | LLViewerCamera::getInstance()->setView(new_fov); | ||
3099 | } | ||
3100 | } | ||
3101 | |||
3102 | class LLViewZoomOut : public view_listener_t | ||
3103 | { | ||
3104 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | ||
3105 | { | ||
3106 | update_fov(1); | ||
3107 | return true; | ||
3108 | } | ||
3109 | }; | ||
3110 | |||
3111 | class LLViewZoomIn : public view_listener_t | ||
3112 | { | ||
3113 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | ||
3114 | { | ||
3115 | update_fov(-1); | ||
3116 | return true; | ||
3117 | } | ||
3118 | }; | ||
3119 | |||
3120 | class LLViewZoomDefault : public view_listener_t | ||
3121 | { | ||
3122 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | ||
3123 | { | ||
3124 | F32 old_fov = LLViewerCamera::getInstance()->getView(); | ||
3125 | // for each increment, FoV is 20% bigger | ||
3126 | F32 new_fov = DEFAULT_FIELD_OF_VIEW; | ||
3127 | |||
3128 | if (new_fov != old_fov) | ||
3129 | { | ||
3130 | LLMessageSystem* msg = gMessageSystem; | ||
3131 | msg->newMessageFast(_PREHASH_AgentFOV); | ||
3132 | msg->nextBlockFast(_PREHASH_AgentData); | ||
3133 | msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); | ||
3134 | msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); | ||
3135 | msg->addU32Fast(_PREHASH_CircuitCode, gMessageSystem->mOurCircuitCode); | ||
3136 | msg->nextBlockFast(_PREHASH_FOVBlock); | ||
3137 | msg->addU32Fast(_PREHASH_GenCounter, 0); | ||
3138 | msg->addF32Fast(_PREHASH_VerticalAngle, new_fov); | ||
3139 | |||
3140 | gAgent.sendReliableMessage(); | ||
3141 | |||
3142 | // force agent to update dirty patches | ||
3143 | LLViewerCamera::getInstance()->setDefaultFOV(new_fov); | ||
3144 | LLViewerCamera::getInstance()->setView(new_fov); | ||
3145 | } | ||
3146 | return true; | ||
3147 | } | ||
3148 | }; | ||
3149 | |||
3150 | |||
3151 | |||
3152 | void toggle_wind_audio(void) | 3104 | void toggle_wind_audio(void) |
3153 | { | 3105 | { |
3154 | if (gAudiop) | 3106 | if (gAudiop) |
@@ -3188,7 +3140,7 @@ void handle_reset_view() | |||
3188 | if( (CAMERA_MODE_CUSTOMIZE_AVATAR == gAgent.getCameraMode()) && gFloaterCustomize ) | 3140 | if( (CAMERA_MODE_CUSTOMIZE_AVATAR == gAgent.getCameraMode()) && gFloaterCustomize ) |
3189 | { | 3141 | { |
3190 | // Show dialog box if needed. | 3142 | // Show dialog box if needed. |
3191 | gFloaterCustomize->askToSaveAllIfDirty( reset_view_final, NULL ); | 3143 | gFloaterCustomize->askToSaveIfDirty( reset_view_final, NULL ); |
3192 | } | 3144 | } |
3193 | else | 3145 | else |
3194 | { | 3146 | { |
@@ -3277,7 +3229,7 @@ void disabled_duplicate(void*) | |||
3277 | { | 3229 | { |
3278 | if (LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()) | 3230 | if (LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()) |
3279 | { | 3231 | { |
3280 | LLNotifyBox::showXml("CopyFailed"); | 3232 | LLNotifications::instance().add("CopyFailed"); |
3281 | } | 3233 | } |
3282 | } | 3234 | } |
3283 | 3235 | ||
@@ -3410,7 +3362,7 @@ void handle_claim_public_land(void*) | |||
3410 | { | 3362 | { |
3411 | if (LLViewerParcelMgr::getInstance()->getSelectionRegion() != gAgent.getRegion()) | 3363 | if (LLViewerParcelMgr::getInstance()->getSelectionRegion() != gAgent.getRegion()) |
3412 | { | 3364 | { |
3413 | LLNotifyBox::showXml("ClaimPublicLand"); | 3365 | LLNotifications::instance().add("ClaimPublicLand"); |
3414 | return; | 3366 | return; |
3415 | } | 3367 | } |
3416 | 3368 | ||
@@ -3643,7 +3595,7 @@ void derez_objects(EDeRezDestination dest, const LLUUID& dest_id) | |||
3643 | } | 3595 | } |
3644 | else if(!error.empty()) | 3596 | else if(!error.empty()) |
3645 | { | 3597 | { |
3646 | gViewerWindow->alertXml(error); | 3598 | LLNotifications::instance().add(error); |
3647 | } | 3599 | } |
3648 | } | 3600 | } |
3649 | 3601 | ||
@@ -3670,16 +3622,13 @@ class LLObjectReturn : public view_listener_t | |||
3670 | 3622 | ||
3671 | mObjectSelection = LLSelectMgr::getInstance()->getEditSelection(); | 3623 | mObjectSelection = LLSelectMgr::getInstance()->getEditSelection(); |
3672 | 3624 | ||
3673 | gViewerWindow->alertXml("ReturnToOwner", | 3625 | LLNotifications::instance().add("ReturnToOwner", LLSD(), LLSD(), boost::bind(&LLObjectReturn::onReturnToOwner, this, _1, _2)); |
3674 | onReturnToOwner, | ||
3675 | (void*)this); | ||
3676 | return true; | 3626 | return true; |
3677 | } | 3627 | } |
3678 | 3628 | ||
3679 | static void onReturnToOwner(S32 option, void* data) | 3629 | bool onReturnToOwner(const LLSD& notification, const LLSD& response) |
3680 | { | 3630 | { |
3681 | LLObjectReturn* object_return = (LLObjectReturn*)data; | 3631 | S32 option = LLNotification::getSelectedOption(notification, response); |
3682 | |||
3683 | if (0 == option) | 3632 | if (0 == option) |
3684 | { | 3633 | { |
3685 | // Ignore category ID for this derez destination. | 3634 | // Ignore category ID for this derez destination. |
@@ -3687,7 +3636,8 @@ class LLObjectReturn : public view_listener_t | |||
3687 | } | 3636 | } |
3688 | 3637 | ||
3689 | // drop reference to current selection | 3638 | // drop reference to current selection |
3690 | object_return->mObjectSelection = NULL; | 3639 | mObjectSelection = NULL; |
3640 | return false; | ||
3691 | } | 3641 | } |
3692 | 3642 | ||
3693 | protected: | 3643 | protected: |
@@ -3824,48 +3774,46 @@ void handle_take() | |||
3824 | { | 3774 | { |
3825 | category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT); | 3775 | category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT); |
3826 | } | 3776 | } |
3827 | LLUUID* cat_id = new LLUUID(category_id); | 3777 | LLSD payload; |
3778 | payload["folder_id"] = category_id; | ||
3779 | |||
3780 | LLNotification::Params params("ConfirmObjectTakeLock"); | ||
3781 | params.payload(payload) | ||
3782 | .functor(confirm_take); | ||
3783 | |||
3828 | if(locked_but_takeable_object || | 3784 | if(locked_but_takeable_object || |
3829 | !you_own_everything) | 3785 | !you_own_everything) |
3830 | { | 3786 | { |
3831 | if(locked_but_takeable_object && you_own_everything) | 3787 | if(locked_but_takeable_object && you_own_everything) |
3832 | { | 3788 | { |
3833 | gViewerWindow->alertXml("ConfirmObjectTakeLock", | 3789 | params.name("ConfirmObjectTakeLock"); |
3834 | confirm_take, | ||
3835 | (void*)cat_id); | ||
3836 | 3790 | ||
3837 | } | 3791 | } |
3838 | else if(!locked_but_takeable_object && !you_own_everything) | 3792 | else if(!locked_but_takeable_object && !you_own_everything) |
3839 | { | 3793 | { |
3840 | gViewerWindow->alertXml("ConfirmObjectTakeNoOwn", | 3794 | params.name("ConfirmObjectTakeNoOwn"); |
3841 | confirm_take, | ||
3842 | (void*)cat_id); | ||
3843 | } | 3795 | } |
3844 | else | 3796 | else |
3845 | { | 3797 | { |
3846 | gViewerWindow->alertXml("ConfirmObjectTakeLockNoOwn", | 3798 | params.name("ConfirmObjectTakeLockNoOwn"); |
3847 | confirm_take, | ||
3848 | (void*)cat_id); | ||
3849 | } | 3799 | } |
3850 | 3800 | ||
3851 | 3801 | LLNotifications::instance().add(params); | |
3852 | } | 3802 | } |
3853 | |||
3854 | else | 3803 | else |
3855 | { | 3804 | { |
3856 | confirm_take(0, (void*)cat_id); | 3805 | LLNotifications::instance().forceResponse(params, 0); |
3857 | } | 3806 | } |
3858 | } | 3807 | } |
3859 | 3808 | ||
3860 | void confirm_take(S32 option, void* data) | 3809 | bool confirm_take(const LLSD& notification, const LLSD& response) |
3861 | { | 3810 | { |
3862 | LLUUID* cat_id = (LLUUID*)data; | 3811 | S32 option = LLNotification::getSelectedOption(notification, response); |
3863 | if(!cat_id) return; | ||
3864 | if(enable_take() && (option == 0)) | 3812 | if(enable_take() && (option == 0)) |
3865 | { | 3813 | { |
3866 | derez_objects(DRD_TAKE_INTO_AGENT_INVENTORY, *cat_id); | 3814 | derez_objects(DRD_TAKE_INTO_AGENT_INVENTORY, notification["payload"]["folder_id"].asUUID()); |
3867 | } | 3815 | } |
3868 | delete cat_id; | 3816 | return false; |
3869 | } | 3817 | } |
3870 | 3818 | ||
3871 | // You can take an item when it is public and transferrable, or when | 3819 | // You can take an item when it is public and transferrable, or when |
@@ -3936,13 +3884,67 @@ class LLToolsEnableTake : public view_listener_t | |||
3936 | } | 3884 | } |
3937 | }; | 3885 | }; |
3938 | 3886 | ||
3939 | void callback_show_buy_currency(S32 option, void*) | 3887 | // This is a small helper function to determine if we have a buy or a |
3888 | // take in the selection. This method is to help with the aliasing | ||
3889 | // problems of putting buy and take in the same pie menu space. After | ||
3890 | // a fair amont of discussion, it was determined to prefer buy over | ||
3891 | // take. The reasoning follows from the fact that when users walk up | ||
3892 | // to buy something, they will click on one or more items. Thus, if | ||
3893 | // anything is for sale, it becomes a buy operation, and the server | ||
3894 | // will group all of the buy items, and copyable/modifiable items into | ||
3895 | // one package and give the end user as much as the permissions will | ||
3896 | // allow. If the user wanted to take something, they will select fewer | ||
3897 | // and fewer items until only 'takeable' items are left. The one | ||
3898 | // exception is if you own everything in the selection that is for | ||
3899 | // sale, in this case, you can't buy stuff from yourself, so you can | ||
3900 | // take it. | ||
3901 | // return value = TRUE if selection is a 'buy'. | ||
3902 | // FALSE if selection is a 'take' | ||
3903 | BOOL is_selection_buy_not_take() | ||
3904 | { | ||
3905 | for (LLObjectSelection::root_iterator iter = LLSelectMgr::getInstance()->getSelection()->root_begin(); | ||
3906 | iter != LLSelectMgr::getInstance()->getSelection()->root_end(); iter++) | ||
3907 | { | ||
3908 | LLSelectNode* node = *iter; | ||
3909 | LLViewerObject* obj = node->getObject(); | ||
3910 | if(obj && !(obj->permYouOwner()) && (node->mSaleInfo.isForSale())) | ||
3911 | { | ||
3912 | // you do not own the object and it is for sale, thus, | ||
3913 | // it's a buy | ||
3914 | return TRUE; | ||
3915 | } | ||
3916 | } | ||
3917 | return FALSE; | ||
3918 | } | ||
3919 | |||
3920 | S32 selection_price() | ||
3921 | { | ||
3922 | S32 total_price = 0; | ||
3923 | for (LLObjectSelection::root_iterator iter = LLSelectMgr::getInstance()->getSelection()->root_begin(); | ||
3924 | iter != LLSelectMgr::getInstance()->getSelection()->root_end(); iter++) | ||
3925 | { | ||
3926 | LLSelectNode* node = *iter; | ||
3927 | LLViewerObject* obj = node->getObject(); | ||
3928 | if(obj && !(obj->permYouOwner()) && (node->mSaleInfo.isForSale())) | ||
3929 | { | ||
3930 | // you do not own the object and it is for sale. | ||
3931 | // Add its price. | ||
3932 | total_price += node->mSaleInfo.getSalePrice(); | ||
3933 | } | ||
3934 | } | ||
3935 | |||
3936 | return total_price; | ||
3937 | } | ||
3938 | |||
3939 | bool callback_show_buy_currency(const LLSD& notification, const LLSD& response) | ||
3940 | { | 3940 | { |
3941 | S32 option = LLNotification::getSelectedOption(notification, response); | ||
3941 | if (0 == option) | 3942 | if (0 == option) |
3942 | { | 3943 | { |
3943 | llinfos << "Loading page " << BUY_CURRENCY_URL << llendl; | 3944 | llinfos << "Loading page " << BUY_CURRENCY_URL << llendl; |
3944 | LLWeb::loadURL(BUY_CURRENCY_URL); | 3945 | LLWeb::loadURL(BUY_CURRENCY_URL); |
3945 | } | 3946 | } |
3947 | return false; | ||
3946 | } | 3948 | } |
3947 | 3949 | ||
3948 | 3950 | ||
@@ -3957,14 +3959,13 @@ void show_buy_currency(const char* extra) | |||
3957 | } | 3959 | } |
3958 | mesg << "Go to " << BUY_CURRENCY_URL << "\nfor information on purchasing currency?"; | 3960 | mesg << "Go to " << BUY_CURRENCY_URL << "\nfor information on purchasing currency?"; |
3959 | 3961 | ||
3960 | LLStringUtil::format_map_t args; | 3962 | LLSD args; |
3961 | if (extra != NULL) | 3963 | if (extra != NULL) |
3962 | { | 3964 | { |
3963 | args["[EXTRA]"] = extra; | 3965 | args["EXTRA"] = extra; |
3964 | } | 3966 | } |
3965 | args["[URL]"] = BUY_CURRENCY_URL; | 3967 | args["URL"] = BUY_CURRENCY_URL; |
3966 | gViewerWindow->alertXml("PromptGoToCurrencyPage", args, | 3968 | LLNotifications::instance().add("PromptGoToCurrencyPage", args, LLSD(), callback_show_buy_currency); |
3967 | callback_show_buy_currency); | ||
3968 | } | 3969 | } |
3969 | 3970 | ||
3970 | void handle_buy_currency(void*) | 3971 | void handle_buy_currency(void*) |
@@ -4028,18 +4029,6 @@ BOOL sitting_on_selection() | |||
4028 | return (avatar->mIsSitting && avatar->getRoot() == root_object); | 4029 | return (avatar->mIsSitting && avatar->getRoot() == root_object); |
4029 | } | 4030 | } |
4030 | 4031 | ||
4031 | class LLToolsSaveToInventory : public view_listener_t | ||
4032 | { | ||
4033 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | ||
4034 | { | ||
4035 | if(enable_save_into_inventory(NULL)) | ||
4036 | { | ||
4037 | derez_objects(DRD_SAVE_INTO_AGENT_INVENTORY, LLUUID::null); | ||
4038 | } | ||
4039 | return true; | ||
4040 | } | ||
4041 | }; | ||
4042 | |||
4043 | class LLToolsSaveToObjectInventory : public view_listener_t | 4032 | class LLToolsSaveToObjectInventory : public view_listener_t |
4044 | { | 4033 | { |
4045 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 4034 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
@@ -4144,29 +4133,29 @@ class LLToolsLink : public view_listener_t | |||
4144 | { | 4133 | { |
4145 | if(!LLSelectMgr::getInstance()->selectGetAllRootsValid()) | 4134 | if(!LLSelectMgr::getInstance()->selectGetAllRootsValid()) |
4146 | { | 4135 | { |
4147 | LLNotifyBox::showXml("UnableToLinkWhileDownloading"); | 4136 | LLNotifications::instance().add("UnableToLinkWhileDownloading"); |
4148 | return true; | 4137 | return true; |
4149 | } | 4138 | } |
4150 | 4139 | ||
4151 | S32 object_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount(); | 4140 | S32 object_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount(); |
4152 | if (object_count > MAX_CHILDREN_PER_TASK + 1) | 4141 | if (object_count > MAX_CHILDREN_PER_TASK + 1) |
4153 | { | 4142 | { |
4154 | LLStringUtil::format_map_t args; | 4143 | LLSD args; |
4155 | args["[COUNT]"] = llformat("%d", object_count); | 4144 | args["COUNT"] = llformat("%d", object_count); |
4156 | int max = MAX_CHILDREN_PER_TASK+1; | 4145 | int max = MAX_CHILDREN_PER_TASK+1; |
4157 | args["[MAX]"] = llformat("%d", max); | 4146 | args["MAX"] = llformat("%d", max); |
4158 | gViewerWindow->alertXml("UnableToLinkObjects", args); | 4147 | LLNotifications::instance().add("UnableToLinkObjects", args); |
4159 | return true; | 4148 | return true; |
4160 | } | 4149 | } |
4161 | 4150 | ||
4162 | if(LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() < 2) | 4151 | if(LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() < 2) |
4163 | { | 4152 | { |
4164 | gViewerWindow->alertXml("CannotLinkIncompleteSet"); | 4153 | LLNotifications::instance().add("CannotLinkIncompleteSet"); |
4165 | return true; | 4154 | return true; |
4166 | } | 4155 | } |
4167 | if(!LLSelectMgr::getInstance()->selectGetRootsModify()) | 4156 | if(!LLSelectMgr::getInstance()->selectGetRootsModify()) |
4168 | { | 4157 | { |
4169 | gViewerWindow->alertXml("CannotLinkModify"); | 4158 | LLNotifications::instance().add("CannotLinkModify"); |
4170 | return true; | 4159 | return true; |
4171 | } | 4160 | } |
4172 | LLUUID owner_id; | 4161 | LLUUID owner_id; |
@@ -4176,7 +4165,7 @@ class LLToolsLink : public view_listener_t | |||
4176 | // we don't actually care if you're the owner, but novices are | 4165 | // we don't actually care if you're the owner, but novices are |
4177 | // the most likely to be stumped by this one, so offer the | 4166 | // the most likely to be stumped by this one, so offer the |
4178 | // easiest and most likely solution. | 4167 | // easiest and most likely solution. |
4179 | gViewerWindow->alertXml("CannotLinkDifferentOwners"); | 4168 | LLNotifications::instance().add("CannotLinkDifferentOwners"); |
4180 | return true; | 4169 | return true; |
4181 | } | 4170 | } |
4182 | LLSelectMgr::getInstance()->sendLink(); | 4171 | LLSelectMgr::getInstance()->sendLink(); |
@@ -4423,6 +4412,16 @@ void handle_force_delete(void*) | |||
4423 | LLSelectMgr::getInstance()->selectForceDelete(); | 4412 | LLSelectMgr::getInstance()->selectForceDelete(); |
4424 | } | 4413 | } |
4425 | 4414 | ||
4415 | class LLViewEnableJoystickFlycam : public view_listener_t | ||
4416 | { | ||
4417 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | ||
4418 | { | ||
4419 | bool new_value = (gSavedSettings.getBOOL("JoystickEnabled") && gSavedSettings.getBOOL("JoystickFlycamEnabled")); | ||
4420 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); | ||
4421 | return true; | ||
4422 | } | ||
4423 | }; | ||
4424 | |||
4426 | class LLViewEnableLastChatter : public view_listener_t | 4425 | class LLViewEnableLastChatter : public view_listener_t |
4427 | { | 4426 | { |
4428 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 4427 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
@@ -4741,7 +4740,7 @@ class LLWorldSetBusy : public view_listener_t | |||
4741 | else | 4740 | else |
4742 | { | 4741 | { |
4743 | gAgent.setBusy(); | 4742 | gAgent.setBusy(); |
4744 | gViewerWindow->alertXml("BusyModeSet"); | 4743 | LLNotifications::instance().add("BusyModeSet"); |
4745 | } | 4744 | } |
4746 | return true; | 4745 | return true; |
4747 | } | 4746 | } |
@@ -4767,7 +4766,7 @@ class LLWorldCreateLandmark : public view_listener_t | |||
4767 | if (!agent_parcel->getAllowLandmark() | 4766 | if (!agent_parcel->getAllowLandmark() |
4768 | && !LLViewerParcelMgr::isParcelOwnedByAgent(agent_parcel, GP_LAND_ALLOW_LANDMARK)) | 4767 | && !LLViewerParcelMgr::isParcelOwnedByAgent(agent_parcel, GP_LAND_ALLOW_LANDMARK)) |
4769 | { | 4768 | { |
4770 | gViewerWindow->alertXml("CannotCreateLandmarkNotOwner"); | 4769 | LLNotifications::instance().add("CannotCreateLandmarkNotOwner"); |
4771 | return true; | 4770 | return true; |
4772 | } | 4771 | } |
4773 | 4772 | ||
@@ -4881,16 +4880,14 @@ class LLAvatarAddFriend : public view_listener_t | |||
4881 | } | 4880 | } |
4882 | }; | 4881 | }; |
4883 | 4882 | ||
4884 | void complete_give_money(S32 option, void* user_data) | 4883 | bool complete_give_money(const LLSD& notification, const LLSD& response, LLObjectSelectionHandle handle) |
4885 | { | 4884 | { |
4885 | S32 option = LLNotification::getSelectedOption(notification, response); | ||
4886 | if (option == 0) | 4886 | if (option == 0) |
4887 | { | 4887 | { |
4888 | gAgent.clearBusy(); | 4888 | gAgent.clearBusy(); |
4889 | } | 4889 | } |
4890 | 4890 | ||
4891 | LLObjectSelectionHandle handle(*(LLObjectSelectionHandle*)user_data); | ||
4892 | delete (LLObjectSelectionHandle*)user_data; | ||
4893 | |||
4894 | LLViewerObject* objectp = handle->getPrimaryObject(); | 4891 | LLViewerObject* objectp = handle->getPrimaryObject(); |
4895 | 4892 | ||
4896 | // Show avatar's name if paying attachment | 4893 | // Show avatar's name if paying attachment |
@@ -4916,19 +4913,22 @@ void complete_give_money(S32 option, void* user_data) | |||
4916 | LLFloaterPay::payViaObject(&give_money, objectp->getID()); | 4913 | LLFloaterPay::payViaObject(&give_money, objectp->getID()); |
4917 | } | 4914 | } |
4918 | } | 4915 | } |
4916 | return false; | ||
4919 | } | 4917 | } |
4920 | 4918 | ||
4921 | bool handle_give_money_dialog() | 4919 | bool handle_give_money_dialog() |
4922 | { | 4920 | { |
4923 | LLObjectSelectionHandle* handlep = new LLObjectSelectionHandle(LLSelectMgr::getInstance()->getSelection()); | 4921 | LLNotification::Params params("BusyModePay"); |
4922 | params.functor(boost::bind(complete_give_money, _1, _2, LLSelectMgr::getInstance()->getSelection())); | ||
4923 | |||
4924 | if (gAgent.getBusy()) | 4924 | if (gAgent.getBusy()) |
4925 | { | 4925 | { |
4926 | // warn users of being in busy mode during a transaction | 4926 | // warn users of being in busy mode during a transaction |
4927 | gViewerWindow->alertXml("BusyModePay", complete_give_money, handlep); | 4927 | LLNotifications::instance().add(params); |
4928 | } | 4928 | } |
4929 | else | 4929 | else |
4930 | { | 4930 | { |
4931 | complete_give_money(1, handlep); | 4931 | LLNotifications::instance().forceResponse(params, 1); |
4932 | } | 4932 | } |
4933 | return true; | 4933 | return true; |
4934 | } | 4934 | } |
@@ -5079,7 +5079,7 @@ class LLShowFloater : public view_listener_t | |||
5079 | } | 5079 | } |
5080 | else if (floater_name == "appearance") | 5080 | else if (floater_name == "appearance") |
5081 | { | 5081 | { |
5082 | if (gAgent.getWearablesLoaded()) | 5082 | if (gAgent.areWearablesLoaded()) |
5083 | { | 5083 | { |
5084 | gAgent.changeCameraToCustomizeAvatar(); | 5084 | gAgent.changeCameraToCustomizeAvatar(); |
5085 | } | 5085 | } |
@@ -5130,7 +5130,7 @@ class LLShowFloater : public view_listener_t | |||
5130 | } | 5130 | } |
5131 | else if (floater_name == "stat bar") | 5131 | else if (floater_name == "stat bar") |
5132 | { | 5132 | { |
5133 | gDebugView->mFloaterStatsp->setVisible(!gDebugView->mFloaterStatsp->getVisible()); | 5133 | LLFloaterStats::toggleInstance(); |
5134 | } | 5134 | } |
5135 | else if (floater_name == "my land") | 5135 | else if (floater_name == "my land") |
5136 | { | 5136 | { |
@@ -5217,6 +5217,10 @@ class LLShowFloater : public view_listener_t | |||
5217 | { | 5217 | { |
5218 | LLFloaterBeacons::toggleInstance(LLSD()); | 5218 | LLFloaterBeacons::toggleInstance(LLSD()); |
5219 | } | 5219 | } |
5220 | else if (floater_name == "perm prefs") | ||
5221 | { | ||
5222 | LLFloaterPerms::toggleInstance(LLSD()); | ||
5223 | } | ||
5220 | return true; | 5224 | return true; |
5221 | } | 5225 | } |
5222 | }; | 5226 | }; |
@@ -5262,7 +5266,7 @@ class LLFloaterVisible : public view_listener_t | |||
5262 | } | 5266 | } |
5263 | else if (floater_name == "stat bar") | 5267 | else if (floater_name == "stat bar") |
5264 | { | 5268 | { |
5265 | new_value = gDebugView->mFloaterStatsp->getVisible(); | 5269 | new_value = LLFloaterStats::instanceVisible(); |
5266 | } | 5270 | } |
5267 | else if (floater_name == "active speakers") | 5271 | else if (floater_name == "active speakers") |
5268 | { | 5272 | { |
@@ -5282,14 +5286,14 @@ class LLFloaterVisible : public view_listener_t | |||
5282 | } | 5286 | } |
5283 | }; | 5287 | }; |
5284 | 5288 | ||
5285 | void callback_show_url(S32 option, void* data) | 5289 | bool callback_show_url(const LLSD& notification, const LLSD& response) |
5286 | { | 5290 | { |
5287 | std::string* urlp = (std::string*)data; | 5291 | S32 option = LLNotification::getSelectedOption(notification, response); |
5288 | if (0 == option) | 5292 | if (0 == option) |
5289 | { | 5293 | { |
5290 | LLWeb::loadURL(*urlp); | 5294 | LLWeb::loadURL(notification["payload"]["url"].asString()); |
5291 | } | 5295 | } |
5292 | delete urlp; | 5296 | return false; |
5293 | } | 5297 | } |
5294 | 5298 | ||
5295 | class LLPromptShowURL : public view_listener_t | 5299 | class LLPromptShowURL : public view_listener_t |
@@ -5302,8 +5306,17 @@ class LLPromptShowURL : public view_listener_t | |||
5302 | { | 5306 | { |
5303 | std::string alert = param.substr(0, offset); | 5307 | std::string alert = param.substr(0, offset); |
5304 | std::string url = param.substr(offset+1); | 5308 | std::string url = param.substr(offset+1); |
5305 | std::string* url_copy = new std::string(url); | 5309 | |
5306 | gViewerWindow->alertXml(alert, callback_show_url, url_copy); | 5310 | if(gSavedSettings.getBOOL("UseExternalBrowser")) |
5311 | { | ||
5312 | LLSD payload; | ||
5313 | payload["url"] = url; | ||
5314 | LLNotifications::instance().add(alert, LLSD(), payload, callback_show_url); | ||
5315 | } | ||
5316 | else | ||
5317 | { | ||
5318 | LLWeb::loadURL(url); | ||
5319 | } | ||
5307 | } | 5320 | } |
5308 | else | 5321 | else |
5309 | { | 5322 | { |
@@ -5313,6 +5326,39 @@ class LLPromptShowURL : public view_listener_t | |||
5313 | } | 5326 | } |
5314 | }; | 5327 | }; |
5315 | 5328 | ||
5329 | bool callback_show_file(const LLSD& notification, const LLSD& response) | ||
5330 | { | ||
5331 | S32 option = LLNotification::getSelectedOption(notification, response); | ||
5332 | if (0 == option) | ||
5333 | { | ||
5334 | LLWeb::loadURL(notification["payload"]["url"]); | ||
5335 | } | ||
5336 | return false; | ||
5337 | } | ||
5338 | |||
5339 | class LLPromptShowFile : public view_listener_t | ||
5340 | { | ||
5341 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | ||
5342 | { | ||
5343 | std::string param = userdata.asString(); | ||
5344 | std::string::size_type offset = param.find(","); | ||
5345 | if (offset != param.npos) | ||
5346 | { | ||
5347 | std::string alert = param.substr(0, offset); | ||
5348 | std::string file = param.substr(offset+1); | ||
5349 | |||
5350 | LLSD payload; | ||
5351 | payload["url"] = file; | ||
5352 | LLNotifications::instance().add(alert, LLSD(), payload, callback_show_file); | ||
5353 | } | ||
5354 | else | ||
5355 | { | ||
5356 | llinfos << "PromptShowFile invalid parameters! Expecting \"ALERT,FILE\"." << llendl; | ||
5357 | } | ||
5358 | return true; | ||
5359 | } | ||
5360 | }; | ||
5361 | |||
5316 | class LLShowAgentProfile : public view_listener_t | 5362 | class LLShowAgentProfile : public view_listener_t |
5317 | { | 5363 | { |
5318 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 5364 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
@@ -5401,7 +5447,6 @@ class LLLandEdit : public view_listener_t | |||
5401 | 5447 | ||
5402 | LLViewerParcelMgr::getInstance()->selectParcelAt( LLToolPie::getInstance()->getPick().mPosGlobal ); | 5448 | LLViewerParcelMgr::getInstance()->selectParcelAt( LLToolPie::getInstance()->getPick().mPosGlobal ); |
5403 | 5449 | ||
5404 | gFloaterTools->showMore(TRUE); | ||
5405 | gFloaterView->bringToFront( gFloaterTools ); | 5450 | gFloaterView->bringToFront( gFloaterTools ); |
5406 | 5451 | ||
5407 | // Switch to land edit toolset | 5452 | // Switch to land edit toolset |
@@ -5712,8 +5757,7 @@ class LLAttachmentEnableDrop : public view_listener_t | |||
5712 | { | 5757 | { |
5713 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 5758 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) |
5714 | { | 5759 | { |
5715 | LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); | 5760 | BOOL can_build = gAgent.isGodlike() || (LLViewerParcelMgr::getInstance()->agentCanBuild()); |
5716 | BOOL can_build = gAgent.isGodlike() || (parcel && parcel->getAllowModify()); | ||
5717 | 5761 | ||
5718 | //Add an inventory observer to only allow dropping the newly attached item | 5762 | //Add an inventory observer to only allow dropping the newly attached item |
5719 | //once it exists in your inventory. Look at Jira 2422. | 5763 | //once it exists in your inventory. Look at Jira 2422. |
@@ -5944,11 +5988,11 @@ void queue_actions(LLFloaterScriptQueue* q, const std::string& noscriptmsg, cons | |||
5944 | { | 5988 | { |
5945 | if ( !func.scripted ) | 5989 | if ( !func.scripted ) |
5946 | { | 5990 | { |
5947 | gViewerWindow->alertXml(noscriptmsg); | 5991 | LLNotifications::instance().add(noscriptmsg); |
5948 | } | 5992 | } |
5949 | else if ( !func.modifiable ) | 5993 | else if ( !func.modifiable ) |
5950 | { | 5994 | { |
5951 | gViewerWindow->alertXml(nomodmsg); | 5995 | LLNotifications::instance().add(nomodmsg); |
5952 | } | 5996 | } |
5953 | else | 5997 | else |
5954 | { | 5998 | { |
@@ -6169,13 +6213,6 @@ class LLToggleControl : public view_listener_t | |||
6169 | } | 6213 | } |
6170 | }; | 6214 | }; |
6171 | 6215 | ||
6172 | // As above, but can be a callback from a LLCheckboxCtrl | ||
6173 | void check_toggle_control( LLUICtrl *, void* user_data ) | ||
6174 | { | ||
6175 | BOOL checked = gSavedSettings.getBOOL( static_cast<char*>(user_data) ); | ||
6176 | gSavedSettings.setBOOL( static_cast<char*>(user_data), !checked ); | ||
6177 | } | ||
6178 | |||
6179 | BOOL menu_check_control( void* user_data) | 6216 | BOOL menu_check_control( void* user_data) |
6180 | { | 6217 | { |
6181 | return gSavedSettings.getBOOL((char*)user_data); | 6218 | return gSavedSettings.getBOOL((char*)user_data); |
@@ -6402,16 +6439,6 @@ BOOL enable_save_into_inventory(void*) | |||
6402 | return FALSE; | 6439 | return FALSE; |
6403 | } | 6440 | } |
6404 | 6441 | ||
6405 | class LLToolsEnableSaveToInventory : public view_listener_t | ||
6406 | { | ||
6407 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | ||
6408 | { | ||
6409 | bool new_value = enable_save_into_inventory(NULL); | ||
6410 | gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); | ||
6411 | return true; | ||
6412 | } | ||
6413 | }; | ||
6414 | |||
6415 | BOOL enable_save_into_task_inventory(void*) | 6442 | BOOL enable_save_into_task_inventory(void*) |
6416 | { | 6443 | { |
6417 | LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(); | 6444 | LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(); |
@@ -6724,12 +6751,12 @@ void handle_debug_avatar_textures(void*) | |||
6724 | 6751 | ||
6725 | void handle_grab_texture(void* data) | 6752 | void handle_grab_texture(void* data) |
6726 | { | 6753 | { |
6727 | LLVOAvatar::ETextureIndex index = (LLVOAvatar::ETextureIndex)((intptr_t)data); | 6754 | ETextureIndex index = (ETextureIndex)((intptr_t)data); |
6728 | LLVOAvatar* avatar = gAgent.getAvatarObject(); | 6755 | LLVOAvatar* avatar = gAgent.getAvatarObject(); |
6729 | if ( avatar ) | 6756 | if ( avatar ) |
6730 | { | 6757 | { |
6731 | const LLUUID& asset_id = avatar->grabLocalTexture(index); | 6758 | const LLUUID& asset_id = avatar->grabLocalTexture(index); |
6732 | llinfos << "Adding baked texture " << asset_id << " to inventory." << llendl; | 6759 | LL_INFOS("texture") << "Adding baked texture " << asset_id << " to inventory." << llendl; |
6733 | LLAssetType::EType asset_type = LLAssetType::AT_TEXTURE; | 6760 | LLAssetType::EType asset_type = LLAssetType::AT_TEXTURE; |
6734 | LLInventoryType::EType inv_type = LLInventoryType::IT_TEXTURE; | 6761 | LLInventoryType::EType inv_type = LLInventoryType::IT_TEXTURE; |
6735 | LLUUID folder_id(gInventory.findCategoryUUIDForType(asset_type)); | 6762 | LLUUID folder_id(gInventory.findCategoryUUIDForType(asset_type)); |
@@ -6738,21 +6765,24 @@ void handle_grab_texture(void* data) | |||
6738 | std::string name = "Baked "; | 6765 | std::string name = "Baked "; |
6739 | switch (index) | 6766 | switch (index) |
6740 | { | 6767 | { |
6741 | case LLVOAvatar::TEX_EYES_BAKED: | 6768 | case TEX_EYES_BAKED: |
6742 | name.append("Iris"); | 6769 | name.append("Iris"); |
6743 | break; | 6770 | break; |
6744 | case LLVOAvatar::TEX_HEAD_BAKED: | 6771 | case TEX_HEAD_BAKED: |
6745 | name.append("Head"); | 6772 | name.append("Head"); |
6746 | break; | 6773 | break; |
6747 | case LLVOAvatar::TEX_UPPER_BAKED: | 6774 | case TEX_UPPER_BAKED: |
6748 | name.append("Upper Body"); | 6775 | name.append("Upper Body"); |
6749 | break; | 6776 | break; |
6750 | case LLVOAvatar::TEX_LOWER_BAKED: | 6777 | case TEX_LOWER_BAKED: |
6751 | name.append("Lower Body"); | 6778 | name.append("Lower Body"); |
6752 | break; | 6779 | break; |
6753 | case LLVOAvatar::TEX_SKIRT_BAKED: | 6780 | case TEX_SKIRT_BAKED: |
6754 | name.append("Skirt"); | 6781 | name.append("Skirt"); |
6755 | break; | 6782 | break; |
6783 | case TEX_HAIR_BAKED: | ||
6784 | name.append("Hair"); | ||
6785 | break; | ||
6756 | default: | 6786 | default: |
6757 | name.append("Unknown"); | 6787 | name.append("Unknown"); |
6758 | break; | 6788 | break; |
@@ -6814,7 +6844,7 @@ void handle_grab_texture(void* data) | |||
6814 | 6844 | ||
6815 | BOOL enable_grab_texture(void* data) | 6845 | BOOL enable_grab_texture(void* data) |
6816 | { | 6846 | { |
6817 | LLVOAvatar::ETextureIndex index = (LLVOAvatar::ETextureIndex)((intptr_t)data); | 6847 | ETextureIndex index = (ETextureIndex)((intptr_t)data); |
6818 | LLVOAvatar* avatar = gAgent.getAvatarObject(); | 6848 | LLVOAvatar* avatar = gAgent.getAvatarObject(); |
6819 | if ( avatar ) | 6849 | if ( avatar ) |
6820 | { | 6850 | { |
@@ -6965,7 +6995,7 @@ void handle_save_to_xml(void*) | |||
6965 | LLFloater* frontmost = gFloaterView->getFrontmost(); | 6995 | LLFloater* frontmost = gFloaterView->getFrontmost(); |
6966 | if (!frontmost) | 6996 | if (!frontmost) |
6967 | { | 6997 | { |
6968 | gViewerWindow->alertXml("NoFrontmostFloater"); | 6998 | LLNotifications::instance().add("NoFrontmostFloater"); |
6969 | return; | 6999 | return; |
6970 | } | 7000 | } |
6971 | 7001 | ||
@@ -6998,10 +7028,52 @@ void handle_load_from_xml(void*) | |||
6998 | } | 7028 | } |
6999 | } | 7029 | } |
7000 | 7030 | ||
7001 | void handle_slurl_test(void*) | 7031 | void handle_web_browser_test(void*) |
7002 | { | 7032 | { |
7003 | std::string test_slurl = "http://secondlife.com/app/search/slurls.html"; | 7033 | const bool open_links_externally = false; |
7004 | LLFloaterMediaBrowser::showInstance(test_slurl); | 7034 | const bool open_app_slurls = true; |
7035 | LLFloaterHtml::getInstance()->show( | ||
7036 | "http://secondlife.com/app/search/slurls.html", | ||
7037 | "Web Browser Test", | ||
7038 | open_links_externally, | ||
7039 | open_app_slurls); | ||
7040 | } | ||
7041 | |||
7042 | void handle_buy_currency_test(void*) | ||
7043 | { | ||
7044 | std::string url = | ||
7045 | "http://sarahd-sl-13041.webdev.lindenlab.com/app/lindex/index.php?agent_id=[AGENT_ID]&secure_session_id=[SESSION_ID]&lang=[LANGUAGE]"; | ||
7046 | |||
7047 | LLStringUtil::format_map_t replace; | ||
7048 | replace["[AGENT_ID]"] = gAgent.getID().asString(); | ||
7049 | replace["[SESSION_ID]"] = gAgent.getSecureSessionID().asString(); | ||
7050 | |||
7051 | // *TODO: Replace with call to LLUI::getLanguage() after windows-setup | ||
7052 | // branch merges in. JC | ||
7053 | std::string language = "en-us"; | ||
7054 | language = gSavedSettings.getString("Language"); | ||
7055 | if (language.empty() || language == "default") | ||
7056 | { | ||
7057 | language = gSavedSettings.getString("InstallLanguage"); | ||
7058 | } | ||
7059 | if (language.empty() || language == "default") | ||
7060 | { | ||
7061 | language = gSavedSettings.getString("SystemLanguage"); | ||
7062 | } | ||
7063 | if (language.empty() || language == "default") | ||
7064 | { | ||
7065 | language = "en-us"; | ||
7066 | } | ||
7067 | |||
7068 | replace["[LANGUAGE]"] = language; | ||
7069 | LLStringUtil::format(url, replace); | ||
7070 | |||
7071 | llinfos << "buy currency url " << url << llendl; | ||
7072 | |||
7073 | LLFloaterHtmlCurrency* floater = LLFloaterHtmlCurrency::showInstance(url); | ||
7074 | // Needed so we can use secondlife:///app/floater/self/close SLURLs | ||
7075 | floater->setTrusted(true); | ||
7076 | floater->center(); | ||
7005 | } | 7077 | } |
7006 | 7078 | ||
7007 | void handle_rebake_textures(void*) | 7079 | void handle_rebake_textures(void*) |
@@ -9495,6 +9567,24 @@ static void addMenu(view_listener_t *menu, const char *name) | |||
9495 | 9567 | ||
9496 | void initialize_menus() | 9568 | void initialize_menus() |
9497 | { | 9569 | { |
9570 | // A parameterized event handler used as ctrl-8/9/0 zoom controls below. | ||
9571 | class LLZoomer : public view_listener_t | ||
9572 | { | ||
9573 | public: | ||
9574 | // The "mult" parameter says whether "val" is a multiplier or used to set the value. | ||
9575 | LLZoomer(F32 val, bool mult=true) : mVal(val), mMult(mult) {} | ||
9576 | bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | ||
9577 | { | ||
9578 | F32 new_fov_rad = mMult ? LLViewerCamera::getInstance()->getDefaultFOV() * mVal : mVal; | ||
9579 | LLViewerCamera::getInstance()->setDefaultFOV(new_fov_rad); | ||
9580 | gSavedSettings.setF32("CameraAngle", LLViewerCamera::getInstance()->getView()); // setView may have clamped it. | ||
9581 | return true; | ||
9582 | } | ||
9583 | private: | ||
9584 | F32 mVal; | ||
9585 | bool mMult; | ||
9586 | }; | ||
9587 | |||
9498 | // File menu | 9588 | // File menu |
9499 | init_menu_file(); | 9589 | init_menu_file(); |
9500 | 9590 | ||
@@ -9535,14 +9625,14 @@ void initialize_menus() | |||
9535 | addMenu(new LLViewHighlightTransparent(), "View.HighlightTransparent"); | 9625 | addMenu(new LLViewHighlightTransparent(), "View.HighlightTransparent"); |
9536 | addMenu(new LLViewToggleRenderType(), "View.ToggleRenderType"); | 9626 | addMenu(new LLViewToggleRenderType(), "View.ToggleRenderType"); |
9537 | addMenu(new LLViewShowHUDAttachments(), "View.ShowHUDAttachments"); | 9627 | addMenu(new LLViewShowHUDAttachments(), "View.ShowHUDAttachments"); |
9538 | addMenu(new LLViewZoomOut(), "View.ZoomOut"); | 9628 | addMenu(new LLZoomer(1.2f), "View.ZoomOut"); |
9539 | addMenu(new LLViewZoomIn(), "View.ZoomIn"); | 9629 | addMenu(new LLZoomer(1/1.2f), "View.ZoomIn"); |
9540 | addMenu(new LLViewZoomDefault(), "View.ZoomDefault"); | 9630 | addMenu(new LLZoomer(DEFAULT_FIELD_OF_VIEW, false), "View.ZoomDefault"); |
9541 | addMenu(new LLViewFullscreen(), "View.Fullscreen"); | 9631 | addMenu(new LLViewFullscreen(), "View.Fullscreen"); |
9542 | addMenu(new LLViewToggleAdvanced(), "View.ToggleAdvanced"); | 9632 | addMenu(new LLViewDefaultUISize(), "View.DefaultUISize"); |
9543 | |||
9544 | 9633 | ||
9545 | addMenu(new LLViewEnableMouselook(), "View.EnableMouselook"); | 9634 | addMenu(new LLViewEnableMouselook(), "View.EnableMouselook"); |
9635 | addMenu(new LLViewEnableJoystickFlycam(), "View.EnableJoystickFlycam"); | ||
9546 | addMenu(new LLViewEnableLastChatter(), "View.EnableLastChatter"); | 9636 | addMenu(new LLViewEnableLastChatter(), "View.EnableLastChatter"); |
9547 | 9637 | ||
9548 | addMenu(new LLViewCheckBuildMode(), "View.CheckBuildMode"); | 9638 | addMenu(new LLViewCheckBuildMode(), "View.CheckBuildMode"); |
@@ -9596,7 +9686,6 @@ void initialize_menus() | |||
9596 | addMenu(new LLToolsLookAtSelection(), "Tools.LookAtSelection"); | 9686 | addMenu(new LLToolsLookAtSelection(), "Tools.LookAtSelection"); |
9597 | addMenu(new LLToolsTake(), "Tools.Take"); | 9687 | addMenu(new LLToolsTake(), "Tools.Take"); |
9598 | addMenu(new LLToolsTakeCopy(), "Tools.TakeCopy"); | 9688 | addMenu(new LLToolsTakeCopy(), "Tools.TakeCopy"); |
9599 | addMenu(new LLToolsSaveToInventory(), "Tools.SaveToInventory"); | ||
9600 | addMenu(new LLToolsSaveToObjectInventory(), "Tools.SaveToObjectInventory"); | 9689 | addMenu(new LLToolsSaveToObjectInventory(), "Tools.SaveToObjectInventory"); |
9601 | addMenu(new LLToolsSelectedScriptAction(), "Tools.SelectedScriptAction"); | 9690 | addMenu(new LLToolsSelectedScriptAction(), "Tools.SelectedScriptAction"); |
9602 | addMenu(new LLToolsSetBulkPerms(), "Tools.SetBulkPerms"); | 9691 | addMenu(new LLToolsSetBulkPerms(), "Tools.SetBulkPerms"); |
@@ -9606,7 +9695,6 @@ void initialize_menus() | |||
9606 | addMenu(new LLToolsEnableUnlink(), "Tools.EnableUnlink"); | 9695 | addMenu(new LLToolsEnableUnlink(), "Tools.EnableUnlink"); |
9607 | addMenu(new LLToolsEnableTake(), "Tools.EnableTake"); | 9696 | addMenu(new LLToolsEnableTake(), "Tools.EnableTake"); |
9608 | addMenu(new LLToolsEnableTakeCopy(), "Tools.EnableTakeCopy"); | 9697 | addMenu(new LLToolsEnableTakeCopy(), "Tools.EnableTakeCopy"); |
9609 | addMenu(new LLToolsEnableSaveToInventory(), "Tools.SaveToInventory"); | ||
9610 | addMenu(new LLToolsEnableSaveToObjectInventory(), "Tools.SaveToObjectInventory"); | 9698 | addMenu(new LLToolsEnableSaveToObjectInventory(), "Tools.SaveToObjectInventory"); |
9611 | 9699 | ||
9612 | /*addMenu(new LLToolsVisibleBuyObject(), "Tools.VisibleBuyObject"); | 9700 | /*addMenu(new LLToolsVisibleBuyObject(), "Tools.VisibleBuyObject"); |