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/lltoolmgr.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'indra/newview/lltoolmgr.cpp') diff --git a/indra/newview/lltoolmgr.cpp b/indra/newview/lltoolmgr.cpp index fa2dd60ee0..63545ee5b0 100644 --- a/indra/newview/lltoolmgr.cpp +++ b/indra/newview/lltoolmgr.cpp @@ -102,12 +102,12 @@ LLToolMgr::LLToolMgr() void LLToolMgr::initTools() { - static BOOL initialized = FALSE; + static bool initialized = false; if(initialized) { return; } - initialized = TRUE; + initialized = true; gBasicToolset->addTool( LLToolPie::getInstance() ); gBasicToolset->addTool( LLToolCamera::getInstance() ); gCameraToolset->addTool( LLToolCamera::getInstance() ); @@ -143,9 +143,9 @@ LLToolMgr::~LLToolMgr() gToolNull = NULL; } -BOOL LLToolMgr::usingTransientTool() +bool LLToolMgr::usingTransientTool() { - return mTransientTool ? TRUE : FALSE; + return mTransientTool ? true : false; } void LLToolMgr::setCurrentToolset(LLToolset* current) @@ -188,7 +188,7 @@ void LLToolMgr::setCurrentTool( LLTool* tool ) LLTool* LLToolMgr::getCurrentTool() { - MASK override_mask = gKeyboard ? gKeyboard->currentMask(TRUE) : 0; + MASK override_mask = gKeyboard ? gKeyboard->currentMask(true) : 0; LLTool* cur_tool = NULL; // always use transient tools if available @@ -301,7 +301,7 @@ void LLToolMgr::toggleBuildMode(const LLSD& sdname) if (gAgentCamera.getFocusOnAvatar()) { // zoom in if we're looking at the avatar - gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE); + gAgentCamera.setFocusOnAvatar(false, ANIMATE); gAgentCamera.setFocusGlobal(gAgent.getPositionGlobal() + 2.0 * LLVector3d(gAgent.getAtAxis())); gAgentCamera.cameraZoomIn(0.666f); gAgentCamera.cameraOrbitOver( 30.f * DEG_TO_RAD ); @@ -459,7 +459,7 @@ void LLToolset::selectToolByIndex( S32 index ) } } -BOOL LLToolset::isToolSelected( S32 index ) +bool LLToolset::isToolSelected( S32 index ) { LLTool *tool = (index >= 0 && index < (S32)mToolList.size()) ? mToolList[index] : NULL; return (tool == mSelectedTool); -- cgit v1.2.3 From f9473e8afcb624cc1b101195bf15943ec372b56f Mon Sep 17 00:00:00 2001 From: Alexander Gavriliuk Date: Mon, 6 May 2024 16:52:34 +0200 Subject: secondlife/viewer#1333 BOOL to bool conversion leftovers: ternaries --- indra/newview/lltoolmgr.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'indra/newview/lltoolmgr.cpp') diff --git a/indra/newview/lltoolmgr.cpp b/indra/newview/lltoolmgr.cpp index 63545ee5b0..a4f43bde11 100644 --- a/indra/newview/lltoolmgr.cpp +++ b/indra/newview/lltoolmgr.cpp @@ -145,12 +145,13 @@ LLToolMgr::~LLToolMgr() bool LLToolMgr::usingTransientTool() { - return mTransientTool ? true : false; + return mTransientTool != nullptr; } void LLToolMgr::setCurrentToolset(LLToolset* current) { - if (!current) return; + if (!current) + return; // switching toolsets? if (current != mCurrentToolset) @@ -164,6 +165,7 @@ void LLToolMgr::setCurrentToolset(LLToolset* current) // select first tool of new toolset only if toolset changed mCurrentToolset->selectFirstTool(); } + // update current tool based on new toolset setCurrentTool( mCurrentToolset->getSelectedTool() ); } -- 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/lltoolmgr.cpp | 1060 +++++++++++++++++++++---------------------- 1 file changed, 530 insertions(+), 530 deletions(-) (limited to 'indra/newview/lltoolmgr.cpp') diff --git a/indra/newview/lltoolmgr.cpp b/indra/newview/lltoolmgr.cpp index dd247ef0f7..07963a7bed 100644 --- a/indra/newview/lltoolmgr.cpp +++ b/indra/newview/lltoolmgr.cpp @@ -1,530 +1,530 @@ -/** - * @file lltoolmgr.cpp - * @brief LLToolMgr class implementation - * - * $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 "lltoolmgr.h" - -#include "lluictrl.h" -#include "llmenugl.h" -#include "llfloaterreg.h" - -//#include "llfirstuse.h" -// tools and manipulators -#include "llfloaterinspect.h" -#include "lltool.h" -#include "llmanipscale.h" -#include "llmarketplacefunctions.h" -#include "llselectmgr.h" -#include "lltoolbrush.h" -#include "lltoolcomp.h" -#include "lltooldraganddrop.h" -#include "lltoolface.h" -#include "lltoolfocus.h" -#include "lltoolgrab.h" -#include "lltoolindividual.h" -#include "lltoolmorph.h" -#include "lltoolpie.h" -#include "lltoolselectland.h" -#include "lltoolobjpicker.h" -#include "lltoolpipette.h" -#include "llagent.h" -#include "llagentcamera.h" -#include "llviewercontrol.h" -#include "llviewerjoystick.h" -#include "llviewermenu.h" -#include "llviewerparcelmgr.h" - - -// Used when app not active to avoid processing hover. -LLTool* gToolNull = NULL; - -LLToolset* gBasicToolset = NULL; -LLToolset* gCameraToolset = NULL; -//LLToolset* gLandToolset = NULL; -LLToolset* gMouselookToolset = NULL; -LLToolset* gFaceEditToolset = NULL; - -///////////////////////////////////////////////////// -// LLToolMgr - -LLToolMgr::LLToolMgr() - : - mBaseTool(NULL), - mSavedTool(NULL), - mTransientTool( NULL ), - mOverrideTool( NULL ), - mSelectedTool( NULL ), - mCurrentToolset( NULL ) -{ - // Not a panel, register these callbacks globally. - LLUICtrl::EnableCallbackRegistry::currentRegistrar().add("Build.Active", boost::bind(&LLToolMgr::inEdit, this)); - LLUICtrl::EnableCallbackRegistry::currentRegistrar().add("Build.Enabled", boost::bind(&LLToolMgr::canEdit, this)); - LLUICtrl::EnableCallbackRegistry::currentRegistrar().add("Build.EnabledOrActive", boost::bind(&LLToolMgr::buildEnabledOrActive, this)); - LLUICtrl::CommitCallbackRegistry::currentRegistrar().add("Build.Toggle", boost::bind(&LLToolMgr::toggleBuildMode, this, _2)); - LLUICtrl::EnableCallbackRegistry::currentRegistrar().add("Marketplace.Enabled", boost::bind(&LLToolMgr::canAccessMarketplace, this)); - LLUICtrl::CommitCallbackRegistry::currentRegistrar().add("Marketplace.Toggle", boost::bind(&LLToolMgr::toggleMarketplace, this, _2)); - - gToolNull = new LLTool(LLStringUtil::null); // Does nothing - setCurrentTool(gToolNull); - - gBasicToolset = new LLToolset(); - gCameraToolset = new LLToolset(); -// gLandToolset = new LLToolset(); - gMouselookToolset = new LLToolset(); - gFaceEditToolset = new LLToolset(); - gMouselookToolset->setShowFloaterTools(false); - gFaceEditToolset->setShowFloaterTools(false); -} - -void LLToolMgr::initTools() -{ - static bool initialized = false; - if(initialized) - { - return; - } - initialized = true; - gBasicToolset->addTool( LLToolPie::getInstance() ); - gBasicToolset->addTool( LLToolCamera::getInstance() ); - gCameraToolset->addTool( LLToolCamera::getInstance() ); - gBasicToolset->addTool( LLToolGrab::getInstance() ); - gBasicToolset->addTool( LLToolCompTranslate::getInstance() ); - gBasicToolset->addTool( LLToolCompCreate::getInstance() ); - gBasicToolset->addTool( LLToolBrushLand::getInstance() ); - gMouselookToolset->addTool( LLToolCompGun::getInstance() ); - gBasicToolset->addTool( LLToolCompInspect::getInstance() ); - gFaceEditToolset->addTool( LLToolCamera::getInstance() ); - - // On startup, use "select" tool - setCurrentToolset(gBasicToolset); - - gBasicToolset->selectTool( LLToolPie::getInstance() ); -} - -LLToolMgr::~LLToolMgr() -{ - delete gBasicToolset; - gBasicToolset = NULL; - - delete gMouselookToolset; - gMouselookToolset = NULL; - - delete gFaceEditToolset; - gFaceEditToolset = NULL; - - delete gCameraToolset; - gCameraToolset = NULL; - - delete gToolNull; - gToolNull = NULL; -} - -bool LLToolMgr::usingTransientTool() -{ - return mTransientTool != nullptr; -} - -void LLToolMgr::setCurrentToolset(LLToolset* current) -{ - if (!current) - return; - - // switching toolsets? - if (current != mCurrentToolset) - { - // deselect current tool - if (mSelectedTool) - { - mSelectedTool->handleDeselect(); - } - mCurrentToolset = current; - // select first tool of new toolset only if toolset changed - mCurrentToolset->selectFirstTool(); - } - - // update current tool based on new toolset - setCurrentTool( mCurrentToolset->getSelectedTool() ); -} - -LLToolset* LLToolMgr::getCurrentToolset() -{ - return mCurrentToolset; -} - -void LLToolMgr::setCurrentTool( LLTool* tool ) -{ - if (mTransientTool) - { - mTransientTool = NULL; - } - - mBaseTool = tool; - updateToolStatus(); - - mSavedTool = NULL; -} - -LLTool* LLToolMgr::getCurrentTool() -{ - MASK override_mask = gKeyboard ? gKeyboard->currentMask(true) : 0; - - LLTool* cur_tool = NULL; - // always use transient tools if available - if (mTransientTool) - { - mOverrideTool = NULL; - cur_tool = mTransientTool; - } - // tools currently grabbing mouse input will stay active - else if (mSelectedTool && mSelectedTool->hasMouseCapture()) - { - cur_tool = mSelectedTool; - } - else - { - mOverrideTool = mBaseTool ? mBaseTool->getOverrideTool(override_mask) : NULL; - - // use override tool if available otherwise drop back to base tool - cur_tool = mOverrideTool ? mOverrideTool : mBaseTool; - } - - LLTool* prev_tool = mSelectedTool; - // Set the selected tool to avoid infinite recursion - mSelectedTool = cur_tool; - - //update tool selection status - if (prev_tool != cur_tool) - { - if (prev_tool) - { - prev_tool->handleDeselect(); - } - if (cur_tool) - { - if ( LLToolCompInspect::getInstance()->isToolCameraActive() - && prev_tool == LLToolCamera::getInstance() - && cur_tool == LLToolPie::getInstance() ) - { - LLFloaterInspect * inspect_instance = LLFloaterReg::getTypedInstance("inspect"); - if(inspect_instance && inspect_instance->getVisible()) - { - setTransientTool(LLToolCompInspect::getInstance()); - } - } - else - { - cur_tool->handleSelect(); - } - } - } - - return mSelectedTool; -} - -LLTool* LLToolMgr::getBaseTool() -{ - return mBaseTool; -} - -void LLToolMgr::updateToolStatus() -{ - // call getcurrenttool() to calculate active tool and call handleSelect() and handleDeselect() immediately - // when active tool changes - getCurrentTool(); -} - -bool LLToolMgr::inEdit() -{ - return mBaseTool != LLToolPie::getInstance() && mBaseTool != gToolNull; -} - -bool LLToolMgr::canEdit() -{ - return LLViewerParcelMgr::getInstance()->allowAgentBuild(); -} - -bool LLToolMgr::buildEnabledOrActive() -{ - return LLFloaterReg::instanceVisible("build") || canEdit(); -} - -void LLToolMgr::toggleBuildMode(const LLSD& sdname) -{ - const std::string& param = sdname.asString(); - - LLFloaterReg::toggleInstanceOrBringToFront("build"); - if (param == "build" && !canEdit()) - { - return; - } - - bool build_visible = LLFloaterReg::instanceVisible("build"); - if (build_visible) - { - ECameraMode camMode = gAgentCamera.getCameraMode(); - if (CAMERA_MODE_MOUSELOOK == camMode || CAMERA_MODE_CUSTOMIZE_AVATAR == camMode) - { - // pull the user out of mouselook or appearance mode when entering build mode - handle_reset_view(); - } - - if (gSavedSettings.getBOOL("EditCameraMovement")) - { - // camera should be set - if (LLViewerJoystick::getInstance()->getOverrideCamera()) - { - handle_toggle_flycam(); - } - - if (gAgentCamera.getFocusOnAvatar()) - { - // zoom in if we're looking at the avatar - gAgentCamera.setFocusOnAvatar(false, ANIMATE); - gAgentCamera.setFocusGlobal(gAgent.getPositionGlobal() + 2.0 * LLVector3d(gAgent.getAtAxis())); - gAgentCamera.cameraZoomIn(0.666f); - gAgentCamera.cameraOrbitOver( 30.f * DEG_TO_RAD ); - } - } - - - setCurrentToolset(gBasicToolset); - getCurrentToolset()->selectTool( LLToolCompCreate::getInstance() ); - - // Could be first use - //LLFirstUse::useBuild(); - - gAgentCamera.resetView(false); - - // avoid spurious avatar movements - LLViewerJoystick::getInstance()->setNeedsReset(); - - } - else - { - if (gSavedSettings.getBOOL("EditCameraMovement")) - { - // just reset the view, will pull us out of edit mode - handle_reset_view(); - } - else - { - // manually disable edit mode, but do not affect the camera - gAgentCamera.resetView(false); - LLFloaterReg::hideInstance("build"); - gViewerWindow->showCursor(); - } - // avoid spurious avatar movements pulling out of edit mode - LLViewerJoystick::getInstance()->setNeedsReset(); - } - -} - -bool LLToolMgr::inBuildMode() -{ - // when entering mouselook inEdit() immediately returns true before - // cameraMouselook() actually starts returning true. Also, appearance edit - // sets build mode to true, so let's exclude that. - bool b=(inEdit() - && !gAgentCamera.cameraMouselook() - && mCurrentToolset != gFaceEditToolset); - - return b; -} - -bool LLToolMgr::canAccessMarketplace() -{ - return (LLMarketplaceData::instance().getSLMStatus() != MarketplaceStatusCodes::MARKET_PLACE_NOT_MIGRATED_MERCHANT); -} - -void LLToolMgr::toggleMarketplace(const LLSD& sdname) -{ - const std::string& param = sdname.asString(); - - if ((param != "marketplace") || !canAccessMarketplace()) - { - return; - } - - LLFloaterReg::toggleInstanceOrBringToFront("marketplace_listings"); -} - -void LLToolMgr::setTransientTool(LLTool* tool) -{ - if (!tool) - { - clearTransientTool(); - } - else - { - if (mTransientTool) - { - mTransientTool = NULL; - } - - mTransientTool = tool; - } - - updateToolStatus(); -} - -void LLToolMgr::clearTransientTool() -{ - if (mTransientTool) - { - mTransientTool = NULL; - if (!mBaseTool) - { - LL_WARNS() << "mBaseTool is NULL" << LL_ENDL; - } - } - updateToolStatus(); -} - - -void LLToolMgr::onAppFocusLost() -{ - if (LLApp::isExiting()) - return; - - if (mSelectedTool) - { - mSelectedTool->handleDeselect(); - } - updateToolStatus(); -} - -void LLToolMgr::onAppFocusGained() -{ - if (mSelectedTool) - { - mSelectedTool->handleSelect(); - } - updateToolStatus(); -} - -void LLToolMgr::clearSavedTool() -{ - mSavedTool = NULL; -} - -///////////////////////////////////////////////////// -// LLToolset - -void LLToolset::addTool(LLTool* tool) -{ - mToolList.push_back( tool ); - if( !mSelectedTool ) - { - mSelectedTool = tool; - } -} - - -void LLToolset::selectTool(LLTool* tool) -{ - mSelectedTool = tool; - LLToolMgr::getInstance()->setCurrentTool( mSelectedTool ); -} - - -void LLToolset::selectToolByIndex( S32 index ) -{ - LLTool *tool = (index >= 0 && index < (S32)mToolList.size()) ? mToolList[index] : NULL; - if (tool) - { - mSelectedTool = tool; - LLToolMgr::getInstance()->setCurrentTool( tool ); - } -} - -bool LLToolset::isToolSelected( S32 index ) -{ - LLTool *tool = (index >= 0 && index < (S32)mToolList.size()) ? mToolList[index] : NULL; - return (tool == mSelectedTool); -} - - -void LLToolset::selectFirstTool() -{ - mSelectedTool = (0 < mToolList.size()) ? mToolList[0] : NULL; - LLToolMgr::getInstance()->setCurrentTool( mSelectedTool ); -} - - -void LLToolset::selectNextTool() -{ - LLTool* next = NULL; - for( tool_list_t::iterator iter = mToolList.begin(); - iter != mToolList.end(); ) - { - LLTool* cur = *iter++; - if( cur == mSelectedTool && iter != mToolList.end() ) - { - next = *iter; - break; - } - } - - if( next ) - { - mSelectedTool = next; - LLToolMgr::getInstance()->setCurrentTool( mSelectedTool ); - } - else - { - selectFirstTool(); - } -} - -void LLToolset::selectPrevTool() -{ - LLTool* prev = NULL; - for( tool_list_t::reverse_iterator iter = mToolList.rbegin(); - iter != mToolList.rend(); ) - { - LLTool* cur = *iter++; - if( cur == mSelectedTool && iter != mToolList.rend() ) - { - prev = *iter; - break; - } - } - - if( prev ) - { - mSelectedTool = prev; - LLToolMgr::getInstance()->setCurrentTool( mSelectedTool ); - } - else if (mToolList.size() > 0) - { - selectToolByIndex((S32)mToolList.size()-1); - } -} - -//////////////////////////////////////////////////////////////////////////// - - +/** + * @file lltoolmgr.cpp + * @brief LLToolMgr class implementation + * + * $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 "lltoolmgr.h" + +#include "lluictrl.h" +#include "llmenugl.h" +#include "llfloaterreg.h" + +//#include "llfirstuse.h" +// tools and manipulators +#include "llfloaterinspect.h" +#include "lltool.h" +#include "llmanipscale.h" +#include "llmarketplacefunctions.h" +#include "llselectmgr.h" +#include "lltoolbrush.h" +#include "lltoolcomp.h" +#include "lltooldraganddrop.h" +#include "lltoolface.h" +#include "lltoolfocus.h" +#include "lltoolgrab.h" +#include "lltoolindividual.h" +#include "lltoolmorph.h" +#include "lltoolpie.h" +#include "lltoolselectland.h" +#include "lltoolobjpicker.h" +#include "lltoolpipette.h" +#include "llagent.h" +#include "llagentcamera.h" +#include "llviewercontrol.h" +#include "llviewerjoystick.h" +#include "llviewermenu.h" +#include "llviewerparcelmgr.h" + + +// Used when app not active to avoid processing hover. +LLTool* gToolNull = NULL; + +LLToolset* gBasicToolset = NULL; +LLToolset* gCameraToolset = NULL; +//LLToolset* gLandToolset = NULL; +LLToolset* gMouselookToolset = NULL; +LLToolset* gFaceEditToolset = NULL; + +///////////////////////////////////////////////////// +// LLToolMgr + +LLToolMgr::LLToolMgr() + : + mBaseTool(NULL), + mSavedTool(NULL), + mTransientTool( NULL ), + mOverrideTool( NULL ), + mSelectedTool( NULL ), + mCurrentToolset( NULL ) +{ + // Not a panel, register these callbacks globally. + LLUICtrl::EnableCallbackRegistry::currentRegistrar().add("Build.Active", boost::bind(&LLToolMgr::inEdit, this)); + LLUICtrl::EnableCallbackRegistry::currentRegistrar().add("Build.Enabled", boost::bind(&LLToolMgr::canEdit, this)); + LLUICtrl::EnableCallbackRegistry::currentRegistrar().add("Build.EnabledOrActive", boost::bind(&LLToolMgr::buildEnabledOrActive, this)); + LLUICtrl::CommitCallbackRegistry::currentRegistrar().add("Build.Toggle", boost::bind(&LLToolMgr::toggleBuildMode, this, _2)); + LLUICtrl::EnableCallbackRegistry::currentRegistrar().add("Marketplace.Enabled", boost::bind(&LLToolMgr::canAccessMarketplace, this)); + LLUICtrl::CommitCallbackRegistry::currentRegistrar().add("Marketplace.Toggle", boost::bind(&LLToolMgr::toggleMarketplace, this, _2)); + + gToolNull = new LLTool(LLStringUtil::null); // Does nothing + setCurrentTool(gToolNull); + + gBasicToolset = new LLToolset(); + gCameraToolset = new LLToolset(); +// gLandToolset = new LLToolset(); + gMouselookToolset = new LLToolset(); + gFaceEditToolset = new LLToolset(); + gMouselookToolset->setShowFloaterTools(false); + gFaceEditToolset->setShowFloaterTools(false); +} + +void LLToolMgr::initTools() +{ + static bool initialized = false; + if(initialized) + { + return; + } + initialized = true; + gBasicToolset->addTool( LLToolPie::getInstance() ); + gBasicToolset->addTool( LLToolCamera::getInstance() ); + gCameraToolset->addTool( LLToolCamera::getInstance() ); + gBasicToolset->addTool( LLToolGrab::getInstance() ); + gBasicToolset->addTool( LLToolCompTranslate::getInstance() ); + gBasicToolset->addTool( LLToolCompCreate::getInstance() ); + gBasicToolset->addTool( LLToolBrushLand::getInstance() ); + gMouselookToolset->addTool( LLToolCompGun::getInstance() ); + gBasicToolset->addTool( LLToolCompInspect::getInstance() ); + gFaceEditToolset->addTool( LLToolCamera::getInstance() ); + + // On startup, use "select" tool + setCurrentToolset(gBasicToolset); + + gBasicToolset->selectTool( LLToolPie::getInstance() ); +} + +LLToolMgr::~LLToolMgr() +{ + delete gBasicToolset; + gBasicToolset = NULL; + + delete gMouselookToolset; + gMouselookToolset = NULL; + + delete gFaceEditToolset; + gFaceEditToolset = NULL; + + delete gCameraToolset; + gCameraToolset = NULL; + + delete gToolNull; + gToolNull = NULL; +} + +bool LLToolMgr::usingTransientTool() +{ + return mTransientTool != nullptr; +} + +void LLToolMgr::setCurrentToolset(LLToolset* current) +{ + if (!current) + return; + + // switching toolsets? + if (current != mCurrentToolset) + { + // deselect current tool + if (mSelectedTool) + { + mSelectedTool->handleDeselect(); + } + mCurrentToolset = current; + // select first tool of new toolset only if toolset changed + mCurrentToolset->selectFirstTool(); + } + + // update current tool based on new toolset + setCurrentTool( mCurrentToolset->getSelectedTool() ); +} + +LLToolset* LLToolMgr::getCurrentToolset() +{ + return mCurrentToolset; +} + +void LLToolMgr::setCurrentTool( LLTool* tool ) +{ + if (mTransientTool) + { + mTransientTool = NULL; + } + + mBaseTool = tool; + updateToolStatus(); + + mSavedTool = NULL; +} + +LLTool* LLToolMgr::getCurrentTool() +{ + MASK override_mask = gKeyboard ? gKeyboard->currentMask(true) : 0; + + LLTool* cur_tool = NULL; + // always use transient tools if available + if (mTransientTool) + { + mOverrideTool = NULL; + cur_tool = mTransientTool; + } + // tools currently grabbing mouse input will stay active + else if (mSelectedTool && mSelectedTool->hasMouseCapture()) + { + cur_tool = mSelectedTool; + } + else + { + mOverrideTool = mBaseTool ? mBaseTool->getOverrideTool(override_mask) : NULL; + + // use override tool if available otherwise drop back to base tool + cur_tool = mOverrideTool ? mOverrideTool : mBaseTool; + } + + LLTool* prev_tool = mSelectedTool; + // Set the selected tool to avoid infinite recursion + mSelectedTool = cur_tool; + + //update tool selection status + if (prev_tool != cur_tool) + { + if (prev_tool) + { + prev_tool->handleDeselect(); + } + if (cur_tool) + { + if ( LLToolCompInspect::getInstance()->isToolCameraActive() + && prev_tool == LLToolCamera::getInstance() + && cur_tool == LLToolPie::getInstance() ) + { + LLFloaterInspect * inspect_instance = LLFloaterReg::getTypedInstance("inspect"); + if(inspect_instance && inspect_instance->getVisible()) + { + setTransientTool(LLToolCompInspect::getInstance()); + } + } + else + { + cur_tool->handleSelect(); + } + } + } + + return mSelectedTool; +} + +LLTool* LLToolMgr::getBaseTool() +{ + return mBaseTool; +} + +void LLToolMgr::updateToolStatus() +{ + // call getcurrenttool() to calculate active tool and call handleSelect() and handleDeselect() immediately + // when active tool changes + getCurrentTool(); +} + +bool LLToolMgr::inEdit() +{ + return mBaseTool != LLToolPie::getInstance() && mBaseTool != gToolNull; +} + +bool LLToolMgr::canEdit() +{ + return LLViewerParcelMgr::getInstance()->allowAgentBuild(); +} + +bool LLToolMgr::buildEnabledOrActive() +{ + return LLFloaterReg::instanceVisible("build") || canEdit(); +} + +void LLToolMgr::toggleBuildMode(const LLSD& sdname) +{ + const std::string& param = sdname.asString(); + + LLFloaterReg::toggleInstanceOrBringToFront("build"); + if (param == "build" && !canEdit()) + { + return; + } + + bool build_visible = LLFloaterReg::instanceVisible("build"); + if (build_visible) + { + ECameraMode camMode = gAgentCamera.getCameraMode(); + if (CAMERA_MODE_MOUSELOOK == camMode || CAMERA_MODE_CUSTOMIZE_AVATAR == camMode) + { + // pull the user out of mouselook or appearance mode when entering build mode + handle_reset_view(); + } + + if (gSavedSettings.getBOOL("EditCameraMovement")) + { + // camera should be set + if (LLViewerJoystick::getInstance()->getOverrideCamera()) + { + handle_toggle_flycam(); + } + + if (gAgentCamera.getFocusOnAvatar()) + { + // zoom in if we're looking at the avatar + gAgentCamera.setFocusOnAvatar(false, ANIMATE); + gAgentCamera.setFocusGlobal(gAgent.getPositionGlobal() + 2.0 * LLVector3d(gAgent.getAtAxis())); + gAgentCamera.cameraZoomIn(0.666f); + gAgentCamera.cameraOrbitOver( 30.f * DEG_TO_RAD ); + } + } + + + setCurrentToolset(gBasicToolset); + getCurrentToolset()->selectTool( LLToolCompCreate::getInstance() ); + + // Could be first use + //LLFirstUse::useBuild(); + + gAgentCamera.resetView(false); + + // avoid spurious avatar movements + LLViewerJoystick::getInstance()->setNeedsReset(); + + } + else + { + if (gSavedSettings.getBOOL("EditCameraMovement")) + { + // just reset the view, will pull us out of edit mode + handle_reset_view(); + } + else + { + // manually disable edit mode, but do not affect the camera + gAgentCamera.resetView(false); + LLFloaterReg::hideInstance("build"); + gViewerWindow->showCursor(); + } + // avoid spurious avatar movements pulling out of edit mode + LLViewerJoystick::getInstance()->setNeedsReset(); + } + +} + +bool LLToolMgr::inBuildMode() +{ + // when entering mouselook inEdit() immediately returns true before + // cameraMouselook() actually starts returning true. Also, appearance edit + // sets build mode to true, so let's exclude that. + bool b=(inEdit() + && !gAgentCamera.cameraMouselook() + && mCurrentToolset != gFaceEditToolset); + + return b; +} + +bool LLToolMgr::canAccessMarketplace() +{ + return (LLMarketplaceData::instance().getSLMStatus() != MarketplaceStatusCodes::MARKET_PLACE_NOT_MIGRATED_MERCHANT); +} + +void LLToolMgr::toggleMarketplace(const LLSD& sdname) +{ + const std::string& param = sdname.asString(); + + if ((param != "marketplace") || !canAccessMarketplace()) + { + return; + } + + LLFloaterReg::toggleInstanceOrBringToFront("marketplace_listings"); +} + +void LLToolMgr::setTransientTool(LLTool* tool) +{ + if (!tool) + { + clearTransientTool(); + } + else + { + if (mTransientTool) + { + mTransientTool = NULL; + } + + mTransientTool = tool; + } + + updateToolStatus(); +} + +void LLToolMgr::clearTransientTool() +{ + if (mTransientTool) + { + mTransientTool = NULL; + if (!mBaseTool) + { + LL_WARNS() << "mBaseTool is NULL" << LL_ENDL; + } + } + updateToolStatus(); +} + + +void LLToolMgr::onAppFocusLost() +{ + if (LLApp::isExiting()) + return; + + if (mSelectedTool) + { + mSelectedTool->handleDeselect(); + } + updateToolStatus(); +} + +void LLToolMgr::onAppFocusGained() +{ + if (mSelectedTool) + { + mSelectedTool->handleSelect(); + } + updateToolStatus(); +} + +void LLToolMgr::clearSavedTool() +{ + mSavedTool = NULL; +} + +///////////////////////////////////////////////////// +// LLToolset + +void LLToolset::addTool(LLTool* tool) +{ + mToolList.push_back( tool ); + if( !mSelectedTool ) + { + mSelectedTool = tool; + } +} + + +void LLToolset::selectTool(LLTool* tool) +{ + mSelectedTool = tool; + LLToolMgr::getInstance()->setCurrentTool( mSelectedTool ); +} + + +void LLToolset::selectToolByIndex( S32 index ) +{ + LLTool *tool = (index >= 0 && index < (S32)mToolList.size()) ? mToolList[index] : NULL; + if (tool) + { + mSelectedTool = tool; + LLToolMgr::getInstance()->setCurrentTool( tool ); + } +} + +bool LLToolset::isToolSelected( S32 index ) +{ + LLTool *tool = (index >= 0 && index < (S32)mToolList.size()) ? mToolList[index] : NULL; + return (tool == mSelectedTool); +} + + +void LLToolset::selectFirstTool() +{ + mSelectedTool = (0 < mToolList.size()) ? mToolList[0] : NULL; + LLToolMgr::getInstance()->setCurrentTool( mSelectedTool ); +} + + +void LLToolset::selectNextTool() +{ + LLTool* next = NULL; + for( tool_list_t::iterator iter = mToolList.begin(); + iter != mToolList.end(); ) + { + LLTool* cur = *iter++; + if( cur == mSelectedTool && iter != mToolList.end() ) + { + next = *iter; + break; + } + } + + if( next ) + { + mSelectedTool = next; + LLToolMgr::getInstance()->setCurrentTool( mSelectedTool ); + } + else + { + selectFirstTool(); + } +} + +void LLToolset::selectPrevTool() +{ + LLTool* prev = NULL; + for( tool_list_t::reverse_iterator iter = mToolList.rbegin(); + iter != mToolList.rend(); ) + { + LLTool* cur = *iter++; + if( cur == mSelectedTool && iter != mToolList.rend() ) + { + prev = *iter; + break; + } + } + + if( prev ) + { + mSelectedTool = prev; + LLToolMgr::getInstance()->setCurrentTool( mSelectedTool ); + } + else if (mToolList.size() > 0) + { + selectToolByIndex((S32)mToolList.size()-1); + } +} + +//////////////////////////////////////////////////////////////////////////// + + -- cgit v1.2.3