summaryrefslogtreecommitdiff
path: root/indra/newview/lltoolgrab.h
diff options
context:
space:
mode:
authorJames Cook <james@lindenlab.com>2007-01-02 08:33:20 +0000
committerJames Cook <james@lindenlab.com>2007-01-02 08:33:20 +0000
commit420b91db29485df39fd6e724e782c449158811cb (patch)
treeb471a94563af914d3ed3edd3e856d21cb1b69945 /indra/newview/lltoolgrab.h
Print done when done.
Diffstat (limited to 'indra/newview/lltoolgrab.h')
-rw-r--r--indra/newview/lltoolgrab.h112
1 files changed, 112 insertions, 0 deletions
diff --git a/indra/newview/lltoolgrab.h b/indra/newview/lltoolgrab.h
new file mode 100644
index 0000000000..5073d0e211
--- /dev/null
+++ b/indra/newview/lltoolgrab.h
@@ -0,0 +1,112 @@
+/**
+ * @file lltoolgrab.h
+ * @brief LLToolGrab class header file
+ *
+ * Copyright (c) 2001-$CurrentYear$, Linden Research, Inc.
+ * $License$
+ */
+
+#ifndef LL_TOOLGRAB_H
+#define LL_TOOLGRAB_H
+
+#include "lltool.h"
+#include "v3math.h"
+#include "llquaternion.h"
+#include "llmemory.h"
+#include "lluuid.h"
+
+class LLView;
+class LLTextBox;
+class LLViewerObject;
+
+class LLToolGrab : public LLTool
+{
+public:
+ LLToolGrab( LLToolComposite* composite = NULL );
+ ~LLToolGrab();
+
+ /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask);
+ /*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*/ void render(); // 3D elements
+ /*virtual*/ void draw(); // 2D elements
+
+ virtual void handleSelect();
+ virtual void handleDeselect();
+
+ virtual LLViewerObject* getEditingObject();
+ virtual LLVector3d getEditingPointGlobal();
+ virtual BOOL isEditing();
+ virtual void stopEditing();
+
+ virtual void onMouseCaptureLost();
+
+ BOOL hasGrabOffset() { return TRUE; } // HACK
+ LLVector3 getGrabOffset(S32 x, S32 y); // HACK
+
+ // Capture the mouse and start grabbing.
+ BOOL handleObjectHit(LLViewerObject *objectp, S32 x, S32 y, MASK mask);
+
+ // Certain grabs should not highlight the "Build" toolbar button
+ BOOL getHideBuildHighlight() { return mHideBuildHighlight; }
+
+ static void pickCallback(S32 x, S32 y, MASK mask);
+private:
+ LLVector3d getGrabPointGlobal();
+ void startGrab(S32 x, S32 y);
+ void stopGrab();
+
+ void startSpin();
+ void stopSpin();
+
+ void handleHoverSpin(S32 x, S32 y, MASK mask);
+ void handleHoverActive(S32 x, S32 y, MASK mask);
+ void handleHoverInactive(S32 x, S32 y, MASK mask);
+ void handleHoverFailed(S32 x, S32 y, MASK mask);
+
+private:
+ enum EGrabMode { GRAB_INACTIVE, GRAB_ACTIVE_CENTER, GRAB_NONPHYSICAL, GRAB_LOCKED, GRAB_NOOBJECT };
+
+ EGrabMode mMode;
+
+ BOOL mVerticalDragging;
+
+ BOOL mHitLand;
+ LLUUID mHitObjectID; // if hit something, its ID
+
+ LLPointer<LLViewerObject> mGrabObject; // the object currently being grabbed
+ LLTimer mGrabTimer; // send simulator time between hover movements
+
+ LLVector3 mGrabOffsetFromCenterInitial; // meters from CG of object
+ LLVector3 mGrabOffset; // how far cursor currently is from grab start point, meters
+ LLVector3d mGrabHiddenOffsetFromCamera; // in cursor hidden drag, how far is grab offset from camera
+
+ LLVector3d mDragStartPointGlobal; // projected into world
+ LLVector3d mDragStartFromCamera; // drag start relative to camera
+
+ S32 mLastMouseX;
+ S32 mLastMouseY;
+ S32 mMouseDownX;
+ S32 mMouseDownY;
+ MASK mMouseMask;
+ S32 mAccumDeltaX; // since cursor hidden, how far have you moved?
+ S32 mAccumDeltaY;
+ BOOL mHasMoved; // has mouse moved off center at all?
+ BOOL mOutsideSlop; // has mouse moved outside center 5 pixels?
+ BOOL mDeselectedThisClick;
+
+ BOOL mSpinGrabbing;
+ LLQuaternion mSpinRotation;
+
+ BOOL mHideBuildHighlight;
+};
+
+extern LLToolGrab *gToolGrab;
+
+extern BOOL gGrabBtnVertical;
+extern BOOL gGrabBtnSpin;
+extern LLTool* gGrabTransientTool;
+
+#endif // LL_TOOLGRAB_H
+