/indra/newview/llviewermenu.cpp
C++ | 2927 lines | 2081 code | 493 blank | 353 comment | 345 complexity | beec3453b3db3ea8229dfc546893ecaa MD5 | raw file
Possible License(s): LGPL-2.1
- /**
- * @file llviewermenu.cpp
- * @brief Builds menus out of items.
- *
- * $LicenseInfo:firstyear=2002&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
- #include "llviewerprecompiledheaders.h"
- #include "llviewermenu.h"
- // linden library includes
- #include "llavatarnamecache.h" // IDEVO
- #include "llfloaterreg.h"
- #include "llfloatersidepanelcontainer.h"
- #include "llcombobox.h"
- #include "llinventorypanel.h"
- #include "llnotifications.h"
- #include "llnotificationsutil.h"
- // newview includes
- #include "llagent.h"
- #include "llagentaccess.h"
- #include "llagentcamera.h"
- #include "llagentwearables.h"
- #include "llagentpilot.h"
- #include "llcompilequeue.h"
- #include "llconsole.h"
- #include "lldaycyclemanager.h"
- #include "lldebugview.h"
- #include "llenvmanager.h"
- #include "llfilepicker.h"
- #include "llfirstuse.h"
- #include "llfloaterbuy.h"
- #include "llfloaterbuycontents.h"
- #include "llbuycurrencyhtml.h"
- #include "llfloatergodtools.h"
- #include "llfloaterinventory.h"
- #include "llfloaterland.h"
- #include "llfloaterpay.h"
- #include "llfloaterreporter.h"
- #include "llfloatersearch.h"
- #include "llfloaterscriptdebug.h"
- #include "llfloatersnapshot.h"
- #include "llfloatertools.h"
- #include "llfloaterworldmap.h"
- #include "llfloaterbuildoptions.h"
- #include "llavataractions.h"
- #include "lllandmarkactions.h"
- #include "llgroupmgr.h"
- #include "lltooltip.h"
- #include "llhints.h"
- #include "llhudeffecttrail.h"
- #include "llhudmanager.h"
- #include "llimview.h"
- #include "llinventorybridge.h"
- #include "llinventorydefines.h"
- #include "llinventoryfunctions.h"
- #include "llpanellogin.h"
- #include "llpanelblockedlist.h"
- #include "llmoveview.h"
- #include "llparcel.h"
- #include "llrootview.h"
- #include "llsceneview.h"
- #include "llselectmgr.h"
- #include "llstatusbar.h"
- #include "lltextureview.h"
- #include "lltoolcomp.h"
- #include "lltoolmgr.h"
- #include "lltoolpie.h"
- #include "lltoolselectland.h"
- #include "lltrans.h"
- #include "llviewergenericmessage.h"
- #include "llviewerhelp.h"
- #include "llviewermenufile.h" // init_menu_file()
- #include "llviewermessage.h"
- #include "llviewernetwork.h"
- #include "llviewerobjectlist.h"
- #include "llviewerparcelmgr.h"
- #include "llviewerstats.h"
- #include "llvoavatarself.h"
- #include "llworldmap.h"
- #include "pipeline.h"
- #include "llviewerjoystick.h"
- #include "llwaterparammanager.h"
- #include "llwlanimator.h"
- #include "llwlparammanager.h"
- #include "llfloatercamera.h"
- #include "lluilistener.h"
- #include "llappearancemgr.h"
- #include "lltrans.h"
- #include "lleconomy.h"
- #include "lltoolgrab.h"
- #include "llwindow.h"
- #include "boost/unordered_map.hpp"
- using namespace LLVOAvatarDefines;
- typedef LLPointer<LLViewerObject> LLViewerObjectPtr;
- static boost::unordered_map<std::string, LLStringExplicit> sDefaultItemLabels;
- BOOL enable_land_build(void*);
- BOOL enable_object_build(void*);
- LLVOAvatar* find_avatar_from_object( LLViewerObject* object );
- LLVOAvatar* find_avatar_from_object( const LLUUID& object_id );
- void handle_test_load_url(void*);
- //
- // Evil hackish imported globals
- //extern BOOL gHideSelectedObjects;
- //extern BOOL gAllowSelectAvatar;
- //extern BOOL gDebugAvatarRotation;
- extern BOOL gDebugClicks;
- extern BOOL gDebugWindowProc;
- //extern BOOL gDebugTextEditorTips;
- //extern BOOL gDebugSelectMgr;
- //
- // Globals
- //
- LLMenuBarGL *gMenuBarView = NULL;
- LLViewerMenuHolderGL *gMenuHolder = NULL;
- LLMenuGL *gPopupMenuView = NULL;
- LLMenuGL *gEditMenu = NULL;
- LLMenuBarGL *gLoginMenuBarView = NULL;
- // Pie menus
- LLContextMenu *gMenuAvatarSelf = NULL;
- LLContextMenu *gMenuAvatarOther = NULL;
- LLContextMenu *gMenuObject = NULL;
- LLContextMenu *gMenuAttachmentSelf = NULL;
- LLContextMenu *gMenuAttachmentOther = NULL;
- LLContextMenu *gMenuLand = NULL;
- const std::string SAVE_INTO_INVENTORY("Save Object Back to My Inventory");
- const std::string SAVE_INTO_TASK_INVENTORY("Save Object Back to Object Contents");
- LLMenuGL* gAttachSubMenu = NULL;
- LLMenuGL* gDetachSubMenu = NULL;
- LLMenuGL* gTakeOffClothes = NULL;
- LLContextMenu* gAttachScreenPieMenu = NULL;
- LLContextMenu* gAttachPieMenu = NULL;
- LLContextMenu* gAttachBodyPartPieMenus[8];
- LLContextMenu* gDetachPieMenu = NULL;
- LLContextMenu* gDetachScreenPieMenu = NULL;
- LLContextMenu* gDetachBodyPartPieMenus[8];
- LLMenuItemCallGL* gAFKMenu = NULL;
- LLMenuItemCallGL* gBusyMenu = NULL;
- //
- // Local prototypes
- // File Menu
- void handle_compress_image(void*);
- // Edit menu
- void handle_dump_group_info(void *);
- void handle_dump_capabilities_info(void *);
- // Advanced->Consoles menu
- void handle_region_dump_settings(void*);
- void handle_region_dump_temp_asset_data(void*);
- void handle_region_clear_temp_asset_data(void*);
- // Object pie menu
- BOOL sitting_on_selection();
- void near_sit_object();
- //void label_sit_or_stand(std::string& label, void*);
- // buy and take alias into the same UI positions, so these
- // declarations handle this mess.
- BOOL is_selection_buy_not_take();
- S32 selection_price();
- BOOL enable_take();
- void handle_take();
- void handle_object_show_inspector();
- void handle_avatar_show_inspector();
- bool confirm_take(const LLSD& notification, const LLSD& response);
- void handle_buy_object(LLSaleInfo sale_info);
- void handle_buy_contents(LLSaleInfo sale_info);
- // Land pie menu
- void near_sit_down_point(BOOL success, void *);
- // Avatar pie menu
- // Debug menu
- void velocity_interpolate( void* );
- void handle_rebake_textures(void*);
- BOOL check_admin_override(void*);
- void handle_admin_override_toggle(void*);
- #ifdef TOGGLE_HACKED_GODLIKE_VIEWER
- void handle_toggle_hacked_godmode(void*);
- BOOL check_toggle_hacked_godmode(void*);
- bool enable_toggle_hacked_godmode(void*);
- #endif
- void toggle_show_xui_names(void *);
- BOOL check_show_xui_names(void *);
- // Debug UI
- void handle_buy_currency_test(void*);
- void handle_god_mode(void*);
- // God menu
- void handle_leave_god_mode(void*);
- void handle_reset_view();
- void handle_duplicate_in_place(void*);
- void handle_object_owner_self(void*);
- void handle_object_owner_permissive(void*);
- void handle_object_lock(void*);
- void handle_object_asset_ids(void*);
- void force_take_copy(void*);
- #ifdef _CORY_TESTING
- void force_export_copy(void*);
- void force_import_geometry(void*);
- #endif
- void handle_force_parcel_owner_to_me(void*);
- void handle_force_parcel_to_content(void*);
- void handle_claim_public_land(void*);
- void handle_god_request_avatar_geometry(void *); // Hack for easy testing of new avatar geometry
- void reload_vertex_shader(void *);
- void handle_disconnect_viewer(void *);
- void force_error_breakpoint(void *);
- void force_error_llerror(void *);
- void force_error_bad_memory_access(void *);
- void force_error_infinite_loop(void *);
- void force_error_software_exception(void *);
- void force_error_driver_crash(void *);
- void handle_force_delete(void*);
- void print_object_info(void*);
- void print_agent_nvpairs(void*);
- void toggle_debug_menus(void*);
- void upload_done_callback(const LLUUID& uuid, void* user_data, S32 result, LLExtStat ext_status);
- void dump_select_mgr(void*);
- void dump_inventory(void*);
- void toggle_visibility(void*);
- BOOL get_visibility(void*);
- // Avatar Pie menu
- void request_friendship(const LLUUID& agent_id);
- // Tools menu
- void handle_selected_texture_info(void*);
- void handle_dump_followcam(void*);
- void handle_viewer_enable_message_log(void*);
- void handle_viewer_disable_message_log(void*);
- BOOL enable_buy_land(void*);
- // Help menu
- void handle_test_male(void *);
- void handle_test_female(void *);
- void handle_toggle_pg(void*);
- void handle_dump_attachments(void *);
- void handle_dump_avatar_local_textures(void*);
- void handle_debug_avatar_textures(void*);
- void handle_grab_baked_texture(void*);
- BOOL enable_grab_baked_texture(void*);
- void handle_dump_region_object_cache(void*);
- BOOL enable_save_into_inventory(void*);
- BOOL enable_save_into_task_inventory(void*);
- BOOL enable_detach(const LLSD& = LLSD());
- void menu_toggle_attached_lights(void* user_data);
- void menu_toggle_attached_particles(void* user_data);
- class LLMenuParcelObserver : public LLParcelObserver
- {
- public:
- LLMenuParcelObserver();
- ~LLMenuParcelObserver();
- virtual void changed();
- };
- static LLMenuParcelObserver* gMenuParcelObserver = NULL;
- static LLUIListener sUIListener;
- LLMenuParcelObserver::LLMenuParcelObserver()
- {
- LLViewerParcelMgr::getInstance()->addObserver(this);
- }
- LLMenuParcelObserver::~LLMenuParcelObserver()
- {
- LLViewerParcelMgr::getInstance()->removeObserver(this);
- }
- void LLMenuParcelObserver::changed()
- {
- gMenuHolder->childSetEnabled("Land Buy Pass", LLPanelLandGeneral::enableBuyPass(NULL));
-
- BOOL buyable = enable_buy_land(NULL);
- gMenuHolder->childSetEnabled("Land Buy", buyable);
- gMenuHolder->childSetEnabled("Buy Land...", buyable);
- }
- void initialize_menus();
- //-----------------------------------------------------------------------------
- // Initialize main menus
- //
- // HOW TO NAME MENUS:
- //
- // First Letter Of Each Word Is Capitalized, Even At Or And
- //
- // Items that lead to dialog boxes end in "..."
- //
- // Break up groups of more than 6 items with separators
- //-----------------------------------------------------------------------------
- void set_underclothes_menu_options()
- {
- if (gMenuHolder && gAgent.isTeen())
- {
- gMenuHolder->getChild<LLView>("Self Underpants")->setVisible(FALSE);
- gMenuHolder->getChild<LLView>("Self Undershirt")->setVisible(FALSE);
- }
- if (gMenuBarView && gAgent.isTeen())
- {
- gMenuBarView->getChild<LLView>("Menu Underpants")->setVisible(FALSE);
- gMenuBarView->getChild<LLView>("Menu Undershirt")->setVisible(FALSE);
- }
- }
- void init_menus()
- {
- // Initialize actions
- initialize_menus();
- ///
- /// Popup menu
- ///
- /// The popup menu is now populated by the show_context_menu()
- /// method.
-
- LLMenuGL::Params menu_params;
- menu_params.name = "Popup";
- menu_params.visible = false;
- gPopupMenuView = LLUICtrlFactory::create<LLMenuGL>(menu_params);
- gMenuHolder->addChild( gPopupMenuView );
- ///
- /// Context menus
- ///
- const widget_registry_t& registry =
- LLViewerMenuHolderGL::child_registry_t::instance();
- gEditMenu = LLUICtrlFactory::createFromFile<LLMenuGL>("menu_edit.xml", gMenuHolder, registry);
- gMenuAvatarSelf = LLUICtrlFactory::createFromFile<LLContextMenu>(
- "menu_avatar_self.xml", gMenuHolder, registry);
- gMenuAvatarOther = LLUICtrlFactory::createFromFile<LLContextMenu>(
- "menu_avatar_other.xml", gMenuHolder, registry);
- gDetachScreenPieMenu = gMenuHolder->getChild<LLContextMenu>("Object Detach HUD", true);
- gDetachPieMenu = gMenuHolder->getChild<LLContextMenu>("Object Detach", true);
- gMenuObject = LLUICtrlFactory::createFromFile<LLContextMenu>(
- "menu_object.xml", gMenuHolder, registry);
- gAttachScreenPieMenu = gMenuHolder->getChild<LLContextMenu>("Object Attach HUD");
- gAttachPieMenu = gMenuHolder->getChild<LLContextMenu>("Object Attach");
- gMenuAttachmentSelf = LLUICtrlFactory::createFromFile<LLContextMenu>(
- "menu_attachment_self.xml", gMenuHolder, registry);
- gMenuAttachmentOther = LLUICtrlFactory::createFromFile<LLContextMenu>(
- "menu_attachment_other.xml", gMenuHolder, registry);
- gMenuLand = LLUICtrlFactory::createFromFile<LLContextMenu>(
- "menu_land.xml", gMenuHolder, registry);
- ///
- /// set up the colors
- ///
- LLColor4 color;
- LLColor4 context_menu_color = LLUIColorTable::instance().getColor("MenuPopupBgColor");
-
- gMenuAvatarSelf->setBackgroundColor( context_menu_color );
- gMenuAvatarOther->setBackgroundColor( context_menu_color );
- gMenuObject->setBackgroundColor( context_menu_color );
- gMenuAttachmentSelf->setBackgroundColor( context_menu_color );
- gMenuAttachmentOther->setBackgroundColor( context_menu_color );
- gMenuLand->setBackgroundColor( context_menu_color );
- color = LLUIColorTable::instance().getColor( "MenuPopupBgColor" );
- gPopupMenuView->setBackgroundColor( color );
- // If we are not in production, use a different color to make it apparent.
- if (LLGridManager::getInstance()->isInProductionGrid())
- {
- color = LLUIColorTable::instance().getColor( "MenuBarBgColor" );
- }
- else
- {
- color = LLUIColorTable::instance().getColor( "MenuNonProductionBgColor" );
- }
- LLView* menu_bar_holder = gViewerWindow->getRootView()->getChildView("menu_bar_holder");
- gMenuBarView = LLUICtrlFactory::getInstance()->createFromFile<LLMenuBarGL>("menu_viewer.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
- gMenuBarView->setRect(LLRect(0, menu_bar_holder->getRect().mTop, 0, menu_bar_holder->getRect().mTop - MENU_BAR_HEIGHT));
- gMenuBarView->setBackgroundColor( color );
- menu_bar_holder->addChild(gMenuBarView);
-
- gViewerWindow->setMenuBackgroundColor(false,
- LLGridManager::getInstance()->isInProductionGrid());
- // Assume L$10 for now, the server will tell us the real cost at login
- // *TODO:Also fix cost in llfolderview.cpp for Inventory menus
- const std::string upload_cost("10");
- gMenuHolder->childSetLabelArg("Upload Image", "[COST]", upload_cost);
- gMenuHolder->childSetLabelArg("Upload Sound", "[COST]", upload_cost);
- gMenuHolder->childSetLabelArg("Upload Animation", "[COST]", upload_cost);
- gMenuHolder->childSetLabelArg("Bulk Upload", "[COST]", upload_cost);
-
- gAFKMenu = gMenuBarView->getChild<LLMenuItemCallGL>("Set Away", TRUE);
- gBusyMenu = gMenuBarView->getChild<LLMenuItemCallGL>("Set Busy", TRUE);
- gAttachSubMenu = gMenuBarView->findChildMenuByName("Attach Object", TRUE);
- gDetachSubMenu = gMenuBarView->findChildMenuByName("Detach Object", TRUE);
- #if !MEM_TRACK_MEM
- // Don't display the Memory console menu if the feature is turned off
- LLMenuItemCheckGL *memoryMenu = gMenuBarView->getChild<LLMenuItemCheckGL>("Memory", TRUE);
- if (memoryMenu)
- {
- memoryMenu->setVisible(FALSE);
- }
- #endif
- gMenuBarView->createJumpKeys();
- // Let land based option enable when parcel changes
- gMenuParcelObserver = new LLMenuParcelObserver();
- gLoginMenuBarView = LLUICtrlFactory::getInstance()->createFromFile<LLMenuBarGL>("menu_login.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
- gLoginMenuBarView->arrangeAndClear();
- LLRect menuBarRect = gLoginMenuBarView->getRect();
- menuBarRect.setLeftTopAndSize(0, menu_bar_holder->getRect().getHeight(), menuBarRect.getWidth(), menuBarRect.getHeight());
- gLoginMenuBarView->setRect(menuBarRect);
- gLoginMenuBarView->setBackgroundColor( color );
- menu_bar_holder->addChild(gLoginMenuBarView);
-
- // tooltips are on top of EVERYTHING, including menus
- gViewerWindow->getRootView()->sendChildToFront(gToolTipView);
- }
- ///////////////////
- // SHOW CONSOLES //
- ///////////////////
- class LLAdvancedToggleConsole : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- std::string console_type = userdata.asString();
- if ("texture" == console_type)
- {
- toggle_visibility( (void*)gTextureView );
- }
- else if ("debug" == console_type)
- {
- toggle_visibility( (void*)static_cast<LLUICtrl*>(gDebugView->mDebugConsolep));
- }
- else if (gTextureSizeView && "texture size" == console_type)
- {
- toggle_visibility( (void*)gTextureSizeView );
- }
- else if (gTextureCategoryView && "texture category" == console_type)
- {
- toggle_visibility( (void*)gTextureCategoryView );
- }
- else if ("fast timers" == console_type)
- {
- LLFloaterReg::toggleInstance("fast_timers");
- }
- else if ("scene view" == console_type)
- {
- toggle_visibility( (void*)gSceneView);
- }
- #if MEM_TRACK_MEM
- else if ("memory view" == console_type)
- {
- toggle_visibility( (void*)gDebugView->mMemoryView );
- }
- #endif
- return true;
- }
- };
- class LLAdvancedCheckConsole : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- std::string console_type = userdata.asString();
- bool new_value = false;
- if ("texture" == console_type)
- {
- new_value = get_visibility( (void*)gTextureView );
- }
- else if ("debug" == console_type)
- {
- new_value = get_visibility( (void*)((LLView*)gDebugView->mDebugConsolep) );
- }
- else if (gTextureSizeView && "texture size" == console_type)
- {
- new_value = get_visibility( (void*)gTextureSizeView );
- }
- else if (gTextureCategoryView && "texture category" == console_type)
- {
- new_value = get_visibility( (void*)gTextureCategoryView );
- }
- else if ("fast timers" == console_type)
- {
- new_value = LLFloaterReg::instanceVisible("fast_timers");
- }
- else if ("scene view" == console_type)
- {
- new_value = get_visibility( (void*) gSceneView);
- }
- #if MEM_TRACK_MEM
- else if ("memory view" == console_type)
- {
- new_value = get_visibility( (void*)gDebugView->mMemoryView );
- }
- #endif
-
- return new_value;
- }
- };
- //////////////////////////
- // DUMP INFO TO CONSOLE //
- //////////////////////////
- class LLAdvancedDumpInfoToConsole : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- std::string info_type = userdata.asString();
- if ("region" == info_type)
- {
- handle_region_dump_settings(NULL);
- }
- else if ("group" == info_type)
- {
- handle_dump_group_info(NULL);
- }
- else if ("capabilities" == info_type)
- {
- handle_dump_capabilities_info(NULL);
- }
- return true;
- }
- };
- //////////////
- // HUD INFO //
- //////////////
- class LLAdvancedToggleHUDInfo : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- std::string info_type = userdata.asString();
- if ("camera" == info_type)
- {
- gDisplayCameraPos = !(gDisplayCameraPos);
- }
- else if ("wind" == info_type)
- {
- gDisplayWindInfo = !(gDisplayWindInfo);
- }
- else if ("fov" == info_type)
- {
- gDisplayFOV = !(gDisplayFOV);
- }
- else if ("badge" == info_type)
- {
- gDisplayBadge = !(gDisplayBadge);
- }
- return true;
- }
- };
- class LLAdvancedCheckHUDInfo : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- std::string info_type = userdata.asString();
- bool new_value = false;
- if ("camera" == info_type)
- {
- new_value = gDisplayCameraPos;
- }
- else if ("wind" == info_type)
- {
- new_value = gDisplayWindInfo;
- }
- else if ("fov" == info_type)
- {
- new_value = gDisplayFOV;
- }
- else if ("badge" == info_type)
- {
- new_value = gDisplayBadge;
- }
- return new_value;
- }
- };
- //////////////
- // FLYING //
- //////////////
- class LLAdvancedAgentFlyingInfo : public view_listener_t
- {
- bool handleEvent(const LLSD&)
- {
- return gAgent.getFlying();
- }
- };
- ///////////////////////
- // CLEAR GROUP CACHE //
- ///////////////////////
- class LLAdvancedClearGroupCache : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- LLGroupMgr::debugClearAllGroups(NULL);
- return true;
- }
- };
- /////////////////
- // RENDER TYPE //
- /////////////////
- U32 render_type_from_string(std::string render_type)
- {
- if ("simple" == render_type)
- {
- return LLPipeline::RENDER_TYPE_SIMPLE;
- }
- else if ("alpha" == render_type)
- {
- return LLPipeline::RENDER_TYPE_ALPHA;
- }
- else if ("tree" == render_type)
- {
- return LLPipeline::RENDER_TYPE_TREE;
- }
- else if ("character" == render_type)
- {
- return LLPipeline::RENDER_TYPE_AVATAR;
- }
- else if ("surfacePatch" == render_type)
- {
- return LLPipeline::RENDER_TYPE_TERRAIN;
- }
- else if ("sky" == render_type)
- {
- return LLPipeline::RENDER_TYPE_SKY;
- }
- else if ("water" == render_type)
- {
- return LLPipeline::RENDER_TYPE_WATER;
- }
- else if ("ground" == render_type)
- {
- return LLPipeline::RENDER_TYPE_GROUND;
- }
- else if ("volume" == render_type)
- {
- return LLPipeline::RENDER_TYPE_VOLUME;
- }
- else if ("grass" == render_type)
- {
- return LLPipeline::RENDER_TYPE_GRASS;
- }
- else if ("clouds" == render_type)
- {
- return LLPipeline::RENDER_TYPE_CLOUDS;
- }
- else if ("particles" == render_type)
- {
- return LLPipeline::RENDER_TYPE_PARTICLES;
- }
- else if ("bump" == render_type)
- {
- return LLPipeline::RENDER_TYPE_BUMP;
- }
- else
- {
- return 0;
- }
- }
- class LLAdvancedToggleRenderType : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- U32 render_type = render_type_from_string( userdata.asString() );
- if ( render_type != 0 )
- {
- LLPipeline::toggleRenderTypeControl( (void*)render_type );
- }
- return true;
- }
- };
- class LLAdvancedCheckRenderType : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- U32 render_type = render_type_from_string( userdata.asString() );
- bool new_value = false;
- if ( render_type != 0 )
- {
- new_value = LLPipeline::hasRenderTypeControl( (void*)render_type );
- }
- return new_value;
- }
- };
- /////////////
- // FEATURE //
- /////////////
- U32 feature_from_string(std::string feature)
- {
- if ("ui" == feature)
- {
- return LLPipeline::RENDER_DEBUG_FEATURE_UI;
- }
- else if ("selected" == feature)
- {
- return LLPipeline::RENDER_DEBUG_FEATURE_SELECTED;
- }
- else if ("highlighted" == feature)
- {
- return LLPipeline::RENDER_DEBUG_FEATURE_HIGHLIGHTED;
- }
- else if ("dynamic textures" == feature)
- {
- return LLPipeline::RENDER_DEBUG_FEATURE_DYNAMIC_TEXTURES;
- }
- else if ("foot shadows" == feature)
- {
- return LLPipeline::RENDER_DEBUG_FEATURE_FOOT_SHADOWS;
- }
- else if ("fog" == feature)
- {
- return LLPipeline::RENDER_DEBUG_FEATURE_FOG;
- }
- else if ("fr info" == feature)
- {
- return LLPipeline::RENDER_DEBUG_FEATURE_FR_INFO;
- }
- else if ("flexible" == feature)
- {
- return LLPipeline::RENDER_DEBUG_FEATURE_FLEXIBLE;
- }
- else
- {
- return 0;
- }
- };
- class LLAdvancedToggleFeature : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- U32 feature = feature_from_string( userdata.asString() );
- if ( feature != 0 )
- {
- LLPipeline::toggleRenderDebugFeature( (void*)feature );
- }
- return true;
- }
- };
- class LLAdvancedCheckFeature : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- U32 feature = feature_from_string( userdata.asString() );
- bool new_value = false;
- if ( feature != 0 )
- {
- new_value = LLPipeline::toggleRenderDebugFeatureControl( (void*)feature );
- }
- return new_value;
- }
- };
- //////////////////
- // INFO DISPLAY //
- //////////////////
- U32 info_display_from_string(std::string info_display)
- {
- if ("verify" == info_display)
- {
- return LLPipeline::RENDER_DEBUG_VERIFY;
- }
- else if ("bboxes" == info_display)
- {
- return LLPipeline::RENDER_DEBUG_BBOXES;
- }
- else if ("normals" == info_display)
- {
- return LLPipeline::RENDER_DEBUG_NORMALS;
- }
- else if ("points" == info_display)
- {
- return LLPipeline::RENDER_DEBUG_POINTS;
- }
- else if ("octree" == info_display)
- {
- return LLPipeline::RENDER_DEBUG_OCTREE;
- }
- else if ("shadow frusta" == info_display)
- {
- return LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA;
- }
- else if ("physics shapes" == info_display)
- {
- return LLPipeline::RENDER_DEBUG_PHYSICS_SHAPES;
- }
- else if ("occlusion" == info_display)
- {
- return LLPipeline::RENDER_DEBUG_OCCLUSION;
- }
- else if ("render batches" == info_display)
- {
- return LLPipeline::RENDER_DEBUG_BATCH_SIZE;
- }
- else if ("update type" == info_display)
- {
- return LLPipeline::RENDER_DEBUG_UPDATE_TYPE;
- }
- else if ("texture anim" == info_display)
- {
- return LLPipeline::RENDER_DEBUG_TEXTURE_ANIM;
- }
- else if ("texture priority" == info_display)
- {
- return LLPipeline::RENDER_DEBUG_TEXTURE_PRIORITY;
- }
- else if ("shame" == info_display)
- {
- return LLPipeline::RENDER_DEBUG_SHAME;
- }
- else if ("texture area" == info_display)
- {
- return LLPipeline::RENDER_DEBUG_TEXTURE_AREA;
- }
- else if ("face area" == info_display)
- {
- return LLPipeline::RENDER_DEBUG_FACE_AREA;
- }
- else if ("lod info" == info_display)
- {
- return LLPipeline::RENDER_DEBUG_LOD_INFO;
- }
- else if ("build queue" == info_display)
- {
- return LLPipeline::RENDER_DEBUG_BUILD_QUEUE;
- }
- else if ("lights" == info_display)
- {
- return LLPipeline::RENDER_DEBUG_LIGHTS;
- }
- else if ("particles" == info_display)
- {
- return LLPipeline::RENDER_DEBUG_PARTICLES;
- }
- else if ("composition" == info_display)
- {
- return LLPipeline::RENDER_DEBUG_COMPOSITION;
- }
- else if ("glow" == info_display)
- {
- return LLPipeline::RENDER_DEBUG_GLOW;
- }
- else if ("collision skeleton" == info_display)
- {
- return LLPipeline::RENDER_DEBUG_AVATAR_VOLUME;
- }
- else if ("raycast" == info_display)
- {
- return LLPipeline::RENDER_DEBUG_RAYCAST;
- }
- else if ("agent target" == info_display)
- {
- return LLPipeline::RENDER_DEBUG_AGENT_TARGET;
- }
- else if ("sculpt" == info_display)
- {
- return LLPipeline::RENDER_DEBUG_SCULPTED;
- }
- else if ("wind vectors" == info_display)
- {
- return LLPipeline::RENDER_DEBUG_WIND_VECTORS;
- }
- else
- {
- return 0;
- }
- };
- class LLAdvancedToggleInfoDisplay : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- U32 info_display = info_display_from_string( userdata.asString() );
- LL_INFOS("ViewerMenu") << "toggle " << userdata.asString() << LL_ENDL;
-
- if ( info_display != 0 )
- {
- LLPipeline::toggleRenderDebug( (void*)info_display );
- }
- return true;
- }
- };
- class LLAdvancedCheckInfoDisplay : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- U32 info_display = info_display_from_string( userdata.asString() );
- bool new_value = false;
- LL_INFOS("ViewerMenu") << "check " << userdata.asString() << LL_ENDL;
- if ( info_display != 0 )
- {
- new_value = LLPipeline::toggleRenderDebugControl( (void*)info_display );
- }
- return new_value;
- }
- };
- ///////////////////////////
- //// RANDOMIZE FRAMERATE //
- ///////////////////////////
- class LLAdvancedToggleRandomizeFramerate : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- gRandomizeFramerate = !(gRandomizeFramerate);
- return true;
- }
- };
- class LLAdvancedCheckRandomizeFramerate : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = gRandomizeFramerate;
- return new_value;
- }
- };
- ///////////////////////////
- //// PERIODIC SLOW FRAME //
- ///////////////////////////
- class LLAdvancedTogglePeriodicSlowFrame : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- gPeriodicSlowFrame = !(gPeriodicSlowFrame);
- return true;
- }
- };
- class LLAdvancedCheckPeriodicSlowFrame : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = gPeriodicSlowFrame;
- return new_value;
- }
- };
- ////////////////
- // FRAME TEST //
- ////////////////
- class LLAdvancedToggleFrameTest : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- LLPipeline::sRenderFrameTest = !(LLPipeline::sRenderFrameTest);
- return true;
- }
- };
- class LLAdvancedCheckFrameTest : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = LLPipeline::sRenderFrameTest;
- return new_value;
- }
- };
- ///////////////////////////
- // SELECTED TEXTURE INFO //
- ///////////////////////////
- class LLAdvancedSelectedTextureInfo : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_selected_texture_info(NULL);
- return true;
- }
- };
- //////////////////////
- // TOGGLE WIREFRAME //
- //////////////////////
- class LLAdvancedToggleWireframe : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- gUseWireframe = !(gUseWireframe);
- LLPipeline::updateRenderDeferred();
- gPipeline.resetVertexBuffers();
- return true;
- }
- };
- class LLAdvancedCheckWireframe : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = gUseWireframe;
- return new_value;
- }
- };
-
- //////////////////////
- // TEXTURE ATLAS //
- //////////////////////
- class LLAdvancedToggleTextureAtlas : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- LLViewerTexture::sUseTextureAtlas = !LLViewerTexture::sUseTextureAtlas;
- gSavedSettings.setBOOL("EnableTextureAtlas", LLViewerTexture::sUseTextureAtlas) ;
- return true;
- }
- };
- class LLAdvancedCheckTextureAtlas : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = LLViewerTexture::sUseTextureAtlas; // <-- make this using LLCacheControl
- return new_value;
- }
- };
- //////////////////////////
- // DUMP SCRIPTED CAMERA //
- //////////////////////////
-
- class LLAdvancedDumpScriptedCamera : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_dump_followcam(NULL);
- return true;
- }
- };
- //////////////////////////////
- // DUMP REGION OBJECT CACHE //
- //////////////////////////////
- class LLAdvancedDumpRegionObjectCache : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_dump_region_object_cache(NULL);
- return true;
- }
- };
- class LLAdvancedBuyCurrencyTest : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_buy_currency_test(NULL);
- return true;
- }
- };
- /////////////////////
- // DUMP SELECT MGR //
- /////////////////////
- class LLAdvancedDumpSelectMgr : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- dump_select_mgr(NULL);
- return true;
- }
- };
- ////////////////////
- // DUMP INVENTORY //
- ////////////////////
- class LLAdvancedDumpInventory : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- dump_inventory(NULL);
- return true;
- }
- };
- ////////////////////////////////
- // PRINT SELECTED OBJECT INFO //
- ////////////////////////////////
- class LLAdvancedPrintSelectedObjectInfo : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- print_object_info(NULL);
- return true;
- }
- };
- //////////////////////
- // PRINT AGENT INFO //
- //////////////////////
- class LLAdvancedPrintAgentInfo : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- print_agent_nvpairs(NULL);
- return true;
- }
- };
- ////////////////////////////////
- // PRINT TEXTURE MEMORY STATS //
- ////////////////////////////////
- class LLAdvancedPrintTextureMemoryStats : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- output_statistics(NULL);
- return true;
- }
- };
- //////////////////
- // DEBUG CLICKS //
- //////////////////
- class LLAdvancedToggleDebugClicks : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- gDebugClicks = !(gDebugClicks);
- return true;
- }
- };
- class LLAdvancedCheckDebugClicks : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = gDebugClicks;
- return new_value;
- }
- };
- /////////////////
- // DEBUG VIEWS //
- /////////////////
- class LLAdvancedToggleDebugViews : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- LLView::sDebugRects = !(LLView::sDebugRects);
- return true;
- }
- };
- class LLAdvancedCheckDebugViews : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = LLView::sDebugRects;
- return new_value;
- }
- };
- ///////////////////////
- // XUI NAME TOOLTIPS //
- ///////////////////////
- class LLAdvancedToggleXUINameTooltips : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- toggle_show_xui_names(NULL);
- return true;
- }
- };
- class LLAdvancedCheckXUINameTooltips : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = check_show_xui_names(NULL);
- return new_value;
- }
- };
- ////////////////////////
- // DEBUG MOUSE EVENTS //
- ////////////////////////
- class LLAdvancedToggleDebugMouseEvents : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- LLView::sDebugMouseHandling = !(LLView::sDebugMouseHandling);
- return true;
- }
- };
- class LLAdvancedCheckDebugMouseEvents : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = LLView::sDebugMouseHandling;
- return new_value;
- }
- };
- ////////////////
- // DEBUG KEYS //
- ////////////////
- class LLAdvancedToggleDebugKeys : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- LLView::sDebugKeys = !(LLView::sDebugKeys);
- return true;
- }
- };
-
- class LLAdvancedCheckDebugKeys : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = LLView::sDebugKeys;
- return new_value;
- }
- };
-
- ///////////////////////
- // DEBUG WINDOW PROC //
- ///////////////////////
- class LLAdvancedToggleDebugWindowProc : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- gDebugWindowProc = !(gDebugWindowProc);
- return true;
- }
- };
- class LLAdvancedCheckDebugWindowProc : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = gDebugWindowProc;
- return new_value;
- }
- };
- // ------------------------------XUI MENU ---------------------------
- class LLAdvancedSendTestIms : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- LLIMModel::instance().testMessages();
- return true;
- }
- };
- ///////////////
- // XUI NAMES //
- ///////////////
- class LLAdvancedToggleXUINames : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- toggle_show_xui_names(NULL);
- return true;
- }
- };
- class LLAdvancedCheckXUINames : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = check_show_xui_names(NULL);
- return new_value;
- }
- };
- ////////////////////////
- // GRAB BAKED TEXTURE //
- ////////////////////////
- class LLAdvancedGrabBakedTexture : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- std::string texture_type = userdata.asString();
- if ("iris" == texture_type)
- {
- handle_grab_baked_texture( (void*)BAKED_EYES );
- }
- else if ("head" == texture_type)
- {
- handle_grab_baked_texture( (void*)BAKED_HEAD );
- }
- else if ("upper" == texture_type)
- {
- handle_grab_baked_texture( (void*)BAKED_UPPER );
- }
- else if ("lower" == texture_type)
- {
- handle_grab_baked_texture( (void*)BAKED_LOWER );
- }
- else if ("skirt" == texture_type)
- {
- handle_grab_baked_texture( (void*)BAKED_SKIRT );
- }
- else if ("hair" == texture_type)
- {
- handle_grab_baked_texture( (void*)BAKED_HAIR );
- }
- return true;
- }
- };
- class LLAdvancedEnableGrabBakedTexture : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- std::string texture_type = userdata.asString();
- bool new_value = false;
- if ("iris" == texture_type)
- {
- new_value = enable_grab_baked_texture( (void*)BAKED_EYES );
- }
- else if ("head" == texture_type)
- {
- new_value = enable_grab_baked_texture( (void*)BAKED_HEAD );
- }
- else if ("upper" == texture_type)
- {
- new_value = enable_grab_baked_texture( (void*)BAKED_UPPER );
- }
- else if ("lower" == texture_type)
- {
- new_value = enable_grab_baked_texture( (void*)BAKED_LOWER );
- }
- else if ("skirt" == texture_type)
- {
- new_value = enable_grab_baked_texture( (void*)BAKED_SKIRT );
- }
- else if ("hair" == texture_type)
- {
- new_value = enable_grab_baked_texture( (void*)BAKED_HAIR );
- }
-
- return new_value;
- }
- };
- ///////////////////////
- // APPEARANCE TO XML //
- ///////////////////////
- class LLAdvancedAppearanceToXML : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- LLVOAvatar::dumpArchetypeXML(NULL);
- return true;
- }
- };
- ///////////////////////////////
- // TOGGLE CHARACTER GEOMETRY //
- ///////////////////////////////
- class LLAdvancedToggleCharacterGeometry : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_god_request_avatar_geometry(NULL);
- return true;
- }
- };
- /////////////////////////////
- // TEST MALE / TEST FEMALE //
- /////////////////////////////
- class LLAdvancedTestMale : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_test_male(NULL);
- return true;
- }
- };
- class LLAdvancedTestFemale : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_test_female(NULL);
- return true;
- }
- };
- ///////////////
- // TOGGLE PG //
- ///////////////
- class LLAdvancedTogglePG : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_toggle_pg(NULL);
- return true;
- }
- };
- class LLAdvancedForceParamsToDefault : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- LLAgent::clearVisualParams(NULL);
- return true;
- }
- };
- //////////////////////////
- // RELOAD VERTEX SHADER //
- //////////////////////////
- class LLAdvancedReloadVertexShader : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- reload_vertex_shader(NULL);
- return true;
- }
- };
- ////////////////////
- // ANIMATION INFO //
- ////////////////////
- class LLAdvancedToggleAnimationInfo : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- LLVOAvatar::sShowAnimationDebug = !(LLVOAvatar::sShowAnimationDebug);
- return true;
- }
- };
- class LLAdvancedCheckAnimationInfo : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = LLVOAvatar::sShowAnimationDebug;
- return new_value;
- }
- };
- //////////////////
- // SHOW LOOK AT //
- //////////////////
- class LLAdvancedToggleShowLookAt : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- LLHUDEffectLookAt::sDebugLookAt = !(LLHUDEffectLookAt::sDebugLookAt);
- return true;
- }
- };
- class LLAdvancedCheckShowLookAt : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = LLHUDEffectLookAt::sDebugLookAt;
- return new_value;
- }
- };
- ///////////////////
- // SHOW POINT AT //
- ///////////////////
- class LLAdvancedToggleShowPointAt : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- LLHUDEffectPointAt::sDebugPointAt = !(LLHUDEffectPointAt::sDebugPointAt);
- return true;
- }
- };
- class LLAdvancedCheckShowPointAt : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = LLHUDEffectPointAt::sDebugPointAt;
- return new_value;
- }
- };
- /////////////////////////
- // DEBUG JOINT UPDATES //
- /////////////////////////
- class LLAdvancedToggleDebugJointUpdates : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- LLVOAvatar::sJointDebug = !(LLVOAvatar::sJointDebug);
- return true;
- }
- };
- class LLAdvancedCheckDebugJointUpdates : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = LLVOAvatar::sJointDebug;
- return new_value;
- }
- };
- /////////////////
- // DISABLE LOD //
- /////////////////
- class LLAdvancedToggleDisableLOD : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- LLViewerJoint::sDisableLOD = !(LLViewerJoint::sDisableLOD);
- return true;
- }
- };
-
- class LLAdvancedCheckDisableLOD : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = LLViewerJoint::sDisableLOD;
- return new_value;
- }
- };
- /////////////////////////
- // DEBUG CHARACTER VIS //
- /////////////////////////
- class LLAdvancedToggleDebugCharacterVis : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- LLVOAvatar::sDebugInvisible = !(LLVOAvatar::sDebugInvisible);
- return true;
- }
- };
- class LLAdvancedCheckDebugCharacterVis : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = LLVOAvatar::sDebugInvisible;
- return new_value;
- }
- };
- //////////////////////
- // DUMP ATTACHMENTS //
- //////////////////////
-
- class LLAdvancedDumpAttachments : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_dump_attachments(NULL);
- return true;
- }
- };
-
- /////////////////////
- // REBAKE TEXTURES //
- /////////////////////
-
-
- class LLAdvancedRebakeTextures : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_rebake_textures(NULL);
- return true;
- }
- };
-
-
- #if 1 //ndef LL_RELEASE_FOR_DOWNLOAD
- ///////////////////////////
- // DEBUG AVATAR TEXTURES //
- ///////////////////////////
- class LLAdvancedDebugAvatarTextures : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- if (gAgent.isGodlike())
- {
- handle_debug_avatar_textures(NULL);
- }
- return true;
- }
- };
- ////////////////////////////////
- // DUMP AVATAR LOCAL TEXTURES //
- ////////////////////////////////
- class LLAdvancedDumpAvatarLocalTextures : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- #ifndef LL_RELEASE_FOR_DOWNLOAD
- handle_dump_avatar_local_textures(NULL);
- #endif
- return true;
- }
- };
- #endif
-
- /////////////////
- // MESSAGE LOG //
- /////////////////
- class LLAdvancedEnableMessageLog : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_viewer_enable_message_log(NULL);
- return true;
- }
- };
- class LLAdvancedDisableMessageLog : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_viewer_disable_message_log(NULL);
- return true;
- }
- };
- /////////////////
- // DROP PACKET //
- /////////////////
- class LLAdvancedDropPacket : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- gMessageSystem->mPacketRing.dropPackets(1);
- return true;
- }
- };
- /////////////////
- // AGENT PILOT //
- /////////////////
- class LLAdvancedAgentPilot : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- std::string command = userdata.asString();
- if ("start playback" == command)
- {
- gAgentPilot.setNumRuns(-1);
- gAgentPilot.startPlayback();
- }
- else if ("stop playback" == command)
- {
- gAgentPilot.stopPlayback();
- }
- else if ("start record" == command)
- {
- gAgentPilot.startRecord();
- }
- else if ("stop record" == command)
- {
- gAgentPilot.stopRecord();
- }
- return true;
- }
- };
- //////////////////////
- // AGENT PILOT LOOP //
- //////////////////////
- class LLAdvancedToggleAgentPilotLoop : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- gAgentPilot.setLoop(!gAgentPilot.getLoop());
- return true;
- }
- };
- class LLAdvancedCheckAgentPilotLoop : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = gAgentPilot.getLoop();
- return new_value;
- }
- };
- /////////////////////////
- // SHOW OBJECT UPDATES //
- /////////////////////////
- class LLAdvancedToggleShowObjectUpdates : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- gShowObjectUpdates = !(gShowObjectUpdates);
- return true;
- }
- };
- class LLAdvancedCheckShowObjectUpdates : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = gShowObjectUpdates;
- return new_value;
- }
- };
- ////////////////////
- // COMPRESS IMAGE //
- ////////////////////
- class LLAdvancedCompressImage : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_compress_image(NULL);
- return true;
- }
- };
- /////////////////////////
- // SHOW DEBUG SETTINGS //
- /////////////////////////
- class LLAdvancedShowDebugSettings : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- LLFloaterReg::showInstance("settings_debug",userdata);
- return true;
- }
- };
- ////////////////////////
- // VIEW ADMIN OPTIONS //
- ////////////////////////
- class LLAdvancedEnableViewAdminOptions : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- // Don't enable in god mode since the admin menu is shown anyway.
- // Only enable if the user has set the appropriate debug setting.
- bool new_value = !gAgent.getAgentAccess().isGodlikeWithoutAdminMenuFakery() && gSavedSettings.getBOOL("AdminMenu");
- return new_value;
- }
- };
- class LLAdvancedToggleViewAdminOptions : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_admin_override_toggle(NULL);
- return true;
- }
- };
- class LLAdvancedCheckViewAdminOptions : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = check_admin_override(NULL) || gAgent.isGodlike();
- return new_value;
- }
- };
- /////////////////////////////////////
- // Enable Object Object Occlusion ///
- /////////////////////////////////////
- class LLAdvancedEnableObjectObjectOcclusion: public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
-
- bool new_value = gGLManager.mHasOcclusionQuery; // && LLFeatureManager::getInstance()->isFeatureAvailable(userdata.asString());
- return new_value;
- }
- };
- /////////////////////////////////////
- // Enable Framebuffer Objects ///
- /////////////////////////////////////
- class LLAdvancedEnableRenderFBO: public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = gGLManager.mHasFramebufferObject;
- return new_value;
- }
- };
- /////////////////////////////////////
- // Enable Deferred Rendering ///
- /////////////////////////////////////
- class LLAdvancedEnableRenderDeferred: public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = gGLManager.mHasFramebufferObject && LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_WINDLIGHT) > 1 &&
- LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_AVATAR) > 0;
- return new_value;
- }
- };
- /////////////////////////////////////
- // Enable Deferred Rendering sub-options
- /////////////////////////////////////
- class LLAdvancedEnableRenderDeferredOptions: public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = gGLManager.mHasFramebufferObject && LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_WINDLIGHT) > 1 &&
- LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_AVATAR) > 0 && gSavedSettings.getBOOL("RenderDeferred");
- return new_value;
- }
- };
- //////////////////
- // ADMIN STATUS //
- //////////////////
- class LLAdvancedRequestAdminStatus : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_god_mode(NULL);
- return true;
- }
- };
- class LLAdvancedLeaveAdminStatus : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_leave_god_mode(NULL);
- return true;
- }
- };
- //////////////////////////
- // Advanced > Debugging //
- //////////////////////////
- class LLAdvancedForceErrorBreakpoint : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- force_error_breakpoint(NULL);
- return true;
- }
- };
- class LLAdvancedForceErrorLlerror : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- force_error_llerror(NULL);
- return true;
- }
- };
- class LLAdvancedForceErrorBadMemoryAccess : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- force_error_bad_memory_access(NULL);
- return true;
- }
- };
- class LLAdvancedForceErrorInfiniteLoop : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- force_error_infinite_loop(NULL);
- return true;
- }
- };
- class LLAdvancedForceErrorSoftwareException : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- force_error_software_exception(NULL);
- return true;
- }
- };
- class LLAdvancedForceErrorDriverCrash : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- force_error_driver_crash(NULL);
- return true;
- }
- };
- class LLAdvancedForceErrorDisconnectViewer : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_disconnect_viewer(NULL);
- return true;
- }
- };
- #ifdef TOGGLE_HACKED_GODLIKE_VIEWER
- class LLAdvancedHandleToggleHackedGodmode : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_toggle_hacked_godmode(NULL);
- return true;
- }
- };
- class LLAdvancedCheckToggleHackedGodmode : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- check_toggle_hacked_godmode(NULL);
- return true;
- }
- };
- class LLAdvancedEnableToggleHackedGodmode : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = enable_toggle_hacked_godmode(NULL);
- return new_value;
- }
- };
- #endif
- //
- ////-------------------------------------------------------------------
- //// Advanced menu
- ////-------------------------------------------------------------------
- //////////////////
- // DEVELOP MENU //
- //////////////////
- class LLDevelopCheckLoggingLevel : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- U32 level = userdata.asInteger();
- return (static_cast<LLError::ELevel>(level) == LLError::getDefaultLevel());
- }
- };
- class LLDevelopSetLoggingLevel : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- U32 level = userdata.asInteger();
- LLError::setDefaultLevel(static_cast<LLError::ELevel>(level));
- return true;
- }
- };
- //////////////////
- // ADMIN MENU //
- //////////////////
- // Admin > Object
- class LLAdminForceTakeCopy : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- force_take_copy(NULL);
- return true;
- }
- };
- class LLAdminHandleObjectOwnerSelf : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_object_owner_self(NULL);
- return true;
- }
- };
- class LLAdminHandleObjectOwnerPermissive : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_object_owner_permissive(NULL);
- return true;
- }
- };
- class LLAdminHandleForceDelete : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_force_delete(NULL);
- return true;
- }
- };
- class LLAdminHandleObjectLock : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_object_lock(NULL);
- return true;
- }
- };
- class LLAdminHandleObjectAssetIDs: public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_object_asset_ids(NULL);
- return true;
- }
- };
- //Admin >Parcel
- class LLAdminHandleForceParcelOwnerToMe: public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_force_parcel_owner_to_me(NULL);
- return true;
- }
- };
- class LLAdminHandleForceParcelToContent: public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_force_parcel_to_content(NULL);
- return true;
- }
- };
- class LLAdminHandleClaimPublicLand: public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_claim_public_land(NULL);
- return true;
- }
- };
- // Admin > Region
- class LLAdminHandleRegionDumpTempAssetData: public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_region_dump_temp_asset_data(NULL);
- return true;
- }
- };
- //Admin (Top Level)
- class LLAdminOnSaveState: public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- LLPanelRegionTools::onSaveState(NULL);
- return true;
- }
- };
- //-----------------------------------------------------------------------------
- // cleanup_menus()
- //-----------------------------------------------------------------------------
- void cleanup_menus()
- {
- delete gMenuParcelObserver;
- gMenuParcelObserver = NULL;
- delete gMenuAvatarSelf;
- gMenuAvatarSelf = NULL;
- delete gMenuAvatarOther;
- gMenuAvatarOther = NULL;
- delete gMenuObject;
- gMenuObject = NULL;
- delete gMenuAttachmentSelf;
- gMenuAttachmentSelf = NULL;
- delete gMenuAttachmentOther;
- gMenuAttachmentSelf = NULL;
- delete gMenuLand;
- gMenuLand = NULL;
- delete gMenuBarView;
- gMenuBarView = NULL;
- delete gPopupMenuView;
- gPopupMenuView = NULL;
- delete gMenuHolder;
- gMenuHolder = NULL;
- }
- //-----------------------------------------------------------------------------
- // Object pie menu
- //-----------------------------------------------------------------------------
- class LLObjectReportAbuse : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
- if (objectp)
- {
- LLFloaterReporter::showFromObject(objectp->getID());
- }
- return true;
- }
- };
- // Enabled it you clicked an object
- class LLObjectEnableReportAbuse : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = LLSelectMgr::getInstance()->getSelection()->getObjectCount() != 0;
- return new_value;
- }
- };
- void handle_object_touch()
- {
- LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
- if (!object) return;
- LLPickInfo pick = LLToolPie::getInstance()->getPick();
- // *NOTE: Hope the packets arrive safely and in order or else
- // there will be some problems.
- // *TODO: Just fix this bad assumption.
- send_ObjectGrab_message(object, pick, LLVector3::zero);
- send_ObjectDeGrab_message(object, pick);
- }
- static void init_default_item_label(const std::string& item_name)
- {
- boost::unordered_map<std::string, LLStringExplicit>::iterator it = sDefaultItemLabels.find(item_name);
- if (it == sDefaultItemLabels.end())
- {
- // *NOTE: This will not work for items of type LLMenuItemCheckGL because they return boolean value
- // (doesn't seem to matter much ATM).
- LLStringExplicit default_label = gMenuHolder->childGetValue(item_name).asString();
- if (!default_label.empty())
- {
- sDefaultItemLabels.insert(std::pair<std::string, LLStringExplicit>(item_name, default_label));
- }
- }
- }
- static LLStringExplicit get_default_item_label(const std::string& item_name)
- {
- LLStringExplicit res("");
- boost::unordered_map<std::string, LLStringExplicit>::iterator it = sDefaultItemLabels.find(item_name);
- if (it != sDefaultItemLabels.end())
- {
- res = it->second;
- }
- return res;
- }
- bool enable_object_touch(LLUICtrl* ctrl)
- {
- LLViewerObject* obj = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
- bool new_value = obj && obj->flagHandleTouch();
- std::string item_name = ctrl->getName();
- init_default_item_label(item_name);
- // Update label based on the node touch name if available.
- LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();
- if (node && node->mValid && !node->mTouchName.empty())
- {
- gMenuHolder->childSetText(item_name, node->mTouchName);
- }
- else
- {
- gMenuHolder->childSetText(item_name, get_default_item_label(item_name));
- }
- return new_value;
- };
- //void label_touch(std::string& label, void*)
- //{
- // LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();
- // if (node && node->mValid && !node->mTouchName.empty())
- // {
- // label.assign(node->mTouchName);
- // }
- // else
- // {
- // label.assign("Touch");
- // }
- //}
- void handle_object_open()
- {
- LLFloaterReg::showInstance("openobject");
- }
- bool enable_object_open()
- {
- // Look for contents in root object, which is all the LLFloaterOpenObject
- // understands.
- LLViewerObject* obj = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
- if (!obj) return false;
- LLViewerObject* root = obj->getRootEdit();
- if (!root) return false;
- return root->allowOpen();
- }
- class LLViewJoystickFlycam : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- handle_toggle_flycam();
- return true;
- }
- };
- class LLViewCheckJoystickFlycam : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = LLViewerJoystick::getInstance()->getOverrideCamera();
- return new_value;
- }
- };
- void handle_toggle_flycam()
- {
- LLViewerJoystick::getInstance()->toggleFlycam();
- }
- class LLObjectBuild : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- if (gAgentCamera.getFocusOnAvatar() && !LLToolMgr::getInstance()->inEdit() && gSavedSettings.getBOOL("EditCameraMovement") )
- {
- // zoom in if we're looking at the avatar
- gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE);
- gAgentCamera.setFocusGlobal(LLToolPie::getInstance()->getPick());
- gAgentCamera.cameraZoomIn(0.666f);
- gAgentCamera.cameraOrbitOver( 30.f * DEG_TO_RAD );
- gViewerWindow->moveCursorToCenter();
- }
- else if ( gSavedSettings.getBOOL("EditCameraMovement") )
- {
- gAgentCamera.setFocusGlobal(LLToolPie::getInstance()->getPick());
- gViewerWindow->moveCursorToCenter();
- }
- LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
- LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolCompCreate::getInstance() );
- // Could be first use
- //LLFirstUse::useBuild();
- return true;
- }
- };
- void handle_object_edit()
- {
- LLViewerParcelMgr::getInstance()->deselectLand();
- if (gAgentCamera.getFocusOnAvatar() && !LLToolMgr::getInstance()->inEdit())
- {
- LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
- if (selection->getSelectType() == SELECT_TYPE_HUD || !gSavedSettings.getBOOL("EditCameraMovement"))
- {
- // always freeze camera in space, even if camera doesn't move
- // so, for example, follow cam scripts can't affect you when in build mode
- gAgentCamera.setFocusGlobal(gAgentCamera.calcFocusPositionTargetGlobal(), LLUUID::null);
- gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE);
- }
- else
- {
- gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE);
- LLViewerObject* selected_objectp = selection->getFirstRootObject();
- if (selected_objectp)
- {
- // zoom in on object center instead of where we clicked, as we need to see the manipulator handles
- gAgentCamera.setFocusGlobal(selected_objectp->getPositionGlobal(), selected_objectp->getID());
- gAgentCamera.cameraZoomIn(0.666f);
- gAgentCamera.cameraOrbitOver( 30.f * DEG_TO_RAD );
- gViewerWindow->moveCursorToCenter();
- }
- }
- }
-
- LLFloaterReg::showInstance("build");
-
- LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
- gFloaterTools->setEditTool( LLToolCompTranslate::getInstance() );
-
- LLViewerJoystick::getInstance()->moveObjects(true);
- LLViewerJoystick::getInstance()->setNeedsReset(true);
-
- // Could be first use
- //LLFirstUse::useBuild();
- return;
- }
- void handle_object_inspect()
- {
- LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
- LLViewerObject* selected_objectp = selection->getFirstRootObject();
- if (selected_objectp)
- {
- LLSD key;
- key["task"] = "task";
- LLFloaterSidePanelContainer::showPanel("inventory", key);
- }
-
- /*
- // Old floater properties
- LLFloaterReg::showInstance("inspect", LLSD());
- */
- }
- //---------------------------------------------------------------------------
- // Land pie menu
- //---------------------------------------------------------------------------
- class LLLandBuild : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- LLViewerParcelMgr::getInstance()->deselectLand();
- if (gAgentCamera.getFocusOnAvatar() && !LLToolMgr::getInstance()->inEdit() && gSavedSettings.getBOOL("EditCameraMovement") )
- {
- // zoom in if we're looking at the avatar
- gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE);
- gAgentCamera.setFocusGlobal(LLToolPie::getInstance()->getPick());
- gAgentCamera.cameraZoomIn(0.666f);
- gAgentCamera.cameraOrbitOver( 30.f * DEG_TO_RAD );
- gViewerWindow->moveCursorToCenter();
- }
- else if ( gSavedSettings.getBOOL("EditCameraMovement") )
- {
- // otherwise just move focus
- gAgentCamera.setFocusGlobal(LLToolPie::getInstance()->getPick());
- gViewerWindow->moveCursorToCenter();
- }
- LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
- LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolCompCreate::getInstance() );
- // Could be first use
- //LLFirstUse::useBuild();
- return true;
- }
- };
- class LLLandBuyPass : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- LLPanelLandGeneral::onClickBuyPass((void *)FALSE);
- return true;
- }
- };
- class LLLandEnableBuyPass : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = LLPanelLandGeneral::enableBuyPass(NULL);
- return new_value;
- }
- };
- // BUG: Should really check if CLICK POINT is in a parcel where you can build.
- BOOL enable_land_build(void*)
- {
- if (gAgent.isGodlike()) return TRUE;
- if (gAgent.inPrelude()) return FALSE;
- BOOL can_build = FALSE;
- LLParcel* agent_parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
- if (agent_parcel)
- {
- can_build = agent_parcel->getAllowModify();
- }
- return can_build;
- }
- // BUG: Should really check if OBJECT is in a parcel where you can build.
- BOOL enable_object_build(void*)
- {
- if (gAgent.isGodlike()) return TRUE;
- if (gAgent.inPrelude()) return FALSE;
- BOOL can_build = FALSE;
- LLParcel* agent_parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
- if (agent_parcel)
- {
- can_build = agent_parcel->getAllowModify();
- }
- return can_build;
- }
- bool enable_object_edit()
- {
- // *HACK: The new "prelude" Help Islands have a build sandbox area,
- // so users need the Edit and Create pie menu options when they are
- // there. Eventually this needs to be replaced with code that only
- // lets you edit objects if you have permission to do so (edit perms,
- // group edit, god). See also lltoolbar.cpp. JC
- bool enable = false;
- if (gAgent.inPrelude())
- {
- enable = LLViewerParcelMgr::getInstance()->allowAgentBuild()
- || LLSelectMgr::getInstance()->getSelection()->isAttachment();
- }
- else if (LLSelectMgr::getInstance()->selectGetAllValidAndObjectsFound())
- {
- enable = true;
- }
- return enable;
- }
- // mutually exclusive - show either edit option or build in menu
- bool enable_object_build()
- {
- return !enable_object_edit();
- }
- class LLSelfRemoveAllAttachments : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- LLAgentWearables::userRemoveAllAttachments();
- return true;
- }
- };
- class LLSelfEnableRemoveAllAttachments : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- bool new_value = false;
- if (isAgentAvatarValid())
- {
- for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin();
- iter != gAgentAvatarp->mAttachmentPoints.end(); )
- {
- LLVOAvatar::attachment_map_t::iterator curiter = iter++;
- LLViewerJointAttachment* attachment = curiter->second;
- if (attachment->getNumObjects() > 0)
- {
- new_value = true;
- break;
- }
- }
- }
- return new_value;
- }
- };
- BOOL enable_has_attachments(void*)
- {
- return FALSE;
- }
- //---------------------------------------------------------------------------
- // Avatar pie menu
- //---------------------------------------------------------------------------
- //void handle_follow(void *userdata)
- //{
- // // follow a given avatar by ID
- // LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
- // if (objectp)
- // {
- // gAgent.startFollowPilot(objectp->getID());
- // }
- //}
- bool enable_object_mute()
- {
- LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
- if (!object) return false;
- LLVOAvatar* avatar = find_avatar_from_object(object);
- if (avatar)
- {
- // It's an avatar
- LLNameValue *lastname = avatar->getNVPair("LastName");
- bool is_linden =
- lastname && !LLStringUtil::compareStrings(lastname->getString(), "Linden");
- bool is_self = avatar->isSelf();
- return !is_linden && !is_self;
- }
- else
- {
- // Just a regular object
- return LLSelectMgr::getInstance()->getSelection()->contains( object, SELECT_ALL_TES ) &&
- !LLMuteList::getInstance()->isMuted(object->getID());
- }
- }
- bool enable_object_unmute()
- {
- LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
- if (!object) return false;
- LLVOAvatar* avatar = find_avatar_from_object(object);
- if (avatar)
- {
- // It's an avatar
- LLNameValue *lastname = avatar->getNVPair("LastName");
- bool is_linden =
- lastname && !LLStringUtil::compareStrings(lastname->getString(), "Linden");
- bool is_self = avatar->isSelf();
- return !is_linden && !is_self;
- }
- else
- {
- // Just a regular object
- return LLSelectMgr::getInstance()->getSelection()->contains( object, SELECT_ALL_TES ) &&
- LLMuteList::getInstance()->isMuted(object->getID());;
- }
- }
- class LLObjectMute : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
- if (!object) return true;
-
- LLUUID id;
- std::string name;
- LLMute::EType type;
- LLVOAvatar* avatar = find_avatar_from_object(object);
- if (avatar)
- {
- id = avatar->getID();
- LLNameValue *firstname = avatar->getNVPair("FirstName");
- LLNameValue *lastname = avatar->getNVPair("LastName");
- if (firstname && lastname)
- {
- name = LLCacheName::buildFullName(
- firstname->getString(), lastname->getString());
- }
-
- type = LLMute::AGENT;
- }
- else
- {
- // it's an object
- id = object->getID();
- LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();
- if (node)
- {
- name = node->mName;
- }
-
- type = LLMute::OBJECT;
- }
-
- LLMute mute(id, name, type);
- if (LLMuteList::getInstance()->isMuted(mute.mID))
- {
- LLMuteList::getInstance()->remove(mute);
- }
- else
- {
- LLMuteList::getInstance()->add(mute);
- LLPanelBlockedList::showPanelAndSelect(mute.mID);
- }
-
- return true;
- }
- };
- bool handle_go_to()
- {
- // try simulator autopilot
- std::vector<std::string> strings;
- std::string val;
- LLVector3d pos = LLToolPie::getInstance()->getPick().mPosGlobal;
- val = llformat("%g", pos.mdV[VX]);
- strings.push_back(val);
- val = llformat("%g", pos.mdV[VY]);
- strings.push_back(val);
- val = llformat("%g", pos.mdV[VZ]);
- strings.push_back(val);
- send_generic_message("autopilot", strings);
- LLViewerParcelMgr::getInstance()->deselectLand();
- if (isAgentAvatarValid() && !gSavedSettings.getBOOL("AutoPilotLocksCamera"))
- {
- gAgentCamera.setFocusGlobal(gAgentCamera.getFocusTargetGlobal(), gAgentAvatarp->getID());
- }
- else
- {
- // Snap camera back to behind avatar
- gAgentCamera.setFocusOnAvatar(TRUE, ANIMATE);
- }
- // Could be first use
- //LLFirstUse::useGoTo();
- return true;
- }
- class LLGoToObject : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- return handle_go_to();
- }
- };
- class LLAvatarReportAbuse : public view_listener_t
- {
- bool handleEvent(const LLSD& userdata)
- {
- LLVOAvatar* avatar = find_avatar_from_object( LLSelectMgr::getInstance()->getSelection()->getPrimaryObject() );
- if(avatar)
- {
- LLFloaterReporter::showFromObject(avatar->getID());
- }
- return true;
- }
- };
- //---------------------------------------------------------------------------
- // Parcel freeze, eject, etc.
- //---------------------------------------------------------------------------
- bool callback_fr