aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/newview/llviewermenu.cpp
diff options
context:
space:
mode:
authorJacek Antonelli2009-08-29 17:44:38 -0500
committerJacek Antonelli2009-08-29 22:49:51 -0500
commit6a5aab98892df74f60743f5b789959c9593d6647 (patch)
tree62da18f8540879ed01e12eeb0ce49375474272e4 /linden/indra/newview/llviewermenu.cpp
parentMerge branch 'mac-openal-url' into next (diff)
parentConverted 1.23 XUI files to unix line endings. (diff)
downloadmeta-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.cpp718
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
222using namespace LLVOAvatarDefines;
213void init_client_menu(LLMenuGL* menu); 223void init_client_menu(LLMenuGL* menu);
214void init_server_menu(LLMenuGL* menu); 224void init_server_menu(LLMenuGL* menu);
215 225
@@ -283,9 +293,6 @@ typedef LLMemberListener<LLView> view_listener_t;
283void handle_leave_group(void *); 293void handle_leave_group(void *);
284 294
285// File Menu 295// File Menu
286const char* upload_pick(void* data);
287void handle_upload(void* data);
288//void handle_upload_object(void* data);
289void handle_compress_image(void*); 296void handle_compress_image(void*);
290BOOL enable_save_as(void *); 297BOOL enable_save_as(void *);
291 298
@@ -294,6 +301,8 @@ void handle_dump_group_info(void *);
294void handle_dump_capabilities_info(void *); 301void handle_dump_capabilities_info(void *);
295void handle_dump_focus(void*); 302void handle_dump_focus(void*);
296 303
304// Advanced->Consoles menu
305void handle_show_notifications_console(void*);
297void handle_region_dump_settings(void*); 306void handle_region_dump_settings(void*);
298void handle_region_dump_temp_asset_data(void*); 307void handle_region_dump_temp_asset_data(void*);
299void handle_region_clear_temp_asset_data(void*); 308void 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.
308BOOL enable_take(); 317BOOL enable_take();
309void handle_take(); 318void handle_take();
310void confirm_take(S32 option, void* data); 319bool confirm_take(const LLSD& notification, const LLSD& response);
311BOOL enable_buy(void*); 320BOOL enable_buy(void*);
312void handle_buy(void *); 321void handle_buy(void *);
313void handle_buy_object(LLSaleInfo sale_info); 322void handle_buy_object(LLSaleInfo sale_info);
@@ -329,7 +338,6 @@ void handle_agent_stop_moving(void*);
329void print_packets_lost(void*); 338void print_packets_lost(void*);
330void drop_packet(void*); 339void drop_packet(void*);
331void velocity_interpolate( void* data ); 340void velocity_interpolate( void* data );
332void update_fov(S32 increments);
333void toggle_wind_audio(void); 341void toggle_wind_audio(void);
334void toggle_water_audio(void); 342void toggle_water_audio(void);
335void handle_rebake_textures(void*); 343void handle_rebake_textures(void*);
@@ -358,7 +366,8 @@ void run_vectorize_perf_test(void *)
358 366
359// Debug UI 367// Debug UI
360void handle_web_search_demo(void*); 368void handle_web_search_demo(void*);
361void handle_slurl_test(void*); 369void handle_web_browser_test(void*);
370void handle_buy_currency_test(void*);
362void handle_save_to_xml(void*); 371void handle_save_to_xml(void*);
363void handle_load_from_xml(void*); 372void handle_load_from_xml(void*);
364 373
@@ -465,7 +474,6 @@ BOOL enable_grab_texture(void*);
465void handle_dump_region_object_cache(void*); 474void handle_dump_region_object_cache(void*);
466 475
467BOOL menu_ui_enabled(void *user_data); 476BOOL menu_ui_enabled(void *user_data);
468void check_toggle_control( LLUICtrl *, void* user_data );
469BOOL menu_check_control( void* user_data); 477BOOL menu_check_control( void* user_data);
470void menu_toggle_variable( void* user_data ); 478void menu_toggle_variable( void* user_data );
471BOOL menu_check_variable( void* user_data); 479BOOL 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
992void handle_export_menus_to_xml(void*) 1002void 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
1013void init_debug_ui_menu(LLMenuGL* menu) 1024void 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)
1044void init_debug_xui_menu(LLMenuGL* menu) 1063void 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
1301extern BOOL gDebugAvatarRotation;
1302
1303void init_debug_avatar_menu(LLMenuGL* menu) 1324void 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
1359void init_debug_baked_texture_menu(LLMenuGL* menu) 1386void 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//---------------------------------------------------------------------------
2149void callback_freeze(S32 option, void* data) 2182bool 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
2182class LLAvatarFreeze : public view_listener_t 2215class 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
2251struct MenuCallbackData 2286bool callback_eject(const LLSD& notification, const LLSD& response)
2252{
2253 bool ban_enabled;
2254 LLUUID avatar_id;
2255};
2256
2257void 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
2318class LLAvatarEject : public view_listener_t 2340class 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
2463void callback_leave_group(S32 option, void *userdata) 2490bool 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
2479void handle_leave_group(void *) 2508void 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
2649void handle_show_notifications_console(void *)
2650{
2651 LLFloaterNotificationConsole::showInstance();
2652}
2653
2620void handle_dump_group_info(void *) 2654void 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
3072void 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
3102class 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
3111class 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
3120class 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
3152void toggle_wind_audio(void) 3104void 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
3693protected: 3643protected:
@@ -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
3860void confirm_take(S32 option, void* data) 3809bool 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
3939void 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'
3903BOOL 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
3920S32 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
3939bool 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
3970void handle_buy_currency(void*) 3971void 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
4031class 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
4043class LLToolsSaveToObjectInventory : public view_listener_t 4032class 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
4415class 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
4426class LLViewEnableLastChatter : public view_listener_t 4425class 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
4884void complete_give_money(S32 option, void* user_data) 4883bool 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
4921bool handle_give_money_dialog() 4919bool 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
5285void callback_show_url(S32 option, void* data) 5289bool 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
5295class LLPromptShowURL : public view_listener_t 5299class 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
5329bool 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
5339class 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
5316class LLShowAgentProfile : public view_listener_t 5362class 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
6173void 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
6179BOOL menu_check_control( void* user_data) 6216BOOL 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
6405class 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
6415BOOL enable_save_into_task_inventory(void*) 6442BOOL 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
6725void handle_grab_texture(void* data) 6752void 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
6815BOOL enable_grab_texture(void* data) 6845BOOL 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
7001void handle_slurl_test(void*) 7031void 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
7042void 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
7007void handle_rebake_textures(void*) 7079void handle_rebake_textures(void*)
@@ -9495,6 +9567,24 @@ static void addMenu(view_listener_t *menu, const char *name)
9495 9567
9496void initialize_menus() 9568void 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");