/*************************************************************************** * Copyright (C) 2006 by Tobias Koenig * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * ***************************************************************************/ #include "formatproperty.h" #include #include "styleinformation.h" using namespace OOO; FontFormatProperty::FontFormatProperty() : mFamily(QStringLiteral("Nimbus Sans L")) { } void FontFormatProperty::apply(QTextFormat *format) const { format->setProperty(QTextFormat::FontFamily, mFamily); } void FontFormatProperty::setFamily(const QString &name) { mFamily = name; } ParagraphFormatProperty::ParagraphFormatProperty() : mPageNumber(0) , mWritingMode(LRTB) , mAlignment(Qt::AlignLeft) , mHasAlignment(false) { } void ParagraphFormatProperty::apply(QTextFormat *format) const { if (mWritingMode == LRTB || mWritingMode == TBLR || mWritingMode == LR || mWritingMode == TB) format->setLayoutDirection(Qt::LeftToRight); else format->setLayoutDirection(Qt::RightToLeft); if (mHasAlignment) { static_cast(format)->setAlignment(mAlignment); } format->setProperty(QTextFormat::FrameWidth, 595); static_cast(format)->setLeftMargin(mLeftMargin); if (mBackgroundColor.isValid()) format->setBackground(mBackgroundColor); } void ParagraphFormatProperty::setPageNumber(int number) { mPageNumber = number; } void ParagraphFormatProperty::setWritingMode(WritingMode mode) { mWritingMode = mode; } bool ParagraphFormatProperty::writingModeIsRightToLeft() const { return ((mWritingMode == RLTB) || (mWritingMode == TBRL) || (mWritingMode == RL)); } void ParagraphFormatProperty::setTextAlignment(Qt::Alignment alignment) { mHasAlignment = true; mAlignment = alignment; } void ParagraphFormatProperty::setBackgroundColor(const QColor &color) { mBackgroundColor = color; } void ParagraphFormatProperty::setLeftMargin(const qreal margin) { mLeftMargin = margin; } TextFormatProperty::TextFormatProperty() : mStyleInformation(nullptr) , mHasFontSize(false) , mFontWeight(-1) , mFontStyle(-1) , mTextPosition(0) { } TextFormatProperty::TextFormatProperty(const StyleInformation *information) : mStyleInformation(information) , mHasFontSize(false) , mFontWeight(-1) , mFontStyle(-1) , mTextPosition(0) { } void TextFormatProperty::apply(QTextCharFormat *format) const { if (!mFontName.isEmpty()) { if (mStyleInformation) { const FontFormatProperty property = mStyleInformation->fontProperty(mFontName); property.apply(format); } } if (mFontWeight != -1) { QFont font = format->font(); font.setWeight(mFontWeight); format->setFont(font); } if (mHasFontSize) { QFont font = format->font(); font.setPointSize(mFontSize); format->setFont(font); } if (mFontStyle != -1) { QFont font = format->font(); font.setStyle((QFont::Style)mFontStyle); format->setFont(font); } if (mColor.isValid()) format->setForeground(mColor); if (mBackgroundColor.isValid()) format->setBackground(mBackgroundColor); // TODO: get FontFormatProperty and apply it // TODO: how to set the base line?!? } void TextFormatProperty::setFontSize(int size) { mHasFontSize = true; mFontSize = size; } void TextFormatProperty::setFontName(const QString &name) { mFontName = name; } void TextFormatProperty::setFontWeight(int weight) { mFontWeight = weight; } void TextFormatProperty::setFontStyle(int style) { mFontStyle = style; } void TextFormatProperty::setTextPosition(int position) { mTextPosition = position; } void TextFormatProperty::setColor(const QColor &color) { mColor = color; } void TextFormatProperty::setBackgroundColor(const QColor &color) { mBackgroundColor = color; } StyleFormatProperty::StyleFormatProperty() : mStyleInformation(nullptr) , mDefaultStyle(false) { } StyleFormatProperty::StyleFormatProperty(const StyleInformation *information) : mStyleInformation(information) , mDefaultStyle(false) { } void StyleFormatProperty::applyBlock(QTextBlockFormat *format) const { if (!mDefaultStyle && !mFamily.isEmpty() && mStyleInformation) { const StyleFormatProperty property = mStyleInformation->styleProperty(mFamily); property.applyBlock(format); } if (!mParentStyleName.isEmpty() && mStyleInformation) { const StyleFormatProperty property = mStyleInformation->styleProperty(mParentStyleName); property.applyBlock(format); } mParagraphFormat.apply(format); } void StyleFormatProperty::applyText(QTextCharFormat *format) const { if (!mDefaultStyle && !mFamily.isEmpty() && mStyleInformation) { const StyleFormatProperty property = mStyleInformation->styleProperty(mFamily); property.applyText(format); } if (!mParentStyleName.isEmpty() && mStyleInformation) { const StyleFormatProperty property = mStyleInformation->styleProperty(mParentStyleName); property.applyText(format); } mTextFormat.apply(format); } void StyleFormatProperty::applyTableColumn(QTextTableFormat *format) const { if (!mDefaultStyle && !mFamily.isEmpty() && mStyleInformation) { const StyleFormatProperty property = mStyleInformation->styleProperty(mFamily); property.applyTableColumn(format); } if (!mParentStyleName.isEmpty() && mStyleInformation) { const StyleFormatProperty property = mStyleInformation->styleProperty(mParentStyleName); property.applyTableColumn(format); } mTableColumnFormat.apply(format); } void StyleFormatProperty::applyTableCell(QTextBlockFormat *format) const { if (!mDefaultStyle && !mFamily.isEmpty() && mStyleInformation) { const StyleFormatProperty property = mStyleInformation->styleProperty(mFamily); property.applyTableCell(format); } if (!mParentStyleName.isEmpty() && mStyleInformation) { const StyleFormatProperty property = mStyleInformation->styleProperty(mParentStyleName); property.applyTableCell(format); } mTableCellFormat.apply(format); } void StyleFormatProperty::setParentStyleName(const QString &parentStyleName) { mParentStyleName = parentStyleName; } QString StyleFormatProperty::parentStyleName() const { return mParentStyleName; } void StyleFormatProperty::setFamily(const QString &family) { mFamily = family; } void StyleFormatProperty::setDefaultStyle(bool defaultStyle) { mDefaultStyle = defaultStyle; } void StyleFormatProperty::setMasterPageName(const QString &masterPageName) { mMasterPageName = masterPageName; } void StyleFormatProperty::setParagraphFormat(const ParagraphFormatProperty &format) { mParagraphFormat = format; } void StyleFormatProperty::setTextFormat(const TextFormatProperty &format) { mTextFormat = format; } void StyleFormatProperty::setTableColumnFormat(const TableColumnFormatProperty format) { mTableColumnFormat = format; } void StyleFormatProperty::setTableCellFormat(const TableCellFormatProperty &format) { mTableCellFormat = format; } PageFormatProperty::PageFormatProperty() : mHeight(0.0) , mWidth(0.0) { } void PageFormatProperty::apply(QTextFormat *format) const { format->setProperty(QTextFormat::BlockBottomMargin, mBottomMargin); format->setProperty(QTextFormat::BlockLeftMargin, mLeftMargin); format->setProperty(QTextFormat::BlockTopMargin, mTopMargin); format->setProperty(QTextFormat::BlockRightMargin, mRightMargin); format->setProperty(QTextFormat::FrameWidth, mWidth); format->setProperty(QTextFormat::FrameHeight, mHeight); } void PageFormatProperty::setPageUsage(PageUsage usage) { mPageUsage = usage; } void PageFormatProperty::setBottomMargin(double margin) { mBottomMargin = margin; } void PageFormatProperty::setLeftMargin(double margin) { mLeftMargin = margin; } void PageFormatProperty::setTopMargin(double margin) { mTopMargin = margin; } void PageFormatProperty::setRightMargin(double margin) { mRightMargin = margin; } void PageFormatProperty::setHeight(double height) { mHeight = height; } void PageFormatProperty::setWidth(double width) { mWidth = width; } void PageFormatProperty::setPrintOrientation(PrintOrientation orientation) { mPrintOrientation = orientation; } double PageFormatProperty::width() const { return mWidth; } double PageFormatProperty::height() const { return mHeight; } double PageFormatProperty::margin() const { return mLeftMargin; } ListFormatProperty::ListFormatProperty() : mType(Number) { mIndents.resize(10); } ListFormatProperty::ListFormatProperty(Type type) : mType(type) { mIndents.resize(10); } void ListFormatProperty::apply(QTextListFormat *format, int level) const { if (mType == Number) format->setStyle(QTextListFormat::ListDecimal); else { format->setStyle(QTextListFormat::ListDisc); if (level > 0 && level < 10) format->setIndent(qRound(mIndents[level])); } } void ListFormatProperty::addItem(int level, double indent) { if (level < 0 || level >= 10) return; mIndents[level] = indent; } TableColumnFormatProperty::TableColumnFormatProperty() : mWidth(0) , isValid(false) { } void TableColumnFormatProperty::apply(QTextTableFormat *format) const { if (!isValid) { return; } QVector lengths = format->columnWidthConstraints(); lengths.append(QTextLength(QTextLength::FixedLength, mWidth)); format->setColumnWidthConstraints(lengths); } void TableColumnFormatProperty::setWidth(double width) { mWidth = width; isValid = true; } TableCellFormatProperty::TableCellFormatProperty() : mPadding(0) , mHasAlignment(false) { } void TableCellFormatProperty::apply(QTextBlockFormat *format) const { if (mBackgroundColor.isValid()) format->setBackground(mBackgroundColor); if (mHasAlignment) format->setAlignment(mAlignment); } void TableCellFormatProperty::setBackgroundColor(const QColor &color) { mBackgroundColor = color; } void TableCellFormatProperty::setPadding(double padding) { mPadding = padding; } void TableCellFormatProperty::setAlignment(Qt::Alignment alignment) { mAlignment = alignment; mHasAlignment = true; }