Go to the documentation of
this file.
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #ifndef QABSTRACTTEXTDOCUMENTLAYOUT_H
00043 #define QABSTRACTTEXTDOCUMENTLAYOUT_H
00044
00045 #include <QtCore/qobject.h>
00046 #include <QtGui/qtextlayout.h>
00047 #include <QtGui/qtextdocument.h>
00048 #include <QtGui/qtextcursor.h>
00049 #include <QtGui/qpalette.h>
00050
00051 QT_BEGIN_HEADER
00052
00053 QT_BEGIN_NAMESPACE
00054
00055 QT_MODULE(Gui)
00056
00057 class QAbstractTextDocumentLayoutPrivate;
00058 class QTextBlock;
00059 class QTextObjectInterface;
00060 class QTextFrame;
00061
00062 class Q_GUI_EXPORT QAbstractTextDocumentLayout : public QObject
00063 {
00064 Q_OBJECT
00065 Q_DECLARE_PRIVATE(QAbstractTextDocumentLayout)
00066
00067 public:
00068 explicit QAbstractTextDocumentLayout(QTextDocument *doc);
00069 ~QAbstractTextDocumentLayout();
00070
00071 struct Selection
00072 {
00073 QTextCursor cursor;
00074 QTextCharFormat format;
00075 };
00076
00077 struct PaintContext
00078 {
00079 PaintContext()
00080 : cursorPosition(-1)
00081 {}
00082 int cursorPosition;
00083 QPalette palette;
00084 QRectF clip;
00085 QVector<Selection> selections;
00086 };
00087
00088 virtual void draw(QPainter *painter, const PaintContext &context) = 0;
00089 virtual int hitTest(const QPointF &point, Qt::HitTestAccuracy accuracy) const = 0;
00090 QString anchorAt(const QPointF& pos) const;
00091
00092 virtual int pageCount() const = 0;
00093 virtual QSizeF documentSize() const = 0;
00094
00095 virtual QRectF frameBoundingRect(QTextFrame *frame) const = 0;
00096 virtual QRectF blockBoundingRect(const QTextBlock &block) const = 0;
00097
00098 void setPaintDevice(QPaintDevice *device);
00099 QPaintDevice *paintDevice() const;
00100
00101 QTextDocument *document() const;
00102
00103 void registerHandler(int objectType, QObject *component);
00104 QTextObjectInterface *handlerForObject(int objectType) const;
00105
00106 Q_SIGNALS:
00107 void update(const QRectF & = QRectF(0., 0., 1000000000., 1000000000.));
00108 void updateBlock(const QTextBlock &block);
00109 void documentSizeChanged(const QSizeF &newSize);
00110 void pageCountChanged(int newPages);
00111
00112 protected:
00113 QAbstractTextDocumentLayout(QAbstractTextDocumentLayoutPrivate &, QTextDocument *);
00114
00115 virtual void documentChanged(int from, int charsRemoved, int charsAdded) = 0;
00116
00117 virtual void resizeInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format);
00118 virtual void positionInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format);
00119 virtual void drawInlineObject(QPainter *painter, const QRectF &rect, QTextInlineObject object, int posInDocument, const QTextFormat &format);
00120
00121 int formatIndex(int pos);
00122 QTextCharFormat format(int pos);
00123
00124 private:
00125 friend class QTextControl;
00126 friend class QTextDocument;
00127 friend class QTextDocumentPrivate;
00128 friend class QTextEngine;
00129 friend class QTextLayout;
00130 friend class QTextLine;
00131 Q_PRIVATE_SLOT(d_func(), void _q_handlerDestroyed(QObject *obj))
00132 Q_PRIVATE_SLOT(d_func(), int _q_dynamicPageCountSlot())
00133 Q_PRIVATE_SLOT(d_func(), QSizeF _q_dynamicDocumentSizeSlot())
00134 };
00135
00136 class Q_GUI_EXPORT QTextObjectInterface
00137 {
00138 public:
00139 virtual ~QTextObjectInterface() {}
00140 virtual QSizeF intrinsicSize(QTextDocument *doc, int posInDocument, const QTextFormat &format) = 0;
00141 virtual void drawObject(QPainter *painter, const QRectF &rect, QTextDocument *doc, int posInDocument, const QTextFormat &format) = 0;
00142 };
00143
00144 Q_DECLARE_INTERFACE(QTextObjectInterface, "com.trolltech.Qt.QTextObjectInterface")
00145
00146 QT_END_NAMESPACE
00147
00148 QT_END_HEADER
00149
00150 #endif // QABSTRACTTEXTDOCUMENTLAYOUT_H