summaryrefslogtreecommitdiffstats
path: root/kspread/kspread_style.h
diff options
context:
space:
mode:
Diffstat (limited to 'kspread/kspread_style.h')
-rw-r--r--kspread/kspread_style.h491
1 files changed, 491 insertions, 0 deletions
diff --git a/kspread/kspread_style.h b/kspread/kspread_style.h
new file mode 100644
index 000000000..9b808c2c5
--- /dev/null
+++ b/kspread/kspread_style.h
@@ -0,0 +1,491 @@
+/* This file is part of the KDE project
+ Copyright (C) 2003 Norbert Andres, nandres@web.de
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __kspread_style__
+#define __kspread_style__
+
+#include <qbrush.h>
+#include <qcolor.h>
+#include <qfont.h>
+#include <qpen.h>
+
+#include "kspread_format.h"
+
+class QDomDocument;
+class QDomElement;
+class KoGenStyles;
+class KoOasisStyles;
+
+namespace KSpread
+{
+class CustomStyle;
+
+/**
+ * @brief The Style class represents a cell style.
+ * Built-in and custom styles, the ones shown in the StyleManager dialog,
+ * are CustomStyles. Pure Styles have no name, for instance, and are only
+ * used as AUTO styles.
+ */
+class Style
+{
+public:
+ /// The style type
+ enum StyleType
+ {
+ BUILTIN, ///< built-in style (the default style)
+ CUSTOM, ///< custom style (defined in the StyleManager dialog)
+ AUTO, ///< automatically generated on cell format changes
+ TENTATIVE ///< @internal temporary state
+ };
+
+ enum FontFlags
+ {
+ FBold = 0x01,
+ FUnderline = 0x02,
+ FItalic = 0x04,
+ FStrike = 0x08
+ };
+
+ /// @see Format::FormatFlags
+ enum Properties
+ {
+ PDontPrintText = 0x01,
+ PCustomFormat = 0x02,
+ PNotProtected = 0x04,
+ PHideAll = 0x08,
+ PHideFormula = 0x10,
+ PMultiRow = 0x20,
+ PVerticalText = 0x40
+ };
+
+ // TODO Stefan: merge with Format::Properties
+ /// @see Format::Properties
+ enum FlagsSet
+ {
+ SAlignX = 0x01,
+ SAlignY = 0x02,
+ //SFactor was here
+ SPrefix = 0x08,
+ SPostfix = 0x10,
+ SLeftBorder = 0x20,
+ SRightBorder = 0x40,
+ STopBorder = 0x80,
+ SBottomBorder = 0x100,
+ SFallDiagonal = 0x200,
+ SGoUpDiagonal = 0x400,
+ SBackgroundBrush = 0x800,
+ SFont = 0x1000,
+ STextPen = 0x2000,
+ SBackgroundColor = 0x4000,
+ SFloatFormat = 0x8000,
+ SFloatColor = 0x10000,
+ SMultiRow = 0x20000,
+ SVerticalText = 0x40000,
+ SPrecision = 0x80000,
+ SFormatType = 0x100000,
+ SAngle = 0x200000,
+ //SComment = 0x400000,
+ SIndent = 0x800000,
+ SDontPrintText = 0x1000000,
+ SCustomFormat = 0x2000000,
+ SNotProtected = 0x4000000,
+ SHideAll = 0x8000000,
+ SHideFormula = 0x10000000,
+ SFontSize = 0x20000000,
+ SFontFlag = 0x40000000,
+ SFontFamily = 0x80000000
+ };
+
+ /**
+ * Constructor.
+ * Creates an empty automatic style.
+ */
+ Style();
+ /**
+ * Constructor.
+ * Creates an automatic style.
+ * If @p style is a custom or built-in style (e.g. the default style),
+ * @p style becomes the parent style. In this case, features are NOT SET.
+ * @param style The style which features are copied.
+ */
+ Style( Style* style );
+
+ /**
+ * Destructor.
+ */
+ virtual ~Style();
+
+ /** Returns true if both styles have the same properties */
+ bool operator == (const Style& style) const;
+ inline bool operator!=( const Style& other ) const { return !operator==( other ); }
+
+ static FormatType dateType( const QString &_format );
+ static FormatType timeType( const QString &_format );
+ static FormatType fractionType( const QString &_format );
+
+ /**
+ * @return the name of the data style (number, currency, percentage, date,
+ * boolean, text)
+ */
+ static QString saveOasisStyleNumeric( KoGenStyle &style, KoGenStyles &mainStyles, FormatType _style,
+ const QString &_prefix, const QString &_postfix, int _precision, const QString& symbol );
+ static QString saveOasisStyleNumericDate( KoGenStyles &mainStyles, FormatType _style,
+ const QString &_prefix, const QString &_suffix );
+ static QString saveOasisStyleNumericFraction( KoGenStyles &mainStyles, FormatType _style,
+ const QString &_prefix, const QString _suffix );
+ static QString saveOasisStyleNumericTime( KoGenStyles& mainStyles, FormatType _style,
+ const QString &_prefix, const QString &_suffix );
+ static QString saveOasisStyleNumericCustom( KoGenStyles&mainStyles, FormatType _style,
+ const QString &_prefix, const QString &_suffix );
+ static QString saveOasisStyleNumericScientific( KoGenStyles&mainStyles, FormatType _style,
+ const QString &_prefix, const QString _suffix, int _precision );
+ static QString saveOasisStyleNumericPercentage( KoGenStyles&mainStyles, FormatType _style, int _precision,
+ const QString &_prefix, const QString &_suffix );
+ static QString saveOasisStyleNumericMoney( KoGenStyles&mainStyles, FormatType _style,
+ const QString& symbol, int _precision,
+ const QString &_prefix, const QString &_suffix );
+ static QString saveOasisStyleNumericText( KoGenStyles&mainStyles, FormatType _style, int _precision,
+ const QString &_prefix, const QString &_suffix );
+ static QString saveOasisStyleNumericNumber( KoGenStyles&mainStyles, FormatType _style, int _precision,
+ const QString &_prefix, const QString &_suffix );
+
+
+ StyleType type() const { return m_type; }
+
+ void saveXML( QDomDocument & doc, QDomElement & format ) const;
+ bool loadXML( QDomElement & format );
+
+ /**
+ * Saves an OASIS automatic style.
+ * Reimplemented by CustomStyle for OASIS user styles.
+ * @return always QString::null
+ */
+ virtual QString saveOasis( KoGenStyle& style, KoGenStyles& mainStyles);
+ void loadOasisStyle( KoOasisStyles& oasisStyles, const QDomElement & element );
+ static QString saveOasisBackgroundStyle( KoGenStyles &mainStyles, const QBrush &brush );
+
+ /**
+ * Releases this style. The internal reference counter is decremented.
+ * @return true, if this style is not used anymore and should be deleted.
+ */
+ bool release();
+ /**
+ * Marks this style as used. The internal reference counter is incremented.
+ */
+ void addRef();
+ /**
+ * @return the number of references to this style.
+ */
+ int usage() const { return m_usageCount; }
+
+ bool hasProperty( Properties p ) const;
+ bool hasFeature( FlagsSet f, bool withoutParent ) const;
+ void clearFeature( FlagsSet f );
+ uint features() const { return m_featuresSet; }
+
+ uint bottomPenValue() const { return m_bottomPenValue; }
+ uint rightPenValue() const { return m_rightPenValue; }
+ uint leftPenValue() const { return m_leftPenValue; }
+ uint topPenValue() const { return m_topPenValue; }
+
+ QPen const & pen() const;
+ QColor const & bgColor() const;
+ QPen const & rightBorderPen() const;
+ QPen const & bottomBorderPen() const;
+ QPen const & leftBorderPen() const;
+ QPen const & topBorderPen() const;
+ QPen const & fallDiagonalPen() const;
+ QPen const & goUpDiagonalPen() const;
+ QBrush const & backGroundBrush() const;
+ QString const & strFormat() const;
+ QString const & prefix() const;
+ QString const & postfix() const;
+ QString const & fontFamily() const;
+
+ Format::Align alignX() const;
+ Format::AlignY alignY() const;
+ Format::FloatFormat floatFormat() const;
+ Format::FloatColor floatColor() const;
+ FormatType formatType() const;
+
+ Format::Currency const & currency() const;
+
+ QFont font() const;
+ uint fontFlags() const;
+ int fontSize() const;
+ int precision() const;
+ int rotateAngle() const;
+ double indent() const;
+
+ Style * setAlignX( Format::Align alignX );
+ Style * setAlignY( Format::AlignY alignY );
+ Style * setFont( QFont const & f );
+ Style * setFontFamily( QString const & fam );
+ Style * setFontFlags( uint flags );
+ Style * setFontSize( int size );
+ Style * setPen( QPen const & pen );
+ Style * setBgColor( QColor const & color );
+ Style * setRightBorderPen( QPen const & pen );
+ Style * setBottomBorderPen( QPen const & pen );
+ Style * setLeftBorderPen( QPen const & pen );
+ Style * setTopBorderPen( QPen const & pen );
+ Style * setFallDiagonalPen( QPen const & pen );
+ Style * setGoUpDiagonalPen( QPen const & pen );
+ Style * setRotateAngle( int angle );
+ Style * setIndent( double indent );
+ Style * setBackGroundBrush( QBrush const & brush );
+ Style * setFloatFormat( Format::FloatFormat format );
+ Style * setFloatColor( Format::FloatColor color );
+ Style * setFormatType( FormatType format );
+ Style * setStrFormat( QString const & strFormat );
+ Style * setPrecision( int precision );
+ Style * setPrefix( QString const & prefix );
+ Style * setPostfix( QString const & postfix );
+ Style * setCurrency( Format::Currency const & currency );
+ Style * setProperty( Properties p );
+ Style * clearProperty( Properties p );
+
+ CustomStyle * parent() const;
+ QString const & parentName() const { return m_parentName; }
+ void setParent( CustomStyle * parent );
+
+ /**
+ * Returns the name of a colour. This is the same as returned by QColor::name, but an internal cache
+ * is used to reduce the overhead when asking for the name of the same colour.
+ */
+ static QString colorName( const QColor& color );
+
+protected:
+ /**
+ * Helper function for saveOasis
+ * Does the real work by determining the used attributes.
+ */
+ void saveOasisStyle( KoGenStyle &style, KoGenStyles &mainStyles );
+
+ void loadOasisDataStyle( KoOasisStyles& oasisStyles, const QDomElement& styleStack );
+ void loadOasisParagraphProperties( KoOasisStyles& oasisStyles, const KoStyleStack& styleStack );
+ void loadOasisTableCellProperties( KoOasisStyles& oasisStyles, const KoStyleStack& styleStack );
+ void loadOasisTextProperties( KoOasisStyles& oasisStyles, const KoStyleStack& styleStack );
+
+ CustomStyle * m_parent;
+ QString m_parentName;
+ StyleType m_type;
+ uint m_usageCount;
+ uint m_featuresSet;
+
+ /**
+ * Alignment of the text
+ */
+ Format::Align m_alignX;
+ /**
+ * Aligment of the text at top middle or bottom
+ */
+ Format::AlignY m_alignY;
+
+ Format::FloatFormat m_floatFormat;
+ /**
+ * The color format of a floating point value
+ */
+ Format::FloatColor m_floatColor;
+
+ FormatType m_formatType;
+
+ /**
+ * The font used to draw the text
+ */
+ QString m_fontFamily;
+ uint m_fontFlags;
+ int m_fontSize;
+
+ /**
+ * The pen used to draw the text
+ */
+ QPen m_textPen;
+ /**
+ * The background color
+ */
+ QColor m_bgColor;
+
+ /**
+ * The pen used to draw the right border
+ */
+ QPen m_rightBorderPen;
+
+ /**
+ * The pen used to draw the bottom border
+ */
+ QPen m_bottomBorderPen;
+
+ /**
+ * The pen used to draw the left border
+ */
+ QPen m_leftBorderPen;
+
+ /**
+ * The pen used to draw the top border
+ */
+ QPen m_topBorderPen;
+
+ /**
+ * The pen used to draw the diagonal
+ */
+ QPen m_fallDiagonalPen;
+ /**
+ * The pen used to draw the the diagonal which go up
+ */
+ QPen m_goUpDiagonalPen;
+
+ /**
+ * The brush used to draw the background.
+ */
+ QBrush m_backGroundBrush;
+
+ int m_rotateAngle;
+ /**
+ * Give indent
+ */
+ double m_indent;
+ /**
+ * Format of the content, e.g. #.##0.00, dd/mmm/yyyy,...
+ */
+ QString m_strFormat;
+ /**
+ * The precision of the floating point representation
+ * If precision is -1, this means that no precision is specified.
+ */
+ int m_precision;
+ /**
+ * The prefix of a numeric value ( for example "$" )
+ * May be empty.
+ */
+ QString m_prefix;
+ /**
+ * The postfix of a numeric value ( for example "DM" )
+ * May be empty.
+ */
+ QString m_postfix;
+ /**
+ * Currency information:
+ * about which currency from which country
+ */
+ Format::Currency m_currency;
+
+ /**
+ * Stores information like: DonPrint, DontShowFormula, Protected...
+ */
+ uint m_properties;
+
+ uint m_bottomPenValue;
+ uint m_rightPenValue;
+ uint m_leftPenValue;
+ uint m_topPenValue;
+
+ bool featureSet( FlagsSet f ) const { return ( !m_parent || ( m_featuresSet & (uint) f ) ); }
+};
+
+/**
+ * @brief Built-in or custom style defined in StyleManager dialog.
+ */
+class CustomStyle : public Style
+{
+public:
+ /**
+ * Constructor.
+ * Creates a custom style.
+ * @param style The style which's features are copied.
+ * @param name The name of this style.
+ */
+ CustomStyle( Style * style, QString const & name );
+ CustomStyle( QString const & name, CustomStyle * parent );
+ ~CustomStyle();
+
+ QString const & name() const { return m_name; }
+
+ void save( QDomDocument & doc, QDomElement & styles );
+ /**
+ * @reimp
+ * Stores an OASIS user style.
+ * @return the OASIS style's name
+ */
+ virtual QString saveOasis( KoGenStyle& style, KoGenStyles &mainStyles );
+ /**
+ * Loads the style properties from @p style .
+ * Determines also the parent's name.
+ * @param oasisStyles map of all styles
+ * @param style the DOM element defining the style
+ * @param name the style's new name
+ */
+ void loadOasis( KoOasisStyles& oasisStyles, const QDomElement & style, const QString & name );
+
+ bool loadXML( QDomElement const & style, QString const & name );
+
+ void setType( StyleType type ) { m_type = type; }
+
+ void setName( QString const & name );
+ void refreshParentName();
+ bool definesAll() const;
+
+ void changeAlignX( Format::Align alignX );
+ void changeAlignY( Format::AlignY alignY );
+ void changeFont( QFont const & f );
+ void changeFontFamily( QString const & fam );
+ void changeFontSize( int size );
+ void changeFontFlags( uint flags );
+ void changePen( QPen const & pen );
+ void changeTextColor( QColor const & color );
+ void changeBgColor( QColor const & color );
+ void changeRightBorderPen( QPen const & pen );
+ void changeBottomBorderPen( QPen const & pen );
+ void changeLeftBorderPen( QPen const & pen );
+ void changeTopBorderPen( QPen const & pen );
+ void changeFallBorderPen( QPen const & pen );
+ void changeGoUpBorderPen( QPen const & pen );
+ void changeRotateAngle( int angle );
+ void changeIndent( double indent );
+ void changeBackGroundBrush( QBrush const & brush );
+ void changeFloatFormat( Format::FloatFormat format );
+ void changeFloatColor( Format::FloatColor color );
+ void changeFormatType( FormatType format );
+ void changeStrFormat( QString const & strFormat );
+ void changePrecision( int precision );
+ void changePrefix( QString const & prefix );
+ void changePostfix( QString const & postfix );
+ void changeCurrency( Format::Currency const & currency );
+
+ void addProperty( Properties p );
+ void removeProperty( Properties p );
+
+ bool operator==( const CustomStyle& other ) const;
+ inline bool operator!=( const CustomStyle& other ) const { return !operator==( other ); }
+
+ private:
+ friend class StyleManager;
+
+ QString m_name;
+
+ /**
+ * Constructor.
+ * Constructs the default cell style.
+ */
+ CustomStyle();
+};
+
+} // namespace KSpread
+
+#endif