Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : :
30 : : #include <algorithm>
31 : : #include <svl/style.hxx>
32 : : #include <com/sun/star/i18n/WordType.hpp>
33 : :
34 : : #include <svl/itemset.hxx>
35 : : #include <editeng/editeng.hxx>
36 : : #include <editeng/editdata.hxx>
37 : : #include <editeng/outliner.hxx>
38 : : #include <editeng/unoedhlp.hxx>
39 : : #include <svl/poolitem.hxx>
40 : : #include <vcl/wrkwin.hxx>
41 : : #include <editeng/eeitem.hxx>
42 : :
43 : : #include <editeng/unoforou.hxx>
44 : : #include <editeng/unofored.hxx>
45 : : #include <editeng/outlobj.hxx>
46 : :
47 : : using namespace ::com::sun::star;
48 : :
49 : : //------------------------------------------------------------------------
50 : :
51 : 23125 : SvxOutlinerForwarder::SvxOutlinerForwarder( Outliner& rOutl, sal_Bool bOutlText /* = sal_False */ ) :
52 : : rOutliner( rOutl ),
53 : : bOutlinerText( bOutlText ),
54 : : mpAttribsCache( NULL ),
55 : : mpParaAttribsCache( NULL ),
56 : 23125 : mnParaAttribsCache( 0 )
57 : : {
58 : 23125 : }
59 : :
60 : 23125 : SvxOutlinerForwarder::~SvxOutlinerForwarder()
61 : : {
62 [ + - ]: 23125 : flushCache();
63 [ - + ]: 46250 : }
64 : :
65 : 144864 : sal_uInt16 SvxOutlinerForwarder::GetParagraphCount() const
66 : : {
67 : 144864 : return (sal_uInt16)rOutliner.GetParagraphCount();
68 : : }
69 : :
70 : 332432 : sal_uInt16 SvxOutlinerForwarder::GetTextLen( sal_uInt16 nParagraph ) const
71 : : {
72 : 332432 : return rOutliner.GetEditEngine().GetTextLen( nParagraph );
73 : : }
74 : :
75 : 334 : String SvxOutlinerForwarder::GetText( const ESelection& rSel ) const
76 : : {
77 : : //! GetText (ESelection) should probably also be in the Outliner
78 : : // in the time beeing use as the hack for the EditEngine:
79 : 334 : EditEngine* pEditEngine = (EditEngine*)&rOutliner.GetEditEngine();
80 : 334 : return pEditEngine->GetText( rSel, LINEEND_LF );
81 : : }
82 : :
83 : 1350 : static SfxItemSet ImplOutlinerForwarderGetAttribs( const ESelection& rSel, sal_Bool bOnlyHardAttrib, EditEngine& rEditEngine )
84 : : {
85 [ + + ]: 1350 : if( rSel.nStartPara == rSel.nEndPara )
86 : : {
87 : 1050 : sal_uInt8 nFlags = 0;
88 : :
89 [ + - + - ]: 1050 : switch( bOnlyHardAttrib )
90 : : {
91 : : case EditEngineAttribs_All:
92 : 949 : nFlags = GETATTRIBS_ALL;
93 : 949 : break;
94 : : case EditEngineAttribs_HardAndPara:
95 : 0 : nFlags = GETATTRIBS_PARAATTRIBS|GETATTRIBS_CHARATTRIBS;
96 : 0 : break;
97 : : case EditEngineAttribs_OnlyHard:
98 : 101 : nFlags = GETATTRIBS_CHARATTRIBS;
99 : 101 : break;
100 : : default:
101 : : OSL_FAIL("unknown flags for SvxOutlinerForwarder::GetAttribs");
102 : : }
103 : 1050 : return rEditEngine.GetAttribs( rSel.nStartPara, rSel.nStartPos, rSel.nEndPos, nFlags );
104 : : }
105 : : else
106 : : {
107 : 1350 : return rEditEngine.GetAttribs( rSel, bOnlyHardAttrib );
108 : : }
109 : : }
110 : :
111 : 2385 : SfxItemSet SvxOutlinerForwarder::GetAttribs( const ESelection& rSel, sal_Bool bOnlyHardAttrib ) const
112 : : {
113 [ + + ][ + + ]: 2385 : if( mpAttribsCache && ( 0 == bOnlyHardAttrib ) )
114 : : {
115 : : // have we the correct set in cache?
116 [ + - ]: 1035 : if( ((SvxOutlinerForwarder*)this)->maAttribCacheSelection.IsEqual(rSel) )
117 : : {
118 : : // yes! just return the cache
119 [ + - ]: 1035 : return *mpAttribsCache;
120 : : }
121 : : else
122 : : {
123 : : // no, we need delete the old cache
124 [ # # ][ # # ]: 0 : delete mpAttribsCache;
125 : 0 : mpAttribsCache = NULL;
126 : : }
127 : : }
128 : :
129 : : //! Does it not exist on the Outliner?
130 : : //! and why is the GetAttribs on the EditEngine not a const?
131 : 1350 : EditEngine& rEditEngine = (EditEngine&)rOutliner.GetEditEngine();
132 : :
133 [ + - ]: 1350 : SfxItemSet aSet( ImplOutlinerForwarderGetAttribs( rSel, bOnlyHardAttrib, rEditEngine ) );
134 : :
135 [ + + ]: 1350 : if( 0 == bOnlyHardAttrib )
136 : : {
137 [ + - ][ + - ]: 1249 : mpAttribsCache = new SfxItemSet( aSet );
138 : 1249 : maAttribCacheSelection = rSel;
139 : : }
140 : :
141 [ + - ]: 1350 : SfxStyleSheet* pStyle = rEditEngine.GetStyleSheet( rSel.nStartPara );
142 [ + + ]: 1350 : if( pStyle )
143 [ + - ]: 1265 : aSet.SetParent( &(pStyle->GetItemSet() ) );
144 : :
145 [ + - ][ + - ]: 2385 : return aSet;
146 : : }
147 : :
148 : 2288 : SfxItemSet SvxOutlinerForwarder::GetParaAttribs( sal_uInt16 nPara ) const
149 : : {
150 [ + + ]: 2288 : if( mpParaAttribsCache )
151 : : {
152 : : // have we the correct set in cache?
153 [ + - ]: 997 : if( nPara == mnParaAttribsCache )
154 : : {
155 : : // yes! just return the cache
156 : 997 : return *mpParaAttribsCache;
157 : : }
158 : : else
159 : : {
160 : : // no, we need delete the old cache
161 [ # # ]: 0 : delete mpParaAttribsCache;
162 : 0 : mpParaAttribsCache = NULL;
163 : : }
164 : : }
165 : :
166 [ + - ]: 1291 : mpParaAttribsCache = new SfxItemSet( rOutliner.GetParaAttribs( nPara ) );
167 : 1291 : mnParaAttribsCache = nPara;
168 : :
169 : 1291 : EditEngine& rEditEngine = (EditEngine&)rOutliner.GetEditEngine();
170 : :
171 : 1291 : SfxStyleSheet* pStyle = rEditEngine.GetStyleSheet( nPara );
172 [ + + ]: 1291 : if( pStyle )
173 : 1200 : mpParaAttribsCache->SetParent( &(pStyle->GetItemSet() ) );
174 : :
175 : 2288 : return *mpParaAttribsCache;
176 : : }
177 : :
178 : 1179 : void SvxOutlinerForwarder::SetParaAttribs( sal_uInt16 nPara, const SfxItemSet& rSet )
179 : : {
180 : 1179 : flushCache();
181 : :
182 : 1179 : const SfxItemSet* pOldParent = rSet.GetParent();
183 [ + + ]: 1179 : if( pOldParent )
184 : 1104 : ((SfxItemSet*)&rSet)->SetParent( NULL );
185 : :
186 : 1179 : rOutliner.SetParaAttribs( nPara, rSet );
187 : :
188 [ + + ]: 1179 : if( pOldParent )
189 : 1104 : ((SfxItemSet*)&rSet)->SetParent( pOldParent );
190 : 1179 : }
191 : :
192 : 12 : void SvxOutlinerForwarder::RemoveAttribs( const ESelection& rSelection, sal_Bool bRemoveParaAttribs, sal_uInt16 nWhich )
193 : : {
194 : 12 : rOutliner.RemoveAttribs( rSelection, bRemoveParaAttribs, nWhich );
195 : 12 : }
196 : :
197 : 12 : SfxItemPool* SvxOutlinerForwarder::GetPool() const
198 : : {
199 : 12 : return rOutliner.GetEmptyItemSet().GetPool();
200 : : }
201 : :
202 : 109 : void SvxOutlinerForwarder::GetPortions( sal_uInt16 nPara, std::vector<sal_uInt16>& rList ) const
203 : : {
204 : 109 : ((EditEngine&)rOutliner.GetEditEngine()).GetPortions( nPara, rList );
205 : 109 : }
206 : :
207 : 23345 : void SvxOutlinerForwarder::QuickInsertText( const String& rText, const ESelection& rSel )
208 : : {
209 : 23345 : flushCache();
210 [ + + ]: 23345 : if( rText.Len() == 0 )
211 : : {
212 : 451 : rOutliner.QuickDelete( rSel );
213 : : }
214 : : else
215 : : {
216 : 22894 : rOutliner.QuickInsertText( rText, rSel );
217 : : }
218 : 23345 : }
219 : :
220 : 8 : void SvxOutlinerForwarder::QuickInsertLineBreak( const ESelection& rSel )
221 : : {
222 : 8 : flushCache();
223 : 8 : rOutliner.QuickInsertLineBreak( rSel );
224 : 8 : }
225 : :
226 : 75 : void SvxOutlinerForwarder::QuickInsertField( const SvxFieldItem& rFld, const ESelection& rSel )
227 : : {
228 : 75 : flushCache();
229 : 75 : rOutliner.QuickInsertField( rFld, rSel );
230 : 75 : }
231 : :
232 : 618 : void SvxOutlinerForwarder::QuickSetAttribs( const SfxItemSet& rSet, const ESelection& rSel )
233 : : {
234 : 618 : flushCache();
235 : 618 : rOutliner.QuickSetAttribs( rSet, rSel );
236 : 618 : }
237 : :
238 : 88 : XubString SvxOutlinerForwarder::CalcFieldValue( const SvxFieldItem& rField, sal_uInt16 nPara, sal_uInt16 nPos, Color*& rpTxtColor, Color*& rpFldColor )
239 : : {
240 : 88 : return rOutliner.CalcFieldValue( rField, nPara, nPos, rpTxtColor, rpFldColor );
241 : : }
242 : :
243 : 0 : void SvxOutlinerForwarder::FieldClicked( const SvxFieldItem& rField, sal_uInt16 nPara, xub_StrLen nPos )
244 : : {
245 : 0 : rOutliner.FieldClicked( rField, nPara, nPos );
246 : 0 : }
247 : :
248 : 0 : sal_Bool SvxOutlinerForwarder::IsValid() const
249 : : {
250 : : // cannot reliably query outliner state
251 : : // while in the middle of an update
252 : 0 : return rOutliner.GetUpdateMode();
253 : : }
254 : :
255 : : extern sal_uInt16 GetSvxEditEngineItemState( EditEngine& rEditEngine, const ESelection& rSel, sal_uInt16 nWhich );
256 : :
257 : 4 : sal_uInt16 SvxOutlinerForwarder::GetItemState( const ESelection& rSel, sal_uInt16 nWhich ) const
258 : : {
259 : 4 : return GetSvxEditEngineItemState( (EditEngine&)rOutliner.GetEditEngine(), rSel, nWhich );
260 : : }
261 : :
262 : 2 : sal_uInt16 SvxOutlinerForwarder::GetItemState( sal_uInt16 nPara, sal_uInt16 nWhich ) const
263 : : {
264 : 2 : const SfxItemSet& rSet = rOutliner.GetParaAttribs( nPara );
265 [ + - ]: 2 : return rSet.GetItemState( nWhich );
266 : : }
267 : :
268 : :
269 : 71451 : void SvxOutlinerForwarder::flushCache()
270 : : {
271 [ + + ]: 71451 : if( mpAttribsCache )
272 : : {
273 [ + - ]: 1249 : delete mpAttribsCache;
274 : 1249 : mpAttribsCache = NULL;
275 : : }
276 : :
277 [ + + ]: 71451 : if( mpParaAttribsCache )
278 : : {
279 [ + - ]: 1291 : delete mpParaAttribsCache;
280 : 1291 : mpParaAttribsCache = NULL;
281 : : }
282 : 71451 : }
283 : :
284 : 0 : LanguageType SvxOutlinerForwarder::GetLanguage( sal_uInt16 nPara, sal_uInt16 nIndex ) const
285 : : {
286 : 0 : return rOutliner.GetLanguage(nPara, nIndex);
287 : : }
288 : :
289 : 0 : sal_uInt16 SvxOutlinerForwarder::GetFieldCount( sal_uInt16 nPara ) const
290 : : {
291 : 0 : return rOutliner.GetEditEngine().GetFieldCount(nPara);
292 : : }
293 : :
294 : 0 : EFieldInfo SvxOutlinerForwarder::GetFieldInfo( sal_uInt16 nPara, sal_uInt16 nField ) const
295 : : {
296 : 0 : return rOutliner.GetEditEngine().GetFieldInfo( nPara, nField );
297 : : }
298 : :
299 : 0 : EBulletInfo SvxOutlinerForwarder::GetBulletInfo( sal_uInt16 nPara ) const
300 : : {
301 : 0 : return rOutliner.GetBulletInfo( nPara );
302 : : }
303 : :
304 : 0 : Rectangle SvxOutlinerForwarder::GetCharBounds( sal_uInt16 nPara, sal_uInt16 nIndex ) const
305 : : {
306 : : // EditEngine's 'internal' methods like GetCharacterBounds()
307 : : // don't rotate for vertical text.
308 [ # # ]: 0 : Size aSize( rOutliner.CalcTextSize() );
309 : 0 : ::std::swap( aSize.Width(), aSize.Height() );
310 [ # # ]: 0 : bool bIsVertical( rOutliner.IsVertical() == sal_True );
311 : :
312 : : // #108900# Handle virtual position one-past-the end of the string
313 [ # # ][ # # ]: 0 : if( nIndex >= GetTextLen(nPara) )
314 : : {
315 [ # # ]: 0 : Rectangle aLast;
316 : :
317 [ # # ]: 0 : if( nIndex )
318 : : {
319 : : // use last character, if possible
320 [ # # ]: 0 : aLast = rOutliner.GetEditEngine().GetCharacterBounds( EPosition(nPara, nIndex-1) );
321 : :
322 : : // move at end of this last character, make one pixel wide
323 [ # # ]: 0 : aLast.Move( aLast.Right() - aLast.Left(), 0 );
324 [ # # ][ # # ]: 0 : aLast.SetSize( Size(1, aLast.GetHeight()) );
325 : :
326 : : // take care for CTL
327 [ # # ]: 0 : aLast = SvxEditSourceHelper::EEToUserSpace( aLast, aSize, bIsVertical );
328 : : }
329 : : else
330 : : {
331 : : // #109864# Bounds must lie within the paragraph
332 [ # # ]: 0 : aLast = GetParaBounds( nPara );
333 : :
334 : : // #109151# Don't use paragraph height, but line height
335 : : // instead. aLast is already CTL-correct
336 [ # # ]: 0 : if( bIsVertical)
337 [ # # ][ # # ]: 0 : aLast.SetSize( Size( rOutliner.GetLineHeight(nPara,0), 1 ) );
338 : : else
339 [ # # ][ # # ]: 0 : aLast.SetSize( Size( 1, rOutliner.GetLineHeight(nPara,0) ) );
340 : : }
341 : :
342 : 0 : return aLast;
343 : : }
344 : : else
345 : : {
346 : 0 : return SvxEditSourceHelper::EEToUserSpace( rOutliner.GetEditEngine().GetCharacterBounds( EPosition(nPara, nIndex) ),
347 [ # # ][ # # ]: 0 : aSize, bIsVertical );
348 : : }
349 : : }
350 : :
351 : 0 : Rectangle SvxOutlinerForwarder::GetParaBounds( sal_uInt16 nPara ) const
352 : : {
353 [ # # ]: 0 : Point aPnt = rOutliner.GetDocPosTopLeft( nPara );
354 [ # # ]: 0 : Size aSize = rOutliner.CalcTextSize();
355 : :
356 [ # # ][ # # ]: 0 : if( rOutliner.IsVertical() )
357 : : {
358 : : // Hargl. Outliner's 'external' methods return the rotated
359 : : // dimensions, 'internal' methods like GetTextHeight( n )
360 : : // don't rotate.
361 [ # # ]: 0 : sal_uLong nWidth = rOutliner.GetTextHeight( nPara );
362 : :
363 [ # # ]: 0 : return Rectangle( aSize.Width() - aPnt.Y() - nWidth, 0, aSize.Width() - aPnt.Y(), aSize.Height() );
364 : : }
365 : : else
366 : : {
367 [ # # ]: 0 : sal_uLong nHeight = rOutliner.GetTextHeight( nPara );
368 : :
369 [ # # ]: 0 : return Rectangle( 0, aPnt.Y(), aSize.Width(), aPnt.Y() + nHeight );
370 : : }
371 : : }
372 : :
373 : 0 : MapMode SvxOutlinerForwarder::GetMapMode() const
374 : : {
375 : 0 : return rOutliner.GetRefMapMode();
376 : : }
377 : :
378 : 0 : OutputDevice* SvxOutlinerForwarder::GetRefDevice() const
379 : : {
380 : 0 : return rOutliner.GetRefDevice();
381 : : }
382 : :
383 : 0 : sal_Bool SvxOutlinerForwarder::GetIndexAtPoint( const Point& rPos, sal_uInt16& nPara, sal_uInt16& nIndex ) const
384 : : {
385 [ # # ]: 0 : Size aSize( rOutliner.CalcTextSize() );
386 : 0 : ::std::swap( aSize.Width(), aSize.Height() );
387 : : Point aEEPos( SvxEditSourceHelper::UserSpaceToEE( rPos,
388 : : aSize,
389 [ # # ][ # # ]: 0 : rOutliner.IsVertical() == sal_True ));
390 : :
391 [ # # ]: 0 : EPosition aDocPos = rOutliner.GetEditEngine().FindDocPosition( aEEPos );
392 : :
393 : 0 : nPara = aDocPos.nPara;
394 : 0 : nIndex = aDocPos.nIndex;
395 : :
396 : 0 : return sal_True;
397 : : }
398 : :
399 : 0 : sal_Bool SvxOutlinerForwarder::GetWordIndices( sal_uInt16 nPara, sal_uInt16 nIndex, sal_uInt16& nStart, sal_uInt16& nEnd ) const
400 : : {
401 [ # # ]: 0 : ESelection aRes = rOutliner.GetEditEngine().GetWord( ESelection(nPara, nIndex, nPara, nIndex), com::sun::star::i18n::WordType::DICTIONARY_WORD );
402 : :
403 [ # # ][ # # ]: 0 : if( aRes.nStartPara == nPara &&
404 : : aRes.nStartPara == aRes.nEndPara )
405 : : {
406 : 0 : nStart = aRes.nStartPos;
407 : 0 : nEnd = aRes.nEndPos;
408 : :
409 : 0 : return sal_True;
410 : : }
411 : :
412 : 0 : return sal_False;
413 : : }
414 : :
415 : 0 : sal_Bool SvxOutlinerForwarder::GetAttributeRun( sal_uInt16& nStartIndex, sal_uInt16& nEndIndex, sal_uInt16 nPara, sal_uInt16 nIndex ) const
416 : : {
417 : 0 : return SvxEditSourceHelper::GetAttributeRun( nStartIndex, nEndIndex, rOutliner.GetEditEngine(), nPara, nIndex );
418 : : }
419 : :
420 : 0 : sal_uInt16 SvxOutlinerForwarder::GetLineCount( sal_uInt16 nPara ) const
421 : : {
422 : 0 : return static_cast < sal_uInt16 >( rOutliner.GetLineCount(nPara) );
423 : : }
424 : :
425 : 0 : sal_uInt16 SvxOutlinerForwarder::GetLineLen( sal_uInt16 nPara, sal_uInt16 nLine ) const
426 : : {
427 : 0 : return rOutliner.GetLineLen(nPara, nLine);
428 : : }
429 : :
430 : 0 : void SvxOutlinerForwarder::GetLineBoundaries( /*out*/sal_uInt16 &rStart, /*out*/sal_uInt16 &rEnd, sal_uInt16 nPara, sal_uInt16 nLine ) const
431 : : {
432 : 0 : return rOutliner.GetEditEngine().GetLineBoundaries( rStart, rEnd, nPara, nLine );
433 : : }
434 : :
435 : 0 : sal_uInt16 SvxOutlinerForwarder::GetLineNumberAtIndex( sal_uInt16 nPara, sal_uInt16 nIndex ) const
436 : : {
437 : 0 : return rOutliner.GetEditEngine().GetLineNumberAtIndex( nPara, nIndex );
438 : : }
439 : :
440 : 0 : sal_Bool SvxOutlinerForwarder::QuickFormatDoc( sal_Bool )
441 : : {
442 : 0 : rOutliner.QuickFormatDoc();
443 : :
444 : 0 : return sal_True;
445 : : }
446 : :
447 : 0 : sal_Bool SvxOutlinerForwarder::Delete( const ESelection& rSelection )
448 : : {
449 : 0 : flushCache();
450 : 0 : rOutliner.QuickDelete( rSelection );
451 : 0 : rOutliner.QuickFormatDoc();
452 : :
453 : 0 : return sal_True;
454 : : }
455 : :
456 : 0 : sal_Bool SvxOutlinerForwarder::InsertText( const String& rStr, const ESelection& rSelection )
457 : : {
458 : 0 : flushCache();
459 : 0 : rOutliner.QuickInsertText( rStr, rSelection );
460 : 0 : rOutliner.QuickFormatDoc();
461 : :
462 : 0 : return sal_True;
463 : : }
464 : :
465 : 51 : sal_Int16 SvxOutlinerForwarder::GetDepth( sal_uInt16 nPara ) const
466 : : {
467 : : DBG_ASSERT( nPara < GetParagraphCount(), "SvxOutlinerForwarder::GetDepth: Invalid paragraph index");
468 : :
469 : 51 : Paragraph* pPara = rOutliner.GetParagraph( nPara );
470 : :
471 : 51 : sal_Int16 nLevel = -1;
472 : :
473 [ + - ]: 51 : if( pPara )
474 : 51 : nLevel = rOutliner.GetDepth( nPara );
475 : :
476 : 51 : return nLevel;
477 : : }
478 : :
479 : 150 : sal_Bool SvxOutlinerForwarder::SetDepth( sal_uInt16 nPara, sal_Int16 nNewDepth )
480 : : {
481 : : DBG_ASSERT( nPara < GetParagraphCount(), "SvxOutlinerForwarder::SetDepth: Invalid paragraph index");
482 : :
483 [ + - ][ + - ]: 150 : if( (nNewDepth >= -1) && (nNewDepth <= 9) && (nPara < GetParagraphCount()) )
[ + - ][ + - ]
484 : : {
485 : 150 : Paragraph* pPara = rOutliner.GetParagraph( nPara );
486 [ + - ]: 150 : if( pPara )
487 : : {
488 : 150 : rOutliner.SetDepth( pPara, nNewDepth );
489 : :
490 : : // const bool bOutlinerText = pSdrObject && (pSdrObject->GetObjInventor() == SdrInventor) && (pSdrObject->GetObjIdentifier() == OBJ_OUTLINETEXT);
491 [ + + ]: 150 : if( bOutlinerText )
492 : 9 : rOutliner.SetLevelDependendStyleSheet( nPara );
493 : :
494 : 150 : return sal_True;
495 : : }
496 : : }
497 : :
498 : 150 : return sal_False;
499 : : }
500 : :
501 : 20 : sal_Int16 SvxOutlinerForwarder::GetNumberingStartValue( sal_uInt16 nPara )
502 : : {
503 [ + - ]: 20 : if( nPara < GetParagraphCount() )
504 : : {
505 : 20 : return rOutliner.GetNumberingStartValue( nPara );
506 : : }
507 : : else
508 : : {
509 : : OSL_FAIL( "SvxOutlinerForwarder::GetNumberingStartValue)(), Invalid paragraph index");
510 : 20 : return -1;
511 : : }
512 : : }
513 : :
514 : 8 : void SvxOutlinerForwarder::SetNumberingStartValue( sal_uInt16 nPara, sal_Int16 nNumberingStartValue )
515 : : {
516 [ + - ]: 8 : if( nPara < GetParagraphCount() )
517 : : {
518 : 8 : rOutliner.SetNumberingStartValue( nPara, nNumberingStartValue );
519 : : }
520 : : else
521 : : {
522 : : OSL_FAIL( "SvxOutlinerForwarder::SetNumberingStartValue)(), Invalid paragraph index");
523 : : }
524 : 8 : }
525 : :
526 : 20 : sal_Bool SvxOutlinerForwarder::IsParaIsNumberingRestart( sal_uInt16 nPara )
527 : : {
528 [ + - ]: 20 : if( nPara < GetParagraphCount() )
529 : : {
530 : 20 : return rOutliner.IsParaIsNumberingRestart( nPara );
531 : : }
532 : : else
533 : : {
534 : : OSL_FAIL( "SvxOutlinerForwarder::IsParaIsNumberingRestart)(), Invalid paragraph index");
535 : 20 : return sal_False;
536 : : }
537 : : }
538 : :
539 : 8 : void SvxOutlinerForwarder::SetParaIsNumberingRestart( sal_uInt16 nPara, sal_Bool bParaIsNumberingRestart )
540 : : {
541 [ + - ]: 8 : if( nPara < GetParagraphCount() )
542 : : {
543 : 8 : rOutliner.SetParaIsNumberingRestart( nPara, bParaIsNumberingRestart );
544 : : }
545 : : else
546 : : {
547 : : OSL_FAIL( "SvxOutlinerForwarder::SetParaIsNumberingRestart)(), Invalid paragraph index");
548 : : }
549 : 8 : }
550 : :
551 : 24 : const SfxItemSet * SvxOutlinerForwarder::GetEmptyItemSetPtr()
552 : : {
553 : 24 : EditEngine& rEditEngine = const_cast< EditEngine& >( rOutliner.GetEditEngine() );
554 : 24 : return &rEditEngine.GetEmptyItemSet();
555 : : }
556 : :
557 : 12 : void SvxOutlinerForwarder::AppendParagraph()
558 : : {
559 : 12 : EditEngine& rEditEngine = const_cast< EditEngine& >( rOutliner.GetEditEngine() );
560 : 12 : rEditEngine.InsertParagraph( rEditEngine.GetParagraphCount(), String::EmptyString() );
561 : 12 : }
562 : :
563 : 12 : xub_StrLen SvxOutlinerForwarder::AppendTextPortion( sal_uInt16 nPara, const String &rText, const SfxItemSet & /*rSet*/ )
564 : : {
565 : 12 : xub_StrLen nLen = 0;
566 : :
567 : 12 : EditEngine& rEditEngine = const_cast< EditEngine& >( rOutliner.GetEditEngine() );
568 : 12 : sal_uInt16 nParaCount = rEditEngine.GetParagraphCount();
569 : : DBG_ASSERT( nPara < nParaCount, "paragraph index out of bounds" );
570 [ + - ]: 12 : if (/*0 <= nPara && */nPara < nParaCount)
571 : : {
572 : 12 : nLen = rEditEngine.GetTextLen( nPara );
573 [ + - ]: 12 : rEditEngine.QuickInsertText( rText, ESelection( nPara, nLen, nPara, nLen ) );
574 : : }
575 : :
576 : 12 : return nLen;
577 : : }
578 : :
579 : 0 : void SvxOutlinerForwarder::CopyText(const SvxTextForwarder& rSource)
580 : : {
581 [ # # ]: 0 : const SvxOutlinerForwarder* pSourceForwarder = dynamic_cast< const SvxOutlinerForwarder* >( &rSource );
582 [ # # ]: 0 : if( !pSourceForwarder )
583 : 0 : return;
584 : 0 : OutlinerParaObject* pNewOutlinerParaObject = pSourceForwarder->rOutliner.CreateParaObject();
585 : 0 : rOutliner.SetText( *pNewOutlinerParaObject );
586 [ # # ]: 0 : delete pNewOutlinerParaObject;
587 : : }
588 : :
589 : : //------------------------------------------------------------------------
590 : :
591 : :
592 : 0 : sal_Int16 SvxTextForwarder::GetNumberingStartValue( sal_uInt16 )
593 : : {
594 : 0 : return -1;
595 : : }
596 : :
597 : 0 : void SvxTextForwarder::SetNumberingStartValue( sal_uInt16, sal_Int16 )
598 : : {
599 : 0 : }
600 : :
601 : 0 : sal_Bool SvxTextForwarder::IsParaIsNumberingRestart( sal_uInt16 )
602 : : {
603 : 0 : return sal_False;
604 : : }
605 : :
606 : 0 : void SvxTextForwarder::SetParaIsNumberingRestart( sal_uInt16, sal_Bool )
607 : : {
608 : 0 : }
609 : :
610 : : //------------------------------------------------------------------------
611 : :
612 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|