/*************************************************************************** * This file is part of the Lime Report project * * Copyright (C) 2021 by Alexander Arin * * arin_a@bk.ru * * * ** GNU General Public License Usage ** * * * This library 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 3 of the License, or * * (at your option) any later version. * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * * * ** GNU Lesser General Public License ** * * * This library is free software: you can redistribute it and/or modify * * it under the terms of the GNU Lesser General Public License as * * published by the Free Software Foundation, either version 3 of the * * License, or (at your option) any later version. * * You should have received a copy of the GNU Lesser General Public * * License along with this library. * * If not, see . * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * ****************************************************************************/ #ifndef LRTEXTITEM_H #define LRTEXTITEM_H #include "lritemdesignintf.h" #include "lrpageinitintf.h" #include #include #include #include #include namespace LimeReport { class Tag; class TextItem: public ContentItemDesignIntf, IPageInit { Q_OBJECT Q_PROPERTY(QString content READ content WRITE setContent) Q_PROPERTY(int margin READ marginSize WRITE setMarginSize) Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment) Q_PROPERTY(AutoWidth autoWidth READ autoWidth WRITE setAutoWidth) Q_PROPERTY(bool autoHeight READ autoHeight WRITE setAutoHeight) Q_PROPERTY(QFont font READ font WRITE setTextItemFont) Q_PROPERTY(int backgroundOpacity READ opacity WRITE setBackgroundOpacity) Q_PROPERTY(BGMode backgroundMode READ backgroundMode WRITE setBackgroundModeProperty) Q_PROPERTY(QColor backgroundColor READ backgroundColor WRITE setBackgroundColorProperty) Q_PROPERTY(QColor fontColor READ fontColor WRITE setFontColorProperty) Q_PROPERTY(AngleType angle READ angle WRITE setAngle) Q_PROPERTY(int foregroundOpacity READ foregroundOpacity WRITE setForegroundOpacity) Q_PROPERTY(bool underlines READ underlines WRITE setUnderlines) Q_PROPERTY(bool adaptFontToSize READ adaptFontToSize WRITE setAdaptFontToSize) Q_PROPERTY(bool trimValue READ trimValue WRITE setTrimValue) Q_PROPERTY(int lineSpacing READ lineSpacing WRITE setLineSpacing) Q_PROPERTY(int underlineLineSize READ underlineLineSize WRITE setUnderlineLineSize) Q_PROPERTY(bool allowHTML READ allowHTML WRITE setAllowHTML) Q_PROPERTY(bool allowHTMLInFields READ allowHTMLInFields WRITE setAllowHTMLInFields) Q_PROPERTY(QString format READ format WRITE setFormat) Q_PROPERTY(ValueType valueType READ valueType WRITE setValueType) Q_PROPERTY(QString followTo READ followTo WRITE setFollowTo) Q_PROPERTY( BrushStyle backgroundBrushStyle READ backgroundBrushStyle WRITE setBackgroundBrushStyle) Q_PROPERTY(qreal textIndent READ textIndent WRITE setTextIndent) Q_PROPERTY(Qt::LayoutDirection textLayoutDirection READ textLayoutDirection WRITE setTextLayoutDirection) Q_PROPERTY(bool fillInSecondPass READ fillInSecondPass WRITE setFillInSecondPass) Q_PROPERTY(bool watermark READ isWatermark WRITE setWatermark) Q_PROPERTY(bool replaceCRwithBR READ isReplaceCarriageReturns WRITE setReplaceCarriageReturns) Q_PROPERTY(bool hideIfEmpty READ hideIfEmpty WRITE setHideIfEmpty) Q_PROPERTY(int fontLetterSpacing READ fontLetterSpacing WRITE setFontLetterSpacing) public: enum AutoWidth { NoneAutoWidth, MaxWordLength, MaxStringLength }; enum AngleType { Angle0, Angle90, Angle180, Angle270, Angle45, Angle315 }; enum ValueType { Default, DateTime, Double }; #if QT_VERSION >= 0x050500 Q_ENUM(AutoWidth) Q_ENUM(AngleType) Q_ENUM(ValueType) #else Q_ENUMS(AutoWidth) Q_ENUMS(AngleType) Q_ENUMS(ValueType) #endif void Init(); TextItem(QObject* owner = 0, QGraphicsItem* parent = 0); ~TextItem(); void paint(QPainter* painter, const QStyleOptionGraphicsItem*, QWidget*); QString content() const; void setContent(const QString& value); void setAlignment(Qt::Alignment value); Qt::Alignment alignment() { return m_alignment; } void geometryChangedEvent(QRectF, QRectF); bool isNeedUpdateSize(RenderPass) const; void updateItemSize(DataSourceManager* dataManager, RenderPass pass, int maxHeight); void expandContent(DataSourceManager* dataManager, RenderPass pass); void setAutoHeight(bool value); bool autoHeight() const { return m_autoHeight; } void setAutoWidth(AutoWidth value); AutoWidth autoWidth() const { return m_autoWidth; } void setAdaptFontToSize(bool value); bool adaptFontToSize() const { return m_adaptFontToSize; } bool canBeSplitted(int height) const; bool isSplittable() const { return true; } bool isEmpty() const { return m_strText.trimmed().isEmpty(); } BaseDesignIntf* cloneUpperPart(int height, QObject* owner, QGraphicsItem* parent); BaseDesignIntf* cloneBottomPart(int height, QObject* owner, QGraphicsItem* parent); BaseDesignIntf* createSameTypeItem(QObject* owner = 0, QGraphicsItem* parent = 0); BaseDesignIntf* cloneEmpty(int height, QObject* owner, QGraphicsItem* parent); void objectLoadFinished(); void setTextItemFont(QFont value); QWidget* defaultEditor(); void setBackgroundOpacity(int value); void setBackgroundModeProperty(BGMode value); void setBackgroundColorProperty(QColor value); void setFontColorProperty(QColor value); AngleType angle() const; void setAngle(const AngleType& value); int foregroundOpacity() { return m_foregroundOpacity; } void setForegroundOpacity(int value); bool underlines() { return m_underlines; } void setUnderlines(bool value); bool trimValue() const; void setTrimValue(bool trimValue); int lineSpacing() const; void setLineSpacing(int value); int underlineLineSize() const; void setUnderlineLineSize(int value); bool allowHTML() const; void setAllowHTML(bool allowHTML); bool allowHTMLInFields() const; void setAllowHTMLInFields(bool allowHTMLInFields); QString format() const; void setFormat(const QString& format); ValueType valueType() const; void setValueType(const ValueType valueType); QSizeF textSize() { return m_textSize; } QString followTo() const; void setFollowTo(const QString& followTo); void setFollower(TextItem* follower); void clearFollower(); bool hasFollower() const; TextItem* follower() const { return m_follower; } bool initFollower(QString follower); // IPageInit interface void pageObjectHasBeenLoaded(); typedef QSharedPointer TextPtr; qreal textIndent() const; void setTextIndent(const qreal& textIndent); Qt::LayoutDirection textLayoutDirection() const; void setTextLayoutDirection(const Qt::LayoutDirection& textLayoutDirection); void setWatermark(bool watermark); bool isReplaceCarriageReturns() const; void setReplaceCarriageReturns(bool isReplaceCarriageReturns); bool hideIfEmpty() const; void setHideIfEmpty(bool hideIfEmpty); int fontLetterSpacing() const; void setFontLetterSpacing(int fontLetterSpacing); protected: void updateLayout(); bool isNeedExpandContent() const; QString replaceBR(QString text) const; QString replaceReturns(QString text) const; QString getTextPart(int height, int skipHeight); void restoreLinksEvent(); void preparePopUpMenu(QMenu& menu); void processPopUpAction(QAction* action); private: void initTextSizes() const; void setTextFont(TextPtr text, const QFont& value) const; void adaptFontSize(TextPtr text) const; QString formatDateTime(const QDateTime& value); QString formatNumber(const double value); QString formatFieldValue(); QString extractText(QTextBlock& curBlock, int height); TextPtr textDocument() const; private: QString m_strText; Qt::Alignment m_alignment; bool m_autoHeight; AutoWidth m_autoWidth; QSizeF mutable m_textSize; qreal mutable m_firstLineSize; AngleType m_angle; int m_foregroundOpacity; bool m_underlines; bool m_adaptFontToSize; bool m_trimValue; int m_lineSpacing; int m_underlineLineSize; bool m_allowHTML; bool m_allowHTMLInFields; bool m_replaceCarriageReturns; QString m_format; ValueType m_valueType; QString m_followTo; TextItem* m_follower; qreal m_textIndent; Qt::LayoutDirection m_textLayoutDirection; bool m_hideIfEmpty; int m_fontLetterSpacing; }; } // namespace LimeReport #endif // LRTEXTITEM_H