xref: /AOO41X/main/editeng/source/editeng/editattr.hxx (revision 4c5491ea21520f5347760e8fc7d072f082fcde5f)
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 
24 #ifndef _EDITATTR_HXX
25 #define _EDITATTR_HXX
26 
27 #include <editeng/eeitem.hxx>
28 
29 class SvxFont;
30 class SvxFontItem;
31 class SvxWeightItem;
32 class SvxPostureItem;
33 class SvxShadowedItem;
34 class SvxEscapementItem;
35 class SvxContourItem;
36 class SvxCrossedOutItem;
37 class SvxUnderlineItem;
38 class SvxOverlineItem;
39 class SvxFontHeightItem;
40 class SvxCharScaleWidthItem;
41 class SvxColorItem;
42 class SvxAutoKernItem;
43 class SvxKerningItem;
44 class SvxCharSetColorItem;
45 class SvxWordLineModeItem;
46 class SvxFieldItem;
47 class SvxLanguageItem;
48 class SvxEmphasisMarkItem;
49 class SvxCharReliefItem;
50 #include <svl/poolitem.hxx>
51 
52 
53 class SfxVoidItem;
54 
55 #define CH_FEATURE_OLD  (sal_uInt8)         0xFF
56 #define CH_FEATURE      (sal_Unicode)   0x01
57 
58 // DEF_METRIC: Bei meinem Pool sollte immer die DefMetric bei
59 // GetMetric( nWhich ) ankommen!
60 // => Zum ermitteln der DefMetrik einfach ein GetMetric( 0 )
61 #define DEF_METRIC  0
62 
63 // -------------------------------------------------------------------------
64 // class EditAttrib
65 // -------------------------------------------------------------------------
66 class EditAttrib
67 {
68 private:
EditAttrib()69             EditAttrib() {;}
EditAttrib(const EditAttrib &)70             EditAttrib( const EditAttrib & ) {;}
71 
72 protected:
73     const SfxPoolItem*  pItem;
74 
75                         EditAttrib( const SfxPoolItem& rAttr );
76     virtual             ~EditAttrib();
77 
78 public:
79     // RemoveFromPool muss immer vorm DTOR Aufruf erfolgen!!
80     void                RemoveFromPool( SfxItemPool& rPool );
81 
Which() const82     sal_uInt16              Which() const   { return pItem->Which(); }
GetItem() const83     const SfxPoolItem*  GetItem() const { return pItem; }
84 };
85 
86 // -------------------------------------------------------------------------
87 // class EditCharAttrib
88 // -------------------------------------------------------------------------
89 // bFeature: Attribut darf nicht expandieren/schrumfen, Laenge immer 1
90 // bEdge: Attribut expandiert nicht, wenn genau an der Kante expandiert werden soll
91 class EditCharAttrib : public EditAttrib
92 {
93 protected:
94 
95     sal_uInt16              nStart;
96     sal_uInt16              nEnd;
97     sal_Bool                bFeature    :1;
98     sal_Bool                bEdge       :1;
99 
100 public:
101             EditCharAttrib( const SfxPoolItem& rAttr, sal_uInt16 nStart, sal_uInt16 nEnd );
102 
GetStart()103     sal_uInt16&         GetStart()                  { return nStart; }
GetEnd()104     sal_uInt16&         GetEnd()                    { return nEnd; }
105 
GetStart() const106     sal_uInt16          GetStart() const            { return nStart; }
GetEnd() const107     sal_uInt16          GetEnd() const              { return nEnd; }
108 
109     inline sal_uInt16   GetLen() const;
110 
111     inline void     MoveForward( sal_uInt16 nDiff );
112     inline void     MoveBackward( sal_uInt16 nDiff );
113 
114     inline void     Expand( sal_uInt16 nDiff );
115     inline void     Collaps( sal_uInt16 nDiff );
116 
117     virtual void    SetFont( SvxFont& rFont, OutputDevice* pOutDev );
118 
IsIn(sal_uInt16 nIndex)119     sal_Bool    IsIn( sal_uInt16 nIndex )
120                 { return ( ( nStart <= nIndex ) && ( nEnd >= nIndex ) ); }
IsInside(sal_uInt16 nIndex)121     sal_Bool    IsInside( sal_uInt16 nIndex )
122                 { return ( ( nStart < nIndex ) && ( nEnd > nIndex ) ); }
IsEmpty()123     sal_Bool    IsEmpty()
124                 { return nStart == nEnd; }
125 
IsFeature() const126     sal_Bool    IsFeature() const   { return bFeature; }
SetFeature(sal_Bool b)127     void    SetFeature( sal_Bool b) { bFeature = b; }
128 
IsEdge() const129     sal_Bool    IsEdge() const      { return bEdge; }
SetEdge(sal_Bool b)130     void    SetEdge( sal_Bool b )   { bEdge = b; }
131 };
132 
GetLen() const133 inline sal_uInt16 EditCharAttrib::GetLen() const
134 {
135     DBG_ASSERT( nEnd >= nStart, "EditCharAttrib: nEnd < nStart!" );
136     return nEnd-nStart;
137 }
138 
MoveForward(sal_uInt16 nDiff)139 inline void EditCharAttrib::MoveForward( sal_uInt16 nDiff )
140 {
141     DBG_ASSERT( ((long)nEnd + nDiff) <= 0xFFFF, "EditCharAttrib: MoveForward?!" );
142     nStart = nStart + nDiff;
143     nEnd = nEnd + nDiff;
144 }
145 
MoveBackward(sal_uInt16 nDiff)146 inline void EditCharAttrib::MoveBackward( sal_uInt16 nDiff )
147 {
148     DBG_ASSERT( ((long)nStart - nDiff) >= 0, "EditCharAttrib: MoveBackward?!" );
149     nStart = nStart - nDiff;
150     nEnd = nEnd - nDiff;
151 }
152 
Expand(sal_uInt16 nDiff)153 inline void EditCharAttrib::Expand( sal_uInt16 nDiff )
154 {
155     DBG_ASSERT( ( ((long)nEnd + nDiff) <= (long)0xFFFF ), "EditCharAttrib: Expand?!" );
156     DBG_ASSERT( !bFeature, "Bitte keine Features expandieren!" );
157     nEnd = nEnd + nDiff;
158 }
159 
Collaps(sal_uInt16 nDiff)160 inline void EditCharAttrib::Collaps( sal_uInt16 nDiff )
161 {
162     DBG_ASSERT( (long)nEnd - nDiff >= (long)nStart, "EditCharAttrib: Collaps?!" );
163     DBG_ASSERT( !bFeature, "Bitte keine Features schrumpfen!" );
164     nEnd = nEnd - nDiff;
165 }
166 
167 // -------------------------------------------------------------------------
168 // class EditCharAttribFont
169 // -------------------------------------------------------------------------
170 class EditCharAttribFont: public EditCharAttrib
171 {
172 public:
173     EditCharAttribFont( const SvxFontItem& rAttr, sal_uInt16 nStart, sal_uInt16 nEnd );
174 
175     virtual void    SetFont( SvxFont& rFont, OutputDevice* pOutDev );
176 };
177 
178 // -------------------------------------------------------------------------
179 // class EditCharAttribWeight
180 // -------------------------------------------------------------------------
181 class EditCharAttribWeight : public EditCharAttrib
182 {
183 public:
184     EditCharAttribWeight( const SvxWeightItem& rAttr, sal_uInt16 nStart, sal_uInt16 nEnd );
185 
186     virtual void    SetFont( SvxFont& rFont, OutputDevice* pOutDev );
187 };
188 // -------------------------------------------------------------------------
189 // class EditCharAttribItalic
190 // -------------------------------------------------------------------------
191 class EditCharAttribItalic : public EditCharAttrib
192 {
193 public:
194     EditCharAttribItalic( const SvxPostureItem& rAttr, sal_uInt16 nStart, sal_uInt16 nEnd );
195 
196     virtual void    SetFont( SvxFont& rFont, OutputDevice* pOutDev );
197 };
198 
199 // -------------------------------------------------------------------------
200 // class EditCharAttribShadow
201 // -------------------------------------------------------------------------
202 class EditCharAttribShadow : public EditCharAttrib
203 {
204 public:
205     EditCharAttribShadow( const SvxShadowedItem& rAttr, sal_uInt16 nStart, sal_uInt16 nEnd );
206 
207     virtual void    SetFont( SvxFont& rFont, OutputDevice* pOutDev );
208 };
209 
210 // -------------------------------------------------------------------------
211 // class EditCharAttribEscapement
212 // -------------------------------------------------------------------------
213 class EditCharAttribEscapement : public EditCharAttrib
214 {
215 public:
216     EditCharAttribEscapement( const SvxEscapementItem& rAttr, sal_uInt16 nStart, sal_uInt16 nEnd );
217 
218     virtual void    SetFont( SvxFont& rFont, OutputDevice* pOutDev );
219 };
220 
221 // -------------------------------------------------------------------------
222 // class EditCharAttribOutline
223 // -------------------------------------------------------------------------
224 class EditCharAttribOutline : public EditCharAttrib
225 {
226 public:
227     EditCharAttribOutline( const SvxContourItem& rAttr, sal_uInt16 nStart, sal_uInt16 nEnd );
228 
229     virtual void    SetFont( SvxFont& rFont, OutputDevice* pOutDev );
230 };
231 
232 // -------------------------------------------------------------------------
233 // class EditCharAttribStrikeout
234 // -------------------------------------------------------------------------
235 class EditCharAttribStrikeout : public EditCharAttrib
236 {
237 public:
238     EditCharAttribStrikeout( const SvxCrossedOutItem& rAttr, sal_uInt16 nStart, sal_uInt16 nEnd );
239 
240     virtual void    SetFont( SvxFont& rFont, OutputDevice* pOutDev );
241 };
242 
243 // -------------------------------------------------------------------------
244 // class EditCharAttribUnderline
245 // -------------------------------------------------------------------------
246 class EditCharAttribUnderline : public EditCharAttrib
247 {
248 public:
249     EditCharAttribUnderline( const SvxUnderlineItem& rAttr, sal_uInt16 nStart, sal_uInt16 nEnd );
250 
251     virtual void    SetFont( SvxFont& rFont, OutputDevice* pOutDev );
252 };
253 
254 // -------------------------------------------------------------------------
255 // class EditCharAttribOverline
256 // -------------------------------------------------------------------------
257 class EditCharAttribOverline : public EditCharAttrib
258 {
259 public:
260     EditCharAttribOverline( const SvxOverlineItem& rAttr, sal_uInt16 nStart, sal_uInt16 nEnd );
261 
262     virtual void    SetFont( SvxFont& rFont, OutputDevice* pOutDev );
263 };
264 
265 // -------------------------------------------------------------------------
266 // class EditCharAttribEmphasisMark
267 // -------------------------------------------------------------------------
268 class EditCharAttribEmphasisMark : public EditCharAttrib
269 {
270 public:
271     EditCharAttribEmphasisMark( const SvxEmphasisMarkItem& rAttr, sal_uInt16 nStart, sal_uInt16 nEnd );
272 
273     virtual void    SetFont( SvxFont& rFont, OutputDevice* pOutDev );
274 };
275 
276 // -------------------------------------------------------------------------
277 // class EditCharAttribRelief
278 // -------------------------------------------------------------------------
279 class EditCharAttribRelief : public EditCharAttrib
280 {
281 public:
282     EditCharAttribRelief( const SvxCharReliefItem& rAttr, sal_uInt16 nStart, sal_uInt16 nEnd );
283 
284     virtual void    SetFont( SvxFont& rFont, OutputDevice* pOutDev );
285 };
286 
287 // -------------------------------------------------------------------------
288 // class EditCharAttribFontHeight
289 // -------------------------------------------------------------------------
290 class EditCharAttribFontHeight : public EditCharAttrib
291 {
292 public:
293     EditCharAttribFontHeight( const SvxFontHeightItem& rAttr, sal_uInt16 nStart, sal_uInt16 nEnd );
294 
295     virtual void    SetFont( SvxFont& rFont, OutputDevice* pOutDev );
296 };
297 
298 // -------------------------------------------------------------------------
299 // class EditCharAttribFontWidth
300 // -------------------------------------------------------------------------
301 class EditCharAttribFontWidth : public EditCharAttrib
302 {
303 public:
304     EditCharAttribFontWidth( const SvxCharScaleWidthItem& rAttr, sal_uInt16 nStart, sal_uInt16 nEnd );
305 
306     virtual void    SetFont( SvxFont& rFont, OutputDevice* pOutDev );
307 };
308 
309 // -------------------------------------------------------------------------
310 // class EditCharAttribColor
311 // -------------------------------------------------------------------------
312 class EditCharAttribColor : public EditCharAttrib
313 {
314 public:
315     EditCharAttribColor( const SvxColorItem& rAttr, sal_uInt16 nStart, sal_uInt16 nEnd );
316 
317     virtual void    SetFont( SvxFont& rFont, OutputDevice* pOutDev );
318 };
319 
320 // -------------------------------------------------------------------------
321 // class EditCharAttribLanguage
322 // -------------------------------------------------------------------------
323 class EditCharAttribLanguage : public EditCharAttrib
324 {
325 public:
326     EditCharAttribLanguage( const SvxLanguageItem& rAttr, sal_uInt16 nStart, sal_uInt16 nEnd );
327 
328     virtual void    SetFont( SvxFont& rFont, OutputDevice* pOutDev );
329 };
330 
331 // -------------------------------------------------------------------------
332 // class EditCharAttribTab
333 // -------------------------------------------------------------------------
334 class EditCharAttribTab : public EditCharAttrib
335 {
336 public:
337     EditCharAttribTab( const SfxVoidItem& rAttr, sal_uInt16 nPos );
338 
339     virtual void    SetFont( SvxFont& rFont, OutputDevice* pOutDev );
340 };
341 
342 // -------------------------------------------------------------------------
343 // class EditCharAttribLineBreak
344 // -------------------------------------------------------------------------
345 class EditCharAttribLineBreak : public EditCharAttrib
346 {
347 public:
348     EditCharAttribLineBreak( const SfxVoidItem& rAttr, sal_uInt16 nPos );
349 
350     virtual void    SetFont( SvxFont& rFont, OutputDevice* pOutDev );
351 };
352 
353 // -------------------------------------------------------------------------
354 // class EditCharAttribField
355 // -------------------------------------------------------------------------
356 class EditCharAttribField: public EditCharAttrib
357 {
358     XubString       aFieldValue;
359     Color*          pTxtColor;
360     Color*          pFldColor;
361 
362     EditCharAttribField& operator = ( const EditCharAttribField& rAttr ) const;
363 
364 public:
365     EditCharAttribField( const SvxFieldItem& rAttr, sal_uInt16 nPos );
366     EditCharAttribField( const EditCharAttribField& rAttr );
367     ~EditCharAttribField();
368 
369     sal_Bool operator == ( const EditCharAttribField& rAttr ) const;
operator !=(const EditCharAttribField & rAttr) const370     sal_Bool operator != ( const EditCharAttribField& rAttr ) const
371                                     { return !(operator == ( rAttr ) ); }
372 
373     virtual void    SetFont( SvxFont& rFont, OutputDevice* pOutDev );
GetTxtColor()374     Color*&         GetTxtColor()           { return pTxtColor; }
GetFldColor()375     Color*&         GetFldColor()           { return pFldColor; }
376 
GetFieldValue() const377     const XubString&    GetFieldValue() const   { return aFieldValue; }
GetFieldValue()378     XubString&      GetFieldValue()         { return aFieldValue; }
379 
Reset()380     void            Reset()
381                     {
382                         aFieldValue.Erase();
383                         delete pTxtColor; pTxtColor = 0;
384                         delete pFldColor; pFldColor = 0;
385                     }
386 };
387 
388 // -------------------------------------------------------------------------
389 // class EditCharAttribPairKerning
390 // -------------------------------------------------------------------------
391 class EditCharAttribPairKerning : public EditCharAttrib
392 {
393 public:
394     EditCharAttribPairKerning( const SvxAutoKernItem& rAttr, sal_uInt16 nStart, sal_uInt16 nEnd );
395 
396     virtual void    SetFont( SvxFont& rFont, OutputDevice* pOutDev );
397 };
398 
399 // -------------------------------------------------------------------------
400 // class EditCharAttribKerning
401 // -------------------------------------------------------------------------
402 class EditCharAttribKerning : public EditCharAttrib
403 {
404 public:
405     EditCharAttribKerning( const SvxKerningItem& rAttr, sal_uInt16 nStart, sal_uInt16 nEnd );
406 
407     virtual void    SetFont( SvxFont& rFont, OutputDevice* pOutDev );
408 };
409 
410 // -------------------------------------------------------------------------
411 // class EditCharAttribWordLineMode
412 // -------------------------------------------------------------------------
413 class EditCharAttribWordLineMode: public EditCharAttrib
414 {
415 public:
416     EditCharAttribWordLineMode( const SvxWordLineModeItem& rAttr, sal_uInt16 nStart, sal_uInt16 nEnd );
417 
418     virtual void    SetFont( SvxFont& rFont, OutputDevice* pOutDev );
419 };
420 
421 
422 #endif // _EDITATTR_HXX
423