Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

qwt_text.cpp

00001 /* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
00002  * Qwt Widget Library
00003  * Copyright (C) 1997   Josef Wilgen
00004  * Copyright (C) 2003   Uwe Rathmann
00005  *
00006  * This library is free software; you can redistribute it and/or
00007  * modify it under the terms of the Qwt License, Version 1.0
00008  *****************************************************************************/
00009 
00010 // vim: expandtab
00011 
00012 #include <qpainter.h>
00013 #include <qpalette.h>
00014 #include <qstylesheet.h>
00015 #include "qwt_painter.h"
00016 #include "qwt_text.h"
00017 
00018 Qt::TextFormat QwtText::d_defaultFormat = Qt::AutoText;
00019 
00031 QwtText::QwtText(const QString &text, const QFont &font, 
00032         int align, const QColor &color, const QPen &pen, const QBrush &brush):
00033     d_align(align),
00034     d_text(text),
00035     d_font(font),
00036     d_color(color),
00037     d_fm(font),
00038     d_rectPen(pen),
00039     d_rectBrush(brush)
00040 {
00041 }
00042 
00044 QwtText::~QwtText() 
00045 {
00046 }
00047 
00061 QwtText *QwtText::makeText(const QString &text, 
00062     int align, const QFont &font, const QColor &color,
00063     const QPen &pen, const QBrush &brush)
00064 {
00065     return makeText(text, d_defaultFormat, align, font, color, pen, brush);
00066 }
00067 
00081 QwtText *QwtText::makeText(const QString &text, Qt::TextFormat format,
00082     int align, const QFont &font, const QColor &color,
00083     const QPen &pen, const QBrush &brush)
00084 {
00085 #ifndef QT_NO_RICHTEXT
00086     if (format == Qt::RichText || ((format == Qt::AutoText)
00087             && QStyleSheet::mightBeRichText(text)))
00088     {
00089         return new QwtRichText(text, font, align, color, pen, brush);
00090     }
00091     else
00092 #endif
00093     {
00094         return new QwtPlainText(text, font, align, color, pen, brush);
00095     }
00096 }
00097 
00099 void QwtText::setDefaultFormat(Qt::TextFormat format)
00100 {
00101     d_defaultFormat = format;
00102 }
00103 
00105 Qt::TextFormat QwtText::defaultFormat()
00106 {
00107     return d_defaultFormat;
00108 }
00109 
00111 void QwtText::setText(const QString &text) 
00112 { 
00113     d_text = text; 
00114 }
00115 
00117 QString QwtText::text() const 
00118 { 
00119     return d_text; 
00120 }
00121 
00123 void QwtText::setFont(const QFont &font) 
00124 {
00125     d_font = font; 
00126     d_fm = QFontMetrics(font);
00127 }
00128 
00130 QFont QwtText::font() const 
00131 { 
00132     return d_font; 
00133 }
00134 
00136 QFontMetrics QwtText::fontMetrics() const 
00137 { 
00138     return d_fm; 
00139 }
00140 
00145 void QwtText::setAlignment(int align) 
00146 { 
00147     d_align = align; 
00148 }
00149 
00151 int QwtText::alignment() const 
00152 { 
00153     return d_align; 
00154 }
00155 
00157 void QwtText::setColor(const QColor &color) 
00158 { 
00159     d_color = color; 
00160 }
00161 
00163 QColor QwtText::color() const 
00164 { 
00165     return d_color; 
00166 }
00167 
00169 void QwtText::setRectPen(const QPen &pen) 
00170 { 
00171     d_rectPen = pen; 
00172 }
00173 
00175 QPen QwtText::rectPen() const 
00176 { 
00177     return d_rectPen; 
00178 }
00179 
00181 void QwtText::setRectBrush(const QBrush &brush) 
00182 { 
00183     d_rectBrush = brush; 
00184 }
00185 
00187 QBrush QwtText::rectBrush() const 
00188 { 
00189     return d_rectBrush; 
00190 }
00191 
00203 QwtPlainText::QwtPlainText(const QString &text, const QFont &font,
00204         int align, const QColor &color, const QPen &pen, const QBrush &brush):
00205     QwtText(text, font, align, color, pen, brush) 
00206 {
00207 }
00208 
00216 QwtPlainText::QwtPlainText(const QString &text, 
00217         const QFont &font, const QColor &color):
00218     QwtText(text, font, 
00219         Qt::AlignCenter | Qt::WordBreak | Qt::ExpandTabs, color) 
00220 {
00221 }
00222 
00224 QwtText *QwtPlainText::clone() const
00225 {
00226     return new QwtPlainText(
00227         text(), font(), alignment(), color(), rectPen(), rectBrush());
00228 }
00229 
00235 int QwtPlainText::heightForWidth(int width) const
00236 {
00237     const QwtLayoutMetrics metrics(QwtPainter::metricsMap());
00238     return metrics.heightForWidth(text(), width, alignment(), fontMetrics());
00239 }
00240 
00246 void QwtPlainText::draw(QPainter *painter, const QRect &rect) const
00247 {
00248     painter->save();
00249     painter->setPen(rectPen());
00250     painter->setBrush(rectBrush());
00251     QwtPainter::drawRect(painter, rect);
00252     painter->restore();
00253 
00254     painter->save();
00255     painter->setFont(font());
00256     painter->setPen(color());
00257     QwtPainter::drawText(painter, rect, alignment(), text());
00258     painter->restore();
00259 }
00260 
00261 QRect QwtPlainText::boundingRect(QPainter *painter) const
00262 {
00263     const QwtLayoutMetrics metrics(QwtPainter::metricsMap());
00264     
00265     if (painter)
00266     {
00267         painter->save();
00268         painter->setFont(font());
00269         const QRect rect = metrics.boundingRect(text(), 
00270             alignment(), painter);
00271         painter->restore();
00272         return rect;
00273     }
00274 
00275     return metrics.boundingRect(text(), alignment(), fontMetrics());
00276 }
00277 
00278 #ifndef QT_NO_RICHTEXT
00279 
00291 QwtRichText::QwtRichText(const QString &text, const QFont &font,
00292         int align, const QColor &color, const QPen &pen, const QBrush &brush):
00293     QwtText(text, font, align, color, pen, brush),
00294     d_doc(new QSimpleRichText(text, font))
00295 { 
00296     setText(text); 
00297 }
00298 
00306 QwtRichText::QwtRichText(const QString &text, const QFont &font,
00307         const QColor &color):
00308     QwtText(text, font,
00309         Qt::AlignCenter | Qt::WordBreak | Qt::ExpandTabs, color),
00310     d_doc(new QSimpleRichText(text, font))
00311 { 
00312     setText(text); 
00313 }
00314 
00316 QwtRichText::~QwtRichText() 
00317 { 
00318     delete d_doc; 
00319 }
00320 
00322 QwtText *QwtRichText::clone() const
00323 {
00324     return new QwtRichText(
00325         text(), font(), alignment(), color(), rectPen(), rectBrush());
00326 }
00327 
00329 void QwtRichText::setText(const QString &text)
00330 {
00331     QwtText::setText(text);
00332 
00333     delete d_doc;
00334     d_doc = new QSimpleRichText(taggedText(text, alignment()), font());
00335 }
00336 
00338 void QwtRichText::setFont(const QFont &font)
00339 {
00340 #if QT_VERSION >= 300
00341     d_doc->setDefaultFont(font);
00342 #endif
00343     QwtText::setFont(font);
00344 }
00345 
00347 void QwtRichText::setAlignment(int align)
00348 {
00349     QwtText::setAlignment(align);
00350 
00351     delete d_doc;
00352     d_doc = new QSimpleRichText(taggedText(text(), align), font());
00353 }
00354 
00360 int QwtRichText::heightForWidth(int width) const
00361 {
00362 #if QT_VERSION < 300
00363     const QFont defaultFont = QFont::defaultFont();
00364     QFont::setDefaultFont(font());
00365 #endif
00366 
00367     const QwtLayoutMetrics metrics(QwtPainter::metricsMap());
00368     const int height = metrics.heightForWidth(*d_doc, width);
00369 
00370 #if QT_VERSION < 300
00371     QFont::setDefaultFont(defaultFont);
00372 #endif
00373 
00374     return height;
00375 }
00376 
00382 void QwtRichText::draw(QPainter *painter, const QRect &rect) const
00383 {
00384     painter->save();
00385     painter->setPen(rectPen());
00386     painter->setBrush(rectBrush());
00387     QwtPainter::drawRect(painter, rect);
00388     painter->restore();
00389 
00390     painter->save();
00391 
00392     painter->setPen(color());
00393 #if QT_VERSION < 300
00394     const QFont defaultFont = QFont::defaultFont();
00395     QFont::setDefaultFont(font());
00396 #else
00397     painter->setFont(font());
00398 #endif
00399 
00400     QwtPainter::drawSimpleRichText(painter, rect, alignment(), *d_doc);
00401 
00402 #if QT_VERSION < 300
00403     QFont::setDefaultFont(defaultFont);
00404 #endif
00405     painter->restore();
00406 }
00407 
00408 QRect QwtRichText::boundingRect(QPainter *painter) const
00409 {
00410 #if QT_VERSION < 300
00411     const QFont defaultFont = QFont::defaultFont();
00412     QFont::setDefaultFont(font());
00413 #endif
00414 
00415     const QwtLayoutMetrics metrics(QwtPainter::metricsMap());
00416     const QRect rect = metrics.boundingRect(*d_doc, alignment(), painter);
00417 
00418 #if QT_VERSION < 300
00419     QFont::setDefaultFont(defaultFont);
00420 #endif
00421 
00422     return rect;
00423 }
00424 
00426 QString QwtRichText::taggedText(const QString &text, int align) const
00427 {
00428     QString rich = text;
00429 
00430     // By default QwtSimpleRichText is Qt::AlignLeft
00431 #if QT_VERSION >= 300
00432     if (align & Qt::AlignJustify) 
00433     {
00434         rich.prepend(QString::fromLatin1("<div align=\"justify\">"));
00435         rich.append(QString::fromLatin1("</div>"));
00436     } else
00437 #endif
00438     if (align & Qt::AlignRight)
00439     {
00440         rich.prepend(QString::fromLatin1("<div align=\"right\">"));
00441         rich.append(QString::fromLatin1("</div>"));
00442     }
00443     else if (align & Qt::AlignHCenter) 
00444     {
00445         rich.prepend(QString::fromLatin1("<div align=\"center\">"));
00446         rich.append(QString::fromLatin1("</div>"));
00447     }
00448 
00449     return rich;
00450 }
00451 
00452 #endif
00453 
00454 // Local Variables:
00455 // mode: C++
00456 // c-file-style: "stroustrup"
00457 // indent-tabs-mode: nil
00458 // End:

Generated on Sun Nov 21 11:12:44 2004 for Qwt User's Guide by doxygen 1.3.5