From c285f59ce2a05703e3a1232fcaf3ee3aea714b3f Mon Sep 17 00:00:00 2001 From: Ansariel Date: Sun, 18 Feb 2024 12:52:19 +0100 Subject: Replace BOOL with bool in llwindow and dependent classes --- indra/newview/lltoolcomp.cpp | 92 ++++++++++++++++++++++---------------------- 1 file changed, 46 insertions(+), 46 deletions(-) (limited to 'indra/newview/lltoolcomp.cpp') diff --git a/indra/newview/lltoolcomp.cpp b/indra/newview/lltoolcomp.cpp index aaf2bacc7b..9f25a1c075 100644 --- a/indra/newview/lltoolcomp.cpp +++ b/indra/newview/lltoolcomp.cpp @@ -89,9 +89,9 @@ LLToolComposite::LLToolComposite(const std::string& name) } // Returns to the default tool -BOOL LLToolComposite::handleMouseUp(S32 x, S32 y, MASK mask) +bool LLToolComposite::handleMouseUp(S32 x, S32 y, MASK mask) { - BOOL handled = mCur->handleMouseUp( x, y, mask ); + bool handled = mCur->handleMouseUp( x, y, mask ); if( handled ) { setCurrentTool( mDefault ); @@ -147,9 +147,9 @@ LLToolCompInspect::~LLToolCompInspect() mSelectRect = NULL; } -BOOL LLToolCompInspect::handleMouseDown(S32 x, S32 y, MASK mask) +bool LLToolCompInspect::handleMouseDown(S32 x, S32 y, MASK mask) { - BOOL handled = FALSE; + bool handled = false; if (mCur == LLToolCamera::getInstance()) { @@ -159,15 +159,15 @@ BOOL LLToolCompInspect::handleMouseDown(S32 x, S32 y, MASK mask) { mMouseDown = TRUE; gViewerWindow->pickAsync(x, y, mask, pickCallback); - handled = TRUE; + handled = true; } return handled; } -BOOL LLToolCompInspect::handleMouseUp(S32 x, S32 y, MASK mask) +bool LLToolCompInspect::handleMouseUp(S32 x, S32 y, MASK mask) { - BOOL handled = LLToolComposite::handleMouseUp(x, y, mask); + bool handled = LLToolComposite::handleMouseUp(x, y, mask); mIsToolCameraActive = getCurrentTool() == LLToolCamera::getInstance(); return handled; } @@ -194,9 +194,9 @@ void LLToolCompInspect::pickCallback(const LLPickInfo& pick_info) tool_inspectp->mSelectRect->handlePick( pick_info ); } -BOOL LLToolCompInspect::handleDoubleClick(S32 x, S32 y, MASK mask) +bool LLToolCompInspect::handleDoubleClick(S32 x, S32 y, MASK mask) { - return TRUE; + return true; } BOOL LLToolCompInspect::handleKey(KEY key, MASK mask) @@ -255,7 +255,7 @@ LLToolCompTranslate::~LLToolCompTranslate() mSelectRect = NULL; } -BOOL LLToolCompTranslate::handleHover(S32 x, S32 y, MASK mask) +bool LLToolCompTranslate::handleHover(S32 x, S32 y, MASK mask) { if( !mCur->hasMouseCapture() ) { @@ -265,12 +265,12 @@ BOOL LLToolCompTranslate::handleHover(S32 x, S32 y, MASK mask) } -BOOL LLToolCompTranslate::handleMouseDown(S32 x, S32 y, MASK mask) +bool LLToolCompTranslate::handleMouseDown(S32 x, S32 y, MASK mask) { mMouseDown = TRUE; gViewerWindow->pickAsync(x, y, mask, pickCallback, /*BOOL pick_transparent*/ FALSE, LLFloaterReg::instanceVisible("build"), FALSE, gSavedSettings.getBOOL("SelectReflectionProbes"));; - return TRUE; + return true; } void LLToolCompTranslate::pickCallback(const LLPickInfo& pick_info) @@ -315,7 +315,7 @@ void LLToolCompTranslate::pickCallback(const LLPickInfo& pick_info) } } -BOOL LLToolCompTranslate::handleMouseUp(S32 x, S32 y, MASK mask) +bool LLToolCompTranslate::handleMouseUp(S32 x, S32 y, MASK mask) { mMouseDown = FALSE; return LLToolComposite::handleMouseUp(x, y, mask); @@ -334,14 +334,14 @@ LLTool* LLToolCompTranslate::getOverrideTool(MASK mask) return LLToolComposite::getOverrideTool(mask); } -BOOL LLToolCompTranslate::handleDoubleClick(S32 x, S32 y, MASK mask) +bool LLToolCompTranslate::handleDoubleClick(S32 x, S32 y, MASK mask) { if (mManip->getSelection()->isEmpty() && mManip->getHighlightedPart() == LLManip::LL_NO_PART) { // You should already have an object selected from the mousedown. // If so, show its properties LLFloaterReg::showInstance("build", "Content"); - return TRUE; + return true; } // Nothing selected means the first mouse click was probably // bad, so try again. @@ -382,7 +382,7 @@ LLToolCompScale::~LLToolCompScale() delete mSelectRect; } -BOOL LLToolCompScale::handleHover(S32 x, S32 y, MASK mask) +bool LLToolCompScale::handleHover(S32 x, S32 y, MASK mask) { if( !mCur->hasMouseCapture() ) { @@ -392,11 +392,11 @@ BOOL LLToolCompScale::handleHover(S32 x, S32 y, MASK mask) } -BOOL LLToolCompScale::handleMouseDown(S32 x, S32 y, MASK mask) +bool LLToolCompScale::handleMouseDown(S32 x, S32 y, MASK mask) { mMouseDown = TRUE; gViewerWindow->pickAsync(x, y, mask, pickCallback); - return TRUE; + return true; } void LLToolCompScale::pickCallback(const LLPickInfo& pick_info) @@ -436,7 +436,7 @@ void LLToolCompScale::pickCallback(const LLPickInfo& pick_info) } } -BOOL LLToolCompScale::handleMouseUp(S32 x, S32 y, MASK mask) +bool LLToolCompScale::handleMouseUp(S32 x, S32 y, MASK mask) { mMouseDown = FALSE; return LLToolComposite::handleMouseUp(x, y, mask); @@ -453,14 +453,14 @@ LLTool* LLToolCompScale::getOverrideTool(MASK mask) } -BOOL LLToolCompScale::handleDoubleClick(S32 x, S32 y, MASK mask) +bool LLToolCompScale::handleDoubleClick(S32 x, S32 y, MASK mask) { if (!mManip->getSelection()->isEmpty() && mManip->getHighlightedPart() == LLManip::LL_NO_PART) { // You should already have an object selected from the mousedown. // If so, show its properties LLFloaterReg::showInstance("build", "Content"); - return TRUE; + return true; } else { @@ -504,15 +504,15 @@ LLToolCompCreate::~LLToolCompCreate() } -BOOL LLToolCompCreate::handleMouseDown(S32 x, S32 y, MASK mask) +bool LLToolCompCreate::handleMouseDown(S32 x, S32 y, MASK mask) { - BOOL handled = FALSE; + bool handled = false; mMouseDown = TRUE; if ( (mask == MASK_SHIFT) || (mask == MASK_CONTROL) ) { gViewerWindow->pickAsync(x, y, mask, pickCallback); - handled = TRUE; + handled = true; } else { @@ -536,14 +536,14 @@ void LLToolCompCreate::pickCallback(const LLPickInfo& pick_info) LLToolCompCreate::getInstance()->mSelectRect->handlePick( pick_info ); } -BOOL LLToolCompCreate::handleDoubleClick(S32 x, S32 y, MASK mask) +bool LLToolCompCreate::handleDoubleClick(S32 x, S32 y, MASK mask) { return handleMouseDown(x, y, mask); } -BOOL LLToolCompCreate::handleMouseUp(S32 x, S32 y, MASK mask) +bool LLToolCompCreate::handleMouseUp(S32 x, S32 y, MASK mask) { - BOOL handled = FALSE; + bool handled = false; if ( mMouseDown && !mObjectPlacedOnMouseDown && !(mask == MASK_SHIFT) && !(mask == MASK_CONTROL) ) { @@ -582,7 +582,7 @@ LLToolCompRotate::~LLToolCompRotate() delete mSelectRect; } -BOOL LLToolCompRotate::handleHover(S32 x, S32 y, MASK mask) +bool LLToolCompRotate::handleHover(S32 x, S32 y, MASK mask) { if( !mCur->hasMouseCapture() ) { @@ -592,11 +592,11 @@ BOOL LLToolCompRotate::handleHover(S32 x, S32 y, MASK mask) } -BOOL LLToolCompRotate::handleMouseDown(S32 x, S32 y, MASK mask) +bool LLToolCompRotate::handleMouseDown(S32 x, S32 y, MASK mask) { mMouseDown = TRUE; gViewerWindow->pickAsync(x, y, mask, pickCallback); - return TRUE; + return true; } void LLToolCompRotate::pickCallback(const LLPickInfo& pick_info) @@ -635,7 +635,7 @@ void LLToolCompRotate::pickCallback(const LLPickInfo& pick_info) } } -BOOL LLToolCompRotate::handleMouseUp(S32 x, S32 y, MASK mask) +bool LLToolCompRotate::handleMouseUp(S32 x, S32 y, MASK mask) { mMouseDown = FALSE; return LLToolComposite::handleMouseUp(x, y, mask); @@ -650,14 +650,14 @@ LLTool* LLToolCompRotate::getOverrideTool(MASK mask) return LLToolComposite::getOverrideTool(mask); } -BOOL LLToolCompRotate::handleDoubleClick(S32 x, S32 y, MASK mask) +bool LLToolCompRotate::handleDoubleClick(S32 x, S32 y, MASK mask) { if (!mManip->getSelection()->isEmpty() && mManip->getHighlightedPart() == LLManip::LL_NO_PART) { // You should already have an object selected from the mousedown. // If so, show its properties LLFloaterReg::showInstance("build", "Content"); - return TRUE; + return true; } else { @@ -708,7 +708,7 @@ LLToolCompGun::~LLToolCompGun() mNull = NULL; } -BOOL LLToolCompGun::handleHover(S32 x, S32 y, MASK mask) +bool LLToolCompGun::handleHover(S32 x, S32 y, MASK mask) { // *NOTE: This hack is here to make mouselook kick in again after // item selected from context menu. @@ -740,17 +740,17 @@ BOOL LLToolCompGun::handleHover(S32 x, S32 y, MASK mask) } } - return TRUE; + return true; } -BOOL LLToolCompGun::handleMouseDown(S32 x, S32 y, MASK mask) +bool LLToolCompGun::handleMouseDown(S32 x, S32 y, MASK mask) { // if the left button is grabbed, don't put up the pie menu if (gAgent.leftButtonGrabbed() && gViewerInput.isLMouseHandlingDefault(MODE_FIRST_PERSON)) { gAgent.setControlFlags(AGENT_CONTROL_ML_LBUTTON_DOWN); - return FALSE; + return false; } // On mousedown, start grabbing @@ -761,13 +761,13 @@ BOOL LLToolCompGun::handleMouseDown(S32 x, S32 y, MASK mask) } -BOOL LLToolCompGun::handleDoubleClick(S32 x, S32 y, MASK mask) +bool LLToolCompGun::handleDoubleClick(S32 x, S32 y, MASK mask) { // if the left button is grabbed, don't put up the pie menu if (gAgent.leftButtonGrabbed() && gViewerInput.isLMouseHandlingDefault(MODE_FIRST_PERSON)) { gAgent.setControlFlags(AGENT_CONTROL_ML_LBUTTON_DOWN); - return FALSE; + return false; } // On mousedown, start grabbing @@ -778,7 +778,7 @@ BOOL LLToolCompGun::handleDoubleClick(S32 x, S32 y, MASK mask) } -BOOL LLToolCompGun::handleRightMouseDown(S32 x, S32 y, MASK mask) +bool LLToolCompGun::handleRightMouseDown(S32 x, S32 y, MASK mask) { /* JC - suppress context menu 8/29/2002 @@ -788,22 +788,22 @@ BOOL LLToolCompGun::handleRightMouseDown(S32 x, S32 y, MASK mask) // This should return FALSE, meaning the context menu will // be shown. - return FALSE; + return false; */ // Returning true will suppress the context menu - return TRUE; + return true; } -BOOL LLToolCompGun::handleMouseUp(S32 x, S32 y, MASK mask) +bool LLToolCompGun::handleMouseUp(S32 x, S32 y, MASK mask) { if (gViewerInput.isLMouseHandlingDefault(MODE_FIRST_PERSON)) { gAgent.setControlFlags(AGENT_CONTROL_ML_LBUTTON_UP); } setCurrentTool( (LLTool*) mGun ); - return TRUE; + return true; } void LLToolCompGun::onMouseCaptureLost() @@ -829,12 +829,12 @@ void LLToolCompGun::handleDeselect() } -BOOL LLToolCompGun::handleScrollWheel(S32 x, S32 y, S32 clicks) +bool LLToolCompGun::handleScrollWheel(S32 x, S32 y, S32 clicks) { if (clicks > 0) { gAgentCamera.changeCameraToDefault(); } - return TRUE; + return true; } -- cgit v1.2.3 From 60d3dd98a44230c21803c1606552ee098ed9fa7c Mon Sep 17 00:00:00 2001 From: Ansariel Date: Wed, 21 Feb 2024 21:05:14 +0100 Subject: Convert remaining BOOL to bool --- indra/newview/lltoolcomp.cpp | 70 ++++++++++++++++++++++---------------------- 1 file changed, 35 insertions(+), 35 deletions(-) (limited to 'indra/newview/lltoolcomp.cpp') diff --git a/indra/newview/lltoolcomp.cpp b/indra/newview/lltoolcomp.cpp index 9f25a1c075..999b16ad22 100644 --- a/indra/newview/lltoolcomp.cpp +++ b/indra/newview/lltoolcomp.cpp @@ -83,8 +83,8 @@ LLToolComposite::LLToolComposite(const std::string& name) : LLTool(name), mCur(sNullTool), mDefault(sNullTool), - mSelected(FALSE), - mMouseDown(FALSE), mManip(NULL), mSelectRect(NULL) + mSelected(false), + mMouseDown(false), mManip(NULL), mSelectRect(NULL) { } @@ -105,7 +105,7 @@ void LLToolComposite::onMouseCaptureLost() setCurrentTool( mDefault ); } -BOOL LLToolComposite::isSelecting() +bool LLToolComposite::isSelecting() { return mCur == mSelectRect; } @@ -118,14 +118,14 @@ void LLToolComposite::handleSelect() } mCur = mDefault; mCur->handleSelect(); - mSelected = TRUE; + mSelected = true; } void LLToolComposite::handleDeselect() { mCur->handleDeselect(); mCur = mDefault; - mSelected = FALSE; + mSelected = false; } //---------------------------------------------------------------------------- @@ -134,7 +134,7 @@ void LLToolComposite::handleDeselect() LLToolCompInspect::LLToolCompInspect() : LLToolComposite(std::string("Inspect")), - mIsToolCameraActive(FALSE) + mIsToolCameraActive(false) { mSelectRect = new LLToolSelectRect(this); mDefault = mSelectRect; @@ -157,7 +157,7 @@ bool LLToolCompInspect::handleMouseDown(S32 x, S32 y, MASK mask) } else { - mMouseDown = TRUE; + mMouseDown = true; gViewerWindow->pickAsync(x, y, mask, pickCallback); handled = true; } @@ -180,7 +180,7 @@ void LLToolCompInspect::pickCallback(const LLPickInfo& pick_info) if (!tool_inspectp->mMouseDown) { // fast click on object, but mouse is already up...just do select - tool_inspectp->mSelectRect->handleObjectSelection(pick_info, gSavedSettings.getBOOL("EditLinkedParts"), FALSE); + tool_inspectp->mSelectRect->handleObjectSelection(pick_info, gSavedSettings.getBOOL("EditLinkedParts"), false); return; } @@ -190,7 +190,7 @@ void LLToolCompInspect::pickCallback(const LLPickInfo& pick_info) } tool_inspectp->setCurrentTool( tool_inspectp->mSelectRect ); - tool_inspectp->mIsToolCameraActive = FALSE; + tool_inspectp->mIsToolCameraActive = false; tool_inspectp->mSelectRect->handlePick( pick_info ); } @@ -199,15 +199,15 @@ bool LLToolCompInspect::handleDoubleClick(S32 x, S32 y, MASK mask) return true; } -BOOL LLToolCompInspect::handleKey(KEY key, MASK mask) +bool LLToolCompInspect::handleKey(KEY key, MASK mask) { - BOOL handled = FALSE; + bool handled = false; if(KEY_ALT == key) { setCurrentTool(LLToolCamera::getInstance()); - mIsToolCameraActive = TRUE; - handled = TRUE; + mIsToolCameraActive = true; + handled = true; } else { @@ -220,7 +220,7 @@ BOOL LLToolCompInspect::handleKey(KEY key, MASK mask) void LLToolCompInspect::onMouseCaptureLost() { LLToolComposite::onMouseCaptureLost(); - mIsToolCameraActive = FALSE; + mIsToolCameraActive = false; } void LLToolCompInspect::keyUp(KEY key, MASK mask) @@ -228,7 +228,7 @@ void LLToolCompInspect::keyUp(KEY key, MASK mask) if (KEY_ALT == key && mCur == LLToolCamera::getInstance()) { setCurrentTool(mDefault); - mIsToolCameraActive = FALSE; + mIsToolCameraActive = false; } } @@ -267,8 +267,8 @@ bool LLToolCompTranslate::handleHover(S32 x, S32 y, MASK mask) bool LLToolCompTranslate::handleMouseDown(S32 x, S32 y, MASK mask) { - mMouseDown = TRUE; - gViewerWindow->pickAsync(x, y, mask, pickCallback, /*BOOL pick_transparent*/ FALSE, LLFloaterReg::instanceVisible("build"), FALSE, + mMouseDown = true; + gViewerWindow->pickAsync(x, y, mask, pickCallback, /*bool pick_transparent*/ false, LLFloaterReg::instanceVisible("build"), false, gSavedSettings.getBOOL("SelectReflectionProbes"));; return true; } @@ -281,7 +281,7 @@ void LLToolCompTranslate::pickCallback(const LLPickInfo& pick_info) if (!LLToolCompTranslate::getInstance()->mMouseDown) { // fast click on object, but mouse is already up...just do select - LLToolCompTranslate::getInstance()->mSelectRect->handleObjectSelection(pick_info, gSavedSettings.getBOOL("EditLinkedParts"), FALSE); + LLToolCompTranslate::getInstance()->mSelectRect->handleObjectSelection(pick_info, gSavedSettings.getBOOL("EditLinkedParts"), false); return; } @@ -292,7 +292,7 @@ void LLToolCompTranslate::pickCallback(const LLPickInfo& pick_info) LLEditMenuHandler::gEditMenuHandler = LLSelectMgr::getInstance(); } - BOOL can_move = LLToolCompTranslate::getInstance()->mManip->canAffectSelection(); + bool can_move = LLToolCompTranslate::getInstance()->mManip->canAffectSelection(); if( LLManip::LL_NO_PART != LLToolCompTranslate::getInstance()->mManip->getHighlightedPart() && can_move) { @@ -317,7 +317,7 @@ void LLToolCompTranslate::pickCallback(const LLPickInfo& pick_info) bool LLToolCompTranslate::handleMouseUp(S32 x, S32 y, MASK mask) { - mMouseDown = FALSE; + mMouseDown = false; return LLToolComposite::handleMouseUp(x, y, mask); } @@ -394,7 +394,7 @@ bool LLToolCompScale::handleHover(S32 x, S32 y, MASK mask) bool LLToolCompScale::handleMouseDown(S32 x, S32 y, MASK mask) { - mMouseDown = TRUE; + mMouseDown = true; gViewerWindow->pickAsync(x, y, mask, pickCallback); return true; } @@ -407,7 +407,7 @@ void LLToolCompScale::pickCallback(const LLPickInfo& pick_info) if (!LLToolCompScale::getInstance()->mMouseDown) { // fast click on object, but mouse is already up...just do select - LLToolCompScale::getInstance()->mSelectRect->handleObjectSelection(pick_info, gSavedSettings.getBOOL("EditLinkedParts"), FALSE); + LLToolCompScale::getInstance()->mSelectRect->handleObjectSelection(pick_info, gSavedSettings.getBOOL("EditLinkedParts"), false); return; } @@ -438,7 +438,7 @@ void LLToolCompScale::pickCallback(const LLPickInfo& pick_info) bool LLToolCompScale::handleMouseUp(S32 x, S32 y, MASK mask) { - mMouseDown = FALSE; + mMouseDown = false; return LLToolComposite::handleMouseUp(x, y, mask); } @@ -493,7 +493,7 @@ LLToolCompCreate::LLToolCompCreate() mCur = mPlacer; mDefault = mPlacer; - mObjectPlacedOnMouseDown = FALSE; + mObjectPlacedOnMouseDown = false; } @@ -507,7 +507,7 @@ LLToolCompCreate::~LLToolCompCreate() bool LLToolCompCreate::handleMouseDown(S32 x, S32 y, MASK mask) { bool handled = false; - mMouseDown = TRUE; + mMouseDown = true; if ( (mask == MASK_SHIFT) || (mask == MASK_CONTROL) ) { @@ -520,7 +520,7 @@ bool LLToolCompCreate::handleMouseDown(S32 x, S32 y, MASK mask) handled = mPlacer->placeObject( x, y, mask ); } - mObjectPlacedOnMouseDown = TRUE; + mObjectPlacedOnMouseDown = true; return handled; } @@ -551,8 +551,8 @@ bool LLToolCompCreate::handleMouseUp(S32 x, S32 y, MASK mask) handled = mPlacer->placeObject( x, y, mask ); } - mObjectPlacedOnMouseDown = FALSE; - mMouseDown = FALSE; + mObjectPlacedOnMouseDown = false; + mMouseDown = false; if (!handled) { @@ -594,7 +594,7 @@ bool LLToolCompRotate::handleHover(S32 x, S32 y, MASK mask) bool LLToolCompRotate::handleMouseDown(S32 x, S32 y, MASK mask) { - mMouseDown = TRUE; + mMouseDown = true; gViewerWindow->pickAsync(x, y, mask, pickCallback); return true; } @@ -607,7 +607,7 @@ void LLToolCompRotate::pickCallback(const LLPickInfo& pick_info) if (!LLToolCompRotate::getInstance()->mMouseDown) { // fast click on object, but mouse is already up...just do select - LLToolCompRotate::getInstance()->mSelectRect->handleObjectSelection(pick_info, gSavedSettings.getBOOL("EditLinkedParts"), FALSE); + LLToolCompRotate::getInstance()->mSelectRect->handleObjectSelection(pick_info, gSavedSettings.getBOOL("EditLinkedParts"), false); return; } @@ -637,7 +637,7 @@ void LLToolCompRotate::pickCallback(const LLPickInfo& pick_info) bool LLToolCompRotate::handleMouseUp(S32 x, S32 y, MASK mask) { - mMouseDown = FALSE; + mMouseDown = false; return LLToolComposite::handleMouseUp(x, y, mask); } @@ -736,7 +736,7 @@ bool LLToolCompGun::handleHover(S32 x, S32 y, MASK mask) else if ( mCur == mGrab && !(mask & MASK_ALT) ) { setCurrentTool( (LLTool*) mGun ); - setMouseCapture(TRUE); + setMouseCapture(true); } } @@ -786,7 +786,7 @@ bool LLToolCompGun::handleRightMouseDown(S32 x, S32 y, MASK mask) // make the build menu appear. setCurrentTool( (LLTool*) mNull ); - // This should return FALSE, meaning the context menu will + // This should return false, meaning the context menu will // be shown. return false; */ @@ -819,13 +819,13 @@ void LLToolCompGun::onMouseCaptureLost() void LLToolCompGun::handleSelect() { LLToolComposite::handleSelect(); - setMouseCapture(TRUE); + setMouseCapture(true); } void LLToolCompGun::handleDeselect() { LLToolComposite::handleDeselect(); - setMouseCapture(FALSE); + setMouseCapture(false); } -- cgit v1.2.3 From e2e37cced861b98de8c1a7c9c0d3a50d2d90e433 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Wed, 22 May 2024 21:25:21 +0200 Subject: Fix line endlings --- indra/newview/lltoolcomp.cpp | 1680 +++++++++++++++++++++--------------------- 1 file changed, 840 insertions(+), 840 deletions(-) (limited to 'indra/newview/lltoolcomp.cpp') diff --git a/indra/newview/lltoolcomp.cpp b/indra/newview/lltoolcomp.cpp index e0310e8885..c6e59a81c9 100644 --- a/indra/newview/lltoolcomp.cpp +++ b/indra/newview/lltoolcomp.cpp @@ -1,840 +1,840 @@ -/** - * @file lltoolcomp.cpp - * @brief Composite tools - * - * $LicenseInfo:firstyear=2001&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 "lltoolcomp.h" - -#include "llfloaterreg.h" -#include "llgl.h" -#include "indra_constants.h" - -#include "llmanip.h" -#include "llmaniprotate.h" -#include "llmanipscale.h" -#include "llmaniptranslate.h" -#include "llmenugl.h" // for right-click menu hack -#include "llselectmgr.h" -#include "lltoolfocus.h" -#include "lltoolgrab.h" -#include "lltoolgun.h" -#include "lltoolmgr.h" -#include "lltoolselectrect.h" -#include "lltoolplacer.h" -#include "llviewerinput.h" -#include "llviewermenu.h" -#include "llviewerobject.h" -#include "llviewerwindow.h" -#include "llagent.h" -#include "llagentcamera.h" -#include "llfloatertools.h" -#include "llviewercontrol.h" - -extern LLControlGroup gSavedSettings; - -// we use this in various places instead of NULL -static LLPointer sNullTool(new LLTool(std::string("null"), NULL)); - -//----------------------------------------------------------------------- -// LLToolComposite - -//static -void LLToolComposite::setCurrentTool( LLTool* new_tool ) -{ - if( mCur != new_tool ) - { - if( mSelected ) - { - mCur->handleDeselect(); - mCur = new_tool; - mCur->handleSelect(); - } - else - { - mCur = new_tool; - } - } -} - -LLToolComposite::LLToolComposite(const std::string& name) - : LLTool(name), - mCur(sNullTool), - mDefault(sNullTool), - mSelected(false), - mMouseDown(false), mManip(NULL), mSelectRect(NULL) -{ -} - -// Returns to the default tool -bool LLToolComposite::handleMouseUp(S32 x, S32 y, MASK mask) -{ - bool handled = mCur->handleMouseUp( x, y, mask ); - if( handled ) - { - setCurrentTool( mDefault ); - } - return handled; -} - -void LLToolComposite::onMouseCaptureLost() -{ - mCur->onMouseCaptureLost(); - setCurrentTool( mDefault ); -} - -bool LLToolComposite::isSelecting() -{ - return mCur == mSelectRect; -} - -void LLToolComposite::handleSelect() -{ - if (!gSavedSettings.getBOOL("EditLinkedParts")) - { - LLSelectMgr::getInstance()->promoteSelectionToRoot(); - } - mCur = mDefault; - mCur->handleSelect(); - mSelected = true; -} - -void LLToolComposite::handleDeselect() -{ - mCur->handleDeselect(); - mCur = mDefault; - mSelected = false; -} - -//---------------------------------------------------------------------------- -// LLToolCompInspect -//---------------------------------------------------------------------------- - -LLToolCompInspect::LLToolCompInspect() -: LLToolComposite(std::string("Inspect")), - mIsToolCameraActive(false) -{ - mSelectRect = new LLToolSelectRect(this); - mDefault = mSelectRect; -} - - -LLToolCompInspect::~LLToolCompInspect() -{ - delete mSelectRect; - mSelectRect = NULL; -} - -bool LLToolCompInspect::handleMouseDown(S32 x, S32 y, MASK mask) -{ - bool handled = false; - - if (mCur == LLToolCamera::getInstance()) - { - handled = mCur->handleMouseDown(x, y, mask); - } - else - { - mMouseDown = true; - gViewerWindow->pickAsync(x, y, mask, pickCallback); - handled = true; - } - - return handled; -} - -bool LLToolCompInspect::handleMouseUp(S32 x, S32 y, MASK mask) -{ - bool handled = LLToolComposite::handleMouseUp(x, y, mask); - mIsToolCameraActive = getCurrentTool() == LLToolCamera::getInstance(); - return handled; -} - -void LLToolCompInspect::pickCallback(const LLPickInfo& pick_info) -{ - LLViewerObject* hit_obj = pick_info.getObject(); - LLToolCompInspect * tool_inspectp = LLToolCompInspect::getInstance(); - - if (!tool_inspectp->mMouseDown) - { - // fast click on object, but mouse is already up...just do select - tool_inspectp->mSelectRect->handleObjectSelection(pick_info, gSavedSettings.getBOOL("EditLinkedParts"), false); - return; - } - - LLSelectMgr * mgr_selectp = LLSelectMgr::getInstance(); - if( hit_obj && mgr_selectp->getSelection()->getObjectCount()) { - LLEditMenuHandler::gEditMenuHandler = mgr_selectp; - } - - tool_inspectp->setCurrentTool( tool_inspectp->mSelectRect ); - tool_inspectp->mIsToolCameraActive = false; - tool_inspectp->mSelectRect->handlePick( pick_info ); -} - -bool LLToolCompInspect::handleDoubleClick(S32 x, S32 y, MASK mask) -{ - return true; -} - -bool LLToolCompInspect::handleKey(KEY key, MASK mask) -{ - bool handled = false; - - if(KEY_ALT == key) - { - setCurrentTool(LLToolCamera::getInstance()); - mIsToolCameraActive = true; - handled = true; - } - else - { - handled = LLToolComposite::handleKey(key, mask); - } - - return handled; -} - -void LLToolCompInspect::onMouseCaptureLost() -{ - LLToolComposite::onMouseCaptureLost(); - mIsToolCameraActive = false; -} - -void LLToolCompInspect::keyUp(KEY key, MASK mask) -{ - if (KEY_ALT == key && mCur == LLToolCamera::getInstance()) - { - setCurrentTool(mDefault); - mIsToolCameraActive = false; - } -} - -//---------------------------------------------------------------------------- -// LLToolCompTranslate -//---------------------------------------------------------------------------- - -LLToolCompTranslate::LLToolCompTranslate() - : LLToolComposite(std::string("Move")) -{ - mManip = new LLManipTranslate(this); - mSelectRect = new LLToolSelectRect(this); - - mCur = mManip; - mDefault = mManip; -} - -LLToolCompTranslate::~LLToolCompTranslate() -{ - delete mManip; - mManip = NULL; - - delete mSelectRect; - mSelectRect = NULL; -} - -bool LLToolCompTranslate::handleHover(S32 x, S32 y, MASK mask) -{ - if( !mCur->hasMouseCapture() ) - { - setCurrentTool( mManip ); - } - return mCur->handleHover( x, y, mask ); -} - - -bool LLToolCompTranslate::handleMouseDown(S32 x, S32 y, MASK mask) -{ - mMouseDown = true; - gViewerWindow->pickAsync(x, y, mask, pickCallback, /*bool pick_transparent*/ false, LLFloaterReg::instanceVisible("build"), false, - gSavedSettings.getBOOL("SelectReflectionProbes"));; - return true; -} - -void LLToolCompTranslate::pickCallback(const LLPickInfo& pick_info) -{ - LLViewerObject* hit_obj = pick_info.getObject(); - - LLToolCompTranslate::getInstance()->mManip->highlightManipulators(pick_info.mMousePt.mX, pick_info.mMousePt.mY); - if (!LLToolCompTranslate::getInstance()->mMouseDown) - { - // fast click on object, but mouse is already up...just do select - LLToolCompTranslate::getInstance()->mSelectRect->handleObjectSelection(pick_info, gSavedSettings.getBOOL("EditLinkedParts"), false); - return; - } - - if( hit_obj || LLToolCompTranslate::getInstance()->mManip->getHighlightedPart() != LLManip::LL_NO_PART ) - { - if (LLToolCompTranslate::getInstance()->mManip->getSelection()->getObjectCount()) - { - LLEditMenuHandler::gEditMenuHandler = LLSelectMgr::getInstance(); - } - - bool can_move = LLToolCompTranslate::getInstance()->mManip->canAffectSelection(); - - if( LLManip::LL_NO_PART != LLToolCompTranslate::getInstance()->mManip->getHighlightedPart() && can_move) - { - LLToolCompTranslate::getInstance()->setCurrentTool( LLToolCompTranslate::getInstance()->mManip ); - LLToolCompTranslate::getInstance()->mManip->handleMouseDownOnPart( pick_info.mMousePt.mX, pick_info.mMousePt.mY, pick_info.mKeyMask ); - } - else - { - LLToolCompTranslate::getInstance()->setCurrentTool( LLToolCompTranslate::getInstance()->mSelectRect ); - LLToolCompTranslate::getInstance()->mSelectRect->handlePick( pick_info ); - - // *TODO: add toggle to trigger old click-drag functionality - // LLToolCompTranslate::getInstance()->mManip->handleMouseDownOnPart( XY_part, x, y, mask); - } - } - else - { - LLToolCompTranslate::getInstance()->setCurrentTool( LLToolCompTranslate::getInstance()->mSelectRect ); - LLToolCompTranslate::getInstance()->mSelectRect->handlePick( pick_info ); - } -} - -bool LLToolCompTranslate::handleMouseUp(S32 x, S32 y, MASK mask) -{ - mMouseDown = false; - return LLToolComposite::handleMouseUp(x, y, mask); -} - -LLTool* LLToolCompTranslate::getOverrideTool(MASK mask) -{ - if (mask == MASK_CONTROL) - { - return LLToolCompRotate::getInstance(); - } - else if (mask == (MASK_CONTROL | MASK_SHIFT)) - { - return LLToolCompScale::getInstance(); - } - return LLToolComposite::getOverrideTool(mask); -} - -bool LLToolCompTranslate::handleDoubleClick(S32 x, S32 y, MASK mask) -{ - if (mManip->getSelection()->isEmpty() && mManip->getHighlightedPart() == LLManip::LL_NO_PART) - { - // You should already have an object selected from the mousedown. - // If so, show its properties - LLFloaterReg::showInstance("build", "Content"); - return true; - } - // Nothing selected means the first mouse click was probably - // bad, so try again. - // This also consumes the event to prevent things like double-click - // teleport from triggering. - return handleMouseDown(x, y, mask); -} - - -void LLToolCompTranslate::render() -{ - mCur->render(); // removing this will not draw the RGB arrows and guidelines - - if( mCur != mManip ) - { - LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); - mManip->renderGuidelines(); - } -} - - -//----------------------------------------------------------------------- -// LLToolCompScale - -LLToolCompScale::LLToolCompScale() - : LLToolComposite(std::string("Stretch")) -{ - mManip = new LLManipScale(this); - mSelectRect = new LLToolSelectRect(this); - - mCur = mManip; - mDefault = mManip; -} - -LLToolCompScale::~LLToolCompScale() -{ - delete mManip; - delete mSelectRect; -} - -bool LLToolCompScale::handleHover(S32 x, S32 y, MASK mask) -{ - if( !mCur->hasMouseCapture() ) - { - setCurrentTool(mManip ); - } - return mCur->handleHover( x, y, mask ); -} - - -bool LLToolCompScale::handleMouseDown(S32 x, S32 y, MASK mask) -{ - mMouseDown = true; - gViewerWindow->pickAsync(x, y, mask, pickCallback); - return true; -} - -void LLToolCompScale::pickCallback(const LLPickInfo& pick_info) -{ - LLViewerObject* hit_obj = pick_info.getObject(); - - LLToolCompScale::getInstance()->mManip->highlightManipulators(pick_info.mMousePt.mX, pick_info.mMousePt.mY); - if (!LLToolCompScale::getInstance()->mMouseDown) - { - // fast click on object, but mouse is already up...just do select - LLToolCompScale::getInstance()->mSelectRect->handleObjectSelection(pick_info, gSavedSettings.getBOOL("EditLinkedParts"), false); - - return; - } - - if( hit_obj || LLToolCompScale::getInstance()->mManip->getHighlightedPart() != LLManip::LL_NO_PART) - { - if (LLToolCompScale::getInstance()->mManip->getSelection()->getObjectCount()) - { - LLEditMenuHandler::gEditMenuHandler = LLSelectMgr::getInstance(); - } - if( LLManip::LL_NO_PART != LLToolCompScale::getInstance()->mManip->getHighlightedPart() ) - { - LLToolCompScale::getInstance()->setCurrentTool( LLToolCompScale::getInstance()->mManip ); - LLToolCompScale::getInstance()->mManip->handleMouseDownOnPart( pick_info.mMousePt.mX, pick_info.mMousePt.mY, pick_info.mKeyMask ); - } - else - { - LLToolCompScale::getInstance()->setCurrentTool( LLToolCompScale::getInstance()->mSelectRect ); - LLToolCompScale::getInstance()->mSelectRect->handlePick( pick_info ); - } - } - else - { - LLToolCompScale::getInstance()->setCurrentTool( LLToolCompScale::getInstance()->mSelectRect ); - LLToolCompScale::getInstance()->mSelectRect->handlePick( pick_info ); - } -} - -bool LLToolCompScale::handleMouseUp(S32 x, S32 y, MASK mask) -{ - mMouseDown = false; - return LLToolComposite::handleMouseUp(x, y, mask); -} - -LLTool* LLToolCompScale::getOverrideTool(MASK mask) -{ - if (mask == MASK_CONTROL) - { - return LLToolCompRotate::getInstance(); - } - - return LLToolComposite::getOverrideTool(mask); -} - - -bool LLToolCompScale::handleDoubleClick(S32 x, S32 y, MASK mask) -{ - if (!mManip->getSelection()->isEmpty() && mManip->getHighlightedPart() == LLManip::LL_NO_PART) - { - // You should already have an object selected from the mousedown. - // If so, show its properties - LLFloaterReg::showInstance("build", "Content"); - return true; - } - else - { - // Nothing selected means the first mouse click was probably - // bad, so try again. - return handleMouseDown(x, y, mask); - } -} - - -void LLToolCompScale::render() -{ - mCur->render(); - - if( mCur != mManip ) - { - LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); - mManip->renderGuidelines(); - } -} - -//----------------------------------------------------------------------- -// LLToolCompCreate - -LLToolCompCreate::LLToolCompCreate() - : LLToolComposite(std::string("Create")) -{ - mPlacer = new LLToolPlacer(); - mSelectRect = new LLToolSelectRect(this); - - mCur = mPlacer; - mDefault = mPlacer; - mObjectPlacedOnMouseDown = false; -} - - -LLToolCompCreate::~LLToolCompCreate() -{ - delete mPlacer; - delete mSelectRect; -} - - -bool LLToolCompCreate::handleMouseDown(S32 x, S32 y, MASK mask) -{ - bool handled = false; - mMouseDown = true; - - if ( (mask == MASK_SHIFT) || (mask == MASK_CONTROL) ) - { - gViewerWindow->pickAsync(x, y, mask, pickCallback); - handled = true; - } - else - { - setCurrentTool( mPlacer ); - handled = mPlacer->placeObject( x, y, mask ); - } - - mObjectPlacedOnMouseDown = true; - - return handled; -} - -void LLToolCompCreate::pickCallback(const LLPickInfo& pick_info) -{ - // *NOTE: We mask off shift and control, so you cannot - // multi-select multiple objects with the create tool. - MASK mask = (pick_info.mKeyMask & ~MASK_SHIFT); - mask = (mask & ~MASK_CONTROL); - - LLToolCompCreate::getInstance()->setCurrentTool( LLToolCompCreate::getInstance()->mSelectRect ); - LLToolCompCreate::getInstance()->mSelectRect->handlePick( pick_info ); -} - -bool LLToolCompCreate::handleDoubleClick(S32 x, S32 y, MASK mask) -{ - return handleMouseDown(x, y, mask); -} - -bool LLToolCompCreate::handleMouseUp(S32 x, S32 y, MASK mask) -{ - bool handled = false; - - if ( mMouseDown && !mObjectPlacedOnMouseDown && !(mask == MASK_SHIFT) && !(mask == MASK_CONTROL) ) - { - setCurrentTool( mPlacer ); - handled = mPlacer->placeObject( x, y, mask ); - } - - mObjectPlacedOnMouseDown = false; - mMouseDown = false; - - if (!handled) - { - handled = LLToolComposite::handleMouseUp(x, y, mask); - } - - return handled; -} - -//----------------------------------------------------------------------- -// LLToolCompRotate - -LLToolCompRotate::LLToolCompRotate() - : LLToolComposite(std::string("Rotate")) -{ - mManip = new LLManipRotate(this); - mSelectRect = new LLToolSelectRect(this); - - mCur = mManip; - mDefault = mManip; -} - - -LLToolCompRotate::~LLToolCompRotate() -{ - delete mManip; - delete mSelectRect; -} - -bool LLToolCompRotate::handleHover(S32 x, S32 y, MASK mask) -{ - if( !mCur->hasMouseCapture() ) - { - setCurrentTool( mManip ); - } - return mCur->handleHover( x, y, mask ); -} - - -bool LLToolCompRotate::handleMouseDown(S32 x, S32 y, MASK mask) -{ - mMouseDown = true; - gViewerWindow->pickAsync(x, y, mask, pickCallback); - return true; -} - -void LLToolCompRotate::pickCallback(const LLPickInfo& pick_info) -{ - LLViewerObject* hit_obj = pick_info.getObject(); - - LLToolCompRotate::getInstance()->mManip->highlightManipulators(pick_info.mMousePt.mX, pick_info.mMousePt.mY); - if (!LLToolCompRotate::getInstance()->mMouseDown) - { - // fast click on object, but mouse is already up...just do select - LLToolCompRotate::getInstance()->mSelectRect->handleObjectSelection(pick_info, gSavedSettings.getBOOL("EditLinkedParts"), false); - return; - } - - if( hit_obj || LLToolCompRotate::getInstance()->mManip->getHighlightedPart() != LLManip::LL_NO_PART) - { - if (LLToolCompRotate::getInstance()->mManip->getSelection()->getObjectCount()) - { - LLEditMenuHandler::gEditMenuHandler = LLSelectMgr::getInstance(); - } - if( LLManip::LL_NO_PART != LLToolCompRotate::getInstance()->mManip->getHighlightedPart() ) - { - LLToolCompRotate::getInstance()->setCurrentTool( LLToolCompRotate::getInstance()->mManip ); - LLToolCompRotate::getInstance()->mManip->handleMouseDownOnPart( pick_info.mMousePt.mX, pick_info.mMousePt.mY, pick_info.mKeyMask ); - } - else - { - LLToolCompRotate::getInstance()->setCurrentTool( LLToolCompRotate::getInstance()->mSelectRect ); - LLToolCompRotate::getInstance()->mSelectRect->handlePick( pick_info ); - } - } - else - { - LLToolCompRotate::getInstance()->setCurrentTool( LLToolCompRotate::getInstance()->mSelectRect ); - LLToolCompRotate::getInstance()->mSelectRect->handlePick( pick_info ); - } -} - -bool LLToolCompRotate::handleMouseUp(S32 x, S32 y, MASK mask) -{ - mMouseDown = false; - return LLToolComposite::handleMouseUp(x, y, mask); -} - -LLTool* LLToolCompRotate::getOverrideTool(MASK mask) -{ - if (mask == (MASK_CONTROL | MASK_SHIFT)) - { - return LLToolCompScale::getInstance(); - } - return LLToolComposite::getOverrideTool(mask); -} - -bool LLToolCompRotate::handleDoubleClick(S32 x, S32 y, MASK mask) -{ - if (!mManip->getSelection()->isEmpty() && mManip->getHighlightedPart() == LLManip::LL_NO_PART) - { - // You should already have an object selected from the mousedown. - // If so, show its properties - LLFloaterReg::showInstance("build", "Content"); - return true; - } - else - { - // Nothing selected means the first mouse click was probably - // bad, so try again. - return handleMouseDown(x, y, mask); - } -} - - -void LLToolCompRotate::render() -{ - mCur->render(); - - if( mCur != mManip ) - { - LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); - mManip->renderGuidelines(); - } -} - - -//----------------------------------------------------------------------- -// LLToolCompGun - -LLToolCompGun::LLToolCompGun() - : LLToolComposite(std::string("Mouselook")) -{ - mGun = new LLToolGun(this); - mGrab = new LLToolGrabBase(this); - mNull = sNullTool; - - setCurrentTool(mGun); - mDefault = mGun; -} - - -LLToolCompGun::~LLToolCompGun() -{ - delete mGun; - mGun = NULL; - - delete mGrab; - mGrab = NULL; - - // don't delete a static object - // delete mNull; - mNull = NULL; -} - -bool LLToolCompGun::handleHover(S32 x, S32 y, MASK mask) -{ - // *NOTE: This hack is here to make mouselook kick in again after - // item selected from context menu. - if ( mCur == mNull && !gPopupMenuView->getVisible() ) - { - LLSelectMgr::getInstance()->deselectAll(); - setCurrentTool( (LLTool*) mGrab ); - } - - // Note: if the tool changed, we can't delegate the current mouse event - // after the change because tools can modify the mouse during selection and deselection. - // Instead we let the current tool handle the event and then make the change. - // The new tool will take effect on the next frame. - - mCur->handleHover( x, y, mask ); - - // If mouse button not down... - if( !gViewerWindow->getLeftMouseDown()) - { - // let ALT switch from gun to grab - if ( mCur == mGun && (mask & MASK_ALT) ) - { - setCurrentTool( (LLTool*) mGrab ); - } - else if ( mCur == mGrab && !(mask & MASK_ALT) ) - { - setCurrentTool( (LLTool*) mGun ); - setMouseCapture(true); - } - } - - return true; -} - - -bool LLToolCompGun::handleMouseDown(S32 x, S32 y, MASK mask) -{ - // if the left button is grabbed, don't put up the pie menu - if (gAgent.leftButtonGrabbed() && gViewerInput.isLMouseHandlingDefault(MODE_FIRST_PERSON)) - { - gAgent.setControlFlags(AGENT_CONTROL_ML_LBUTTON_DOWN); - return false; - } - - // On mousedown, start grabbing - gGrabTransientTool = this; - LLToolMgr::getInstance()->getCurrentToolset()->selectTool( (LLTool*) mGrab ); - - return LLToolGrab::getInstance()->handleMouseDown(x, y, mask); -} - - -bool LLToolCompGun::handleDoubleClick(S32 x, S32 y, MASK mask) -{ - // if the left button is grabbed, don't put up the pie menu - if (gAgent.leftButtonGrabbed() && gViewerInput.isLMouseHandlingDefault(MODE_FIRST_PERSON)) - { - gAgent.setControlFlags(AGENT_CONTROL_ML_LBUTTON_DOWN); - return false; - } - - // On mousedown, start grabbing - gGrabTransientTool = this; - LLToolMgr::getInstance()->getCurrentToolset()->selectTool( (LLTool*) mGrab ); - - return LLToolGrab::getInstance()->handleDoubleClick(x, y, mask); -} - - -bool LLToolCompGun::handleRightMouseDown(S32 x, S32 y, MASK mask) -{ - /* JC - suppress context menu 8/29/2002 - - // On right mouse, go through some convoluted steps to - // make the build menu appear. - setCurrentTool( (LLTool*) mNull ); - - // This should return false, meaning the context menu will - // be shown. - return false; - */ - - // Returning true will suppress the context menu - return true; -} - - -bool LLToolCompGun::handleMouseUp(S32 x, S32 y, MASK mask) -{ - if (gViewerInput.isLMouseHandlingDefault(MODE_FIRST_PERSON)) - { - gAgent.setControlFlags(AGENT_CONTROL_ML_LBUTTON_UP); - } - setCurrentTool( (LLTool*) mGun ); - return true; -} - -void LLToolCompGun::onMouseCaptureLost() -{ - if (mComposite) - { - mComposite->onMouseCaptureLost(); - return; - } - mCur->onMouseCaptureLost(); -} - -void LLToolCompGun::handleSelect() -{ - LLToolComposite::handleSelect(); - setMouseCapture(true); -} - -void LLToolCompGun::handleDeselect() -{ - LLToolComposite::handleDeselect(); - setMouseCapture(false); -} - - -bool LLToolCompGun::handleScrollWheel(S32 x, S32 y, S32 clicks) -{ - if (clicks > 0) - { - gAgentCamera.changeCameraToDefault(); - - } - return true; -} +/** + * @file lltoolcomp.cpp + * @brief Composite tools + * + * $LicenseInfo:firstyear=2001&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 "lltoolcomp.h" + +#include "llfloaterreg.h" +#include "llgl.h" +#include "indra_constants.h" + +#include "llmanip.h" +#include "llmaniprotate.h" +#include "llmanipscale.h" +#include "llmaniptranslate.h" +#include "llmenugl.h" // for right-click menu hack +#include "llselectmgr.h" +#include "lltoolfocus.h" +#include "lltoolgrab.h" +#include "lltoolgun.h" +#include "lltoolmgr.h" +#include "lltoolselectrect.h" +#include "lltoolplacer.h" +#include "llviewerinput.h" +#include "llviewermenu.h" +#include "llviewerobject.h" +#include "llviewerwindow.h" +#include "llagent.h" +#include "llagentcamera.h" +#include "llfloatertools.h" +#include "llviewercontrol.h" + +extern LLControlGroup gSavedSettings; + +// we use this in various places instead of NULL +static LLPointer sNullTool(new LLTool(std::string("null"), NULL)); + +//----------------------------------------------------------------------- +// LLToolComposite + +//static +void LLToolComposite::setCurrentTool( LLTool* new_tool ) +{ + if( mCur != new_tool ) + { + if( mSelected ) + { + mCur->handleDeselect(); + mCur = new_tool; + mCur->handleSelect(); + } + else + { + mCur = new_tool; + } + } +} + +LLToolComposite::LLToolComposite(const std::string& name) + : LLTool(name), + mCur(sNullTool), + mDefault(sNullTool), + mSelected(false), + mMouseDown(false), mManip(NULL), mSelectRect(NULL) +{ +} + +// Returns to the default tool +bool LLToolComposite::handleMouseUp(S32 x, S32 y, MASK mask) +{ + bool handled = mCur->handleMouseUp( x, y, mask ); + if( handled ) + { + setCurrentTool( mDefault ); + } + return handled; +} + +void LLToolComposite::onMouseCaptureLost() +{ + mCur->onMouseCaptureLost(); + setCurrentTool( mDefault ); +} + +bool LLToolComposite::isSelecting() +{ + return mCur == mSelectRect; +} + +void LLToolComposite::handleSelect() +{ + if (!gSavedSettings.getBOOL("EditLinkedParts")) + { + LLSelectMgr::getInstance()->promoteSelectionToRoot(); + } + mCur = mDefault; + mCur->handleSelect(); + mSelected = true; +} + +void LLToolComposite::handleDeselect() +{ + mCur->handleDeselect(); + mCur = mDefault; + mSelected = false; +} + +//---------------------------------------------------------------------------- +// LLToolCompInspect +//---------------------------------------------------------------------------- + +LLToolCompInspect::LLToolCompInspect() +: LLToolComposite(std::string("Inspect")), + mIsToolCameraActive(false) +{ + mSelectRect = new LLToolSelectRect(this); + mDefault = mSelectRect; +} + + +LLToolCompInspect::~LLToolCompInspect() +{ + delete mSelectRect; + mSelectRect = NULL; +} + +bool LLToolCompInspect::handleMouseDown(S32 x, S32 y, MASK mask) +{ + bool handled = false; + + if (mCur == LLToolCamera::getInstance()) + { + handled = mCur->handleMouseDown(x, y, mask); + } + else + { + mMouseDown = true; + gViewerWindow->pickAsync(x, y, mask, pickCallback); + handled = true; + } + + return handled; +} + +bool LLToolCompInspect::handleMouseUp(S32 x, S32 y, MASK mask) +{ + bool handled = LLToolComposite::handleMouseUp(x, y, mask); + mIsToolCameraActive = getCurrentTool() == LLToolCamera::getInstance(); + return handled; +} + +void LLToolCompInspect::pickCallback(const LLPickInfo& pick_info) +{ + LLViewerObject* hit_obj = pick_info.getObject(); + LLToolCompInspect * tool_inspectp = LLToolCompInspect::getInstance(); + + if (!tool_inspectp->mMouseDown) + { + // fast click on object, but mouse is already up...just do select + tool_inspectp->mSelectRect->handleObjectSelection(pick_info, gSavedSettings.getBOOL("EditLinkedParts"), false); + return; + } + + LLSelectMgr * mgr_selectp = LLSelectMgr::getInstance(); + if( hit_obj && mgr_selectp->getSelection()->getObjectCount()) { + LLEditMenuHandler::gEditMenuHandler = mgr_selectp; + } + + tool_inspectp->setCurrentTool( tool_inspectp->mSelectRect ); + tool_inspectp->mIsToolCameraActive = false; + tool_inspectp->mSelectRect->handlePick( pick_info ); +} + +bool LLToolCompInspect::handleDoubleClick(S32 x, S32 y, MASK mask) +{ + return true; +} + +bool LLToolCompInspect::handleKey(KEY key, MASK mask) +{ + bool handled = false; + + if(KEY_ALT == key) + { + setCurrentTool(LLToolCamera::getInstance()); + mIsToolCameraActive = true; + handled = true; + } + else + { + handled = LLToolComposite::handleKey(key, mask); + } + + return handled; +} + +void LLToolCompInspect::onMouseCaptureLost() +{ + LLToolComposite::onMouseCaptureLost(); + mIsToolCameraActive = false; +} + +void LLToolCompInspect::keyUp(KEY key, MASK mask) +{ + if (KEY_ALT == key && mCur == LLToolCamera::getInstance()) + { + setCurrentTool(mDefault); + mIsToolCameraActive = false; + } +} + +//---------------------------------------------------------------------------- +// LLToolCompTranslate +//---------------------------------------------------------------------------- + +LLToolCompTranslate::LLToolCompTranslate() + : LLToolComposite(std::string("Move")) +{ + mManip = new LLManipTranslate(this); + mSelectRect = new LLToolSelectRect(this); + + mCur = mManip; + mDefault = mManip; +} + +LLToolCompTranslate::~LLToolCompTranslate() +{ + delete mManip; + mManip = NULL; + + delete mSelectRect; + mSelectRect = NULL; +} + +bool LLToolCompTranslate::handleHover(S32 x, S32 y, MASK mask) +{ + if( !mCur->hasMouseCapture() ) + { + setCurrentTool( mManip ); + } + return mCur->handleHover( x, y, mask ); +} + + +bool LLToolCompTranslate::handleMouseDown(S32 x, S32 y, MASK mask) +{ + mMouseDown = true; + gViewerWindow->pickAsync(x, y, mask, pickCallback, /*bool pick_transparent*/ false, LLFloaterReg::instanceVisible("build"), false, + gSavedSettings.getBOOL("SelectReflectionProbes"));; + return true; +} + +void LLToolCompTranslate::pickCallback(const LLPickInfo& pick_info) +{ + LLViewerObject* hit_obj = pick_info.getObject(); + + LLToolCompTranslate::getInstance()->mManip->highlightManipulators(pick_info.mMousePt.mX, pick_info.mMousePt.mY); + if (!LLToolCompTranslate::getInstance()->mMouseDown) + { + // fast click on object, but mouse is already up...just do select + LLToolCompTranslate::getInstance()->mSelectRect->handleObjectSelection(pick_info, gSavedSettings.getBOOL("EditLinkedParts"), false); + return; + } + + if( hit_obj || LLToolCompTranslate::getInstance()->mManip->getHighlightedPart() != LLManip::LL_NO_PART ) + { + if (LLToolCompTranslate::getInstance()->mManip->getSelection()->getObjectCount()) + { + LLEditMenuHandler::gEditMenuHandler = LLSelectMgr::getInstance(); + } + + bool can_move = LLToolCompTranslate::getInstance()->mManip->canAffectSelection(); + + if( LLManip::LL_NO_PART != LLToolCompTranslate::getInstance()->mManip->getHighlightedPart() && can_move) + { + LLToolCompTranslate::getInstance()->setCurrentTool( LLToolCompTranslate::getInstance()->mManip ); + LLToolCompTranslate::getInstance()->mManip->handleMouseDownOnPart( pick_info.mMousePt.mX, pick_info.mMousePt.mY, pick_info.mKeyMask ); + } + else + { + LLToolCompTranslate::getInstance()->setCurrentTool( LLToolCompTranslate::getInstance()->mSelectRect ); + LLToolCompTranslate::getInstance()->mSelectRect->handlePick( pick_info ); + + // *TODO: add toggle to trigger old click-drag functionality + // LLToolCompTranslate::getInstance()->mManip->handleMouseDownOnPart( XY_part, x, y, mask); + } + } + else + { + LLToolCompTranslate::getInstance()->setCurrentTool( LLToolCompTranslate::getInstance()->mSelectRect ); + LLToolCompTranslate::getInstance()->mSelectRect->handlePick( pick_info ); + } +} + +bool LLToolCompTranslate::handleMouseUp(S32 x, S32 y, MASK mask) +{ + mMouseDown = false; + return LLToolComposite::handleMouseUp(x, y, mask); +} + +LLTool* LLToolCompTranslate::getOverrideTool(MASK mask) +{ + if (mask == MASK_CONTROL) + { + return LLToolCompRotate::getInstance(); + } + else if (mask == (MASK_CONTROL | MASK_SHIFT)) + { + return LLToolCompScale::getInstance(); + } + return LLToolComposite::getOverrideTool(mask); +} + +bool LLToolCompTranslate::handleDoubleClick(S32 x, S32 y, MASK mask) +{ + if (mManip->getSelection()->isEmpty() && mManip->getHighlightedPart() == LLManip::LL_NO_PART) + { + // You should already have an object selected from the mousedown. + // If so, show its properties + LLFloaterReg::showInstance("build", "Content"); + return true; + } + // Nothing selected means the first mouse click was probably + // bad, so try again. + // This also consumes the event to prevent things like double-click + // teleport from triggering. + return handleMouseDown(x, y, mask); +} + + +void LLToolCompTranslate::render() +{ + mCur->render(); // removing this will not draw the RGB arrows and guidelines + + if( mCur != mManip ) + { + LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); + mManip->renderGuidelines(); + } +} + + +//----------------------------------------------------------------------- +// LLToolCompScale + +LLToolCompScale::LLToolCompScale() + : LLToolComposite(std::string("Stretch")) +{ + mManip = new LLManipScale(this); + mSelectRect = new LLToolSelectRect(this); + + mCur = mManip; + mDefault = mManip; +} + +LLToolCompScale::~LLToolCompScale() +{ + delete mManip; + delete mSelectRect; +} + +bool LLToolCompScale::handleHover(S32 x, S32 y, MASK mask) +{ + if( !mCur->hasMouseCapture() ) + { + setCurrentTool(mManip ); + } + return mCur->handleHover( x, y, mask ); +} + + +bool LLToolCompScale::handleMouseDown(S32 x, S32 y, MASK mask) +{ + mMouseDown = true; + gViewerWindow->pickAsync(x, y, mask, pickCallback); + return true; +} + +void LLToolCompScale::pickCallback(const LLPickInfo& pick_info) +{ + LLViewerObject* hit_obj = pick_info.getObject(); + + LLToolCompScale::getInstance()->mManip->highlightManipulators(pick_info.mMousePt.mX, pick_info.mMousePt.mY); + if (!LLToolCompScale::getInstance()->mMouseDown) + { + // fast click on object, but mouse is already up...just do select + LLToolCompScale::getInstance()->mSelectRect->handleObjectSelection(pick_info, gSavedSettings.getBOOL("EditLinkedParts"), false); + + return; + } + + if( hit_obj || LLToolCompScale::getInstance()->mManip->getHighlightedPart() != LLManip::LL_NO_PART) + { + if (LLToolCompScale::getInstance()->mManip->getSelection()->getObjectCount()) + { + LLEditMenuHandler::gEditMenuHandler = LLSelectMgr::getInstance(); + } + if( LLManip::LL_NO_PART != LLToolCompScale::getInstance()->mManip->getHighlightedPart() ) + { + LLToolCompScale::getInstance()->setCurrentTool( LLToolCompScale::getInstance()->mManip ); + LLToolCompScale::getInstance()->mManip->handleMouseDownOnPart( pick_info.mMousePt.mX, pick_info.mMousePt.mY, pick_info.mKeyMask ); + } + else + { + LLToolCompScale::getInstance()->setCurrentTool( LLToolCompScale::getInstance()->mSelectRect ); + LLToolCompScale::getInstance()->mSelectRect->handlePick( pick_info ); + } + } + else + { + LLToolCompScale::getInstance()->setCurrentTool( LLToolCompScale::getInstance()->mSelectRect ); + LLToolCompScale::getInstance()->mSelectRect->handlePick( pick_info ); + } +} + +bool LLToolCompScale::handleMouseUp(S32 x, S32 y, MASK mask) +{ + mMouseDown = false; + return LLToolComposite::handleMouseUp(x, y, mask); +} + +LLTool* LLToolCompScale::getOverrideTool(MASK mask) +{ + if (mask == MASK_CONTROL) + { + return LLToolCompRotate::getInstance(); + } + + return LLToolComposite::getOverrideTool(mask); +} + + +bool LLToolCompScale::handleDoubleClick(S32 x, S32 y, MASK mask) +{ + if (!mManip->getSelection()->isEmpty() && mManip->getHighlightedPart() == LLManip::LL_NO_PART) + { + // You should already have an object selected from the mousedown. + // If so, show its properties + LLFloaterReg::showInstance("build", "Content"); + return true; + } + else + { + // Nothing selected means the first mouse click was probably + // bad, so try again. + return handleMouseDown(x, y, mask); + } +} + + +void LLToolCompScale::render() +{ + mCur->render(); + + if( mCur != mManip ) + { + LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); + mManip->renderGuidelines(); + } +} + +//----------------------------------------------------------------------- +// LLToolCompCreate + +LLToolCompCreate::LLToolCompCreate() + : LLToolComposite(std::string("Create")) +{ + mPlacer = new LLToolPlacer(); + mSelectRect = new LLToolSelectRect(this); + + mCur = mPlacer; + mDefault = mPlacer; + mObjectPlacedOnMouseDown = false; +} + + +LLToolCompCreate::~LLToolCompCreate() +{ + delete mPlacer; + delete mSelectRect; +} + + +bool LLToolCompCreate::handleMouseDown(S32 x, S32 y, MASK mask) +{ + bool handled = false; + mMouseDown = true; + + if ( (mask == MASK_SHIFT) || (mask == MASK_CONTROL) ) + { + gViewerWindow->pickAsync(x, y, mask, pickCallback); + handled = true; + } + else + { + setCurrentTool( mPlacer ); + handled = mPlacer->placeObject( x, y, mask ); + } + + mObjectPlacedOnMouseDown = true; + + return handled; +} + +void LLToolCompCreate::pickCallback(const LLPickInfo& pick_info) +{ + // *NOTE: We mask off shift and control, so you cannot + // multi-select multiple objects with the create tool. + MASK mask = (pick_info.mKeyMask & ~MASK_SHIFT); + mask = (mask & ~MASK_CONTROL); + + LLToolCompCreate::getInstance()->setCurrentTool( LLToolCompCreate::getInstance()->mSelectRect ); + LLToolCompCreate::getInstance()->mSelectRect->handlePick( pick_info ); +} + +bool LLToolCompCreate::handleDoubleClick(S32 x, S32 y, MASK mask) +{ + return handleMouseDown(x, y, mask); +} + +bool LLToolCompCreate::handleMouseUp(S32 x, S32 y, MASK mask) +{ + bool handled = false; + + if ( mMouseDown && !mObjectPlacedOnMouseDown && !(mask == MASK_SHIFT) && !(mask == MASK_CONTROL) ) + { + setCurrentTool( mPlacer ); + handled = mPlacer->placeObject( x, y, mask ); + } + + mObjectPlacedOnMouseDown = false; + mMouseDown = false; + + if (!handled) + { + handled = LLToolComposite::handleMouseUp(x, y, mask); + } + + return handled; +} + +//----------------------------------------------------------------------- +// LLToolCompRotate + +LLToolCompRotate::LLToolCompRotate() + : LLToolComposite(std::string("Rotate")) +{ + mManip = new LLManipRotate(this); + mSelectRect = new LLToolSelectRect(this); + + mCur = mManip; + mDefault = mManip; +} + + +LLToolCompRotate::~LLToolCompRotate() +{ + delete mManip; + delete mSelectRect; +} + +bool LLToolCompRotate::handleHover(S32 x, S32 y, MASK mask) +{ + if( !mCur->hasMouseCapture() ) + { + setCurrentTool( mManip ); + } + return mCur->handleHover( x, y, mask ); +} + + +bool LLToolCompRotate::handleMouseDown(S32 x, S32 y, MASK mask) +{ + mMouseDown = true; + gViewerWindow->pickAsync(x, y, mask, pickCallback); + return true; +} + +void LLToolCompRotate::pickCallback(const LLPickInfo& pick_info) +{ + LLViewerObject* hit_obj = pick_info.getObject(); + + LLToolCompRotate::getInstance()->mManip->highlightManipulators(pick_info.mMousePt.mX, pick_info.mMousePt.mY); + if (!LLToolCompRotate::getInstance()->mMouseDown) + { + // fast click on object, but mouse is already up...just do select + LLToolCompRotate::getInstance()->mSelectRect->handleObjectSelection(pick_info, gSavedSettings.getBOOL("EditLinkedParts"), false); + return; + } + + if( hit_obj || LLToolCompRotate::getInstance()->mManip->getHighlightedPart() != LLManip::LL_NO_PART) + { + if (LLToolCompRotate::getInstance()->mManip->getSelection()->getObjectCount()) + { + LLEditMenuHandler::gEditMenuHandler = LLSelectMgr::getInstance(); + } + if( LLManip::LL_NO_PART != LLToolCompRotate::getInstance()->mManip->getHighlightedPart() ) + { + LLToolCompRotate::getInstance()->setCurrentTool( LLToolCompRotate::getInstance()->mManip ); + LLToolCompRotate::getInstance()->mManip->handleMouseDownOnPart( pick_info.mMousePt.mX, pick_info.mMousePt.mY, pick_info.mKeyMask ); + } + else + { + LLToolCompRotate::getInstance()->setCurrentTool( LLToolCompRotate::getInstance()->mSelectRect ); + LLToolCompRotate::getInstance()->mSelectRect->handlePick( pick_info ); + } + } + else + { + LLToolCompRotate::getInstance()->setCurrentTool( LLToolCompRotate::getInstance()->mSelectRect ); + LLToolCompRotate::getInstance()->mSelectRect->handlePick( pick_info ); + } +} + +bool LLToolCompRotate::handleMouseUp(S32 x, S32 y, MASK mask) +{ + mMouseDown = false; + return LLToolComposite::handleMouseUp(x, y, mask); +} + +LLTool* LLToolCompRotate::getOverrideTool(MASK mask) +{ + if (mask == (MASK_CONTROL | MASK_SHIFT)) + { + return LLToolCompScale::getInstance(); + } + return LLToolComposite::getOverrideTool(mask); +} + +bool LLToolCompRotate::handleDoubleClick(S32 x, S32 y, MASK mask) +{ + if (!mManip->getSelection()->isEmpty() && mManip->getHighlightedPart() == LLManip::LL_NO_PART) + { + // You should already have an object selected from the mousedown. + // If so, show its properties + LLFloaterReg::showInstance("build", "Content"); + return true; + } + else + { + // Nothing selected means the first mouse click was probably + // bad, so try again. + return handleMouseDown(x, y, mask); + } +} + + +void LLToolCompRotate::render() +{ + mCur->render(); + + if( mCur != mManip ) + { + LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); + mManip->renderGuidelines(); + } +} + + +//----------------------------------------------------------------------- +// LLToolCompGun + +LLToolCompGun::LLToolCompGun() + : LLToolComposite(std::string("Mouselook")) +{ + mGun = new LLToolGun(this); + mGrab = new LLToolGrabBase(this); + mNull = sNullTool; + + setCurrentTool(mGun); + mDefault = mGun; +} + + +LLToolCompGun::~LLToolCompGun() +{ + delete mGun; + mGun = NULL; + + delete mGrab; + mGrab = NULL; + + // don't delete a static object + // delete mNull; + mNull = NULL; +} + +bool LLToolCompGun::handleHover(S32 x, S32 y, MASK mask) +{ + // *NOTE: This hack is here to make mouselook kick in again after + // item selected from context menu. + if ( mCur == mNull && !gPopupMenuView->getVisible() ) + { + LLSelectMgr::getInstance()->deselectAll(); + setCurrentTool( (LLTool*) mGrab ); + } + + // Note: if the tool changed, we can't delegate the current mouse event + // after the change because tools can modify the mouse during selection and deselection. + // Instead we let the current tool handle the event and then make the change. + // The new tool will take effect on the next frame. + + mCur->handleHover( x, y, mask ); + + // If mouse button not down... + if( !gViewerWindow->getLeftMouseDown()) + { + // let ALT switch from gun to grab + if ( mCur == mGun && (mask & MASK_ALT) ) + { + setCurrentTool( (LLTool*) mGrab ); + } + else if ( mCur == mGrab && !(mask & MASK_ALT) ) + { + setCurrentTool( (LLTool*) mGun ); + setMouseCapture(true); + } + } + + return true; +} + + +bool LLToolCompGun::handleMouseDown(S32 x, S32 y, MASK mask) +{ + // if the left button is grabbed, don't put up the pie menu + if (gAgent.leftButtonGrabbed() && gViewerInput.isLMouseHandlingDefault(MODE_FIRST_PERSON)) + { + gAgent.setControlFlags(AGENT_CONTROL_ML_LBUTTON_DOWN); + return false; + } + + // On mousedown, start grabbing + gGrabTransientTool = this; + LLToolMgr::getInstance()->getCurrentToolset()->selectTool( (LLTool*) mGrab ); + + return LLToolGrab::getInstance()->handleMouseDown(x, y, mask); +} + + +bool LLToolCompGun::handleDoubleClick(S32 x, S32 y, MASK mask) +{ + // if the left button is grabbed, don't put up the pie menu + if (gAgent.leftButtonGrabbed() && gViewerInput.isLMouseHandlingDefault(MODE_FIRST_PERSON)) + { + gAgent.setControlFlags(AGENT_CONTROL_ML_LBUTTON_DOWN); + return false; + } + + // On mousedown, start grabbing + gGrabTransientTool = this; + LLToolMgr::getInstance()->getCurrentToolset()->selectTool( (LLTool*) mGrab ); + + return LLToolGrab::getInstance()->handleDoubleClick(x, y, mask); +} + + +bool LLToolCompGun::handleRightMouseDown(S32 x, S32 y, MASK mask) +{ + /* JC - suppress context menu 8/29/2002 + + // On right mouse, go through some convoluted steps to + // make the build menu appear. + setCurrentTool( (LLTool*) mNull ); + + // This should return false, meaning the context menu will + // be shown. + return false; + */ + + // Returning true will suppress the context menu + return true; +} + + +bool LLToolCompGun::handleMouseUp(S32 x, S32 y, MASK mask) +{ + if (gViewerInput.isLMouseHandlingDefault(MODE_FIRST_PERSON)) + { + gAgent.setControlFlags(AGENT_CONTROL_ML_LBUTTON_UP); + } + setCurrentTool( (LLTool*) mGun ); + return true; +} + +void LLToolCompGun::onMouseCaptureLost() +{ + if (mComposite) + { + mComposite->onMouseCaptureLost(); + return; + } + mCur->onMouseCaptureLost(); +} + +void LLToolCompGun::handleSelect() +{ + LLToolComposite::handleSelect(); + setMouseCapture(true); +} + +void LLToolCompGun::handleDeselect() +{ + LLToolComposite::handleDeselect(); + setMouseCapture(false); +} + + +bool LLToolCompGun::handleScrollWheel(S32 x, S32 y, S32 clicks) +{ + if (clicks > 0) + { + gAgentCamera.changeCameraToDefault(); + + } + return true; +} -- cgit v1.2.3