diff options
Diffstat (limited to 'hammer/toolinterface.h')
| -rw-r--r-- | hammer/toolinterface.h | 183 |
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 |