1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #include <com/sun/star/beans/PropertyValue.hpp>
21 #include <com/sun/star/beans/XPropertySet.hpp>
22 #include <com/sun/star/awt/Size.hpp>
23 #include <com/sun/star/awt/FontDescriptor.hpp>
24 #include <com/sun/star/text/HoriOrientation.hpp>
25 #include <com/sun/star/text/VertOrientation.hpp>
26 #include <com/sun/star/text/PositionAndSpaceMode.hpp>
27 #include <com/sun/star/text/LabelFollow.hpp>
28 #include <com/sun/star/container/XNameContainer.hpp>
29 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
30 #include <com/sun/star/style/XStyle.hpp>
31 #include <com/sun/star/io/XOutputStream.hpp>
33 #include <rtl/ustrbuf.hxx>
35 #include <tools/debug.hxx>
36 #include <tools/fontenum.hxx>
38 #include <sax/tools/converter.hxx>
40 #include <xmloff/xmltkmap.hxx>
41 #include <xmloff/nmspmap.hxx>
42 #include "xmloff/xmlnmspe.hxx"
43 #include <xmloff/xmlimp.hxx>
44 #include <xmloff/XMLBase64ImportContext.hxx>
45 #include <xmloff/xmltoken.hxx>
47 #include <xmloff/i18nmap.hxx>
48 #include <xmloff/xmluconv.hxx>
49 #include "fonthdl.hxx"
50 #include <xmloff/XMLFontStylesContext.hxx>
51 #include <xmloff/families.hxx>
52 #include <xmloff/maptype.hxx>
54 #include <xmloff/xmlnumi.hxx>
57 using namespace ::com::sun::star
;
58 using namespace ::com::sun::star::uno
;
59 using namespace ::com::sun::star::style
;
60 using namespace ::com::sun::star::text
;
61 using namespace ::com::sun::star::beans
;
62 using namespace ::com::sun::star::container
;
63 using namespace ::com::sun::star::lang
;
64 using namespace ::com::sun::star::frame
;
65 using namespace ::xmloff::token
;
66 using namespace ::com::sun::star::io
;
68 // ---------------------------------------------------------------------
70 class SvxXMLListLevelStyleContext_Impl
;
72 class SvxXMLListLevelStyleAttrContext_Impl
: public SvXMLImportContext
74 SvxXMLListLevelStyleContext_Impl
& rListLevel
;
78 SvxXMLListLevelStyleAttrContext_Impl(
79 SvXMLImport
& rImport
, sal_uInt16 nPrfx
,
80 const OUString
& rLName
,
81 const Reference
< xml::sax::XAttributeList
>& xAttrList
,
82 SvxXMLListLevelStyleContext_Impl
& rLLevel
);
83 virtual ~SvxXMLListLevelStyleAttrContext_Impl();
85 virtual SvXMLImportContext
*CreateChildContext(
86 sal_uInt16 nPrefix
, const OUString
& rLocalName
,
87 const Reference
< xml::sax::XAttributeList
> & xAttrList
);
90 // ---------------------------------------------------------------------
92 class SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl
: public SvXMLImportContext
94 SvxXMLListLevelStyleContext_Impl
& rListLevel
;
98 SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl(
99 SvXMLImport
& rImport
, sal_uInt16 nPrfx
,
100 const OUString
& rLName
,
101 const Reference
< xml::sax::XAttributeList
>& xAttrList
,
102 SvxXMLListLevelStyleContext_Impl
& rLLevel
);
103 virtual ~SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl();
106 // ---------------------------------------------------------------------
108 enum SvxXMLTextListLevelStyleAttrTokens
110 XML_TOK_TEXT_LEVEL_ATTR_LEVEL
,
111 XML_TOK_TEXT_LEVEL_ATTR_STYLE_NAME
,
112 XML_TOK_TEXT_LEVEL_ATTR_BULLET_CHAR
,
113 XML_TOK_TEXT_LEVEL_ATTR_HREF
,
114 XML_TOK_TEXT_LEVEL_ATTR_TYPE
,
115 XML_TOK_TEXT_LEVEL_ATTR_SHOW
,
116 XML_TOK_TEXT_LEVEL_ATTR_ACTUATE
,
117 XML_TOK_TEXT_LEVEL_ATTR_NUM_FORMAT
,
118 XML_TOK_TEXT_LEVEL_ATTR_NUM_PREFIX
,
119 XML_TOK_TEXT_LEVEL_ATTR_NUM_SUFFIX
,
120 XML_TOK_TEXT_LEVEL_ATTR_NUM_LETTER_SYNC
,
121 XML_TOK_TEXT_LEVEL_ATTR_START_VALUE
,
122 XML_TOK_TEXT_LEVEL_ATTR_DISPLAY_LEVELS
,
124 XML_TOK_TEXT_LEVEL_ATTR_END
=XML_TOK_UNKNOWN
127 static const SvXMLTokenMapEntry
* lcl_getLevelAttrTokenMap()
129 static SvXMLTokenMapEntry aLevelAttrTokenMap
[] =
131 { XML_NAMESPACE_TEXT
, XML_LEVEL
, XML_TOK_TEXT_LEVEL_ATTR_LEVEL
},
132 { XML_NAMESPACE_TEXT
, XML_STYLE_NAME
, XML_TOK_TEXT_LEVEL_ATTR_STYLE_NAME
},
133 { XML_NAMESPACE_TEXT
, XML_BULLET_CHAR
, XML_TOK_TEXT_LEVEL_ATTR_BULLET_CHAR
},
134 { XML_NAMESPACE_XLINK
, XML_HREF
, XML_TOK_TEXT_LEVEL_ATTR_HREF
},
135 { XML_NAMESPACE_XLINK
, XML_TYPE
, XML_TOK_TEXT_LEVEL_ATTR_TYPE
},
136 { XML_NAMESPACE_XLINK
, XML_SHOW
, XML_TOK_TEXT_LEVEL_ATTR_SHOW
},
137 { XML_NAMESPACE_XLINK
, XML_ACTUATE
, XML_TOK_TEXT_LEVEL_ATTR_ACTUATE
},
139 { XML_NAMESPACE_STYLE
, XML_NUM_FORMAT
, XML_TOK_TEXT_LEVEL_ATTR_NUM_FORMAT
},
140 { XML_NAMESPACE_STYLE
, XML_NUM_PREFIX
, XML_TOK_TEXT_LEVEL_ATTR_NUM_PREFIX
},
141 { XML_NAMESPACE_STYLE
, XML_NUM_SUFFIX
, XML_TOK_TEXT_LEVEL_ATTR_NUM_SUFFIX
},
142 { XML_NAMESPACE_STYLE
, XML_NUM_LETTER_SYNC
, XML_TOK_TEXT_LEVEL_ATTR_NUM_LETTER_SYNC
},
143 { XML_NAMESPACE_TEXT
, XML_START_VALUE
, XML_TOK_TEXT_LEVEL_ATTR_START_VALUE
},
144 { XML_NAMESPACE_TEXT
, XML_DISPLAY_LEVELS
, XML_TOK_TEXT_LEVEL_ATTR_DISPLAY_LEVELS
},
148 return aLevelAttrTokenMap
;
151 class SvxXMLListLevelStyleContext_Impl
: public SvXMLImportContext
153 friend class SvxXMLListLevelStyleAttrContext_Impl
;
154 const OUString sStarBats
;
155 const OUString sStarMath
;
159 OUString sTextStyleName
;
161 OUString sNumLetterSync
;
162 OUString sBulletFontName
;
163 OUString sBulletFontStyleName
;
166 Reference
< XOutputStream
> xBase64Stream
;
169 sal_Int32 nSpaceBefore
;
170 sal_Int32 nMinLabelWidth
;
171 sal_Int32 nMinLabelDist
;
172 sal_Int32 nImageWidth
;
173 sal_Int32 nImageHeight
;
174 sal_Int16 nNumStartValue
;
175 sal_Int16 nNumDisplayLevels
;
178 sal_Int16 eBulletFontFamily
;
179 sal_Int16 eBulletFontPitch
;
180 rtl_TextEncoding eBulletFontEncoding
;
181 sal_Int16 eImageVertOrient
;
188 sal_Int16 ePosAndSpaceMode
;
189 sal_Int16 eLabelFollowedBy
;
190 sal_Int32 nListtabStopPosition
;
191 sal_Int32 nFirstLineIndent
;
194 sal_Bool bBullet
: 1;
197 sal_Bool bHasColor
: 1;
199 void SetRelSize( sal_Int16 nRel
) { nRelSize
= nRel
; }
200 void SetColor( sal_Int32 nColor
)
201 { m_nColor
= nColor
; bHasColor
= sal_True
; }
202 void SetSpaceBefore( sal_Int32 nSet
) { nSpaceBefore
= nSet
; }
203 void SetMinLabelWidth( sal_Int32 nSet
) { nMinLabelWidth
= nSet
; }
204 void SetMinLabelDist( sal_Int32 nSet
) { nMinLabelDist
= nSet
; }
205 void SetAdjust( sal_Int16 eSet
) { eAdjust
= eSet
; }
207 void SetBulletFontName( const OUString
& rSet
) { sBulletFontName
= rSet
; }
208 void SetBulletFontStyleName( const OUString
& rSet
)
209 { sBulletFontStyleName
= rSet
; }
210 void SetBulletFontFamily( sal_Int16 eSet
) { eBulletFontFamily
= eSet
; }
211 void SetBulletFontPitch( sal_Int16 eSet
) { eBulletFontPitch
= eSet
; }
212 void SetBulletFontEncoding( rtl_TextEncoding eSet
)
213 { eBulletFontEncoding
= eSet
; }
215 void SetImageWidth( sal_Int32 nSet
) { nImageWidth
= nSet
; }
216 void SetImageHeight( sal_Int32 nSet
) { nImageHeight
= nSet
; }
217 void SetImageVertOrient( sal_Int16 eSet
)
218 { eImageVertOrient
= eSet
; }
222 SvxXMLListLevelStyleContext_Impl(
223 SvXMLImport
& rImport
, sal_uInt16 nPrfx
,
224 const OUString
& rLName
,
225 const Reference
< xml::sax::XAttributeList
> & xAttrList
);
226 virtual ~SvxXMLListLevelStyleContext_Impl();
228 virtual SvXMLImportContext
*CreateChildContext(
229 sal_uInt16 nPrefix
, const OUString
& rLocalName
,
230 const Reference
< xml::sax::XAttributeList
> & xAttrList
);
232 sal_Int32
GetLevel() const { return nLevel
; }
233 Sequence
<beans::PropertyValue
> GetProperties(
234 const SvI18NMap
*pI18NMap
=0 );
236 inline void SetPosAndSpaceMode( sal_Int16 eValue
)
238 ePosAndSpaceMode
= eValue
;
240 inline void SetLabelFollowedBy( sal_Int16 eValue
)
242 eLabelFollowedBy
= eValue
;
244 inline void SetListtabStopPosition( sal_Int32 nValue
)
246 nListtabStopPosition
= nValue
;
248 inline void SetFirstLineIndent( sal_Int32 nValue
)
250 nFirstLineIndent
= nValue
;
252 inline void SetIndentAt( sal_Int32 nValue
)
258 SvxXMLListLevelStyleContext_Impl::SvxXMLListLevelStyleContext_Impl(
259 SvXMLImport
& rImport
, sal_uInt16 nPrfx
,
260 const OUString
& rLName
,
261 const Reference
< xml::sax::XAttributeList
> & xAttrList
)
263 : SvXMLImportContext( rImport
, nPrfx
, rLName
)
264 , sStarBats( "StarBats" )
265 , sStarMath( "StarMath" )
266 , sNumFormat( OUString("1") )
269 , nMinLabelWidth( 0L )
270 , nMinLabelDist( 0L )
273 , nNumStartValue( 1 )
274 , nNumDisplayLevels( 1 )
275 , eAdjust( HoriOrientation::LEFT
)
276 , eBulletFontFamily( FAMILY_DONTKNOW
)
277 , eBulletFontPitch( PITCH_DONTKNOW
)
278 , eBulletFontEncoding( RTL_TEXTENCODING_DONTKNOW
)
279 , eImageVertOrient(0)
283 , ePosAndSpaceMode( PositionAndSpaceMode::LABEL_WIDTH_AND_POSITION
)
284 , eLabelFollowedBy( LabelFollow::LISTTAB
)
285 , nListtabStopPosition( 0 )
286 , nFirstLineIndent( 0 )
288 , bBullet( sal_False
)
289 , bImage( sal_False
)
291 , bHasColor( sal_False
)
293 if( IsXMLToken( rLName
, XML_LIST_LEVEL_STYLE_NUMBER
) ||
294 IsXMLToken( rLName
, XML_OUTLINE_LEVEL_STYLE
) )
296 else if( IsXMLToken( rLName
, XML_LIST_LEVEL_STYLE_BULLET
) )
298 else if( IsXMLToken( rLName
, XML_LIST_LEVEL_STYLE_IMAGE
) )
301 SvXMLTokenMap
aTokenMap( lcl_getLevelAttrTokenMap() );
302 sal_Int16 nAttrCount
= xAttrList
.is() ? xAttrList
->getLength() : 0;
303 for( sal_Int16 i
=0; i
< nAttrCount
; i
++ )
305 const OUString
& rAttrName
= xAttrList
->getNameByIndex( i
);
308 GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName
,
310 const OUString
& rValue
= xAttrList
->getValueByIndex( i
);
312 switch( aTokenMap
.Get( nPrefix
, aLocalName
) )
314 case XML_TOK_TEXT_LEVEL_ATTR_LEVEL
:
315 nLevel
= rValue
.toInt32();
321 case XML_TOK_TEXT_LEVEL_ATTR_STYLE_NAME
:
322 sTextStyleName
= rValue
;
324 case XML_TOK_TEXT_LEVEL_ATTR_BULLET_CHAR
:
327 case XML_TOK_TEXT_LEVEL_ATTR_HREF
:
331 case XML_TOK_TEXT_LEVEL_ATTR_TYPE
:
332 case XML_TOK_TEXT_LEVEL_ATTR_SHOW
:
333 case XML_TOK_TEXT_LEVEL_ATTR_ACTUATE
:
334 // This properties will be ignored
336 case XML_TOK_TEXT_LEVEL_ATTR_NUM_FORMAT
:
340 case XML_TOK_TEXT_LEVEL_ATTR_NUM_PREFIX
:
343 case XML_TOK_TEXT_LEVEL_ATTR_NUM_SUFFIX
:
346 case XML_TOK_TEXT_LEVEL_ATTR_NUM_LETTER_SYNC
:
348 sNumLetterSync
= rValue
;
350 case XML_TOK_TEXT_LEVEL_ATTR_START_VALUE
:
353 sal_Int32 nTmp
= rValue
.toInt32();
355 (nTmp
< 0L) ? 1 : ( (nTmp
>SHRT_MAX
) ? SHRT_MAX
359 case XML_TOK_TEXT_LEVEL_ATTR_DISPLAY_LEVELS
:
362 sal_Int32 nTmp
= rValue
.toInt32();
364 (nTmp
< 1L) ? 1 : ( (nTmp
>SHRT_MAX
) ? SHRT_MAX
372 SvxXMLListLevelStyleContext_Impl::~SvxXMLListLevelStyleContext_Impl()
376 SvXMLImportContext
*SvxXMLListLevelStyleContext_Impl::CreateChildContext(
377 sal_uInt16 nPrefix
, const OUString
& rLocalName
,
378 const Reference
< xml::sax::XAttributeList
> & xAttrList
)
380 SvXMLImportContext
*pContext
= 0;
381 if( XML_NAMESPACE_STYLE
== nPrefix
&&
382 ( IsXMLToken( rLocalName
, XML_LIST_LEVEL_PROPERTIES
) ||
383 IsXMLToken( rLocalName
, XML_TEXT_PROPERTIES
) ) )
385 pContext
= new SvxXMLListLevelStyleAttrContext_Impl( GetImport(),
391 else if( (XML_NAMESPACE_OFFICE
== nPrefix
) && xmloff::token::IsXMLToken( rLocalName
,
392 xmloff::token::XML_BINARY_DATA
) )
394 if( bImage
&& sImageURL
.isEmpty() && !xBase64Stream
.is() )
396 xBase64Stream
= GetImport().GetStreamForGraphicObjectURLFromBase64();
397 if( xBase64Stream
.is() )
398 pContext
= new XMLBase64ImportContext( GetImport(), nPrefix
,
399 rLocalName
, xAttrList
,
405 pContext
= new SvXMLImportContext( GetImport(), nPrefix
, rLocalName
);
411 Sequence
<beans::PropertyValue
> SvxXMLListLevelStyleContext_Impl::GetProperties(
412 const SvI18NMap
*pI18NMap
)
414 sal_Int16 eType
= NumberingType::NUMBER_NONE
;
416 sal_Int32 nCount
= 0;
419 eType
= NumberingType::CHAR_SPECIAL
;
420 nCount
= cBullet
? 15 : 14;
424 eType
= NumberingType::BITMAP
;
427 if( !sImageURL
.isEmpty() || xBase64Stream
.is() )
432 eType
= NumberingType::ARABIC
;
433 GetImport().GetMM100UnitConverter().convertNumFormat(
434 eType
, sNumFormat
, sNumLetterSync
, sal_True
);
438 if( ( bBullet
|| bNum
) && nRelSize
)
441 if( !bImage
&& bHasColor
)
446 if (bBullet
&& !sSuffix
.isEmpty())
448 sal_uInt16
const nVersion(GetImport().getGeneratorVersion());
451 if (GetImport().getBuildIds(nUPD
, nBuildId
)
452 && ( (SvXMLImport::OOo_1x
== nVersion
)
453 || (SvXMLImport::OOo_2x
== nVersion
)
454 || (310 == nUPD
) || (320 == nUPD
) || (330 == nUPD
)
455 || ((300 == nUPD
) && (nBuildId
<= 9573))))
457 // #i93908# OOo < 3.4 wrote a bogus suffix for bullet chars
458 sSuffix
= OUString(); // clear it
462 Sequence
<beans::PropertyValue
> aPropSeq( nCount
);
465 beans::PropertyValue
*pProps
= aPropSeq
.getArray();
467 pProps
[nPos
].Name
= "NumberingType";
468 pProps
[nPos
++].Value
<<= (sal_Int16
)eType
;
470 pProps
[nPos
].Name
= "Prefix";
471 pProps
[nPos
++].Value
<<= sPrefix
;
473 pProps
[nPos
].Name
= "Suffix";
474 pProps
[nPos
++].Value
<<= sSuffix
;
476 pProps
[nPos
].Name
= "Adjust";
477 pProps
[nPos
++].Value
<<= eAdjust
;
479 sal_Int32 nLeftMargin
= nSpaceBefore
+ nMinLabelWidth
;
480 pProps
[nPos
].Name
= "LeftMargin";
481 pProps
[nPos
++].Value
<<= (sal_Int32
)nLeftMargin
;
483 sal_Int32 nFirstLineOffset
= -nMinLabelWidth
;
485 pProps
[nPos
].Name
= "FirstLineOffset";
486 pProps
[nPos
++].Value
<<= (sal_Int32
)nFirstLineOffset
;
488 pProps
[nPos
].Name
= "SymbolTextDistance";
489 pProps
[nPos
++].Value
<<= (sal_Int16
)nMinLabelDist
;
491 pProps
[nPos
].Name
= "PositionAndSpaceMode";
492 pProps
[nPos
++].Value
<<= (sal_Int16
)ePosAndSpaceMode
;
493 pProps
[nPos
].Name
= "LabelFollowedBy";
494 pProps
[nPos
++].Value
<<= (sal_Int16
)eLabelFollowedBy
;
495 pProps
[nPos
].Name
= "ListtabStopPosition";
496 pProps
[nPos
++].Value
<<= (sal_Int32
)nListtabStopPosition
;
497 pProps
[nPos
].Name
= "FirstLineIndent";
498 pProps
[nPos
++].Value
<<= (sal_Int32
)nFirstLineIndent
;
499 pProps
[nPos
].Name
= "IndentAt";
500 pProps
[nPos
++].Value
<<= (sal_Int32
)nIndentAt
;
502 OUString sDisplayTextStyleName
= GetImport().GetStyleDisplayName(
503 XML_STYLE_FAMILY_TEXT_TEXT
, sTextStyleName
);
504 OUString sStyleName
= sDisplayTextStyleName
;
505 if( !sStyleName
.isEmpty() && pI18NMap
)
506 sStyleName
= pI18NMap
->Get( SFX_STYLE_FAMILY_CHAR
, sStyleName
);
507 pProps
[nPos
].Name
= "CharStyleName";
508 pProps
[nPos
++].Value
<<= sDisplayTextStyleName
;
512 awt::FontDescriptor aFDesc
;
513 aFDesc
.Name
= sBulletFontName
;
514 if( !sBulletFontName
.isEmpty() )
516 aFDesc
.StyleName
= sBulletFontStyleName
;
517 aFDesc
.Family
= eBulletFontFamily
;
518 aFDesc
.Pitch
= eBulletFontPitch
;
519 aFDesc
.CharSet
= eBulletFontEncoding
;
520 aFDesc
.Weight
= WEIGHT_DONTKNOW
;
521 sal_Bool bStarSymbol
= sal_False
;
522 if( aFDesc
.Name
.equalsIgnoreAsciiCase( sStarBats
) )
524 cBullet
= GetImport().ConvStarBatsCharToStarSymbol( cBullet
);
525 bStarSymbol
= sal_True
;
527 else if( aFDesc
.Name
.equalsIgnoreAsciiCase( sStarMath
) )
529 cBullet
= GetImport().ConvStarMathCharToStarSymbol( cBullet
);
530 bStarSymbol
= sal_True
;
533 aFDesc
.Name
= OUString( "StarSymbol" );
538 OUStringBuffer
sTmp(1);
539 sTmp
.append( cBullet
);
540 pProps
[nPos
].Name
= "BulletChar";
541 pProps
[nPos
++].Value
<<= sTmp
.makeStringAndClear();
544 pProps
[nPos
].Name
= "BulletFont";
545 pProps
[nPos
++].Value
<<= aFDesc
;
551 OUString
sStr( sImageURL
);
552 if( !sImageURL
.isEmpty() )
554 sStr
= GetImport().ResolveGraphicObjectURL( sImageURL
,
557 else if( xBase64Stream
.is() )
559 sStr
= GetImport().ResolveGraphicObjectURLFromBase64( xBase64Stream
);
562 if( !sStr
.isEmpty() )
564 pProps
[nPos
].Name
= "GraphicURL";
565 pProps
[nPos
++].Value
<<= sStr
;
568 awt::Size
aSize( nImageWidth
, nImageHeight
);
569 pProps
[nPos
].Name
= "GraphicSize";
570 pProps
[nPos
++].Value
<<= aSize
;
572 pProps
[nPos
].Name
= "VertOrient";
573 pProps
[nPos
++].Value
<<= (sal_Int16
)eImageVertOrient
;
578 pProps
[nPos
].Name
= "StartWith";
579 pProps
[nPos
++].Value
<<= (sal_Int16
)nNumStartValue
;
581 pProps
[nPos
].Name
= "ParentNumbering";
582 pProps
[nPos
++].Value
<<= (sal_Int16
)nNumDisplayLevels
;
585 if( ( bNum
|| bBullet
) && nRelSize
)
587 pProps
[nPos
].Name
= "BulletRelSize";
588 pProps
[nPos
++].Value
<<= nRelSize
;
591 if( !bImage
&& bHasColor
)
593 pProps
[nPos
].Name
= "BulletColor";
594 pProps
[nPos
++].Value
<<= m_nColor
;
597 DBG_ASSERT( nPos
== nCount
, "array under/overflow" );
603 // ---------------------------------------------------------------------
605 enum SvxXMLStyleAttributesAttrTokens
607 XML_TOK_STYLE_ATTRIBUTES_ATTR_SPACE_BEFORE
,
608 XML_TOK_STYLE_ATTRIBUTES_ATTR_MIN_LABEL_WIDTH
,
609 XML_TOK_STYLE_ATTRIBUTES_ATTR_MIN_LABEL_DIST
,
610 XML_TOK_STYLE_ATTRIBUTES_ATTR_TEXT_ALIGN
,
611 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_NAME
,
612 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_FAMILY
,
613 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_FAMILY_GENERIC
,
614 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_STYLENAME
,
615 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_PITCH
,
616 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_CHARSET
,
617 XML_TOK_STYLE_ATTRIBUTES_ATTR_VERTICAL_POS
,
618 XML_TOK_STYLE_ATTRIBUTES_ATTR_VERTICAL_REL
,
619 XML_TOK_STYLE_ATTRIBUTES_ATTR_WIDTH
,
620 XML_TOK_STYLE_ATTRIBUTES_ATTR_HEIGHT
,
621 XML_TOK_STYLE_ATTRIBUTES_ATTR_COLOR
,
622 XML_TOK_STYLE_ATTRIBUTES_ATTR_WINDOW_FONT_COLOR
,
623 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_SIZE
,
624 XML_TOK_STYLE_ATTRIBUTES_ATTR_POSITION_AND_SPACE_MODE
,
625 XML_TOK_STYLE_ATTRIBUTES_ATTR_END
=XML_TOK_UNKNOWN
627 static const SvXMLTokenMapEntry
* lcl_getStyleAttributesAttrTokenMap()
629 static SvXMLTokenMapEntry aStyleAttributesAttrTokenMap
[] =
631 { XML_NAMESPACE_TEXT
, XML_SPACE_BEFORE
,
632 XML_TOK_STYLE_ATTRIBUTES_ATTR_SPACE_BEFORE
},
633 { XML_NAMESPACE_TEXT
, XML_MIN_LABEL_WIDTH
,
634 XML_TOK_STYLE_ATTRIBUTES_ATTR_MIN_LABEL_WIDTH
},
635 { XML_NAMESPACE_TEXT
, XML_MIN_LABEL_DISTANCE
,
636 XML_TOK_STYLE_ATTRIBUTES_ATTR_MIN_LABEL_DIST
},
637 { XML_NAMESPACE_FO
, XML_TEXT_ALIGN
,
638 XML_TOK_STYLE_ATTRIBUTES_ATTR_TEXT_ALIGN
},
639 { XML_NAMESPACE_STYLE
, XML_FONT_NAME
,
640 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_NAME
},
641 { XML_NAMESPACE_FO
, XML_FONT_FAMILY
,
642 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_FAMILY
},
643 { XML_NAMESPACE_STYLE
, XML_FONT_FAMILY_GENERIC
,
644 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_FAMILY_GENERIC
},
645 { XML_NAMESPACE_STYLE
, XML_FONT_STYLE_NAME
,
646 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_STYLENAME
},
647 { XML_NAMESPACE_STYLE
, XML_FONT_PITCH
,
648 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_PITCH
},
649 { XML_NAMESPACE_STYLE
, XML_FONT_CHARSET
,
650 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_CHARSET
},
651 { XML_NAMESPACE_STYLE
, XML_VERTICAL_POS
,
652 XML_TOK_STYLE_ATTRIBUTES_ATTR_VERTICAL_POS
},
653 { XML_NAMESPACE_STYLE
, XML_VERTICAL_REL
,
654 XML_TOK_STYLE_ATTRIBUTES_ATTR_VERTICAL_REL
},
655 { XML_NAMESPACE_FO
, XML_WIDTH
,
656 XML_TOK_STYLE_ATTRIBUTES_ATTR_WIDTH
},
657 { XML_NAMESPACE_FO
, XML_HEIGHT
,
658 XML_TOK_STYLE_ATTRIBUTES_ATTR_HEIGHT
},
659 { XML_NAMESPACE_FO
, XML_COLOR
,
660 XML_TOK_STYLE_ATTRIBUTES_ATTR_COLOR
},
661 { XML_NAMESPACE_STYLE
, XML_USE_WINDOW_FONT_COLOR
,
662 XML_TOK_STYLE_ATTRIBUTES_ATTR_WINDOW_FONT_COLOR
},
663 { XML_NAMESPACE_FO
, XML_FONT_SIZE
,
664 XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_SIZE
},
665 { XML_NAMESPACE_TEXT
, XML_LIST_LEVEL_POSITION_AND_SPACE_MODE
,
666 XML_TOK_STYLE_ATTRIBUTES_ATTR_POSITION_AND_SPACE_MODE
},
669 return aStyleAttributesAttrTokenMap
;
671 SvxXMLListLevelStyleAttrContext_Impl::SvxXMLListLevelStyleAttrContext_Impl(
672 SvXMLImport
& rImport
, sal_uInt16 nPrfx
,
673 const OUString
& rLName
,
674 const Reference
< xml::sax::XAttributeList
> & xAttrList
,
675 SvxXMLListLevelStyleContext_Impl
& rLLevel
) :
676 SvXMLImportContext( rImport
, nPrfx
, rLName
),
677 rListLevel( rLLevel
)
679 SvXMLTokenMap
aTokenMap( lcl_getStyleAttributesAttrTokenMap() );
680 SvXMLUnitConverter
& rUnitConv
= GetImport().GetMM100UnitConverter();
682 OUString sFontName
, sFontFamily
, sFontStyleName
, sFontFamilyGeneric
,
683 sFontPitch
, sFontCharset
;
684 OUString sVerticalPos
, sVerticalRel
;
686 sal_Int16 nAttrCount
= xAttrList
.is() ? xAttrList
->getLength() : 0;
687 for( sal_Int16 i
=0; i
< nAttrCount
; i
++ )
689 const OUString
& rAttrName
= xAttrList
->getNameByIndex( i
);
692 GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName
,
694 const OUString
& rValue
= xAttrList
->getValueByIndex( i
);
697 switch( aTokenMap
.Get( nPrefix
, aLocalName
) )
699 case XML_TOK_STYLE_ATTRIBUTES_ATTR_SPACE_BEFORE
:
700 if (rUnitConv
.convertMeasureToCore(nVal
, rValue
, SHRT_MIN
, SHRT_MAX
))
701 rListLevel
.SetSpaceBefore( nVal
);
703 case XML_TOK_STYLE_ATTRIBUTES_ATTR_MIN_LABEL_WIDTH
:
704 if (rUnitConv
.convertMeasureToCore( nVal
, rValue
, 0, SHRT_MAX
))
705 rListLevel
.SetMinLabelWidth( nVal
);
707 case XML_TOK_STYLE_ATTRIBUTES_ATTR_MIN_LABEL_DIST
:
708 if (rUnitConv
.convertMeasureToCore( nVal
, rValue
, 0, USHRT_MAX
))
709 rListLevel
.SetMinLabelDist( nVal
);
711 case XML_TOK_STYLE_ATTRIBUTES_ATTR_TEXT_ALIGN
:
712 if( !rValue
.isEmpty() )
714 sal_Int16 eAdjust
= HoriOrientation::LEFT
;
715 if( IsXMLToken( rValue
, XML_CENTER
) )
716 eAdjust
= HoriOrientation::CENTER
;
717 else if( IsXMLToken( rValue
, XML_END
) )
718 eAdjust
= HoriOrientation::RIGHT
;
719 rListLevel
.SetAdjust( eAdjust
);
722 case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_NAME
:
725 case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_FAMILY
:
726 sFontFamily
= rValue
;
728 case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_FAMILY_GENERIC
:
729 sFontFamilyGeneric
= rValue
;
731 case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_STYLENAME
:
732 sFontStyleName
= rValue
;
734 case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_PITCH
:
737 case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_CHARSET
:
738 sFontCharset
= rValue
;
740 case XML_TOK_STYLE_ATTRIBUTES_ATTR_VERTICAL_POS
:
741 sVerticalPos
= rValue
;
743 case XML_TOK_STYLE_ATTRIBUTES_ATTR_VERTICAL_REL
:
744 sVerticalRel
= rValue
;
746 case XML_TOK_STYLE_ATTRIBUTES_ATTR_WIDTH
:
747 if (rUnitConv
.convertMeasureToCore(nVal
, rValue
, 0, SAL_MAX_INT32
))
748 rListLevel
.SetImageWidth( nVal
);
750 case XML_TOK_STYLE_ATTRIBUTES_ATTR_HEIGHT
:
751 if (rUnitConv
.convertMeasureToCore(nVal
, rValue
, 0, SAL_MAX_INT32
))
752 rListLevel
.SetImageHeight( nVal
);
754 case XML_TOK_STYLE_ATTRIBUTES_ATTR_COLOR
:
757 if (::sax::Converter::convertColor( nColor
, rValue
))
759 rListLevel
.SetColor( nColor
);
763 case XML_TOK_STYLE_ATTRIBUTES_ATTR_WINDOW_FONT_COLOR
:
765 if( IsXMLToken( rValue
, XML_TRUE
) )
766 rListLevel
.SetColor( (sal_Int32
)0xffffffff );
769 case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_SIZE
:
770 if (::sax::Converter::convertPercent( nVal
, rValue
))
771 rListLevel
.SetRelSize( (sal_Int16
)nVal
);
773 case XML_TOK_STYLE_ATTRIBUTES_ATTR_POSITION_AND_SPACE_MODE
:
775 sal_Int16 ePosAndSpaceMode
= PositionAndSpaceMode::LABEL_WIDTH_AND_POSITION
;
776 if( IsXMLToken( rValue
, XML_LABEL_ALIGNMENT
) )
777 ePosAndSpaceMode
= PositionAndSpaceMode::LABEL_ALIGNMENT
;
778 rListLevel
.SetPosAndSpaceMode( ePosAndSpaceMode
);
784 if( !sFontName
.isEmpty() )
786 const XMLFontStylesContext
*pFontDecls
=
787 GetImport().GetFontDecls();
790 ::std::vector
< XMLPropertyState
> aProps
;
791 if( pFontDecls
->FillProperties( sFontName
, aProps
, 0, 1, 2, 3, 4 ) )
795 ::std::vector
< XMLPropertyState
>::iterator i
;
796 for( i
= aProps
.begin(); i
!= aProps
.end(); ++i
)
802 rListLevel
.SetBulletFontName( sTmp
);
806 rListLevel
.SetBulletFontStyleName( sTmp
);
810 rListLevel
.SetBulletFontFamily( nTmp
);
814 rListLevel
.SetBulletFontPitch( nTmp
);
818 rListLevel
.SetBulletFontEncoding( nTmp
);
825 if( !sFontFamily
.isEmpty() )
829 XMLFontFamilyNamePropHdl aFamilyNameHdl
;
830 if( aFamilyNameHdl
.importXML( sFontFamily
, aAny
, rUnitConv
) )
834 rListLevel
.SetBulletFontName( sTmp
);
837 XMLFontFamilyPropHdl aFamilyHdl
;
838 if( !sFontFamilyGeneric
.isEmpty() &&
839 aFamilyHdl
.importXML( sFontFamilyGeneric
, aAny
, rUnitConv
) )
843 rListLevel
.SetBulletFontFamily( nTmp
);
846 if( !sFontStyleName
.isEmpty() )
847 rListLevel
.SetBulletFontStyleName( sFontStyleName
);
849 XMLFontPitchPropHdl aPitchHdl
;
850 if( !sFontPitch
.isEmpty() &&
851 aPitchHdl
.importXML( sFontPitch
, aAny
, rUnitConv
) )
855 rListLevel
.SetBulletFontPitch( nTmp
);
858 XMLFontEncodingPropHdl aEncHdl
;
859 if( !sFontCharset
.isEmpty() &&
860 aEncHdl
.importXML( sFontCharset
, aAny
, rUnitConv
) )
864 rListLevel
.SetBulletFontEncoding( nTmp
);
868 sal_Int16 eVertOrient
= VertOrientation::LINE_CENTER
;
869 if( !sVerticalPos
.isEmpty() )
871 if( IsXMLToken( sVerticalPos
, XML_TOP
) )
872 eVertOrient
= VertOrientation::LINE_TOP
;
873 else if( IsXMLToken( sVerticalPos
, XML_BOTTOM
) )
874 eVertOrient
= VertOrientation::LINE_BOTTOM
;
876 if( !sVerticalRel
.isEmpty() )
878 if( IsXMLToken( sVerticalRel
, XML_BASELINE
) )
880 // TOP and BOTTOM are exchanged for a baseline relation
881 switch( eVertOrient
)
883 case VertOrientation::LINE_TOP
:
884 eVertOrient
= VertOrientation::BOTTOM
;
886 case VertOrientation::LINE_CENTER
:
887 eVertOrient
= VertOrientation::CENTER
;
889 case VertOrientation::LINE_BOTTOM
:
890 eVertOrient
= VertOrientation::TOP
;
894 else if( IsXMLToken( sVerticalRel
, XML_CHAR
) )
896 switch( eVertOrient
)
898 case VertOrientation::LINE_TOP
:
899 eVertOrient
= VertOrientation::CHAR_TOP
;
901 case VertOrientation::LINE_CENTER
:
902 eVertOrient
= VertOrientation::CHAR_CENTER
;
904 case VertOrientation::LINE_BOTTOM
:
905 eVertOrient
= VertOrientation::CHAR_BOTTOM
;
910 rListLevel
.SetImageVertOrient( eVertOrient
);
913 SvxXMLListLevelStyleAttrContext_Impl::~SvxXMLListLevelStyleAttrContext_Impl()
917 SvXMLImportContext
* SvxXMLListLevelStyleAttrContext_Impl::CreateChildContext(
918 sal_uInt16 nPrefix
, const OUString
& rLocalName
,
919 const Reference
< xml::sax::XAttributeList
> & xAttrList
)
921 SvXMLImportContext
*pContext
= 0;
922 if ( XML_NAMESPACE_STYLE
== nPrefix
&&
923 IsXMLToken( rLocalName
, XML_LIST_LEVEL_LABEL_ALIGNMENT
) )
925 pContext
= new SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl( GetImport(),
933 pContext
= new SvXMLImportContext( GetImport(), nPrefix
, rLocalName
);
939 // ---------------------------------------------------------------------
941 enum SvxXMLStyleAttributesLabelAlignmentAttrTokens
943 XML_TOK_STYLE_ATTRIBUTES_ATTR_LABEL_FOLLOWED_BY
,
944 XML_TOK_STYLE_ATTRIBUTES_ATTR_LISTTAB_STOP_POSITION
,
945 XML_TOK_STYLE_ATTRIBUTES_ATTR_FIRST_LINE_INDENT
,
946 XML_TOK_STYLE_ATTRIBUTES_ATTR_INDENT_AT
,
948 XML_TOK_STYLE_ATTRIBUTES_LABEL_ALIGNMENT_ATTR_END
=XML_TOK_UNKNOWN
950 static const SvXMLTokenMapEntry
* lcl_getStyleAlignmentAttributesAttrTokenMap()
952 static SvXMLTokenMapEntry aStyleAlignmentAttributesAttrTokenMap
[] =
954 { XML_NAMESPACE_TEXT
, XML_LABEL_FOLLOWED_BY
,
955 XML_TOK_STYLE_ATTRIBUTES_ATTR_LABEL_FOLLOWED_BY
},
956 { XML_NAMESPACE_TEXT
, XML_LIST_TAB_STOP_POSITION
,
957 XML_TOK_STYLE_ATTRIBUTES_ATTR_LISTTAB_STOP_POSITION
},
958 { XML_NAMESPACE_FO
, XML_TEXT_INDENT
,
959 XML_TOK_STYLE_ATTRIBUTES_ATTR_FIRST_LINE_INDENT
},
960 { XML_NAMESPACE_FO
, XML_MARGIN_LEFT
,
961 XML_TOK_STYLE_ATTRIBUTES_ATTR_INDENT_AT
},
965 return aStyleAlignmentAttributesAttrTokenMap
;
967 SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl::SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl(
968 SvXMLImport
& rImport
, sal_uInt16 nPrfx
,
969 const OUString
& rLName
,
970 const Reference
< xml::sax::XAttributeList
> & xAttrList
,
971 SvxXMLListLevelStyleContext_Impl
& rLLevel
) :
972 SvXMLImportContext( rImport
, nPrfx
, rLName
),
973 rListLevel( rLLevel
)
975 SvXMLTokenMap
aTokenMap( lcl_getStyleAlignmentAttributesAttrTokenMap() );
976 SvXMLUnitConverter
& rUnitConv
= GetImport().GetMM100UnitConverter();
978 sal_Int16 nAttrCount
= xAttrList
.is() ? xAttrList
->getLength() : 0;
979 for( sal_Int16 i
=0; i
< nAttrCount
; i
++ )
981 const OUString
& rAttrName
= xAttrList
->getNameByIndex( i
);
984 GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName
,
986 const OUString
& rValue
= xAttrList
->getValueByIndex( i
);
989 switch( aTokenMap
.Get( nPrefix
, aLocalName
) )
991 case XML_TOK_STYLE_ATTRIBUTES_ATTR_LABEL_FOLLOWED_BY
:
993 sal_Int16 eLabelFollowedBy
= LabelFollow::LISTTAB
;
994 if( IsXMLToken( rValue
, XML_SPACE
) )
995 eLabelFollowedBy
= LabelFollow::SPACE
;
996 else if( IsXMLToken( rValue
, XML_NOTHING
) )
997 eLabelFollowedBy
= LabelFollow::NOTHING
;
998 rListLevel
.SetLabelFollowedBy( eLabelFollowedBy
);
1001 case XML_TOK_STYLE_ATTRIBUTES_ATTR_LISTTAB_STOP_POSITION
:
1002 if (rUnitConv
.convertMeasureToCore(nVal
, rValue
, 0, SHRT_MAX
))
1003 rListLevel
.SetListtabStopPosition( nVal
);
1005 case XML_TOK_STYLE_ATTRIBUTES_ATTR_FIRST_LINE_INDENT
:
1006 if (rUnitConv
.convertMeasureToCore(nVal
, rValue
, SHRT_MIN
, SHRT_MAX
))
1007 rListLevel
.SetFirstLineIndent( nVal
);
1009 case XML_TOK_STYLE_ATTRIBUTES_ATTR_INDENT_AT
:
1010 if (rUnitConv
.convertMeasureToCore(nVal
, rValue
, SHRT_MIN
, SHRT_MAX
))
1011 rListLevel
.SetIndentAt( nVal
);
1017 SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl::~SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl()
1021 // ---------------------------------------------------------------------
1023 class SvxXMLListStyle_Impl
: public std::vector
<SvxXMLListLevelStyleContext_Impl
*> {};
1025 void SvxXMLListStyleContext::SetAttribute( sal_uInt16 nPrefixKey
,
1026 const OUString
& rLocalName
,
1027 const OUString
& rValue
)
1029 if( XML_NAMESPACE_TEXT
== nPrefixKey
&&
1030 IsXMLToken( rLocalName
, XML_CONSECUTIVE_NUMBERING
) )
1032 bConsecutive
= IsXMLToken( rValue
, XML_TRUE
);
1036 SvXMLStyleContext::SetAttribute( nPrefixKey
, rLocalName
, rValue
);
1041 SvxXMLListStyleContext::SvxXMLListStyleContext( SvXMLImport
& rImport
,
1043 const OUString
& rLName
,
1044 const Reference
< xml::sax::XAttributeList
> & xAttrList
,
1046 : SvXMLStyleContext( rImport
, nPrfx
, rLName
, xAttrList
, bOutl
? XML_STYLE_FAMILY_TEXT_OUTLINE
: XML_STYLE_FAMILY_TEXT_LIST
)
1047 , sIsPhysical( "IsPhysical" )
1048 , sNumberingRules( "NumberingRules" )
1050 , sIsContinuousNumbering( "IsContinuousNumbering" )
1053 , bConsecutive( sal_False
)
1058 SvxXMLListStyleContext::~SvxXMLListStyleContext()
1062 while( !pLevelStyles
->empty() )
1064 SvxXMLListLevelStyleContext_Impl
*pStyle
= pLevelStyles
->back();
1065 pLevelStyles
->pop_back();
1066 pStyle
->ReleaseRef();
1070 delete pLevelStyles
;
1073 TYPEINIT1( SvxXMLListStyleContext
, SvXMLStyleContext
);
1075 SvXMLImportContext
*SvxXMLListStyleContext::CreateChildContext(
1077 const OUString
& rLocalName
,
1078 const Reference
< xml::sax::XAttributeList
> & xAttrList
)
1080 SvXMLImportContext
*pContext
= 0;
1082 if( XML_NAMESPACE_TEXT
== nPrefix
&&
1084 ? IsXMLToken( rLocalName
, XML_OUTLINE_LEVEL_STYLE
)
1085 : ( IsXMLToken( rLocalName
, XML_LIST_LEVEL_STYLE_NUMBER
) ||
1086 IsXMLToken( rLocalName
, XML_LIST_LEVEL_STYLE_BULLET
) ||
1087 IsXMLToken( rLocalName
, XML_LIST_LEVEL_STYLE_IMAGE
) ) ) )
1089 SvxXMLListLevelStyleContext_Impl
*pLevelStyle
=
1090 new SvxXMLListLevelStyleContext_Impl( GetImport(), nPrefix
,
1091 rLocalName
, xAttrList
);
1093 pLevelStyles
= new SvxXMLListStyle_Impl
;
1094 pLevelStyles
->push_back( pLevelStyle
);
1095 pLevelStyle
->AddRef();
1097 pContext
= pLevelStyle
;
1101 pContext
= new SvXMLImportContext( GetImport(), nPrefix
, rLocalName
);
1107 void SvxXMLListStyleContext::FillUnoNumRule(
1108 const Reference
< container::XIndexReplace
> & rNumRule
,
1109 const SvI18NMap
*pI18NMap
) const
1113 if( pLevelStyles
&& rNumRule
.is() )
1115 sal_uInt16 nCount
= pLevelStyles
->size();
1116 sal_Int32 l_nLevels
= rNumRule
->getCount();
1117 for( sal_uInt16 i
=0; i
< nCount
; i
++ )
1119 SvxXMLListLevelStyleContext_Impl
*pLevelStyle
=
1121 sal_Int32 nLevel
= pLevelStyle
->GetLevel();
1122 if( nLevel
>= 0 && nLevel
< l_nLevels
)
1124 Sequence
<beans::PropertyValue
> aProps
=
1125 pLevelStyle
->GetProperties( pI18NMap
);
1128 rNumRule
->replaceByIndex( nLevel
, aAny
);
1133 Reference
< XPropertySet
> xPropSet( rNumRule
, UNO_QUERY
);
1134 Reference
< XPropertySetInfo
> xPropSetInfo
;
1136 xPropSetInfo
= xPropSet
->getPropertySetInfo();
1137 if( xPropSetInfo
.is() &&
1138 xPropSetInfo
->hasPropertyByName( sIsContinuousNumbering
) )
1141 sal_Bool bTmp
= bConsecutive
;
1142 aAny
.setValue( &bTmp
, ::getBooleanCppuType() );
1143 xPropSet
->setPropertyValue( sIsContinuousNumbering
, aAny
);
1146 catch (const Exception
&)
1148 OSL_FAIL( "SvxXMLListStyleContext::FillUnoNumRule - Exception caught" );
1152 void SvxXMLListStyleContext::CreateAndInsertLate( sal_Bool bOverwrite
)
1158 const Reference
< XIndexReplace
>& rNumRule
=
1159 GetImport().GetTextImport()->GetChapterNumbering();
1160 // We don't set xNumberingRules here, to avoid using them
1161 // as numbering rules.
1163 FillUnoNumRule( rNumRule
, 0 );
1168 Reference
< XStyle
> xStyle
;
1169 const OUString
& rName
= GetDisplayName();
1170 if( rName
.isEmpty() )
1172 SetValid( sal_False
);
1176 const Reference
< XNameContainer
>& rNumStyles
=
1177 GetImport().GetTextImport()->GetNumberingStyles();
1178 if( !rNumStyles
.is() )
1180 SetValid( sal_False
);
1184 sal_Bool bNew
= sal_False
;
1185 if( rNumStyles
->hasByName( rName
) )
1187 Any aAny
= rNumStyles
->getByName( rName
);
1192 Reference
< XMultiServiceFactory
> xFactory( GetImport().GetModel(),
1194 DBG_ASSERT( xFactory
.is(), "no factory" );
1195 if( !xFactory
.is() )
1198 Reference
< XInterface
> xIfc
= xFactory
->createInstance(OUString("com.sun.star.style.NumberingStyle") );
1201 Reference
< XStyle
> xTmp( xIfc
, UNO_QUERY
);
1208 rNumStyles
->insertByName( rName
, aAny
);
1212 Reference
< XPropertySet
> xPropSet( xStyle
, UNO_QUERY
);
1213 Reference
< XPropertySetInfo
> xPropSetInfo
=
1214 xPropSet
->getPropertySetInfo();
1215 if( !bNew
&& xPropSetInfo
->hasPropertyByName( sIsPhysical
) )
1217 Any aAny
= xPropSet
->getPropertyValue( sIsPhysical
);
1218 bNew
= !*(sal_Bool
*)aAny
.getValue();
1221 if ( xPropSetInfo
->hasPropertyByName( "Hidden" ) )
1222 xPropSet
->setPropertyValue( "Hidden", uno::makeAny( IsHidden( ) ) );
1224 if( rName
!= GetName() )
1225 GetImport().AddStyleDisplayName( XML_STYLE_FAMILY_TEXT_LIST
,
1228 Any aAny
= xPropSet
->getPropertyValue( sNumberingRules
);
1230 nLevels
= xNumRules
->getCount();
1231 if( bOverwrite
|| bNew
)
1233 FillUnoNumRule( xNumRules
, 0 );
1235 xPropSet
->setPropertyValue( sNumberingRules
, aAny
);
1239 SetValid( sal_False
);
1246 void SvxXMLListStyleContext::CreateAndInsertAuto() const
1248 DBG_ASSERT( !bOutline
, "Outlines cannot be inserted here" );
1249 DBG_ASSERT( !xNumRules
.is(), "Numbering Rule is existing already" );
1251 const OUString
& rName
= GetName();
1252 if( bOutline
|| xNumRules
.is() || rName
.isEmpty() )
1254 ((SvxXMLListStyleContext
*)this)->SetValid( sal_False
);
1258 ((SvxXMLListStyleContext
*)this)->xNumRules
= CreateNumRule(
1259 GetImport().GetModel() );
1260 ((SvxXMLListStyleContext
*)this)->nLevels
= xNumRules
->getCount();
1262 FillUnoNumRule( xNumRules
, 0 );
1265 Reference
< XIndexReplace
> SvxXMLListStyleContext::CreateNumRule(
1266 const Reference
< XModel
> & rModel
)
1268 Reference
<XIndexReplace
> xNumRule
;
1270 Reference
< XMultiServiceFactory
> xFactory( rModel
, UNO_QUERY
);
1271 DBG_ASSERT( xFactory
.is(), "no factory" );
1272 if( !xFactory
.is() )
1275 Reference
< XInterface
> xIfc
= xFactory
->createInstance(OUString("com.sun.star.text.NumberingRules") );
1279 xNumRule
= Reference
<XIndexReplace
>( xIfc
, UNO_QUERY
);
1280 DBG_ASSERT( xNumRule
.is(), "go no numbering rule" );
1285 void SvxXMLListStyleContext::SetDefaultStyle(
1286 const Reference
< XIndexReplace
> & rNumRule
,
1290 Sequence
<beans::PropertyValue
> aPropSeq( bOrdered
? 1 : 4 );
1291 beans::PropertyValue
*pProps
= aPropSeq
.getArray();
1293 pProps
->Name
= "NumberingType";
1294 (pProps
++)->Value
<<= (sal_Int16
)(bOrdered
? NumberingType::ARABIC
1295 : NumberingType::CHAR_SPECIAL
);
1298 // TODO: Bullet-Font
1299 awt::FontDescriptor aFDesc
;
1300 aFDesc
.Name
= OUString(
1307 aFDesc
.Family
= FAMILY_DONTKNOW
;
1308 aFDesc
.Pitch
= PITCH_DONTKNOW
;
1309 aFDesc
.CharSet
= RTL_TEXTENCODING_SYMBOL
;
1310 aFDesc
.Weight
= WEIGHT_DONTKNOW
;
1311 pProps
->Name
= "BulletFont";
1312 (pProps
++)->Value
<<= aFDesc
;
1314 OUStringBuffer
sTmp(1);
1315 sTmp
.append( (sal_Unicode
)(0xF000 + 149) );
1316 pProps
->Name
= "BulletChar";
1317 (pProps
++)->Value
<<= sTmp
.makeStringAndClear();
1318 pProps
->Name
= "CharStyleName";
1319 (pProps
++)->Value
<<= OUString( "Numbering Symbols" );
1324 rNumRule
->replaceByIndex( nLevel
, aAny
);
1327 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */