summaryrefslogtreecommitdiff
path: root/indra/newview/lltoolcomp.h
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/lltoolcomp.h')
-rw-r--r--indra/newview/lltoolcomp.h200
1 files changed, 200 insertions, 0 deletions
diff --git a/indra/newview/lltoolcomp.h b/indra/newview/lltoolcomp.h
new file mode 100644
index 0000000000..cb1ec33f1b
--- /dev/null
+++ b/indra/newview/lltoolcomp.h
@@ -0,0 +1,200 @@
+/**
+ * @file lltoolcomp.h
+ * @brief Composite tools
+ *
+ * Copyright (c) 2001-$CurrentYear$, Linden Research, Inc.
+ * $License$
+ */
+
+#ifndef LL_TOOLCOMP_H
+#define LL_TOOLCOMP_H
+
+#include "lltool.h"
+
+class LLManip;
+class LLToolSelectRect;
+class LLToolPlacer;
+
+class LLView;
+class LLTextBox;
+
+//-----------------------------------------------------------------------
+// LLToolComposite
+
+class LLToolComposite : public LLTool
+{
+public:
+ LLToolComposite(const LLString& name);
+
+ virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) = 0; // Sets the current tool
+ virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); // Returns to the default tool
+ virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask) = 0;
+
+ // Map virtual functions to the currently active internal tool
+ virtual BOOL handleHover(S32 x, S32 y, MASK mask) { return mCur->handleHover( x, y, mask ); }
+ virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks) { return mCur->handleScrollWheel( x, y, clicks ); }
+ virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask) { return mCur->handleRightMouseDown( x, y, mask ); }
+
+ virtual LLViewerObject* getEditingObject() { return mCur->getEditingObject(); }
+ virtual LLVector3d getEditingPointGlobal() { return mCur->getEditingPointGlobal(); }
+ virtual BOOL isEditing() { return mCur->isEditing(); }
+ virtual void stopEditing() { mCur->stopEditing(); mCur = mDefault; }
+
+ virtual BOOL clipMouseWhenDown() { return mCur->clipMouseWhenDown(); }
+
+ virtual void handleSelect();
+ virtual void handleDeselect() { mCur->handleDeselect(); mCur = mDefault; mSelected = FALSE; }
+
+ virtual void render() { mCur->render(); }
+ virtual void draw() { mCur->draw(); }
+
+ virtual BOOL handleKey(KEY key, MASK mask) { return mCur->handleKey( key, mask ); }
+
+ virtual void onMouseCaptureLost();
+
+ virtual void screenPointToLocal(S32 screen_x, S32 screen_y, S32* local_x, S32* local_y) const
+ { mCur->screenPointToLocal(screen_x, screen_y, local_x, local_y); }
+
+ virtual void localPointToScreen(S32 local_x, S32 local_y, S32* screen_x, S32* screen_y) const
+ { mCur->localPointToScreen(local_x, local_y, screen_x, screen_y); }
+
+ BOOL isSelecting();
+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 );
+
+protected:
+ LLTool* mCur; // The tool to which we're delegating.
+ LLTool* mDefault;
+ BOOL mSelected;
+ BOOL mMouseDown;
+ LLManip* mManip;
+ LLToolSelectRect* mSelectRect;
+
+public:
+ static const LLString sNameComp;
+};
+
+
+//-----------------------------------------------------------------------
+// LLToolCompTranslate
+
+class LLToolCompTranslate : public LLToolComposite
+{
+public:
+ LLToolCompTranslate();
+ virtual ~LLToolCompTranslate();
+
+ // Overridden from LLToolComposite
+ 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 BOOL handleMouseUp(S32 x, S32 y, MASK mask); // Returns to the default tool
+ virtual void render();
+
+ static void pickCallback(S32 x, S32 y, MASK mask);
+};
+
+
+//-----------------------------------------------------------------------
+// LLToolCompScale
+
+class LLToolCompScale : public LLToolComposite
+{
+public:
+ LLToolCompScale();
+ virtual ~LLToolCompScale();
+
+ // Overridden from LLToolComposite
+ 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 BOOL handleMouseUp(S32 x, S32 y, MASK mask); // Returns to the default tool
+ virtual void render();
+
+ static void pickCallback(S32 x, S32 y, MASK mask);
+
+};
+
+
+//-----------------------------------------------------------------------
+// LLToolCompRotate
+
+class LLToolCompRotate : public LLToolComposite
+{
+public:
+ LLToolCompRotate();
+ virtual ~LLToolCompRotate();
+
+ // Overridden from LLToolComposite
+ 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 BOOL handleMouseUp(S32 x, S32 y, MASK mask);
+ virtual void render();
+
+ static void pickCallback(S32 x, S32 y, MASK mask);
+
+protected:
+};
+
+//-----------------------------------------------------------------------
+// LLToolCompCreate
+
+class LLToolCompCreate : public LLToolComposite
+{
+public:
+ LLToolCompCreate();
+ virtual ~LLToolCompCreate();
+
+ // Overridden from LLToolComposite
+ virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
+ virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
+ virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
+
+ static void pickCallback(S32 x, S32 y, MASK mask);
+protected:
+ LLToolPlacer* mPlacer;
+ BOOL mObjectPlacedOnMouseDown;
+};
+
+
+//-----------------------------------------------------------------------
+// LLToolCompGun
+
+class LLToolGun;
+class LLToolGrab;
+class LLToolSelect;
+
+class LLToolCompGun : public LLToolComposite
+{
+public:
+ LLToolCompGun();
+ virtual ~LLToolCompGun();
+
+ // Overridden from LLToolComposite
+ virtual BOOL handleHover(S32 x, S32 y, MASK mask);
+ virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
+ virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
+ virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
+ virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
+ virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
+ virtual void onMouseCaptureLost();
+ virtual void handleSelect();
+ virtual void handleDeselect();
+
+protected:
+ LLToolGun* mGun;
+ LLToolGrab* mGrab;
+ LLTool* mNull;
+};
+
+extern LLToolCompTranslate *gToolTranslate;
+extern LLToolCompScale *gToolStretch;
+extern LLToolCompRotate *gToolRotate;
+extern LLToolCompCreate *gToolCreate;
+extern LLToolCompGun *gToolGun;
+
+#endif // LL_TOOLCOMP_H