xref: /AOO41X/main/svx/source/items/algitem.cxx (revision ae2dc0fa19335fe713e6dbbf20d81f8e1d5c6ee5)
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 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_svx.hxx"
26 
27 #include <svx/svxitems.hrc>
28 
29 
30 #include <tools/stream.hxx>
31 #include <com/sun/star/table/BorderLine.hpp>
32 #include <com/sun/star/table/CellVertJustify.hpp>
33 #include <com/sun/star/table/ShadowLocation.hpp>
34 #include <com/sun/star/table/TableBorder.hpp>
35 #include <com/sun/star/table/ShadowFormat.hpp>
36 #include <com/sun/star/table/CellRangeAddress.hpp>
37 #include <com/sun/star/table/CellContentType.hpp>
38 #include <com/sun/star/table/TableOrientation.hpp>
39 #include <com/sun/star/table/CellHoriJustify.hpp>
40 #include <com/sun/star/style/ParagraphAdjust.hpp>
41 #include "com/sun/star/style/VerticalAlignment.hpp"
42 #include <com/sun/star/util/SortField.hpp>
43 #include <com/sun/star/util/SortFieldType.hpp>
44 #include <com/sun/star/table/CellOrientation.hpp>
45 #include <com/sun/star/table/CellAddress.hpp>
46 
47 #include <svx/algitem.hxx>
48 #include <svx/dialmgr.hxx>
49 #include <editeng/itemtype.hxx>
50 #include <svx/unomid.hxx>
51 
52 using namespace ::rtl;
53 using namespace ::com::sun::star;
54 
55 // Konvertierung fuer UNO
56 #define TWIP_TO_MM100(TWIP)     ((TWIP) >= 0 ? (((TWIP)*127L+36L)/72L) : (((TWIP)*127L-36L)/72L))
57 #define MM100_TO_TWIP(MM100)    ((MM100) >= 0 ? (((MM100)*72L+63L)/127L) : (((MM100)*72L-63L)/127L))
58 
59 // STATIC DATA -----------------------------------------------------------
60 
61 //TYPEINIT1_AUTOFACTORY( SvxHorJustifyItem, SfxEnumItem );
62 TYPEINIT1_FACTORY( SvxHorJustifyItem, SfxEnumItem, new SvxHorJustifyItem(SVX_HOR_JUSTIFY_STANDARD, 0))
63 TYPEINIT1_FACTORY( SvxVerJustifyItem, SfxEnumItem, new SvxVerJustifyItem(SVX_VER_JUSTIFY_STANDARD, 0) );
64 TYPEINIT1_FACTORY( SvxOrientationItem, SfxEnumItem, new SvxOrientationItem(SVX_ORIENTATION_STANDARD, 0) );
65 TYPEINIT1_FACTORY( SvxMarginItem, SfxPoolItem, new SvxMarginItem(0) );
66 
67 // class SvxHorJustifyItem -----------------------------------------------
68 
69 
SvxHorJustifyItem(const sal_uInt16 nId)70 SvxHorJustifyItem::SvxHorJustifyItem( const sal_uInt16 nId ) :
71     SfxEnumItem( nId, (sal_uInt16)SVX_HOR_JUSTIFY_STANDARD )
72 {
73 }
74 
SvxHorJustifyItem(const SvxCellHorJustify eJustify,const sal_uInt16 nId)75 SvxHorJustifyItem::SvxHorJustifyItem( const SvxCellHorJustify eJustify,
76                                       const sal_uInt16 nId ) :
77     SfxEnumItem( nId, (sal_uInt16)eJustify )
78 {
79 }
80 
81 //------------------------------------------------------------------------
82 
GetPresentation(SfxItemPresentation ePres,SfxMapUnit,SfxMapUnit,XubString & rText,const IntlWrapper *) const83 SfxItemPresentation SvxHorJustifyItem::GetPresentation
84 (
85     SfxItemPresentation ePres,
86     SfxMapUnit          /*eCoreUnit*/,
87     SfxMapUnit          /*ePresUnit*/,
88     XubString&              rText, const IntlWrapper *)    const
89 {
90     switch ( ePres )
91     {
92         case SFX_ITEM_PRESENTATION_NONE:
93             rText.Erase();
94             return SFX_ITEM_PRESENTATION_NONE;
95         case SFX_ITEM_PRESENTATION_NAMELESS:
96         case SFX_ITEM_PRESENTATION_COMPLETE:
97             rText = GetValueText( GetValue() );
98             return SFX_ITEM_PRESENTATION_COMPLETE;
99         default: ; //prevent warning
100     }
101     return SFX_ITEM_PRESENTATION_NONE;
102 }
103 
104 //------------------------------------------------------------------------
105 
QueryValue(uno::Any & rVal,sal_uInt8 nMemberId) const106 sal_Bool SvxHorJustifyItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
107 {
108 //    sal_Bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
109     nMemberId &= ~CONVERT_TWIPS;
110     switch ( nMemberId )
111     {
112         case MID_HORJUST_HORJUST:
113             {
114                 table::CellHoriJustify eUno = table::CellHoriJustify_STANDARD;
115                 switch ( (SvxCellHorJustify)GetValue() )
116                 {
117                     case SVX_HOR_JUSTIFY_STANDARD: eUno = table::CellHoriJustify_STANDARD; break;
118                     case SVX_HOR_JUSTIFY_LEFT:     eUno = table::CellHoriJustify_LEFT;     break;
119                     case SVX_HOR_JUSTIFY_CENTER:   eUno = table::CellHoriJustify_CENTER;   break;
120                     case SVX_HOR_JUSTIFY_RIGHT:    eUno = table::CellHoriJustify_RIGHT;    break;
121                     case SVX_HOR_JUSTIFY_BLOCK:    eUno = table::CellHoriJustify_BLOCK;    break;
122                     case SVX_HOR_JUSTIFY_REPEAT:   eUno = table::CellHoriJustify_REPEAT;   break;
123                 }
124                 rVal <<= eUno;
125             }
126             break;
127         case MID_HORJUST_ADJUST:
128             {
129                 //  ParagraphAdjust values, as in SvxAdjustItem
130                 //  (same value for ParaAdjust and ParaLastLineAdjust)
131 
132                 sal_Int16 nAdjust = style::ParagraphAdjust_LEFT;
133                 switch ( (SvxCellHorJustify)GetValue() )
134                 {
135                     // ParagraphAdjust_LEFT is used for STANDARD and REPEAT
136                     case SVX_HOR_JUSTIFY_STANDARD:
137                     case SVX_HOR_JUSTIFY_REPEAT:
138                     case SVX_HOR_JUSTIFY_LEFT:   nAdjust = style::ParagraphAdjust_LEFT;   break;
139                     case SVX_HOR_JUSTIFY_CENTER: nAdjust = style::ParagraphAdjust_CENTER; break;
140                     case SVX_HOR_JUSTIFY_RIGHT:  nAdjust = style::ParagraphAdjust_RIGHT;  break;
141                     case SVX_HOR_JUSTIFY_BLOCK:  nAdjust = style::ParagraphAdjust_BLOCK;  break;
142                 }
143                 rVal <<= nAdjust;       // as sal_Int16
144             }
145             break;
146     }
147     return sal_True;
148 }
149 
PutValue(const uno::Any & rVal,sal_uInt8 nMemberId)150 sal_Bool SvxHorJustifyItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
151 {
152 //    sal_Bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
153     nMemberId &= ~CONVERT_TWIPS;
154     switch ( nMemberId )
155     {
156         case MID_HORJUST_HORJUST:
157             {
158                 table::CellHoriJustify eUno;
159                 if(!(rVal >>= eUno))
160                 {
161                     sal_Int32 nValue = 0;
162                     if(!(rVal >>= nValue))
163                         return sal_False;
164                     eUno = (table::CellHoriJustify)nValue;
165                 }
166                 SvxCellHorJustify eSvx = SVX_HOR_JUSTIFY_STANDARD;
167                 switch (eUno)
168                 {
169                     case table::CellHoriJustify_STANDARD: eSvx = SVX_HOR_JUSTIFY_STANDARD; break;
170                     case table::CellHoriJustify_LEFT:     eSvx = SVX_HOR_JUSTIFY_LEFT;     break;
171                     case table::CellHoriJustify_CENTER:   eSvx = SVX_HOR_JUSTIFY_CENTER;   break;
172                     case table::CellHoriJustify_RIGHT:    eSvx = SVX_HOR_JUSTIFY_RIGHT;    break;
173                     case table::CellHoriJustify_BLOCK:    eSvx = SVX_HOR_JUSTIFY_BLOCK;    break;
174                     case table::CellHoriJustify_REPEAT:   eSvx = SVX_HOR_JUSTIFY_REPEAT;   break;
175                     default: ; //prevent warning
176                 }
177                 SetValue( (sal_uInt16)eSvx );
178             }
179             break;
180         case MID_HORJUST_ADJUST:
181             {
182                 //  property contains ParagraphAdjust values as sal_Int16
183                 sal_Int16 nVal = sal_Int16();
184                 if(!(rVal >>= nVal))
185                     return sal_False;
186 
187                 SvxCellHorJustify eSvx = SVX_HOR_JUSTIFY_STANDARD;
188                 switch (nVal)
189                 {
190                     //  STRETCH is treated as BLOCK
191                     case style::ParagraphAdjust_LEFT:    eSvx = SVX_HOR_JUSTIFY_LEFT;   break;
192                     case style::ParagraphAdjust_RIGHT:   eSvx = SVX_HOR_JUSTIFY_RIGHT;  break;
193                     case style::ParagraphAdjust_STRETCH:
194                     case style::ParagraphAdjust_BLOCK:   eSvx = SVX_HOR_JUSTIFY_BLOCK;  break;
195                     case style::ParagraphAdjust_CENTER:  eSvx = SVX_HOR_JUSTIFY_CENTER; break;
196                 }
197                 SetValue( (sal_uInt16)eSvx );
198             }
199     }
200     return sal_True;
201 }
202 
203 //------------------------------------------------------------------------
204 
GetValueText(sal_uInt16 nVal) const205 XubString SvxHorJustifyItem::GetValueText( sal_uInt16 nVal ) const
206 {
207     DBG_ASSERT( nVal <= SVX_HOR_JUSTIFY_REPEAT, "enum overflow!" );
208     return SVX_RESSTR(RID_SVXITEMS_HORJUST_STANDARD + nVal);
209 }
210 
211 //------------------------------------------------------------------------
212 
Clone(SfxItemPool *) const213 SfxPoolItem* SvxHorJustifyItem::Clone( SfxItemPool* ) const
214 {
215     return new SvxHorJustifyItem( *this );
216 }
217 
218 //------------------------------------------------------------------------
219 
Create(SvStream & rStream,sal_uInt16) const220 SfxPoolItem* SvxHorJustifyItem::Create( SvStream& rStream, sal_uInt16 ) const
221 {
222     sal_uInt16 nVal;
223     rStream >> nVal;
224     return new SvxHorJustifyItem( (SvxCellHorJustify)nVal, Which() );
225 }
226 //------------------------------------------------------------------------
227 
GetValueCount() const228 sal_uInt16 SvxHorJustifyItem::GetValueCount() const
229 {
230     return SVX_HOR_JUSTIFY_REPEAT + 1;  // letzter Enum-Wert + 1
231 }
232 
233 // class SvxVerJustifyItem -----------------------------------------------
234 
SvxVerJustifyItem(const sal_uInt16 nId)235 SvxVerJustifyItem::SvxVerJustifyItem( const sal_uInt16 nId ) :
236     SfxEnumItem( nId, (sal_uInt16)SVX_VER_JUSTIFY_STANDARD )
237 {
238 }
239 
SvxVerJustifyItem(const SvxCellVerJustify eJustify,const sal_uInt16 nId)240 SvxVerJustifyItem::SvxVerJustifyItem( const SvxCellVerJustify eJustify,
241                                       const sal_uInt16 nId ) :
242     SfxEnumItem( nId, (sal_uInt16)eJustify )
243 {
244 }
245 
246 //------------------------------------------------------------------------
247 
GetPresentation(SfxItemPresentation ePres,SfxMapUnit,SfxMapUnit,XubString & rText,const IntlWrapper *) const248 SfxItemPresentation SvxVerJustifyItem::GetPresentation
249 (
250     SfxItemPresentation ePres,
251     SfxMapUnit          /*eCoreUnit*/,
252     SfxMapUnit          /*ePresUnit*/,
253     XubString&              rText,
254     const IntlWrapper * )    const
255 {
256     switch ( ePres )
257     {
258         case SFX_ITEM_PRESENTATION_NONE:
259             rText.Erase();
260             return SFX_ITEM_PRESENTATION_NONE;
261         case SFX_ITEM_PRESENTATION_NAMELESS:
262         case SFX_ITEM_PRESENTATION_COMPLETE:
263             rText = GetValueText( GetValue() );
264             return SFX_ITEM_PRESENTATION_COMPLETE;
265         default: ; //prevent warning
266     }
267     return SFX_ITEM_PRESENTATION_NONE;
268 }
269 
270 //------------------------------------------------------------------------
271 
QueryValue(uno::Any & rVal,sal_uInt8 nMemberId) const272 sal_Bool SvxVerJustifyItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
273 {
274     nMemberId &= ~CONVERT_TWIPS;
275     switch ( nMemberId )
276     {
277         case MID_HORJUST_ADJUST:
278             {
279                 style::VerticalAlignment eUno = style::VerticalAlignment_TOP;
280                 switch ( (SvxCellVerJustify)GetValue() )
281                 {
282                     case SVX_VER_JUSTIFY_TOP:      eUno = style::VerticalAlignment_TOP;     break;
283                     case SVX_VER_JUSTIFY_CENTER:   eUno = style::VerticalAlignment_MIDDLE;  break;
284                     case SVX_VER_JUSTIFY_BOTTOM:   eUno = style::VerticalAlignment_BOTTOM;  break;
285                     default: ; //prevent warning
286                 }
287                 rVal <<= eUno;
288                 break;
289             }
290         default:
291             {
292                 table::CellVertJustify eUno = table::CellVertJustify_STANDARD;
293                 switch ( (SvxCellVerJustify)GetValue() )
294                 {
295                     case SVX_VER_JUSTIFY_STANDARD: eUno = table::CellVertJustify_STANDARD; break;
296                     case SVX_VER_JUSTIFY_TOP:      eUno = table::CellVertJustify_TOP;       break;
297                     case SVX_VER_JUSTIFY_CENTER:   eUno = table::CellVertJustify_CENTER;    break;
298                     case SVX_VER_JUSTIFY_BOTTOM:   eUno = table::CellVertJustify_BOTTOM;    break;
299                     default: ; //prevent warning
300                 }
301                 rVal <<= eUno;
302                 break;
303             }
304     }
305     return sal_True;
306 }
307 
PutValue(const uno::Any & rVal,sal_uInt8 nMemberId)308 sal_Bool SvxVerJustifyItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
309 {
310     nMemberId &= ~CONVERT_TWIPS;
311     switch ( nMemberId )
312     {
313         case MID_HORJUST_ADJUST:
314             {
315                 //  property contains ParagraphAdjust values as sal_Int16
316                 style::VerticalAlignment nVal = style::VerticalAlignment_TOP;
317                 if(!(rVal >>= nVal))
318                     return sal_False;
319 
320                 SvxCellVerJustify eSvx = SVX_VER_JUSTIFY_STANDARD;
321                 switch (nVal)
322                 {
323                     case style::VerticalAlignment_TOP:      eSvx = SVX_VER_JUSTIFY_TOP;     break;
324                     case style::VerticalAlignment_MIDDLE:   eSvx = SVX_VER_JUSTIFY_CENTER;  break;
325                     case style::VerticalAlignment_BOTTOM:   eSvx = SVX_VER_JUSTIFY_BOTTOM;  break;
326                     default:;
327                 }
328                 SetValue( (sal_uInt16)eSvx );
329                 break;
330             }
331         default:
332             {
333                 table::CellVertJustify eUno;
334                 if(!(rVal >>= eUno))
335                 {
336                     sal_Int32 nValue = 0;
337                     if(!(rVal >>= nValue))
338                         return sal_False;
339                     eUno = (table::CellVertJustify)nValue;
340                 }
341 
342                 SvxCellVerJustify eSvx = SVX_VER_JUSTIFY_STANDARD;
343                 switch (eUno)
344                 {
345                     case table::CellVertJustify_STANDARD: eSvx = SVX_VER_JUSTIFY_STANDARD;  break;
346                     case table::CellVertJustify_TOP:      eSvx = SVX_VER_JUSTIFY_TOP;       break;
347                     case table::CellVertJustify_CENTER:   eSvx = SVX_VER_JUSTIFY_CENTER;    break;
348                     case table::CellVertJustify_BOTTOM:   eSvx = SVX_VER_JUSTIFY_BOTTOM;    break;
349                     default: ; //prevent warning
350                 }
351                 SetValue( (sal_uInt16)eSvx );
352                 break;
353             }
354     }
355 
356     return sal_True;
357 }
358 
359 //------------------------------------------------------------------------
360 
GetValueText(sal_uInt16 nVal) const361 XubString SvxVerJustifyItem::GetValueText( sal_uInt16 nVal ) const
362 {
363     DBG_ASSERT( nVal <= SVX_VER_JUSTIFY_BOTTOM, "enum overflow!" );
364     return SVX_RESSTR(RID_SVXITEMS_VERJUST_STANDARD + nVal);
365 }
366 
367 //------------------------------------------------------------------------
368 
Clone(SfxItemPool *) const369 SfxPoolItem* SvxVerJustifyItem::Clone( SfxItemPool* ) const
370 {
371     return new SvxVerJustifyItem( *this );
372 }
373 
374 //------------------------------------------------------------------------
375 
Create(SvStream & rStream,sal_uInt16) const376 SfxPoolItem* SvxVerJustifyItem::Create( SvStream& rStream, sal_uInt16 ) const
377 {
378     sal_uInt16 nVal;
379     rStream >> nVal;
380     return new SvxVerJustifyItem( (SvxCellVerJustify)nVal, Which() );
381 }
382 
383 //------------------------------------------------------------------------
384 
GetValueCount() const385 sal_uInt16 SvxVerJustifyItem::GetValueCount() const
386 {
387     return SVX_VER_JUSTIFY_BOTTOM + 1;  // letzter Enum-Wert + 1
388 }
389 
390 // class SvxOrientationItem ----------------------------------------------
391 
SvxOrientationItem(const SvxCellOrientation eOrientation,const sal_uInt16 nId)392 SvxOrientationItem::SvxOrientationItem( const SvxCellOrientation eOrientation,
393                                         const sal_uInt16 nId):
394     SfxEnumItem( nId, (sal_uInt16)eOrientation )
395 {
396 }
397 
SvxOrientationItem(sal_Int32 nRotation,sal_Bool bStacked,const sal_uInt16 nId)398 SvxOrientationItem::SvxOrientationItem( sal_Int32 nRotation, sal_Bool bStacked, const sal_uInt16 nId ) :
399     SfxEnumItem( nId )
400 {
401     SetFromRotation( nRotation, bStacked );
402 }
403 
404 //------------------------------------------------------------------------
405 
GetPresentation(SfxItemPresentation ePres,SfxMapUnit,SfxMapUnit,XubString & rText,const IntlWrapper *) const406 SfxItemPresentation SvxOrientationItem::GetPresentation
407 (
408     SfxItemPresentation ePres,
409     SfxMapUnit          /*eCoreUnit*/,
410     SfxMapUnit          /*ePresUnit*/,
411     XubString&              rText, const IntlWrapper * ) const
412 {
413     switch ( ePres )
414     {
415         case SFX_ITEM_PRESENTATION_NONE:
416             rText.Erase();
417             return SFX_ITEM_PRESENTATION_NONE;
418         case SFX_ITEM_PRESENTATION_NAMELESS:
419         case SFX_ITEM_PRESENTATION_COMPLETE:
420             rText = GetValueText( GetValue() );
421             return SFX_ITEM_PRESENTATION_COMPLETE;
422         default: ; //prevent warning
423     }
424     return SFX_ITEM_PRESENTATION_NONE;
425 }
426 
427 //------------------------------------------------------------------------
428 
QueryValue(uno::Any & rVal,sal_uInt8) const429 sal_Bool SvxOrientationItem::QueryValue( uno::Any& rVal, sal_uInt8 /*nMemberId*/ ) const
430 {
431     table::CellOrientation eUno = table::CellOrientation_STANDARD;
432     switch ( (SvxCellOrientation)GetValue() )
433     {
434     case SVX_ORIENTATION_STANDARD:  eUno = table::CellOrientation_STANDARD;  break;
435     case SVX_ORIENTATION_TOPBOTTOM: eUno = table::CellOrientation_TOPBOTTOM; break;
436     case SVX_ORIENTATION_BOTTOMTOP: eUno = table::CellOrientation_BOTTOMTOP; break;
437     case SVX_ORIENTATION_STACKED:   eUno = table::CellOrientation_STACKED;    break;
438     }
439     rVal <<= eUno;
440     return sal_True;
441 }
442 
PutValue(const uno::Any & rVal,sal_uInt8)443 sal_Bool SvxOrientationItem::PutValue( const uno::Any& rVal, sal_uInt8 /*nMemberId*/ )
444 {
445     table::CellOrientation eOrient;
446     if(!(rVal >>= eOrient))
447     {
448         sal_Int32 nValue = 0;
449         if(!(rVal >>= nValue))
450             return sal_False;
451         eOrient = (table::CellOrientation)nValue;
452     }
453     SvxCellOrientation eSvx = SVX_ORIENTATION_STANDARD;
454     switch (eOrient)
455     {
456         case table::CellOrientation_STANDARD:   eSvx = SVX_ORIENTATION_STANDARD;  break;
457         case table::CellOrientation_TOPBOTTOM:  eSvx = SVX_ORIENTATION_TOPBOTTOM; break;
458         case table::CellOrientation_BOTTOMTOP:  eSvx = SVX_ORIENTATION_BOTTOMTOP; break;
459         case table::CellOrientation_STACKED:    eSvx = SVX_ORIENTATION_STACKED;   break;
460         default: ; //prevent warning
461     }
462     SetValue( (sal_uInt16)eSvx );
463     return sal_True;
464 }
465 
466 //------------------------------------------------------------------------
467 
GetValueText(sal_uInt16 nVal) const468 XubString SvxOrientationItem::GetValueText( sal_uInt16 nVal ) const
469 {
470     DBG_ASSERT( nVal <= SVX_ORIENTATION_STACKED, "enum overflow!" );
471     return SVX_RESSTR(RID_SVXITEMS_ORI_STANDARD + nVal);
472 }
473 
474 //------------------------------------------------------------------------
475 
Clone(SfxItemPool *) const476 SfxPoolItem* SvxOrientationItem::Clone( SfxItemPool* ) const
477 {
478     return new SvxOrientationItem( *this );
479 }
480 
481 //------------------------------------------------------------------------
482 
Create(SvStream & rStream,sal_uInt16) const483 SfxPoolItem* SvxOrientationItem::Create( SvStream& rStream, sal_uInt16 ) const
484 {
485     sal_uInt16 nVal;
486     rStream >> nVal;
487     return new SvxOrientationItem( (SvxCellOrientation)nVal, Which() );
488 }
489 
490 //------------------------------------------------------------------------
491 
GetValueCount() const492 sal_uInt16 SvxOrientationItem::GetValueCount() const
493 {
494     return SVX_ORIENTATION_STACKED + 1; // letzter Enum-Wert + 1
495 }
496 
497 //------------------------------------------------------------------------
498 
IsStacked() const499 sal_Bool SvxOrientationItem::IsStacked() const
500 {
501     return static_cast< SvxCellOrientation >( GetValue() ) == SVX_ORIENTATION_STACKED;
502 }
503 
GetRotation(sal_Int32 nStdAngle) const504 sal_Int32 SvxOrientationItem::GetRotation( sal_Int32 nStdAngle ) const
505 {
506     sal_Int32 nAngle = nStdAngle;
507     switch( static_cast< SvxCellOrientation >( GetValue() ) )
508     {
509         case SVX_ORIENTATION_BOTTOMTOP: nAngle = 9000;
510         case SVX_ORIENTATION_TOPBOTTOM: nAngle = 27000;
511         default: ; //prevent warning
512     }
513     return nAngle;
514 }
515 
SetFromRotation(sal_Int32 nRotation,sal_Bool bStacked)516 void SvxOrientationItem::SetFromRotation( sal_Int32 nRotation, sal_Bool bStacked )
517 {
518     if( bStacked )
519     {
520         SetValue( SVX_ORIENTATION_STACKED );
521     }
522     else switch( nRotation )
523     {
524         case 9000:  SetValue( SVX_ORIENTATION_BOTTOMTOP );  break;
525         case 27000: SetValue( SVX_ORIENTATION_TOPBOTTOM );  break;
526         default:    SetValue( SVX_ORIENTATION_STANDARD );
527     }
528 }
529 
530 // class SvxMarginItem ---------------------------------------------------
531 
SvxMarginItem(const sal_uInt16 nId)532 SvxMarginItem::SvxMarginItem( const sal_uInt16 nId ) :
533 
534     SfxPoolItem( nId ),
535 
536     nLeftMargin  ( 20 ),
537     nTopMargin   ( 20 ),
538     nRightMargin ( 20 ),
539     nBottomMargin( 20 )
540 {
541 }
542 
543 //------------------------------------------------------------------------
544 
SvxMarginItem(sal_Int16 nLeft,sal_Int16 nTop,sal_Int16 nRight,sal_Int16 nBottom,const sal_uInt16 nId)545 SvxMarginItem::SvxMarginItem( sal_Int16 nLeft,
546                               sal_Int16 nTop,
547                               sal_Int16 nRight,
548                               sal_Int16 nBottom,
549                               const sal_uInt16 nId ) :
550     SfxPoolItem( nId ),
551 
552     nLeftMargin  ( nLeft ),
553     nTopMargin   ( nTop ),
554     nRightMargin ( nRight ),
555     nBottomMargin( nBottom )
556 {
557 }
558 
559 
560 //------------------------------------------------------------------------
561 
SvxMarginItem(const SvxMarginItem & rItem)562 SvxMarginItem::SvxMarginItem( const SvxMarginItem& rItem ) :
563 
564     SfxPoolItem( rItem.Which() )
565 {
566     nLeftMargin = rItem.nLeftMargin;
567     nTopMargin = rItem.nTopMargin;
568     nRightMargin = rItem.nRightMargin;
569     nBottomMargin = rItem.nBottomMargin;
570 }
571 
572 //------------------------------------------------------------------------
573 
GetPresentation(SfxItemPresentation ePres,SfxMapUnit eCoreUnit,SfxMapUnit ePresUnit,XubString & rText,const IntlWrapper * pIntl) const574 SfxItemPresentation SvxMarginItem::GetPresentation
575 (
576     SfxItemPresentation ePres,
577     SfxMapUnit          eCoreUnit,
578     SfxMapUnit          ePresUnit,
579     XubString&          rText, const IntlWrapper *pIntl
580 )   const
581 {
582 #ifndef SVX_LIGHT
583     switch ( ePres )
584     {
585         case SFX_ITEM_PRESENTATION_NONE:
586             rText.Erase();
587             return SFX_ITEM_PRESENTATION_NONE;
588         case SFX_ITEM_PRESENTATION_NAMELESS:
589         {
590             rText = GetMetricText( (long)nLeftMargin, eCoreUnit, ePresUnit, pIntl );
591             rText += cpDelim;
592             rText += GetMetricText( (long)nTopMargin, eCoreUnit, ePresUnit, pIntl );
593             rText += cpDelim;
594             rText += GetMetricText( (long)nRightMargin, eCoreUnit, ePresUnit, pIntl );
595             rText += cpDelim;
596             rText += GetMetricText( (long)nBottomMargin, eCoreUnit, ePresUnit, pIntl );
597             return SFX_ITEM_PRESENTATION_NAMELESS;
598         }
599         case SFX_ITEM_PRESENTATION_COMPLETE:
600         {
601             rText = SVX_RESSTR(RID_SVXITEMS_MARGIN_LEFT);
602             rText += GetMetricText( (long)nLeftMargin, eCoreUnit, ePresUnit, pIntl );
603             rText += sal_Unicode(' ');
604             rText += SVX_RESSTR(GetMetricId(ePresUnit));
605             rText += cpDelim;
606             rText += SVX_RESSTR(RID_SVXITEMS_MARGIN_TOP);
607             rText += GetMetricText( (long)nTopMargin, eCoreUnit, ePresUnit, pIntl );
608             rText += sal_Unicode(' ');
609             rText += SVX_RESSTR(GetMetricId(ePresUnit));
610             rText += cpDelim;
611             rText += SVX_RESSTR(RID_SVXITEMS_MARGIN_RIGHT);
612             rText += GetMetricText( (long)nRightMargin, eCoreUnit, ePresUnit, pIntl );
613             rText += sal_Unicode(' ');
614             rText += SVX_RESSTR(GetMetricId(ePresUnit));
615             rText += cpDelim;
616             rText += SVX_RESSTR(RID_SVXITEMS_MARGIN_BOTTOM);
617             rText += GetMetricText( (long)nBottomMargin, eCoreUnit, ePresUnit, pIntl );
618             rText += sal_Unicode(' ');
619             rText += SVX_RESSTR(GetMetricId(ePresUnit));
620             return SFX_ITEM_PRESENTATION_COMPLETE;
621         }
622         default: ; //prevent warning
623     }
624 #endif
625     return SFX_ITEM_PRESENTATION_NONE;
626 }
627 
628 //------------------------------------------------------------------------
629 
operator ==(const SfxPoolItem & rItem) const630 int SvxMarginItem::operator==( const SfxPoolItem& rItem ) const
631 {
632     DBG_ASSERT( SfxPoolItem::operator==( rItem ), "unequal type" );
633 
634     return ( ( nLeftMargin == ( (SvxMarginItem&)rItem ).nLeftMargin )   &&
635              ( nTopMargin == ( (SvxMarginItem&)rItem ).nTopMargin )     &&
636              ( nRightMargin == ( (SvxMarginItem&)rItem ).nRightMargin ) &&
637              ( nBottomMargin == ( (SvxMarginItem&)rItem ).nBottomMargin ) );
638 }
639 
640 //------------------------------------------------------------------------
641 
Clone(SfxItemPool *) const642 SfxPoolItem* SvxMarginItem::Clone( SfxItemPool* ) const
643 {
644     return new SvxMarginItem(*this);
645 }
646 
647 //------------------------------------------------------------------------
648 
Create(SvStream & rStream,sal_uInt16) const649 SfxPoolItem* SvxMarginItem::Create( SvStream& rStream, sal_uInt16 ) const
650 {
651     sal_Int16   nLeft;
652     sal_Int16   nTop;
653     sal_Int16   nRight;
654     sal_Int16   nBottom;
655     rStream >> nLeft;
656     rStream >> nTop;
657     rStream >> nRight;
658     rStream >> nBottom;
659     return new SvxMarginItem( nLeft, nTop, nRight, nBottom, Which() );
660 }
661 
662 //------------------------------------------------------------------------
663 
Store(SvStream & rStream,sal_uInt16) const664 SvStream& SvxMarginItem::Store( SvStream &rStream, sal_uInt16 /*nItemVersion*/) const
665 {
666     rStream << nLeftMargin;
667     rStream << nTopMargin;
668     rStream << nRightMargin;
669     rStream << nBottomMargin;
670     return rStream;
671 }
672 
673 
674 //------------------------------------------------------------------------
675 
QueryValue(uno::Any & rVal,sal_uInt8 nMemberId) const676 sal_Bool SvxMarginItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const
677 {
678     sal_Bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
679     nMemberId &= ~CONVERT_TWIPS;
680     switch ( nMemberId )
681     {
682         //  jetzt alles signed
683         case MID_MARGIN_L_MARGIN:
684             rVal <<= (sal_Int32)( bConvert ? TWIP_TO_MM100(nLeftMargin) : nLeftMargin );
685             break;
686         case MID_MARGIN_R_MARGIN:
687             rVal <<= (sal_Int32)( bConvert ? TWIP_TO_MM100(nRightMargin) : nRightMargin );
688             break;
689         case MID_MARGIN_UP_MARGIN:
690             rVal <<= (sal_Int32)( bConvert ? TWIP_TO_MM100(nTopMargin) : nTopMargin );
691             break;
692         case MID_MARGIN_LO_MARGIN:
693             rVal <<= (sal_Int32)( bConvert ? TWIP_TO_MM100(nBottomMargin) : nBottomMargin );
694             break;
695         default:
696             DBG_ERROR("unknown MemberId");
697             return sal_False;
698     }
699     return sal_True;
700 }
701 
702 //------------------------------------------------------------------------
703 
PutValue(const uno::Any & rVal,sal_uInt8 nMemberId)704 sal_Bool SvxMarginItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
705 {
706     sal_Bool bConvert = ( ( nMemberId & CONVERT_TWIPS ) != 0 );
707     long nMaxVal = bConvert ? TWIP_TO_MM100(SHRT_MAX) : SHRT_MAX;   // Members sind sal_Int16
708     sal_Int32 nVal = 0;
709     if(!(rVal >>= nVal) || (nVal > nMaxVal))
710         return sal_False;
711 
712     switch ( nMemberId & ~CONVERT_TWIPS )
713     {
714         case MID_MARGIN_L_MARGIN:
715             nLeftMargin = (sal_Int16)( bConvert ? MM100_TO_TWIP(nVal) : nVal );
716             break;
717         case MID_MARGIN_R_MARGIN:
718             nRightMargin = (sal_Int16)( bConvert ? MM100_TO_TWIP(nVal) : nVal );
719             break;
720         case MID_MARGIN_UP_MARGIN:
721             nTopMargin = (sal_Int16)( bConvert ? MM100_TO_TWIP(nVal) : nVal );
722             break;
723         case MID_MARGIN_LO_MARGIN:
724             nBottomMargin = (sal_Int16)( bConvert ? MM100_TO_TWIP(nVal) : nVal );
725             break;
726         default:
727             DBG_ERROR("unknown MemberId");
728             return sal_False;
729     }
730     return sal_True;
731 }
732 
733 //------------------------------------------------------------------------
734 
SetLeftMargin(sal_Int16 nLeft)735 sal_Bool SvxMarginItem::SetLeftMargin( sal_Int16 nLeft )
736 {
737     nLeftMargin = nLeft;
738     return sal_True;
739 }
740 
741 //------------------------------------------------------------------------
742 
SetTopMargin(sal_Int16 nTop)743 sal_Bool SvxMarginItem::SetTopMargin( sal_Int16 nTop )
744 {
745     nTopMargin = nTop;
746     return sal_True;
747 }
748 
749 //------------------------------------------------------------------------
750 
SetRightMargin(sal_Int16 nRight)751 sal_Bool SvxMarginItem::SetRightMargin( sal_Int16 nRight )
752 {
753     nRightMargin = nRight;
754     return sal_True;
755 }
756 
757 //------------------------------------------------------------------------
758 
SetBottomMargin(sal_Int16 nBottom)759 sal_Bool SvxMarginItem::SetBottomMargin( sal_Int16 nBottom )
760 {
761     nBottomMargin = nBottom;
762     return sal_True;
763 }
764 
765 
766