Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
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/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
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 .
18 : */
19 :
20 : #include <com/sun/star/text/HoriOrientation.hpp>
21 : #include <com/sun/star/awt/XBitmap.hpp>
22 : #include <cppuhelper/supportsservice.hxx>
23 : #include <vcl/svapp.hxx>
24 : #include <osl/mutex.hxx>
25 : #include <vcl/graph.hxx>
26 : #include <svtools/grfmgr.hxx>
27 : #include <toolkit/helper/vclunohelper.hxx>
28 :
29 : #include <editeng/brushitem.hxx>
30 : #include <editeng/unoprnms.hxx>
31 : #include <editeng/numitem.hxx>
32 : #include <editeng/eeitem.hxx>
33 : #include <editeng/unotext.hxx>
34 : #include <editeng/unofdesc.hxx>
35 : #include <editeng/unonrule.hxx>
36 : #include <editeng/editids.hrc>
37 : #include <editeng/numdef.hxx>
38 : #include <boost/scoped_array.hpp>
39 :
40 : using ::com::sun::star::util::XCloneable;
41 : using ::com::sun::star::ucb::XAnyCompare;
42 :
43 :
44 : using namespace ::std;
45 : using namespace ::com::sun::star;
46 : using namespace ::com::sun::star::uno;
47 : using namespace ::com::sun::star::lang;
48 : using namespace ::com::sun::star::container;
49 :
50 : const SvxAdjust aUnoToSvxAdjust[] =
51 : {
52 : SVX_ADJUST_LEFT,
53 : SVX_ADJUST_RIGHT,
54 : SVX_ADJUST_CENTER,
55 : SVX_ADJUST_LEFT,
56 : SVX_ADJUST_LEFT,
57 : SVX_ADJUST_LEFT,
58 : SVX_ADJUST_BLOCK
59 : };
60 :
61 : const unsigned short aSvxToUnoAdjust[] =
62 : {
63 : text::HoriOrientation::LEFT,
64 : text::HoriOrientation::RIGHT,
65 : text::HoriOrientation::FULL,
66 : text::HoriOrientation::CENTER,
67 : text::HoriOrientation::FULL,
68 : text::HoriOrientation::LEFT
69 : };
70 :
71 0 : SvxAdjust ConvertUnoAdjust( unsigned short nAdjust )
72 : {
73 : DBG_ASSERT( nAdjust <= 7, "Enum hat sich geaendert! [CL]" );
74 0 : return aUnoToSvxAdjust[nAdjust];
75 : }
76 :
77 0 : unsigned short ConvertUnoAdjust( SvxAdjust eAdjust )
78 : {
79 : DBG_ASSERT( eAdjust <= 6, "Enum hat sich geaendert! [CL]" );
80 0 : return aSvxToUnoAdjust[eAdjust];
81 : }
82 :
83 0 : UNO3_GETIMPLEMENTATION_IMPL( SvxUnoNumberingRules );
84 :
85 0 : SvxUnoNumberingRules::SvxUnoNumberingRules( const SvxNumRule& rRule ) throw()
86 0 : : maRule( rRule )
87 : {
88 0 : }
89 :
90 0 : SvxUnoNumberingRules::~SvxUnoNumberingRules() throw()
91 : {
92 0 : }
93 :
94 : //XIndexReplace
95 0 : void SAL_CALL SvxUnoNumberingRules::replaceByIndex( sal_Int32 Index, const uno::Any& Element )
96 : throw( IllegalArgumentException, IndexOutOfBoundsException, WrappedTargetException, RuntimeException, std::exception )
97 : {
98 0 : SolarMutexGuard aGuard;
99 :
100 0 : if( Index < 0 || Index >= maRule.GetLevelCount() )
101 0 : throw IndexOutOfBoundsException();
102 :
103 0 : Sequence< beans::PropertyValue > aSeq;
104 :
105 0 : if( !( Element >>= aSeq) )
106 0 : throw IllegalArgumentException();
107 0 : setNumberingRuleByIndex( aSeq, Index );
108 0 : }
109 :
110 : // XIndexAccess
111 0 : sal_Int32 SAL_CALL SvxUnoNumberingRules::getCount() throw( RuntimeException, std::exception )
112 : {
113 0 : SolarMutexGuard aGuard;
114 :
115 0 : return maRule.GetLevelCount();
116 : }
117 :
118 0 : Any SAL_CALL SvxUnoNumberingRules::getByIndex( sal_Int32 Index )
119 : throw( IndexOutOfBoundsException, WrappedTargetException, RuntimeException, std::exception )
120 : {
121 0 : SolarMutexGuard aGuard;
122 :
123 0 : if( Index < 0 || Index >= maRule.GetLevelCount() )
124 0 : throw IndexOutOfBoundsException();
125 :
126 0 : return Any( getNumberingRuleByIndex(Index) );
127 : }
128 :
129 : //XElementAccess
130 0 : Type SAL_CALL SvxUnoNumberingRules::getElementType()
131 : throw( RuntimeException, std::exception )
132 : {
133 0 : return ::getCppuType(( const Sequence< beans::PropertyValue >*)0);
134 : }
135 :
136 0 : sal_Bool SAL_CALL SvxUnoNumberingRules::hasElements() throw( RuntimeException, std::exception )
137 : {
138 0 : return sal_True;
139 : }
140 :
141 : // XAnyCompare
142 0 : sal_Int16 SAL_CALL SvxUnoNumberingRules::compare( const Any& rAny1, const Any& rAny2 ) throw(RuntimeException, std::exception)
143 : {
144 0 : return SvxUnoNumberingRules::Compare( rAny1, rAny2 );
145 : }
146 :
147 : // XCloneable
148 0 : Reference< XCloneable > SAL_CALL SvxUnoNumberingRules::createClone( ) throw (RuntimeException, std::exception)
149 : {
150 0 : return new SvxUnoNumberingRules(maRule);
151 : }
152 :
153 : // XServiceInfo
154 : const char pSvxUnoNumberingRulesService[] = "com.sun.star.text.NumberingRules";
155 :
156 0 : OUString SAL_CALL SvxUnoNumberingRules::getImplementationName( ) throw(RuntimeException, std::exception)
157 : {
158 0 : return OUString( "SvxUnoNumberingRules" );
159 : }
160 :
161 0 : sal_Bool SAL_CALL SvxUnoNumberingRules::supportsService( const OUString& ServiceName ) throw(RuntimeException, std::exception)
162 : {
163 0 : return cppu::supportsService(this, ServiceName);
164 : }
165 :
166 0 : Sequence< OUString > SAL_CALL SvxUnoNumberingRules::getSupportedServiceNames( ) throw(RuntimeException, std::exception)
167 : {
168 0 : OUString aService( pSvxUnoNumberingRulesService );
169 0 : Sequence< OUString > aSeq( &aService, 1 );
170 0 : return aSeq;
171 : }
172 :
173 0 : Sequence<beans::PropertyValue> SvxUnoNumberingRules::getNumberingRuleByIndex( sal_Int32 nIndex) const throw()
174 : {
175 : // NumberingRule aRule;
176 0 : const SvxNumberFormat& rFmt = maRule.GetLevel((sal_uInt16) nIndex);
177 0 : sal_uInt16 nIdx = 0;
178 :
179 0 : const int nProps = 15;
180 0 : boost::scoped_array<beans::PropertyValue> pArray(new beans::PropertyValue[nProps]);
181 :
182 0 : Any aVal;
183 : {
184 0 : aVal <<= rFmt.GetNumberingType();
185 0 : beans::PropertyValue aAlignProp( OUString(UNO_NAME_NRULE_NUMBERINGTYPE), -1, aVal, beans::PropertyState_DIRECT_VALUE);
186 0 : pArray[nIdx++] = aAlignProp;
187 : }
188 :
189 : {
190 0 : SvxAdjust eAdj = rFmt.GetNumAdjust();
191 0 : aVal <<= ConvertUnoAdjust(eAdj);
192 0 : pArray[nIdx++] = beans::PropertyValue( OUString(UNO_NAME_NRULE_ADJUST), -1, aVal, beans::PropertyState_DIRECT_VALUE);
193 : }
194 :
195 : {
196 0 : aVal <<= OUString(rFmt.GetPrefix());
197 0 : beans::PropertyValue aPrefixProp( OUString(UNO_NAME_NRULE_PREFIX), -1, aVal, beans::PropertyState_DIRECT_VALUE);
198 0 : pArray[nIdx++] = aPrefixProp;
199 : }
200 :
201 : {
202 0 : aVal <<= OUString(rFmt.GetSuffix());
203 0 : beans::PropertyValue aSuffixProp( OUString(UNO_NAME_NRULE_SUFFIX), -1, aVal, beans::PropertyState_DIRECT_VALUE);
204 0 : pArray[nIdx++] = aSuffixProp;
205 : }
206 :
207 0 : if(SVX_NUM_CHAR_SPECIAL == rFmt.GetNumberingType())
208 : {
209 0 : sal_Unicode nCode = rFmt.GetBulletChar();
210 0 : OUString aStr( &nCode, 1 );
211 0 : aVal <<= aStr;
212 0 : beans::PropertyValue aBulletProp( OUString("BulletChar"), -1, aVal, beans::PropertyState_DIRECT_VALUE);
213 0 : pArray[nIdx++] = aBulletProp;
214 : }
215 :
216 0 : if( rFmt.GetBulletFont() )
217 : {
218 0 : awt::FontDescriptor aDesc;
219 0 : SvxUnoFontDescriptor::ConvertFromFont( *rFmt.GetBulletFont(), aDesc );
220 0 : aVal.setValue(&aDesc, ::getCppuType((const awt::FontDescriptor*)0));
221 0 : pArray[nIdx++] = beans::PropertyValue( OUString(UNO_NAME_NRULE_BULLET_FONT), -1, aVal, beans::PropertyState_DIRECT_VALUE);
222 : }
223 :
224 : {
225 0 : const SvxBrushItem* pBrush = rFmt.GetBrush();
226 0 : if(pBrush && pBrush->GetGraphicObject())
227 : {
228 0 : const GraphicObject* pGrafObj = pBrush->GetGraphicObject();
229 0 : OUString aURL( UNO_NAME_GRAPHOBJ_URLPREFIX);
230 0 : aURL += OStringToOUString(pGrafObj->GetUniqueID(),
231 0 : RTL_TEXTENCODING_ASCII_US);
232 :
233 0 : aVal <<= aURL;
234 0 : const beans::PropertyValue aGraphicProp( OUString("GraphicURL"), -1, aVal, beans::PropertyState_DIRECT_VALUE);
235 0 : pArray[nIdx++] = aGraphicProp;
236 : }
237 : }
238 :
239 : {
240 0 : const Size aSize( rFmt.GetGraphicSize() );
241 0 : const awt::Size aUnoSize( aSize.Width(), aSize.Height() );
242 0 : aVal <<= aUnoSize;
243 0 : const beans::PropertyValue aGraphicSizeProp(OUString("GraphicSize"), -1, aVal, beans::PropertyState_DIRECT_VALUE );
244 0 : pArray[nIdx++] = aGraphicSizeProp;
245 : }
246 :
247 0 : aVal <<= (sal_Int16)rFmt.GetStart();
248 0 : pArray[nIdx++] = beans::PropertyValue(OUString(UNO_NAME_NRULE_START_WITH), -1, aVal, beans::PropertyState_DIRECT_VALUE);
249 :
250 0 : aVal <<= (sal_Int32)rFmt.GetAbsLSpace();
251 0 : pArray[nIdx++] = beans::PropertyValue(OUString(UNO_NAME_NRULE_LEFT_MARGIN), -1, aVal, beans::PropertyState_DIRECT_VALUE);
252 :
253 0 : aVal <<= (sal_Int32)rFmt.GetFirstLineOffset();
254 0 : pArray[nIdx++] = beans::PropertyValue(OUString(UNO_NAME_NRULE_FIRST_LINE_OFFSET), -1, aVal, beans::PropertyState_DIRECT_VALUE);
255 :
256 0 : pArray[nIdx++] = beans::PropertyValue(OUString("SymbolTextDistance"), -1, aVal, beans::PropertyState_DIRECT_VALUE);
257 :
258 0 : aVal <<= (sal_Int32)rFmt.GetBulletColor().GetColor();
259 0 : pArray[nIdx++] = beans::PropertyValue(OUString(UNO_NAME_NRULE_BULLET_COLOR), -1, aVal, beans::PropertyState_DIRECT_VALUE);
260 :
261 0 : aVal <<= (sal_Int16)rFmt.GetBulletRelSize();
262 0 : pArray[nIdx++] = beans::PropertyValue(OUString(UNO_NAME_NRULE_BULLET_RELSIZE), -1, aVal, beans::PropertyState_DIRECT_VALUE);
263 :
264 : DBG_ASSERT( nIdx <= nProps, "FixMe: overflow in Array!!! [CL]" );
265 0 : Sequence< beans::PropertyValue> aSeq(pArray.get(), nIdx);
266 :
267 0 : return aSeq;
268 : }
269 :
270 0 : void SvxUnoNumberingRules::setNumberingRuleByIndex( const Sequence< beans::PropertyValue >& rProperties, sal_Int32 nIndex)
271 : throw( RuntimeException, IllegalArgumentException )
272 : {
273 0 : SvxNumberFormat aFmt(maRule.GetLevel( (sal_uInt16)nIndex ));
274 0 : const beans::PropertyValue* pPropArray = rProperties.getConstArray();
275 0 : for(int i = 0; i < rProperties.getLength(); i++)
276 : {
277 0 : const beans::PropertyValue& rProp = pPropArray[i];
278 0 : const OUString& rPropName = rProp.Name;
279 0 : const Any& aVal = rProp.Value;
280 :
281 0 : if ( rPropName == UNO_NAME_NRULE_NUMBERINGTYPE )
282 : {
283 0 : sal_Int16 nSet = sal_Int16();
284 0 : aVal >>= nSet;
285 :
286 : // There is no reason to limit numbering types.
287 0 : if ( nSet>=0 )
288 : {
289 0 : aFmt.SetNumberingType(nSet);
290 0 : continue;
291 : }
292 : }
293 0 : else if ( rPropName == UNO_NAME_NRULE_PREFIX )
294 : {
295 0 : OUString aPrefix;
296 0 : if( aVal >>= aPrefix )
297 : {
298 0 : aFmt.SetPrefix(aPrefix);
299 0 : continue;
300 0 : }
301 : }
302 0 : else if ( rPropName == UNO_NAME_NRULE_SUFFIX )
303 : {
304 0 : OUString aSuffix;
305 0 : if( aVal >>= aSuffix )
306 : {
307 0 : aFmt.SetSuffix(aSuffix);
308 0 : continue;
309 0 : }
310 : }
311 0 : else if ( rPropName == UNO_NAME_NRULE_BULLETID )
312 : {
313 0 : sal_Int16 nSet = sal_Int16();
314 0 : if( aVal >>= nSet )
315 : {
316 0 : if(nSet < 0x100)
317 : {
318 0 : aFmt.SetBulletChar(nSet);
319 0 : continue;
320 : }
321 : }
322 : }
323 0 : else if ( rPropName == "BulletChar" )
324 : {
325 0 : OUString aStr;
326 0 : if( aVal >>= aStr )
327 : {
328 0 : if(!aStr.isEmpty())
329 : {
330 0 : aFmt.SetBulletChar(aStr[0]);
331 : }
332 : else
333 : {
334 0 : aFmt.SetBulletChar(0);
335 : }
336 0 : continue;
337 0 : }
338 : }
339 0 : else if ( rPropName == UNO_NAME_NRULE_ADJUST )
340 : {
341 0 : sal_Int16 nAdjust = sal_Int16();
342 0 : if( aVal >>= nAdjust )
343 : {
344 0 : aFmt.SetNumAdjust(ConvertUnoAdjust( (unsigned short)nAdjust ));
345 0 : continue;
346 : }
347 : }
348 0 : else if ( rPropName == UNO_NAME_NRULE_BULLET_FONT )
349 : {
350 0 : awt::FontDescriptor aDesc;
351 0 : if( aVal >>= aDesc )
352 : {
353 0 : Font aFont;
354 0 : SvxUnoFontDescriptor::ConvertToFont( aDesc, aFont );
355 0 : aFmt.SetBulletFont(&aFont);
356 0 : continue;
357 0 : }
358 : }
359 0 : else if ( rPropName == "Graphic" )
360 : {
361 0 : Reference< awt::XBitmap > xBmp;
362 0 : if( aVal >>= xBmp )
363 : {
364 0 : Graphic aGraf( VCLUnoHelper::GetBitmap( xBmp ) );
365 0 : SvxBrushItem aBrushItem(aGraf, GPOS_AREA, SID_ATTR_BRUSH);
366 0 : aFmt.SetGraphicBrush( &aBrushItem );
367 0 : continue;
368 0 : }
369 : }
370 0 : else if ( rPropName == "GraphicURL" )
371 : {
372 0 : OUString aURL;
373 0 : if( aVal >>= aURL )
374 : {
375 0 : GraphicObject aGrafObj( GraphicObject::CreateGraphicObjectFromURL( aURL ) );
376 0 : SvxBrushItem aBrushItem( aGrafObj, GPOS_AREA, SID_ATTR_BRUSH );
377 0 : aFmt.SetGraphicBrush( &aBrushItem );
378 0 : continue;
379 0 : }
380 : }
381 0 : else if ( rPropName == "GraphicSize" )
382 : {
383 0 : awt::Size aUnoSize;
384 0 : if( aVal >>= aUnoSize )
385 : {
386 0 : aFmt.SetGraphicSize( Size( aUnoSize.Width, aUnoSize.Height ) );
387 0 : continue;
388 : }
389 : }
390 0 : else if ( rPropName == UNO_NAME_NRULE_START_WITH )
391 : {
392 0 : sal_Int16 nStart = sal_Int16();
393 0 : if( aVal >>= nStart )
394 : {
395 0 : aFmt.SetStart( nStart );
396 0 : continue;
397 : }
398 : }
399 0 : else if ( rPropName == UNO_NAME_NRULE_LEFT_MARGIN )
400 : {
401 0 : sal_Int32 nMargin = 0;
402 0 : if( aVal >>= nMargin )
403 : {
404 0 : aFmt.SetAbsLSpace((sal_uInt16)nMargin);
405 0 : continue;
406 : }
407 : }
408 0 : else if ( rPropName == UNO_NAME_NRULE_FIRST_LINE_OFFSET )
409 : {
410 0 : sal_Int32 nMargin = 0;
411 0 : if( aVal >>= nMargin )
412 : {
413 0 : aFmt.SetFirstLineOffset((sal_uInt16)nMargin);
414 0 : continue;
415 : }
416 : }
417 0 : else if ( rPropName == "SymbolTextDistance" )
418 : {
419 0 : sal_Int32 nTextDistance = 0;
420 0 : if( aVal >>= nTextDistance )
421 : {
422 0 : aFmt.SetCharTextDistance((sal_uInt16)nTextDistance);
423 0 : continue;
424 : }
425 : }
426 0 : else if ( rPropName == UNO_NAME_NRULE_BULLET_COLOR )
427 : {
428 0 : sal_Int32 nColor = 0;
429 0 : if( aVal >>= nColor )
430 : {
431 0 : aFmt.SetBulletColor( (Color) nColor );
432 0 : continue;
433 : }
434 : }
435 0 : else if ( rPropName == UNO_NAME_NRULE_BULLET_RELSIZE )
436 : {
437 0 : sal_Int16 nSize = sal_Int16();
438 0 : if( aVal >>= nSize )
439 : {
440 : // [Bug 120650] the slide content corrupt when open in Aoo
441 0 : if ((nSize>250)||(nSize<=0))
442 : {
443 0 : nSize = 100;
444 : }
445 :
446 0 : aFmt.SetBulletRelSize( (short)nSize );
447 0 : continue;
448 : }
449 : }
450 : else
451 : {
452 0 : continue;
453 : }
454 :
455 0 : throw IllegalArgumentException();
456 : }
457 :
458 : // check that we always have a brush item for bitmap numbering
459 0 : if( aFmt.GetNumberingType() == SVX_NUM_BITMAP )
460 : {
461 0 : if( NULL == aFmt.GetBrush() )
462 : {
463 0 : GraphicObject aGrafObj;
464 0 : SvxBrushItem aBrushItem( aGrafObj, GPOS_AREA, SID_ATTR_BRUSH );
465 0 : aFmt.SetGraphicBrush( &aBrushItem );
466 : }
467 : }
468 0 : maRule.SetLevel( (sal_uInt16)nIndex, aFmt );
469 0 : }
470 :
471 0 : const SvxNumRule& SvxGetNumRule( Reference< XIndexReplace > xRule ) throw( IllegalArgumentException )
472 : {
473 0 : SvxUnoNumberingRules* pRule = SvxUnoNumberingRules::getImplementation( xRule );
474 0 : if( pRule == NULL )
475 0 : throw IllegalArgumentException();
476 :
477 0 : return pRule->getNumRule();
478 : }
479 :
480 0 : com::sun::star::uno::Reference< com::sun::star::container::XIndexReplace > SvxCreateNumRule( const SvxNumRule* pRule ) throw()
481 : {
482 : DBG_ASSERT( pRule, "No default SvxNumRule!" );
483 0 : if( pRule )
484 : {
485 0 : return new SvxUnoNumberingRules( *pRule );
486 : }
487 : else
488 : {
489 0 : SvxNumRule aDefaultRule( NUM_BULLET_REL_SIZE|NUM_BULLET_COLOR|NUM_CHAR_TEXT_DISTANCE, SVX_MAX_NUM, false);
490 0 : return new SvxUnoNumberingRules( aDefaultRule );
491 : }
492 : }
493 :
494 0 : class SvxUnoNumberingRulesCompare : public ::cppu::WeakAggImplHelper1< XAnyCompare >
495 : {
496 : public:
497 : virtual sal_Int16 SAL_CALL compare( const Any& Any1, const Any& Any2 ) throw(RuntimeException, std::exception) SAL_OVERRIDE;
498 : };
499 :
500 0 : sal_Int16 SAL_CALL SvxUnoNumberingRulesCompare::compare( const Any& Any1, const Any& Any2 ) throw(RuntimeException, std::exception)
501 : {
502 0 : return SvxUnoNumberingRules::Compare( Any1, Any2 );
503 : }
504 :
505 0 : sal_Int16 SvxUnoNumberingRules::Compare( const Any& Any1, const Any& Any2 )
506 : {
507 0 : Reference< XIndexReplace > x1( Any1, UNO_QUERY ), x2( Any2, UNO_QUERY );
508 0 : if( x1.is() && x2.is() )
509 : {
510 0 : if( x1.get() == x2.get() )
511 0 : return 0;
512 :
513 0 : SvxUnoNumberingRules* pRule1 = SvxUnoNumberingRules::getImplementation( x1 );
514 0 : if( pRule1 )
515 : {
516 0 : SvxUnoNumberingRules* pRule2 = SvxUnoNumberingRules::getImplementation( x2 );
517 0 : if( pRule2 )
518 : {
519 0 : const SvxNumRule& rRule1 = pRule1->getNumRule();
520 0 : const SvxNumRule& rRule2 = pRule2->getNumRule();
521 :
522 0 : const sal_uInt16 nLevelCount1 = rRule1.GetLevelCount();
523 0 : const sal_uInt16 nLevelCount2 = rRule2.GetLevelCount();
524 :
525 0 : if( nLevelCount1 == 0 || nLevelCount2 == 0 )
526 0 : return -1;
527 :
528 0 : for( sal_uInt16 i = 0; (i < nLevelCount1) && (i < nLevelCount2); i++ )
529 : {
530 0 : if( rRule1.GetLevel(i) != rRule2.GetLevel(i) )
531 0 : return -1;
532 : }
533 0 : return 0;
534 : }
535 : }
536 : }
537 :
538 0 : return -1;
539 : }
540 :
541 0 : Reference< XAnyCompare > SvxCreateNumRuleCompare() throw()
542 : {
543 0 : return new SvxUnoNumberingRulesCompare();
544 : }
545 :
546 0 : ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexReplace > SvxCreateNumRule() throw()
547 : {
548 0 : SvxNumRule aTempRule( 0, 10, false );
549 0 : return SvxCreateNumRule( &aTempRule );
550 : }
551 :
552 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|