Subversion Repositories Scribus

Rev

Rev 6733 | Rev 6908 | 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
 
20
enum StyleFlag {
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,
37
        ScStyle_UserStyles    = 2047, // 1919, // == 1024 + 512 + 256 + 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1
38
        ScStyle_None          = 65535
39
};
40
 
41
SCRIBUS_API StyleFlag& operator&= (StyleFlag& left, StyleFlag right);
42
 
43
SCRIBUS_API StyleFlag& operator|= (StyleFlag& left, StyleFlag right);
44
 
45
SCRIBUS_API StyleFlag operator& (StyleFlag left, StyleFlag right);
46
 
47
SCRIBUS_API StyleFlag operator| (StyleFlag left, StyleFlag right);
48
 
49
SCRIBUS_API StyleFlag operator^ (StyleFlag left, StyleFlag right);
50
 
51
SCRIBUS_API StyleFlag operator~ (StyleFlag arg);
52
 
53
 
54
 
55
 
56
class SCRIBUS_API CharStyle : public virtual Style {
57
public:
58
 
59
 
60
    CharStyle() : Style() {
61
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
62
                m_##attr_NAME = attr_DEFAULT; \
63
                inh_##attr_NAME = true;
64
#include "charstyle.attrdefs.cxx"
65
#undef ATTRDEF
66
    };
67
 
68
    CharStyle(const ScFace& font, int size, StyleFlag style = ScStyle_Default) : Style() {
69
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
70
                m_##attr_NAME = attr_DEFAULT; \
71
                inh_##attr_NAME = true;
72
#include "charstyle.attrdefs.cxx"
73
#undef ATTRDEF
74
                m_Font = font;
75
        m_FontSize = size;
76
                m_Effects = style;
77
    };
78
 
79
        CharStyle(const CharStyle & other);
80
 
81
        CharStyle & operator=(const CharStyle & other);
82
 
83
        QString displayName() const;
84
 
6805 avox 85
        void update(const StyleBase * b);
6443 avox 86
 
87
        bool equiv(const Style& other) const;  
88
 
89
        void applyCharStyle(const CharStyle & other);
90
        void eraseCharStyle(const CharStyle & other);
91
        void erase() { eraseCharStyle(*this); }
92
 
93
        QString asString() const;
94
 
95
        /** getter: validates and returns the attribute's value */
96
 
97
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
98
        const attr_TYPE attr_GETTER() const { validate(); return m_##attr_NAME; }
99
#include "charstyle.attrdefs.cxx"
100
#undef ATTRDEF
101
 
102
        /** setter: sets the attribute's value and clears inherited flag */
103
 
104
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
105
        void set##attr_NAME(attr_TYPE v) { m_##attr_NAME = v; inh_##attr_NAME = false; }
106
#include "charstyle.attrdefs.cxx"
107
#undef ATTRDEF
108
 
109
        /** setter: resets the attribute's value and sets inherited flag */
110
 
111
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
112
        void reset##attr_NAME() { m_##attr_NAME = attr_DEFAULT; inh_##attr_NAME = true; }
113
#include "charstyle.attrdefs.cxx"
114
#undef ATTRDEF
115
 
6733 avox 116
        /** isInherited: returns true if the attribute is inherited */
6443 avox 117
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
6733 avox 118
        bool isInh##attr_NAME() const { return inh_##attr_NAME; }
6443 avox 119
#include "charstyle.attrdefs.cxx"
120
#undef ATTRDEF
121
 
122
 
6733 avox 123
        /** isDefined: returns true if the attribute is defined in this style or any parent */
124
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
125
        bool isDef##attr_NAME() const { \
6805 avox 126
                if ( !inh_##attr_NAME ) return true; \
6733 avox 127
                const CharStyle * par = dynamic_cast<const CharStyle*>(parentStyle()); \
128
                return par && par->isDef##attr_NAME(); \
129
        }
130
#include "charstyle.attrdefs.cxx"
131
#undef ATTRDEF
132
 
133
 
6443 avox 134
private:
135
 
136
        // member declarations:
137
 
138
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
139
        attr_TYPE m_##attr_NAME; \
140
        bool inh_##attr_NAME;
141
#include "charstyle.attrdefs.cxx"
142
#undef ATTRDEF
143
};
144
 
145
 
146
inline CharStyle & CharStyle::operator=(const CharStyle & other)
147
{
6805 avox 148
        other.validate();
6443 avox 149
        static_cast<Style&>(*this) = static_cast<const Style&>(other);
150
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
151
        m_##attr_NAME = other.m_##attr_NAME; \
152
        inh_##attr_NAME = other.inh_##attr_NAME;
153
#include "charstyle.attrdefs.cxx"
154
#undef ATTRDEF
155
        return *this;
156
}
157
 
158
inline CharStyle::CharStyle(const CharStyle & other) : Style(other)
159
{
6805 avox 160
        other.validate();
6443 avox 161
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
162
        m_##attr_NAME = other.m_##attr_NAME; \
163
        inh_##attr_NAME = other.inh_##attr_NAME;
164
#include "charstyle.attrdefs.cxx"
165
#undef ATTRDEF
166
}
167