summaryrefslogtreecommitdiffstats
path: root/experimental/tqtinterface/qt4/src/kernel/tqsimplerichtext.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'experimental/tqtinterface/qt4/src/kernel/tqsimplerichtext.cpp')
-rw-r--r--experimental/tqtinterface/qt4/src/kernel/tqsimplerichtext.cpp851
1 files changed, 851 insertions, 0 deletions
diff --git a/experimental/tqtinterface/qt4/src/kernel/tqsimplerichtext.cpp b/experimental/tqtinterface/qt4/src/kernel/tqsimplerichtext.cpp
new file mode 100644
index 000000000..4721fd89d
--- /dev/null
+++ b/experimental/tqtinterface/qt4/src/kernel/tqsimplerichtext.cpp
@@ -0,0 +1,851 @@
+#include "tqtglobaldefines.h"
+
+#ifdef USE_QT4
+
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt3Support module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "tqsimplerichtext.h"
+
+#ifndef QT_NO_RICHTEXT
+#include "tqrichtext_p.h"
+#include "tqapplication.h"
+
+QT_BEGIN_NAMESPACE
+
+class TQSimpleRichTextData
+{
+public:
+ TQTextDocument *doc;
+ QFont font;
+ int cachedWidth;
+ bool cachedWidthWithPainter;
+ void adjustSize();
+};
+
+// Pull this private function in from qglobal.cpp
+Q_CORE_EXPORT unsigned int qt_int_sqrt(unsigned int n);
+
+void TQSimpleRichTextData::adjustSize() {
+ QFontMetrics fm(font);
+ int mw = fm.width(QString(QLatin1Char('x'))) * 80;
+ int w = mw;
+ doc->doLayout(0,w);
+ if (doc->widthUsed() != 0) {
+ w = qt_int_sqrt(5 * doc->height() * doc->widthUsed() / 3);
+ doc->doLayout(0, qMin(w, mw));
+
+ if (w*3 < 5*doc->height()) {
+ w = qt_int_sqrt(2 * doc->height() * doc->widthUsed());
+ doc->doLayout(0,qMin(w, mw));
+ }
+ }
+ cachedWidth = doc->width();
+ cachedWidthWithPainter = false;
+}
+
+/*!
+ \class TQSimpleRichText
+ \brief The TQSimpleRichText class provides a small displayable piece of rich text.
+
+ \compat
+
+ This class encapsulates simple rich text usage in which a string
+ is interpreted as rich text and can be drawn. This is particularly
+ useful if you want to display some rich text in a custom widget. A
+ TQStyleSheet is needed to interpret the tags and format the rich
+ text. Qt provides a default HTML-like style sheet, but you may
+ define custom style sheets.
+
+ Once created, the rich text object can be queried for its width(),
+ height(), and the actual width used (see widthUsed()). Most
+ importantly, it can be drawn on any given QPainter with draw().
+ TQSimpleRichText can also be used to implement hypertext or active
+ text facilities by using anchorAt(). A hit test through inText()
+ makes it possible to use simple rich text for text objects in
+ editable drawing canvases.
+
+ Once constructed from a string the contents cannot be changed,
+ only resized. If the contents change, just throw the rich text
+ object away and make a new one with the new contents.
+
+ For large documents use QTextEdit or QTextBrowser. For very small
+ items of rich text you can use a QLabel.
+
+ If you are using TQSimpleRichText to print in high resolution you
+ should call setWidth(QPainter, int) so that the content will be
+ laid out properly on the page.
+*/
+
+/*!
+ Constructs a TQSimpleRichText from the rich text string \a text and
+ the font \a fnt.
+
+ The font is used as a basis for the text rendering. When using
+ rich text rendering on a widget \e w, you would normally specify
+ the widget's font, for example:
+
+ \snippet doc/src/snippets/code/src_qt3support_text_q3simplerichtext.cpp 0
+
+ \a context is the optional context of the rich text object. This
+ becomes important if \a text contains relative references, for
+ example within image tags. TQSimpleRichText always uses the default
+ mime source factory (see \l{TQMimeSourceFactory::defaultFactory()})
+ to resolve those references. The context will then be used to
+ calculate the absolute path. See
+ TQMimeSourceFactory::makeAbsolute() for details.
+
+ The \a sheet is an optional style sheet. If it is 0, the default
+ style sheet will be used (see \l{TQStyleSheet::defaultSheet()}).
+*/
+
+TQSimpleRichText::TQSimpleRichText(const QString& text, const QFont& fnt,
+ const QString& context, const TQStyleSheet* sheet)
+{
+ d = new TQSimpleRichTextData;
+ d->cachedWidth = -1;
+ d->cachedWidthWithPainter = false;
+ d->font = fnt;
+ d->doc = new TQTextDocument(0);
+ d->doc->setTextFormat(TQt::RichText);
+ d->doc->setLeftMargin(0);
+ d->doc->setRightMargin(0);
+ d->doc->setFormatter(new TQTextFormatterBreakWords);
+ d->doc->setStyleSheet((TQStyleSheet*)sheet);
+ d->doc->setDefaultFormat(fnt, QColor());
+ d->doc->setText(text, context);
+}
+
+
+/*!
+ Constructs a TQSimpleRichText from the rich text string \a text and
+ the font \a fnt.
+
+ This is a slightly more complex constructor for TQSimpleRichText
+ that takes an additional mime source factory \a factory, a page
+ break parameter \a pageBreak and a bool \a linkUnderline. \a
+ linkColor is only provided for compatibility, but has no effect,
+ as QPalette::link() color is used now.
+
+ \a context is the optional context of the rich text object. This
+ becomes important if \a text contains relative references, for
+ example within image tags. TQSimpleRichText always uses the default
+ mime source factory (see \l{TQMimeSourceFactory::defaultFactory()})
+ to resolve those references. The context will then be used to
+ calculate the absolute path. See
+ TQMimeSourceFactory::makeAbsolute() for details.
+
+ The \a sheet is an optional style sheet. If it is 0, the default
+ style sheet will be used (see \l{TQStyleSheet::defaultSheet()}).
+
+ This constructor is useful for creating a TQSimpleRichText object
+ suitable for printing. Set \a pageBreak to be the height of the
+ contents area of the pages.
+*/
+
+TQSimpleRichText::TQSimpleRichText(const QString& text, const QFont& fnt,
+ const QString& context, const TQStyleSheet* sheet,
+ const TQMimeSourceFactory* factory, int pageBreak,
+ const QColor& /*linkColor*/, bool linkUnderline)
+{
+ d = new TQSimpleRichTextData;
+ d->cachedWidth = -1;
+ d->cachedWidthWithPainter = false;
+ d->font = fnt;
+ d->doc = new TQTextDocument(0);
+ d->doc->setTextFormat(TQt::RichText);
+ d->doc->setFormatter(new TQTextFormatterBreakWords);
+ d->doc->setStyleSheet((TQStyleSheet*)sheet);
+ d->doc->setDefaultFormat(fnt, QColor());
+ d->doc->flow()->setPageSize(pageBreak);
+ d->doc->setPageBreakEnabled(true);
+#ifndef QT_NO_MIME
+ d->doc->setMimeSourceFactory((TQMimeSourceFactory*)factory);
+#endif
+ d->doc->setUnderlineLinks(linkUnderline);
+ d->doc->setText(text, context);
+}
+
+/*!
+ Destroys the rich text object, freeing memory.
+*/
+
+TQSimpleRichText::~TQSimpleRichText()
+{
+ delete d->doc;
+ delete d;
+}
+
+/*!
+ \overload
+
+ Sets the width of the rich text object to \a w pixels.
+
+ \sa height(), adjustSize()
+*/
+
+void TQSimpleRichText::setWidth(int w)
+{
+ if (w == d->cachedWidth && !d->cachedWidthWithPainter)
+ return;
+ d->doc->formatter()->setAllowBreakInWords(d->doc->isPageBreakEnabled());
+ d->cachedWidth = w;
+ d->cachedWidthWithPainter = false;
+ d->doc->doLayout(0, w);
+}
+
+/*!
+ Sets the width of the rich text object to \a w pixels,
+ recalculating the layout as if it were to be drawn with painter \a
+ p.
+
+ Passing a painter is useful when you intend drawing on devices
+ other than the screen, for example a QPrinter.
+
+ \sa height(), adjustSize()
+*/
+
+void TQSimpleRichText::setWidth(QPainter *p, int w)
+{
+ if (w == d->cachedWidth && d->cachedWidthWithPainter)
+ return;
+ d->doc->formatter()->setAllowBreakInWords(d->doc->isPageBreakEnabled() ||
+ (p && p->device() &&
+ p->device()->devType() == QInternal::Printer));
+ p->save();
+ d->cachedWidth = w;
+ d->cachedWidthWithPainter = true;
+ d->doc->doLayout(TQT_TQPAINTER(p), w);
+ p->restore();
+}
+
+/*!
+ Returns the set width of the rich text object in pixels.
+
+ \sa widthUsed()
+*/
+
+int TQSimpleRichText::width() const
+{
+ if (d->cachedWidth < 0)
+ d->adjustSize();
+ return d->doc->width();
+}
+
+/*!
+ Returns the width in pixels that is actually used by the rich text
+ object. This can be smaller or wider than the set width.
+
+ It may be wider, for example, if the text contains images or
+ non-breakable words that are already wider than the available
+ space. It's smaller when the object only consists of lines that do
+ not fill the width completely.
+
+ \sa width()
+*/
+
+int TQSimpleRichText::widthUsed() const
+{
+ if (d->cachedWidth < 0)
+ d->adjustSize();
+ return d->doc->widthUsed();
+}
+
+/*!
+ Returns the height of the rich text object in pixels.
+
+ \sa setWidth()
+*/
+
+int TQSimpleRichText::height() const
+{
+ if (d->cachedWidth < 0)
+ d->adjustSize();
+ return d->doc->height();
+}
+
+/*!
+ Adjusts the rich text object to a reasonable size.
+
+ \sa setWidth()
+*/
+
+void TQSimpleRichText::adjustSize()
+{
+ d->adjustSize();
+}
+
+/*!
+ Draws the formatted text with painter \a p, at position (\a x, \a
+ y), clipped to \a clipRect. The clipping rectangle is given in the
+ rich text object's coordinates translated by (\a x, \a y). Passing
+ an null rectangle results in no clipping. Colors from the color
+ group \a cg are used as needed, and if not 0, *\a{paper} is
+ used as the background brush.
+
+ Note that the display code is highly optimized to reduce flicker,
+ so passing a brush for \a paper is preferable to simply clearing
+ the area to be painted and then calling this without a brush.
+*/
+
+void TQSimpleRichText::draw(QPainter *p, int x, int y, const QRect& clipRect,
+ const TQColorGroup &cg, const QBrush* paper) const
+{
+ p->save();
+ if (d->cachedWidth < 0)
+ d->adjustSize();
+ TQRect r = clipRect;
+ if (!r.isNull())
+ r.moveBy(-x, -y);
+
+ if (paper)
+ d->doc->setPaper(new TQBrush(*paper));
+ QPalette pal2 = cg;
+ if (d->doc->paper())
+ pal2.setBrush(QPalette::Base, *d->doc->paper());
+
+ if (!clipRect.isNull())
+ p->setClipRect(clipRect);
+ p->translate(x, y);
+ d->doc->draw(TQT_TQPAINTER(p), r, pal2, TQT_TQBRUSH_CONST(paper));
+ p->translate(-x, -y);
+ p->restore();
+}
+
+
+/*! \fn void TQSimpleRichText::draw(QPainter *p, int x, int y, const QRegion& clipRegion,
+ const QColorGroup &cg, const QBrush* paper) const
+
+ Use the version with clipRect instead of this \a clipRegion version,
+ since this region version has problems with larger documents on some
+ platforms (on X11 regions internally are represented with 16-bit
+ coordinates).
+*/
+
+
+
+/*!
+ Returns the context of the rich text object. If no context has
+ been specified in the constructor, an empty string is returned. The
+ context is the path to use to look up relative links, such as
+ image tags and anchor references.
+*/
+
+TQString TQSimpleRichText::context() const
+{
+ return d->doc->context();
+}
+
+/*!
+ Returns the anchor at the requested position, \a pos. An empty
+ string is returned if no anchor is specified for this position.
+*/
+
+TQString TQSimpleRichText::anchorAt(const QPoint& pos) const
+{
+ if (d->cachedWidth < 0)
+ d->adjustSize();
+ TQTextCursor c(d->doc);
+ c.place(pos, d->doc->firstParagraph(), true);
+ return c.paragraph()->at(c.index())->anchorHref();
+}
+
+/*!
+ Returns true if \a pos is within a text line of the rich text
+ object; otherwise returns false.
+*/
+
+bool TQSimpleRichText::inText(const QPoint& pos) const
+{
+ if (d->cachedWidth < 0)
+ d->adjustSize();
+ if (pos.y() > d->doc->height())
+ return false;
+ TQTextCursor c(d->doc);
+ c.place(pos, d->doc->firstParagraph());
+ return c.totalOffsetX() + c.paragraph()->at(c.index())->x +
+ c.paragraph()->at(c.index())->format()->width(c.paragraph()->at(c.index())->c) > pos.x();
+}
+
+/*!
+ Sets the default font for the rich text object to \a f
+*/
+
+void TQSimpleRichText::setDefaultFont(const QFont &f)
+{
+ if (d->font == f)
+ return;
+ d->font = f;
+ d->cachedWidth = -1;
+ d->cachedWidthWithPainter = false;
+ d->doc->setDefaultFormat(f, QColor());
+ d->doc->setText(d->doc->originalText(), d->doc->context());
+}
+
+QT_END_NAMESPACE
+
+#endif //QT_NO_RICHTEXT
+
+#else // USE_QT4
+
+/****************************************************************************
+**
+** Implementation of the TQSimpleRichText class
+**
+** Created : 990101
+**
+** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA.
+**
+** This file is part of the kernel module of the TQt GUI Toolkit.
+**
+** This file may be used under the terms of the GNU General
+** Public License versions 2.0 or 3.0 as published by the Free
+** Software Foundation and appearing in the files LICENSE.GPL2
+** and LICENSE.GPL3 included in the packaging of this file.
+** Alternatively you may (at your option) use any later version
+** of the GNU General Public License if such license has been
+** publicly approved by Trolltech ASA (or its successors, if any)
+** and the KDE Free TQt Foundation.
+**
+** Please review the following information to ensure GNU General
+** Public Licensing requirements will be met:
+** http://trolltech.com/products/qt/licenses/licensing/opensource/.
+** If you are unsure which license is appropriate for your use, please
+** review the following information:
+** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
+** or contact the sales department at sales@trolltech.com.
+**
+** This file may be used under the terms of the Q Public License as
+** defined by Trolltech ASA and appearing in the file LICENSE.TQPL
+** included in the packaging of this file. Licensees holding valid TQt
+** Commercial licenses may use this file in accordance with the TQt
+** Commercial License Agreement provided with the Software.
+**
+** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
+** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted
+** herein.
+**
+**********************************************************************/
+
+#include "tqsimplerichtext.h"
+
+#ifndef TQT_NO_RICHTEXT
+#include "tqrichtext_p.h"
+#include "tqapplication.h"
+
+class TQSimpleRichTextData
+{
+public:
+ TQTextDocument *doc;
+ TQFont font;
+ int cachedWidth;
+ bool cachedWidthWithPainter;
+ void adjustSize(TQPainter *p = 0);
+};
+
+// Pull this private function in from qglobal.cpp
+extern unsigned int qt_int_sqrt( unsigned int n );
+
+void TQSimpleRichTextData::adjustSize(TQPainter *p) {
+ TQFontMetrics fm( font );
+ int mw = fm.width( 'x' ) * 80;
+ int w = mw;
+ doc->doLayout(p, w);
+ if ( doc->widthUsed() != 0 ) {
+ w = qt_int_sqrt( 5 * doc->height() * doc->widthUsed() / 3 );
+ doc->doLayout(p, TQMIN(w, mw));
+
+ if ( w*3 < 5*doc->height() ) {
+ w = qt_int_sqrt( 2 * doc->height() * doc->widthUsed() );
+ doc->doLayout(p, TQMIN(w, mw));
+ }
+ }
+ cachedWidth = doc->width();
+ cachedWidthWithPainter = FALSE;
+}
+
+/*!
+ \class TQSimpleRichText tqsimplerichtext.h
+ \brief The TQSimpleRichText class provides a small displayable piece of rich text.
+
+ \ingroup text
+ \mainclass
+
+ This class encapsulates simple rich text usage in which a string
+ is interpreted as rich text and can be drawn. This is particularly
+ useful if you want to display some rich text in a custom widget. A
+ TQStyleSheet is needed to interpret the tags and format the rich
+ text. TQt provides a default HTML-like style sheet, but you may
+ define custom style sheets.
+
+ Once created, the rich text object can be queried for its width(),
+ height(), and the actual width used (see widthUsed()). Most
+ importantly, it can be drawn on any given TQPainter with draw().
+ TQSimpleRichText can also be used to implement hypertext or active
+ text facilities by using anchorAt(). A hit test through inText()
+ makes it possible to use simple rich text for text objects in
+ editable drawing canvases.
+
+ Once constructed from a string the contents cannot be changed,
+ only resized. If the contents change, just throw the rich text
+ object away and make a new one with the new contents.
+
+ For large documents use TQTextEdit or TQTextBrowser. For very small
+ items of rich text you can use a TQLabel.
+
+ If you are using TQSimpleRichText to print in high resolution you
+ should call setWidth(TQPainter, int) so that the content will be
+ laid out properly on the page.
+*/
+
+/*!
+ Constructs a TQSimpleRichText from the rich text string \a text and
+ the font \a fnt.
+
+ The font is used as a basis for the text rendering. When using
+ rich text rendering on a widget \e w, you would normally specify
+ the widget's font, for example:
+
+ \code
+ TQSimpleRichText myrichtext( contents, mywidget->font() );
+ \endcode
+
+ \a context is the optional context of the rich text object. This
+ becomes important if \a text tqcontains relative references, for
+ example within image tags. TQSimpleRichText always uses the default
+ mime source factory (see \l{TQMimeSourceFactory::defaultFactory()})
+ to resolve those references. The context will then be used to
+ calculate the absolute path. See
+ TQMimeSourceFactory::makeAbsolute() for details.
+
+ The \a sheet is an optional style sheet. If it is 0, the default
+ style sheet will be used (see \l{TQStyleSheet::defaultSheet()}).
+*/
+
+TQSimpleRichText::TQSimpleRichText( const TQString& text, const TQFont& fnt,
+ const TQString& context, const TQStyleSheet* sheet )
+{
+ d = new TQSimpleRichTextData;
+ d->cachedWidth = -1;
+ d->cachedWidthWithPainter = FALSE;
+ d->font = fnt;
+ d->doc = new TQTextDocument( 0 );
+ d->doc->setTextFormat( TQt::RichText );
+ d->doc->setLeftMargin( 0 );
+ d->doc->setRightMargin( 0 );
+ d->doc->setFormatter( new TQTextFormatterBreakWords );
+ d->doc->setStyleSheet( (TQStyleSheet*)sheet );
+ d->doc->setDefaultFormat( fnt, TQColor() );
+ d->doc->setText( text, context );
+}
+
+
+/*!
+ Constructs a TQSimpleRichText from the rich text string \a text and
+ the font \a fnt.
+
+ This is a slightly more complex constructor for TQSimpleRichText
+ that takes an additional mime source factory \a factory, a page
+ break parameter \a pageBreak and a bool \a linkUnderline. \a
+ linkColor is only provided for compatibility, but has no effect,
+ as TQColorGroup's TQColorGroup::link() color is used now.
+
+ \a context is the optional context of the rich text object. This
+ becomes important if \a text tqcontains relative references, for
+ example within image tags. TQSimpleRichText always uses the default
+ mime source factory (see \l{TQMimeSourceFactory::defaultFactory()})
+ to resolve those references. The context will then be used to
+ calculate the absolute path. See
+ TQMimeSourceFactory::makeAbsolute() for details.
+
+ The \a sheet is an optional style sheet. If it is 0, the default
+ style sheet will be used (see \l{TQStyleSheet::defaultSheet()}).
+
+ This constructor is useful for creating a TQSimpleRichText object
+ suitable for printing. Set \a pageBreak to be the height of the
+ contents area of the pages.
+*/
+
+TQSimpleRichText::TQSimpleRichText( const TQString& text, const TQFont& fnt,
+ const TQString& context, const TQStyleSheet* sheet,
+ const TQMimeSourceFactory* factory, int pageBreak,
+ const TQColor& /*linkColor*/, bool linkUnderline )
+{
+ d = new TQSimpleRichTextData;
+ d->cachedWidth = -1;
+ d->cachedWidthWithPainter = FALSE;
+ d->font = fnt;
+ d->doc = new TQTextDocument( 0 );
+ d->doc->setTextFormat( TQt::RichText );
+ d->doc->setFormatter( new TQTextFormatterBreakWords );
+ d->doc->setStyleSheet( (TQStyleSheet*)sheet );
+ d->doc->setDefaultFormat( fnt, TQColor() );
+ d->doc->flow()->setPageSize( pageBreak );
+ d->doc->setPageBreakEnabled( TRUE );
+#ifndef TQT_NO_MIME
+ d->doc->setMimeSourceFactory( (TQMimeSourceFactory*)factory );
+#endif
+ d->doc->setUnderlineLinks( linkUnderline );
+ d->doc->setText( text, context );
+}
+
+/*!
+ Destroys the rich text object, freeing memory.
+*/
+
+TQSimpleRichText::~TQSimpleRichText()
+{
+ delete d->doc;
+ delete d;
+}
+
+/*!
+ \overload
+
+ Sets the width of the rich text object to \a w pixels.
+
+ \sa height(), adjustSize()
+*/
+
+void TQSimpleRichText::setWidth( int w )
+{
+ if ( w == d->cachedWidth && !d->cachedWidthWithPainter )
+ return;
+ d->doc->formatter()->setAllowBreakInWords( d->doc->isPageBreakEnabled() );
+ d->cachedWidth = w;
+ d->cachedWidthWithPainter = FALSE;
+ d->doc->doLayout( 0, w );
+}
+
+/*!
+ Sets the width of the rich text object to \a w pixels,
+ recalculating the tqlayout as if it were to be drawn with painter \a
+ p.
+
+ Passing a painter is useful when you intend drawing on tqdevices
+ other than the screen, for example a TQPrinter.
+
+ \sa height(), adjustSize()
+*/
+
+void TQSimpleRichText::setWidth( TQPainter *p, int w )
+{
+ if ( w == d->cachedWidth && d->cachedWidthWithPainter )
+ return;
+ d->doc->formatter()->setAllowBreakInWords( d->doc->isPageBreakEnabled() ||
+ (p && p->tqdevice() &&
+ (p->tqdevice()->devType() == TQInternal::Printer)) );
+ p->save();
+ d->cachedWidth = w;
+ d->cachedWidthWithPainter = TRUE;
+ d->doc->doLayout( p, w );
+ p->restore();
+}
+
+/*!
+ Returns the set width of the rich text object in pixels.
+
+ \sa widthUsed()
+*/
+
+int TQSimpleRichText::width() const
+{
+ if ( d->cachedWidth < 0 )
+ d->adjustSize();
+ return d->doc->width();
+}
+
+/*!
+ Returns the width in pixels that is actually used by the rich text
+ object. This can be smaller or wider than the set width.
+
+ It may be wider, for example, if the text tqcontains images or
+ non-breakable words that are already wider than the available
+ space. It's smaller when the object only consists of lines that do
+ not fill the width completely.
+
+ \sa width()
+*/
+
+int TQSimpleRichText::widthUsed() const
+{
+ if ( d->cachedWidth < 0 )
+ d->adjustSize();
+ return d->doc->widthUsed();
+}
+
+/*!
+ Returns the height of the rich text object in pixels.
+
+ \sa setWidth()
+*/
+
+int TQSimpleRichText::height() const
+{
+ if ( d->cachedWidth < 0 )
+ d->adjustSize();
+ return d->doc->height();
+}
+
+/*!
+ Adjusts the richt text object to a reasonable size.
+
+ \sa setWidth()
+*/
+
+void TQSimpleRichText::adjustSize()
+{
+ d->adjustSize();
+}
+
+/*!
+ Draws the formatted text with painter \a p, at position (\a x, \a
+ y), clipped to \a clipRect. The clipping rectangle is given in the
+ rich text object's coordinates translated by (\a x, \a y). Passing
+ an null rectangle results in no clipping. Colors from the color
+ group \a cg are used as needed, and if not 0, \a *paper is used as
+ the background brush.
+
+ Note that the display code is highly optimized to reduce flicker,
+ so passing a brush for \a paper is preferable to simply clearing
+ the area to be painted and then calling this without a brush.
+*/
+
+void TQSimpleRichText::draw( TQPainter *p, int x, int y, const QRect& clipRect,
+ const TQColorGroup& cg, const TQBrush* paper ) const
+{
+ p->save();
+ if ( d->cachedWidth < 0 )
+ d->adjustSize(p);
+
+ TQRect r = clipRect;
+ if ( !r.isNull() )
+ r.moveBy( -x, -y );
+
+ if ( paper )
+ d->doc->setPaper( new TQBrush( *paper ) );
+ TQColorGroup g = cg;
+ if ( d->doc->paper() )
+ g.setBrush( TQColorGroup::Base, *d->doc->paper() );
+
+ if ( !clipRect.isNull() )
+ p->setClipRect( clipRect, TQPainter::CoordPainter );
+ p->translate( x, y );
+ d->doc->draw( p, r, g, paper );
+ p->translate( -x, -y );
+ p->restore();
+}
+
+
+/*! \fn void TQSimpleRichText::draw( TQPainter *p, int x, int y, const TQRegion& clipRegion,
+ const TQColorGroup& cg, const TQBrush* paper ) const
+
+ \obsolete
+
+ Use the version with clipRect instead. The region version has
+ problems with larger documents on some platforms (on X11 regions
+ internally are represented with 16bit coordinates).
+*/
+
+
+
+/*!
+ Returns the context of the rich text object. If no context has
+ been specified in the constructor, a null string is returned. The
+ context is the path to use to look up relative links, such as
+ image tags and anchor references.
+*/
+
+TQString TQSimpleRichText::context() const
+{
+ return d->doc->context();
+}
+
+/*!
+ Returns the anchor at the requested position, \a pos. An empty
+ string is returned if no anchor is specified for this position.
+*/
+
+TQString TQSimpleRichText::anchorAt( const TQPoint& pos ) const
+{
+ if ( d->cachedWidth < 0 )
+ d->adjustSize();
+ TQTextCursor c( d->doc );
+ c.place( pos, d->doc->firstParagraph(), TRUE );
+ return c.paragraph()->at( c.index() )->anchorHref();
+}
+
+/*!
+ Returns TRUE if \a pos is within a text line of the rich text
+ object; otherwise returns FALSE.
+*/
+
+bool TQSimpleRichText::inText( const TQPoint& pos ) const
+{
+ if ( d->cachedWidth < 0 )
+ d->adjustSize();
+ if ( pos.y() > d->doc->height() )
+ return FALSE;
+ TQTextCursor c( d->doc );
+ c.place( pos, d->doc->firstParagraph() );
+ return c.totalOffsetX() + c.paragraph()->at( c.index() )->x +
+ c.paragraph()->at( c.index() )->format()->width( c.paragraph()->at( c.index() )->c ) > pos.x();
+}
+
+/*!
+ Sets the default font for the rich text object to \a f
+*/
+
+void TQSimpleRichText::setDefaultFont( const TQFont &f )
+{
+ if ( d->font == f )
+ return;
+ d->font = f;
+ d->cachedWidth = -1;
+ d->cachedWidthWithPainter = FALSE;
+ d->doc->setDefaultFormat( f, TQColor() );
+ d->doc->setText( d->doc->originalText(), d->doc->context() );
+}
+
+#endif //TQT_NO_RICHTEXT
+
+#endif // USE_QT4 \ No newline at end of file