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 <vcl/svapp.hxx>
21 : #include <osl/mutex.hxx>
22 : #include <rtl/instance.hxx>
23 :
24 : #include <editeng/eeitem.hxx>
25 : #include <editeng/flditem.hxx>
26 : #include <editeng/unofield.hxx>
27 : #include <editeng/unotext.hxx>
28 : #include <comphelper/servicehelper.hxx>
29 : #include <comphelper/serviceinfohelper.hxx>
30 : #include <cppuhelper/supportsservice.hxx>
31 :
32 : using namespace ::cppu;
33 : using namespace ::com::sun::star;
34 :
35 : #define QUERYINT( xint ) \
36 : if( rType == cppu::UnoType<xint>::get() ) \
37 : return uno::makeAny(uno::Reference< xint >(this))
38 :
39 :
40 : // SvxUnoTextContentEnumeration
41 :
42 :
43 2342 : SvxUnoTextContentEnumeration::SvxUnoTextContentEnumeration( const SvxUnoTextBase& _rText ) throw()
44 2342 : : mrText( _rText )
45 : {
46 2342 : mxParentText = const_cast<SvxUnoTextBase*>(&_rText);
47 2342 : if( mrText.GetEditSource() )
48 2342 : mpEditSource = mrText.GetEditSource()->Clone();
49 : else
50 0 : mpEditSource = NULL;
51 2342 : mnNextParagraph = 0;
52 2342 : }
53 :
54 7026 : SvxUnoTextContentEnumeration::~SvxUnoTextContentEnumeration() throw()
55 : {
56 2342 : delete mpEditSource;
57 4684 : }
58 :
59 : // container::XEnumeration
60 7661 : sal_Bool SAL_CALL SvxUnoTextContentEnumeration::hasMoreElements()
61 : throw( uno::RuntimeException, std::exception )
62 : {
63 7661 : SolarMutexGuard aGuard;
64 7661 : if( mpEditSource && mpEditSource->GetTextForwarder() )
65 7661 : return mnNextParagraph < mpEditSource->GetTextForwarder()->GetParagraphCount();
66 : else
67 0 : return sal_False;
68 : }
69 :
70 2791 : uno::Any SvxUnoTextContentEnumeration::nextElement() throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException, std::exception )
71 : {
72 2791 : SolarMutexGuard aGuard;
73 :
74 2791 : if(!hasMoreElements())
75 3 : throw container::NoSuchElementException();
76 :
77 2788 : SvxUnoTextContent* pContent = 0;
78 :
79 2788 : const SvxUnoTextRangeBaseList& rRanges( mpEditSource->getRanges() );
80 2788 : SvxUnoTextRangeBaseList::const_iterator aIter;
81 4465 : for( aIter = rRanges.begin(); (aIter != rRanges.end()) && (pContent == 0); ++aIter )
82 : {
83 1677 : SvxUnoTextContent* pIterContent = dynamic_cast< SvxUnoTextContent* >( (*aIter ) );
84 1677 : if( pIterContent && (pIterContent->mnParagraph == mnNextParagraph) )
85 0 : pContent = pIterContent;
86 : }
87 :
88 2788 : if( pContent == 0 )
89 2788 : pContent = new SvxUnoTextContent( mrText, mnNextParagraph );
90 :
91 2788 : mnNextParagraph++;
92 :
93 5576 : uno::Reference< text::XTextContent > xRef( pContent );
94 5579 : return uno::makeAny( xRef );
95 : }
96 :
97 :
98 : // class SvxUnoTextContent
99 :
100 :
101 2788 : SvxUnoTextContent::SvxUnoTextContent( const SvxUnoTextBase& rText, sal_Int32 nPara ) throw()
102 : : SvxUnoTextRangeBase(rText)
103 : , mnParagraph(nPara)
104 : , mrParentText(rText)
105 : , maDisposeListeners(maDisposeContainerMutex)
106 2788 : , mbDisposing( false )
107 : {
108 2788 : mxParentText = const_cast<SvxUnoTextBase*>(&rText);
109 2788 : if( GetEditSource() && GetEditSource()->GetTextForwarder() )
110 2788 : SetSelection( ESelection( mnParagraph,0, mnParagraph, GetEditSource()->GetTextForwarder()->GetTextLen( mnParagraph ) ) );
111 2788 : }
112 :
113 0 : SvxUnoTextContent::SvxUnoTextContent( const SvxUnoTextContent& rContent ) throw()
114 : : SvxUnoTextRangeBase(rContent)
115 : , text::XTextContent()
116 : , container::XEnumerationAccess()
117 : , lang::XTypeProvider()
118 : , cppu::OWeakAggObject()
119 : , mrParentText(rContent.mrParentText)
120 : , maDisposeListeners(maDisposeContainerMutex)
121 0 : , mbDisposing( false )
122 : {
123 0 : mxParentText = rContent.mxParentText;
124 0 : mnParagraph = rContent.mnParagraph;
125 0 : SetSelection( rContent.GetSelection() );
126 0 : }
127 :
128 5576 : SvxUnoTextContent::~SvxUnoTextContent() throw()
129 : {
130 5576 : }
131 :
132 : // uno::XInterface
133 16974 : uno::Any SAL_CALL SvxUnoTextContent::queryAggregation( const uno::Type & rType ) throw( uno::RuntimeException, std::exception )
134 : {
135 16974 : QUERYINT( text::XTextRange );
136 16933 : else QUERYINT( beans::XMultiPropertyStates );
137 16933 : else QUERYINT( beans::XPropertySet );
138 12368 : else QUERYINT( beans::XMultiPropertySet );
139 10173 : else QUERYINT( beans::XPropertyState );
140 8514 : else QUERYINT( text::XTextContent );
141 6981 : else QUERYINT( text::XTextRangeCompare );
142 6981 : else QUERYINT( lang::XComponent );
143 6981 : else QUERYINT( container::XEnumerationAccess );
144 4281 : else QUERYINT( container::XElementAccess );
145 4280 : else QUERYINT( lang::XServiceInfo );
146 2780 : else QUERYINT( lang::XTypeProvider );
147 2780 : else QUERYINT( lang::XUnoTunnel );
148 : else
149 2780 : return OWeakAggObject::queryAggregation( rType );
150 : }
151 :
152 16974 : uno::Any SAL_CALL SvxUnoTextContent::queryInterface( const uno::Type & rType ) throw( uno::RuntimeException, std::exception )
153 : {
154 16974 : return OWeakAggObject::queryInterface(rType);
155 : }
156 :
157 48857 : void SAL_CALL SvxUnoTextContent::acquire() throw( )
158 : {
159 48857 : OWeakAggObject::acquire();
160 48857 : }
161 :
162 48857 : void SAL_CALL SvxUnoTextContent::release() throw( )
163 : {
164 48857 : OWeakAggObject::release();
165 48857 : }
166 :
167 : // XTypeProvider
168 :
169 : namespace
170 : {
171 : struct theSvxUnoTextContentTypes :
172 : public rtl::StaticWithInit<uno::Sequence<uno::Type>, theSvxUnoTextContentTypes>
173 : {
174 0 : uno::Sequence<uno::Type> operator () ()
175 : {
176 0 : uno::Sequence< uno::Type > aTypeSequence;
177 :
178 0 : aTypeSequence.realloc( 11 ); // !DANGER! keep this updated
179 0 : uno::Type* pTypes = aTypeSequence.getArray();
180 :
181 0 : *pTypes++ = cppu::UnoType<text::XTextRange>::get();
182 0 : *pTypes++ = cppu::UnoType<beans::XPropertySet>::get();
183 0 : *pTypes++ = cppu::UnoType<beans::XMultiPropertySet>::get();
184 0 : *pTypes++ = cppu::UnoType<beans::XMultiPropertyStates>::get();
185 0 : *pTypes++ = cppu::UnoType<beans::XPropertyState>::get();
186 0 : *pTypes++ = cppu::UnoType<text::XTextRangeCompare>::get();
187 0 : *pTypes++ = cppu::UnoType<text::XTextContent>::get();
188 0 : *pTypes++ = cppu::UnoType<container::XEnumerationAccess>::get();
189 0 : *pTypes++ = cppu::UnoType<lang::XServiceInfo>::get();
190 0 : *pTypes++ = cppu::UnoType<lang::XTypeProvider>::get();
191 0 : *pTypes++ = cppu::UnoType<lang::XUnoTunnel>::get();
192 :
193 0 : return aTypeSequence;
194 : }
195 : };
196 : }
197 :
198 0 : uno::Sequence< uno::Type > SAL_CALL SvxUnoTextContent::getTypes()
199 : throw (uno::RuntimeException, std::exception)
200 : {
201 0 : return theSvxUnoTextContentTypes::get();
202 : }
203 :
204 0 : uno::Sequence< sal_Int8 > SAL_CALL SvxUnoTextContent::getImplementationId()
205 : throw (uno::RuntimeException, std::exception)
206 : {
207 0 : return css::uno::Sequence<sal_Int8>();
208 : }
209 :
210 : // text::XTextRange
211 :
212 0 : uno::Reference< text::XText > SAL_CALL SvxUnoTextContent::getText()
213 : throw(uno::RuntimeException, std::exception)
214 : {
215 0 : return mxParentText;
216 : }
217 :
218 : // text::XTextContent
219 1 : void SAL_CALL SvxUnoTextContent::attach( const uno::Reference< text::XTextRange >& )
220 : throw(lang::IllegalArgumentException, uno::RuntimeException, std::exception)
221 : {
222 1 : }
223 :
224 1 : uno::Reference< text::XTextRange > SAL_CALL SvxUnoTextContent::getAnchor() throw( uno::RuntimeException, std::exception )
225 : {
226 1 : return uno::Reference< text::XTextRange >::query( mxParentText );
227 : }
228 :
229 : // XComponent
230 :
231 1 : void SAL_CALL SvxUnoTextContent::dispose()
232 : throw(uno::RuntimeException, std::exception)
233 : {
234 1 : SolarMutexGuard aGuard;
235 :
236 1 : if( mbDisposing )
237 1 : return; // catched a recursion
238 :
239 1 : mbDisposing = true;
240 :
241 2 : lang::EventObject aEvt;
242 1 : aEvt.Source = *static_cast<OWeakAggObject*>(this);
243 1 : maDisposeListeners.disposeAndClear(aEvt);
244 :
245 1 : if( mxParentText.is() )
246 2 : mxParentText->removeTextContent( this );
247 : }
248 :
249 2 : void SAL_CALL SvxUnoTextContent::addEventListener( const uno::Reference< lang::XEventListener >& xListener )
250 : throw(uno::RuntimeException, std::exception)
251 : {
252 2 : maDisposeListeners.addInterface(xListener);
253 2 : }
254 :
255 1 : void SAL_CALL SvxUnoTextContent::removeEventListener( const uno::Reference< lang::XEventListener >& aListener )
256 : throw(uno::RuntimeException, std::exception)
257 : {
258 1 : maDisposeListeners.removeInterface(aListener);
259 1 : }
260 :
261 : // XEnumerationAccess
262 :
263 2700 : uno::Reference< container::XEnumeration > SAL_CALL SvxUnoTextContent::createEnumeration( )
264 : throw(uno::RuntimeException, std::exception)
265 : {
266 2700 : SolarMutexGuard aGuard;
267 :
268 2700 : return new SvxUnoTextRangeEnumeration( mrParentText, mnParagraph );
269 : }
270 :
271 : // XElementAccess ( container::XEnumerationAccess )
272 :
273 1 : uno::Type SAL_CALL SvxUnoTextContent::getElementType()
274 : throw(uno::RuntimeException, std::exception)
275 : {
276 1 : return cppu::UnoType<text::XTextRange>::get();
277 : }
278 :
279 1 : sal_Bool SAL_CALL SvxUnoTextContent::hasElements()
280 : throw(uno::RuntimeException, std::exception)
281 : {
282 1 : SolarMutexGuard aGuard;
283 :
284 1 : SvxTextForwarder* pForwarder = GetEditSource() ? GetEditSource()->GetTextForwarder() : NULL;
285 1 : if( pForwarder )
286 : {
287 1 : std::vector<sal_Int32> aPortions;
288 1 : pForwarder->GetPortions( mnParagraph, aPortions );
289 1 : return !aPortions.empty();
290 : }
291 : else
292 : {
293 0 : return 0;
294 1 : }
295 : }
296 :
297 : // XPropertySet
298 :
299 156 : void SAL_CALL SvxUnoTextContent::setPropertyValue( const OUString& aPropertyName, const uno::Any& aValue )
300 : throw(beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException, std::exception)
301 : {
302 156 : _setPropertyValue( aPropertyName, aValue, mnParagraph );
303 153 : }
304 :
305 8331 : uno::Any SAL_CALL SvxUnoTextContent::getPropertyValue( const OUString& PropertyName )
306 : throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception)
307 : {
308 8331 : return _getPropertyValue( PropertyName, mnParagraph );
309 : }
310 :
311 : // XMultiPropertySet
312 0 : void SAL_CALL SvxUnoTextContent::setPropertyValues( const uno::Sequence< OUString >& aPropertyNames, const uno::Sequence< uno::Any >& aValues ) throw (beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException, std::exception)
313 : {
314 0 : _setPropertyValues( aPropertyNames, aValues, mnParagraph );
315 0 : }
316 :
317 373 : uno::Sequence< uno::Any > SAL_CALL SvxUnoTextContent::getPropertyValues( const uno::Sequence< OUString >& aPropertyNames ) throw (uno::RuntimeException, std::exception)
318 : {
319 373 : return _getPropertyValues( aPropertyNames, mnParagraph );
320 : }
321 :
322 : /*// XTolerantMultiPropertySet
323 : uno::Sequence< beans::SetPropertyTolerantFailed > SAL_CALL SvxUnoTextContent::setPropertyValuesTolerant( const uno::Sequence< OUString >& aPropertyNames, const uno::Sequence< uno::Any >& aValues ) throw (lang::IllegalArgumentException, uno::RuntimeException)
324 : {
325 : return _setPropertyValuesTolerant(aPropertyNames, aValues, mnParagraph);
326 : }
327 :
328 : uno::Sequence< beans::GetPropertyTolerantResult > SAL_CALL SvxUnoTextContent::getPropertyValuesTolerant( const uno::Sequence< OUString >& aPropertyNames ) throw (uno::RuntimeException)
329 : {
330 : return _getPropertyValuesTolerant(aPropertyNames, mnParagraph);
331 : }
332 :
333 : uno::Sequence< beans::GetDirectPropertyTolerantResult > SAL_CALL SvxUnoTextContent::getDirectPropertyValuesTolerant( const uno::Sequence< OUString >& aPropertyNames )
334 : throw (uno::RuntimeException)
335 : {
336 : return _getDirectPropertyValuesTolerant(aPropertyNames, mnParagraph);
337 : }*/
338 :
339 : // beans::XPropertyState
340 1521 : beans::PropertyState SAL_CALL SvxUnoTextContent::getPropertyState( const OUString& PropertyName )
341 : throw(beans::UnknownPropertyException, uno::RuntimeException, std::exception)
342 : {
343 1521 : return _getPropertyState( PropertyName, mnParagraph );
344 : }
345 :
346 478 : uno::Sequence< beans::PropertyState > SAL_CALL SvxUnoTextContent::getPropertyStates( const uno::Sequence< OUString >& aPropertyName )
347 : throw(beans::UnknownPropertyException, uno::RuntimeException, std::exception)
348 : {
349 478 : return _getPropertyStates( aPropertyName, mnParagraph );
350 : }
351 :
352 1 : void SAL_CALL SvxUnoTextContent::setPropertyToDefault( const OUString& PropertyName )
353 : throw(beans::UnknownPropertyException, uno::RuntimeException, std::exception)
354 : {
355 1 : _setPropertyToDefault( PropertyName, mnParagraph );
356 1 : }
357 :
358 : // lang::XServiceInfo
359 :
360 0 : OUString SAL_CALL SvxUnoTextContent::getImplementationName()
361 : throw(uno::RuntimeException, std::exception)
362 : {
363 0 : return OUString("SvxUnoTextContent");
364 : }
365 :
366 1503 : uno::Sequence< OUString > SAL_CALL SvxUnoTextContent::getSupportedServiceNames()
367 : throw(uno::RuntimeException, std::exception)
368 : {
369 1503 : uno::Sequence< OUString > aSeq( SvxUnoTextRangeBase::getSupportedServiceNames() );
370 : comphelper::ServiceInfoHelper::addToSequence( aSeq, 5, "com.sun.star.style.ParagraphProperties",
371 : "com.sun.star.style.ParagraphPropertiesComplex",
372 : "com.sun.star.style.ParagraphPropertiesAsian",
373 : "com.sun.star.text.TextContent",
374 1503 : "com.sun.star.text.Paragraph");
375 1503 : return aSeq;
376 : }
377 :
378 :
379 : // class SvxUnoTextRangeEnumeration
380 :
381 :
382 2700 : SvxUnoTextRangeEnumeration::SvxUnoTextRangeEnumeration( const SvxUnoTextBase& rText, sal_Int32 nPara ) throw()
383 : : mxParentText( const_cast<SvxUnoTextBase*>(&rText) ),
384 : mrParentText( rText ),
385 : mnParagraph( nPara ),
386 2700 : mnNextPortion( 0 )
387 : {
388 2700 : mpEditSource = rText.GetEditSource() ? rText.GetEditSource()->Clone() : NULL;
389 :
390 2700 : if( mpEditSource && mpEditSource->GetTextForwarder() )
391 : {
392 2700 : mpPortions = new std::vector<sal_Int32>;
393 2700 : mpEditSource->GetTextForwarder()->GetPortions( nPara, *mpPortions );
394 : }
395 : else
396 : {
397 0 : mpPortions = NULL;
398 : }
399 2700 : }
400 :
401 8100 : SvxUnoTextRangeEnumeration::~SvxUnoTextRangeEnumeration() throw()
402 : {
403 2700 : delete mpEditSource;
404 2700 : delete mpPortions;
405 5400 : }
406 :
407 : // container::XEnumeration
408 :
409 6156 : sal_Bool SAL_CALL SvxUnoTextRangeEnumeration::hasMoreElements()
410 : throw(uno::RuntimeException, std::exception)
411 : {
412 6156 : SolarMutexGuard aGuard;
413 :
414 6156 : return mpPortions && mnNextPortion < mpPortions->size();
415 : }
416 :
417 3488 : uno::Any SAL_CALL SvxUnoTextRangeEnumeration::nextElement()
418 : throw(container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException, std::exception)
419 : {
420 3488 : SolarMutexGuard aGuard;
421 :
422 3488 : if( mpPortions == NULL || mnNextPortion >= mpPortions->size() )
423 1 : throw container::NoSuchElementException();
424 :
425 3487 : sal_uInt16 nStartPos = 0;
426 3487 : if (mnNextPortion > 0)
427 788 : nStartPos = mpPortions->at(mnNextPortion-1);
428 3487 : sal_uInt16 nEndPos = mpPortions->at(mnNextPortion);
429 3487 : ESelection aSel( mnParagraph, nStartPos, mnParagraph, nEndPos );
430 :
431 6974 : uno::Reference< text::XTextRange > xRange;
432 :
433 3487 : const SvxUnoTextRangeBaseList& rRanges( mpEditSource->getRanges() );
434 :
435 3487 : SvxUnoTextRange* pRange = 0;
436 :
437 3487 : SvxUnoTextRangeBaseList::const_iterator aIter;
438 6419 : for( aIter = rRanges.begin(); (aIter != rRanges.end()) && (pRange == 0); ++aIter )
439 : {
440 2932 : SvxUnoTextRange* pIterRange = dynamic_cast< SvxUnoTextRange* >( (*aIter ) );
441 2932 : if( pIterRange && pIterRange->mbPortion && (aSel.IsEqual( pIterRange->maSelection ) ) )
442 0 : pRange = pIterRange;
443 : }
444 :
445 3487 : if( pRange == 0 )
446 : {
447 3487 : pRange = new SvxUnoTextRange( mrParentText, true );
448 3487 : pRange->SetSelection(aSel);
449 : }
450 :
451 3487 : xRange = pRange;
452 :
453 3487 : mnNextPortion++;
454 :
455 6975 : return uno::makeAny( xRange );
456 : }
457 :
458 9308 : SvxUnoTextCursor::SvxUnoTextCursor( const SvxUnoTextBase& rText ) throw()
459 : : SvxUnoTextRangeBase(rText),
460 9308 : mxParentText( const_cast<SvxUnoTextBase*>(&rText) )
461 : {
462 9308 : }
463 :
464 2190 : SvxUnoTextCursor::SvxUnoTextCursor( const SvxUnoTextCursor& rCursor ) throw()
465 : : SvxUnoTextRangeBase(rCursor)
466 : , text::XTextCursor()
467 : , lang::XTypeProvider()
468 : , cppu::OWeakAggObject()
469 2190 : , mxParentText(rCursor.mxParentText)
470 : {
471 2190 : }
472 :
473 19226 : SvxUnoTextCursor::~SvxUnoTextCursor() throw()
474 : {
475 19226 : }
476 :
477 : // Comment out automatically - [getIdlClass(es) or queryInterface]
478 : // Please use the XTypeProvider!
479 : //sal_Bool SvxUnoTextCursor::queryInterface( uno::Uik aUIK, Reference< uno::XInterface > & xRef)
480 41618 : uno::Any SAL_CALL SvxUnoTextCursor::queryAggregation( const uno::Type & rType )
481 : throw(uno::RuntimeException, std::exception)
482 : {
483 41618 : if( rType == cppu::UnoType<text::XTextRange>::get())
484 5772 : return uno::makeAny(uno::Reference< text::XTextRange >(static_cast<SvxUnoTextRangeBase *>(this)));
485 35846 : else QUERYINT( text::XTextCursor );
486 35845 : else QUERYINT( beans::XMultiPropertyStates );
487 35845 : else QUERYINT( beans::XPropertySet );
488 26109 : else QUERYINT( beans::XMultiPropertySet );
489 19393 : else QUERYINT( beans::XPropertyState );
490 19390 : else QUERYINT( text::XTextRangeCompare );
491 19390 : else QUERYINT( lang::XServiceInfo );
492 19381 : else QUERYINT( lang::XTypeProvider );
493 19381 : else QUERYINT( lang::XUnoTunnel );
494 : else
495 4256 : return OWeakAggObject::queryAggregation( rType );
496 : }
497 :
498 41618 : uno::Any SAL_CALL SvxUnoTextCursor::queryInterface( const uno::Type & rType )
499 : throw(uno::RuntimeException, std::exception)
500 : {
501 41618 : return OWeakAggObject::queryInterface(rType);
502 : }
503 :
504 107436 : void SAL_CALL SvxUnoTextCursor::acquire() throw ( )
505 : {
506 107436 : OWeakAggObject::acquire();
507 107436 : }
508 :
509 107436 : void SAL_CALL SvxUnoTextCursor::release() throw ( )
510 : {
511 107436 : OWeakAggObject::release();
512 107436 : }
513 :
514 : namespace
515 : {
516 : struct theSvxUnoTextCursorTypes :
517 : public rtl::StaticWithInit<uno::Sequence<uno::Type>, theSvxUnoTextCursorTypes>
518 : {
519 0 : uno::Sequence<uno::Type> operator () ()
520 : {
521 0 : uno::Sequence< uno::Type > aTypeSequence;
522 :
523 0 : aTypeSequence.realloc( 10 ); // !DANGER! keep this updated
524 0 : uno::Type* pTypes = aTypeSequence.getArray();
525 :
526 0 : *pTypes++ = cppu::UnoType<text::XTextRange>::get();
527 0 : *pTypes++ = cppu::UnoType<text::XTextCursor>::get();
528 0 : *pTypes++ = cppu::UnoType<beans::XPropertySet>::get();
529 0 : *pTypes++ = cppu::UnoType<beans::XMultiPropertySet>::get();
530 0 : *pTypes++ = cppu::UnoType<beans::XMultiPropertyStates>::get();
531 0 : *pTypes++ = cppu::UnoType<beans::XPropertyState>::get();
532 0 : *pTypes++ = cppu::UnoType<text::XTextRangeCompare>::get();
533 0 : *pTypes++ = cppu::UnoType<lang::XServiceInfo>::get();
534 0 : *pTypes++ = cppu::UnoType<lang::XTypeProvider>::get();
535 0 : *pTypes++ = cppu::UnoType<lang::XUnoTunnel>::get();
536 :
537 0 : return aTypeSequence;
538 : }
539 : };
540 : }
541 :
542 : // XTypeProvider
543 0 : uno::Sequence< uno::Type > SAL_CALL SvxUnoTextCursor::getTypes()
544 : throw(uno::RuntimeException, std::exception)
545 : {
546 0 : return theSvxUnoTextCursorTypes::get();
547 : }
548 :
549 0 : uno::Sequence< sal_Int8 > SAL_CALL SvxUnoTextCursor::getImplementationId()
550 : throw (uno::RuntimeException, std::exception)
551 : {
552 0 : return css::uno::Sequence<sal_Int8>();
553 : }
554 :
555 : // text::XTextCursor
556 11 : void SAL_CALL SvxUnoTextCursor::collapseToStart()
557 : throw(uno::RuntimeException, std::exception)
558 : {
559 11 : SolarMutexGuard aGuard;
560 11 : CollapseToStart();
561 11 : }
562 :
563 3 : void SAL_CALL SvxUnoTextCursor::collapseToEnd()
564 : throw(uno::RuntimeException, std::exception)
565 : {
566 3 : SolarMutexGuard aGuard;
567 3 : CollapseToEnd();
568 3 : }
569 :
570 146 : sal_Bool SAL_CALL SvxUnoTextCursor::isCollapsed()
571 : throw(uno::RuntimeException, std::exception)
572 : {
573 146 : SolarMutexGuard aGuard;
574 146 : return IsCollapsed();
575 : }
576 :
577 3047 : sal_Bool SAL_CALL SvxUnoTextCursor::goLeft( sal_Int16 nCount, sal_Bool bExpand )
578 : throw(uno::RuntimeException, std::exception)
579 : {
580 3047 : SolarMutexGuard aGuard;
581 3047 : return GoLeft( nCount, bExpand );
582 : }
583 :
584 18 : sal_Bool SAL_CALL SvxUnoTextCursor::goRight( sal_Int16 nCount, sal_Bool bExpand )
585 : throw(uno::RuntimeException, std::exception)
586 : {
587 18 : SolarMutexGuard aGuard;
588 18 : return GoRight( nCount, bExpand );
589 : }
590 :
591 104 : void SAL_CALL SvxUnoTextCursor::gotoStart( sal_Bool bExpand )
592 : throw(uno::RuntimeException, std::exception)
593 : {
594 104 : SolarMutexGuard aGuard;
595 104 : GotoStart( bExpand );
596 104 : }
597 :
598 6289 : void SAL_CALL SvxUnoTextCursor::gotoEnd( sal_Bool bExpand )
599 : throw(uno::RuntimeException, std::exception)
600 : {
601 6289 : SolarMutexGuard aGuard;
602 6289 : GotoEnd( bExpand );
603 6289 : }
604 :
605 7113 : void SAL_CALL SvxUnoTextCursor::gotoRange( const uno::Reference< text::XTextRange >& xRange, sal_Bool bExpand )
606 : throw(uno::RuntimeException, std::exception)
607 : {
608 7113 : if( !xRange.is() )
609 7113 : return;
610 :
611 7113 : SvxUnoTextRangeBase* pRange = SvxUnoTextRangeBase::getImplementation( xRange );
612 :
613 7113 : if( pRange )
614 : {
615 7113 : ESelection aNewSel = pRange->GetSelection();
616 :
617 7113 : if( bExpand )
618 : {
619 4924 : const ESelection& rOldSel = GetSelection();
620 4924 : aNewSel.nStartPara = rOldSel.nStartPara;
621 4924 : aNewSel.nStartPos = rOldSel.nStartPos;
622 : }
623 :
624 7113 : SetSelection( aNewSel );
625 : }
626 : }
627 :
628 : // text::XTextRange (rest in SvxTextRange)
629 9024 : uno::Reference< text::XText > SAL_CALL SvxUnoTextCursor::getText() throw( uno::RuntimeException, std::exception )
630 : {
631 9024 : return mxParentText;
632 : }
633 :
634 7663 : uno::Reference< text::XTextRange > SAL_CALL SvxUnoTextCursor::getStart()
635 : throw(uno::RuntimeException, std::exception)
636 : {
637 7663 : return SvxUnoTextRangeBase::getStart();
638 : }
639 :
640 0 : uno::Reference< text::XTextRange > SAL_CALL SvxUnoTextCursor::getEnd()
641 : throw(uno::RuntimeException, std::exception)
642 : {
643 0 : return SvxUnoTextRangeBase::getEnd();
644 : }
645 :
646 865 : OUString SAL_CALL SvxUnoTextCursor::getString() throw( uno::RuntimeException, std::exception )
647 : {
648 865 : return SvxUnoTextRangeBase::getString();
649 : }
650 :
651 11778 : void SAL_CALL SvxUnoTextCursor::setString( const OUString& aString ) throw(uno::RuntimeException, std::exception)
652 : {
653 11778 : SvxUnoTextRangeBase::setString(aString);
654 11778 : }
655 : // lang::XServiceInfo
656 0 : OUString SAL_CALL SvxUnoTextCursor::getImplementationName() throw(uno::RuntimeException, std::exception)
657 : {
658 0 : return OUString("SvxUnoTextCursor");
659 : }
660 :
661 15 : sal_Bool SAL_CALL SvxUnoTextCursor::supportsService( const OUString& ServiceName ) throw(uno::RuntimeException, std::exception)
662 : {
663 15 : return cppu::supportsService( this, ServiceName );
664 : }
665 :
666 15 : uno::Sequence< OUString > SAL_CALL SvxUnoTextCursor::getSupportedServiceNames() throw(uno::RuntimeException, std::exception)
667 : {
668 15 : uno::Sequence< OUString > aSeq( SvxUnoTextRangeBase::getSupportedServiceNames() );
669 : comphelper::ServiceInfoHelper::addToSequence( aSeq, 4,"com.sun.star.style.ParagraphProperties",
670 : "com.sun.star.style.ParagraphPropertiesComplex",
671 : "com.sun.star.style.ParagraphPropertiesAsian",
672 15 : "com.sun.star.text.TextCursor");
673 15 : return aSeq;
674 : }
675 :
676 :
677 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|