Subversion Repositories Scribus

Rev

Rev 10508 | Rev 13290 | 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
 
8337 avox 16
#ifndef CHARSTYLE_H
17
#define CHARSTYLE_H
6443 avox 18
 
19
 
8337 avox 20
#include "style.h"
6443 avox 21
 
8455 avox 22
class ResourceCollection;
23
 
7456 jghali 24
enum StyleFlagValue {
6443 avox 25
        ScStyle_Default       = 0,
26
    ScStyle_Superscript   = 1,
27
    ScStyle_Subscript     = 2,
28
    ScStyle_Outline       = 4,
29
    ScStyle_Underline     = 8,
30
    ScStyle_Strikethrough = 16,
31
    ScStyle_AllCaps       = 32,
32
    ScStyle_SmallCaps     = 64,
33
    ScStyle_HyphenationPossible=128, //Hyphenation possible here (Smart Hyphen)
34
    ScStyle_Shadowed      = 256,
35
    ScStyle_UnderlineWords= 512,
36
    ScStyle_Reserved01    = 1024, //free, not used in the moment
37
    ScStyle_DropCap       = 2048,
38
    ScStyle_SuppressSpace = 4096,//internal use in PageItem (Suppresses spaces when in Block alignment)
39
    ScStyle_SmartHyphenVisible=8192, //Smart Hyphen visible at line end
40
    ScStyle_StartOfLine   = 16384,
9645 avox 41
        ScStyle_UserStyles    = 1919, // == 1024 + 512 + 256 + 64 + 32 + 16 + 8 + 4 + 2 + 1
6443 avox 42
        ScStyle_None          = 65535
43
};
44
 
7456 jghali 45
class SCRIBUS_API StyleFlag
46
{
47
public:
6443 avox 48
 
7456 jghali 49
        StyleFlagValue value;
6443 avox 50
 
7456 jghali 51
        StyleFlag(void) { value = ScStyle_Default; }
52
        StyleFlag(StyleFlagValue val) { value = val; }
53
        StyleFlag(int val) { value = static_cast<StyleFlagValue>(val); }
6443 avox 54
 
7456 jghali 55
        operator StyleFlagValue() const { return value; }
6443 avox 56
 
9607 avox 57
        QStringList featureList() const;
58
 
7456 jghali 59
        StyleFlag& operator=  (StyleFlagValue val) { value = val; return *this;}
60
        StyleFlag& operator&= (const StyleFlag& right);
61
        StyleFlag& operator|= (const StyleFlag& right);
62
        StyleFlag  operator&  (const StyleFlag& right);
63
        StyleFlag  operator&  (int right);
64
        StyleFlag  operator|  (const StyleFlag& right);
65
        StyleFlag  operator^  (const StyleFlag& right);
66
        StyleFlag  operator^  (int right);
67
        StyleFlag  operator~  ();
6443 avox 68
 
7456 jghali 69
        bool operator== (const StyleFlag& right) const;
70
        bool operator== (const StyleFlagValue right) const;
71
        bool operator== (int right) const;
72
        bool operator!= (const StyleFlag& right) const;
73
        bool operator!= (const StyleFlagValue right) const;
74
};
6443 avox 75
 
