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 == ::getCppuType((const uno::Reference< xint >*)0) ) \
37 : return uno::makeAny(uno::Reference< xint >(this))
38 :
39 :
40 : // SvxUnoTextContentEnumeration
41 :
42 :
43 2806 : SvxUnoTextContentEnumeration::SvxUnoTextContentEnumeration( const SvxUnoTextBase& _rText ) throw()
44 2806 : : mrText( _rText )
45 : {
46 2806 : mxParentText = const_cast<SvxUnoTextBase*>(&_rText);
47 2806 : if( mrText.GetEditSource() )
48 2806 : mpEditSource = mrText.GetEditSource()->Clone();
49 : else
50 0 : mpEditSource = NULL;
51 2806 : mnNextParagraph = 0;
52 2806 : }
53 :
54 8418 : SvxUnoTextContentEnumeration::~SvxUnoTextContentEnumeration() throw()
55 : {
56 2806 : delete mpEditSource;
57 5612 : }
58 :
59 : // container::XEnumeration
60 8346 : sal_Bool SAL_CALL SvxUnoTextContentEnumeration::hasMoreElements(void)
61 : throw( uno::RuntimeException, std::exception )
62 : {
63 8346 : SolarMutexGuard aGuard;
64 8346 : if( mpEditSource && mpEditSource->GetTextForwarder() )
65 8346 : return mnNextParagraph < mpEditSource->GetTextForwarder()->GetParagraphCount();
66 : else
67 0 : return sal_False;
68 : }
69 :
70 3070 : uno::Any SvxUnoTextContentEnumeration::nextElement(void) throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException, std::exception )
71 : {
72 3070 : SolarMutexGuard aGuard;
73 :
74 3070 : if(!hasMoreElements())
75 6 : throw container::NoSuchElementException();
76 :
77 3064 : SvxUnoTextContent* pContent = 0;
78 :
79 3064 : const SvxUnoTextRangeBaseList& rRanges( mpEditSource->getRanges() );
80 3064 : SvxUnoTextRangeBaseList::const_iterator aIter;
81 4508 : for( aIter = rRanges.begin(); (aIter != rRanges.end()) && (pContent == 0); ++aIter )
82 : {
83 1444 : SvxUnoTextContent* pIterContent = dynamic_cast< SvxUnoTextContent* >( (*aIter ) );
84 1444 : if( pIterContent && (pIterContent->mnParagraph == mnNextParagraph) )
85 0 : pContent = pIterContent;
86 : }
87 :
88 3064 : if( pContent == 0 )
89 3064 : pContent = new SvxUnoTextContent( mrText, mnNextParagraph );
90 :
91 3064 : mnNextParagraph++;
92 :
93 6128 : uno::Reference< text::XTextContent > xRef( pContent );
94 6134 : return uno::makeAny( xRef );
95 : }
96 :
97 :
98 : // class SvxUnoTextContent
99 :
100 :
101 3064 : SvxUnoTextContent::SvxUnoTextContent( const SvxUnoTextBase& rText, sal_Int32 nPara ) throw()
102 : : SvxUnoTextRangeBase(rText)
103 : , mnParagraph(nPara)
104 : , mrParentText(rText)
105 : , maDisposeListeners(maDisposeContainerMutex)
106 3064 : , mbDisposing( false )
107 : {
108 3064 : mxParentText = const_cast<SvxUnoTextBase*>(&rText);
109 3064 : if( GetEditSource() && GetEditSource()->GetTextForwarder() )
110 3064 : SetSelection( ESelection( mnParagraph,0, mnParagraph, GetEditSource()->GetTextForwarder()->GetTextLen( mnParagraph ) ) );
111 3064 : }
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 6128 : SvxUnoTextContent::~SvxUnoTextContent() throw()
129 : {
130 6128 : }
131 :
132 : // uno::XInterface
133 18676 : uno::Any SAL_CALL SvxUnoTextContent::queryAggregation( const uno::Type & rType ) throw( uno::RuntimeException, std::exception )
134 : {
135 18676 : QUERYINT( text::XTextRange );
136 18602 : else QUERYINT( beans::XMultiPropertyStates );
137 18602 : else QUERYINT( beans::XPropertySet );
138 13430 : else QUERYINT( beans::XMultiPropertySet );
139 10982 : else QUERYINT( beans::XPropertyState );
140 9732 : else QUERYINT( text::XTextContent );
141 7740 : else QUERYINT( text::XTextRangeCompare );
142 7740 : else QUERYINT( lang::XComponent );
143 7740 : else QUERYINT( container::XEnumerationAccess );
144 4846 : else QUERYINT( container::XElementAccess );
145 4844 : else QUERYINT( lang::XServiceInfo );
146 2918 : else QUERYINT( lang::XTypeProvider );
147 2918 : else QUERYINT( lang::XUnoTunnel );
148 : else
149 2918 : return OWeakAggObject::queryAggregation( rType );
150 : }
151 :
152 18676 : uno::Any SAL_CALL SvxUnoTextContent::queryInterface( const uno::Type & rType ) throw( uno::RuntimeException, std::exception )
153 : {
154 18676 : return OWeakAggObject::queryInterface(rType);
155 : }
156 :
157 45006 : void SAL_CALL SvxUnoTextContent::acquire() throw( )
158 : {
159 45006 : OWeakAggObject::acquire();
160 45006 : }
161 :
162 45006 : void SAL_CALL SvxUnoTextContent::release() throw( )
163 : {
164 45006 : OWeakAggObject::release();
165 45006 : }
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 2 : void SAL_CALL SvxUnoTextContent::attach( const uno::Reference< text::XTextRange >& )
220 : throw(lang::IllegalArgumentException, uno::RuntimeException, std::exception)
221 : {
222 2 : }
223 :
224 2 : uno::Reference< text::XTextRange > SAL_CALL SvxUnoTextContent::getAnchor() throw( uno::RuntimeException, std::exception )
225 : {
226 2 : return uno::Reference< text::XTextRange >::query( mxParentText );
227 : }
228 :
229 : // XComponent
230 :
231 2 : void SAL_CALL SvxUnoTextContent::dispose()
232 : throw(uno::RuntimeException, std::exception)
233 : {
234 2 : SolarMutexGuard aGuard;
235 :
236 2 : if( mbDisposing )
237 2 : return; // catched a recursion
238 :
239 2 : mbDisposing = true;
240 :
241 4 : lang::EventObject aEvt;
242 2 : aEvt.Source = *(OWeakAggObject*) this;
243 2 : maDisposeListeners.disposeAndClear(aEvt);
244 :
245 2 : if( mxParentText.is() )
246 4 : mxParentText->removeTextContent( this );
247 : }
248 :
249 4 : void SAL_CALL SvxUnoTextContent::addEventListener( const uno::Reference< lang::XEventListener >& xListener )
250 : throw(uno::RuntimeException, std::exception)
251 : {
252 4 : maDisposeListeners.addInterface(xListener);
253 4 : }
254 :
255 2 : void SAL_CALL SvxUnoTextContent::removeEventListener( const uno::Reference< lang::XEventListener >& aListener )
256 : throw(uno::RuntimeException, std::exception)
257 : {
258 2 : maDisposeListeners.removeInterface(aListener);
259 2 : }
260 :
261 : // XEnumerationAccess
262 :
263 2894 : uno::Reference< container::XEnumeration > SAL_CALL SvxUnoTextContent::createEnumeration( )
264 : throw(uno::RuntimeException, std::exception)
265 : {
266 2894 : SolarMutexGuard aGuard;
267 :
268 2894 : return new SvxUnoTextRangeEnumeration( mrParentText, mnParagraph );
269 : }
270 :
271 : // XElementAccess ( container::XEnumerationAccess )
272 :
273 2 : uno::Type SAL_CALL SvxUnoTextContent::getElementType()
274 : throw(uno::RuntimeException, std::exception)
275 : {
276 2 : return cppu::UnoType<text::XTextRange>::get();
277 : }
278 :
279 2 : sal_Bool SAL_CALL SvxUnoTextContent::hasElements()
280 : throw(uno::RuntimeException, std::exception)
281 : {
282 2 : SolarMutexGuard aGuard;
283 :
284 2 : SvxTextForwarder* pForwarder = GetEditSource() ? GetEditSource()->GetTextForwarder() : NULL;
285 2 : if( pForwarder )
286 : {
287 2 : std::vector<sal_Int32> aPortions;
288 2 : pForwarder->GetPortions( mnParagraph, aPortions );
289 2 : return !aPortions.empty();
290 : }
291 : else
292 : {
293 0 : return 0;
294 2 : }
295 : }
296 :
297 : // XPropertySet
298 :
299 308 : 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 308 : _setPropertyValue( aPropertyName, aValue, mnParagraph );
303 302 : }
304 :
305 3734 : uno::Any SAL_CALL SvxUnoTextContent::getPropertyValue( const OUString& PropertyName )
306 : throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception)
307 : {
308 3734 : 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 310 : uno::Sequence< uno::Any > SAL_CALL SvxUnoTextContent::getPropertyValues( const uno::Sequence< OUString >& aPropertyNames ) throw (uno::RuntimeException, std::exception)
318 : {
319 310 : 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 892 : beans::PropertyState SAL_CALL SvxUnoTextContent::getPropertyState( const OUString& PropertyName )
341 : throw(beans::UnknownPropertyException, uno::RuntimeException, std::exception)
342 : {
343 892 : return _getPropertyState( PropertyName, mnParagraph );
344 : }
345 :
346 360 : uno::Sequence< beans::PropertyState > SAL_CALL SvxUnoTextContent::getPropertyStates( const uno::Sequence< OUString >& aPropertyName )
347 : throw(beans::UnknownPropertyException, uno::RuntimeException, std::exception)
348 : {
349 360 : return _getPropertyStates( aPropertyName, mnParagraph );
350 : }
351 :
352 2 : void SAL_CALL SvxUnoTextContent::setPropertyToDefault( const OUString& PropertyName )
353 : throw(beans::UnknownPropertyException, uno::RuntimeException, std::exception)
354 : {
355 2 : _setPropertyToDefault( PropertyName, mnParagraph );
356 2 : }
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 1932 : uno::Sequence< OUString > SAL_CALL SvxUnoTextContent::getSupportedServiceNames()
367 : throw(uno::RuntimeException, std::exception)
368 : {
369 1932 : 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 1932 : "com.sun.star.text.Paragraph");
375 1932 : return aSeq;
376 : }
377 :
378 :
379 : // class SvxUnoTextRangeEnumeration
380 :
381 :
382 2894 : SvxUnoTextRangeEnumeration::SvxUnoTextRangeEnumeration( const SvxUnoTextBase& rText, sal_Int32 nPara ) throw()
383 : : mxParentText( const_cast<SvxUnoTextBase*>(&rText) ),
384 : mrParentText( rText ),
385 : mnParagraph( nPara ),
386 2894 : mnNextPortion( 0 )
387 : {
388 2894 : mpEditSource = rText.GetEditSource() ? rText.GetEditSource()->Clone() : NULL;
389 :
390 2894 : if( mpEditSource && mpEditSource->GetTextForwarder() )
391 : {
392 2894 : mpPortions = new std::vector<sal_Int32>;
393 2894 : mpEditSource->GetTextForwarder()->GetPortions( nPara, *mpPortions );
394 : }
395 : else
396 : {
397 0 : mpPortions = NULL;
398 : }
399 2894 : }
400 :
401 8682 : SvxUnoTextRangeEnumeration::~SvxUnoTextRangeEnumeration() throw()
402 : {
403 2894 : delete mpEditSource;
404 2894 : delete mpPortions;
405 5788 : }
406 :
407 : // container::XEnumeration
408 :
409 6670 : sal_Bool SAL_CALL SvxUnoTextRangeEnumeration::hasMoreElements()
410 : throw(uno::RuntimeException, std::exception)
411 : {
412 6670 : SolarMutexGuard aGuard;
413 :
414 6670 : return mpPortions && mnNextPortion < mpPortions->size();
415 : }
416 :
417 3942 : uno::Any SAL_CALL SvxUnoTextRangeEnumeration::nextElement()
418 : throw(container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException, std::exception)
419 : {
420 3942 : SolarMutexGuard aGuard;
421 :
422 3942 : if( mpPortions == NULL || mnNextPortion >= mpPortions->size() )
423 2 : throw container::NoSuchElementException();
424 :
425 3940 : sal_uInt16 nStartPos = 0;
426 3940 : if (mnNextPortion > 0)
427 1048 : nStartPos = mpPortions->at(mnNextPortion-1);
428 3940 : sal_uInt16 nEndPos = mpPortions->at(mnNextPortion);
429 3940 : ESelection aSel( mnParagraph, nStartPos, mnParagraph, nEndPos );
430 :
431 7880 : uno::Reference< text::XTextRange > xRange;
432 :
433 3940 : const SvxUnoTextRangeBaseList& rRanges( mpEditSource->getRanges() );
434 :
435 3940 : SvxUnoTextRange* pRange = 0;
436 :
437 3940 : SvxUnoTextRangeBaseList::const_iterator aIter;
438 6248 : for( aIter = rRanges.begin(); (aIter != rRanges.end()) && (pRange == 0); ++aIter )
439 : {
440 2308 : SvxUnoTextRange* pIterRange = dynamic_cast< SvxUnoTextRange* >( (*aIter ) );
441 2308 : if( pIterRange && pIterRange->mbPortion && (aSel.IsEqual( pIterRange->maSelection ) ) )
442 0 : pRange = pIterRange;
443 : }
444 :
445 3940 : if( pRange == 0 )
446 : {
447 3940 : pRange = new SvxUnoTextRange( mrParentText, true );
448 3940 : pRange->SetSelection(aSel);
449 : }
450 :
451 3940 : xRange = pRange;
452 :
453 3940 : mnNextPortion++;
454 :
455 7882 : return uno::makeAny( xRange );
456 : }
457 :
458 12391 : SvxUnoTextCursor::SvxUnoTextCursor( const SvxUnoTextBase& rText ) throw()
459 : : SvxUnoTextRangeBase(rText),
460 12391 : mxParentText( const_cast<SvxUnoTextBase*>(&rText) )
461 : {
462 12391 : }
463 :
464 3576 : SvxUnoTextCursor::SvxUnoTextCursor( const SvxUnoTextCursor& rCursor ) throw()
465 : : SvxUnoTextRangeBase(rCursor)
466 : , text::XTextCursor()
467 : , lang::XTypeProvider()
468 : , cppu::OWeakAggObject()
469 3576 : , mxParentText(rCursor.mxParentText)
470 : {
471 3576 : }
472 :
473 25914 : SvxUnoTextCursor::~SvxUnoTextCursor() throw()
474 : {
475 25914 : }
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 62784 : uno::Any SAL_CALL SvxUnoTextCursor::queryAggregation( const uno::Type & rType )
481 : throw(uno::RuntimeException, std::exception)
482 : {
483 62784 : if( rType == cppu::UnoType<text::XTextRange>::get())
484 6633 : return uno::makeAny(uno::Reference< text::XTextRange >((text::XText*)(this)));
485 56151 : else QUERYINT( text::XTextCursor );
486 56149 : else QUERYINT( beans::XMultiPropertyStates );
487 56149 : else QUERYINT( beans::XPropertySet );
488 40745 : else QUERYINT( beans::XMultiPropertySet );
489 29709 : else QUERYINT( beans::XPropertyState );
490 29703 : else QUERYINT( text::XTextRangeCompare );
491 29703 : else QUERYINT( lang::XServiceInfo );
492 29685 : else QUERYINT( lang::XTypeProvider );
493 29685 : else QUERYINT( lang::XUnoTunnel );
494 : else
495 7176 : return OWeakAggObject::queryAggregation( rType );
496 : }
497 :
498 62784 : uno::Any SAL_CALL SvxUnoTextCursor::queryInterface( const uno::Type & rType )
499 : throw(uno::RuntimeException, std::exception)
500 : {
501 62784 : return OWeakAggObject::queryInterface(rType);
502 : }
503 :
504 166075 : void SAL_CALL SvxUnoTextCursor::acquire() throw ( )
505 : {
506 166075 : OWeakAggObject::acquire();
507 166075 : }
508 :
509 166075 : void SAL_CALL SvxUnoTextCursor::release() throw ( )
510 : {
511 166075 : OWeakAggObject::release();
512 166075 : }
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 10 : void SAL_CALL SvxUnoTextCursor::collapseToStart()
557 : throw(uno::RuntimeException, std::exception)
558 : {
559 10 : SolarMutexGuard aGuard;
560 10 : CollapseToStart();
561 10 : }
562 :
563 6 : void SAL_CALL SvxUnoTextCursor::collapseToEnd()
564 : throw(uno::RuntimeException, std::exception)
565 : {
566 6 : SolarMutexGuard aGuard;
567 6 : CollapseToEnd();
568 6 : }
569 :
570 244 : sal_Bool SAL_CALL SvxUnoTextCursor::isCollapsed()
571 : throw(uno::RuntimeException, std::exception)
572 : {
573 244 : SolarMutexGuard aGuard;
574 244 : return IsCollapsed();
575 : }
576 :
577 4764 : sal_Bool SAL_CALL SvxUnoTextCursor::goLeft( sal_Int16 nCount, sal_Bool bExpand )
578 : throw(uno::RuntimeException, std::exception)
579 : {
580 4764 : SolarMutexGuard aGuard;
581 4764 : return GoLeft( nCount, bExpand );
582 : }
583 :
584 24 : sal_Bool SAL_CALL SvxUnoTextCursor::goRight( sal_Int16 nCount, sal_Bool bExpand )
585 : throw(uno::RuntimeException, std::exception)
586 : {
587 24 : SolarMutexGuard aGuard;
588 24 : return GoRight( nCount, bExpand );
589 : }
590 :
591 142 : void SAL_CALL SvxUnoTextCursor::gotoStart( sal_Bool bExpand )
592 : throw(uno::RuntimeException, std::exception)
593 : {
594 142 : SolarMutexGuard aGuard;
595 142 : GotoStart( bExpand );
596 142 : }
597 :
598 7802 : void SAL_CALL SvxUnoTextCursor::gotoEnd( sal_Bool bExpand )
599 : throw(uno::RuntimeException, std::exception)
600 : {
601 7802 : SolarMutexGuard aGuard;
602 7802 : GotoEnd( bExpand );
603 7802 : }
604 :
605 11510 : void SAL_CALL SvxUnoTextCursor::gotoRange( const uno::Reference< text::XTextRange >& xRange, sal_Bool bExpand )
606 : throw(uno::RuntimeException, std::exception)
607 : {
608 11510 : if( !xRange.is() )
609 11510 : return;
610 :
611 11510 : SvxUnoTextRangeBase* pRange = SvxUnoTextRangeBase::getImplementation( xRange );
612 :
613 11510 : if( pRange )
614 : {
615 11510 : ESelection aNewSel = pRange->GetSelection();
616 :
617 11510 : if( bExpand )
618 : {
619 7830 : const ESelection& rOldSel = GetSelection();
620 7830 : aNewSel.nStartPara = rOldSel.nStartPara;
621 7830 : aNewSel.nStartPos = rOldSel.nStartPos;
622 : }
623 :
624 11510 : SetSelection( aNewSel );
625 : }
626 : }
627 :
628 : // text::XTextRange (rest in SvxTextRange)
629 13850 : uno::Reference< text::XText > SAL_CALL SvxUnoTextCursor::getText(void) throw( uno::RuntimeException, std::exception )
630 : {
631 13850 : return mxParentText;
632 : }
633 :
634 12094 : uno::Reference< text::XTextRange > SAL_CALL SvxUnoTextCursor::getStart()
635 : throw(uno::RuntimeException, std::exception)
636 : {
637 12094 : 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 1684 : OUString SAL_CALL SvxUnoTextCursor::getString() throw( uno::RuntimeException, std::exception )
647 : {
648 1684 : return SvxUnoTextRangeBase::getString();
649 : }
650 :
651 17662 : void SAL_CALL SvxUnoTextCursor::setString( const OUString& aString ) throw(uno::RuntimeException, std::exception)
652 : {
653 17662 : SvxUnoTextRangeBase::setString(aString);
654 17662 : }
655 : // lang::XServiceInfo
656 0 : OUString SAL_CALL SvxUnoTextCursor::getImplementationName() throw(uno::RuntimeException, std::exception)
657 : {
658 0 : return OUString("SvxUnoTextCursor");
659 : }
660 :
661 30 : sal_Bool SAL_CALL SvxUnoTextCursor::supportsService( const OUString& ServiceName ) throw(uno::RuntimeException, std::exception)
662 : {
663 30 : return cppu::supportsService( this, ServiceName );
664 : }
665 :
666 30 : uno::Sequence< OUString > SAL_CALL SvxUnoTextCursor::getSupportedServiceNames() throw(uno::RuntimeException, std::exception)
667 : {
668 30 : 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 30 : "com.sun.star.text.TextCursor");
673 30 : return aSeq;
674 669 : }
675 :
676 :
677 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|