You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
492 lines
16 KiB
492 lines
16 KiB
/* 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
|