| Absolute File Name: | /home/qt/qt5_coco/qt5/qtbase/src/gui/text/qtextformat.cpp |
| Switch to Source code | Preprocessed file |
| Line | Source | Count | ||||||
|---|---|---|---|---|---|---|---|---|
| 1 | - | |||||||
| 2 | - | |||||||
| 3 | - | |||||||
| 4 | QTextLength::operator QVariant() const | - | ||||||
| 5 | { | - | ||||||
| 6 | return QVariant(QVariant::TextLength, this); | - | ||||||
| 7 | } | - | ||||||
| 8 | - | |||||||
| 9 | - | |||||||
| 10 | QDataStream &operator<<(QDataStream &stream, const QTextLength &length) | - | ||||||
| 11 | { | - | ||||||
| 12 | return stream << qint32(length.lengthType) << double(length.fixedValueOrPercentage); | - | ||||||
| 13 | } | - | ||||||
| 14 | - | |||||||
| 15 | QDataStream &operator>>(QDataStream &stream, QTextLength &length) | - | ||||||
| 16 | { | - | ||||||
| 17 | qint32 type; | - | ||||||
| 18 | double fixedValueOrPercentage; | - | ||||||
| 19 | stream >> type >> fixedValueOrPercentage; | - | ||||||
| 20 | length.fixedValueOrPercentage = fixedValueOrPercentage; | - | ||||||
| 21 | length.lengthType = QTextLength::Type(type); | - | ||||||
| 22 | return stream; | - | ||||||
| 23 | } | - | ||||||
| 24 | - | |||||||
| 25 | - | |||||||
| 26 | class QTextFormatPrivate : public QSharedData | - | ||||||
| 27 | { | - | ||||||
| 28 | public: | - | ||||||
| 29 | QTextFormatPrivate() : hashDirty(true), fontDirty(true), hashValue(0) {} | - | ||||||
| 30 | - | |||||||
| 31 | struct Property | - | ||||||
| 32 | { | - | ||||||
| 33 | inline Property(qint32 k, const QVariant &v) : key(k), value(v) {} | - | ||||||
| 34 | inline Property() {} | - | ||||||
| 35 | - | |||||||
| 36 | qint32 key; | - | ||||||
| 37 | QVariant value; | - | ||||||
| 38 | - | |||||||
| 39 | inline bool operator==(const Property &other) const | - | ||||||
| 40 | { return key == other.key && value == other.value; } | - | ||||||
| 41 | inline bool operator!=(const Property &other) const | - | ||||||
| 42 | { return key != other.key || value != other.value; } | - | ||||||
| 43 | }; | - | ||||||
| 44 | - | |||||||
| 45 | inline uint hash() const | - | ||||||
| 46 | { | - | ||||||
| 47 | if (!hashDirty) | - | ||||||
| 48 | return hashValue; | - | ||||||
| 49 | return recalcHash(); | - | ||||||
| 50 | } | - | ||||||
| 51 | - | |||||||
| 52 | inline bool operator==(const QTextFormatPrivate &rhs) const { | - | ||||||
| 53 | if (hash() != rhs.hash()) | - | ||||||
| 54 | return false; | - | ||||||
| 55 | - | |||||||
| 56 | return props == rhs.props; | - | ||||||
| 57 | } | - | ||||||
| 58 | - | |||||||
| 59 | inline void insertProperty(qint32 key, const QVariant &value) | - | ||||||
| 60 | { | - | ||||||
| 61 | hashDirty = true; | - | ||||||
| 62 | if (key >= QTextFormat::FirstFontProperty && key <= QTextFormat::LastFontProperty) | - | ||||||
| 63 | fontDirty = true; | - | ||||||
| 64 | for (int i = 0; i < props.count(); ++i) | - | ||||||
| 65 | if (props.at(i).key == key) { | - | ||||||
| 66 | props[i].value = value; | - | ||||||
| 67 | return; | - | ||||||
| 68 | } | - | ||||||
| 69 | props.append(Property(key, value)); | - | ||||||
| 70 | } | - | ||||||
| 71 | - | |||||||
| 72 | inline void clearProperty(qint32 key) | - | ||||||
| 73 | { | - | ||||||
| 74 | for (int i = 0; i < props.count(); ++i) | - | ||||||
| 75 | if (props.at(i).key == key) { | - | ||||||
| 76 | hashDirty = true; | - | ||||||
| 77 | if (key >= QTextFormat::FirstFontProperty && key <= QTextFormat::LastFontProperty) | - | ||||||
| 78 | fontDirty = true; | - | ||||||
| 79 | props.remove(i); | - | ||||||
| 80 | return; | - | ||||||
| 81 | } | - | ||||||
| 82 | } | - | ||||||
| 83 | - | |||||||
| 84 | inline int propertyIndex(qint32 key) const | - | ||||||
| 85 | { | - | ||||||
| 86 | for (int i = 0; i < props.count(); ++i) | - | ||||||
| 87 | if (props.at(i).key == key) | - | ||||||
| 88 | return i; | - | ||||||
| 89 | return -1; | - | ||||||
| 90 | } | - | ||||||
| 91 | - | |||||||
| 92 | inline QVariant property(qint32 key) const | - | ||||||
| 93 | { | - | ||||||
| 94 | const int idx = propertyIndex(key); | - | ||||||
| 95 | if (idx < 0) | - | ||||||
| 96 | return QVariant(); | - | ||||||
| 97 | return props.at(idx).value; | - | ||||||
| 98 | } | - | ||||||
| 99 | - | |||||||
| 100 | inline bool hasProperty(qint32 key) const | - | ||||||
| 101 | { return propertyIndex(key) != -1; } | - | ||||||
| 102 | - | |||||||
| 103 | void resolveFont(const QFont &defaultFont); | - | ||||||
| 104 | - | |||||||
| 105 | inline const QFont &font() const { | - | ||||||
| 106 | if (fontDirty) | - | ||||||
| 107 | recalcFont(); | - | ||||||
| 108 | return fnt; | - | ||||||
| 109 | } | - | ||||||
| 110 | - | |||||||
| 111 | QVector<Property> props; | - | ||||||
| 112 | private: | - | ||||||
| 113 | - | |||||||
| 114 | uint recalcHash() const; | - | ||||||
| 115 | void recalcFont() const; | - | ||||||
| 116 | - | |||||||
| 117 | mutable bool hashDirty; | - | ||||||
| 118 | mutable bool fontDirty; | - | ||||||
| 119 | mutable uint hashValue; | - | ||||||
| 120 | mutable QFont fnt; | - | ||||||
| 121 | - | |||||||
| 122 | friend QDataStream &operator<<(QDataStream &, const QTextFormat &); | - | ||||||
| 123 | friend QDataStream &operator>>(QDataStream &, QTextFormat &); | - | ||||||
| 124 | }; | - | ||||||
| 125 | template<> class QTypeInfo<QTextFormatPrivate::Property > { public: enum { isComplex = (((Q_MOVABLE_TYPE) & Q_PRIMITIVE_TYPE) == 0), isStatic = (((Q_MOVABLE_TYPE) & (Q_MOVABLE_TYPE | Q_PRIMITIVE_TYPE)) == 0), isRelocatable = !isStatic || ((Q_MOVABLE_TYPE) & Q_RELOCATABLE_TYPE), isLarge = (sizeof(QTextFormatPrivate::Property)>sizeof(void*)), isPointer = false, isIntegral = QtPrivate::is_integral< QTextFormatPrivate::Property >::value, isDummy = (((Q_MOVABLE_TYPE) & Q_DUMMY_TYPE) != 0), sizeOf = sizeof(QTextFormatPrivate::Property) }; static inline const char *name() { return "QTextFormatPrivate::Property"; } }; | - | ||||||
| 126 | - | |||||||
| 127 | static inline uint hash(const QColor &color) | - | ||||||
| 128 | { | - | ||||||
| 129 | return (color.isValid()) ? color.rgba() : 0x234109; | - | ||||||
| 130 | } | - | ||||||
| 131 | - | |||||||
| 132 | static inline uint hash(const QPen &pen) | - | ||||||
| 133 | { | - | ||||||
| 134 | return hash(pen.color()) + qHash(pen.widthF()); | - | ||||||
| 135 | } | - | ||||||
| 136 | - | |||||||
| 137 | static inline uint hash(const QBrush &brush) | - | ||||||
| 138 | { | - | ||||||
| 139 | return hash(brush.color()) + (brush.style() << 3); | - | ||||||
| 140 | } | - | ||||||
| 141 | - | |||||||
| 142 | static inline uint variantHash(const QVariant &variant) | - | ||||||
| 143 | { | - | ||||||
| 144 | - | |||||||
| 145 | switch (variant.userType()) { | - | ||||||
| 146 | case QVariant::String: return qHash(variant.toString()); | - | ||||||
| 147 | case QVariant::Double: return qHash(variant.toDouble()); | - | ||||||
| 148 | case QVariant::Int: return 0x811890 + variant.toInt(); | - | ||||||
| 149 | case QVariant::Brush: | - | ||||||
| 150 | return 0x01010101 + hash(qvariant_cast<QBrush>(variant)); | - | ||||||
| 151 | case QVariant::Bool: return 0x371818 + variant.toBool(); | - | ||||||
| 152 | case QVariant::Pen: return 0x02020202 + hash(qvariant_cast<QPen>(variant)); | - | ||||||
| 153 | case QVariant::List: | - | ||||||
| 154 | return 0x8377 + qvariant_cast<QVariantList>(variant).count(); | - | ||||||
| 155 | case QVariant::Color: return hash(qvariant_cast<QColor>(variant)); | - | ||||||
| 156 | case QVariant::TextLength: | - | ||||||
| 157 | return 0x377 + hash(qvariant_cast<QTextLength>(variant).rawValue()); | - | ||||||
| 158 | case QMetaType::Float: return qHash(variant.toFloat()); | - | ||||||
| 159 | case QVariant::Invalid: return 0; | - | ||||||
| 160 | default: break; | - | ||||||
| 161 | } | - | ||||||
| 162 | return qHash(variant.typeName()); | - | ||||||
| 163 | } | - | ||||||
| 164 | - | |||||||
| 165 | static inline int getHash(const QTextFormatPrivate *d, int format) | - | ||||||
| 166 | { | - | ||||||
| 167 | return (d ? d->hash() : 0) + format; | - | ||||||
| 168 | } | - | ||||||
| 169 | - | |||||||
| 170 | uint QTextFormatPrivate::recalcHash() const | - | ||||||
| 171 | { | - | ||||||
| 172 | hashValue = 0; | - | ||||||
| 173 | for (QVector<Property>::ConstIterator it = props.constBegin(); it != props.constEnd(); ++it) | - | ||||||
| 174 | hashValue += (static_cast<quint32>(it->key) << 16) + variantHash(it->value); | - | ||||||
| 175 | - | |||||||
| 176 | hashDirty = false; | - | ||||||
| 177 | - | |||||||
| 178 | return hashValue; | - | ||||||
| 179 | } | - | ||||||
| 180 | - | |||||||
| 181 | void QTextFormatPrivate::resolveFont(const QFont &defaultFont) | - | ||||||
| 182 | { | - | ||||||
| 183 | recalcFont(); | - | ||||||
| 184 | const uint oldMask = fnt.resolve(); | - | ||||||
| 185 | fnt = fnt.resolve(defaultFont); | - | ||||||
| 186 | - | |||||||
| 187 | if (hasProperty(QTextFormat::FontSizeAdjustment)) { | - | ||||||
| 188 | const qreal scaleFactors[7] = {qreal(0.7), qreal(0.8), qreal(1.0), qreal(1.2), qreal(1.5), qreal(2), qreal(2.4)}; | - | ||||||
| 189 | - | |||||||
| 190 | const int htmlFontSize = qBound(0, property(QTextFormat::FontSizeAdjustment).toInt() + 3 - 1, 6); | - | ||||||
| 191 | - | |||||||
| 192 | - | |||||||
| 193 | if (defaultFont.pointSize() <= 0) { | - | ||||||
| 194 | qreal pixelSize = scaleFactors[htmlFontSize] * defaultFont.pixelSize(); | - | ||||||
| 195 | fnt.setPixelSize(qRound(pixelSize)); | - | ||||||
| 196 | } else { | - | ||||||
| 197 | qreal pointSize = scaleFactors[htmlFontSize] * defaultFont.pointSizeF(); | - | ||||||
| 198 | fnt.setPointSizeF(pointSize); | - | ||||||
| 199 | } | - | ||||||
| 200 | } | - | ||||||
| 201 | - | |||||||
| 202 | fnt.resolve(oldMask); | - | ||||||
| 203 | } | - | ||||||
| 204 | - | |||||||
| 205 | void QTextFormatPrivate::recalcFont() const | - | ||||||
| 206 | { | - | ||||||
| 207 | - | |||||||
| 208 | QFont f; | - | ||||||
| 209 | - | |||||||
| 210 | bool hasSpacingInformation = false; | - | ||||||
| 211 | QFont::SpacingType spacingType = QFont::PercentageSpacing; | - | ||||||
| 212 | qreal letterSpacing = 0.0; | - | ||||||
| 213 | - | |||||||
| 214 | for (int i = 0; i < props.count(); ++i) { | - | ||||||
| 215 | switch (props.at(i).key) { | - | ||||||
| 216 | case QTextFormat::FontFamily: | - | ||||||
| 217 | f.setFamily(props.at(i).value.toString()); | - | ||||||
| 218 | break; | - | ||||||
| 219 | case QTextFormat::FontPointSize: | - | ||||||
| 220 | f.setPointSizeF(props.at(i).value.toReal()); | - | ||||||
| 221 | break; | - | ||||||
| 222 | case QTextFormat::FontPixelSize: | - | ||||||
| 223 | f.setPixelSize(props.at(i).value.toInt()); | - | ||||||
| 224 | break; | - | ||||||
| 225 | case QTextFormat::FontWeight: { | - | ||||||
| 226 | const QVariant weightValue = props.at(i).value; | - | ||||||
| 227 | int weight = weightValue.toInt(); | - | ||||||
| 228 | if (weight >= 0 && weightValue.isValid()) | - | ||||||
| 229 | f.setWeight(weight); | - | ||||||
| 230 | break; } | - | ||||||
| 231 | case QTextFormat::FontItalic: | - | ||||||
| 232 | f.setItalic(props.at(i).value.toBool()); | - | ||||||
| 233 | break; | - | ||||||
| 234 | case QTextFormat::FontUnderline: | - | ||||||
| 235 | if (! hasProperty(QTextFormat::TextUnderlineStyle)) | - | ||||||
| 236 | f.setUnderline(props.at(i).value.toBool()); | - | ||||||
| 237 | break; | - | ||||||
| 238 | case QTextFormat::TextUnderlineStyle: | - | ||||||
| 239 | f.setUnderline(static_cast<QTextCharFormat::UnderlineStyle>(props.at(i).value.toInt()) == QTextCharFormat::SingleUnderline); | - | ||||||
| 240 | break; | - | ||||||
| 241 | case QTextFormat::FontOverline: | - | ||||||
| 242 | f.setOverline(props.at(i).value.toBool()); | - | ||||||
| 243 | break; | - | ||||||
| 244 | case QTextFormat::FontStrikeOut: | - | ||||||
| 245 | f.setStrikeOut(props.at(i).value.toBool()); | - | ||||||
| 246 | break; | - | ||||||
| 247 | case QTextFormat::FontLetterSpacingType: | - | ||||||
| 248 | spacingType = static_cast<QFont::SpacingType>(props.at(i).value.toInt()); | - | ||||||
| 249 | hasSpacingInformation = true; | - | ||||||
| 250 | break; | - | ||||||
| 251 | case QTextFormat::FontLetterSpacing: | - | ||||||
| 252 | letterSpacing = props.at(i).value.toReal(); | - | ||||||
| 253 | hasSpacingInformation = true; | - | ||||||
| 254 | break; | - | ||||||
| 255 | case QTextFormat::FontWordSpacing: | - | ||||||
| 256 | f.setWordSpacing(props.at(i).value.toReal()); | - | ||||||
| 257 | break; | - | ||||||
| 258 | case QTextFormat::FontCapitalization: | - | ||||||
| 259 | f.setCapitalization(static_cast<QFont::Capitalization> (props.at(i).value.toInt())); | - | ||||||
| 260 | break; | - | ||||||
| 261 | case QTextFormat::FontFixedPitch: { | - | ||||||
| 262 | const bool value = props.at(i).value.toBool(); | - | ||||||
| 263 | if (f.fixedPitch() != value) | - | ||||||
| 264 | f.setFixedPitch(value); | - | ||||||
| 265 | break; } | - | ||||||
| 266 | case QTextFormat::FontStretch: | - | ||||||
| 267 | f.setStretch(props.at(i).value.toInt()); | - | ||||||
| 268 | break; | - | ||||||
| 269 | case QTextFormat::FontStyleHint: | - | ||||||
| 270 | f.setStyleHint(static_cast<QFont::StyleHint>(props.at(i).value.toInt()), f.styleStrategy()); | - | ||||||
| 271 | break; | - | ||||||
| 272 | case QTextFormat::FontHintingPreference: | - | ||||||
| 273 | f.setHintingPreference(static_cast<QFont::HintingPreference>(props.at(i).value.toInt())); | - | ||||||
| 274 | break; | - | ||||||
| 275 | case QTextFormat::FontStyleStrategy: | - | ||||||
| 276 | f.setStyleStrategy(static_cast<QFont::StyleStrategy>(props.at(i).value.toInt())); | - | ||||||
| 277 | break; | - | ||||||
| 278 | case QTextFormat::FontKerning: | - | ||||||
| 279 | f.setKerning(props.at(i).value.toBool()); | - | ||||||
| 280 | break; | - | ||||||
| 281 | default: | - | ||||||
| 282 | break; | - | ||||||
| 283 | } | - | ||||||
| 284 | } | - | ||||||
| 285 | - | |||||||
| 286 | if (hasSpacingInformation) | - | ||||||
| 287 | f.setLetterSpacing(spacingType, letterSpacing); | - | ||||||
| 288 | - | |||||||
| 289 | fnt = f; | - | ||||||
| 290 | fontDirty = false; | - | ||||||
| 291 | } | - | ||||||
| 292 | - | |||||||
| 293 | - | |||||||
| 294 | __attribute__((visibility("default"))) QDataStream &operator<<(QDataStream &stream, const QTextFormat &fmt) | - | ||||||
| 295 | { | - | ||||||
| 296 | stream << fmt.format_type << fmt.properties(); | - | ||||||
| 297 | return stream; | - | ||||||
| 298 | } | - | ||||||
| 299 | - | |||||||
| 300 | __attribute__((visibility("default"))) QDataStream &operator>>(QDataStream &stream, QTextFormat &fmt) | - | ||||||
| 301 | { | - | ||||||
| 302 | QMap<qint32, QVariant> properties; | - | ||||||
| 303 | stream >> fmt.format_type >> properties; | - | ||||||
| 304 | - | |||||||
| 305 | - | |||||||
| 306 | - | |||||||
| 307 | if(!fmt.d) | - | ||||||
| 308 | fmt.d = new QTextFormatPrivate(); | - | ||||||
| 309 | - | |||||||
| 310 | for (QMap<qint32, QVariant>::ConstIterator it = properties.constBegin(); | - | ||||||
| 311 | it != properties.constEnd(); ++it) | - | ||||||
| 312 | fmt.d->insertProperty(it.key(), it.value()); | - | ||||||
| 313 | - | |||||||
| 314 | return stream; | - | ||||||
| 315 | } | - | ||||||
| 316 | QTextFormat::QTextFormat() | - | ||||||
| 317 | : format_type(InvalidFormat) | - | ||||||
| 318 | { | - | ||||||
| 319 | } | - | ||||||
| 320 | - | |||||||
| 321 | - | |||||||
| 322 | - | |||||||
| 323 | - | |||||||
| 324 | - | |||||||
| 325 | - | |||||||
| 326 | QTextFormat::QTextFormat(int type) | - | ||||||
| 327 | : format_type(type) | - | ||||||
| 328 | { | - | ||||||
| 329 | } | - | ||||||
| 330 | QTextFormat::QTextFormat(const QTextFormat &rhs) | - | ||||||
| 331 | : d(rhs.d), format_type(rhs.format_type) | - | ||||||
| 332 | { | - | ||||||
| 333 | } | - | ||||||
| 334 | - | |||||||
| 335 | - | |||||||
| 336 | - | |||||||
| 337 | - | |||||||
| 338 | - | |||||||
| 339 | - | |||||||
| 340 | - | |||||||
| 341 | QTextFormat &QTextFormat::operator=(const QTextFormat &rhs) | - | ||||||
| 342 | { | - | ||||||
| 343 | d = rhs.d; | - | ||||||
| 344 | format_type = rhs.format_type; | - | ||||||
| 345 | return *this; | - | ||||||
| 346 | } | - | ||||||
| 347 | QTextFormat::~QTextFormat() | - | ||||||
| 348 | { | - | ||||||
| 349 | } | - | ||||||
| 350 | - | |||||||
| 351 | - | |||||||
| 352 | - | |||||||
| 353 | - | |||||||
| 354 | - | |||||||
| 355 | QTextFormat::operator QVariant() const | - | ||||||
| 356 | { | - | ||||||
| 357 | return QVariant(QVariant::TextFormat, this); | - | ||||||
| 358 | } | - | ||||||
| 359 | - | |||||||
| 360 | - | |||||||
| 361 | - | |||||||
| 362 | - | |||||||
| 363 | - | |||||||
| 364 | void QTextFormat::merge(const QTextFormat &other) | - | ||||||
| 365 | { | - | ||||||
| 366 | if (format_type != other.format_type) | - | ||||||
| 367 | return; | - | ||||||
| 368 | - | |||||||
| 369 | if (!d) { | - | ||||||
| 370 | d = other.d; | - | ||||||
| 371 | return; | - | ||||||
| 372 | } | - | ||||||
| 373 | - | |||||||
| 374 | if (!other.d) | - | ||||||
| 375 | return; | - | ||||||
| 376 | - | |||||||
| 377 | QTextFormatPrivate *d = this->d; | - | ||||||
| 378 | - | |||||||
| 379 | const QVector<QTextFormatPrivate::Property> &otherProps = other.d->props; | - | ||||||
| 380 | d->props.reserve(d->props.size() + otherProps.size()); | - | ||||||
| 381 | for (int i = 0; i < otherProps.count(); ++i) { | - | ||||||
| 382 | const QTextFormatPrivate::Property &p = otherProps.at(i); | - | ||||||
| 383 | d->insertProperty(p.key, p.value); | - | ||||||
| 384 | } | - | ||||||
| 385 | } | - | ||||||
| 386 | - | |||||||
| 387 | - | |||||||
| 388 | - | |||||||
| 389 | - | |||||||
| 390 | - | |||||||
| 391 | - | |||||||
| 392 | int QTextFormat::type() const | - | ||||||
| 393 | { | - | ||||||
| 394 | return format_type; | - | ||||||
| 395 | } | - | ||||||
| 396 | - | |||||||
| 397 | - | |||||||
| 398 | - | |||||||
| 399 | - | |||||||
| 400 | QTextBlockFormat QTextFormat::toBlockFormat() const | - | ||||||
| 401 | { | - | ||||||
| 402 | return QTextBlockFormat(*this); | - | ||||||
| 403 | } | - | ||||||
| 404 | - | |||||||
| 405 | - | |||||||
| 406 | - | |||||||
| 407 | - | |||||||
| 408 | QTextCharFormat QTextFormat::toCharFormat() const | - | ||||||
| 409 | { | - | ||||||
| 410 | return QTextCharFormat(*this); | - | ||||||
| 411 | } | - | ||||||
| 412 | - | |||||||
| 413 | - | |||||||
| 414 | - | |||||||
| 415 | - | |||||||
| 416 | QTextListFormat QTextFormat::toListFormat() const | - | ||||||
| 417 | { | - | ||||||
| 418 | return QTextListFormat(*this); | - | ||||||
| 419 | } | - | ||||||
| 420 | - | |||||||
| 421 | - | |||||||
| 422 | - | |||||||
| 423 | - | |||||||
| 424 | QTextTableFormat QTextFormat::toTableFormat() const | - | ||||||
| 425 | { | - | ||||||
| 426 | return QTextTableFormat(*this); | - | ||||||
| 427 | } | - | ||||||
| 428 | - | |||||||
| 429 | - | |||||||
| 430 | - | |||||||
| 431 | - | |||||||
| 432 | QTextFrameFormat QTextFormat::toFrameFormat() const | - | ||||||
| 433 | { | - | ||||||
| 434 | return QTextFrameFormat(*this); | - | ||||||
| 435 | } | - | ||||||
| 436 | - | |||||||
| 437 | - | |||||||
| 438 | - | |||||||
| 439 | - | |||||||
| 440 | QTextImageFormat QTextFormat::toImageFormat() const | - | ||||||
| 441 | { | - | ||||||
| 442 | return QTextImageFormat(*this); | - | ||||||
| 443 | } | - | ||||||
| 444 | - | |||||||
| 445 | - | |||||||
| 446 | - | |||||||
| 447 | - | |||||||
| 448 | - | |||||||
| 449 | - | |||||||
| 450 | QTextTableCellFormat QTextFormat::toTableCellFormat() const | - | ||||||
| 451 | { | - | ||||||
| 452 | return QTextTableCellFormat(*this); | - | ||||||
| 453 | } | - | ||||||
| 454 | bool QTextFormat::boolProperty(int propertyId) const | - | ||||||
| 455 | { | - | ||||||
| 456 | if (!d) | - | ||||||
| 457 | return false; | - | ||||||
| 458 | const QVariant prop = d->property(propertyId); | - | ||||||
| 459 | if (prop.userType() != QVariant::Bool) | - | ||||||
| 460 | return false; | - | ||||||
| 461 | return prop.toBool(); | - | ||||||
| 462 | } | - | ||||||
| 463 | int QTextFormat::intProperty(int propertyId) const | - | ||||||
| 464 | { | - | ||||||
| 465 | - | |||||||
| 466 | int def = (propertyId == QTextFormat::LayoutDirection) ? int(Qt::LayoutDirectionAuto) : 0; | - | ||||||
| 467 | - | |||||||
| 468 | if (!d) | - | ||||||
| 469 | return def; | - | ||||||
| 470 | const QVariant prop = d->property(propertyId); | - | ||||||
| 471 | if (prop.userType() != QVariant::Int) | - | ||||||
| 472 | return def; | - | ||||||
| 473 | return prop.toInt(); | - | ||||||
| 474 | } | - | ||||||
| 475 | qreal QTextFormat::doubleProperty(int propertyId) const | - | ||||||
| 476 | { | - | ||||||
| 477 | if (!d) | - | ||||||
| 478 | return 0.; | - | ||||||
| 479 | const QVariant prop = d->property(propertyId); | - | ||||||
| 480 | if (prop.userType() != QVariant::Double && prop.userType() != QMetaType::Float) | - | ||||||
| 481 | return 0.; | - | ||||||
| 482 | return qvariant_cast<qreal>(prop); | - | ||||||
| 483 | } | - | ||||||
| 484 | QString QTextFormat::stringProperty(int propertyId) const | - | ||||||
| 485 | { | - | ||||||
| 486 | if (!d) | - | ||||||
| 487 | return QString(); | - | ||||||
| 488 | const QVariant prop = d->property(propertyId); | - | ||||||
| 489 | if (prop.userType() != QVariant::String) | - | ||||||
| 490 | return QString(); | - | ||||||
| 491 | return prop.toString(); | - | ||||||
| 492 | } | - | ||||||
| 493 | QColor QTextFormat::colorProperty(int propertyId) const | - | ||||||
| 494 | { | - | ||||||
| 495 | if (!d) | - | ||||||
| 496 | return QColor(); | - | ||||||
| 497 | const QVariant prop = d->property(propertyId); | - | ||||||
| 498 | if (prop.userType() != QVariant::Color) | - | ||||||
| 499 | return QColor(); | - | ||||||
| 500 | return qvariant_cast<QColor>(prop); | - | ||||||
| 501 | } | - | ||||||
| 502 | QPen QTextFormat::penProperty(int propertyId) const | - | ||||||
| 503 | { | - | ||||||
| 504 | if (!d) | - | ||||||
| 505 | return QPen(Qt::NoPen); | - | ||||||
| 506 | const QVariant prop = d->property(propertyId); | - | ||||||
| 507 | if (prop.userType() != QVariant::Pen) | - | ||||||
| 508 | return QPen(Qt::NoPen); | - | ||||||
| 509 | return qvariant_cast<QPen>(prop); | - | ||||||
| 510 | } | - | ||||||
| 511 | QBrush QTextFormat::brushProperty(int propertyId) const | - | ||||||
| 512 | { | - | ||||||
| 513 | if (!d) | - | ||||||
| 514 | return QBrush(Qt::NoBrush); | - | ||||||
| 515 | const QVariant prop = d->property(propertyId); | - | ||||||
| 516 | if (prop.userType() != QVariant::Brush) | - | ||||||
| 517 | return QBrush(Qt::NoBrush); | - | ||||||
| 518 | return qvariant_cast<QBrush>(prop); | - | ||||||
| 519 | } | - | ||||||
| 520 | - | |||||||
| 521 | - | |||||||
| 522 | - | |||||||
| 523 | - | |||||||
| 524 | - | |||||||
| 525 | - | |||||||
| 526 | - | |||||||
| 527 | QTextLength QTextFormat::lengthProperty(int propertyId) const | - | ||||||
| 528 | { | - | ||||||
| 529 | if (!d) | - | ||||||
| 530 | return QTextLength(); | - | ||||||
| 531 | return qvariant_cast<QTextLength>(d->property(propertyId)); | - | ||||||
| 532 | } | - | ||||||
| 533 | QVector<QTextLength> QTextFormat::lengthVectorProperty(int propertyId) const | - | ||||||
| 534 | { | - | ||||||
| 535 | QVector<QTextLength> vector; | - | ||||||
| 536 | if (!d) | - | ||||||
| 537 | return vector; | - | ||||||
| 538 | const QVariant prop = d->property(propertyId); | - | ||||||
| 539 | if (prop.userType() != QVariant::List) | - | ||||||
| 540 | return vector; | - | ||||||
| 541 | - | |||||||
| 542 | QList<QVariant> propertyList = prop.toList(); | - | ||||||
| 543 | for (int i=0; i<propertyList.size(); ++i) { | - | ||||||
| 544 | QVariant var = propertyList.at(i); | - | ||||||
| 545 | if (var.userType() == QVariant::TextLength) | - | ||||||
| 546 | vector.append(qvariant_cast<QTextLength>(var)); | - | ||||||
| 547 | } | - | ||||||
| 548 | - | |||||||
| 549 | return vector; | - | ||||||
| 550 | } | - | ||||||
| 551 | - | |||||||
| 552 | - | |||||||
| 553 | - | |||||||
| 554 | - | |||||||
| 555 | - | |||||||
| 556 | - | |||||||
| 557 | QVariant QTextFormat::property(int propertyId) const | - | ||||||
| 558 | { | - | ||||||
| 559 | return d ? d->property(propertyId) : QVariant(); | - | ||||||
| 560 | } | - | ||||||
| 561 | - | |||||||
| 562 | - | |||||||
| 563 | - | |||||||
| 564 | - | |||||||
| 565 | - | |||||||
| 566 | - | |||||||
| 567 | void QTextFormat::setProperty(int propertyId, const QVariant &value) | - | ||||||
| 568 | { | - | ||||||
| 569 | if (!d) | - | ||||||
| 570 | d = new QTextFormatPrivate; | - | ||||||
| 571 | if (!value.isValid()) | - | ||||||
| 572 | clearProperty(propertyId); | - | ||||||
| 573 | else | - | ||||||
| 574 | d->insertProperty(propertyId, value); | - | ||||||
| 575 | } | - | ||||||
| 576 | - | |||||||
| 577 | - | |||||||
| 578 | - | |||||||
| 579 | - | |||||||
| 580 | - | |||||||
| 581 | - | |||||||
| 582 | void QTextFormat::setProperty(int propertyId, const QVector<QTextLength> &value) | - | ||||||
| 583 | { | - | ||||||
| 584 | if (!d) | - | ||||||
| 585 | d = new QTextFormatPrivate; | - | ||||||
| 586 | QVariantList list; | - | ||||||
| 587 | const int numValues = value.size(); | - | ||||||
| 588 | list.reserve(numValues); | - | ||||||
| 589 | for (int i = 0; i < numValues; ++i) | - | ||||||
| 590 | list << value.at(i); | - | ||||||
| 591 | d->insertProperty(propertyId, list); | - | ||||||
| 592 | } | - | ||||||
| 593 | - | |||||||
| 594 | - | |||||||
| 595 | - | |||||||
| 596 | - | |||||||
| 597 | - | |||||||
| 598 | - | |||||||
| 599 | void QTextFormat::clearProperty(int propertyId) | - | ||||||
| 600 | { | - | ||||||
| 601 | if (!d) | - | ||||||
| 602 | return; | - | ||||||
| 603 | d->clearProperty(propertyId); | - | ||||||
| 604 | } | - | ||||||
| 605 | int QTextFormat::objectIndex() const | - | ||||||
| 606 | { | - | ||||||
| 607 | if (!d) | - | ||||||
| 608 | return -1; | - | ||||||
| 609 | const QVariant prop = d->property(ObjectIndex); | - | ||||||
| 610 | if (prop.userType() != QVariant::Int) | - | ||||||
| 611 | return -1; | - | ||||||
| 612 | return prop.toInt(); | - | ||||||
| 613 | } | - | ||||||
| 614 | void QTextFormat::setObjectIndex(int o) | - | ||||||
| 615 | { | - | ||||||
| 616 | if (o == -1) { | - | ||||||
| 617 | if (d) | - | ||||||
| 618 | d->clearProperty(ObjectIndex); | - | ||||||
| 619 | } else { | - | ||||||
| 620 | if (!d) | - | ||||||
| 621 | d = new QTextFormatPrivate; | - | ||||||
| 622 | - | |||||||
| 623 | d->insertProperty(ObjectIndex, o); | - | ||||||
| 624 | } | - | ||||||
| 625 | } | - | ||||||
| 626 | - | |||||||
| 627 | - | |||||||
| 628 | - | |||||||
| 629 | - | |||||||
| 630 | - | |||||||
| 631 | - | |||||||
| 632 | - | |||||||
| 633 | bool QTextFormat::hasProperty(int propertyId) const | - | ||||||
| 634 | { | - | ||||||
| 635 | return d ? d->hasProperty(propertyId) : false; | - | ||||||
| 636 | } | - | ||||||
| 637 | QMap<int, QVariant> QTextFormat::properties() const | - | ||||||
| 638 | { | - | ||||||
| 639 | QMap<int, QVariant> map; | - | ||||||
| 640 | if (d) { | - | ||||||
| 641 | for (int i = 0; i < d->props.count(); ++i) | - | ||||||
| 642 | map.insert(d->props.at(i).key, d->props.at(i).value); | - | ||||||
| 643 | } | - | ||||||
| 644 | return map; | - | ||||||
| 645 | } | - | ||||||
| 646 | - | |||||||
| 647 | - | |||||||
| 648 | - | |||||||
| 649 | - | |||||||
| 650 | - | |||||||
| 651 | int QTextFormat::propertyCount() const | - | ||||||
| 652 | { | - | ||||||
| 653 | return d ? d->props.count() : 0; | - | ||||||
| 654 | } | - | ||||||
| 655 | bool QTextFormat::operator==(const QTextFormat &rhs) const | - | ||||||
| 656 | { | - | ||||||
| 657 | if (format_type != rhs.format_type) | - | ||||||
| 658 | return false; | - | ||||||
| 659 | - | |||||||
| 660 | if (d == rhs.d) | - | ||||||
| 661 | return true; | - | ||||||
| 662 | - | |||||||
| 663 | if (d && d->props.isEmpty() && !rhs.d) | - | ||||||
| 664 | return true; | - | ||||||
| 665 | - | |||||||
| 666 | if (!d && rhs.d && rhs.d->props.isEmpty()) | - | ||||||
| 667 | return true; | - | ||||||
| 668 | - | |||||||
| 669 | if (!d || !rhs.d) | - | ||||||
| 670 | return false; | - | ||||||
| 671 | - | |||||||
| 672 | return *d == *rhs.d; | - | ||||||
| 673 | } | - | ||||||
| 674 | QTextCharFormat::QTextCharFormat() : QTextFormat(CharFormat) {} | - | ||||||
| 675 | QTextCharFormat::QTextCharFormat(const QTextFormat &fmt) | - | ||||||
| 676 | : QTextFormat(fmt) | - | ||||||
| 677 | { | - | ||||||
| 678 | } | - | ||||||
| 679 | bool QTextCharFormat::fontUnderline() const | - | ||||||
| 680 | { | - | ||||||
| 681 | if (hasProperty(TextUnderlineStyle)) | - | ||||||
| 682 | return underlineStyle() == SingleUnderline; | - | ||||||
| 683 | return boolProperty(FontUnderline); | - | ||||||
| 684 | } | - | ||||||
| 685 | void QTextCharFormat::setUnderlineStyle(UnderlineStyle style) | - | ||||||
| 686 | { | - | ||||||
| 687 | setProperty(TextUnderlineStyle, style); | - | ||||||
| 688 | - | |||||||
| 689 | setProperty(FontUnderline, style == SingleUnderline); | - | ||||||
| 690 | } | - | ||||||
| 691 | QString QTextCharFormat::anchorName() const | - | ||||||
| 692 | { | - | ||||||
| 693 | QVariant prop = property(AnchorName); | - | ||||||
| 694 | if (prop.userType() == QVariant::StringList) | - | ||||||
| 695 | return prop.toStringList().value(0); | - | ||||||
| 696 | else if (prop.userType() != QVariant::String) | - | ||||||
| 697 | return QString(); | - | ||||||
| 698 | return prop.toString(); | - | ||||||
| 699 | } | - | ||||||
| 700 | QStringList QTextCharFormat::anchorNames() const | - | ||||||
| 701 | { | - | ||||||
| 702 | QVariant prop = property(AnchorName); | - | ||||||
| 703 | if (prop.userType() == QVariant::StringList) | - | ||||||
| 704 | return prop.toStringList(); | - | ||||||
| 705 | else if (prop.userType() != QVariant::String) | - | ||||||
| 706 | return QStringList(); | - | ||||||
| 707 | return QStringList(prop.toString()); | - | ||||||
| 708 | } | - | ||||||
| 709 | void QTextCharFormat::setFont(const QFont &font) | - | ||||||
| 710 | { | - | ||||||
| 711 | setFont(font, FontPropertiesAll); | - | ||||||
| 712 | } | - | ||||||
| 713 | void QTextCharFormat::setFont(const QFont &font, FontPropertiesInheritanceBehavior behavior) | - | ||||||
| 714 | { | - | ||||||
| 715 | const uint mask = behavior == FontPropertiesAll ? uint(QFont::AllPropertiesResolved) | - | ||||||
| 716 | : font.resolve(); | - | ||||||
| 717 | - | |||||||
| 718 | if (mask & QFont::FamilyResolved) | - | ||||||
| 719 | setFontFamily(font.family()); | - | ||||||
| 720 | if (mask & QFont::SizeResolved) { | - | ||||||
| 721 | const qreal pointSize = font.pointSizeF(); | - | ||||||
| 722 | if (pointSize > 0) { | - | ||||||
| 723 | setFontPointSize(pointSize); | - | ||||||
| 724 | } else { | - | ||||||
| 725 | const int pixelSize = font.pixelSize(); | - | ||||||
| 726 | if (pixelSize > 0) | - | ||||||
| 727 | setProperty(QTextFormat::FontPixelSize, pixelSize); | - | ||||||
| 728 | } | - | ||||||
| 729 | } | - | ||||||
| 730 | - | |||||||
| 731 | if (mask & QFont::WeightResolved) | - | ||||||
| 732 | setFontWeight(font.weight()); | - | ||||||
| 733 | if (mask & QFont::StyleResolved) | - | ||||||
| 734 | setFontItalic(font.style() != QFont::StyleNormal); | - | ||||||
| 735 | if (mask & QFont::UnderlineResolved) | - | ||||||
| 736 | setUnderlineStyle(font.underline() ? SingleUnderline : NoUnderline); | - | ||||||
| 737 | if (mask & QFont::OverlineResolved) | - | ||||||
| 738 | setFontOverline(font.overline()); | - | ||||||
| 739 | if (mask & QFont::StrikeOutResolved) | - | ||||||
| 740 | setFontStrikeOut(font.strikeOut()); | - | ||||||
| 741 | if (mask & QFont::FixedPitchResolved) | - | ||||||
| 742 | setFontFixedPitch(font.fixedPitch()); | - | ||||||
| 743 | if (mask & QFont::CapitalizationResolved) | - | ||||||
| 744 | setFontCapitalization(font.capitalization()); | - | ||||||
| 745 | if (mask & QFont::WordSpacingResolved) | - | ||||||
| 746 | setFontWordSpacing(font.wordSpacing()); | - | ||||||
| 747 | if (mask & QFont::LetterSpacingResolved) { | - | ||||||
| 748 | setFontLetterSpacingType(font.letterSpacingType()); | - | ||||||
| 749 | setFontLetterSpacing(font.letterSpacing()); | - | ||||||
| 750 | } | - | ||||||
| 751 | if (mask & QFont::StretchResolved) | - | ||||||
| 752 | setFontStretch(font.stretch()); | - | ||||||
| 753 | if (mask & QFont::StyleHintResolved) | - | ||||||
| 754 | setFontStyleHint(font.styleHint()); | - | ||||||
| 755 | if (mask & QFont::StyleStrategyResolved) | - | ||||||
| 756 | setFontStyleStrategy(font.styleStrategy()); | - | ||||||
| 757 | if (mask & QFont::HintingPreferenceResolved) | - | ||||||
| 758 | setFontHintingPreference(font.hintingPreference()); | - | ||||||
| 759 | if (mask & QFont::KerningResolved) | - | ||||||
| 760 | setFontKerning(font.kerning()); | - | ||||||
| 761 | } | - | ||||||
| 762 | - | |||||||
| 763 | - | |||||||
| 764 | - | |||||||
| 765 | - | |||||||
| 766 | QFont QTextCharFormat::font() const | - | ||||||
| 767 | { | - | ||||||
| 768 | return d ? d->font() : QFont(); | - | ||||||
| 769 | } | - | ||||||
| 770 | QTextBlockFormat::QTextBlockFormat() : QTextFormat(BlockFormat) {} | - | ||||||
| 771 | QTextBlockFormat::QTextBlockFormat(const QTextFormat &fmt) | - | ||||||
| 772 | : QTextFormat(fmt) | - | ||||||
| 773 | { | - | ||||||
| 774 | } | - | ||||||
| 775 | void QTextBlockFormat::setTabPositions(const QList<QTextOption::Tab> &tabs) | - | ||||||
| 776 | { | - | ||||||
| 777 | QList<QVariant> list; | - | ||||||
| 778 | list.reserve(tabs.count()); | - | ||||||
| 779 | QList<QTextOption::Tab>::ConstIterator iter = tabs.constBegin(); | - | ||||||
| 780 | while (iter != tabs.constEnd()) { | - | ||||||
| 781 | QVariant v; | - | ||||||
| 782 | v.setValue<QTextOption::Tab>(*iter); | - | ||||||
| 783 | list.append(v); | - | ||||||
| 784 | ++iter; | - | ||||||
| 785 | } | - | ||||||
| 786 | setProperty(TabPositions, list); | - | ||||||
| 787 | } | - | ||||||
| 788 | - | |||||||
| 789 | - | |||||||
| 790 | - | |||||||
| 791 | - | |||||||
| 792 | - | |||||||
| 793 | - | |||||||
| 794 | - | |||||||
| 795 | QList<QTextOption::Tab> QTextBlockFormat::tabPositions() const | - | ||||||
| 796 | { | - | ||||||
| 797 | QVariant variant = property(TabPositions); | - | ||||||
| 798 | if(variant.isNull()) | - | ||||||
| 799 | return QList<QTextOption::Tab>(); | - | ||||||
| 800 | QList<QTextOption::Tab> answer; | - | ||||||
| 801 | QList<QVariant> variantsList = qvariant_cast<QList<QVariant> >(variant); | - | ||||||
| 802 | QList<QVariant>::Iterator iter = variantsList.begin(); | - | ||||||
| 803 | answer.reserve(variantsList.count()); | - | ||||||
| 804 | while(iter != variantsList.end()) { | - | ||||||
| 805 | answer.append( qvariant_cast<QTextOption::Tab>(*iter)); | - | ||||||
| 806 | ++iter; | - | ||||||
| 807 | } | - | ||||||
| 808 | return answer; | - | ||||||
| 809 | } | - | ||||||
| 810 | QTextListFormat::QTextListFormat() | - | ||||||
| 811 | : QTextFormat(ListFormat) | - | ||||||
| 812 | { | - | ||||||
| 813 | setIndent(1); | - | ||||||
| 814 | } | - | ||||||
| 815 | QTextListFormat::QTextListFormat(const QTextFormat &fmt) | - | ||||||
| 816 | : QTextFormat(fmt) | - | ||||||
| 817 | { | - | ||||||
| 818 | } | - | ||||||
| 819 | QTextFrameFormat::QTextFrameFormat() : QTextFormat(FrameFormat) | - | ||||||
| 820 | { | - | ||||||
| 821 | setBorderStyle(BorderStyle_Outset); | - | ||||||
| 822 | setBorderBrush(Qt::darkGray); | - | ||||||
| 823 | } | - | ||||||
| 824 | QTextFrameFormat::QTextFrameFormat(const QTextFormat &fmt) | - | ||||||
| 825 | : QTextFormat(fmt) | - | ||||||
| 826 | { | - | ||||||
| 827 | } | - | ||||||
| 828 | void QTextFrameFormat::setMargin(qreal amargin) | - | ||||||
| 829 | { | - | ||||||
| 830 | setProperty(FrameMargin, amargin); | - | ||||||
| 831 | setProperty(FrameTopMargin, amargin); | - | ||||||
| 832 | setProperty(FrameBottomMargin, amargin); | - | ||||||
| 833 | setProperty(FrameLeftMargin, amargin); | - | ||||||
| 834 | setProperty(FrameRightMargin, amargin); | - | ||||||
| 835 | } | - | ||||||
| 836 | qreal QTextFrameFormat::topMargin() const | - | ||||||
| 837 | { | - | ||||||
| 838 | if (!hasProperty(FrameTopMargin)) | - | ||||||
| 839 | return margin(); | - | ||||||
| 840 | return doubleProperty(FrameTopMargin); | - | ||||||
| 841 | } | - | ||||||
| 842 | qreal QTextFrameFormat::bottomMargin() const | - | ||||||
| 843 | { | - | ||||||
| 844 | if (!hasProperty(FrameBottomMargin)) | - | ||||||
| 845 | return margin(); | - | ||||||
| 846 | return doubleProperty(FrameBottomMargin); | - | ||||||
| 847 | } | - | ||||||
| 848 | qreal QTextFrameFormat::leftMargin() const | - | ||||||
| 849 | { | - | ||||||
| 850 | if (!hasProperty(FrameLeftMargin)) | - | ||||||
| 851 | return margin(); | - | ||||||
| 852 | return doubleProperty(FrameLeftMargin); | - | ||||||
| 853 | } | - | ||||||
| 854 | qreal QTextFrameFormat::rightMargin() const | - | ||||||
| 855 | { | - | ||||||
| 856 | if (!hasProperty(FrameRightMargin)) | - | ||||||
| 857 | return margin(); | - | ||||||
| 858 | return doubleProperty(FrameRightMargin); | - | ||||||
| 859 | } | - | ||||||
| 860 | QTextTableFormat::QTextTableFormat() | - | ||||||
| 861 | : QTextFrameFormat() | - | ||||||
| 862 | { | - | ||||||
| 863 | setObjectType(TableObject); | - | ||||||
| 864 | setCellSpacing(2); | - | ||||||
| 865 | setBorder(1); | - | ||||||
| 866 | } | - | ||||||
| 867 | QTextTableFormat::QTextTableFormat(const QTextFormat &fmt) | - | ||||||
| 868 | : QTextFrameFormat(fmt) | - | ||||||
| 869 | { | - | ||||||
| 870 | } | - | ||||||
| 871 | QTextImageFormat::QTextImageFormat() : QTextCharFormat() { setObjectType(ImageObject); } | - | ||||||
| 872 | QTextImageFormat::QTextImageFormat(const QTextFormat &fmt) | - | ||||||
| 873 | : QTextCharFormat(fmt) | - | ||||||
| 874 | { | - | ||||||
| 875 | } | - | ||||||
| 876 | QTextTableCellFormat::QTextTableCellFormat() | - | ||||||
| 877 | : QTextCharFormat() | - | ||||||
| 878 | { | - | ||||||
| 879 | setObjectType(TableCellObject); | - | ||||||
| 880 | } | - | ||||||
| 881 | QTextTableCellFormat::QTextTableCellFormat(const QTextFormat &fmt) | - | ||||||
| 882 | : QTextCharFormat(fmt) | - | ||||||
| 883 | { | - | ||||||
| 884 | } | - | ||||||
| 885 | QTextFormatCollection::QTextFormatCollection(const QTextFormatCollection &rhs) | - | ||||||
| 886 | { | - | ||||||
| 887 | formats = rhs.formats; | - | ||||||
| 888 | objFormats = rhs.objFormats; | - | ||||||
| 889 | } | - | ||||||
| 890 | - | |||||||
| 891 | QTextFormatCollection &QTextFormatCollection::operator=(const QTextFormatCollection &rhs) | - | ||||||
| 892 | { | - | ||||||
| 893 | formats = rhs.formats; | - | ||||||
| 894 | objFormats = rhs.objFormats; | - | ||||||
| 895 | return *this; | - | ||||||
| 896 | } | - | ||||||
| 897 | - | |||||||
| 898 | QTextFormatCollection::~QTextFormatCollection() | - | ||||||
| 899 | { | - | ||||||
| 900 | } | - | ||||||
| 901 | - | |||||||
| 902 | int QTextFormatCollection::indexForFormat(const QTextFormat &format) | - | ||||||
| 903 | { | - | ||||||
| 904 | uint hash = getHash(format.d, format.format_type); | - | ||||||
| 905 | QMultiHash<uint, int>::const_iterator i = hashes.constFind(hash); | - | ||||||
| 906 | while (i != hashes.constEnd() && i.key() == hash) { | - | ||||||
| 907 | if (formats.value(i.value()) == format) { | - | ||||||
| 908 | return i.value(); | - | ||||||
| 909 | } | - | ||||||
| 910 | ++i; | - | ||||||
| 911 | } | - | ||||||
| 912 | - | |||||||
| 913 | int idx = formats.size(); | - | ||||||
| 914 | formats.append(format); | - | ||||||
| 915 | - | |||||||
| 916 | if (true){ | - | ||||||
| 917 | QTextFormat &f = formats.last(); | - | ||||||
| 918 | if (!f.d) | - | ||||||
| 919 | f.d = new QTextFormatPrivate; | - | ||||||
| 920 | f.d->resolveFont(defaultFnt); | - | ||||||
| 921 | - | |||||||
| 922 | if (!hashes.contains(hash, idx)) | - | ||||||
| 923 | hashes.insert(hash, idx); | - | ||||||
| 924 | - | |||||||
| 925 | } else { dead code: { formats.pop_back(); qt_noop(); } | - | ||||||
| 926 | formats.pop_back(); dead code: { formats.pop_back(); qt_noop(); } | - | ||||||
| 927 | qt_noop(); dead code: { formats.pop_back(); qt_noop(); } | - | ||||||
| 928 | } dead code: { formats.pop_back(); qt_noop(); } | - | ||||||
| 929 | return idx; | - | ||||||
| 930 | } | - | ||||||
| 931 | - | |||||||
| 932 | bool QTextFormatCollection::hasFormatCached(const QTextFormat &format) const | - | ||||||
| 933 | { | - | ||||||
| 934 | uint hash = getHash(format.d, format.format_type); | - | ||||||
| 935 | QMultiHash<uint, int>::const_iterator i = hashes.constFind(hash); | - | ||||||
| 936 | while (i != hashes.constEnd() && i.key() == hash) { | - | ||||||
| 937 | if (formats.value(i.value()) == format) { | - | ||||||
| 938 | return true; | - | ||||||
| 939 | } | - | ||||||
| 940 | ++i; | - | ||||||
| 941 | } | - | ||||||
| 942 | return false; | - | ||||||
| 943 | } | - | ||||||
| 944 | - | |||||||
| 945 | int QTextFormatCollection::objectFormatIndex(int objectIndex) const | - | ||||||
| 946 | { | - | ||||||
| 947 | if (objectIndex == -1) | - | ||||||
| 948 | return -1; | - | ||||||
| 949 | return objFormats.at(objectIndex); | - | ||||||
| 950 | } | - | ||||||
| 951 | - | |||||||
| 952 | void QTextFormatCollection::setObjectFormatIndex(int objectIndex, int formatIndex) | - | ||||||
| 953 | { | - | ||||||
| 954 | objFormats[objectIndex] = formatIndex; | - | ||||||
| 955 | } | - | ||||||
| 956 | - | |||||||
| 957 | int QTextFormatCollection::createObjectIndex(const QTextFormat &f) | - | ||||||
| 958 | { | - | ||||||
| 959 | const int objectIndex = objFormats.size(); | - | ||||||
| 960 | objFormats.append(indexForFormat(f)); | - | ||||||
| 961 | return objectIndex; | - | ||||||
| 962 | } | - | ||||||
| 963 | - | |||||||
| 964 | QTextFormat QTextFormatCollection::format(int idx) const | - | ||||||
| 965 | { | - | ||||||
| 966 | if (idx < 0 || idx >= formats.count()) | - | ||||||
| 967 | return QTextFormat(); | - | ||||||
| 968 | - | |||||||
| 969 | return formats.at(idx); | - | ||||||
| 970 | } | - | ||||||
| 971 | - | |||||||
| 972 | void QTextFormatCollection::setDefaultFont(const QFont &f) | - | ||||||
| 973 | { | - | ||||||
| 974 | defaultFnt = f; | - | ||||||
| 975 | for (int i = 0; i < formats.count()
| 0 | ||||||
| 976 | if (formats[.at(i].).d
| 0 | ||||||
| 977 | formats[i].d->resolveFont(defaultFnt); never executed: formats[i].d->resolveFont(defaultFnt); | 0 | ||||||
| 978 | } never executed: end of block | 0 | ||||||
| 979 | - | |||||||
| 980 | - | |||||||
| 981 | QDebug operator<<(QDebug dbg, const QTextLength &l) | - | ||||||
| 982 | { | - | ||||||
| 983 | QDebugStateSaver saver(dbg); | - | ||||||
| 984 | dbg.nospace() << "QTextLength(QTextLength::Type(" << l.type() << "))"; | - | ||||||
| 985 | return dbg; | - | ||||||
| 986 | } | - | ||||||
| 987 | - | |||||||
| 988 | QDebug operator<<(QDebug dbg, const QTextFormat &f) | - | ||||||
| 989 | { | - | ||||||
| 990 | QDebugStateSaver saver(dbg); | - | ||||||
| 991 | dbg.nospace() << "QTextFormat(QTextFormat::FormatType(" << f.type() << "))"; | - | ||||||
| 992 | return dbg; | - | ||||||
| 993 | } | - | ||||||
| 994 | - | |||||||
| 995 | - | |||||||
| 996 | - | |||||||
| 997 | - | |||||||
| Switch to Source code | Preprocessed file |