From f4d49c31da1bdc3e9072365c1f54fce5b964dafc Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Sat, 25 May 2013 23:22:31 +1000 Subject: Fix Align tool conflicts with Edit Linked Parts - http://redmine.kokuaviewer.org/issues/948 The new hot keys are - Ctrl-Shift-P for position (Ctrl-Alt-P was taken). Ctrl-Alt-F for face selection. Ctrl-Alt-M for align, and Ctrl-Alt-Shift-M for pack. Also fixed things so they all work all the time, and refactored common code. --- linden/indra/newview/lltool.cpp | 4 +- linden/indra/newview/lltoolcomp.cpp | 79 +++++++++------------- linden/indra/newview/lltoolcomp.h | 11 +-- linden/indra/newview/lltoolface.cpp | 2 +- linden/indra/newview/lltoolface.h | 3 +- linden/indra/newview/qtoolalign.cpp | 9 ++- linden/indra/newview/qtoolalign.h | 4 +- .../skins/default/xui/en-us/floater_tools.xml | 20 +++--- 8 files changed, 62 insertions(+), 70 deletions(-) diff --git a/linden/indra/newview/lltool.cpp b/linden/indra/newview/lltool.cpp index df2191b..f8188e3 100644 --- a/linden/indra/newview/lltool.cpp +++ b/linden/indra/newview/lltool.cpp @@ -40,10 +40,12 @@ #include "llviewerwindow.h" #include "lltoolcomp.h" +#include "lltoolface.h" #include "lltoolfocus.h" #include "llfocusmgr.h" #include "llagent.h" #include "llviewerjoystick.h" +#include "qtoolalign.h" extern BOOL gDebugClicks; @@ -187,7 +189,7 @@ LLTool* LLTool::getOverrideTool(MASK mask) { return NULL; } - if (mask & MASK_ALT) + else if (mask & MASK_ALT) { return LLToolCamera::getInstance(); } diff --git a/linden/indra/newview/lltoolcomp.cpp b/linden/indra/newview/lltoolcomp.cpp index 172f71d..2ec1d8e 100644 --- a/linden/indra/newview/lltoolcomp.cpp +++ b/linden/indra/newview/lltoolcomp.cpp @@ -43,6 +43,7 @@ #include "llmaniptranslate.h" #include "llmenugl.h" // for right-click menu hack #include "llselectmgr.h" +#include "lltoolface.h" #include "lltoolfocus.h" #include "lltoolgrab.h" #include "lltoolgun.h" @@ -131,6 +132,36 @@ void LLToolComposite::handleSelect() mSelected = TRUE; } + +LLTool* LLToolComposite::getOverrideTool(MASK mask) +{ + if (gKeyboard->getKeyDown('M') && + ((mask == (MASK_ALT | MASK_CONTROL)) || (mask == (MASK_ALT | MASK_CONTROL | MASK_SHIFT)))) + { + return QToolAlign::getInstance(); + } + else if (gKeyboard->getKeyDown('P') && + (mask == (MASK_CONTROL | MASK_SHIFT))) + { + return LLToolCompTranslate::getInstance(); + } + else if (gKeyboard->getKeyDown('F') && + (mask == (MASK_ALT | MASK_CONTROL))) + { + return LLToolFace::getInstance(); + } + else if (mask == (MASK_CONTROL | MASK_SHIFT)) + { + return LLToolCompScale::getInstance(); + } + else if (mask == MASK_CONTROL) + { + return LLToolCompRotate::getInstance(); + } + return LLTool::getOverrideTool(mask); +} + + //---------------------------------------------------------------------------- // LLToolCompInspect //---------------------------------------------------------------------------- @@ -277,24 +308,6 @@ BOOL LLToolCompTranslate::handleMouseUp(S32 x, S32 y, MASK mask) return LLToolComposite::handleMouseUp(x, y, mask); } -LLTool* LLToolCompTranslate::getOverrideTool(MASK mask) -{ - if (gKeyboard->getKeyDown('A') && - ((mask & MASK_CONTROL) || (mask == (MASK_CONTROL | MASK_SHIFT)))) - { - return QToolAlign::getInstance(); - } - else 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) @@ -401,22 +414,6 @@ BOOL LLToolCompScale::handleMouseUp(S32 x, S32 y, MASK mask) return LLToolComposite::handleMouseUp(x, y, mask); } -LLTool* LLToolCompScale::getOverrideTool(MASK mask) -{ - if (gKeyboard->getKeyDown('A') && - ((mask & MASK_CONTROL) || (mask == (MASK_CONTROL | MASK_SHIFT)))) - { - return QToolAlign::getInstance(); - } - else 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) @@ -604,20 +601,6 @@ BOOL LLToolCompRotate::handleMouseUp(S32 x, S32 y, MASK mask) return LLToolComposite::handleMouseUp(x, y, mask); } -LLTool* LLToolCompRotate::getOverrideTool(MASK mask) -{ - if (gKeyboard->getKeyDown('A') && - ((mask & MASK_CONTROL) || (mask == (MASK_CONTROL | MASK_SHIFT)))) - { - return QToolAlign::getInstance(); - } - else 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) diff --git a/linden/indra/newview/lltoolcomp.h b/linden/indra/newview/lltoolcomp.h index b7ec940..cb5e544 100644 --- a/linden/indra/newview/lltoolcomp.h +++ b/linden/indra/newview/lltoolcomp.h @@ -84,6 +84,9 @@ public: { mCur->localPointToScreen(local_x, local_y, screen_x, screen_y); } BOOL isSelecting(); + + virtual LLTool* getOverrideTool(MASK mask); + protected: void setCurrentTool( LLTool* new_tool ); LLTool* getCurrentTool() { return mCur; } @@ -135,8 +138,6 @@ public: virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); // Returns to the default tool virtual void render(); - virtual LLTool* getOverrideTool(MASK mask); - static void pickCallback(const LLPickInfo& pick_info); }; @@ -156,8 +157,6 @@ public: virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); // Returns to the default tool virtual void render(); - virtual LLTool* getOverrideTool(MASK mask); - static void pickCallback(const LLPickInfo& pick_info); }; @@ -178,11 +177,7 @@ public: virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); virtual void render(); - virtual LLTool* getOverrideTool(MASK mask); - static void pickCallback(const LLPickInfo& pick_info); - -protected: }; //----------------------------------------------------------------------- diff --git a/linden/indra/newview/lltoolface.cpp b/linden/indra/newview/lltoolface.cpp index 51a4561..834bf76 100644 --- a/linden/indra/newview/lltoolface.cpp +++ b/linden/indra/newview/lltoolface.cpp @@ -57,7 +57,7 @@ // LLToolFace::LLToolFace() -: LLTool(std::string("Texture")) +: LLToolComposite(std::string("Texture")) { } diff --git a/linden/indra/newview/lltoolface.h b/linden/indra/newview/lltoolface.h index f2b7d23..fc6f7de 100644 --- a/linden/indra/newview/lltoolface.h +++ b/linden/indra/newview/lltoolface.h @@ -34,12 +34,13 @@ #define LL_LLTOOLFACE_H #include "lltool.h" +#include "lltoolcomp.h" class LLViewerObject; class LLPickInfo; class LLToolFace -: public LLTool, public LLSingleton +: public LLToolComposite, public LLSingleton { public: LLToolFace(); diff --git a/linden/indra/newview/qtoolalign.cpp b/linden/indra/newview/qtoolalign.cpp index cb32d0d..b4944fe 100644 --- a/linden/indra/newview/qtoolalign.cpp +++ b/linden/indra/newview/qtoolalign.cpp @@ -36,7 +36,7 @@ const F32 MANIPULATOR_SELECT_SIZE = 20.0; QToolAlign::QToolAlign() -: LLTool(std::string("Align")) +: LLToolComposite(std::string("Align")) { } @@ -61,6 +61,11 @@ BOOL QToolAlign::handleMouseDown(S32 x, S32 y, MASK mask) } +BOOL QToolAlign::handleDoubleClick(S32 x, S32 y, MASK mask) +{ + return TRUE; +} + void QToolAlign::pickCallback(const LLPickInfo& pick_info) { @@ -94,7 +99,7 @@ void QToolAlign::pickCallback(const LLPickInfo& pick_info) } else { - if (!(pick_info.mKeyMask == MASK_SHIFT)) + if (!(pick_info.mKeyMask & MASK_SHIFT)) { LLSelectMgr::getInstance()->deselectAll(); } diff --git a/linden/indra/newview/qtoolalign.h b/linden/indra/newview/qtoolalign.h index b2c18b7..2d30b92 100644 --- a/linden/indra/newview/qtoolalign.h +++ b/linden/indra/newview/qtoolalign.h @@ -13,6 +13,7 @@ #define Q_QTOOLALIGN_H #include "lltool.h" +#include "lltoolcomp.h" #include "llbbox.h" class LLViewerObject; @@ -20,7 +21,7 @@ class LLPickInfo; class LLToolSelectRect; class QToolAlign -: public LLTool, public LLSingleton +: public LLToolComposite, public LLSingleton { public: QToolAlign(); @@ -29,6 +30,7 @@ public: virtual void handleSelect(); virtual void handleDeselect(); virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); + virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask); virtual BOOL handleHover(S32 x, S32 y, MASK mask); virtual void render(); diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml b/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml index 3b78eab..2ed5120 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml @@ -69,20 +69,24 @@ + name="radio position" radio_style="true" width="114" + tool_tip="Position selected prims (Ctrl-Shift-P)." /> + name="radio rotate" radio_style="true" width="114" + tool_tip="Rotate selected prims (Ctrl)." /> + mouse_opaque="true" name="radio stretch" radio_style="true" width="123" + tool_tip="Resize selected prims (Ctrl-Shift)." /> + name="radio select face" radio_style="true" width="114" + tool_tip="Select faces of prims to texture (Ctrl-Alt-F)." /> + tool_tip="Align (Ctrl-Alt-M) aligns all selected prims edges along an axis. Pack (Ctrl-Alt-Shift-M) moves all selected prims edges so they're touching." /> - Click to selet a Face for texturing + Click to select a Face for texturing - CTRL-A to align on an axis, CTRL-Shift-A to Pack + Click to Align, Shift-Click to Pack Click and Hold to Modify Land @@ -1382,7 +1386,7 @@ Click Inworld to Build - Click and Drag to Select Land + Click and Drag to select Land Screen -- cgit v1.1