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 <svx/sdr/properties/textproperties.hxx>
21 : #include <svl/itemset.hxx>
22 : #include <svl/style.hxx>
23 : #include <svl/itemiter.hxx>
24 : #include <svl/smplhint.hxx>
25 : #include <svx/svddef.hxx>
26 : #include <svx/svdotext.hxx>
27 : #include <svx/svdoutl.hxx>
28 : #include <editeng/writingmodeitem.hxx>
29 : #include <svx/svdmodel.hxx>
30 : #include <editeng/outlobj.hxx>
31 : #include <svx/xflclit.hxx>
32 : #include <editeng/adjitem.hxx>
33 : #include <svx/svdetc.hxx>
34 : #include <editeng/editeng.hxx>
35 : #include <editeng/flditem.hxx>
36 : #include <svx/xlnwtit.hxx>
37 : #include <svx/svdpool.hxx>
38 :
39 : //////////////////////////////////////////////////////////////////////////////
40 :
41 : namespace sdr
42 : {
43 : namespace properties
44 : {
45 3214 : SfxItemSet& TextProperties::CreateObjectSpecificItemSet(SfxItemPool& rPool)
46 : {
47 : return *(new SfxItemSet(rPool,
48 :
49 : // range from SdrAttrObj
50 : SDRATTR_START, SDRATTR_SHADOW_LAST,
51 : SDRATTR_MISC_FIRST, SDRATTR_MISC_LAST,
52 : SDRATTR_TEXTDIRECTION, SDRATTR_TEXTDIRECTION,
53 :
54 : // range from SdrTextObj
55 : EE_ITEMS_START, EE_ITEMS_END,
56 :
57 : // end
58 3214 : 0, 0));
59 : }
60 :
61 4591 : TextProperties::TextProperties(SdrObject& rObj)
62 : : AttributeProperties(rObj),
63 4591 : maVersion(0)
64 : {
65 4591 : }
66 :
67 4 : TextProperties::TextProperties(const TextProperties& rProps, SdrObject& rObj)
68 : : AttributeProperties(rProps, rObj),
69 4 : maVersion(rProps.getVersion())
70 : {
71 4 : }
72 :
73 5860 : TextProperties::~TextProperties()
74 : {
75 5860 : }
76 :
77 0 : BaseProperties& TextProperties::Clone(SdrObject& rObj) const
78 : {
79 0 : return *(new TextProperties(*this, rObj));
80 : }
81 :
82 15956 : void TextProperties::ItemSetChanged(const SfxItemSet& rSet)
83 : {
84 15956 : SdrTextObj& rObj = (SdrTextObj&)GetSdrObject();
85 15956 : sal_Int32 nText = rObj.getTextCount();
86 :
87 : // #i101556# ItemSet has changed -> new version
88 15956 : maVersion++;
89 :
90 47868 : while( --nText >= 0 )
91 : {
92 15956 : SdrText* pText = rObj.getText( nText );
93 :
94 15956 : OutlinerParaObject* pParaObj = pText ? pText->GetOutlinerParaObject() : 0;
95 :
96 15956 : if(pParaObj)
97 : {
98 1277 : const bool bTextEdit = rObj.IsTextEditActive() && (rObj.getActiveText() == pText);
99 :
100 : // handle outliner attributes
101 1277 : GetObjectItemSet();
102 1277 : Outliner* pOutliner = rObj.GetTextEditOutliner();
103 :
104 1277 : if(!bTextEdit)
105 : {
106 1277 : pOutliner = &rObj.ImpGetDrawOutliner();
107 1277 : pOutliner->SetText(*pParaObj);
108 : }
109 :
110 1277 : sal_uInt32 nParaCount(pOutliner->GetParagraphCount());
111 :
112 2599 : for(sal_uInt16 nPara = 0; nPara < nParaCount; nPara++)
113 : {
114 1322 : SfxItemSet aSet(pOutliner->GetParaAttribs(nPara));
115 1322 : aSet.Put(rSet);
116 1322 : pOutliner->SetParaAttribs(nPara, aSet);
117 1322 : }
118 :
119 1277 : if(!bTextEdit)
120 : {
121 1277 : if(nParaCount)
122 : {
123 : // force ItemSet
124 1277 : GetObjectItemSet();
125 :
126 1277 : SfxItemSet aNewSet(pOutliner->GetParaAttribs(0L));
127 1277 : mpItemSet->Put(aNewSet);
128 : }
129 :
130 1277 : OutlinerParaObject* pTemp = pOutliner->CreateParaObject(0, (sal_uInt16)nParaCount);
131 1277 : pOutliner->Clear();
132 :
133 1277 : rObj.NbcSetOutlinerParaObjectForText(pTemp,pText);
134 : }
135 : }
136 : }
137 :
138 : // Extra-Repaint for radical layout changes (#43139#)
139 15956 : if(SFX_ITEM_SET == rSet.GetItemState(SDRATTR_TEXT_CONTOURFRAME))
140 : {
141 : // Here only repaint wanted
142 2 : rObj.ActionChanged();
143 : //rObj.BroadcastObjectChange();
144 : }
145 :
146 : // call parent
147 15956 : AttributeProperties::ItemSetChanged(rSet);
148 15956 : }
149 :
150 104521 : void TextProperties::ItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem)
151 : {
152 104521 : SdrTextObj& rObj = (SdrTextObj&)GetSdrObject();
153 :
154 : // #i25616#
155 104521 : sal_Int32 nOldLineWidth(0L);
156 :
157 104521 : if(XATTR_LINEWIDTH == nWhich && rObj.DoesSupportTextIndentingOnLineWidthChange())
158 : {
159 1742 : nOldLineWidth = ((const XLineWidthItem&)GetItem(XATTR_LINEWIDTH)).GetValue();
160 : }
161 :
162 104521 : if(pNewItem && (SDRATTR_TEXTDIRECTION == nWhich))
163 : {
164 4339 : sal_Bool bVertical(com::sun::star::text::WritingMode_TB_RL == ((SvxWritingModeItem*)pNewItem)->GetValue());
165 4339 : rObj.SetVerticalWriting(bVertical);
166 : }
167 :
168 : // #95501# reset to default
169 104521 : if(!pNewItem && !nWhich && rObj.HasText() )
170 : {
171 14 : SdrOutliner& rOutliner = rObj.ImpGetDrawOutliner();
172 :
173 14 : sal_Int32 nCount = rObj.getTextCount();
174 42 : while( nCount-- )
175 : {
176 14 : SdrText* pText = rObj.getText( nCount );
177 14 : OutlinerParaObject* pParaObj = pText->GetOutlinerParaObject();
178 14 : if( pParaObj )
179 : {
180 14 : rOutliner.SetText(*pParaObj);
181 14 : sal_uInt32 nParaCount(rOutliner.GetParagraphCount());
182 :
183 14 : if(nParaCount)
184 : {
185 14 : ESelection aSelection( 0, 0, EE_PARA_ALL, EE_PARA_ALL);
186 14 : rOutliner.RemoveAttribs(aSelection, sal_True, 0);
187 :
188 14 : OutlinerParaObject* pTemp = rOutliner.CreateParaObject(0, (sal_uInt16)nParaCount);
189 14 : rOutliner.Clear();
190 :
191 14 : rObj.NbcSetOutlinerParaObjectForText( pTemp, pText );
192 : }
193 : }
194 : }
195 : }
196 :
197 : // call parent
198 104521 : AttributeProperties::ItemChange( nWhich, pNewItem );
199 :
200 : // #i25616#
201 104521 : if(XATTR_LINEWIDTH == nWhich && rObj.DoesSupportTextIndentingOnLineWidthChange())
202 : {
203 1742 : const sal_Int32 nNewLineWidth(((const XLineWidthItem&)GetItem(XATTR_LINEWIDTH)).GetValue());
204 1742 : const sal_Int32 nDifference((nNewLineWidth - nOldLineWidth) / 2);
205 :
206 1742 : if(nDifference)
207 : {
208 663 : const sal_Bool bLineVisible(XLINE_NONE != ((const XLineStyleItem&)(GetItem(XATTR_LINESTYLE))).GetValue());
209 :
210 663 : if(bLineVisible)
211 : {
212 656 : const sal_Int32 nLeftDist(((const SdrTextLeftDistItem&)GetItem(SDRATTR_TEXT_LEFTDIST)).GetValue());
213 656 : const sal_Int32 nRightDist(((const SdrTextRightDistItem&)GetItem(SDRATTR_TEXT_RIGHTDIST)).GetValue());
214 656 : const sal_Int32 nUpperDist(((const SdrTextUpperDistItem&)GetItem(SDRATTR_TEXT_UPPERDIST)).GetValue());
215 656 : const sal_Int32 nLowerDist(((const SdrTextLowerDistItem&)GetItem(SDRATTR_TEXT_LOWERDIST)).GetValue());
216 :
217 656 : SetObjectItemDirect(SdrTextLeftDistItem(nLeftDist + nDifference));
218 656 : SetObjectItemDirect(SdrTextRightDistItem(nRightDist + nDifference));
219 656 : SetObjectItemDirect(SdrTextUpperDistItem(nUpperDist + nDifference));
220 656 : SetObjectItemDirect(SdrTextLowerDistItem(nLowerDist + nDifference));
221 : }
222 : }
223 : }
224 104521 : }
225 :
226 4554 : void TextProperties::SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr)
227 : {
228 4554 : SdrTextObj& rObj = (SdrTextObj&)GetSdrObject();
229 :
230 : // call parent
231 4554 : AttributeProperties::SetStyleSheet(pNewStyleSheet, bDontRemoveHardAttr);
232 :
233 : // #i101556# StyleSheet has changed -> new version
234 4554 : maVersion++;
235 :
236 4554 : if( rObj.GetModel() /*&& !rObj.IsTextEditActive()*/ && !rObj.IsLinkedText() )
237 : {
238 4554 : SdrOutliner& rOutliner = rObj.ImpGetDrawOutliner();
239 :
240 4554 : sal_Int32 nText = rObj.getTextCount();
241 :
242 13762 : while( --nText >= 0 )
243 : {
244 4654 : SdrText* pText = rObj.getText( nText );
245 :
246 4654 : OutlinerParaObject* pParaObj = pText ? pText->GetOutlinerParaObject() : 0;
247 4654 : if( !pParaObj )
248 4342 : continue;
249 :
250 : // apply StyleSheet to all paragraphs
251 312 : rOutliner.SetText(*pParaObj);
252 312 : sal_uInt32 nParaCount(rOutliner.GetParagraphCount());
253 :
254 312 : if(nParaCount)
255 : {
256 720 : for(sal_uInt16 nPara = 0; nPara < nParaCount; nPara++)
257 : {
258 408 : SfxItemSet* pTempSet = 0L;
259 :
260 : // since setting the stylesheet removes all para attributes
261 408 : if(bDontRemoveHardAttr)
262 : {
263 : // we need to remember them if we want to keep them
264 118 : pTempSet = new SfxItemSet(rOutliner.GetParaAttribs(nPara));
265 : }
266 :
267 408 : if(GetStyleSheet())
268 : {
269 408 : if((OBJ_OUTLINETEXT == rObj.GetTextKind()) && (SdrInventor == rObj.GetObjInventor()))
270 : {
271 122 : String aNewStyleSheetName(GetStyleSheet()->GetName());
272 122 : aNewStyleSheetName.Erase(aNewStyleSheetName.Len() - 1, 1);
273 122 : sal_Int16 nDepth = rOutliner.GetDepth((sal_uInt16)nPara);
274 122 : aNewStyleSheetName += String::CreateFromInt32( nDepth <= 0 ? 1 : nDepth + 1);
275 :
276 122 : SdrModel* pModel = rObj.GetModel();
277 122 : SfxStyleSheetBasePool* pStylePool = (pModel != NULL) ? pModel->GetStyleSheetPool() : 0L;
278 122 : SfxStyleSheet* pNewStyle = (SfxStyleSheet*)pStylePool->Find(aNewStyleSheetName, GetStyleSheet()->GetFamily());
279 : DBG_ASSERT( pNewStyle, "AutoStyleSheetName - Style not found!" );
280 :
281 122 : if(pNewStyle)
282 : {
283 122 : rOutliner.SetStyleSheet(nPara, pNewStyle);
284 122 : }
285 : }
286 : else
287 : {
288 286 : rOutliner.SetStyleSheet(nPara, GetStyleSheet());
289 : }
290 : }
291 : else
292 : {
293 : // remove StyleSheet
294 0 : rOutliner.SetStyleSheet(nPara, 0L);
295 : }
296 :
297 408 : if(bDontRemoveHardAttr)
298 : {
299 118 : if(pTempSet)
300 : {
301 : // restore para attributes
302 118 : rOutliner.SetParaAttribs(nPara, *pTempSet);
303 : }
304 : }
305 : else
306 : {
307 290 : if(pNewStyleSheet)
308 : {
309 : // remove all hard paragraph attributes
310 : // which occur in StyleSheet, take care of
311 : // parents (!)
312 290 : SfxItemIter aIter(pNewStyleSheet->GetItemSet());
313 290 : const SfxPoolItem* pItem = aIter.FirstItem();
314 :
315 8209 : while(pItem)
316 : {
317 7629 : if(!IsInvalidItem(pItem))
318 : {
319 7629 : sal_uInt16 nW(pItem->Which());
320 :
321 7629 : if(nW >= EE_ITEMS_START && nW <= EE_ITEMS_END)
322 : {
323 6134 : rOutliner.QuickRemoveCharAttribs((sal_uInt16)nPara, nW);
324 : }
325 : }
326 7629 : pItem = aIter.NextItem();
327 290 : }
328 : }
329 : }
330 :
331 408 : if(pTempSet)
332 : {
333 118 : delete pTempSet;
334 : }
335 : }
336 :
337 312 : OutlinerParaObject* pTemp = rOutliner.CreateParaObject(0, (sal_uInt16)nParaCount);
338 312 : rOutliner.Clear();
339 312 : rObj.NbcSetOutlinerParaObjectForText(pTemp, pText);
340 : }
341 : }
342 : }
343 :
344 4554 : if(rObj.IsTextFrame())
345 : {
346 2552 : rObj.NbcAdjustTextFrameWidthAndHeight();
347 : }
348 4554 : }
349 :
350 3322 : void TextProperties::ForceDefaultAttributes()
351 : {
352 3322 : SdrTextObj& rObj = (SdrTextObj&)GetSdrObject();
353 :
354 3322 : if( rObj.GetObjInventor() == SdrInventor )
355 : {
356 3313 : const sal_uInt16 nSdrObjKind = rObj.GetObjIdentifier();
357 :
358 3313 : if( nSdrObjKind == OBJ_TITLETEXT || nSdrObjKind == OBJ_OUTLINETEXT )
359 3451 : return; // no defaults for presentation objects
360 : }
361 :
362 3193 : bool bTextFrame(rObj.IsTextFrame());
363 :
364 : // force ItemSet
365 3193 : GetObjectItemSet();
366 :
367 3193 : if(bTextFrame)
368 : {
369 1202 : mpItemSet->Put(XLineStyleItem(XLINE_NONE));
370 1202 : mpItemSet->Put(XFillColorItem(String(), Color(COL_WHITE)));
371 1202 : mpItemSet->Put(XFillStyleItem(XFILL_NONE));
372 : }
373 : else
374 : {
375 1991 : mpItemSet->Put(SvxAdjustItem(SVX_ADJUST_CENTER, EE_PARA_JUST));
376 1991 : mpItemSet->Put(SdrTextHorzAdjustItem(SDRTEXTHORZADJUST_CENTER));
377 1991 : mpItemSet->Put(SdrTextVertAdjustItem(SDRTEXTVERTADJUST_CENTER));
378 : }
379 : }
380 :
381 0 : void TextProperties::ForceStyleToHardAttributes()
382 : {
383 : // #i61284# call parent first to get the hard ObjectItemSet
384 0 : AttributeProperties::ForceStyleToHardAttributes();
385 :
386 : // #i61284# push hard ObjectItemSet to OutlinerParaObject attributes
387 : // using existing functionality
388 0 : GetObjectItemSet(); // force ItemSet
389 0 : ItemSetChanged(*mpItemSet);
390 :
391 : // now the standard TextProperties stuff
392 0 : SdrTextObj& rObj = (SdrTextObj&)GetSdrObject();
393 :
394 0 : if(rObj.GetModel()
395 0 : && !rObj.IsTextEditActive()
396 0 : && !rObj.IsLinkedText())
397 : {
398 0 : Outliner* pOutliner = SdrMakeOutliner(OUTLINERMODE_OUTLINEOBJECT, rObj.GetModel());
399 0 : sal_Int32 nText = rObj.getTextCount();
400 :
401 0 : while( --nText >= 0 )
402 : {
403 0 : SdrText* pText = rObj.getText( nText );
404 :
405 0 : OutlinerParaObject* pParaObj = pText ? pText->GetOutlinerParaObject() : 0;
406 0 : if( !pParaObj )
407 0 : continue;
408 :
409 0 : pOutliner->SetText(*pParaObj);
410 :
411 0 : sal_uInt32 nParaCount(pOutliner->GetParagraphCount());
412 :
413 0 : if(nParaCount)
414 : {
415 0 : sal_Bool bBurnIn(sal_False);
416 :
417 0 : for(sal_uInt16 nPara = 0; nPara < nParaCount; nPara++)
418 : {
419 0 : SfxStyleSheet* pSheet = pOutliner->GetStyleSheet(nPara);
420 :
421 0 : if(pSheet)
422 : {
423 0 : SfxItemSet aParaSet(pOutliner->GetParaAttribs(nPara));
424 0 : SfxItemSet aSet(*aParaSet.GetPool());
425 0 : aSet.Put(pSheet->GetItemSet());
426 :
427 : /** the next code handles a special case for paragraphs that contain a
428 : url field. The color for URL fields is either the system color for
429 : urls or the char color attribute that formats the portion in which the
430 : url field is contained.
431 : When we set a char color attribute to the paragraphs item set from the
432 : styles item set, we would have this char color attribute as an attribute
433 : that is spanned over the complete paragraph after xml import due to some
434 : problems in the xml import (using a XCursor on import so it does not know
435 : the paragraphs and can't set char attributes to paragraphs ).
436 :
437 : To avoid this, as soon as we try to set a char color attribute from the style
438 : we
439 : 1. check if we have at least one url field in this paragraph
440 : 2. if we found at least one url field, we span the char color attribute over
441 : all portions that are not url fields and remove the char color attribute
442 : from the paragraphs item set
443 : */
444 :
445 0 : sal_Bool bHasURL(sal_False);
446 :
447 0 : if(aSet.GetItemState(EE_CHAR_COLOR) == SFX_ITEM_SET)
448 : {
449 0 : EditEngine* pEditEngine = const_cast<EditEngine*>(&(pOutliner->GetEditEngine()));
450 0 : std::vector<EECharAttrib> aAttribs;
451 0 : pEditEngine->GetCharAttribs((sal_uInt16)nPara, aAttribs);
452 :
453 0 : for(std::vector<EECharAttrib>::iterator i = aAttribs.begin(); i < aAttribs.end(); ++i)
454 : {
455 0 : if(EE_FEATURE_FIELD == i->pAttr->Which())
456 : {
457 0 : if(i->pAttr)
458 : {
459 0 : SvxFieldItem* pFieldItem = (SvxFieldItem*)(i->pAttr);
460 :
461 0 : if(pFieldItem)
462 : {
463 0 : const SvxFieldData* pData = pFieldItem->GetField();
464 :
465 0 : if(pData && pData->ISA(SvxURLField))
466 : {
467 0 : bHasURL = sal_True;
468 0 : break;
469 : }
470 : }
471 : }
472 : }
473 : }
474 :
475 0 : if(bHasURL)
476 : {
477 0 : SfxItemSet aColorSet(*aSet.GetPool(), EE_CHAR_COLOR, EE_CHAR_COLOR );
478 0 : aColorSet.Put(aSet, sal_False);
479 :
480 0 : ESelection aSel((sal_uInt16)nPara, 0);
481 :
482 0 : for(std::vector<EECharAttrib>::iterator i = aAttribs.begin(); i < aAttribs.end(); ++i)
483 : {
484 0 : if(EE_FEATURE_FIELD == i->pAttr->Which())
485 : {
486 0 : aSel.nEndPos = i->nStart;
487 :
488 0 : if(aSel.nStartPos != aSel.nEndPos)
489 0 : pEditEngine->QuickSetAttribs(aColorSet, aSel);
490 :
491 0 : aSel.nStartPos = i->nEnd;
492 : }
493 : }
494 :
495 0 : aSel.nEndPos = pEditEngine->GetTextLen((sal_uInt16)nPara);
496 :
497 0 : if(aSel.nStartPos != aSel.nEndPos)
498 : {
499 0 : pEditEngine->QuickSetAttribs( aColorSet, aSel );
500 0 : }
501 0 : }
502 :
503 : }
504 :
505 0 : aSet.Put(aParaSet, sal_False);
506 :
507 0 : if(bHasURL)
508 : {
509 0 : aSet.ClearItem(EE_CHAR_COLOR);
510 : }
511 :
512 0 : pOutliner->SetParaAttribs(nPara, aSet);
513 0 : bBurnIn = sal_True; // #i51163# Flag was set wrong
514 : }
515 : }
516 :
517 0 : if(bBurnIn)
518 : {
519 0 : OutlinerParaObject* pTemp = pOutliner->CreateParaObject(0, (sal_uInt16)nParaCount);
520 0 : rObj.NbcSetOutlinerParaObjectForText(pTemp,pText);
521 : }
522 : }
523 :
524 0 : pOutliner->Clear();
525 : }
526 0 : delete pOutliner;
527 : }
528 0 : }
529 :
530 0 : void TextProperties::SetObjectItemNoBroadcast(const SfxPoolItem& rItem)
531 : {
532 0 : GetObjectItemSet();
533 0 : mpItemSet->Put(rItem);
534 0 : }
535 :
536 :
537 4586 : void TextProperties::Notify(SfxBroadcaster& rBC, const SfxHint& rHint)
538 : {
539 : // call parent
540 4586 : AttributeProperties::Notify(rBC, rHint);
541 :
542 4586 : SdrTextObj& rObj = (SdrTextObj&)GetSdrObject();
543 4586 : if(rObj.HasText())
544 : {
545 4586 : if(HAS_BASE(SfxStyleSheet, &rBC))
546 : {
547 1878 : SfxSimpleHint* pSimple = PTR_CAST(SfxSimpleHint, &rHint);
548 1878 : sal_uInt32 nId(pSimple ? pSimple->GetId() : 0L);
549 :
550 1878 : if(SFX_HINT_DATACHANGED == nId)
551 : {
552 1878 : rObj.SetPortionInfoChecked(sal_False);
553 :
554 1878 : sal_Int32 nText = rObj.getTextCount();
555 3756 : while( --nText > 0 )
556 : {
557 0 : OutlinerParaObject* pParaObj = rObj.getText(nText )->GetOutlinerParaObject();
558 0 : if( pParaObj )
559 0 : pParaObj->ClearPortionInfo();
560 : }
561 1878 : rObj.SetTextSizeDirty();
562 :
563 1878 : if(rObj.IsTextFrame() && rObj.NbcAdjustTextFrameWidthAndHeight())
564 : {
565 : // here only repaint wanted
566 0 : rObj.ActionChanged();
567 : //rObj.BroadcastObjectChange();
568 : }
569 :
570 : // #i101556# content of StyleSheet has changed -> new version
571 1878 : maVersion++;
572 : }
573 :
574 1878 : if(SFX_HINT_DYING == nId)
575 : {
576 0 : rObj.SetPortionInfoChecked(sal_False);
577 0 : sal_Int32 nText = rObj.getTextCount();
578 0 : while( --nText > 0 )
579 : {
580 0 : OutlinerParaObject* pParaObj = rObj.getText(nText )->GetOutlinerParaObject();
581 0 : if( pParaObj )
582 0 : pParaObj->ClearPortionInfo();
583 : }
584 : }
585 : }
586 2708 : else if(HAS_BASE(SfxStyleSheetBasePool, &rBC))
587 : {
588 2708 : SfxStyleSheetHintExtended* pExtendedHint = PTR_CAST(SfxStyleSheetHintExtended, &rHint);
589 :
590 3688 : if(pExtendedHint
591 980 : && SFX_STYLESHEET_MODIFIED == pExtendedHint->GetHint())
592 : {
593 980 : String aOldName(pExtendedHint->GetOldName());
594 980 : String aNewName(pExtendedHint->GetStyleSheet()->GetName());
595 980 : SfxStyleFamily eFamily = pExtendedHint->GetStyleSheet()->GetFamily();
596 :
597 980 : if(!aOldName.Equals(aNewName))
598 : {
599 980 : sal_Int32 nText = rObj.getTextCount();
600 1960 : while( --nText > 0 )
601 : {
602 0 : OutlinerParaObject* pParaObj = rObj.getText(nText )->GetOutlinerParaObject();
603 0 : if( pParaObj )
604 0 : pParaObj->ChangeStyleSheetName(eFamily, aOldName, aNewName);
605 : }
606 980 : }
607 : }
608 : }
609 : }
610 4586 : }
611 :
612 : // #i101556# Handout version information
613 92 : sal_uInt32 TextProperties::getVersion() const
614 : {
615 92 : return maVersion;
616 : }
617 : } // end of namespace properties
618 : } // end of namespace sdr
619 :
620 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|