text.hh 3.94 KB
Newer Older
Jan Möbius's avatar
 
Jan Möbius committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
//=============================================================================
//
//                               OpenFlipper
//        Copyright (C) 2009 by Computer Graphics Group, RWTH Aachen
//                           www.openflipper.org
//
//-----------------------------------------------------------------------------
//
//                                License
//
//  OpenFlipper 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 3 of the License, or
//  (at your option) any later version.
//
//  OpenFlipper 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 OpenFlipper.  If not, see <http://www.gnu.org/licenses/>.
//
//-----------------------------------------------------------------------------
//
//   $Revision: $
//   $Author: $
//   $Date: $
//
//=============================================================================

#ifndef VSI_TEXT_HH
#define VSI_TEXT_HH

//== INCLUDES =================================================================
#include <QGraphicsItem>
#include <QGraphicsLayoutItem>
#include <QString>
#include <QTimer>
#include <QPen>
#include <QBrush>
#include <QPainterPath>

//== NAMESPACES ===============================================================
namespace VSI {

//== FORWARDDECLARATIONS ======================================================
class GraphicsScene;

//== CLASS DEFINITION =========================================================

/** Layoutable text widget implementation with an optional background.
  * The background can va convex or concave sides.
  */
class Text : public QObject, public QGraphicsSimpleTextItem, public QGraphicsLayoutItem
{
  Q_OBJECT

  public:

    /// Constructor
    Text (QGraphicsItem *_parent = 0);
    Text (const QString &_text, QGraphicsItem *_parent = 0);

    /// Destrucotr
    ~Text ();

    /// Sets the geometry
    virtual void setGeometry (const QRectF &_rect);

    /// Returns the shape for proper repainting/event handling
    QPainterPath shape () const;

    /// Background painting
    virtual void paint (QPainter *_painter, const QStyleOptionGraphicsItem *_option, QWidget *_widget = 0);

    /// Bounding rectangle
    virtual QRectF boundingRect () const;

    /// Returns the current background brush
    QBrush backgroundBrush () { return backgroundBrush_; };

    /// Sets the background brush
    virtual void setBackgroundBrush (QBrush _brush);

    /// Returns the current background pen
    QPen backgroundPen () { return backgroundPen_; };

    /// Sets the background pen
    virtual void setBackgroundPen (QPen _pen);

    /// Enables background painting
    void setBackground (bool _leftOut, bool _rightOut);

    /// Disables backgorund painting
    void clearBackground ();

    /// Should this widget be stretchable in horizontal direction
    void setHorizontalStretch (bool _stretch);

    /// Placement of the text in a stretched widget 
    void setAlignment (Qt::Alignment _alignment);

    /// Set displayed text
    void setText (QString _text) {text_ = _text; update (); };

    /// Get displayed text
    QString text () { return text_; };

  protected:

    // size information for layouting
    virtual QSizeF sizeHint ( Qt::SizeHint _which, const QSizeF & _constraint = QSizeF()) const;

  private:

    QString text_;

    bool backgroundSet_;

    QBrush backgroundBrush_;
    QPen backgroundPen_;

    bool leftOut_;
    bool rightOut_;

    Qt::Alignment alignment_;
    bool hStretch_;
};

//=============================================================================
}
//=============================================================================

#endif