131 Q_DECLARE_PUBLIC(QTextDocument)
133 typedef QFragmentMap<QTextFragmentData> FragmentMap;
134 typedef FragmentMap::ConstIterator FragmentIterator;
135 typedef QFragmentMap<QTextBlockData> BlockMap;
137 QTextDocumentPrivate();
138 ~QTextDocumentPrivate();
143 void setLayout(QAbstractTextDocumentLayout *layout);
145 void insert(
int pos, QStringView text,
int format);
146 void insert(
int pos, QChar c,
int format)
147 { insert(pos, QStringView(&c, 1), format); }
148 void insert(
int pos,
int strPos,
int strLength,
int format);
149 int insertBlock(
int pos,
int blockFormat,
int charFormat, QTextUndoCommand::Operation = QTextUndoCommand::MoveCursor);
150 int insertBlock(QChar blockSeparator,
int pos,
int blockFormat,
int charFormat,
151 QTextUndoCommand::Operation op = QTextUndoCommand::MoveCursor);
153 void move(
int from,
int to,
int length, QTextUndoCommand::Operation = QTextUndoCommand::MoveCursor);
154 void remove(
int pos,
int length, QTextUndoCommand::Operation = QTextUndoCommand::MoveCursor);
156 void aboutToRemoveCell(
int cursorFrom,
int cursorEnd);
158 QTextFrame *insertFrame(
int start,
int end,
const QTextFrameFormat &format);
159 void removeFrame(QTextFrame *frame);
161 enum FormatChangeMode { MergeFormat, SetFormat, SetFormatAndPreserveObjectIndices };
163 void setCharFormat(
int pos,
int length,
const QTextCharFormat &newFormat, FormatChangeMode mode = SetFormat);
164 void setBlockFormat(
const QTextBlock &from,
const QTextBlock &to,
165 const QTextBlockFormat &newFormat, FormatChangeMode mode = SetFormat);
167 void emitUndoAvailable(
bool available);
168 void emitRedoAvailable(
bool available);
170 int undoRedo(
bool undo);
171 inline void undo() { undoRedo(
true); }
172 inline void redo() { undoRedo(
false); }
173 void appendUndoItem(QAbstractUndoItem *);
174 inline void beginEditBlock() {
if (0 == editBlock++) ++revision; }
175 void joinPreviousEditBlock();
178 inline bool isInEditBlock()
const {
return editBlock; }
179 void enableUndoRedo(
bool enable);
180 inline bool isUndoRedoEnabled()
const {
return undoEnabled; }
182 inline bool isUndoAvailable()
const {
return undoEnabled && undoState > 0; }
183 inline bool isRedoAvailable()
const {
return undoEnabled && undoState < undoStack.size(); }
185 inline int availableUndoSteps()
const {
return undoEnabled ? undoState : 0; }
186 inline int availableRedoSteps()
const {
return undoEnabled ? qMax(undoStack.size() - undoState - 1, 0) : 0; }
188 inline QString buffer()
const {
return text; }
189 QString plainText()
const;
190 inline int length()
const {
return fragments.length(); }
192 inline QTextFormatCollection *formatCollection() {
return &formats; }
193 inline const QTextFormatCollection *formatCollection()
const {
return &formats; }
194 inline QAbstractTextDocumentLayout *layout()
const {
return lout; }
196 inline FragmentIterator find(
int pos)
const {
return fragments.find(pos); }
197 inline FragmentIterator begin()
const {
return fragments.begin(); }
198 inline FragmentIterator end()
const {
return fragments.end(); }
200 inline QTextBlock blocksBegin()
const {
return QTextBlock(
const_cast<QTextDocumentPrivate *>(
this), blocks.firstNode()); }
201 inline QTextBlock blocksEnd()
const {
return QTextBlock(
const_cast<QTextDocumentPrivate *>(
this), 0); }
202 inline QTextBlock blocksFind(
int pos)
const {
return QTextBlock(
const_cast<QTextDocumentPrivate *>(
this), blocks.findNode(pos)); }
203 int blockCharFormatIndex(
int node)
const;
205 inline int numBlocks()
const {
return blocks.numNodes(); }
207 const BlockMap &blockMap()
const {
return blocks; }
208 const FragmentMap &fragmentMap()
const {
return fragments; }
209 BlockMap &blockMap() {
return blocks; }
210 FragmentMap &fragmentMap() {
return fragments; }
212 static const QTextBlockData *block(
const QTextBlock &it) {
return it.p->blocks.fragment(it.n); }
214 int nextCursorPosition(
int position, QTextLayout::CursorMode mode)
const;
215 int previousCursorPosition(
int position, QTextLayout::CursorMode mode)
const;
216 int leftCursorPosition(
int position)
const;
217 int rightCursorPosition(
int position)
const;
219 void changeObjectFormat(QTextObject *group,
int format);
221 void setModified(
bool m);
222 inline bool isModified()
const {
return modified; }
224 inline QFont defaultFont()
const {
return formats.defaultFont(); }
225 inline void setDefaultFont(
const QFont &f) { formats.setDefaultFont(f); }
227 void clearUndoRedoStacks(QTextDocument::Stacks stacksToClear,
bool emitSignals =
false);
233 void insert_string(
int pos, uint strPos, uint length,
int format, QTextUndoCommand::Operation op);
234 int insert_block(
int pos, uint strPos,
int format,
int blockformat, QTextUndoCommand::Operation op,
int command);
235 int remove_string(
int pos, uint length, QTextUndoCommand::Operation op);
236 int remove_block(
int pos,
int *blockformat,
int command, QTextUndoCommand::Operation op);
238 void insert_frame(QTextFrame *f);
239 void scan_frames(
int pos,
int charsRemoved,
int charsAdded);
240 static void clearFrame(QTextFrame *f);
242 void adjustDocumentChangesAndCursors(
int from,
int addedOrRemoved, QTextUndoCommand::Operation op);
244 bool wasUndoAvailable;
245 bool wasRedoAvailable;
248 void documentChange(
int from,
int length);
250 void addCursor(QTextCursorPrivate *c);
251 void removeCursor(QTextCursorPrivate *c);
253 QTextFrame *frameAt(
int pos)
const;
254 QTextFrame *rootFrame()
const;
256 QTextObject *objectForIndex(
int objectIndex)
const;
257 QTextObject *objectForFormat(
int formatIndex)
const;
258 QTextObject *objectForFormat(
const QTextFormat &f)
const;
260 QTextObject *createObject(
const QTextFormat &newFormat,
int objectIndex = -1);
261 void deleteObject(QTextObject *object);
263 QTextDocument *document() {
return q_func(); }
264 const QTextDocument *document()
const {
return q_func(); }
266 bool ensureMaximumBlockCount();
268 static inline const QTextDocumentPrivate *get(
const QTextDocument *document)
270 return document->d_func();
273 static inline QTextDocumentPrivate *get(QTextDocument *document)
275 return document->d_func();
278 static inline QTextDocumentPrivate *get(QTextBlock &block)
283 static inline const QTextDocumentPrivate *get(
const QTextBlock &block)
288 static inline QTextDocumentPrivate *get(QTextObject *object)
290 return get(object->document());
293 static inline const QTextDocumentPrivate *get(
const QTextObject *object)
295 return get(object->document());
298 bool canLayout()
const {
return layoutEnabled && !pageSize.isNull(); }
301 QTextDocumentPrivate(
const QTextDocumentPrivate& m);
302 QTextDocumentPrivate& operator= (
const QTextDocumentPrivate& m);
304 void appendUndoItem(
const QTextUndoCommand &c);
306 void contentsChanged();
308 void compressPieceTable();
311 uint unreachableCharacterCount;
313 QList<QTextUndoCommand> undoStack;
322 int editBlockCursorPosition;
324 int docChangeOldLength;
328 QTextFormatCollection formats;
329 mutable QTextFrame *rtFrame;
330 QAbstractTextDocumentLayout *lout;
331 FragmentMap fragments;
333 int initialBlockCharFormatIndex;
335 QSet<QTextCursorPrivate *> cursors;
336 QMap<
int, QTextObject *> objects;
337 QMap<QUrl, QVariant> resources;
338 QMap<QUrl, QVariant> cachedResources;
339 QTextDocument::ResourceProvider resourceProvider;
340 QString defaultStyleSheet;
345 bool inContentsChange;
346 bool layoutEnabled =
true;
347 QTextOption defaultTextOption;
348 Qt::CursorMoveStyle defaultCursorMoveStyle;
349#ifndef QT_NO_CSSPARSER
350 QCss::StyleSheet parsedDefaultStyleSheet;
352 int maximumBlockCount;
353 uint needsEnsureMaximumBlockCount : 1;
354 uint blockCursorAdjustment : 1;
361 qreal documentMargin;
364 void mergeCachedResources(
const QTextDocumentPrivate *priv);
366 friend struct QTextHtmlParserNode;
367 friend class QTextHtmlExporter;
368 friend class QTextCursor;
QString toHtml(ExportMode mode=ExportEntireDocument)
Returns the document in HTML format.
The QTextObjectInterface class allows drawing of custom text objects in \l{QTextDocument}...
Q_DECLARE_TYPEINFO(QTextUndoCommand, Q_PRIMITIVE_TYPE)