Subversion Repositories Scribus

Rev

Rev 8134 | Rev 8266 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
6443 avox 1
/*
2
 For general Scribus (>=1.3.2) copyright and licensing information please refer
3
 to the COPYING file provided with the program. Following this notice may exist
4
 a copyright and/or license notice that predates the release of Scribus 1.3.2
5
 for which a new license (GPL+exception) is in place.
6
 */
7
/***************************************************************************
8
*                                                                         *
9
*   This program is free software; you can redistribute it and/or modify  *
10
*   it under the terms of the GNU General Public License as published by  *
11
*   the Free Software Foundation; either version 2 of the License, or     *
12
*   (at your option) any later version.                                   *
13
*                                                                         *
14
***************************************************************************/
15
 
16
 
17
// DONT INCLUDE this file directly, include "style.h" instead!
18
 
19
 
7456 jghali 20
enum StyleFlagValue {
6443 avox 21
        ScStyle_Default       = 0,
22
    ScStyle_Superscript   = 1,
23
    ScStyle_Subscript     = 2,
24
    ScStyle_Outline       = 4,
25
    ScStyle_Underline     = 8,
26
    ScStyle_Strikethrough = 16,
27
    ScStyle_AllCaps       = 32,
28
    ScStyle_SmallCaps     = 64,
29
    ScStyle_HyphenationPossible=128, //Hyphenation possible here (Smart Hyphen)
30
    ScStyle_Shadowed      = 256,
31
    ScStyle_UnderlineWords= 512,
32
    ScStyle_Reserved01    = 1024, //free, not used in the moment
33
    ScStyle_DropCap       = 2048,
34
    ScStyle_SuppressSpace = 4096,//internal use in PageItem (Suppresses spaces when in Block alignment)
35
    ScStyle_SmartHyphenVisible=8192, //Smart Hyphen visible at line end
36
    ScStyle_StartOfLine   = 16384,
7017 avox 37
        ScStyle_UserStyles    = 2047, // 1919, // == 1024 + 512 + 256 + 64 + 32 + 16 + 8 + 4 + 2 + 1
6443 avox 38
        ScStyle_None          = 65535
39
};
40
 
7456 jghali 41
class SCRIBUS_API StyleFlag
42
{
43
public:
6443 avox 44
 
7456 jghali 45
        StyleFlagValue value;
6443 avox 46
 
7456 jghali 47
        StyleFlag(void) { value = ScStyle_Default; }
48
        StyleFlag(StyleFlagValue val) { value = val; }
49
        StyleFlag(int val) { value = static_cast<StyleFlagValue>(val); }
6443 avox 50
 
7456 jghali 51
        operator StyleFlagValue() const { return value; }
6443 avox 52
 
7456 jghali 53
        StyleFlag& operator=  (StyleFlagValue val) { value = val; return *this;}
54
        StyleFlag& operator&= (const StyleFlag& right);
55
        StyleFlag& operator|= (const StyleFlag& right);
56
        StyleFlag  operator&  (const StyleFlag& right);
57
        StyleFlag  operator&  (int right);
58
        StyleFlag  operator|  (const StyleFlag& right);
59
        StyleFlag  operator^  (const StyleFlag& right);
60
        StyleFlag  operator^  (int right);
61
        StyleFlag  operator~  ();
6443 avox 62
 
7456 jghali 63
        bool operator== (const StyleFlag& right) const;
64
        bool operator== (const StyleFlagValue right) const;
65
        bool operator== (int right) const;
66
        bool operator!= (const StyleFlag& right) const;
67
        bool operator!= (const StyleFlagValue right) const;
68
};
6443 avox 69
 
