Skip to content
qwt_text.h 6.02 KiB
Newer Older
pixhawk's avatar
pixhawk committed
/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
 * Qwt Widget Library
 * Copyright (C) 1997   Josef Wilgen
 * Copyright (C) 2003   Uwe Rathmann
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the Qwt License, Version 1.0
 *****************************************************************************/

#ifndef QWT_TEXT_H
#define QWT_TEXT_H

Bryant's avatar
Bryant committed
#include "qwt_global.h"
pixhawk's avatar
pixhawk committed
#include <qstring.h>
#include <qsize.h>
#include <qfont.h>
Bryant's avatar
Bryant committed
#include <qmetatype.h>
pixhawk's avatar
pixhawk committed

class QColor;
class QPen;
class QBrush;
Bryant's avatar
Bryant committed
class QRectF;
pixhawk's avatar
pixhawk committed
class QPainter;
class QwtTextEngine;

/*!
  \brief A class representing a text

  A QwtText is a text including a set of attributes how to render it.

  - Format\n
    A text might include control sequences (f.e tags) describing
    how to render it. Each format (f.e MathML, TeX, Qt Rich Text)
    has its own set of control sequences, that can be handles by
Bryant's avatar
Bryant committed
    a special QwtTextEngine for this format.
pixhawk's avatar
pixhawk committed
  - Background\n
    A text might have a background, defined by a QPen and QBrush
Bryant's avatar
Bryant committed
    to improve its visibility. The corners of the background might
    be rounded.
pixhawk's avatar
pixhawk committed
  - Font\n
    A text might have an individual font.
  - Color\n
    A text might have an individual color.
  - Render Flags\n
    Flags from Qt::AlignmentFlag and Qt::TextFlag used like in
Bryant's avatar
Bryant committed
    QPainter::drawText().
pixhawk's avatar
pixhawk committed

  \sa QwtTextEngine, QwtTextLabel
*/

class QWT_EXPORT QwtText
{
public:

    /*!
      \brief Text format

      The text format defines the QwtTextEngine, that is used to render
      the text.

Bryant's avatar
Bryant committed
      \sa QwtTextEngine, setTextEngine()
pixhawk's avatar
pixhawk committed
    */

Bryant's avatar
Bryant committed
    enum TextFormat
    {
        /*!
          The text format is determined using QwtTextEngine::mightRender() for
          all available text engines in increasing order > PlainText.
          If none of the text engines can render the text is rendered
          like QwtText::PlainText.
         */
pixhawk's avatar
pixhawk committed
        AutoText = 0,
Bryant's avatar
Bryant committed
        //! Draw the text as it is, using a QwtPlainTextEngine.
pixhawk's avatar
pixhawk committed
        PlainText,
Bryant's avatar
Bryant committed

        //! Use the Scribe framework (Qt Rich Text) to render the text.
pixhawk's avatar
pixhawk committed
        RichText,

Bryant's avatar
Bryant committed
        /*!
          Use a MathML (http://en.wikipedia.org/wiki/MathML) render engine
          to display the text. The Qwt MathML extension offers such an engine
          based on the MathML renderer of the Qt solutions package. 
          To enable MathML support the following code needs to be added to the
          application:
\verbatim QwtText::setTextEngine(QwtText::MathMLText, new QwtMathMLTextEngine()); \endverbatim
         */
pixhawk's avatar
pixhawk committed
        MathMLText,
Bryant's avatar
Bryant committed

        /*!
          Use a TeX (http://en.wikipedia.org/wiki/TeX) render engine
          to display the text ( not implemented yet ).
         */
pixhawk's avatar
pixhawk committed
        TeXText,

Bryant's avatar
Bryant committed
        /*!
          The number of text formats can be extended using setTextEngine.
          Formats >= QwtText::OtherFormat are not used by Qwt.
         */
pixhawk's avatar
pixhawk committed
        OtherFormat = 100
    };

    /*!
      \brief Paint Attributes

      Font and color and background are optional attributes of a QwtText.
pixhawk's avatar
pixhawk committed
      The paint attributes hold the information, if they are set.
    */
Bryant's avatar
Bryant committed
    enum PaintAttribute
    {
        //! The text has an individual font.
        PaintUsingTextFont = 0x01,

        //! The text has an individual color.
        PaintUsingTextColor = 0x02,

