xref: /trunk/main/starmath/inc/format.hxx (revision f6a9d5ca)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 #ifndef FORMAT_HXX
24 #define FORMAT_HXX
25 
26 
27 #include <svl/smplhint.hxx>
28 #include <svl/brdcst.hxx>
29 #include "utility.hxx"
30 #include <types.hxx>
31 
32 
33 #define SM_FMT_VERSION_51	((sal_uInt8) 0x01)
34 #define SM_FMT_VERSION_NOW	SM_FMT_VERSION_51
35 
36 #define FNTNAME_TIMES	"Times New Roman"
37 #define FNTNAME_HELV	"Helvetica"
38 #define FNTNAME_COUR	"Courier"
39 #define FNTNAME_MATH    FONTNAME_MATH
40 
41 
42 // symbolic names used as array indices
43 #define SIZ_BEGIN		0
44 #define SIZ_TEXT		0
45 #define SIZ_INDEX		1
46 #define SIZ_FUNCTION	2
47 #define SIZ_OPERATOR	3
48 #define SIZ_LIMITS		4
49 #define SIZ_END			4
50 
51 // symbolic names used as array indices
52 #define FNT_BEGIN		0
53 #define FNT_VARIABLE	0
54 #define FNT_FUNCTION	1
55 #define FNT_NUMBER		2
56 #define FNT_TEXT		3
57 #define FNT_SERIF		4
58 #define FNT_SANS		5
59 #define FNT_FIXED		6
60 #define FNT_MATH		7
61 #define FNT_END			7
62 
63 // symbolic names used as array indices
64 #define DIS_BEGIN				 0
65 #define DIS_HORIZONTAL			 0
66 #define DIS_VERTICAL			 1
67 #define DIS_ROOT				 2
68 #define DIS_SUPERSCRIPT 		 3
69 #define DIS_SUBSCRIPT			 4
70 #define DIS_NUMERATOR			 5
71 #define DIS_DENOMINATOR 		 6
72 #define DIS_FRACTION			 7
73 #define DIS_STROKEWIDTH 		 8
74 #define DIS_UPPERLIMIT			 9
75 #define DIS_LOWERLIMIT			10
76 #define DIS_BRACKETSIZE 		11
77 #define DIS_BRACKETSPACE		12
78 #define DIS_MATRIXROW			13
79 #define DIS_MATRIXCOL			14
80 #define DIS_ORNAMENTSIZE		15
81 #define DIS_ORNAMENTSPACE		16
82 #define DIS_OPERATORSIZE		17
83 #define DIS_OPERATORSPACE		18
84 #define DIS_LEFTSPACE			19
85 #define DIS_RIGHTSPACE			20
86 #define DIS_TOPSPACE			21
87 #define DIS_BOTTOMSPACE			22
88 #define DIS_NORMALBRACKETSIZE	23
89 #define DIS_END					23
90 
91 
92 // to be broadcastet on format changes:
93 #define HINT_FORMATCHANGED	10003
94 
95 enum SmHorAlign	{ AlignLeft, AlignCenter, AlignRight };
96 
97 String GetDefaultFontName( LanguageType nLang, sal_uInt16 nIdent );
98 
99 class SmFormat : public SfxBroadcaster
100 {
101 	SmFace		vFont[FNT_END + 1];
102     sal_Bool        bDefaultFont[FNT_END + 1];
103 	Size		aBaseSize;
104 	long		nVersion;
105 	sal_uInt16		vSize[SIZ_END + 1];
106 	sal_uInt16		vDist[DIS_END + 1];
107 	SmHorAlign	eHorAlign;
108     sal_Int16       nGreekCharStyle;
109 	sal_Bool		bIsTextmode,
110 				bScaleNormalBrackets;
111 
112 public:
113 	SmFormat();
114     SmFormat(const SmFormat &rFormat) : SfxBroadcaster() { *this = rFormat; }
115 
116 	const Size & 	GetBaseSize() const 			{ return aBaseSize; }
117 	void			SetBaseSize(const Size &rSize)	{ aBaseSize = rSize; }
118 
119 	const SmFace &  GetFont(sal_uInt16 nIdent) const { return vFont[nIdent]; }
120     void            SetFont(sal_uInt16 nIdent, const SmFace &rFont, sal_Bool bDefault = sal_False);
121     void            SetFontSize(sal_uInt16 nIdent, const Size &rSize)   { vFont[nIdent].SetSize( rSize ); }
122 
123     void            SetDefaultFont(sal_uInt16 nIdent, sal_Bool bVal)    { bDefaultFont[nIdent] = bVal; }
124     sal_Bool            IsDefaultFont(sal_uInt16 nIdent) const   { return bDefaultFont[nIdent]; }
125 
126 	sal_uInt16			GetRelSize(sal_uInt16 nIdent) const			{ return vSize[nIdent]; }
127 	void			SetRelSize(sal_uInt16 nIdent, sal_uInt16 nVal)	{ vSize[nIdent] = nVal;}
128 
129 	sal_uInt16			GetDistance(sal_uInt16 nIdent) const			{ return vDist[nIdent]; }
130 	void			SetDistance(sal_uInt16 nIdent, sal_uInt16 nVal)	{ vDist[nIdent] = nVal; }
131 
132 	SmHorAlign		GetHorAlign() const				{ return eHorAlign; }
133 	void			SetHorAlign(SmHorAlign eAlign)	{ eHorAlign = eAlign; }
134 
135 	sal_Bool			IsTextmode() const     { return bIsTextmode; }
136 	void			SetTextmode(sal_Bool bVal) { bIsTextmode = bVal; }
137 
138     sal_Int16           GetGreekCharStyle() const     { return nGreekCharStyle; }
139     void            SetGreekCharStyle(sal_Int16 nVal) { nGreekCharStyle = nVal; }
140 
141 	sal_Bool			IsScaleNormalBrackets() const     { return bScaleNormalBrackets; }
142 	void			SetScaleNormalBrackets(sal_Bool bVal) { bScaleNormalBrackets = bVal; }
143 
144 	long			GetVersion() const { return nVersion; }
145 
146 	//! at time (5.1) use only the lower byte!!!
147 	void			SetVersion(long nVer) { nVersion = nVer; }
148 
149 	SmFormat & 		operator = (const SmFormat &rFormat);
150 
151     sal_Bool            operator == (const SmFormat &rFormat) const;
152     inline sal_Bool     operator != (const SmFormat &rFormat) const;
153 
154 	void RequestApplyChanges() const
155 	{
156 		((SmFormat *) this)->Broadcast(SfxSimpleHint(HINT_FORMATCHANGED));
157 	}
158 
159 };
160 
161 inline sal_Bool    SmFormat::operator != (const SmFormat &rFormat) const
162 {
163     return !(*this == rFormat);
164 }
165 
166 #endif
167 
168