7005 avox 70
class SCRIBUS_API CharStyle : public Style {
6443 avox 71
public:
72
 
73
 
74
    CharStyle() : Style() {
75
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
76
                m_##attr_NAME = attr_DEFAULT; \
77
                inh_##attr_NAME = true;
78
#include "charstyle.attrdefs.cxx"
79
#undef ATTRDEF
80
    };
81
 
82
    CharStyle(const ScFace& font, int size, StyleFlag style = ScStyle_Default) : Style() {
83
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
84
                m_##attr_NAME = attr_DEFAULT; \
85
                inh_##attr_NAME = true;
86
#include "charstyle.attrdefs.cxx"
87
#undef ATTRDEF
88
                m_Font = font;
89
        m_FontSize = size;
90
                m_Effects = style;
91
    };
92
 
93
        CharStyle(const CharStyle & other);
94
 
95
        CharStyle & operator=(const CharStyle & other);
96
 
8193 avox 97
        void saxx(SaxHandler& handler) const;
98
 
6443 avox 99
        QString displayName() const;
100
 
8134 avox 101
        void update(const StyleContext * b);
6443 avox 102
 
103
        bool equiv(const Style& other) const;  
104
 
105
        void applyCharStyle(const CharStyle & other);
106
        void eraseCharStyle(const CharStyle & other);
7242 avox 107
        void setStyle(const CharStyle & other);
6443 avox 108
        void erase() { eraseCharStyle(*this); }
109
 
110
        QString asString() const;
111
 
112
        /** getter: validates and returns the attribute's value */
113
 
114
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
115
        const attr_TYPE attr_GETTER() const { validate(); return m_##attr_NAME; }
116
#include "charstyle.attrdefs.cxx"
117
#undef ATTRDEF
118
 
119
        /** setter: sets the attribute's value and clears inherited flag */
120
 
121
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
122
        void set##attr_NAME(attr_TYPE v) { m_##attr_NAME = v; inh_##attr_NAME = false; }
123
#include "charstyle.attrdefs.cxx"
124
#undef ATTRDEF
125
 
126
        /** setter: resets the attribute's value and sets inherited flag */
127
 
128
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
129
        void reset##attr_NAME() { m_##attr_NAME = attr_DEFAULT; inh_##attr_NAME = true; }
130
#include "charstyle.attrdefs.cxx"
131
#undef ATTRDEF
132
 
6733 avox 133
        /** isInherited: returns true if the attribute is inherited */
6443 avox 134
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
6733 avox 135
        bool isInh##attr_NAME() const { return inh_##attr_NAME; }
6443 avox 136
#include "charstyle.attrdefs.cxx"
137
#undef ATTRDEF
138
 
139
 
6733 avox 140
        /** isDefined: returns true if the attribute is defined in this style or any parent */
141
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
142
        bool isDef##attr_NAME() const { \
6805 avox 143
                if ( !inh_##attr_NAME ) return true; \
6733 avox 144
                const CharStyle * par = dynamic_cast<const CharStyle*>(parentStyle()); \
145
                return par && par->isDef##attr_NAME(); \
146
        }
147
#include "charstyle.attrdefs.cxx"
148
#undef ATTRDEF
149
 
150
 
6443 avox 151
private:
152
 
153
        // member declarations:
154
 
155
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
156
        attr_TYPE m_##attr_NAME; \
157
        bool inh_##attr_NAME;
158
#include "charstyle.attrdefs.cxx"
159
#undef ATTRDEF
160
};
161
 
162
 
163
inline CharStyle & CharStyle::operator=(const CharStyle & other)
164
{
165
        static_cast<Style&>(*this) = static_cast<const Style&>(other);
166
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
167
        m_##attr_NAME = other.m_##attr_NAME; \
168
        inh_##attr_NAME = other.inh_##attr_NAME;
169
#include "charstyle.attrdefs.cxx"
170
#undef ATTRDEF
8134 avox 171
//      m_context = NULL;
172
        m_contextversion = -1;
6443 avox 173
        return *this;
174
}
175
 
176
inline CharStyle::CharStyle(const CharStyle & other) : Style(other)
177
{
178
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
179
        m_##attr_NAME = other.m_##attr_NAME; \
180
        inh_##attr_NAME = other.inh_##attr_NAME;
181
#include "charstyle.attrdefs.cxx"
182
#undef ATTRDEF
8134 avox 183
//      m_context = NULL;
184
        m_contextversion = -1;
6443 avox 185
}
186