        //! The text has an individual background.
        PaintBackground = 0x04
pixhawk's avatar
pixhawk committed
    };

Bryant's avatar
Bryant committed
    //! Paint attributes
    typedef QFlags<PaintAttribute> PaintAttributes;

pixhawk's avatar
pixhawk committed
    /*!
      \brief Layout Attributes
      The layout attributes affects some aspects of the layout of the text.
    */
Bryant's avatar
Bryant committed
    enum LayoutAttribute
    {
        /*!
          Layout the text without its margins. This mode is useful if a
          text needs to be aligned accurately, like the tick labels of a scale.
          If QwtTextEngine::textMargins is not implemented for the format
          of the text, MinimumLayout has no effect.
         */
        MinimumLayout = 0x01
pixhawk's avatar
pixhawk committed
    };

Bryant's avatar
Bryant committed
    //! Layout attributes
    typedef QFlags<LayoutAttribute> LayoutAttributes;

    QwtText( const QString & = QString::null,
             TextFormat textFormat = AutoText );
    QwtText( const QwtText & );
pixhawk's avatar
pixhawk committed
    ~QwtText();

Bryant's avatar
Bryant committed
    QwtText &operator=( const QwtText & );
pixhawk's avatar
pixhawk committed

Bryant's avatar
Bryant committed
    bool operator==( const QwtText & ) const;
    bool operator!=( const QwtText & ) const;
pixhawk's avatar
pixhawk committed

Bryant's avatar
Bryant committed
    void setText( const QString &,
        QwtText::TextFormat textFormat = AutoText );
pixhawk's avatar
pixhawk committed
    QString text() const;

Bryant's avatar
Bryant committed
    bool isNull() const;
    bool isEmpty() const;
pixhawk's avatar
pixhawk committed

Bryant's avatar
Bryant committed
    void setFont( const QFont & );
pixhawk's avatar
pixhawk committed
    QFont font() const;

Bryant's avatar
Bryant committed
    QFont usedFont( const QFont & ) const;
pixhawk's avatar
pixhawk committed

Bryant's avatar
Bryant committed
    void setRenderFlags( int flags );
pixhawk's avatar
pixhawk committed
    int renderFlags() const;

Bryant's avatar
Bryant committed
    void setColor( const QColor & );
pixhawk's avatar
pixhawk committed
    QColor color() const;

Bryant's avatar
Bryant committed
    QColor usedColor( const QColor & ) const;
pixhawk's avatar
pixhawk committed

Bryant's avatar
Bryant committed
    void setBorderRadius( double );
    double borderRadius() const;
pixhawk's avatar
pixhawk committed

Bryant's avatar
Bryant committed
    void setBorderPen( const QPen & );
    QPen borderPen() const;

    void setBackgroundBrush( const QBrush & );
pixhawk's avatar
pixhawk committed
    QBrush backgroundBrush() const;

Bryant's avatar
Bryant committed
    void setPaintAttribute( PaintAttribute, bool on = true );
    bool testPaintAttribute( PaintAttribute ) const;
pixhawk's avatar
pixhawk committed

Bryant's avatar
Bryant committed
    void setLayoutAttribute( LayoutAttribute, bool on = true );
    bool testLayoutAttribute( LayoutAttribute ) const;
pixhawk's avatar
pixhawk committed

Bryant's avatar
Bryant committed
    double heightForWidth( double width, const QFont & = QFont() ) const;
    QSizeF textSize( const QFont & = QFont() ) const;
pixhawk's avatar
pixhawk committed

Bryant's avatar
Bryant committed
    void draw( QPainter *painter, const QRectF &rect ) const;
pixhawk's avatar
pixhawk committed

Bryant's avatar
Bryant committed
    static const QwtTextEngine *textEngine( 
        const QString &text, QwtText::TextFormat = AutoText );
pixhawk's avatar
pixhawk committed

Bryant's avatar
Bryant committed
    static const QwtTextEngine *textEngine( QwtText::TextFormat );
    static void setTextEngine( QwtText::TextFormat, QwtTextEngine * );
pixhawk's avatar
pixhawk committed

private:
    class PrivateData;
    PrivateData *d_data;

    class LayoutCache;
    LayoutCache *d_layoutCache;
};

Bryant's avatar
Bryant committed
//! \return text().isNull()
inline bool QwtText::isNull() const
{
    return text().isNull();
}

//! \return text().isEmpty()
inline bool QwtText::isEmpty() const
{
    return text().isEmpty();
}

Q_DECLARE_OPERATORS_FOR_FLAGS( QwtText::PaintAttributes )
Q_DECLARE_OPERATORS_FOR_FLAGS( QwtText::LayoutAttributes )

Q_DECLARE_METATYPE( QwtText )

pixhawk's avatar
pixhawk committed
#endif