1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #include "oox/drawingml/textparagraphproperties.hxx"
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski #include <com/sun/star/text/XNumberingRulesSupplier.hpp>
27*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XIndexReplace.hpp>
28*b1cdbd2cSJim Jagielski #include <com/sun/star/text/HoriOrientation.hpp>
29*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/FontDescriptor.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XBitmap.hpp>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/graphic/XGraphic.hpp>
32*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyValue.hpp>
33*b1cdbd2cSJim Jagielski 
34*b1cdbd2cSJim Jagielski #include "oox/helper/helper.hxx"
35*b1cdbd2cSJim Jagielski #include "oox/helper/propertyset.hxx"
36*b1cdbd2cSJim Jagielski #include "oox/core/xmlfilterbase.hxx"
37*b1cdbd2cSJim Jagielski #include "oox/drawingml/drawingmltypes.hxx"
38*b1cdbd2cSJim Jagielski 
39*b1cdbd2cSJim Jagielski using rtl::OUString;
40*b1cdbd2cSJim Jagielski using namespace ::oox::core;
41*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
42*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::beans;
43*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::style;
44*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::text;
45*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::container;
46*b1cdbd2cSJim Jagielski using ::com::sun::star::awt::FontDescriptor;
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski namespace oox { namespace drawingml {
49*b1cdbd2cSJim Jagielski 
BulletList()50*b1cdbd2cSJim Jagielski BulletList::BulletList( )
51*b1cdbd2cSJim Jagielski : maBulletColorPtr( new Color() )
52*b1cdbd2cSJim Jagielski {
53*b1cdbd2cSJim Jagielski }
54*b1cdbd2cSJim Jagielski 
is() const55*b1cdbd2cSJim Jagielski bool BulletList::is() const
56*b1cdbd2cSJim Jagielski {
57*b1cdbd2cSJim Jagielski 	return mnNumberingType.hasValue();
58*b1cdbd2cSJim Jagielski }
59*b1cdbd2cSJim Jagielski 
setBulletChar(const::rtl::OUString & sChar)60*b1cdbd2cSJim Jagielski void BulletList::setBulletChar( const ::rtl::OUString & sChar )
61*b1cdbd2cSJim Jagielski {
62*b1cdbd2cSJim Jagielski 	mnNumberingType <<= NumberingType::CHAR_SPECIAL;
63*b1cdbd2cSJim Jagielski 	msBulletChar <<= sChar;
64*b1cdbd2cSJim Jagielski }
65*b1cdbd2cSJim Jagielski 
setGraphic(::com::sun::star::uno::Reference<::com::sun::star::graphic::XGraphic> & rXGraphic)66*b1cdbd2cSJim Jagielski void BulletList::setGraphic( ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic >& rXGraphic )
67*b1cdbd2cSJim Jagielski {
68*b1cdbd2cSJim Jagielski 	mnNumberingType <<= NumberingType::BITMAP;
69*b1cdbd2cSJim Jagielski 	maGraphic <<= rXGraphic;
70*b1cdbd2cSJim Jagielski }
71*b1cdbd2cSJim Jagielski 
setNone()72*b1cdbd2cSJim Jagielski void BulletList::setNone( )
73*b1cdbd2cSJim Jagielski {
74*b1cdbd2cSJim Jagielski 	mnNumberingType <<= NumberingType::NUMBER_NONE;
75*b1cdbd2cSJim Jagielski }
76*b1cdbd2cSJim Jagielski 
setSuffixParenBoth()77*b1cdbd2cSJim Jagielski void BulletList::setSuffixParenBoth()
78*b1cdbd2cSJim Jagielski {
79*b1cdbd2cSJim Jagielski 	msNumberingSuffix <<= CREATE_OUSTRING( ")" );
80*b1cdbd2cSJim Jagielski 	msNumberingPrefix <<= CREATE_OUSTRING( "(" );
81*b1cdbd2cSJim Jagielski }
82*b1cdbd2cSJim Jagielski 
setSuffixParenRight()83*b1cdbd2cSJim Jagielski void BulletList::setSuffixParenRight()
84*b1cdbd2cSJim Jagielski {
85*b1cdbd2cSJim Jagielski 	msNumberingSuffix <<= CREATE_OUSTRING( ")" );
86*b1cdbd2cSJim Jagielski 	msNumberingPrefix <<= OUString();
87*b1cdbd2cSJim Jagielski }
88*b1cdbd2cSJim Jagielski 
setSuffixPeriod()89*b1cdbd2cSJim Jagielski void BulletList::setSuffixPeriod()
90*b1cdbd2cSJim Jagielski {
91*b1cdbd2cSJim Jagielski 	msNumberingSuffix <<= CREATE_OUSTRING( "." );
92*b1cdbd2cSJim Jagielski 	msNumberingPrefix <<= OUString();
93*b1cdbd2cSJim Jagielski }
94*b1cdbd2cSJim Jagielski 
setSuffixNone()95*b1cdbd2cSJim Jagielski void BulletList::setSuffixNone()
96*b1cdbd2cSJim Jagielski {
97*b1cdbd2cSJim Jagielski 	msNumberingSuffix <<= OUString();
98*b1cdbd2cSJim Jagielski 	msNumberingPrefix <<= OUString();
99*b1cdbd2cSJim Jagielski }
100*b1cdbd2cSJim Jagielski 
setSuffixMinusRight()101*b1cdbd2cSJim Jagielski void BulletList::setSuffixMinusRight()
102*b1cdbd2cSJim Jagielski {
103*b1cdbd2cSJim Jagielski 	msNumberingSuffix <<= CREATE_OUSTRING( "-" );
104*b1cdbd2cSJim Jagielski 	msNumberingPrefix <<= OUString();
105*b1cdbd2cSJim Jagielski }
106*b1cdbd2cSJim Jagielski 
setType(sal_Int32 nType)107*b1cdbd2cSJim Jagielski void BulletList::setType( sal_Int32 nType )
108*b1cdbd2cSJim Jagielski {
109*b1cdbd2cSJim Jagielski //	OSL_TRACE( "OOX: set list numbering type %d", nType);
110*b1cdbd2cSJim Jagielski 	switch( nType )
111*b1cdbd2cSJim Jagielski 	{
112*b1cdbd2cSJim Jagielski 	case XML_alphaLcParenBoth:
113*b1cdbd2cSJim Jagielski 		mnNumberingType <<= NumberingType::CHARS_LOWER_LETTER;
114*b1cdbd2cSJim Jagielski 		setSuffixParenBoth();
115*b1cdbd2cSJim Jagielski 		break;
116*b1cdbd2cSJim Jagielski 	case XML_alphaLcParenR:
117*b1cdbd2cSJim Jagielski 		mnNumberingType <<= NumberingType::CHARS_LOWER_LETTER;
118*b1cdbd2cSJim Jagielski 		setSuffixParenRight();
119*b1cdbd2cSJim Jagielski 		break;
120*b1cdbd2cSJim Jagielski 	case XML_alphaLcPeriod:
121*b1cdbd2cSJim Jagielski 		mnNumberingType <<= NumberingType::CHARS_LOWER_LETTER;
122*b1cdbd2cSJim Jagielski 		setSuffixPeriod();
123*b1cdbd2cSJim Jagielski 		break;
124*b1cdbd2cSJim Jagielski 	case XML_alphaUcParenBoth:
125*b1cdbd2cSJim Jagielski 		mnNumberingType <<= NumberingType::CHARS_UPPER_LETTER;
126*b1cdbd2cSJim Jagielski 		setSuffixParenBoth();
127*b1cdbd2cSJim Jagielski 		break;
128*b1cdbd2cSJim Jagielski 	case XML_alphaUcParenR:
129*b1cdbd2cSJim Jagielski 		mnNumberingType <<= NumberingType::CHARS_UPPER_LETTER;
130*b1cdbd2cSJim Jagielski 		setSuffixParenRight();
131*b1cdbd2cSJim Jagielski 		break;
132*b1cdbd2cSJim Jagielski 	case XML_alphaUcPeriod:
133*b1cdbd2cSJim Jagielski 		mnNumberingType <<= NumberingType::CHARS_UPPER_LETTER;
134*b1cdbd2cSJim Jagielski 		setSuffixPeriod();
135*b1cdbd2cSJim Jagielski 		break;
136*b1cdbd2cSJim Jagielski 	case XML_arabic1Minus:
137*b1cdbd2cSJim Jagielski 	case XML_arabic2Minus:
138*b1cdbd2cSJim Jagielski 	case XML_arabicDbPeriod:
139*b1cdbd2cSJim Jagielski 	case XML_arabicDbPlain:
140*b1cdbd2cSJim Jagielski 		// TODO
141*b1cdbd2cSJim Jagielski 		break;
142*b1cdbd2cSJim Jagielski 	case XML_arabicParenBoth:
143*b1cdbd2cSJim Jagielski  		mnNumberingType <<= NumberingType::ARABIC;
144*b1cdbd2cSJim Jagielski 		setSuffixParenBoth();
145*b1cdbd2cSJim Jagielski 		break;
146*b1cdbd2cSJim Jagielski 	case XML_arabicParenR:
147*b1cdbd2cSJim Jagielski  		mnNumberingType <<= NumberingType::ARABIC;
148*b1cdbd2cSJim Jagielski 		setSuffixParenRight();
149*b1cdbd2cSJim Jagielski 		break;
150*b1cdbd2cSJim Jagielski 	case XML_arabicPeriod:
151*b1cdbd2cSJim Jagielski  		mnNumberingType <<= NumberingType::ARABIC;
152*b1cdbd2cSJim Jagielski 		setSuffixPeriod();
153*b1cdbd2cSJim Jagielski 		break;
154*b1cdbd2cSJim Jagielski 	case XML_arabicPlain:
155*b1cdbd2cSJim Jagielski  		mnNumberingType <<= NumberingType::ARABIC;
156*b1cdbd2cSJim Jagielski 		setSuffixNone();
157*b1cdbd2cSJim Jagielski 		break;
158*b1cdbd2cSJim Jagielski 	case XML_circleNumDbPlain:
159*b1cdbd2cSJim Jagielski 	case XML_circleNumWdBlackPlain:
160*b1cdbd2cSJim Jagielski 	case XML_circleNumWdWhitePlain:
161*b1cdbd2cSJim Jagielski 		mnNumberingType <<= NumberingType::CIRCLE_NUMBER;
162*b1cdbd2cSJim Jagielski 		break;
163*b1cdbd2cSJim Jagielski 	case XML_ea1ChsPeriod:
164*b1cdbd2cSJim Jagielski 		mnNumberingType <<= NumberingType::NUMBER_UPPER_ZH;
165*b1cdbd2cSJim Jagielski  		setSuffixPeriod();
166*b1cdbd2cSJim Jagielski 		break;
167*b1cdbd2cSJim Jagielski 	case XML_ea1ChsPlain:
168*b1cdbd2cSJim Jagielski 		mnNumberingType <<= NumberingType::NUMBER_UPPER_ZH;
169*b1cdbd2cSJim Jagielski 		setSuffixNone();
170*b1cdbd2cSJim Jagielski 		break;
171*b1cdbd2cSJim Jagielski 	case XML_ea1ChtPeriod:
172*b1cdbd2cSJim Jagielski 		mnNumberingType <<= NumberingType::NUMBER_UPPER_ZH_TW;
173*b1cdbd2cSJim Jagielski  		setSuffixPeriod();
174*b1cdbd2cSJim Jagielski 		break;
175*b1cdbd2cSJim Jagielski 	case XML_ea1ChtPlain:
176*b1cdbd2cSJim Jagielski 		mnNumberingType <<= NumberingType::NUMBER_UPPER_ZH_TW;
177*b1cdbd2cSJim Jagielski 		setSuffixNone();
178*b1cdbd2cSJim Jagielski 		break;
179*b1cdbd2cSJim Jagielski 	case XML_ea1JpnChsDbPeriod:
180*b1cdbd2cSJim Jagielski 	case XML_ea1JpnKorPeriod:
181*b1cdbd2cSJim Jagielski 	case XML_ea1JpnKorPlain:
182*b1cdbd2cSJim Jagielski 		break;
183*b1cdbd2cSJim Jagielski 	case XML_hebrew2Minus:
184*b1cdbd2cSJim Jagielski 		mnNumberingType <<= NumberingType::CHARS_HEBREW;
185*b1cdbd2cSJim Jagielski 		setSuffixMinusRight();
186*b1cdbd2cSJim Jagielski 		break;
187*b1cdbd2cSJim Jagielski 	case XML_hindiAlpha1Period:
188*b1cdbd2cSJim Jagielski 	case XML_hindiAlphaPeriod:
189*b1cdbd2cSJim Jagielski 	case XML_hindiNumParenR:
190*b1cdbd2cSJim Jagielski 	case XML_hindiNumPeriod:
191*b1cdbd2cSJim Jagielski 		// TODO
192*b1cdbd2cSJim Jagielski 		break;
193*b1cdbd2cSJim Jagielski 	case XML_romanLcParenBoth:
194*b1cdbd2cSJim Jagielski 		mnNumberingType <<= NumberingType::ROMAN_LOWER;
195*b1cdbd2cSJim Jagielski 		setSuffixParenBoth();
196*b1cdbd2cSJim Jagielski 		break;
197*b1cdbd2cSJim Jagielski 	case XML_romanLcParenR:
198*b1cdbd2cSJim Jagielski 		mnNumberingType <<= NumberingType::ROMAN_LOWER;
199*b1cdbd2cSJim Jagielski 		setSuffixParenRight();
200*b1cdbd2cSJim Jagielski 		break;
201*b1cdbd2cSJim Jagielski 	case XML_romanLcPeriod:
202*b1cdbd2cSJim Jagielski 		mnNumberingType <<= NumberingType::ROMAN_LOWER;
203*b1cdbd2cSJim Jagielski  		setSuffixPeriod();
204*b1cdbd2cSJim Jagielski 		break;
205*b1cdbd2cSJim Jagielski 	case XML_romanUcParenBoth:
206*b1cdbd2cSJim Jagielski 		mnNumberingType <<= NumberingType::ROMAN_UPPER;
207*b1cdbd2cSJim Jagielski 		setSuffixParenBoth();
208*b1cdbd2cSJim Jagielski 		break;
209*b1cdbd2cSJim Jagielski 	case XML_romanUcParenR:
210*b1cdbd2cSJim Jagielski 		mnNumberingType <<= NumberingType::ROMAN_UPPER;
211*b1cdbd2cSJim Jagielski 		setSuffixParenRight();
212*b1cdbd2cSJim Jagielski 		break;
213*b1cdbd2cSJim Jagielski 	case XML_romanUcPeriod:
214*b1cdbd2cSJim Jagielski 		mnNumberingType <<= NumberingType::ROMAN_UPPER;
215*b1cdbd2cSJim Jagielski  		setSuffixPeriod();
216*b1cdbd2cSJim Jagielski 		break;
217*b1cdbd2cSJim Jagielski 	case XML_thaiAlphaParenBoth:
218*b1cdbd2cSJim Jagielski 	case XML_thaiNumParenBoth:
219*b1cdbd2cSJim Jagielski 		mnNumberingType <<= NumberingType::CHARS_THAI;
220*b1cdbd2cSJim Jagielski 		setSuffixParenBoth();
221*b1cdbd2cSJim Jagielski 		break;
222*b1cdbd2cSJim Jagielski 	case XML_thaiAlphaParenR:
223*b1cdbd2cSJim Jagielski 	case XML_thaiNumParenR:
224*b1cdbd2cSJim Jagielski 		mnNumberingType <<= NumberingType::CHARS_THAI;
225*b1cdbd2cSJim Jagielski 		setSuffixParenRight();
226*b1cdbd2cSJim Jagielski 		break;
227*b1cdbd2cSJim Jagielski 	case XML_thaiAlphaPeriod:
228*b1cdbd2cSJim Jagielski 	case XML_thaiNumPeriod:
229*b1cdbd2cSJim Jagielski 		mnNumberingType <<= NumberingType::CHARS_THAI;
230*b1cdbd2cSJim Jagielski  		setSuffixPeriod();
231*b1cdbd2cSJim Jagielski 		break;
232*b1cdbd2cSJim Jagielski 	}
233*b1cdbd2cSJim Jagielski }
234*b1cdbd2cSJim Jagielski 
setBulletSize(sal_Int16 nSize)235*b1cdbd2cSJim Jagielski void BulletList::setBulletSize(sal_Int16 nSize)
236*b1cdbd2cSJim Jagielski {
237*b1cdbd2cSJim Jagielski 	mnSize <<= nSize;
238*b1cdbd2cSJim Jagielski }
239*b1cdbd2cSJim Jagielski 
240*b1cdbd2cSJim Jagielski 
setFontSize(sal_Int16 nSize)241*b1cdbd2cSJim Jagielski void BulletList::setFontSize(sal_Int16 nSize)
242*b1cdbd2cSJim Jagielski {
243*b1cdbd2cSJim Jagielski 	mnFontSize <<= nSize;
244*b1cdbd2cSJim Jagielski }
245*b1cdbd2cSJim Jagielski 
apply(const BulletList & rSource)246*b1cdbd2cSJim Jagielski void BulletList::apply( const BulletList& rSource )
247*b1cdbd2cSJim Jagielski {
248*b1cdbd2cSJim Jagielski 	if ( rSource.maBulletColorPtr->isUsed() )
249*b1cdbd2cSJim Jagielski 		maBulletColorPtr = rSource.maBulletColorPtr;
250*b1cdbd2cSJim Jagielski 	if ( rSource.mbBulletColorFollowText.hasValue() )
251*b1cdbd2cSJim Jagielski 		mbBulletColorFollowText = rSource.mbBulletColorFollowText;
252*b1cdbd2cSJim Jagielski 	if ( rSource.mbBulletFontFollowText.hasValue() )
253*b1cdbd2cSJim Jagielski 		mbBulletFontFollowText = rSource.mbBulletFontFollowText;
254*b1cdbd2cSJim Jagielski     maBulletFont.assignIfUsed( rSource.maBulletFont );
255*b1cdbd2cSJim Jagielski 	if ( rSource.msBulletChar.hasValue() )
256*b1cdbd2cSJim Jagielski 		msBulletChar = rSource.msBulletChar;
257*b1cdbd2cSJim Jagielski 	if ( rSource.mnStartAt.hasValue() )
258*b1cdbd2cSJim Jagielski 		mnStartAt = rSource.mnStartAt;
259*b1cdbd2cSJim Jagielski 	if ( rSource.mnNumberingType.hasValue() )
260*b1cdbd2cSJim Jagielski 		mnNumberingType = rSource.mnNumberingType;
261*b1cdbd2cSJim Jagielski 	if ( rSource.msNumberingPrefix.hasValue() )
262*b1cdbd2cSJim Jagielski 		msNumberingPrefix = rSource.msNumberingPrefix;
263*b1cdbd2cSJim Jagielski 	if ( rSource.msNumberingSuffix.hasValue() )
264*b1cdbd2cSJim Jagielski 		msNumberingSuffix = rSource.msNumberingSuffix;
265*b1cdbd2cSJim Jagielski 	if ( rSource.mnSize.hasValue() )
266*b1cdbd2cSJim Jagielski 		mnSize = rSource.mnSize;
267*b1cdbd2cSJim Jagielski 	if ( rSource.mnFontSize.hasValue() )
268*b1cdbd2cSJim Jagielski 		mnFontSize = rSource.mnFontSize;
269*b1cdbd2cSJim Jagielski 	if ( rSource.maStyleName.hasValue() )
270*b1cdbd2cSJim Jagielski 		maStyleName = rSource.maStyleName;
271*b1cdbd2cSJim Jagielski 	if ( rSource.maGraphic.hasValue() )
272*b1cdbd2cSJim Jagielski 		maGraphic = rSource.maGraphic;
273*b1cdbd2cSJim Jagielski }
274*b1cdbd2cSJim Jagielski 
pushToPropMap(const::oox::core::XmlFilterBase & rFilterBase,PropertyMap & rPropMap) const275*b1cdbd2cSJim Jagielski void BulletList::pushToPropMap( const ::oox::core::XmlFilterBase& rFilterBase, PropertyMap& rPropMap ) const
276*b1cdbd2cSJim Jagielski {
277*b1cdbd2cSJim Jagielski 	if( msNumberingPrefix.hasValue() )
278*b1cdbd2cSJim Jagielski         rPropMap[ PROP_Prefix ] = msNumberingPrefix;
279*b1cdbd2cSJim Jagielski 	if( msNumberingSuffix.hasValue() )
280*b1cdbd2cSJim Jagielski         rPropMap[ PROP_Suffix ] = msNumberingSuffix;
281*b1cdbd2cSJim Jagielski 	if( mnStartAt.hasValue() )
282*b1cdbd2cSJim Jagielski         rPropMap[ PROP_StartWith ] = mnStartAt;
283*b1cdbd2cSJim Jagielski     rPropMap[ PROP_Adjust ] <<= HoriOrientation::LEFT;
284*b1cdbd2cSJim Jagielski 
285*b1cdbd2cSJim Jagielski 	if( mnNumberingType.hasValue() )
286*b1cdbd2cSJim Jagielski         rPropMap[ PROP_NumberingType ] = mnNumberingType;
287*b1cdbd2cSJim Jagielski 
288*b1cdbd2cSJim Jagielski     OUString aBulletFontName;
289*b1cdbd2cSJim Jagielski     sal_Int16 nBulletFontPitch = 0;
290*b1cdbd2cSJim Jagielski     sal_Int16 nBulletFontFamily = 0;
291*b1cdbd2cSJim Jagielski     if( maBulletFont.getFontData( aBulletFontName, nBulletFontPitch, nBulletFontFamily, rFilterBase ) )
292*b1cdbd2cSJim Jagielski 	{
293*b1cdbd2cSJim Jagielski 		FontDescriptor aFontDesc;
294*b1cdbd2cSJim Jagielski 		sal_Int16 nFontSize = 0;
295*b1cdbd2cSJim Jagielski 		if( mnFontSize >>= nFontSize )
296*b1cdbd2cSJim Jagielski 			aFontDesc.Height = nFontSize;
297*b1cdbd2cSJim Jagielski 
298*b1cdbd2cSJim Jagielski 		// TODO move the to the TextFont struct.
299*b1cdbd2cSJim Jagielski         aFontDesc.Name = aBulletFontName;
300*b1cdbd2cSJim Jagielski         aFontDesc.Pitch = nBulletFontPitch;
301*b1cdbd2cSJim Jagielski         aFontDesc.Family = nBulletFontFamily;
302*b1cdbd2cSJim Jagielski         rPropMap[ PROP_BulletFont ] <<= aFontDesc;
303*b1cdbd2cSJim Jagielski         rPropMap[ PROP_BulletFontName ] <<= aBulletFontName;
304*b1cdbd2cSJim Jagielski 	}
305*b1cdbd2cSJim Jagielski 	if ( msBulletChar.hasValue() )
306*b1cdbd2cSJim Jagielski         rPropMap[ PROP_BulletChar ] = msBulletChar;
307*b1cdbd2cSJim Jagielski 	if ( maGraphic.hasValue() )
308*b1cdbd2cSJim Jagielski 	{
309*b1cdbd2cSJim Jagielski 		Reference< com::sun::star::awt::XBitmap > xBitmap( maGraphic, UNO_QUERY );
310*b1cdbd2cSJim Jagielski 		if ( xBitmap.is() )
311*b1cdbd2cSJim Jagielski             rPropMap[ PROP_Graphic ] <<= xBitmap;
312*b1cdbd2cSJim Jagielski 	}
313*b1cdbd2cSJim Jagielski 	if( mnSize.hasValue() )
314*b1cdbd2cSJim Jagielski         rPropMap[ PROP_BulletRelSize ] = mnSize;
315*b1cdbd2cSJim Jagielski 	if ( maStyleName.hasValue() )
316*b1cdbd2cSJim Jagielski         rPropMap[ PROP_CharStyleName ] <<= maStyleName;
317*b1cdbd2cSJim Jagielski 	if ( maBulletColorPtr->isUsed() )
318*b1cdbd2cSJim Jagielski         rPropMap[ PROP_BulletColor ] <<= maBulletColorPtr->getColor( rFilterBase.getGraphicHelper() );
319*b1cdbd2cSJim Jagielski }
320*b1cdbd2cSJim Jagielski 
TextParagraphProperties()321*b1cdbd2cSJim Jagielski TextParagraphProperties::TextParagraphProperties()
322*b1cdbd2cSJim Jagielski : mnLevel( 0 )
323*b1cdbd2cSJim Jagielski {
324*b1cdbd2cSJim Jagielski }
325*b1cdbd2cSJim Jagielski 
~TextParagraphProperties()326*b1cdbd2cSJim Jagielski TextParagraphProperties::~TextParagraphProperties()
327*b1cdbd2cSJim Jagielski {
328*b1cdbd2cSJim Jagielski }
329*b1cdbd2cSJim Jagielski 
apply(const TextParagraphProperties & rSourceProps)330*b1cdbd2cSJim Jagielski void TextParagraphProperties::apply( const TextParagraphProperties& rSourceProps )
331*b1cdbd2cSJim Jagielski {
332*b1cdbd2cSJim Jagielski     maTextParagraphPropertyMap.insert( rSourceProps.maTextParagraphPropertyMap.begin(), rSourceProps.maTextParagraphPropertyMap.end() );
333*b1cdbd2cSJim Jagielski     maBulletList.apply( rSourceProps.maBulletList );
334*b1cdbd2cSJim Jagielski     maTextCharacterProperties.assignUsed( rSourceProps.maTextCharacterProperties );
335*b1cdbd2cSJim Jagielski     if ( rSourceProps.maParaTopMargin.bHasValue )
336*b1cdbd2cSJim Jagielski         maParaTopMargin = rSourceProps.maParaTopMargin;
337*b1cdbd2cSJim Jagielski     if ( rSourceProps.maParaBottomMargin.bHasValue )
338*b1cdbd2cSJim Jagielski         maParaBottomMargin = rSourceProps.maParaBottomMargin;
339*b1cdbd2cSJim Jagielski     if ( rSourceProps.moParaLeftMargin )
340*b1cdbd2cSJim Jagielski         moParaLeftMargin = rSourceProps.moParaLeftMargin;
341*b1cdbd2cSJim Jagielski     if ( rSourceProps.moFirstLineIndentation )
342*b1cdbd2cSJim Jagielski         moFirstLineIndentation = rSourceProps.moFirstLineIndentation;
343*b1cdbd2cSJim Jagielski }
344*b1cdbd2cSJim Jagielski 
pushToPropSet(const::oox::core::XmlFilterBase & rFilterBase,const Reference<XPropertySet> & xPropSet,PropertyMap & rioBulletMap,const BulletList * pMasterBuList,sal_Bool bApplyBulletMap,float fCharacterSize) const345*b1cdbd2cSJim Jagielski void TextParagraphProperties::pushToPropSet( const ::oox::core::XmlFilterBase& rFilterBase,
346*b1cdbd2cSJim Jagielski     const Reference < XPropertySet >& xPropSet, PropertyMap& rioBulletMap, const BulletList* pMasterBuList, sal_Bool bApplyBulletMap, float fCharacterSize ) const
347*b1cdbd2cSJim Jagielski {
348*b1cdbd2cSJim Jagielski     PropertySet aPropSet( xPropSet );
349*b1cdbd2cSJim Jagielski     aPropSet.setProperties( maTextParagraphPropertyMap );
350*b1cdbd2cSJim Jagielski 
351*b1cdbd2cSJim Jagielski 	sal_Int32 nNumberingType = NumberingType::NUMBER_NONE;
352*b1cdbd2cSJim Jagielski 	if ( maBulletList.mnNumberingType.hasValue() )
353*b1cdbd2cSJim Jagielski 		maBulletList.mnNumberingType >>= nNumberingType;
354*b1cdbd2cSJim Jagielski 	else if ( pMasterBuList && pMasterBuList->mnNumberingType.hasValue() )
355*b1cdbd2cSJim Jagielski 		pMasterBuList->mnNumberingType >>= nNumberingType;
356*b1cdbd2cSJim Jagielski 	if ( nNumberingType == NumberingType::NUMBER_NONE )
357*b1cdbd2cSJim Jagielski         aPropSet.setProperty< sal_Int16 >( PROP_NumberingLevel, -1 );
358*b1cdbd2cSJim Jagielski 
359*b1cdbd2cSJim Jagielski 	maBulletList.pushToPropMap( rFilterBase, rioBulletMap );
360*b1cdbd2cSJim Jagielski 
361*b1cdbd2cSJim Jagielski 	if ( maParaTopMargin.bHasValue )
362*b1cdbd2cSJim Jagielski         aPropSet.setProperty( PROP_ParaTopMargin, maParaTopMargin.toMargin( getCharHeightPoints( 18.0 ) ) );
363*b1cdbd2cSJim Jagielski 	if ( maParaBottomMargin.bHasValue )
364*b1cdbd2cSJim Jagielski         aPropSet.setProperty( PROP_ParaBottomMargin, maParaBottomMargin.toMargin( getCharHeightPoints( 18.0 ) ) );
365*b1cdbd2cSJim Jagielski 	if ( nNumberingType == NumberingType::BITMAP )
366*b1cdbd2cSJim Jagielski 	{
367*b1cdbd2cSJim Jagielski         fCharacterSize = getCharHeightPoints( fCharacterSize );
368*b1cdbd2cSJim Jagielski 
369*b1cdbd2cSJim Jagielski 		com::sun::star::awt::Size aBulletSize;
370*b1cdbd2cSJim Jagielski 		aBulletSize.Width = aBulletSize.Height = static_cast< sal_Int32 >( ( fCharacterSize * ( 2540.0 / 72.0 ) * 0.8 ) );
371*b1cdbd2cSJim Jagielski         rioBulletMap[ PROP_GraphicSize ] <<= aBulletSize;
372*b1cdbd2cSJim Jagielski 	}
373*b1cdbd2cSJim Jagielski 
374*b1cdbd2cSJim Jagielski 	boost::optional< sal_Int32 > noParaLeftMargin( moParaLeftMargin );
375*b1cdbd2cSJim Jagielski 	boost::optional< sal_Int32 > noFirstLineIndentation( moFirstLineIndentation );
376*b1cdbd2cSJim Jagielski 
377*b1cdbd2cSJim Jagielski 	if ( nNumberingType != NumberingType::NUMBER_NONE )
378*b1cdbd2cSJim Jagielski 	{
379*b1cdbd2cSJim Jagielski 		if ( noParaLeftMargin )
380*b1cdbd2cSJim Jagielski 		{
381*b1cdbd2cSJim Jagielski             rioBulletMap[ PROP_LeftMargin ] <<= static_cast< sal_Int32 >( *noParaLeftMargin );
382*b1cdbd2cSJim Jagielski 			noParaLeftMargin = boost::optional< sal_Int32 >( 0 );
383*b1cdbd2cSJim Jagielski 		}
384*b1cdbd2cSJim Jagielski 		if ( noFirstLineIndentation )
385*b1cdbd2cSJim Jagielski 		{
386*b1cdbd2cSJim Jagielski             rioBulletMap[ PROP_FirstLineOffset ] <<= static_cast< sal_Int32 >( *noFirstLineIndentation );
387*b1cdbd2cSJim Jagielski 			noFirstLineIndentation = boost::optional< sal_Int32 >( 0 );
388*b1cdbd2cSJim Jagielski 		}
389*b1cdbd2cSJim Jagielski 	}
390*b1cdbd2cSJim Jagielski 
391*b1cdbd2cSJim Jagielski 	if ( bApplyBulletMap )
392*b1cdbd2cSJim Jagielski 	{
393*b1cdbd2cSJim Jagielski 		Reference< XIndexReplace > xNumRule;
394*b1cdbd2cSJim Jagielski         aPropSet.getProperty( xNumRule, PROP_NumberingRules );
395*b1cdbd2cSJim Jagielski 		OSL_ENSURE( xNumRule.is(), "can't get Numbering rules");
396*b1cdbd2cSJim Jagielski 
397*b1cdbd2cSJim Jagielski 		if( xNumRule.is() )
398*b1cdbd2cSJim Jagielski 		{
399*b1cdbd2cSJim Jagielski             if( !rioBulletMap.empty() )
400*b1cdbd2cSJim Jagielski             {
401*b1cdbd2cSJim Jagielski                 Sequence< PropertyValue > aBulletPropSeq = rioBulletMap.makePropertyValueSequence();
402*b1cdbd2cSJim Jagielski 				xNumRule->replaceByIndex( getLevel(), makeAny( aBulletPropSeq ) );
403*b1cdbd2cSJim Jagielski             }
404*b1cdbd2cSJim Jagielski 
405*b1cdbd2cSJim Jagielski             aPropSet.setProperty( PROP_NumberingRules, xNumRule );
406*b1cdbd2cSJim Jagielski 		}
407*b1cdbd2cSJim Jagielski 	}
408*b1cdbd2cSJim Jagielski 	if ( noParaLeftMargin )
409*b1cdbd2cSJim Jagielski         aPropSet.setProperty( PROP_ParaLeftMargin, *noParaLeftMargin );
410*b1cdbd2cSJim Jagielski 	if ( noFirstLineIndentation )
411*b1cdbd2cSJim Jagielski         aPropSet.setProperty( PROP_ParaFirstLineIndent, *noFirstLineIndentation );
412*b1cdbd2cSJim Jagielski }
413*b1cdbd2cSJim Jagielski 
getCharHeightPoints(float fDefault) const414*b1cdbd2cSJim Jagielski float TextParagraphProperties::getCharHeightPoints( float fDefault ) const
415*b1cdbd2cSJim Jagielski {
416*b1cdbd2cSJim Jagielski     return maTextCharacterProperties.getCharHeightPoints( fDefault );
417*b1cdbd2cSJim Jagielski }
418*b1cdbd2cSJim Jagielski 
419*b1cdbd2cSJim Jagielski } }
420