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