/*
Plot Graphic Library,
a C++/MFC charting library.
Copyright (C) 2001 de Halleux Jonathan
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Contact: de Halleux Jonathan, pglinfo@patabelgos.org
*/
// mouse.h: interface for the CPGLMouse class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_PGLMOUSE_H__338966CD_1C93_11D4_8D89_00409503B978__INCLUDED_)
#define AFX_PGLMOUSE_H__338966CD_1C93_11D4_8D89_00409503B978__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
/*!\brief A mouse.
Takes care of handling the mouse moves or pressed buttons.
*/
class PGL_EXT_CLASS CPGLMouse
{
public:
/// default constructor
CPGLMouse()
{ m_bLDown=m_bRDown=m_bLMoving=m_bRMoving=FALSE;};
/// destructor
~CPGLMouse()
{};
/// the left button has been pressed at position x,y
void LeftBtnPressed(int x,int y)
{ m_iCLBx=m_iLBx=x; m_iCLBy=m_iLBy=y; m_bLDown=TRUE;};
/// the right button has been pressed at position x,y
void RightBtnPressed(int x,int y)
{ m_iCRBx=m_iRBx=x; m_iCRBy=m_iRBy=y; m_bRDown=TRUE;};
/// the left button has been released, returns x,y as the position of the mouse when clicked
void LeftBtnReleased(int& x,int& y)
{ m_bLDown=FALSE; x=m_iCLBx; y=m_iCLBy;};
/// the left button has been released
void RightBtnReleased(int& x,int& y)
{ m_bRDown=FALSE; x=m_iCRBx; y=m_iCRBy;};
/// returns true if left button down. In that case, _x,_y is the last mouse position
BOOL IsLeftBtnDown(int& _x,int &_y)
{ if (m_bLDown) {_x=m_iLBx; _y=m_iLBy;} return m_bLDown;};
/// returns true if right button down. In that case, _x,_y is the last mouse position
BOOL IsRightBtnDown(int& _x,int &_y)
{ if (m_bRDown) {_x=m_iRBx; _y=m_iRBy;} return m_bRDown;};
void GetLeftLastPos(int& _x, int& _y) const
{ _x=m_iLBx; _y=m_iLBy;};
void GetRightLastPos(int& _x, int& _y) const
{ _x=m_iRBx; _y=m_iRBy;};
void GetLeftFirstPos(int& _x, int& _y) const
{ _x=m_iCLBx; _y=m_iCLBy;};
void GetRightFirstPos(int& _x, int& _y) const
{ _x=m_iCRBx; _y=m_iCRBy;};
void UpdateLeftPos(int _x, int _y)
{ m_iLBx=_x; m_iLBy=_y;};
void UpdateRightPos(int _x, int _y)
{ m_iRBx=_x; m_iRBy=_y;};
void LeftMove() { m_bLMoving=TRUE;};
void RightMove() { m_bLMoving=TRUE;};
void Stop() { m_bLMoving=m_bRMoving=FALSE;};
BOOL IsLeftMoving() const {return (m_bLMoving && m_bLDown);};
BOOL IsRightMoving() const {return (m_bLMoving && m_bRDown);};
protected:
/// position of the pointer when the left button was clicked
int m_iCLBx,m_iCLBy;
/// position of the pointer when the right button was clicked
int m_iCRBx,m_iCRBy;
/// last position of the pointer
int m_iLBx,m_iLBy;
/// position of the pointer
int m_iRBx,m_iRBy;
/// true if left button pressed
BOOL m_bLDown;
/// true if right button pressed
BOOL m_bRDown;
/// true if mouse moving with left button down
BOOL m_bLMoving;
/// true if mouse moving with left button down
BOOL m_bRMoving;
};
#endif // !defined(AFX_MOUSECLASS_H__338966CD_1C93_11D4_8D89_00409503B978__INCLUDED_)