summaryrefslogtreecommitdiff
path: root/hammer/toolinterface.h
diff options
context:
space:
mode:
Diffstat (limited to 'hammer/toolinterface.h')
-rw-r--r--hammer/toolinterface.h183
1 files changed, 183 insertions, 0 deletions
diff --git a/hammer/toolinterface.h b/hammer/toolinterface.h
new file mode 100644
index 0000000..31478cf
--- /dev/null
+++ b/hammer/toolinterface.h
@@ -0,0 +1,183 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Defines the interface that tools implement to allow views to call
+// through them.
+//
+//===========================================================================//
+
+#ifndef TOOLINTERFACE_H
+#define TOOLINTERFACE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+class CMapView2D;
+class CMapView3D;
+class CMapViewLogical;
+class CRender2D;
+class CRender3D;
+class CMapDoc;
+class CMapClass;
+class Vector2D;
+class CChunkFile;
+class CSaveInfo;
+
+#define HANDLE_RADIUS 4
+
+enum ChunkFileResult_t;
+
+
+enum ToolID_t
+{
+ TOOL_NONE = -1,
+ TOOL_POINTER,
+ TOOL_BLOCK,
+ TOOL_ENTITY,
+ TOOL_CAMERA,
+ TOOL_DECAL,
+ TOOL_MAGNIFY,
+ TOOL_MORPH,
+ TOOL_CLIPPER,
+ TOOL_EDITCORDON,
+ TOOL_FACEEDIT_MATERIAL,
+ TOOL_FACEEDIT_DISP,
+ TOOL_OVERLAY,
+ TOOL_AXIS_HANDLE,
+ TOOL_POINT_HANDLE,
+ TOOL_SPHERE,
+ TOOL_PICK_FACE,
+ TOOL_PICK_ENTITY,
+ TOOL_PICK_ANGLES,
+ TOOL_SWEPT_HULL,
+ TOOL_PLAYERHULL_HANDLE,
+};
+
+enum
+{
+ constrainNone = 0x00, // transformation with no constrains
+ constrainOnlyHorz = 0x01, // only horizontal translations
+ constrainOnlyVert = 0x02, // only vertical translations
+ constrainSnap = 0x04, // rounds to document snap grid
+ constrainIntSnap = 0x08, // rounds value to one unit (integer)
+ constrainHalfSnap = 0x10, // rounds to half of snap grid
+ constrainCenter = 0x20,
+ constrainMoveAll = 0x40, // translate all handles
+};
+
+
+class CBaseTool
+{
+public:
+
+ inline CBaseTool();
+ virtual ~CBaseTool() {}
+
+ //
+ // Called by the tool manager to activate/deactivate tools.
+ //
+
+ virtual void Init( CMapDoc *pDocument );
+
+ void Activate();
+ void Deactivate();
+ virtual bool CanDeactivate( void ) { return true; }
+
+ virtual bool IsTranslating(void) { return false; } // return true if tool is currently changing objects
+ inline bool IsActiveTool( void ) { return m_bActiveTool; }
+
+ // true if tool has objects to work on
+ virtual bool IsEmpty() { return m_bEmpty; }
+
+ // detach tool from any object working on
+ virtual void SetEmpty() { m_bEmpty = true; }
+
+ // attach a certain object to that tool
+ virtual void Attach(CMapClass *pObject) {};
+
+ //
+ // Notifications for tool activation/deactivation.
+ //
+ virtual void OnActivate() {}
+ virtual void OnDeactivate() {}
+
+ virtual ToolID_t GetToolID(void) { return TOOL_NONE; }
+
+ virtual const char* GetVMFChunkName() { return NULL; }
+ virtual ChunkFileResult_t LoadVMF(CChunkFile *pFile) { return (ChunkFileResult_t)0; /*ChunkFile_Ok*/ }
+ virtual ChunkFileResult_t SaveVMF(CChunkFile *pFile, CSaveInfo *pSaveInfo) { return (ChunkFileResult_t)0 ; /*ChunkFile_Ok*/ }
+ //
+ // Messages sent by the 3D view:
+ //
+ virtual bool OnContextMenu3D(CMapView3D *pView, UINT nFlags, const Vector2D &vPoint) { return false; }
+ virtual bool OnLMouseDown3D( CMapView3D *pView, UINT nFlags, const Vector2D &vPoint ) { return false; }
+ virtual bool OnLMouseUp3D( CMapView3D *pView, UINT nFlags, const Vector2D &vPoint ) { return false; }
+ virtual bool OnLMouseDblClk3D( CMapView3D *pView, UINT nFlags, const Vector2D &vPoint ) { return false; }
+ virtual bool OnRMouseDown3D( CMapView3D *pView, UINT nFlags, const Vector2D &vPoint ) { return false; }
+ virtual bool OnRMouseUp3D( CMapView3D *pView, UINT nFlags, const Vector2D &vPoint ) { return false; }
+ virtual bool OnMouseMove3D( CMapView3D *pView, UINT nFlags, const Vector2D &vPoint ) { return false; }
+ virtual bool OnMouseWheel3D( CMapView3D *pView, UINT nFlags, short zDelta, const Vector2D &vPoint) { return false; }
+
+ virtual bool OnKeyDown3D( CMapView3D *pView, UINT nChar, UINT nRepCnt, UINT nFlags ) { return false; }
+ virtual bool OnKeyUp3D( CMapView3D *pView, UINT nChar, UINT nRepCnt, UINT nFlags ) { return false; }
+ virtual bool OnChar3D( CMapView3D *pView, UINT nChar, UINT nRepCnt, UINT nFlags ) { return false; }
+
+ //
+ // Messages sent by the 2D view:
+ //
+ virtual bool OnContextMenu2D(CMapView2D *pView, UINT nFlags, const Vector2D &vPoint) { return false; }
+ virtual bool OnLMouseDown2D( CMapView2D *pView, UINT nFlags, const Vector2D &vPoint ) { return false; }
+ virtual bool OnLMouseUp2D( CMapView2D *pView, UINT nFlags, const Vector2D &vPoint ) { return false; }
+ virtual bool OnLMouseDblClk2D( CMapView2D *pView, UINT nFlags, const Vector2D &vPoint ) { return false; }
+ virtual bool OnRMouseDown2D( CMapView2D *pView, UINT nFlags, const Vector2D &vPoint ) { return false; }
+ virtual bool OnRMouseUp2D( CMapView2D *pView, UINT nFlags, const Vector2D &vPoint ) { return false; }
+ virtual bool OnMouseMove2D( CMapView2D *pView, UINT nFlags, const Vector2D &vPoint ) { return true; }
+ virtual bool OnMouseWheel2D( CMapView2D *pView, UINT nFlags, short zDelta, const Vector2D &vPoint) { return false; }
+
+ virtual bool OnKeyDown2D( CMapView2D *pView, UINT nChar, UINT nRepCnt, UINT nFlags ) { return false; }
+ virtual bool OnKeyUp2D( CMapView2D *pView, UINT nChar, UINT nRepCnt, UINT nFlags ) { return false; }
+ virtual bool OnChar2D( CMapView2D *pView, UINT nChar, UINT nRepCnt, UINT nFlags ) { return false; }
+
+ //
+ // Messages sent by the logical view:
+ //
+ virtual bool OnContextMenuLogical( CMapViewLogical *pView, UINT nFlags, const Vector2D &vPoint) { return false; }
+ virtual bool OnLMouseDownLogical( CMapViewLogical *pView, UINT nFlags, const Vector2D &vPoint ) { return false; }
+ virtual bool OnLMouseUpLogical( CMapViewLogical *pView, UINT nFlags, const Vector2D &vPoint ) { return false; }
+ virtual bool OnLMouseDblClkLogical( CMapViewLogical *pView, UINT nFlags, const Vector2D &vPoint ) { return false; }
+ virtual bool OnRMouseDownLogical( CMapViewLogical *pView, UINT nFlags, const Vector2D &vPoint ) { return false; }
+ virtual bool OnRMouseUpLogical( CMapViewLogical *pView, UINT nFlags, const Vector2D &vPoint ) { return false; }
+ virtual bool OnMouseMoveLogical( CMapViewLogical *pView, UINT nFlags, const Vector2D &vPoint ) { return true; }
+ virtual bool OnMouseWheelLogical( CMapViewLogical *pView, UINT nFlags, short zDelta, const Vector2D &vPoint) { return false; }
+
+ virtual bool OnKeyDownLogical( CMapViewLogical *pView, UINT nChar, UINT nRepCnt, UINT nFlags ) { return false; }
+ virtual bool OnKeyUpLogical( CMapViewLogical *pView, UINT nChar, UINT nRepCnt, UINT nFlags ) { return false; }
+ virtual bool OnCharLogical( CMapViewLogical *pView, UINT nChar, UINT nRepCnt, UINT nFlags ) { return false; }
+
+ //
+ // Rendering.
+ //
+ virtual void RenderTool2D( CRender2D *pRender ) {}
+ virtual void RenderToolLogical( CRender2D *pRender ) {}
+ virtual void RenderTool3D( CRender3D *pRender ) {}
+ virtual void UpdateStatusBar( void ) {}
+
+protected:
+
+ bool m_bActiveTool; // Set to true when this is the active tool.
+ bool m_bEmpty; // true if the tool has objects to work on
+ CMapDoc *m_pDocument;
+};
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Constructor.
+//-----------------------------------------------------------------------------
+CBaseTool::CBaseTool()
+{
+ m_bEmpty = true;
+ m_bActiveTool = false;
+ m_pDocument = NULL;
+}
+
+#endif // TOOLINTERFACE_H