/*
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
*/
// TextGL.h: interface for the CPGLText class.
//
////////////////////////////////////////////////////////////////////////

#if !defined(AFX_TEXTGL_H__4DACBB86_9EFC_11D4_8A95_D4B14EEC3D7F__INCLUDED_)
#define AFX_TEXTGL_H__4DACBB86_9EFC_11D4_8A95_D4B14EEC3D7F__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "PGLObject.h"

/*! 
    \defgroup PGLTextGroup Texts, axes.
    \ingroup PGLObjectGroup
*/

/*! \brief A text object.

\ingroup PGLTextGroup
A text associated to a font.
*/
class PGL_EXT_CLASS CPGLText : public CPGLObject  
{
    DECLARE_SERIAL(CPGLText);
public:

    //!  default constructor
    CPGLText(const CString& _text=CString(),int _fontID=-1);
    //!  copy constructor
    CPGLText(const CPGLText& t);
    // assignement contructor
    CPGLText& operator=(const CPGLText& t);
    //!  returns a pointer to a copy of the object
    virtual CPGLObject* MakeCopy()
    {    CPGLObject* pCopy=new CPGLText(*this); return pCopy; };
    //!  destructor
    virtual ~CPGLText(){ delete[] m_pPosition;};

    /*! \brief returns the bounding box

    \param pDC pointer to current DC
    \param pView pointer to current view
    \retval min(x), __max(x), min(y), __max(y)
    \sa CPGLObject::GetExtent
    */
    virtual double* GetExtent(CPGLView* pView);
    /*! Computes bounding box */
    virtual void UpdateExtent(CPGLView* pView);

    // properties
    virtual void AddPropertyPage(CPropertySheet* pPropSheet);

    //! return the font pointer
    CPGLFont& GetFont() {    return m_font;};
    const CPGLFont& GetFont() const {    return m_font;};

    // accessing attributes
    void SetString(const CString& _text){m_sText=_text;};
    void SetPosition(const float* _position){m_pPosition[0]=_position[0]; m_pPosition[1]=_position[1];};
    const CString& GetString() const { return m_sText;};
    float* GetPosition() const { return m_pPosition;};
    void SetAngle( float angle)
    {    m_fAngle = angle - ((int)floor(angle/360) )*360;};
    float GetAngle() const
    {    return m_fAngle;};

    int GetAlign() const
    {    return m_iAlign;};
    void SetAlign(int iAlign);
    // plotting
    virtual void PlotGfx(gfxinterface::CGfxInterface& gfx);

    void GetTextExtent(double& width, double& height)
    {    width=m_extent[1]-m_extent[0]; height=m_extent[4]-m_extent[3];};

    // Serialize functions
    void Serialize(CArchive& archive);

    // Debuggin functions
    #ifdef _DEBUG
        virtual void Dump( CDumpContext& dc ) const;
        virtual void AssertValid() const;    // Override
    #endif

protected:
    //!  pointer to font
    CPGLFont m_font;
    //! align type : left, center, right
    int m_iAlign;
    //! text
    CString m_sText;
    //! position
    float* m_pPosition;
    //! Angle ( counter clock-wize starting at 0 = horizontal) in DEGRES !
    float m_fAngle;
};

#endif // !defined(AFX_TEXTGL_H__4DACBB86_9EFC_11D4_8A95_D4B14EEC3D7F__INCLUDED_)