1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of the QtGui module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://www.qt.io/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 3 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL3 included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 3 requirements
23 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24 **
25 ** GNU General Public License Usage
26 ** Alternatively, this file may be used under the terms of the GNU
27 ** General Public License version 2.0 or (at your option) the GNU General
28 ** Public license version 3 or any later version approved by the KDE Free
29 ** Qt Foundation. The licenses are as published by the Free Software
30 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31 ** included in the packaging of this file. Please review the following
32 ** information to ensure the GNU General Public License requirements will
33 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34 ** https://www.gnu.org/licenses/gpl-3.0.html.
35 **
36 ** $QT_END_LICENSE$
37 **
38 ****************************************************************************/
39
40 #ifndef QTEXTFORMAT_H
41 #define QTEXTFORMAT_H
42
43 #include <QtGui/qtguiglobal.h>
44 #include <QtGui/qcolor.h>
45 #include <QtGui/qfont.h>
46 #include <QtCore/qshareddata.h>
47 #include <QtCore/qvector.h>
48 #include <QtCore/qvariant.h>
49 #include <QtGui/qpen.h>
50 #include <QtGui/qbrush.h>
51 #include <QtGui/qtextoption.h>
52
53 QT_BEGIN_NAMESPACE
54
55
56 class QString;
57 class QVariant;
58 class QFont;
59
60 class QTextFormatCollection;
61 class QTextFormatPrivate;
62 class QTextBlockFormat;
63 class QTextCharFormat;
64 class QTextListFormat;
65 class QTextTableFormat;
66 class QTextFrameFormat;
67 class QTextImageFormat;
68 class QTextTableCellFormat;
69 class QTextFormat;
70 class QTextObject;
71 class QTextCursor;
72 class QTextDocument;
73 class QTextLength;
74
75 #ifndef QT_NO_DATASTREAM
76 Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QTextLength &);
77 Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QTextLength &);
78 #endif
79
80 #ifndef QT_NO_DEBUG_STREAM
81 Q_GUI_EXPORT QDebug operator<<(QDebug, const QTextLength &);
82 #endif
83
84 class Q_GUI_EXPORT QTextLength
85 {
86 public:
87 enum Type { VariableLength = 0, FixedLength, PercentageLength };
88
QTextLength()89 inline QTextLength() : lengthType(VariableLength), fixedValueOrPercentage(0) {}
90
91 inline explicit QTextLength(Type type, qreal value);
92
type()93 inline Type type() const { return lengthType; }
value(qreal maximumLength)94 inline qreal value(qreal maximumLength) const
95 {
96 switch (lengthType) {
97 case FixedLength: return fixedValueOrPercentage;
98 case VariableLength: return maximumLength;
99 case PercentageLength: return fixedValueOrPercentage * maximumLength / qreal(100);
100 }
101 return -1;
102 }
103
rawValue()104 inline qreal rawValue() const { return fixedValueOrPercentage; }
105
106 inline bool operator==(const QTextLength &other) const
107 { return lengthType == other.lengthType
108 && qFuzzyCompare(fixedValueOrPercentage, other.fixedValueOrPercentage); }
109 inline bool operator!=(const QTextLength &other) const
110 { return lengthType != other.lengthType
111 || !qFuzzyCompare(fixedValueOrPercentage, other.fixedValueOrPercentage); }
112 operator QVariant() const;
113
114 private:
115 Type lengthType;
116 qreal fixedValueOrPercentage;
117 friend Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QTextLength &);
118 friend Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QTextLength &);
119 };
120 Q_DECLARE_TYPEINFO(QTextLength, QT_VERSION >= QT_VERSION_CHECK(6,0,0) ? Q_PRIMITIVE_TYPE : Q_RELOCATABLE_TYPE);
121
QTextLength(Type atype,qreal avalue)122 inline QTextLength::QTextLength(Type atype, qreal avalue)
123 : lengthType(atype), fixedValueOrPercentage(avalue) {}
124
125 #ifndef QT_NO_DATASTREAM
126 Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QTextFormat &);
127 Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QTextFormat &);
128 #endif
129
130 #ifndef QT_NO_DEBUG_STREAM
131 Q_GUI_EXPORT QDebug operator<<(QDebug, const QTextFormat &);
132 #endif
133
134 class Q_GUI_EXPORT QTextFormat
135 {
136 Q_GADGET
137 public:
138 enum FormatType {
139 InvalidFormat = -1,
140 BlockFormat = 1,
141 CharFormat = 2,
142 ListFormat = 3,
143 #if QT_DEPRECATED_SINCE(5, 3)
144 TableFormat = 4,
145 #endif
146 FrameFormat = 5,
147
148 UserFormat = 100
149 };
150 Q_ENUM(FormatType)
151
152 enum Property {
153 ObjectIndex = 0x0,
154
155 // paragraph and char
156 CssFloat = 0x0800,
157 LayoutDirection = 0x0801,
158
159 OutlinePen = 0x810,
160 BackgroundBrush = 0x820,
161 ForegroundBrush = 0x821,
162 // Internal to qtextlayout.cpp: ObjectSelectionBrush = 0x822
163 BackgroundImageUrl = 0x823,
164
165 // paragraph
166 BlockAlignment = 0x1010,
167 BlockTopMargin = 0x1030,
168 BlockBottomMargin = 0x1031,
169 BlockLeftMargin = 0x1032,
170 BlockRightMargin = 0x1033,
171 TextIndent = 0x1034,
172 TabPositions = 0x1035,
173 BlockIndent = 0x1040,
174 LineHeight = 0x1048,
175 LineHeightType = 0x1049,
176 BlockNonBreakableLines = 0x1050,
177 BlockTrailingHorizontalRulerWidth = 0x1060,
178 HeadingLevel = 0x1070,
179 BlockQuoteLevel = 0x1080,
180 BlockCodeLanguage = 0x1090,
181 BlockCodeFence = 0x1091,
182 BlockMarker = 0x10A0,
183
184 // character properties
185 FirstFontProperty = 0x1FE0,
186 FontCapitalization = FirstFontProperty,
187 FontLetterSpacingType = 0x2033,
188 FontLetterSpacing = 0x1FE1,
189 FontWordSpacing = 0x1FE2,
190 FontStretch = 0x2034,
191 FontStyleHint = 0x1FE3,
192 FontStyleStrategy = 0x1FE4,
193 FontKerning = 0x1FE5,
194 FontHintingPreference = 0x1FE6,
195 FontFamilies = 0x1FE7,
196 FontStyleName = 0x1FE8,
197 FontFamily = 0x2000,
198 FontPointSize = 0x2001,
199 FontSizeAdjustment = 0x2002,
200 FontSizeIncrement = FontSizeAdjustment, // old name, compat
201 FontWeight = 0x2003,
202 FontItalic = 0x2004,
203 FontUnderline = 0x2005, // deprecated, use TextUnderlineStyle instead
204 FontOverline = 0x2006,
205 FontStrikeOut = 0x2007,
206 FontFixedPitch = 0x2008,
207 FontPixelSize = 0x2009,
208 LastFontProperty = FontPixelSize,
209
210 TextUnderlineColor = 0x2010,
211 TextVerticalAlignment = 0x2021,
212 TextOutline = 0x2022,
213 TextUnderlineStyle = 0x2023,
214 TextToolTip = 0x2024,
215
216 IsAnchor = 0x2030,
217 AnchorHref = 0x2031,
218 AnchorName = 0x2032,
219 ObjectType = 0x2f00,
220
221 // list properties
222 ListStyle = 0x3000,
223 ListIndent = 0x3001,
224 ListNumberPrefix = 0x3002,
225 ListNumberSuffix = 0x3003,
226
227 // table and frame properties
228 FrameBorder = 0x4000,
229 FrameMargin = 0x4001,
230 FramePadding = 0x4002,
231 FrameWidth = 0x4003,
232 FrameHeight = 0x4004,
233 FrameTopMargin = 0x4005,
234 FrameBottomMargin = 0x4006,
235 FrameLeftMargin = 0x4007,
236 FrameRightMargin = 0x4008,
237 FrameBorderBrush = 0x4009,
238 FrameBorderStyle = 0x4010,
239
240 TableColumns = 0x4100,
241 TableColumnWidthConstraints = 0x4101,
242 TableCellSpacing = 0x4102,
243 TableCellPadding = 0x4103,
244 TableHeaderRowCount = 0x4104,
245 TableBorderCollapse = 0x4105,
246
247 // table cell properties
248 TableCellRowSpan = 0x4810,
249 TableCellColumnSpan = 0x4811,
250
251 TableCellTopPadding = 0x4812,
252 TableCellBottomPadding = 0x4813,
253 TableCellLeftPadding = 0x4814,
254 TableCellRightPadding = 0x4815,
255
256 TableCellTopBorder = 0x4816,
257 TableCellBottomBorder = 0x4817,
258 TableCellLeftBorder = 0x4818,
259 TableCellRightBorder = 0x4819,
260
261 TableCellTopBorderStyle = 0x481a,
262 TableCellBottomBorderStyle = 0x481b,
263 TableCellLeftBorderStyle = 0x481c,
264 TableCellRightBorderStyle = 0x481d,
265
266 TableCellTopBorderBrush = 0x481e,
267 TableCellBottomBorderBrush = 0x481f,
268 TableCellLeftBorderBrush = 0x4820,
269 TableCellRightBorderBrush = 0x4821,
270
271 // image properties
272 ImageName = 0x5000,
273 ImageTitle = 0x5001,
274 ImageAltText = 0x5002,
275 ImageWidth = 0x5010,
276 ImageHeight = 0x5011,
277 ImageQuality = 0x5014,
278
279 // internal
280 /*
281 SuppressText = 0x5012,
282 SuppressBackground = 0x513
283 */
284
285 // selection properties
286 FullWidthSelection = 0x06000,
287
288 // page break properties
289 PageBreakPolicy = 0x7000,
290
291 // --
292 UserProperty = 0x100000
293 };
294 Q_ENUM(Property)
295
296 enum ObjectTypes {
297 NoObject,
298 ImageObject,
299 TableObject,
300 TableCellObject,
301
302 UserObject = 0x1000
303 };
304 Q_ENUM(ObjectTypes)
305
306 enum PageBreakFlag {
307 PageBreak_Auto = 0,
308 PageBreak_AlwaysBefore = 0x001,
309 PageBreak_AlwaysAfter = 0x010
310 // PageBreak_AlwaysInside = 0x100
311 };
312 Q_DECLARE_FLAGS(PageBreakFlags, PageBreakFlag)
313
314 QTextFormat();
315
316 explicit QTextFormat(int type);
317
318 QTextFormat(const QTextFormat &rhs);
319 QTextFormat &operator=(const QTextFormat &rhs);
320 ~QTextFormat();
321
swap(QTextFormat & other)322 void swap(QTextFormat &other)
323 { qSwap(d, other.d); qSwap(format_type, other.format_type); }
324
325 void merge(const QTextFormat &other);
326
isValid()327 inline bool isValid() const { return type() != InvalidFormat; }
isEmpty()328 inline bool isEmpty() const { return propertyCount() == 0; }
329
330 int type() const;
331
332 int objectIndex() const;
333 void setObjectIndex(int object);
334
335 QVariant property(int propertyId) const;
336 void setProperty(int propertyId, const QVariant &value);
337 void clearProperty(int propertyId);
338 bool hasProperty(int propertyId) const;
339
340 bool boolProperty(int propertyId) const;
341 int intProperty(int propertyId) const;
342 qreal doubleProperty(int propertyId) const;
343 QString stringProperty(int propertyId) const;
344 QColor colorProperty(int propertyId) const;
345 QPen penProperty(int propertyId) const;
346 QBrush brushProperty(int propertyId) const;
347 QTextLength lengthProperty(int propertyId) const;
348 QVector<QTextLength> lengthVectorProperty(int propertyId) const;
349
350 void setProperty(int propertyId, const QVector<QTextLength> &lengths);
351
352 QMap<int, QVariant> properties() const;
353 int propertyCount() const;
354
355 inline void setObjectType(int type);
objectType()356 inline int objectType() const
357 { return intProperty(ObjectType); }
358
isCharFormat()359 inline bool isCharFormat() const { return type() == CharFormat; }
isBlockFormat()360 inline bool isBlockFormat() const { return type() == BlockFormat; }
isListFormat()361 inline bool isListFormat() const { return type() == ListFormat; }
isFrameFormat()362 inline bool isFrameFormat() const { return type() == FrameFormat; }
isImageFormat()363 inline bool isImageFormat() const { return type() == CharFormat && objectType() == ImageObject; }
isTableFormat()364 inline bool isTableFormat() const { return type() == FrameFormat && objectType() == TableObject; }
isTableCellFormat()365 inline bool isTableCellFormat() const { return type() == CharFormat && objectType() == TableCellObject; }
366
367 QTextBlockFormat toBlockFormat() const;
368 QTextCharFormat toCharFormat() const;
369 QTextListFormat toListFormat() const;
370 QTextTableFormat toTableFormat() const;
371 QTextFrameFormat toFrameFormat() const;
372 QTextImageFormat toImageFormat() const;
373 QTextTableCellFormat toTableCellFormat() const;
374
375 bool operator==(const QTextFormat &rhs) const;
376 inline bool operator!=(const QTextFormat &rhs) const { return !operator==(rhs); }
377 operator QVariant() const;
378
setLayoutDirection(Qt::LayoutDirection direction)379 inline void setLayoutDirection(Qt::LayoutDirection direction)
380 { setProperty(QTextFormat::LayoutDirection, direction); }
layoutDirection()381 inline Qt::LayoutDirection layoutDirection() const
382 { return Qt::LayoutDirection(intProperty(QTextFormat::LayoutDirection)); }
383
setBackground(const QBrush & brush)384 inline void setBackground(const QBrush &brush)
385 { setProperty(BackgroundBrush, brush); }
background()386 inline QBrush background() const
387 { return brushProperty(BackgroundBrush); }
clearBackground()388 inline void clearBackground()
389 { clearProperty(BackgroundBrush); }
390
setForeground(const QBrush & brush)391 inline void setForeground(const QBrush &brush)
392 { setProperty(ForegroundBrush, brush); }
foreground()393 inline QBrush foreground() const
394 { return brushProperty(ForegroundBrush); }
clearForeground()395 inline void clearForeground()
396 { clearProperty(ForegroundBrush); }
397
398 private:
399 QSharedDataPointer<QTextFormatPrivate> d;
400 qint32 format_type;
401
402 friend class QTextFormatCollection;
403 friend class QTextCharFormat;
404 friend Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QTextFormat &);
405 friend Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QTextFormat &);
406 };
407
Q_DECLARE_SHARED(QTextFormat)408 Q_DECLARE_SHARED(QTextFormat)
409
410 inline void QTextFormat::setObjectType(int atype)
411 { setProperty(ObjectType, atype); }
412
Q_DECLARE_OPERATORS_FOR_FLAGS(QTextFormat::PageBreakFlags)413 Q_DECLARE_OPERATORS_FOR_FLAGS(QTextFormat::PageBreakFlags)
414
415 class Q_GUI_EXPORT QTextCharFormat : public QTextFormat
416 {
417 public:
418 enum VerticalAlignment {
419 AlignNormal = 0,
420 AlignSuperScript,
421 AlignSubScript,
422 AlignMiddle,
423 AlignTop,
424 AlignBottom,
425 AlignBaseline
426 };
427 enum UnderlineStyle { // keep in sync with Qt::PenStyle!
428 NoUnderline,
429 SingleUnderline,
430 DashUnderline,
431 DotLine,
432 DashDotLine,
433 DashDotDotLine,
434 WaveUnderline,
435 SpellCheckUnderline
436 };
437
438 QTextCharFormat();
439
440 bool isValid() const { return isCharFormat(); }
441
442 enum FontPropertiesInheritanceBehavior {
443 FontPropertiesSpecifiedOnly,
444 FontPropertiesAll
445 };
446 void setFont(const QFont &font, FontPropertiesInheritanceBehavior behavior);
447 void setFont(const QFont &font); // ### Qt6: Merge with above
448 QFont font() const;
449
450 inline void setFontFamily(const QString &family)
451 { setProperty(FontFamily, family); }
452 inline QString fontFamily() const
453 { return stringProperty(FontFamily); }
454
455 inline void setFontFamilies(const QStringList &families)
456 { setProperty(FontFamilies, QVariant(families)); }
457 inline QVariant fontFamilies() const
458 { return property(FontFamilies); }
459
460 inline void setFontStyleName(const QString &styleName)
461 { setProperty(FontStyleName, styleName); }
462 inline QVariant fontStyleName() const
463 { return property(FontStyleName); }
464
465 inline void setFontPointSize(qreal size)
466 { setProperty(FontPointSize, size); }
467 inline qreal fontPointSize() const
468 { return doubleProperty(FontPointSize); }
469
470 inline void setFontWeight(int weight)
471 { setProperty(FontWeight, weight); }
472 inline int fontWeight() const
473 { return hasProperty(FontWeight) ? intProperty(FontWeight) : QFont::Normal; }
474 inline void setFontItalic(bool italic)
475 { setProperty(FontItalic, italic); }
476 inline bool fontItalic() const
477 { return boolProperty(FontItalic); }
478 inline void setFontCapitalization(QFont::Capitalization capitalization)
479 { setProperty(FontCapitalization, capitalization); }
480 inline QFont::Capitalization fontCapitalization() const
481 { return static_cast<QFont::Capitalization>(intProperty(FontCapitalization)); }
482 inline void setFontLetterSpacingType(QFont::SpacingType letterSpacingType)
483 { setProperty(FontLetterSpacingType, letterSpacingType); }
484 inline QFont::SpacingType fontLetterSpacingType() const
485 { return static_cast<QFont::SpacingType>(intProperty(FontLetterSpacingType)); }
486 inline void setFontLetterSpacing(qreal spacing)
487 { setProperty(FontLetterSpacing, spacing); }
488 inline qreal fontLetterSpacing() const
489 { return doubleProperty(FontLetterSpacing); }
490 inline void setFontWordSpacing(qreal spacing)
491 { setProperty(FontWordSpacing, spacing); }
492 inline qreal fontWordSpacing() const
493 { return doubleProperty(FontWordSpacing); }
494
495 inline void setFontUnderline(bool underline)
496 { setProperty(TextUnderlineStyle, underline ? SingleUnderline : NoUnderline); }
497 bool fontUnderline() const;
498
499 inline void setFontOverline(bool overline)
500 { setProperty(FontOverline, overline); }
501 inline bool fontOverline() const
502 { return boolProperty(FontOverline); }
503
504 inline void setFontStrikeOut(bool strikeOut)
505 { setProperty(FontStrikeOut, strikeOut); }
506 inline bool fontStrikeOut() const
507 { return boolProperty(FontStrikeOut); }
508
509 inline void setUnderlineColor(const QColor &color)
510 { setProperty(TextUnderlineColor, color); }
511 inline QColor underlineColor() const
512 { return colorProperty(TextUnderlineColor); }
513
514 inline void setFontFixedPitch(bool fixedPitch)
515 { setProperty(FontFixedPitch, fixedPitch); }
516 inline bool fontFixedPitch() const
517 { return boolProperty(FontFixedPitch); }
518
519 inline void setFontStretch(int factor)
520 { setProperty(FontStretch, factor); }
521 inline int fontStretch() const
522 { return intProperty(FontStretch); }
523
524 inline void setFontStyleHint(QFont::StyleHint hint, QFont::StyleStrategy strategy = QFont::PreferDefault)
525 { setProperty(FontStyleHint, hint); setProperty(FontStyleStrategy, strategy); }
526 inline void setFontStyleStrategy(QFont::StyleStrategy strategy)
527 { setProperty(FontStyleStrategy, strategy); }
528 QFont::StyleHint fontStyleHint() const
529 { return static_cast<QFont::StyleHint>(intProperty(FontStyleHint)); }
530 QFont::StyleStrategy fontStyleStrategy() const
531 { return static_cast<QFont::StyleStrategy>(intProperty(FontStyleStrategy)); }
532
533 inline void setFontHintingPreference(QFont::HintingPreference hintingPreference)
534 {
535 setProperty(FontHintingPreference, hintingPreference);
536 }
537
538 inline QFont::HintingPreference fontHintingPreference() const
539 {
540 return static_cast<QFont::HintingPreference>(intProperty(FontHintingPreference));
541 }
542
543 inline void setFontKerning(bool enable)
544 { setProperty(FontKerning, enable); }
545 inline bool fontKerning() const
546 { return boolProperty(FontKerning); }
547
548 void setUnderlineStyle(UnderlineStyle style);
549 inline UnderlineStyle underlineStyle() const
550 { return static_cast<UnderlineStyle>(intProperty(TextUnderlineStyle)); }
551
552 inline void setVerticalAlignment(VerticalAlignment alignment)
553 { setProperty(TextVerticalAlignment, alignment); }
554 inline VerticalAlignment verticalAlignment() const
555 { return static_cast<VerticalAlignment>(intProperty(TextVerticalAlignment)); }
556
557 inline void setTextOutline(const QPen &pen)
558 { setProperty(TextOutline, pen); }
559 inline QPen textOutline() const
560 { return penProperty(TextOutline); }
561
562 inline void setToolTip(const QString &tip)
563 { setProperty(TextToolTip, tip); }
564 inline QString toolTip() const
565 { return stringProperty(TextToolTip); }
566
567 inline void setAnchor(bool anchor)
568 { setProperty(IsAnchor, anchor); }
569 inline bool isAnchor() const
570 { return boolProperty(IsAnchor); }
571
572 inline void setAnchorHref(const QString &value)
573 { setProperty(AnchorHref, value); }
574 inline QString anchorHref() const
575 { return stringProperty(AnchorHref); }
576
577 #if QT_DEPRECATED_SINCE(5, 13)
578 QT_DEPRECATED_X("Use setAnchorNames() instead")
579 inline void setAnchorName(const QString &name)
580 { setAnchorNames(QStringList(name)); }
581 QT_DEPRECATED_X("Use anchorNames() instead")
582 QString anchorName() const;
583 #endif
584
585 inline void setAnchorNames(const QStringList &names)
586 { setProperty(AnchorName, names); }
587 QStringList anchorNames() const;
588
589 inline void setTableCellRowSpan(int tableCellRowSpan);
590 inline int tableCellRowSpan() const
591 { int s = intProperty(TableCellRowSpan); if (s == 0) s = 1; return s; }
592 inline void setTableCellColumnSpan(int tableCellColumnSpan);
593 inline int tableCellColumnSpan() const
594 { int s = intProperty(TableCellColumnSpan); if (s == 0) s = 1; return s; }
595
596 protected:
597 explicit QTextCharFormat(const QTextFormat &fmt);
598 friend class QTextFormat;
599 };
600
Q_DECLARE_SHARED(QTextCharFormat)601 Q_DECLARE_SHARED(QTextCharFormat)
602
603 inline void QTextCharFormat::setTableCellRowSpan(int _tableCellRowSpan)
604 {
605 if (_tableCellRowSpan <= 1)
606 clearProperty(TableCellRowSpan); // the getter will return 1 here.
607 else
608 setProperty(TableCellRowSpan, _tableCellRowSpan);
609 }
610
setTableCellColumnSpan(int _tableCellColumnSpan)611 inline void QTextCharFormat::setTableCellColumnSpan(int _tableCellColumnSpan)
612 {
613 if (_tableCellColumnSpan <= 1)
614 clearProperty(TableCellColumnSpan); // the getter will return 1 here.
615 else
616 setProperty(TableCellColumnSpan, _tableCellColumnSpan);
617 }
618
619 class Q_GUI_EXPORT QTextBlockFormat : public QTextFormat
620 {
621 public:
622 enum LineHeightTypes {
623 SingleHeight = 0,
624 ProportionalHeight = 1,
625 FixedHeight = 2,
626 MinimumHeight = 3,
627 LineDistanceHeight = 4
628 };
629
630 enum class MarkerType {
631 NoMarker = 0,
632 Unchecked = 1,
633 Checked = 2
634 };
635
636 QTextBlockFormat();
637
isValid()638 bool isValid() const { return isBlockFormat(); }
639
640 inline void setAlignment(Qt::Alignment alignment);
alignment()641 inline Qt::Alignment alignment() const
642 { int a = intProperty(BlockAlignment); if (a == 0) a = Qt::AlignLeft; return QFlag(a); }
643
setTopMargin(qreal margin)644 inline void setTopMargin(qreal margin)
645 { setProperty(BlockTopMargin, margin); }
topMargin()646 inline qreal topMargin() const
647 { return doubleProperty(BlockTopMargin); }
648
setBottomMargin(qreal margin)649 inline void setBottomMargin(qreal margin)
650 { setProperty(BlockBottomMargin, margin); }
bottomMargin()651 inline qreal bottomMargin() const
652 { return doubleProperty(BlockBottomMargin); }
653
setLeftMargin(qreal margin)654 inline void setLeftMargin(qreal margin)
655 { setProperty(BlockLeftMargin, margin); }
leftMargin()656 inline qreal leftMargin() const
657 { return doubleProperty(BlockLeftMargin); }
658
setRightMargin(qreal margin)659 inline void setRightMargin(qreal margin)
660 { setProperty(BlockRightMargin, margin); }
rightMargin()661 inline qreal rightMargin() const
662 { return doubleProperty(BlockRightMargin); }
663
setTextIndent(qreal aindent)664 inline void setTextIndent(qreal aindent)
665 { setProperty(TextIndent, aindent); }
textIndent()666 inline qreal textIndent() const
667 { return doubleProperty(TextIndent); }
668
669 inline void setIndent(int indent);
indent()670 inline int indent() const
671 { return intProperty(BlockIndent); }
672
setHeadingLevel(int alevel)673 inline void setHeadingLevel(int alevel)
674 { setProperty(HeadingLevel, alevel); }
headingLevel()675 inline int headingLevel() const
676 { return intProperty(HeadingLevel); }
677
setLineHeight(qreal height,int heightType)678 inline void setLineHeight(qreal height, int heightType)
679 { setProperty(LineHeight, height); setProperty(LineHeightType, heightType); }
680 inline qreal lineHeight(qreal scriptLineHeight, qreal scaling) const;
lineHeight()681 inline qreal lineHeight() const
682 { return doubleProperty(LineHeight); }
lineHeightType()683 inline int lineHeightType() const
684 { return intProperty(LineHeightType); }
685
setNonBreakableLines(bool b)686 inline void setNonBreakableLines(bool b)
687 { setProperty(BlockNonBreakableLines, b); }
nonBreakableLines()688 inline bool nonBreakableLines() const
689 { return boolProperty(BlockNonBreakableLines); }
690
setPageBreakPolicy(PageBreakFlags flags)691 inline void setPageBreakPolicy(PageBreakFlags flags)
692 { setProperty(PageBreakPolicy, int(flags)); }
pageBreakPolicy()693 inline PageBreakFlags pageBreakPolicy() const
694 { return PageBreakFlags(intProperty(PageBreakPolicy)); }
695
696 void setTabPositions(const QList<QTextOption::Tab> &tabs);
697 QList<QTextOption::Tab> tabPositions() const;
698
setMarker(MarkerType marker)699 inline void setMarker(MarkerType marker)
700 { setProperty(BlockMarker, int(marker)); }
marker()701 inline MarkerType marker() const
702 { return MarkerType(intProperty(BlockMarker)); }
703
704 protected:
705 explicit QTextBlockFormat(const QTextFormat &fmt);
706 friend class QTextFormat;
707 };
708
Q_DECLARE_SHARED(QTextBlockFormat)709 Q_DECLARE_SHARED(QTextBlockFormat)
710
711 inline void QTextBlockFormat::setAlignment(Qt::Alignment aalignment)
712 { setProperty(BlockAlignment, int(aalignment)); }
713
setIndent(int aindent)714 inline void QTextBlockFormat::setIndent(int aindent)
715 { setProperty(BlockIndent, aindent); }
716
717 inline qreal QTextBlockFormat::lineHeight(qreal scriptLineHeight, qreal scaling = 1.0) const
718 {
719 switch(intProperty(LineHeightType)) {
720 case SingleHeight:
721 return(scriptLineHeight);
722 case ProportionalHeight:
723 return(scriptLineHeight * doubleProperty(LineHeight) / 100.0);
724 case FixedHeight:
725 return(doubleProperty(LineHeight) * scaling);
726 case MinimumHeight:
727 return(qMax(scriptLineHeight, doubleProperty(LineHeight) * scaling));
728 case LineDistanceHeight:
729 return(scriptLineHeight + doubleProperty(LineHeight) * scaling);
730 }
731 return(0);
732 }
733
734 class Q_GUI_EXPORT QTextListFormat : public QTextFormat
735 {
736 public:
737 QTextListFormat();
738
isValid()739 bool isValid() const { return isListFormat(); }
740
741 enum Style {
742 ListDisc = -1,
743 ListCircle = -2,
744 ListSquare = -3,
745 ListDecimal = -4,
746 ListLowerAlpha = -5,
747 ListUpperAlpha = -6,
748 ListLowerRoman = -7,
749 ListUpperRoman = -8,
750 ListStyleUndefined = 0
751 };
752
753 inline void setStyle(Style style);
style()754 inline Style style() const
755 { return static_cast<Style>(intProperty(ListStyle)); }
756
757 inline void setIndent(int indent);
indent()758 inline int indent() const
759 { return intProperty(ListIndent); }
760
761 inline void setNumberPrefix(const QString &numberPrefix);
numberPrefix()762 inline QString numberPrefix() const
763 { return stringProperty(ListNumberPrefix); }
764
765 inline void setNumberSuffix(const QString &numberSuffix);
numberSuffix()766 inline QString numberSuffix() const
767 { return stringProperty(ListNumberSuffix); }
768
769 protected:
770 explicit QTextListFormat(const QTextFormat &fmt);
771 friend class QTextFormat;
772 };
773
Q_DECLARE_SHARED(QTextListFormat)774 Q_DECLARE_SHARED(QTextListFormat)
775
776 inline void QTextListFormat::setStyle(Style astyle)
777 { setProperty(ListStyle, astyle); }
778
setIndent(int aindent)779 inline void QTextListFormat::setIndent(int aindent)
780 { setProperty(ListIndent, aindent); }
781
setNumberPrefix(const QString & np)782 inline void QTextListFormat::setNumberPrefix(const QString &np)
783 { setProperty(ListNumberPrefix, np); }
784
setNumberSuffix(const QString & ns)785 inline void QTextListFormat::setNumberSuffix(const QString &ns)
786 { setProperty(ListNumberSuffix, ns); }
787
788 class Q_GUI_EXPORT QTextImageFormat : public QTextCharFormat
789 {
790 public:
791 QTextImageFormat();
792
isValid()793 bool isValid() const { return isImageFormat(); }
794
795 inline void setName(const QString &name);
name()796 inline QString name() const
797 { return stringProperty(ImageName); }
798
799 inline void setWidth(qreal width);
width()800 inline qreal width() const
801 { return doubleProperty(ImageWidth); }
802
803 inline void setHeight(qreal height);
height()804 inline qreal height() const
805 { return doubleProperty(ImageHeight); }
806
807 inline void setQuality(int quality = 100);
quality()808 inline int quality() const
809 { return intProperty(ImageQuality); }
810
811 protected:
812 explicit QTextImageFormat(const QTextFormat &format);
813 friend class QTextFormat;
814 };
815
Q_DECLARE_SHARED(QTextImageFormat)816 Q_DECLARE_SHARED(QTextImageFormat)
817
818 inline void QTextImageFormat::setName(const QString &aname)
819 { setProperty(ImageName, aname); }
820
setWidth(qreal awidth)821 inline void QTextImageFormat::setWidth(qreal awidth)
822 { setProperty(ImageWidth, awidth); }
823
setHeight(qreal aheight)824 inline void QTextImageFormat::setHeight(qreal aheight)
825 { setProperty(ImageHeight, aheight); }
826
setQuality(int aquality)827 inline void QTextImageFormat::setQuality(int aquality)
828 { setProperty(ImageQuality, aquality); }
829
830 class Q_GUI_EXPORT QTextFrameFormat : public QTextFormat
831 {
832 public:
833 QTextFrameFormat();
834
isValid()835 bool isValid() const { return isFrameFormat(); }
836
837 enum Position {
838 InFlow,
839 FloatLeft,
840 FloatRight
841 // ######
842 // Absolute
843 };
844
845 enum BorderStyle {
846 BorderStyle_None,
847 BorderStyle_Dotted,
848 BorderStyle_Dashed,
849 BorderStyle_Solid,
850 BorderStyle_Double,
851 BorderStyle_DotDash,
852 BorderStyle_DotDotDash,
853 BorderStyle_Groove,
854 BorderStyle_Ridge,
855 BorderStyle_Inset,
856 BorderStyle_Outset
857 };
858
setPosition(Position f)859 inline void setPosition(Position f)
860 { setProperty(CssFloat, f); }
position()861 inline Position position() const
862 { return static_cast<Position>(intProperty(CssFloat)); }
863
864 inline void setBorder(qreal border);
border()865 inline qreal border() const
866 { return doubleProperty(FrameBorder); }
867
setBorderBrush(const QBrush & brush)868 inline void setBorderBrush(const QBrush &brush)
869 { setProperty(FrameBorderBrush, brush); }
borderBrush()870 inline QBrush borderBrush() const
871 { return brushProperty(FrameBorderBrush); }
872
setBorderStyle(BorderStyle style)873 inline void setBorderStyle(BorderStyle style)
874 { setProperty(FrameBorderStyle, style); }
borderStyle()875 inline BorderStyle borderStyle() const
876 { return static_cast<BorderStyle>(intProperty(FrameBorderStyle)); }
877
878 void setMargin(qreal margin);
margin()879 inline qreal margin() const
880 { return doubleProperty(FrameMargin); }
881
882 inline void setTopMargin(qreal margin);
883 qreal topMargin() const;
884
885 inline void setBottomMargin(qreal margin);
886 qreal bottomMargin() const;
887
888 inline void setLeftMargin(qreal margin);
889 qreal leftMargin() const;
890
891 inline void setRightMargin(qreal margin);
892 qreal rightMargin() const;
893
894 inline void setPadding(qreal padding);
padding()895 inline qreal padding() const
896 { return doubleProperty(FramePadding); }
897
898 inline void setWidth(qreal width);
setWidth(const QTextLength & length)899 inline void setWidth(const QTextLength &length)
900 { setProperty(FrameWidth, length); }
width()901 inline QTextLength width() const
902 { return lengthProperty(FrameWidth); }
903
904 inline void setHeight(qreal height);
905 inline void setHeight(const QTextLength &height);
height()906 inline QTextLength height() const
907 { return lengthProperty(FrameHeight); }
908
setPageBreakPolicy(PageBreakFlags flags)909 inline void setPageBreakPolicy(PageBreakFlags flags)
910 { setProperty(PageBreakPolicy, int(flags)); }
pageBreakPolicy()911 inline PageBreakFlags pageBreakPolicy() const
912 { return PageBreakFlags(intProperty(PageBreakPolicy)); }
913
914 protected:
915 explicit QTextFrameFormat(const QTextFormat &fmt);
916 friend class QTextFormat;
917 };
918
Q_DECLARE_SHARED(QTextFrameFormat)919 Q_DECLARE_SHARED(QTextFrameFormat)
920
921 inline void QTextFrameFormat::setBorder(qreal aborder)
922 { setProperty(FrameBorder, aborder); }
923
setPadding(qreal apadding)924 inline void QTextFrameFormat::setPadding(qreal apadding)
925 { setProperty(FramePadding, apadding); }
926
setWidth(qreal awidth)927 inline void QTextFrameFormat::setWidth(qreal awidth)
928 { setProperty(FrameWidth, QTextLength(QTextLength::FixedLength, awidth)); }
929
setHeight(qreal aheight)930 inline void QTextFrameFormat::setHeight(qreal aheight)
931 { setProperty(FrameHeight, QTextLength(QTextLength::FixedLength, aheight)); }
setHeight(const QTextLength & aheight)932 inline void QTextFrameFormat::setHeight(const QTextLength &aheight)
933 { setProperty(FrameHeight, aheight); }
934
setTopMargin(qreal amargin)935 inline void QTextFrameFormat::setTopMargin(qreal amargin)
936 { setProperty(FrameTopMargin, amargin); }
937
setBottomMargin(qreal amargin)938 inline void QTextFrameFormat::setBottomMargin(qreal amargin)
939 { setProperty(FrameBottomMargin, amargin); }
940
setLeftMargin(qreal amargin)941 inline void QTextFrameFormat::setLeftMargin(qreal amargin)
942 { setProperty(FrameLeftMargin, amargin); }
943
setRightMargin(qreal amargin)944 inline void QTextFrameFormat::setRightMargin(qreal amargin)
945 { setProperty(FrameRightMargin, amargin); }
946
947 class Q_GUI_EXPORT QTextTableFormat : public QTextFrameFormat
948 {
949 public:
950 QTextTableFormat();
951
isValid()952 inline bool isValid() const { return isTableFormat(); }
953
columns()954 inline int columns() const
955 { int cols = intProperty(TableColumns); if (cols == 0) cols = 1; return cols; }
956 inline void setColumns(int columns);
957
setColumnWidthConstraints(const QVector<QTextLength> & constraints)958 inline void setColumnWidthConstraints(const QVector<QTextLength> &constraints)
959 { setProperty(TableColumnWidthConstraints, constraints); }
960
columnWidthConstraints()961 inline QVector<QTextLength> columnWidthConstraints() const
962 { return lengthVectorProperty(TableColumnWidthConstraints); }
963
clearColumnWidthConstraints()964 inline void clearColumnWidthConstraints()
965 { clearProperty(TableColumnWidthConstraints); }
966
cellSpacing()967 inline qreal cellSpacing() const
968 { return doubleProperty(TableCellSpacing); }
setCellSpacing(qreal spacing)969 inline void setCellSpacing(qreal spacing)
970 { setProperty(TableCellSpacing, spacing); }
971
cellPadding()972 inline qreal cellPadding() const
973 { return doubleProperty(TableCellPadding); }
974 inline void setCellPadding(qreal padding);
975
976 inline void setAlignment(Qt::Alignment alignment);
alignment()977 inline Qt::Alignment alignment() const
978 { return QFlag(intProperty(BlockAlignment)); }
979
setHeaderRowCount(int count)980 inline void setHeaderRowCount(int count)
981 { setProperty(TableHeaderRowCount, count); }
headerRowCount()982 inline int headerRowCount() const
983 { return intProperty(TableHeaderRowCount); }
984
setBorderCollapse(bool borderCollapse)985 inline void setBorderCollapse(bool borderCollapse)
986 { setProperty(TableBorderCollapse, borderCollapse); }
borderCollapse()987 inline bool borderCollapse() const
988 { return boolProperty(TableBorderCollapse); }
989
990 protected:
991 explicit QTextTableFormat(const QTextFormat &fmt);
992 friend class QTextFormat;
993 };
994
Q_DECLARE_SHARED(QTextTableFormat)995 Q_DECLARE_SHARED(QTextTableFormat)
996
997 inline void QTextTableFormat::setColumns(int acolumns)
998 {
999 if (acolumns == 1)
1000 acolumns = 0;
1001 setProperty(TableColumns, acolumns);
1002 }
1003
setCellPadding(qreal apadding)1004 inline void QTextTableFormat::setCellPadding(qreal apadding)
1005 { setProperty(TableCellPadding, apadding); }
1006
setAlignment(Qt::Alignment aalignment)1007 inline void QTextTableFormat::setAlignment(Qt::Alignment aalignment)
1008 { setProperty(BlockAlignment, int(aalignment)); }
1009
1010 class Q_GUI_EXPORT QTextTableCellFormat : public QTextCharFormat
1011 {
1012 public:
1013 QTextTableCellFormat();
1014
isValid()1015 inline bool isValid() const { return isTableCellFormat(); }
1016
1017 inline void setTopPadding(qreal padding);
1018 inline qreal topPadding() const;
1019
1020 inline void setBottomPadding(qreal padding);
1021 inline qreal bottomPadding() const;
1022
1023 inline void setLeftPadding(qreal padding);
1024 inline qreal leftPadding() const;
1025
1026 inline void setRightPadding(qreal padding);
1027 inline qreal rightPadding() const;
1028
1029 inline void setPadding(qreal padding);
1030
setTopBorder(qreal width)1031 inline void setTopBorder(qreal width)
1032 { setProperty(TableCellTopBorder, width); }
topBorder()1033 inline qreal topBorder() const
1034 { return doubleProperty(TableCellTopBorder); }
1035
setBottomBorder(qreal width)1036 inline void setBottomBorder(qreal width)
1037 { setProperty(TableCellBottomBorder, width); }
bottomBorder()1038 inline qreal bottomBorder() const
1039 { return doubleProperty(TableCellBottomBorder); }
1040
setLeftBorder(qreal width)1041 inline void setLeftBorder(qreal width)
1042 { setProperty(TableCellLeftBorder, width); }
leftBorder()1043 inline qreal leftBorder() const
1044 { return doubleProperty(TableCellLeftBorder); }
1045
setRightBorder(qreal width)1046 inline void setRightBorder(qreal width)
1047 { setProperty(TableCellRightBorder, width); }
rightBorder()1048 inline qreal rightBorder() const
1049 { return doubleProperty(TableCellRightBorder); }
1050
1051 inline void setBorder(qreal width);
1052
setTopBorderStyle(QTextFrameFormat::BorderStyle style)1053 inline void setTopBorderStyle(QTextFrameFormat::BorderStyle style)
1054 { setProperty(TableCellTopBorderStyle, style); }
topBorderStyle()1055 inline QTextFrameFormat::BorderStyle topBorderStyle() const
1056 { return static_cast<QTextFrameFormat::BorderStyle>(intProperty(TableCellTopBorderStyle)); }
1057
setBottomBorderStyle(QTextFrameFormat::BorderStyle style)1058 inline void setBottomBorderStyle(QTextFrameFormat::BorderStyle style)
1059 { setProperty(TableCellBottomBorderStyle, style); }
bottomBorderStyle()1060 inline QTextFrameFormat::BorderStyle bottomBorderStyle() const
1061 { return static_cast<QTextFrameFormat::BorderStyle>(intProperty(TableCellBottomBorderStyle)); }
1062
setLeftBorderStyle(QTextFrameFormat::BorderStyle style)1063 inline void setLeftBorderStyle(QTextFrameFormat::BorderStyle style)
1064 { setProperty(TableCellLeftBorderStyle, style); }
leftBorderStyle()1065 inline QTextFrameFormat::BorderStyle leftBorderStyle() const
1066 { return static_cast<QTextFrameFormat::BorderStyle>(intProperty(TableCellLeftBorderStyle)); }
1067
setRightBorderStyle(QTextFrameFormat::BorderStyle style)1068 inline void setRightBorderStyle(QTextFrameFormat::BorderStyle style)
1069 { setProperty(TableCellRightBorderStyle, style); }
rightBorderStyle()1070 inline QTextFrameFormat::BorderStyle rightBorderStyle() const
1071 { return static_cast<QTextFrameFormat::BorderStyle>(intProperty(TableCellRightBorderStyle)); }
1072
1073 inline void setBorderStyle(QTextFrameFormat::BorderStyle style);
1074
setTopBorderBrush(const QBrush & brush)1075 inline void setTopBorderBrush(const QBrush &brush)
1076 { setProperty(TableCellTopBorderBrush, brush); }
topBorderBrush()1077 inline QBrush topBorderBrush() const
1078 { return brushProperty(TableCellTopBorderBrush); }
1079
setBottomBorderBrush(const QBrush & brush)1080 inline void setBottomBorderBrush(const QBrush &brush)
1081 { setProperty(TableCellBottomBorderBrush, brush); }
bottomBorderBrush()1082 inline QBrush bottomBorderBrush() const
1083 { return brushProperty(TableCellBottomBorderBrush); }
1084
setLeftBorderBrush(const QBrush & brush)1085 inline void setLeftBorderBrush(const QBrush &brush)
1086 { setProperty(TableCellLeftBorderBrush, brush); }
leftBorderBrush()1087 inline QBrush leftBorderBrush() const
1088 { return brushProperty(TableCellLeftBorderBrush); }
1089
setRightBorderBrush(const QBrush & brush)1090 inline void setRightBorderBrush(const QBrush &brush)
1091 { setProperty(TableCellRightBorderBrush, brush); }
rightBorderBrush()1092 inline QBrush rightBorderBrush() const
1093 { return brushProperty(TableCellRightBorderBrush); }
1094
1095 inline void setBorderBrush(const QBrush &brush);
1096
1097 protected:
1098 explicit QTextTableCellFormat(const QTextFormat &fmt);
1099 friend class QTextFormat;
1100 };
1101
Q_DECLARE_SHARED(QTextTableCellFormat)1102 Q_DECLARE_SHARED(QTextTableCellFormat)
1103
1104 inline void QTextTableCellFormat::setTopPadding(qreal padding)
1105 {
1106 setProperty(TableCellTopPadding, padding);
1107 }
1108
topPadding()1109 inline qreal QTextTableCellFormat::topPadding() const
1110 {
1111 return doubleProperty(TableCellTopPadding);
1112 }
1113
setBottomPadding(qreal padding)1114 inline void QTextTableCellFormat::setBottomPadding(qreal padding)
1115 {
1116 setProperty(TableCellBottomPadding, padding);
1117 }
1118
bottomPadding()1119 inline qreal QTextTableCellFormat::bottomPadding() const
1120 {
1121 return doubleProperty(TableCellBottomPadding);
1122 }
1123
setLeftPadding(qreal padding)1124 inline void QTextTableCellFormat::setLeftPadding(qreal padding)
1125 {
1126 setProperty(TableCellLeftPadding, padding);
1127 }
1128
leftPadding()1129 inline qreal QTextTableCellFormat::leftPadding() const
1130 {
1131 return doubleProperty(TableCellLeftPadding);
1132 }
1133
setRightPadding(qreal padding)1134 inline void QTextTableCellFormat::setRightPadding(qreal padding)
1135 {
1136 setProperty(TableCellRightPadding, padding);
1137 }
1138
rightPadding()1139 inline qreal QTextTableCellFormat::rightPadding() const
1140 {
1141 return doubleProperty(TableCellRightPadding);
1142 }
1143
setPadding(qreal padding)1144 inline void QTextTableCellFormat::setPadding(qreal padding)
1145 {
1146 setTopPadding(padding);
1147 setBottomPadding(padding);
1148 setLeftPadding(padding);
1149 setRightPadding(padding);
1150 }
1151
setBorder(qreal width)1152 inline void QTextTableCellFormat::setBorder(qreal width)
1153 {
1154 setTopBorder(width);
1155 setBottomBorder(width);
1156 setLeftBorder(width);
1157 setRightBorder(width);
1158 }
1159
setBorderStyle(QTextFrameFormat::BorderStyle style)1160 inline void QTextTableCellFormat::setBorderStyle(QTextFrameFormat::BorderStyle style)
1161 {
1162 setTopBorderStyle(style);
1163 setBottomBorderStyle(style);
1164 setLeftBorderStyle(style);
1165 setRightBorderStyle(style);
1166 }
1167
setBorderBrush(const QBrush & brush)1168 inline void QTextTableCellFormat::setBorderBrush(const QBrush &brush)
1169 {
1170 setTopBorderBrush(brush);
1171 setBottomBorderBrush(brush);
1172 setLeftBorderBrush(brush);
1173 setRightBorderBrush(brush);
1174 }
1175
1176 QT_END_NAMESPACE
1177
1178 #endif // QTEXTFORMAT_H
1179