1 /* 2 * Copyright (C) 2001-2015 Klaralvdalens Datakonsult AB. All rights reserved. 3 * 4 * This file is part of the KD Chart library. 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License as 8 * published by the Free Software Foundation; either version 2 of 9 * the License, or (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program. If not, see <https://www.gnu.org/licenses/>. 18 */ 19 20 #ifndef KCHARTTEXTATTRIBUTES_H 21 #define KCHARTTEXTATTRIBUTES_H 22 23 #include <QDebug> 24 #include <QMetaType> 25 #include "KChartGlobal.h" 26 #include "KChartMeasure.h" 27 28 QT_BEGIN_NAMESPACE 29 class QPen; 30 class QFont; 31 class QTextDocument; 32 QT_END_NAMESPACE 33 34 namespace KChart { 35 36 /** 37 * \brief A set of text attributes. 38 * 39 * TextAttributes encapsulates settings that have to do with 40 * text. This includes font, fontsize, color, whether the text 41 * is rotated, etc 42 */ 43 class KCHART_EXPORT TextAttributes 44 { 45 public: 46 TextAttributes(); 47 TextAttributes( const TextAttributes& ); 48 TextAttributes &operator= ( const TextAttributes& ); 49 bool operator==( const TextAttributes& ) const; 50 inline bool operator!=( const TextAttributes& other ) const 51 { return !operator==(other); } 52 53 ~TextAttributes(); 54 55 /** 56 * Set whether the text is to be rendered at all. 57 * \param visible Whether the text is visible. 58 */ 59 void setVisible( bool visible ); 60 61 /** 62 * \return Whether the text is visible. 63 */ 64 bool isVisible() const; 65 66 /** 67 * Set the font to be used for rendering the text. 68 * 69 * \note All of the font's attributes will be used - except of its size! 70 * To specify the size please use setFontSize (or setMinimalFontSize, resp.) 71 * 72 * \param font The font to use. 73 * 74 * \sa setFontSize, setMinimalFontSize 75 */ 76 void setFont( const QFont& font ); 77 78 /** 79 * \return The font that is used for rendering text. 80 */ 81 QFont font() const; 82 83 /** 84 * Set the size of the font used for rendering text. 85 * \param measure The measure to use. 86 * \see Measure 87 */ 88 void setFontSize( const Measure & measure ); 89 90 /** 91 * \return The measure used for the font size. 92 */ 93 Measure fontSize() const; 94 95 /** 96 * Set the minimal size of the font used for rendering text. 97 * \param measure The measure to use. 98 * \see Measure 99 */ 100 void setMinimalFontSize( const Measure & measure ); 101 102 /** 103 * \return The measure used for the minimal font size. 104 */ 105 Measure minimalFontSize() const; 106 107 /** 108 * \brief Returns the font size that is used at drawing time. 109 * 110 * This method is called at drawing time. It returns the 111 * font size as it is used for rendering text, taking into account 112 * any measures that were set via setFontSize and/or setMinimalFontSize. 113 */ 114 qreal calculatedFontSize( const QSizeF &referenceSize, 115 KChartEnums::MeasureOrientation autoReferenceOrientation ) const; 116 117 /** 118 * \brief Returns the font size that is used at drawing time. 119 * 120 * This method is called at drawing time. It returns the 121 * font size as it is used for rendering text, taking into account 122 * any measures that were set via setFontSize and/or setMinimalFontSize. 123 */ 124 #if defined(Q_COMPILER_MANGLES_RETURN_TYPE) 125 const qreal calculatedFontSize( 126 #else 127 qreal calculatedFontSize( 128 #endif 129 const QObject* autoReferenceArea, 130 KChartEnums::MeasureOrientation autoReferenceOrientation ) const; 131 132 /** 133 * \brief Returns the font in the size that is used at drawing time. 134 * 135 * This method is called at drawing time. It returns the 136 * font as it is used for rendering text, taking into account 137 * any measures that were set via setFontSize and/or setMinimalFontSize. 138 */ 139 const QFont calculatedFont( 140 const QObject* autoReferenceArea, 141 KChartEnums::MeasureOrientation autoReferenceOrientation ) const; 142 143 /** 144 * \return Whether the text has an absolute font size set. 145 */ 146 bool hasAbsoluteFontSize() const; 147 148 /** 149 * Set whether the text should be automatically rotated as 150 * needed when space is tight. 151 * \param autoRotate Whether text should be automatically rotated. 152 */ 153 void setAutoRotate( bool autoRotate ); 154 155 /** 156 * \return Whether text is automatically rotated when space is 157 * tight. 158 */ 159 bool autoRotate() const; 160 161 /** 162 * Set whether the text should automatically be shrunk if 163 * space is tight. 164 * \param autoShrink Whether text should be auto-shrunk. 165 */ 166 void setAutoShrink( bool autoShrink ); 167 168 /** 169 * \return Whether text is automatically shrunk if space is 170 * tight. 171 */ 172 bool autoShrink() const; 173 174 /** 175 * Set the rotation angle to use for the text. 176 * 177 * \note For axis titles the rotation angle can be set to one of the 178 * following angles: 0, 90, 180, 270 179 * Any other values specified will be replaced by the next smaller 180 * one of the allowed values, so no matter what you set the rotation 181 * will always be one of these four values. 182 * 183 * \param rotation The rotation angle. 184 */ 185 void setRotation( int rotation ); 186 void resetRotation(); 187 bool hasRotation() const; 188 189 /** 190 * \return The rotation angle used for rendering the text. 191 */ 192 int rotation() const; 193 194 /** 195 * Set the pen to use for rendering the text. 196 * \param pen The pen to use. 197 */ 198 void setPen( const QPen& pen ); 199 200 /** 201 * \return The pen used for rendering the text. 202 */ 203 QPen pen() const; 204 205 /** 206 * \return The document used for the drawing the text or NULL if the 207 * default document is used. 208 */ 209 QTextDocument* textDocument() const; 210 211 /** 212 * Sets the document to use for the text. The previous document is deleted. 213 */ 214 void setTextDocument(QTextDocument* layout); 215 216 // FIXME KChartEnums::TextLayoutPolicy? 217 218 private: 219 KCHART_DECLARE_PRIVATE_BASE_VALUE( TextAttributes ) 220 221 }; // End of class TextAttributes 222 223 } 224 225 #if !defined(QT_NO_DEBUG_STREAM) 226 KCHART_EXPORT QDebug operator<<(QDebug, const KChart::TextAttributes& ); 227 #endif /* QT_NO_DEBUG_STREAM */ 228 229 KCHART_DECLARE_SWAP_SPECIALISATION( KChart::TextAttributes ) 230 231 QT_BEGIN_NAMESPACE 232 Q_DECLARE_TYPEINFO( KChart::TextAttributes, Q_MOVABLE_TYPE ); 233 QT_END_NAMESPACE 234 Q_DECLARE_METATYPE( KChart::TextAttributes ) 235 236 #endif // KCHARTTEXTATTRIBUTES_H 237