MAINT-2953 FIXED When "Inspect Objects" floater has focus you cannot move the camera with ALT+Zoom or CTRL+ALT+Zoom
parent
b17199f283
commit
8f429fac24
|
|
@ -126,12 +126,20 @@ void LLToolComposite::handleSelect()
|
|||
mSelected = TRUE;
|
||||
}
|
||||
|
||||
void LLToolComposite::handleDeselect()
|
||||
{
|
||||
mCur->handleDeselect();
|
||||
mCur = mDefault;
|
||||
mSelected = FALSE;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// LLToolCompInspect
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
LLToolCompInspect::LLToolCompInspect()
|
||||
: LLToolComposite(std::string("Inspect"))
|
||||
: LLToolComposite(std::string("Inspect")),
|
||||
mIsToolCameraActive(FALSE)
|
||||
{
|
||||
mSelectRect = new LLToolSelectRect(this);
|
||||
mDefault = mSelectRect;
|
||||
|
|
@ -146,37 +154,49 @@ LLToolCompInspect::~LLToolCompInspect()
|
|||
|
||||
BOOL LLToolCompInspect::handleMouseDown(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
mMouseDown = TRUE;
|
||||
gViewerWindow->pickAsync(x, y, mask, pickCallback);
|
||||
return TRUE;
|
||||
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 (!LLToolCompInspect::getInstance()->mMouseDown)
|
||||
if (!tool_inspectp->mMouseDown)
|
||||
{
|
||||
// fast click on object, but mouse is already up...just do select
|
||||
LLToolCompInspect::getInstance()->mSelectRect->handleObjectSelection(pick_info, gSavedSettings.getBOOL("EditLinkedParts"), FALSE);
|
||||
tool_inspectp->mSelectRect->handleObjectSelection(pick_info, gSavedSettings.getBOOL("EditLinkedParts"), FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
if( hit_obj )
|
||||
{
|
||||
if (LLSelectMgr::getInstance()->getSelection()->getObjectCount())
|
||||
{
|
||||
LLEditMenuHandler::gEditMenuHandler = LLSelectMgr::getInstance();
|
||||
}
|
||||
LLToolCompInspect::getInstance()->setCurrentTool( LLToolCompInspect::getInstance()->mSelectRect );
|
||||
LLToolCompInspect::getInstance()->mSelectRect->handlePick( pick_info );
|
||||
LLSelectMgr * mgr_selectp = LLSelectMgr::getInstance();
|
||||
if( hit_obj && mgr_selectp->getSelection()->getObjectCount()) {
|
||||
LLEditMenuHandler::gEditMenuHandler = mgr_selectp;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
LLToolCompInspect::getInstance()->setCurrentTool( LLToolCompInspect::getInstance()->mSelectRect );
|
||||
LLToolCompInspect::getInstance()->mSelectRect->handlePick( pick_info );
|
||||
}
|
||||
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)
|
||||
|
|
@ -184,6 +204,39 @@ 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
|
||||
//----------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ public:
|
|||
virtual BOOL clipMouseWhenDown() { return mCur->clipMouseWhenDown(); }
|
||||
|
||||
virtual void handleSelect();
|
||||
virtual void handleDeselect() { mCur->handleDeselect(); mCur = mDefault; mSelected = FALSE; }
|
||||
virtual void handleDeselect();
|
||||
|
||||
virtual void render() { mCur->render(); }
|
||||
virtual void draw() { mCur->draw(); }
|
||||
|
|
@ -78,9 +78,10 @@ public:
|
|||
{ mCur->localPointToScreen(local_x, local_y, screen_x, screen_y); }
|
||||
|
||||
BOOL isSelecting();
|
||||
LLTool* getCurrentTool() { return mCur; }
|
||||
|
||||
protected:
|
||||
void setCurrentTool( LLTool* new_tool );
|
||||
LLTool* getCurrentTool() { return mCur; }
|
||||
// In hover handler, call this to auto-switch tools
|
||||
void setToolFromMask( MASK mask, LLTool *normal );
|
||||
|
||||
|
|
@ -108,9 +109,18 @@ public:
|
|||
|
||||
// Overridden from LLToolComposite
|
||||
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleKey(KEY key, MASK mask);
|
||||
virtual void onMouseCaptureLost();
|
||||
void keyUp(KEY key, MASK mask);
|
||||
|
||||
static void pickCallback(const LLPickInfo& pick_info);
|
||||
|
||||
BOOL isToolCameraActive() const { return mIsToolCameraActive; }
|
||||
|
||||
private:
|
||||
BOOL mIsToolCameraActive;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@
|
|||
|
||||
//#include "llfirstuse.h"
|
||||
// tools and manipulators
|
||||
#include "llfloaterinspect.h"
|
||||
#include "lltool.h"
|
||||
#include "llmanipscale.h"
|
||||
#include "llselectmgr.h"
|
||||
|
|
@ -218,7 +219,20 @@ LLTool* LLToolMgr::getCurrentTool()
|
|||
}
|
||||
if (cur_tool)
|
||||
{
|
||||
cur_tool->handleSelect();
|
||||
if ( LLToolCompInspect::getInstance()->isToolCameraActive()
|
||||
&& prev_tool == LLToolCamera::getInstance()
|
||||
&& cur_tool == LLToolPie::getInstance() )
|
||||
{
|
||||
LLFloaterInspect * inspect_instance = LLFloaterReg::getTypedInstance<LLFloaterInspect>("inspect");
|
||||
if(inspect_instance && inspect_instance->getVisible())
|
||||
{
|
||||
setTransientTool(LLToolCompInspect::getInstance());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cur_tool->handleSelect();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1392,6 +1392,13 @@ BOOL LLViewerWindow::handleTranslatedKeyUp(KEY key, MASK mask)
|
|||
// Let the voice chat code check for its PTT key. Note that this never affects event processing.
|
||||
LLVoiceClient::getInstance()->keyUp(key, mask);
|
||||
|
||||
// Let the inspect tool code check for ALT key to set LLToolSelectRect active instead LLToolCamera
|
||||
LLToolCompInspect * tool_inspectp = LLToolCompInspect::getInstance();
|
||||
if (LLToolMgr::getInstance()->getCurrentTool() == tool_inspectp)
|
||||
{
|
||||
tool_inspectp->keyUp(key, mask);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue