//====== Copyright © 1996-2003, Valve Corporation, All rights reserved. =======
//
// Purpose: Tool used for point-and-click picking of angles for filling out
//			entity properties.
//
//=============================================================================

#ifndef TOOLPICKANGLES_H
#define TOOLPICKANGLES_H
#ifdef _WIN32
#pragma once
#endif

#include "MapEntity.h"
#include "ToolInterface.h"


class CMapView3D;
class CToolPickAngles;


//
// Interface for notification by the angles picking tool. Inherit from this if you
// are a client of the angles picker.
//
class IPickAnglesTarget
{
public:
	virtual void OnNotifyPickAngles(const Vector &vecPos) = 0;
};


class CToolPickAngles : public CBaseTool
{
public:

	//
	// Constructor/Destructor
	//
    CToolPickAngles();
    ~CToolPickAngles();

	//
	// CBaseTool virtual implementations
	//
	virtual ToolID_t GetToolID(void) { return TOOL_PICK_ANGLES; }

	virtual bool OnLMouseUp3D(CMapView3D *pView, UINT nFlags, CPoint point);
    virtual bool OnLMouseDown3D(CMapView3D *pView, UINT nFlags, CPoint point);
    virtual bool OnLMouseDblClk3D(CMapView3D *pView, UINT nFlags, CPoint point);
	virtual bool OnRMouseUp3D(CMapView3D *pView, UINT nFlags, CPoint point);
    virtual bool OnRMouseDown3D(CMapView3D *pView, UINT nFlags, CPoint point);
	virtual bool OnMouseMove3D(CMapView3D *pView, UINT nFlags, CPoint point);

	//
	// Functions specific to this tool.
	//
	inline void Attach(IPickAnglesTarget *pTarget);

protected:

	void SetToolCursor(void);

	IPickAnglesTarget *m_pNotifyTarget;			// Object to notify when selection events occur.
};


//-----------------------------------------------------------------------------
// Purpose: Attaches the given notification target to this tool. That object
//			will be used for all future notifications and updates by the tool.
//-----------------------------------------------------------------------------
void CToolPickAngles::Attach(IPickAnglesTarget *pNotifyTarget)
{
	m_pNotifyTarget = pNotifyTarget;
}

#endif // TOOLPICKANGLES_H
