qtextformat.h
上传用户:detong
上传日期:2022-06-22
资源大小:20675k
文件大小:27k
源码类别:

系统编程

开发平台:

Unix_Linux

  1. /****************************************************************************
  2. **
  3. ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  4. ** Contact: Qt Software Information (qt-info@nokia.com)
  5. **
  6. ** This file is part of the QtGui module of the Qt Toolkit.
  7. **
  8. ** Commercial Usage
  9. ** Licensees holding valid Qt Commercial licenses may use this file in
  10. ** accordance with the Qt Commercial License Agreement provided with the
  11. ** Software or, alternatively, in accordance with the terms contained in
  12. ** a written agreement between you and Nokia.
  13. **
  14. **
  15. ** GNU General Public License Usage
  16. ** Alternatively, this file may be used under the terms of the GNU
  17. ** General Public License versions 2.0 or 3.0 as published by the Free
  18. ** Software Foundation and appearing in the file LICENSE.GPL included in
  19. ** the packaging of this file.  Please review the following information
  20. ** to ensure GNU General Public Licensing requirements will be met:
  21. ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
  22. ** http://www.gnu.org/copyleft/gpl.html.  In addition, as a special
  23. ** exception, Nokia gives you certain additional rights. These rights
  24. ** are described in the Nokia Qt GPL Exception version 1.3, included in
  25. ** the file GPL_EXCEPTION.txt in this package.
  26. **
  27. ** Qt for Windows(R) Licensees
  28. ** As a special exception, Nokia, as the sole copyright holder for Qt
  29. ** Designer, grants users of the Qt/Eclipse Integration plug-in the
  30. ** right for the Qt/Eclipse Integration to link to functionality
  31. ** provided by Qt Designer and its related libraries.
  32. **
  33. ** If you are unsure which license is appropriate for your use, please
  34. ** contact the sales department at qt-sales@nokia.com.
  35. **
  36. ****************************************************************************/
  37. #ifndef QTEXTFORMAT_H
  38. #define QTEXTFORMAT_H
  39. #include <QtGui/qcolor.h>
  40. #include <QtGui/qfont.h>
  41. #include <QtCore/qshareddata.h>
  42. #include <QtCore/qvector.h>
  43. #include <QtCore/qvariant.h>
  44. #include <QtGui/qpen.h>
  45. #include <QtGui/qbrush.h>
  46. #include <QtGui/qtextoption.h>
  47. QT_BEGIN_HEADER
  48. QT_BEGIN_NAMESPACE
  49. QT_MODULE(Gui)
  50. class QString;
  51. class QVariant;
  52. class QFont;
  53. class QTextFormatCollection;
  54. class QTextFormatPrivate;
  55. class QTextBlockFormat;
  56. class QTextCharFormat;
  57. class QTextListFormat;
  58. class QTextTableFormat;
  59. class QTextFrameFormat;
  60. class QTextImageFormat;
  61. class QTextTableCellFormat;
  62. class QTextFormat;
  63. class QTextObject;
  64. class QTextCursor;
  65. class QTextDocument;
  66. class QTextLength;
  67. Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QTextLength &);
  68. Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QTextLength &);
  69. class Q_GUI_EXPORT QTextLength
  70. {
  71. public:
  72.     enum Type { VariableLength = 0, FixedLength, PercentageLength };
  73.     inline QTextLength() : lengthType(VariableLength), fixedValueOrPercentage(0) {}
  74.     inline explicit QTextLength(Type type, qreal value);
  75.     inline Type type() const { return lengthType; }
  76.     inline qreal value(qreal maximumLength) const
  77.     {
  78.         switch (lengthType) {
  79.             case FixedLength: return fixedValueOrPercentage;
  80.             case VariableLength: return maximumLength;
  81.             case PercentageLength: return fixedValueOrPercentage * maximumLength / qreal(100);
  82.         }
  83.         return -1;
  84.     }
  85.     inline qreal rawValue() const { return fixedValueOrPercentage; }
  86.     inline bool operator==(const QTextLength &other) const
  87.     { return lengthType == other.lengthType
  88.              && qFuzzyCompare(fixedValueOrPercentage, other.fixedValueOrPercentage); }
  89.     inline bool operator!=(const QTextLength &other) const
  90.     { return lengthType != other.lengthType
  91.              || !qFuzzyCompare(fixedValueOrPercentage, other.fixedValueOrPercentage); }
  92.     operator QVariant() const;
  93. private:
  94.     Type lengthType;
  95.     qreal fixedValueOrPercentage;
  96.     friend Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QTextLength &);
  97.     friend Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QTextLength &);
  98. };
  99. inline QTextLength::QTextLength(Type atype, qreal avalue)
  100.     : lengthType(atype), fixedValueOrPercentage(avalue) {}
  101. Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QTextFormat &);
  102. Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QTextFormat &);
  103. class Q_GUI_EXPORT QTextFormat
  104. {
  105.     Q_GADGET
  106.     Q_ENUMS(FormatType Property ObjectTypes)
  107. public:
  108.     enum FormatType {
  109.         InvalidFormat = -1,
  110.         BlockFormat = 1,
  111.         CharFormat = 2,
  112.         ListFormat = 3,
  113.         TableFormat = 4,
  114.         FrameFormat = 5,
  115.         UserFormat = 100
  116.     };
  117.     enum Property {
  118.         ObjectIndex = 0x0,
  119.         // paragraph and char
  120.         CssFloat = 0x0800,
  121.         LayoutDirection = 0x0801,
  122.         OutlinePen = 0x810,
  123.         BackgroundBrush = 0x820,
  124.         ForegroundBrush = 0x821,
  125.         // Internal to qtextlayout.cpp: ObjectSelectionBrush = 0x822
  126.         BackgroundImageUrl = 0x823,
  127.         // paragraph
  128.         BlockAlignment = 0x1010,
  129.         BlockTopMargin = 0x1030,
  130.         BlockBottomMargin = 0x1031,
  131.         BlockLeftMargin = 0x1032,
  132.         BlockRightMargin = 0x1033,
  133.         TextIndent = 0x1034,
  134.         TabPositions = 0x1035,
  135.         BlockIndent = 0x1040,
  136.         BlockNonBreakableLines = 0x1050,
  137.         BlockTrailingHorizontalRulerWidth = 0x1060,
  138.         // character properties
  139.         FirstFontProperty = 0x1FE0,
  140.         FontCapitalization = FirstFontProperty,
  141.         FontLetterSpacing = 0x1FE1,
  142.         FontWordSpacing = 0x1FE2,
  143.         FontFamily = 0x2000,
  144.         FontPointSize = 0x2001,
  145.         FontSizeAdjustment = 0x2002,
  146.         FontSizeIncrement = FontSizeAdjustment, // old name, compat
  147.         FontWeight = 0x2003,
  148.         FontItalic = 0x2004,
  149.         FontUnderline = 0x2005, // deprecated, use TextUnderlineStyle instead
  150.         FontOverline = 0x2006,
  151.         FontStrikeOut = 0x2007,
  152.         FontFixedPitch = 0x2008,
  153.         FontPixelSize = 0x2009,
  154.         LastFontProperty = FontPixelSize,
  155.         TextUnderlineColor = 0x2010,
  156.         TextVerticalAlignment = 0x2021,
  157.         TextOutline = 0x2022,
  158.         TextUnderlineStyle = 0x2023,
  159.         TextToolTip = 0x2024,
  160.         IsAnchor = 0x2030,
  161.         AnchorHref = 0x2031,
  162.         AnchorName = 0x2032,
  163.         ObjectType = 0x2f00,
  164.         // list properties
  165.         ListStyle = 0x3000,
  166.         ListIndent = 0x3001,
  167.         // table and frame properties
  168.         FrameBorder = 0x4000,
  169.         FrameMargin = 0x4001,
  170.         FramePadding = 0x4002,
  171.         FrameWidth = 0x4003,
  172.         FrameHeight = 0x4004,
  173.         FrameTopMargin    = 0x4005,
  174.         FrameBottomMargin = 0x4006,
  175.         FrameLeftMargin   = 0x4007,
  176.         FrameRightMargin  = 0x4008,
  177.         FrameBorderBrush = 0x4009,
  178.         FrameBorderStyle = 0x4010,
  179.         TableColumns = 0x4100,
  180.         TableColumnWidthConstraints = 0x4101,
  181.         TableCellSpacing = 0x4102,
  182.         TableCellPadding = 0x4103,
  183.         TableHeaderRowCount = 0x4104,
  184.         // table cell properties
  185.         TableCellRowSpan = 0x4810,
  186.         TableCellColumnSpan = 0x4811,
  187.         TableCellTopPadding = 0x4812,
  188.         TableCellBottomPadding = 0x4813,
  189.         TableCellLeftPadding = 0x4814,
  190.         TableCellRightPadding = 0x4815,
  191.         // image properties
  192.         ImageName = 0x5000,
  193.         ImageWidth = 0x5010,
  194.         ImageHeight = 0x5011,
  195.         // selection properties
  196.         FullWidthSelection = 0x06000,
  197.         // page break properties
  198.         PageBreakPolicy = 0x7000,
  199.         // --
  200.         UserProperty = 0x100000
  201.     };
  202.     enum ObjectTypes {
  203.         NoObject,
  204.         ImageObject,
  205.         TableObject,
  206.         TableCellObject,
  207.         UserObject = 0x1000
  208.     };
  209.     enum PageBreakFlag {
  210.         PageBreak_Auto = 0,
  211.         PageBreak_AlwaysBefore = 0x001,
  212.         PageBreak_AlwaysAfter  = 0x010
  213.         // PageBreak_AlwaysInside = 0x100
  214.     };
  215.     Q_DECLARE_FLAGS(PageBreakFlags, PageBreakFlag)
  216.     QTextFormat();
  217.     explicit QTextFormat(int type);
  218.     QTextFormat(const QTextFormat &rhs);
  219.     QTextFormat &operator=(const QTextFormat &rhs);
  220.     ~QTextFormat();
  221.     void merge(const QTextFormat &other);
  222.     inline bool isValid() const { return type() != InvalidFormat; }
  223.     int type() const;
  224.     int objectIndex() const;
  225.     void setObjectIndex(int object);
  226.     QVariant property(int propertyId) const;
  227.     void setProperty(int propertyId, const QVariant &value);
  228.     void clearProperty(int propertyId);
  229.     bool hasProperty(int propertyId) const;
  230.     bool boolProperty(int propertyId) const;
  231.     int intProperty(int propertyId) const;
  232.     qreal doubleProperty(int propertyId) const;
  233.     QString stringProperty(int propertyId) const;
  234.     QColor colorProperty(int propertyId) const;
  235.     QPen penProperty(int propertyId) const;
  236.     QBrush brushProperty(int propertyId) const;
  237.     QTextLength lengthProperty(int propertyId) const;
  238.     QVector<QTextLength> lengthVectorProperty(int propertyId) const;
  239.     void setProperty(int propertyId, const QVector<QTextLength> &lengths);
  240.     QMap<int, QVariant> properties() const;
  241.     int propertyCount() const;
  242.     inline void setObjectType(int type);
  243.     inline int objectType() const
  244.     { return intProperty(ObjectType); }
  245.     inline bool isCharFormat() const { return type() == CharFormat; }
  246.     inline bool isBlockFormat() const { return type() == BlockFormat; }
  247.     inline bool isListFormat() const { return type() == ListFormat; }
  248.     inline bool isFrameFormat() const { return type() == FrameFormat; }
  249.     inline bool isImageFormat() const { return type() == CharFormat && objectType() == ImageObject; }
  250.     inline bool isTableFormat() const { return type() == FrameFormat && objectType() == TableObject; }
  251.     inline bool isTableCellFormat() const { return type() == CharFormat && objectType() == TableCellObject; }
  252.     QTextBlockFormat toBlockFormat() const;
  253.     QTextCharFormat toCharFormat() const;
  254.     QTextListFormat toListFormat() const;
  255.     QTextTableFormat toTableFormat() const;
  256.     QTextFrameFormat toFrameFormat() const;
  257.     QTextImageFormat toImageFormat() const;
  258.     QTextTableCellFormat toTableCellFormat() const;
  259.     bool operator==(const QTextFormat &rhs) const;
  260.     inline bool operator!=(const QTextFormat &rhs) const { return !operator==(rhs); }
  261.     operator QVariant() const;
  262.     inline void setLayoutDirection(Qt::LayoutDirection direction)
  263.         { setProperty(QTextFormat::LayoutDirection, direction); }
  264.     inline Qt::LayoutDirection layoutDirection() const
  265.         { return Qt::LayoutDirection(intProperty(QTextFormat::LayoutDirection)); }
  266.     inline void setBackground(const QBrush &brush)
  267.     { setProperty(BackgroundBrush, brush); }
  268.     inline QBrush background() const
  269.     { return brushProperty(BackgroundBrush); }
  270.     inline void clearBackground()
  271.     { clearProperty(BackgroundBrush); }
  272.     inline void setForeground(const QBrush &brush)
  273.     { setProperty(ForegroundBrush, brush); }
  274.     inline QBrush foreground() const
  275.     { return brushProperty(ForegroundBrush); }
  276.     inline void clearForeground()
  277.     { clearProperty(ForegroundBrush); }
  278. private:
  279.     QSharedDataPointer<QTextFormatPrivate> d;
  280.     qint32 format_type;
  281.     friend class QTextFormatCollection;
  282.     friend class QTextCharFormat;
  283.     friend Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QTextFormat &);
  284.     friend Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QTextFormat &);
  285. };
  286. inline void QTextFormat::setObjectType(int atype)
  287. { setProperty(ObjectType, atype); }
  288. Q_DECLARE_OPERATORS_FOR_FLAGS(QTextFormat::PageBreakFlags)
  289. class Q_GUI_EXPORT QTextCharFormat : public QTextFormat
  290. {
  291. public:
  292.     enum VerticalAlignment {
  293.         AlignNormal = 0,
  294.         AlignSuperScript,
  295.         AlignSubScript,
  296.         AlignMiddle,
  297.         AlignTop,
  298.         AlignBottom
  299.     };
  300.     enum UnderlineStyle { // keep in sync with Qt::PenStyle!
  301.         NoUnderline,
  302.         SingleUnderline,
  303.         DashUnderline,
  304.         DotLine,
  305.         DashDotLine,
  306.         DashDotDotLine,
  307.         WaveUnderline,
  308.         SpellCheckUnderline
  309.     };
  310.     QTextCharFormat();
  311.     bool isValid() const { return isCharFormat(); }
  312.     void setFont(const QFont &font);
  313.     QFont font() const;
  314.     inline void setFontFamily(const QString &family)
  315.     { setProperty(FontFamily, family); }
  316.     inline QString fontFamily() const
  317.     { return stringProperty(FontFamily); }
  318.     inline void setFontPointSize(qreal size)
  319.     { setProperty(FontPointSize, size); }
  320.     inline qreal fontPointSize() const
  321.     { return doubleProperty(FontPointSize); }
  322.     inline void setFontWeight(int weight)
  323.     { if (weight == QFont::Normal) weight = 0; setProperty(FontWeight, weight); }
  324.     inline int fontWeight() const
  325.     { int weight = intProperty(FontWeight); if (weight == 0) weight = QFont::Normal; return weight; }
  326.     inline void setFontItalic(bool italic)
  327.     { setProperty(FontItalic, italic); }
  328.     inline bool fontItalic() const
  329.     { return boolProperty(FontItalic); }
  330.     inline void setFontCapitalization(QFont::Capitalization capitalization)
  331.     { setProperty(FontCapitalization, capitalization); }
  332.     inline QFont::Capitalization fontCapitalization() const
  333.     { return static_cast<QFont::Capitalization>(intProperty(FontCapitalization)); }
  334.     inline void setFontLetterSpacing(qreal spacing)
  335.     { setProperty(FontLetterSpacing, spacing); }
  336.     inline qreal fontLetterSpacing() const
  337.     { return doubleProperty(FontLetterSpacing); }
  338.     inline void setFontWordSpacing(qreal spacing)
  339.     { setProperty(FontWordSpacing, spacing); }
  340.     inline qreal fontWordSpacing() const
  341.     { return doubleProperty(FontWordSpacing); }
  342.     inline void setFontUnderline(bool underline)
  343.     { setProperty(TextUnderlineStyle, underline ? SingleUnderline : NoUnderline); }
  344.     bool fontUnderline() const;
  345.     inline void setFontOverline(bool overline)
  346.     { setProperty(FontOverline, overline); }
  347.     inline bool fontOverline() const
  348.     { return boolProperty(FontOverline); }
  349.     inline void setFontStrikeOut(bool strikeOut)
  350.     { setProperty(FontStrikeOut, strikeOut); }
  351.     inline bool fontStrikeOut() const
  352.     { return boolProperty(FontStrikeOut); }
  353.     inline void setUnderlineColor(const QColor &color)
  354.     { setProperty(TextUnderlineColor, color); }
  355.     inline QColor underlineColor() const
  356.     { return colorProperty(TextUnderlineColor); }
  357.     inline void setFontFixedPitch(bool fixedPitch)
  358.     { setProperty(FontFixedPitch, fixedPitch); }
  359.     inline bool fontFixedPitch() const
  360.     { return boolProperty(FontFixedPitch); }
  361.     void setUnderlineStyle(UnderlineStyle style);
  362.     inline UnderlineStyle underlineStyle() const
  363.     { return static_cast<UnderlineStyle>(intProperty(TextUnderlineStyle)); }
  364.     inline void setVerticalAlignment(VerticalAlignment alignment)
  365.     { setProperty(TextVerticalAlignment, alignment); }
  366.     inline VerticalAlignment verticalAlignment() const
  367.     { return static_cast<VerticalAlignment>(intProperty(TextVerticalAlignment)); }
  368.     inline void setTextOutline(const QPen &pen)
  369.     { setProperty(TextOutline, pen); }
  370.     inline QPen textOutline() const
  371.     { return penProperty(TextOutline); }
  372.     inline void setToolTip(const QString &tip)
  373.     { setProperty(TextToolTip, tip); }
  374.     inline QString toolTip() const
  375.     { return stringProperty(TextToolTip); }
  376.     inline void setAnchor(bool anchor)
  377.     { setProperty(IsAnchor, anchor); }
  378.     inline bool isAnchor() const
  379.     { return boolProperty(IsAnchor); }
  380.     inline void setAnchorHref(const QString &value)
  381.     { setProperty(AnchorHref, value); }
  382.     inline QString anchorHref() const
  383.     { return stringProperty(AnchorHref); }
  384.     inline void setAnchorName(const QString &name)
  385.     { setAnchorNames(QStringList(name)); }
  386.     QString anchorName() const;
  387.     inline void setAnchorNames(const QStringList &names)
  388.     { setProperty(AnchorName, names); }
  389.     QStringList anchorNames() const;
  390.     inline void setTableCellRowSpan(int tableCellRowSpan);
  391.     inline int tableCellRowSpan() const
  392.     { int s = intProperty(TableCellRowSpan); if (s == 0) s = 1; return s; }
  393.     inline void setTableCellColumnSpan(int tableCellColumnSpan);
  394.     inline int tableCellColumnSpan() const
  395.     { int s = intProperty(TableCellColumnSpan); if (s == 0) s = 1; return s; }
  396. protected:
  397.     explicit QTextCharFormat(const QTextFormat &fmt);
  398.     friend class QTextFormat;
  399. };
  400. inline void QTextCharFormat::setTableCellRowSpan(int atableCellRowSpan)
  401. {
  402.     if (atableCellRowSpan == 1)
  403. atableCellRowSpan = 0;
  404.     setProperty(TableCellRowSpan, atableCellRowSpan);
  405. }
  406. inline void QTextCharFormat::setTableCellColumnSpan(int atableCellColumnSpan)
  407. {
  408.     if (atableCellColumnSpan == 1)
  409. atableCellColumnSpan = 0;
  410.     setProperty(TableCellColumnSpan, atableCellColumnSpan);
  411. }
  412. class Q_GUI_EXPORT QTextBlockFormat : public QTextFormat
  413. {
  414. public:
  415.     QTextBlockFormat();
  416.     bool isValid() const { return isBlockFormat(); }
  417.     inline void setAlignment(Qt::Alignment alignment);
  418.     inline Qt::Alignment alignment() const
  419.     { int a = intProperty(BlockAlignment); if (a == 0) a = Qt::AlignLeft; return QFlag(a); }
  420.     inline void setTopMargin(qreal margin)
  421.     { setProperty(BlockTopMargin, margin); }
  422.     inline qreal topMargin() const
  423.     { return doubleProperty(BlockTopMargin); }
  424.     inline void setBottomMargin(qreal margin)
  425.     { setProperty(BlockBottomMargin, margin); }
  426.     inline qreal bottomMargin() const
  427.     { return doubleProperty(BlockBottomMargin); }
  428.     inline void setLeftMargin(qreal margin)
  429.     { setProperty(BlockLeftMargin, margin); }
  430.     inline qreal leftMargin() const
  431.     { return doubleProperty(BlockLeftMargin); }
  432.     inline void setRightMargin(qreal margin)
  433.     { setProperty(BlockRightMargin, margin); }
  434.     inline qreal rightMargin() const
  435.     { return doubleProperty(BlockRightMargin); }
  436.     inline void setTextIndent(qreal margin)
  437.     { setProperty(TextIndent, margin); }
  438.     inline qreal textIndent() const
  439.     { return doubleProperty(TextIndent); }
  440.     inline void setIndent(int indent);
  441.     inline int indent() const
  442.     { return intProperty(BlockIndent); }
  443.     inline void setNonBreakableLines(bool b)
  444.     { setProperty(BlockNonBreakableLines, b); }
  445.     inline bool nonBreakableLines() const
  446.     { return boolProperty(BlockNonBreakableLines); }
  447.     inline void setPageBreakPolicy(PageBreakFlags flags)
  448.     { setProperty(PageBreakPolicy, int(flags)); }
  449.     inline PageBreakFlags pageBreakPolicy() const
  450.     { return PageBreakFlags(intProperty(PageBreakPolicy)); }
  451.     void setTabPositions(const QList<QTextOption::Tab> &tabs);
  452.     QList<QTextOption::Tab> tabPositions() const;
  453. protected:
  454.     explicit QTextBlockFormat(const QTextFormat &fmt);
  455.     friend class QTextFormat;
  456. };
  457. inline void QTextBlockFormat::setAlignment(Qt::Alignment aalignment)
  458. { setProperty(BlockAlignment, int(aalignment)); }
  459. inline void QTextBlockFormat::setIndent(int aindent)
  460. { setProperty(BlockIndent, aindent); }
  461. class Q_GUI_EXPORT QTextListFormat : public QTextFormat
  462. {
  463. public:
  464.     QTextListFormat();
  465.     bool isValid() const { return isListFormat(); }
  466.     enum Style {
  467.         ListDisc = -1,
  468.         ListCircle = -2,
  469.         ListSquare = -3,
  470.         ListDecimal = -4,
  471.         ListLowerAlpha = -5,
  472.         ListUpperAlpha = -6,
  473.         ListStyleUndefined = 0
  474.     };
  475.     inline void setStyle(Style style);
  476.     inline Style style() const
  477.     { return static_cast<Style>(intProperty(ListStyle)); }
  478.     inline void setIndent(int indent);
  479.     inline int indent() const
  480.     { return intProperty(ListIndent); }
  481. protected:
  482.     explicit QTextListFormat(const QTextFormat &fmt);
  483.     friend class QTextFormat;
  484. };
  485. inline void QTextListFormat::setStyle(Style astyle)
  486. { setProperty(ListStyle, astyle); }
  487. inline void QTextListFormat::setIndent(int aindent)
  488. { setProperty(ListIndent, aindent); }
  489. class Q_GUI_EXPORT QTextImageFormat : public QTextCharFormat
  490. {
  491. public:
  492.     QTextImageFormat();
  493.     bool isValid() const { return isImageFormat(); }
  494.     inline void setName(const QString &name);
  495.     inline QString name() const
  496.     { return stringProperty(ImageName); }
  497.     inline void setWidth(qreal width);
  498.     inline qreal width() const
  499.     { return doubleProperty(ImageWidth); }
  500.     inline void setHeight(qreal height);
  501.     inline qreal height() const
  502.     { return doubleProperty(ImageHeight); }
  503. protected:
  504.     explicit QTextImageFormat(const QTextFormat &format);
  505.     friend class QTextFormat;
  506. };
  507. inline void QTextImageFormat::setName(const QString &aname)
  508. { setProperty(ImageName, aname); }
  509. inline void QTextImageFormat::setWidth(qreal awidth)
  510. { setProperty(ImageWidth, awidth); }
  511. inline void QTextImageFormat::setHeight(qreal aheight)
  512. { setProperty(ImageHeight, aheight); }
  513. class Q_GUI_EXPORT QTextFrameFormat : public QTextFormat
  514. {
  515. public:
  516.     QTextFrameFormat();
  517.     bool isValid() const { return isFrameFormat(); }
  518.     enum Position {
  519.         InFlow,
  520.         FloatLeft,
  521.         FloatRight
  522.         // ######
  523. //        Absolute
  524.     };
  525.     enum BorderStyle {
  526.         BorderStyle_None,
  527.         BorderStyle_Dotted,
  528.         BorderStyle_Dashed,
  529.         BorderStyle_Solid,
  530.         BorderStyle_Double,
  531.         BorderStyle_DotDash,
  532.         BorderStyle_DotDotDash,
  533.         BorderStyle_Groove,
  534.         BorderStyle_Ridge,
  535.         BorderStyle_Inset,
  536.         BorderStyle_Outset
  537.     };
  538.     inline void setPosition(Position f)
  539.     { setProperty(CssFloat, f); }
  540.     inline Position position() const
  541.     { return static_cast<Position>(intProperty(CssFloat)); }
  542.     inline void setBorder(qreal border);
  543.     inline qreal border() const
  544.     { return doubleProperty(FrameBorder); }
  545.     inline void setBorderBrush(const QBrush &brush)
  546.     { setProperty(FrameBorderBrush, brush); }
  547.     inline QBrush borderBrush() const
  548.     { return brushProperty(FrameBorderBrush); }
  549.     inline void setBorderStyle(BorderStyle style)
  550.     { setProperty(FrameBorderStyle, style); }
  551.     inline BorderStyle borderStyle() const
  552.     { return static_cast<BorderStyle>(intProperty(FrameBorderStyle)); }
  553.     void setMargin(qreal margin);
  554.     inline qreal margin() const
  555.     { return doubleProperty(FrameMargin); }
  556.     inline void setTopMargin(qreal margin);
  557.     qreal topMargin() const;
  558.     inline void setBottomMargin(qreal margin);
  559.     qreal bottomMargin() const;
  560.     inline void setLeftMargin(qreal margin);
  561.     qreal leftMargin() const;
  562.     inline void setRightMargin(qreal margin);
  563.     qreal rightMargin() const;
  564.     inline void setPadding(qreal padding);
  565.     inline qreal padding() const
  566.     { return doubleProperty(FramePadding); }
  567.     inline void setWidth(qreal width);
  568.     inline void setWidth(const QTextLength &length)
  569.     { setProperty(FrameWidth, length); }
  570.     inline QTextLength width() const
  571.     { return lengthProperty(FrameWidth); }
  572.     inline void setHeight(qreal height);
  573.     inline void setHeight(const QTextLength &height);
  574.     inline QTextLength height() const
  575.     { return lengthProperty(FrameHeight); }
  576.     inline void setPageBreakPolicy(PageBreakFlags flags)
  577.     { setProperty(PageBreakPolicy, int(flags)); }
  578.     inline PageBreakFlags pageBreakPolicy() const
  579.     { return PageBreakFlags(intProperty(PageBreakPolicy)); }
  580. protected:
  581.     explicit QTextFrameFormat(const QTextFormat &fmt);
  582.     friend class QTextFormat;
  583. };
  584. inline void QTextFrameFormat::setBorder(qreal aborder)
  585. { setProperty(FrameBorder, aborder); }
  586. inline void QTextFrameFormat::setPadding(qreal apadding)
  587. { setProperty(FramePadding, apadding); }
  588. inline void QTextFrameFormat::setWidth(qreal awidth)
  589. { setProperty(FrameWidth, QTextLength(QTextLength::FixedLength, awidth)); }
  590. inline void QTextFrameFormat::setHeight(qreal aheight)
  591. { setProperty(FrameHeight, QTextLength(QTextLength::FixedLength, aheight)); }
  592. inline void QTextFrameFormat::setHeight(const QTextLength &aheight)
  593. { setProperty(FrameHeight, aheight); }
  594. inline void QTextFrameFormat::setTopMargin(qreal amargin)
  595. { setProperty(FrameTopMargin, amargin); }
  596. inline void QTextFrameFormat::setBottomMargin(qreal amargin)
  597. { setProperty(FrameBottomMargin, amargin); }
  598. inline void QTextFrameFormat::setLeftMargin(qreal amargin)
  599. { setProperty(FrameLeftMargin, amargin); }
  600. inline void QTextFrameFormat::setRightMargin(qreal amargin)
  601. { setProperty(FrameRightMargin, amargin); }
  602. class Q_GUI_EXPORT QTextTableFormat : public QTextFrameFormat
  603. {
  604. public:
  605.     QTextTableFormat();
  606.     inline bool isValid() const { return isTableFormat(); }
  607.     inline int columns() const
  608.     { int cols = intProperty(TableColumns); if (cols == 0) cols = 1; return cols; }
  609.     inline void setColumns(int columns);
  610.     inline void setColumnWidthConstraints(const QVector<QTextLength> &constraints)
  611.     { setProperty(TableColumnWidthConstraints, constraints); }
  612.     inline QVector<QTextLength> columnWidthConstraints() const
  613.     { return lengthVectorProperty(TableColumnWidthConstraints); }
  614.     inline void clearColumnWidthConstraints()
  615.     { clearProperty(TableColumnWidthConstraints); }
  616.     inline qreal cellSpacing() const
  617.     { return doubleProperty(TableCellSpacing); }
  618.     inline void setCellSpacing(qreal spacing)
  619.     { setProperty(TableCellSpacing, spacing); }
  620.     inline qreal cellPadding() const
  621.     { return doubleProperty(TableCellPadding); }
  622.     inline void setCellPadding(qreal padding);
  623.     inline void setAlignment(Qt::Alignment alignment);
  624.     inline Qt::Alignment alignment() const
  625.     { return QFlag(intProperty(BlockAlignment)); }
  626.     inline void setHeaderRowCount(int count)
  627.     { setProperty(TableHeaderRowCount, count); }
  628.     inline int headerRowCount() const
  629.     { return intProperty(TableHeaderRowCount); }
  630. protected:
  631.     explicit QTextTableFormat(const QTextFormat &fmt);
  632.     friend class QTextFormat;
  633. };
  634. inline void QTextTableFormat::setColumns(int acolumns)
  635. {
  636.     if (acolumns == 1)
  637.         acolumns = 0;
  638.     setProperty(TableColumns, acolumns);
  639. }
  640. inline void QTextTableFormat::setCellPadding(qreal apadding)
  641. { setProperty(TableCellPadding, apadding); }
  642. inline void QTextTableFormat::setAlignment(Qt::Alignment aalignment)
  643. { setProperty(BlockAlignment, int(aalignment)); }
  644. class Q_GUI_EXPORT QTextTableCellFormat : public QTextCharFormat
  645. {
  646. public:
  647.     QTextTableCellFormat();
  648.     inline bool isValid() const { return isTableCellFormat(); }
  649.     inline void setTopPadding(qreal padding);
  650.     inline qreal topPadding() const;
  651.     inline void setBottomPadding(qreal padding);
  652.     inline qreal bottomPadding() const;
  653.     inline void setLeftPadding(qreal padding);
  654.     inline qreal leftPadding() const;
  655.     inline void setRightPadding(qreal padding);
  656.     inline qreal rightPadding() const;
  657.     inline void setPadding(qreal padding);
  658. protected:
  659.     explicit QTextTableCellFormat(const QTextFormat &fmt);
  660.     friend class QTextFormat;
  661. };
  662. inline void QTextTableCellFormat::setTopPadding(qreal padding)
  663. {
  664.     setProperty(TableCellTopPadding, padding);
  665. }
  666. inline qreal QTextTableCellFormat::topPadding() const
  667. {
  668.     return doubleProperty(TableCellTopPadding);
  669. }
  670. inline void QTextTableCellFormat::setBottomPadding(qreal padding)
  671. {
  672.     setProperty(TableCellBottomPadding, padding);
  673. }
  674. inline qreal QTextTableCellFormat::bottomPadding() const
  675. {
  676.     return doubleProperty(TableCellBottomPadding);
  677. }
  678. inline void QTextTableCellFormat::setLeftPadding(qreal padding)
  679. {
  680.     setProperty(TableCellLeftPadding, padding);
  681. }
  682. inline qreal QTextTableCellFormat::leftPadding() const
  683. {
  684.     return doubleProperty(TableCellLeftPadding);
  685. }
  686. inline void QTextTableCellFormat::setRightPadding(qreal padding)
  687. {
  688.     setProperty(TableCellRightPadding, padding);
  689. }
  690. inline qreal QTextTableCellFormat::rightPadding() const
  691. {
  692.     return doubleProperty(TableCellRightPadding);
  693. }
  694. inline void QTextTableCellFormat::setPadding(qreal padding)
  695. {
  696.     setTopPadding(padding);
  697.     setBottomPadding(padding);
  698.     setLeftPadding(padding);
  699.     setRightPadding(padding);
  700. }
  701. QT_END_NAMESPACE
  702. QT_END_HEADER
  703. #endif // QTEXTFORMAT_H