Skip to content
Snippets Groups Projects
qwt_text.h 6.02 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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