Subversion Repositories Scribus

Rev

Rev 6733 | Go to most recent revision | Details | 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
 
85
        void update(StyleBase * b);
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
 
116
        /** isInherited: returns true if the attriute is inherited */
117
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
118
        bool isInh##attr_NAME() { return inh_##attr_NAME; }
119
#include "charstyle.attrdefs.cxx"
120
#undef ATTRDEF
121
 
122
 
123
private:
124
 
125
        // member declarations:
126
 
127
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
128
        attr_TYPE m_##attr_NAME; \
129
        bool inh_##attr_NAME;
130
#include "charstyle.attrdefs.cxx"
131
#undef ATTRDEF
132
};
133
 
134
 
135
inline CharStyle & CharStyle::operator=(const CharStyle & other)
136
{
137
        static_cast<Style&>(*this) = static_cast<const Style&>(other);
138
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
139
        m_##attr_NAME = other.m_##attr_NAME; \
140
        inh_##attr_NAME = other.inh_##attr_NAME;
141
#include "charstyle.attrdefs.cxx"
142
#undef ATTRDEF
143
        return *this;
144
}
145
 
146
inline CharStyle::CharStyle(const CharStyle & other) : Style(other)
147
{
148
#define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
149
        m_##attr_NAME = other.m_##attr_NAME; \
150
        inh_##attr_NAME = other.inh_##attr_NAME;
151
#include "charstyle.attrdefs.cxx"
152
#undef ATTRDEF
153
}
154