7005 avox 76
class SCRIBUS_API CharStyle : public Style {
6443 avox 77
public:
78
 
9607 avox 79
        static const QString INHERIT;
80
        static const QString BOLD;
81
        static const QString ITALIC;
82
        static const QString UNDERLINE;
83
        static const QString UNDERLINEWORDS;
84
        static const QString STRIKETHROUGH;
85
        static const QString SUPERSCRIPT;
86
        static const QString SUBSCRIPT;
87
        static const QString OUTLINE;
88
        static const QString SHADOWED;
89
        static const QString ALLCAPS;
90
        static const QString SMALLCAPS;
91
 
6443 avox 92
    CharStyle() : Style() {
93
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
94
                m_##attr_NAME = attr_DEFAULT; \
95
                inh_##attr_NAME = true;
96
#include "charstyle.attrdefs.cxx"
97
#undef ATTRDEF
12283 cbradney 98
                m_isDefaultStyle=false;
6443 avox 99
    };
100
 
101
    CharStyle(const ScFace& font, int size, StyleFlag style = ScStyle_Default) : Style() {
102
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
103
                m_##attr_NAME = attr_DEFAULT; \
104
                inh_##attr_NAME = true;
105
#include "charstyle.attrdefs.cxx"
106
#undef ATTRDEF
12283 cbradney 107
                m_isDefaultStyle=false;
8337 avox 108
                setFont(font);
109
        setFontSize(size);
110
                setEffects(style);
6443 avox 111
    };
112
 
113
        CharStyle(const CharStyle & other);
114
 
115
        CharStyle & operator=(const CharStyle & other);
116
 
8266 avox 117
        static const Xml_string saxxDefaultElem;
8834 cbradney 118
        static void  desaxeRules(const Xml_string& prefixPattern, desaxe::Digester& ruleset, Xml_string elemtag = saxxDefaultElem);
8193 avox 119
 
8800 jghali 120
        virtual void saxx(SaxHandler& handler, const Xml_string& elemtag) const;
8266 avox 121
        virtual void saxx(SaxHandler& handler)                     const { saxx(handler, saxxDefaultElem); }
122
 
8455 avox 123
 
124
        void getNamedResources(ResourceCollection& lists) const;
125
        void replaceNamedResources(ResourceCollection& newNames);
126
 
6443 avox 127
        QString displayName() const;
128
 
8134 avox 129
        void update(const StyleContext * b);
6443 avox 130
 
9607 avox 131
        /** This method may alter any of the attributes depending on the value of 'features'.
132
                Used for font effects */
133
        void updateFeatures();
134
 
6443 avox 135
        bool equiv(const Style& other) const;  
136
 
137
        void applyCharStyle(const CharStyle & other);
138
        void eraseCharStyle(const CharStyle & other);
7242 avox 139
        void setStyle(const CharStyle & other);
6443 avox 140
        void erase() { eraseCharStyle(*this); }
141
 
142
        QString asString() const;
143
 
9607 avox 144
        /** This property will be evaluated at runtime and is not stored. See 'updateFeatures()' */
145
        const StyleFlag effects() const { validate(); return m_Effects; }
146
        void setEffects(StyleFlag flags) { m_Effects = flags; }
147
 
148
 
6443 avox 149
        /** getter: validates and returns the attribute's value */
150
 
151
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
10508 cbradney 152
        attr_TYPE attr_GETTER() const { validate(); return m_##attr_NAME; }
6443 avox 153
#include "charstyle.attrdefs.cxx"
154
#undef ATTRDEF
155
 
156
        /** setter: sets the attribute's value and clears inherited flag */
157
 
158
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
159
        void set##attr_NAME(attr_TYPE v) { m_##attr_NAME = v; inh_##attr_NAME = false; }
160
#include "charstyle.attrdefs.cxx"
161
#undef ATTRDEF
162
 
163
        /** setter: resets the attribute's value and sets inherited flag */
164
 
165
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
166
        void reset##attr_NAME() { m_##attr_NAME = attr_DEFAULT; inh_##attr_NAME = true; }
167
#include "charstyle.attrdefs.cxx"
168
#undef ATTRDEF
169
 
6733 avox 170
        /** isInherited: returns true if the attribute is inherited */
6443 avox 171
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
6733 avox 172
        bool isInh##attr_NAME() const { return inh_##attr_NAME; }
6443 avox 173
#include "charstyle.attrdefs.cxx"
174
#undef ATTRDEF
175
 
176
 
6733 avox 177
        /** isDefined: returns true if the attribute is defined in this style or any parent */
178
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
179
        bool isDef##attr_NAME() const { \
6805 avox 180
                if ( !inh_##attr_NAME ) return true; \
6733 avox 181
                const CharStyle * par = dynamic_cast<const CharStyle*>(parentStyle()); \
182
                return par && par->isDef##attr_NAME(); \
183
        }
184
#include "charstyle.attrdefs.cxx"
185
#undef ATTRDEF
186
 
187
 
6443 avox 188
private:
189
 
9607 avox 190
        void runFeatures(const QStringList& featurelist, const CharStyle* parent);
191
 
192
        StyleFlag m_Effects;
6443 avox 193
        // member declarations:
194
 
195
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
196
        attr_TYPE m_##attr_NAME; \
197
        bool inh_##attr_NAME;
198
#include "charstyle.attrdefs.cxx"
199
#undef ATTRDEF
200
};
201
 
202
 
203
inline CharStyle & CharStyle::operator=(const CharStyle & other)
204
{
205
        static_cast<Style&>(*this) = static_cast<const Style&>(other);
206
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
207
        m_##attr_NAME = other.m_##attr_NAME; \
208
        inh_##attr_NAME = other.inh_##attr_NAME;
209
#include "charstyle.attrdefs.cxx"
210
#undef ATTRDEF
9607 avox 211
        m_Effects = other.m_Effects;
8134 avox 212
//      m_context = NULL;
213
        m_contextversion = -1;
6443 avox 214
        return *this;
215
}
216
 
217
inline CharStyle::CharStyle(const CharStyle & other) : Style(other)
218
{
219
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
220
        m_##attr_NAME = other.m_##attr_NAME; \
221
        inh_##attr_NAME = other.inh_##attr_NAME;
222
#include "charstyle.attrdefs.cxx"
223
#undef ATTRDEF
9607 avox 224
        m_Effects = other.m_Effects;
8134 avox 225
//      m_context = NULL;
226
        m_contextversion = -1;
6443 avox 227
}
228
 
8337 avox 229
#endif