Subversion Repositories Scribus

Rev

Rev 12340 | 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
 
12314 pierre 127
//      QString displayName() const;
6443 avox 128
 
9607 avox 129
        /** This method may alter any of the attributes depending on the value of 'features'.
130
                Used for font effects */
131
        void updateFeatures();
132
 
12340 pierre 133
        bool equiv(const QString& other) const;
6443 avox 134
 
12340 pierre 135
        void applyCharStyle(const QString& other);
136
        void eraseCharStyle(const QString& other);
137
        void setStyle(const QString& other);
138
        void erase() { eraseCharStyle(uuid()); }
6443 avox 139
 
140
        QString asString() const;
141
 
9607 avox 142
        /** This property will be evaluated at runtime and is not stored. See 'updateFeatures()' */
143
        const StyleFlag effects() const { validate(); return m_Effects; }
144
        void setEffects(StyleFlag flags) { m_Effects = flags; }
145
 
146
 
6443 avox 147
        /** getter: validates and returns the attribute's value */
148
 
149
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
10508 cbradney 150
        attr_TYPE attr_GETTER() const { validate(); return m_##attr_NAME; }
6443 avox 151
#include "charstyle.attrdefs.cxx"
152
#undef ATTRDEF
153
 
154
        /** setter: sets the attribute's value and clears inherited flag */
155
 
156
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
157
        void set##attr_NAME(attr_TYPE v) { m_##attr_NAME = v; inh_##attr_NAME = false; }
158
#include "charstyle.attrdefs.cxx"
159
#undef ATTRDEF
160
 
161
        /** setter: resets the attribute's value and sets inherited flag */
162
 
163
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
164
        void reset##attr_NAME() { m_##attr_NAME = attr_DEFAULT; inh_##attr_NAME = true; }
165
#include "charstyle.attrdefs.cxx"
166
#undef ATTRDEF
167
 
6733 avox 168
        /** isInherited: returns true if the attribute is inherited */
6443 avox 169
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
6733 avox 170
        bool isInh##attr_NAME() const { return inh_##attr_NAME; }
6443 avox 171
#include "charstyle.attrdefs.cxx"
172
#undef ATTRDEF
173
 
174
 
6733 avox 175
        /** isDefined: returns true if the attribute is defined in this style or any parent */
176
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
177
        bool isDef##attr_NAME() const { \
6805 avox 178
                if ( !inh_##attr_NAME ) return true; \
6733 avox 179
                const CharStyle * par = dynamic_cast<const CharStyle*>(parentStyle()); \
180
                return par && par->isDef##attr_NAME(); \
181
        }
182
#include "charstyle.attrdefs.cxx"
183
#undef ATTRDEF
184
 
185
 
6443 avox 186
private:
187
 
9607 avox 188
        void runFeatures(const QStringList& featurelist, const CharStyle* parent);
189
 
190
        StyleFlag m_Effects;
6443 avox 191
        // member declarations:
192
 
193
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
194
        attr_TYPE m_##attr_NAME; \
195
        bool inh_##attr_NAME;
196
#include "charstyle.attrdefs.cxx"
197
#undef ATTRDEF
198
};
199
 
12343 pierre 200
/*
6443 avox 201
inline CharStyle & CharStyle::operator=(const CharStyle & other)
202
{
203
        static_cast<Style&>(*this) = static_cast<const Style&>(other);
204
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
205
        m_##attr_NAME = other.m_##attr_NAME; \
206
        inh_##attr_NAME = other.inh_##attr_NAME;
207
#include "charstyle.attrdefs.cxx"
208
#undef ATTRDEF
9607 avox 209
        m_Effects = other.m_Effects;
6443 avox 210
        return *this;
211
}
12343 pierre 212
*/
6443 avox 213
 
214
inline CharStyle::CharStyle(const CharStyle & other) : Style(other)
215
{
216
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
217
        m_##attr_NAME = other.m_##attr_NAME; \
218
        inh_##attr_NAME = other.inh_##attr_NAME;
219
#include "charstyle.attrdefs.cxx"
220
#undef ATTRDEF
9607 avox 221
        m_Effects = other.m_Effects;
6443 avox 222
}
223
 
8337 avox 224
#endif