LCOV - code coverage report
Current view: top level - svx/source/sdr/properties - textproperties.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 190 273 69.6 %
Date: 2014-11-03 Functions: 15 17 88.2 %
Legend: Lines: hit not hit

          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       50033 :         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       50033 :                 0, 0));
      59             :         }
      60             : 
      61       58555 :         TextProperties::TextProperties(SdrObject& rObj)
      62             :         :   AttributeProperties(rObj),
      63       58555 :             maVersion(0)
      64             :         {
      65       58555 :         }
      66             : 
      67        1282 :         TextProperties::TextProperties(const TextProperties& rProps, SdrObject& rObj)
      68             :         :   AttributeProperties(rProps, rObj),
      69        1282 :             maVersion(rProps.getVersion())
      70             :         {
      71        1282 :         }
      72             : 
      73       77380 :         TextProperties::~TextProperties()
      74             :         {
      75       77380 :         }
      76             : 
      77         832 :         BaseProperties& TextProperties::Clone(SdrObject& rObj) const
      78             :         {
      79         832 :             return *(new TextProperties(*this, rObj));
      80             :         }
      81             : 
      82      224773 :         void TextProperties::ItemSetChanged(const SfxItemSet& rSet)
      83             :         {
      84      224773 :             SdrTextObj& rObj = static_cast<SdrTextObj&>(GetSdrObject());
      85      224773 :             const svx::ITextProvider& rTextProvider(getTextProvider());
      86      224773 :             sal_Int32 nText = rTextProvider.getTextCount();
      87             : 
      88             :             // #i101556# ItemSet has changed -> new version
      89      224773 :             maVersion++;
      90             : 
      91      674319 :             while( --nText >= 0 )
      92             :             {
      93      224773 :                 SdrText* pText = rTextProvider.getText( nText );
      94             : 
      95      224773 :                 OutlinerParaObject* pParaObj = pText ? pText->GetOutlinerParaObject() : 0;
      96             : 
      97      224773 :                 if(pParaObj)
      98             :                 {
      99       47071 :                     const bool bTextEdit = rObj.IsTextEditActive() && (rObj.getActiveText() == pText);
     100             : 
     101             :                     // handle outliner attributes
     102       47071 :                     GetObjectItemSet();
     103       47071 :                     Outliner* pOutliner = rObj.GetTextEditOutliner();
     104             : 
     105       47071 :                     if(!bTextEdit)
     106             :                     {
     107       47071 :                         pOutliner = &rObj.ImpGetDrawOutliner();
     108       47071 :                         pOutliner->SetText(*pParaObj);
     109             :                     }
     110             : 
     111       47071 :                     sal_Int32 nParaCount(pOutliner->GetParagraphCount());
     112             : 
     113       95637 :                     for(sal_Int32 nPara = 0; nPara < nParaCount; nPara++)
     114             :                     {
     115       48566 :                         SfxItemSet aSet(pOutliner->GetParaAttribs(nPara));
     116       48566 :                         aSet.Put(rSet);
     117       48566 :                         pOutliner->SetParaAttribs(nPara, aSet);
     118       48566 :                     }
     119             : 
     120       47071 :                     if(!bTextEdit)
     121             :                     {
     122       47071 :                         if(nParaCount)
     123             :                         {
     124             :                             // force ItemSet
     125       47071 :                             GetObjectItemSet();
     126             : 
     127       47071 :                             SfxItemSet aNewSet(pOutliner->GetParaAttribs(0L));
     128       47071 :                             mpItemSet->Put(aNewSet);
     129             :                         }
     130             : 
     131       47071 :                         OutlinerParaObject* pTemp = pOutliner->CreateParaObject(0, nParaCount);
     132       47071 :                         pOutliner->Clear();
     133             : 
     134       47071 :                         rObj.NbcSetOutlinerParaObjectForText(pTemp,pText);
     135             :                     }
     136             :                 }
     137             :             }
     138             : 
     139             :             // Extra-Repaint for radical layout changes (#43139#)
     140      224773 :             if(SfxItemState::SET == rSet.GetItemState(SDRATTR_TEXT_CONTOURFRAME))
     141             :             {
     142             :                 // Here only repaint wanted
     143          54 :                 rObj.ActionChanged();
     144             :                 //rObj.BroadcastObjectChange();
     145             :             }
     146             : 
     147             :             // call parent
     148      224773 :             AttributeProperties::ItemSetChanged(rSet);
     149      224773 :         }
     150             : 
     151     1397201 :         void TextProperties::ItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem)
     152             :         {
     153     1397201 :             SdrTextObj& rObj = static_cast<SdrTextObj&>(GetSdrObject());
     154             : 
     155             :             // #i25616#
     156     1397201 :             sal_Int32 nOldLineWidth(0L);
     157             : 
     158     1397201 :             if(XATTR_LINEWIDTH == nWhich && rObj.DoesSupportTextIndentingOnLineWidthChange())
     159             :             {
     160       31639 :                 nOldLineWidth = static_cast<const XLineWidthItem&>(GetItem(XATTR_LINEWIDTH)).GetValue();
     161             :             }
     162             : 
     163     1397201 :             if(pNewItem && (SDRATTR_TEXTDIRECTION == nWhich))
     164             :             {
     165       95315 :                 bool bVertical(com::sun::star::text::WritingMode_TB_RL == static_cast<const SvxWritingModeItem*>(pNewItem)->GetValue());
     166       95315 :                 rObj.SetVerticalWriting(bVertical);
     167             :             }
     168             : 
     169             :             // #95501# reset to default
     170     1397201 :             if(!pNewItem && !nWhich && rObj.HasText() )
     171             :             {
     172         406 :                 SdrOutliner& rOutliner = rObj.ImpGetDrawOutliner();
     173             : 
     174         406 :                 const svx::ITextProvider& rTextProvider(getTextProvider());
     175         406 :                 sal_Int32 nCount = rTextProvider.getTextCount();
     176        1218 :                 while( nCount-- )
     177             :                 {
     178         406 :                     SdrText* pText = rTextProvider.getText( nCount );
     179         406 :                     OutlinerParaObject* pParaObj = pText->GetOutlinerParaObject();
     180         406 :                     if( pParaObj )
     181             :                     {
     182         406 :                         rOutliner.SetText(*pParaObj);
     183         406 :                         sal_Int32 nParaCount(rOutliner.GetParagraphCount());
     184             : 
     185         406 :                         if(nParaCount)
     186             :                         {
     187         406 :                             ESelection aSelection( 0, 0, EE_PARA_ALL, EE_TEXTPOS_ALL);
     188         406 :                             rOutliner.RemoveAttribs(aSelection, true, 0);
     189             : 
     190         406 :                             OutlinerParaObject* pTemp = rOutliner.CreateParaObject(0, nParaCount);
     191         406 :                             rOutliner.Clear();
     192             : 
     193         406 :                             rObj.NbcSetOutlinerParaObjectForText( pTemp, pText );
     194             :                         }
     195             :                     }
     196             :                 }
     197             :             }
     198             : 
     199             :             // call parent
     200     1397201 :             AttributeProperties::ItemChange( nWhich, pNewItem );
     201             : 
     202             :             // #i25616#
     203     1397201 :             if(XATTR_LINEWIDTH == nWhich && rObj.DoesSupportTextIndentingOnLineWidthChange())
     204             :             {
     205       31639 :                 const sal_Int32 nNewLineWidth(static_cast<const XLineWidthItem&>(GetItem(XATTR_LINEWIDTH)).GetValue());
     206       31639 :                 const sal_Int32 nDifference((nNewLineWidth - nOldLineWidth) / 2);
     207             : 
     208       31639 :                 if(nDifference)
     209             :                 {
     210        9964 :                     const bool bLineVisible(XLINE_NONE != static_cast<const XLineStyleItem&>(GetItem(XATTR_LINESTYLE)).GetValue());
     211             : 
     212        9964 :                     if(bLineVisible)
     213             :                     {
     214        7958 :                         const sal_Int32 nLeftDist(static_cast<const SdrMetricItem&>(GetItem(SDRATTR_TEXT_LEFTDIST)).GetValue());
     215        7958 :                         const sal_Int32 nRightDist(static_cast<const SdrMetricItem&>(GetItem(SDRATTR_TEXT_RIGHTDIST)).GetValue());
     216        7958 :                         const sal_Int32 nUpperDist(static_cast<const SdrMetricItem&>(GetItem(SDRATTR_TEXT_UPPERDIST)).GetValue());
     217        7958 :                         const sal_Int32 nLowerDist(static_cast<const SdrMetricItem&>(GetItem(SDRATTR_TEXT_LOWERDIST)).GetValue());
     218             : 
     219        7958 :                         SetObjectItemDirect(makeSdrTextLeftDistItem(nLeftDist + nDifference));
     220        7958 :                         SetObjectItemDirect(makeSdrTextRightDistItem(nRightDist + nDifference));
     221        7958 :                         SetObjectItemDirect(makeSdrTextUpperDistItem(nUpperDist + nDifference));
     222        7958 :                         SetObjectItemDirect(makeSdrTextLowerDistItem(nLowerDist + nDifference));
     223             :                     }
     224             :                 }
     225             :             }
     226     1397201 :         }
     227             : 
     228      402900 :         const svx::ITextProvider& TextProperties::getTextProvider() const
     229             :         {
     230      402900 :             return static_cast<const SdrTextObj&>(GetSdrObject());
     231             :         }
     232             : 
     233       66021 :         void TextProperties::SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr)
     234             :         {
     235       66021 :             SdrTextObj& rObj = static_cast<SdrTextObj&>(GetSdrObject());
     236             : 
     237             :             // call parent
     238       66021 :             AttributeProperties::SetStyleSheet(pNewStyleSheet, bDontRemoveHardAttr);
     239             : 
     240             :             // #i101556# StyleSheet has changed -> new version
     241       66021 :             maVersion++;
     242             : 
     243       66021 :             if( rObj.GetModel() /*&& !rObj.IsTextEditActive()*/ && !rObj.IsLinkedText() )
     244             :             {
     245       58283 :                 SdrOutliner& rOutliner = rObj.ImpGetDrawOutliner();
     246             : 
     247       58283 :                 const svx::ITextProvider& rTextProvider(getTextProvider());
     248       58283 :                 sal_Int32 nText = rTextProvider.getTextCount();
     249             : 
     250      174849 :                 while( --nText >= 0 )
     251             :                 {
     252       58283 :                     SdrText* pText = rTextProvider.getText( nText );
     253             : 
     254       58283 :                     OutlinerParaObject* pParaObj = pText ? pText->GetOutlinerParaObject() : 0;
     255       58283 :                     if( !pParaObj )
     256       53287 :                         continue;
     257             : 
     258             :                     // apply StyleSheet to all paragraphs
     259        4996 :                     rOutliner.SetText(*pParaObj);
     260        4996 :                     sal_Int32 nParaCount(rOutliner.GetParagraphCount());
     261             : 
     262        4996 :                     if(nParaCount)
     263             :                     {
     264       12134 :                         for(sal_Int32 nPara = 0; nPara < nParaCount; nPara++)
     265             :                         {
     266        7138 :                             SfxItemSet* pTempSet = 0L;
     267             : 
     268             :                             // since setting the stylesheet removes all para attributes
     269        7138 :                             if(bDontRemoveHardAttr)
     270             :                             {
     271             :                                 // we need to remember them if we want to keep them
     272          74 :                                 pTempSet = new SfxItemSet(rOutliner.GetParaAttribs(nPara));
     273             :                             }
     274             : 
     275        7138 :                             if(GetStyleSheet())
     276             :                             {
     277        7138 :                                 if((OBJ_OUTLINETEXT == rObj.GetTextKind()) && (SdrInventor == rObj.GetObjInventor()))
     278             :                                 {
     279        2954 :                                     OUString aNewStyleSheetName(GetStyleSheet()->GetName());
     280        2954 :                                     aNewStyleSheetName = aNewStyleSheetName.copy(0, aNewStyleSheetName.getLength() - 1);
     281        2954 :                                     sal_Int16 nDepth = rOutliner.GetDepth(nPara);
     282        2954 :                                     aNewStyleSheetName += OUString::number( nDepth <= 0 ? 1 : nDepth + 1);
     283             : 
     284        2954 :                                     SdrModel* pModel = rObj.GetModel();
     285        2954 :                                     SfxStyleSheetBasePool* pStylePool = (pModel != NULL) ? pModel->GetStyleSheetPool() : 0L;
     286        2954 :                                     SfxStyleSheet* pNewStyle = NULL;
     287        2954 :                                     if(pStylePool)
     288        2954 :                                         pNewStyle = static_cast<SfxStyleSheet*>(pStylePool->Find(aNewStyleSheetName, GetStyleSheet()->GetFamily()));
     289             :                                     DBG_ASSERT( pNewStyle, "AutoStyleSheetName - Style not found!" );
     290             : 
     291        2954 :                                     if(pNewStyle)
     292             :                                     {
     293        2954 :                                         rOutliner.SetStyleSheet(nPara, pNewStyle);
     294        2954 :                                     }
     295             :                                 }
     296             :                                 else
     297             :                                 {
     298        4184 :                                     rOutliner.SetStyleSheet(nPara, GetStyleSheet());
     299             :                                 }
     300             :                             }
     301             :                             else
     302             :                             {
     303             :                                 // remove StyleSheet
     304           0 :                                 rOutliner.SetStyleSheet(nPara, 0L);
     305             :                             }
     306             : 
     307        7138 :                             if(bDontRemoveHardAttr)
     308             :                             {
     309          74 :                                 if(pTempSet)
     310             :                                 {
     311             :                                     // restore para attributes
     312          74 :                                     rOutliner.SetParaAttribs(nPara, *pTempSet);
     313             :                                 }
     314             :                             }
     315             :                             else
     316             :                             {
     317        7064 :                                 if(pNewStyleSheet)
     318             :                                 {
     319             :                                     // remove all hard paragraph attributes
     320             :                                     // which occur in StyleSheet, take care of
     321             :                                     // parents (!)
     322        7064 :                                     SfxItemIter aIter(pNewStyleSheet->GetItemSet());
     323        7064 :                                     const SfxPoolItem* pItem = aIter.FirstItem();
     324             : 
     325      193470 :                                     while(pItem)
     326             :                                     {
     327      179342 :                                         if(!IsInvalidItem(pItem))
     328             :                                         {
     329      179342 :                                             sal_uInt16 nW(pItem->Which());
     330             : 
     331      179342 :                                             if(nW >= EE_ITEMS_START && nW <= EE_ITEMS_END)
     332             :                                             {
     333      150378 :                                                 rOutliner.RemoveCharAttribs(nPara, nW);
     334             :                                             }
     335             :                                         }
     336      179342 :                                         pItem = aIter.NextItem();
     337        7064 :                                     }
     338             :                                 }
     339             :                             }
     340             : 
     341        7138 :                             if(pTempSet)
     342             :                             {
     343          74 :                                 delete pTempSet;
     344             :                             }
     345             :                         }
     346             : 
     347        4996 :                         OutlinerParaObject* pTemp = rOutliner.CreateParaObject(0, nParaCount);
     348        4996 :                         rOutliner.Clear();
     349        4996 :                         rObj.NbcSetOutlinerParaObjectForText(pTemp, pText);
     350             :                     }
     351             :                 }
     352             :             }
     353             : 
     354       66021 :             if(rObj.IsTextFrame())
     355             :             {
     356       34637 :                 rObj.NbcAdjustTextFrameWidthAndHeight();
     357             :             }
     358       66021 :         }
     359             : 
     360       51661 :         void TextProperties::ForceDefaultAttributes()
     361             :         {
     362       51661 :             SdrTextObj& rObj = static_cast<SdrTextObj&>(GetSdrObject());
     363             : 
     364       51661 :             if( rObj.GetObjInventor() == SdrInventor )
     365             :             {
     366       50989 :                 const sal_uInt16 nSdrObjKind = rObj.GetObjIdentifier();
     367             : 
     368       50989 :                 if( nSdrObjKind == OBJ_TITLETEXT || nSdrObjKind == OBJ_OUTLINETEXT )
     369       53663 :                     return; // no defaults for presentation objects
     370             :             }
     371             : 
     372       49659 :             bool bTextFrame(rObj.IsTextFrame());
     373             : 
     374             :             // force ItemSet
     375       49659 :             GetObjectItemSet();
     376             : 
     377       49659 :             if(bTextFrame)
     378             :             {
     379       19747 :                 mpItemSet->Put(XLineStyleItem(XLINE_NONE));
     380       19747 :                 mpItemSet->Put(XFillColorItem(OUString(), Color(COL_WHITE)));
     381       19747 :                 mpItemSet->Put(XFillStyleItem(drawing::FillStyle_NONE));
     382             :             }
     383             :             else
     384             :             {
     385       29912 :                 mpItemSet->Put(SvxAdjustItem(SVX_ADJUST_CENTER, EE_PARA_JUST));
     386       29912 :                 mpItemSet->Put(SdrTextHorzAdjustItem(SDRTEXTHORZADJUST_CENTER));
     387       29912 :                 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      125691 :         void TextProperties::Notify(SfxBroadcaster& rBC, const SfxHint& rHint)
     549             :         {
     550             :             // call parent
     551      125691 :             AttributeProperties::Notify(rBC, rHint);
     552             : 
     553      125691 :             SdrTextObj& rObj = static_cast<SdrTextObj&>(GetSdrObject());
     554      125691 :             if(rObj.HasText())
     555             :             {
     556      119490 :                 const svx::ITextProvider& rTextProvider(getTextProvider());
     557      119490 :                 if(HAS_BASE(SfxStyleSheet, &rBC))
     558             :                 {
     559       74952 :                     const SfxSimpleHint* pSimple = dynamic_cast<const SfxSimpleHint*>(&rHint);
     560       74952 :                     sal_uInt32 nId(pSimple ? pSimple->GetId() : 0L);
     561             : 
     562       74952 :                     if(SFX_HINT_DATACHANGED == nId)
     563             :                     {
     564       74952 :                         rObj.SetPortionInfoChecked(false);
     565             : 
     566       74952 :                         sal_Int32 nText = rTextProvider.getTextCount();
     567      149904 :                         while( --nText > 0 )
     568             :                         {
     569           0 :                             OutlinerParaObject* pParaObj = rTextProvider.getText( nText )->GetOutlinerParaObject();
     570           0 :                             if( pParaObj )
     571           0 :                                 pParaObj->ClearPortionInfo();
     572             :                         }
     573       74952 :                         rObj.SetTextSizeDirty();
     574             : 
     575       74952 :                         if(rObj.IsTextFrame() && rObj.NbcAdjustTextFrameWidthAndHeight())
     576             :                         {
     577             :                             // here only repaint wanted
     578          32 :                             rObj.ActionChanged();
     579             :                             //rObj.BroadcastObjectChange();
     580             :                         }
     581             : 
     582             :                         // #i101556# content of StyleSheet has changed -> new version
     583       74952 :                         maVersion++;
     584             :                     }
     585             : 
     586       74952 :                     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       44538 :                 else if(HAS_BASE(SfxStyleSheetBasePool, &rBC))
     599             :                 {
     600       44538 :                     const SfxStyleSheetHintExtended* pExtendedHint = dynamic_cast<const SfxStyleSheetHintExtended*>(&rHint);
     601             : 
     602       44538 :                     if(pExtendedHint
     603       44538 :                         && SFX_STYLESHEET_MODIFIED == pExtendedHint->GetHint())
     604             :                     {
     605       29984 :                         OUString aOldName(pExtendedHint->GetOldName());
     606       59968 :                         OUString aNewName(pExtendedHint->GetStyleSheet()->GetName());
     607       29984 :                         SfxStyleFamily eFamily = pExtendedHint->GetStyleSheet()->GetFamily();
     608             : 
     609       29984 :                         if(aOldName != aNewName)
     610             :                         {
     611       29984 :                             sal_Int32 nText = rTextProvider.getTextCount();
     612       59968 :                             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       29984 :                         }
     619             :                     }
     620             :                 }
     621             :             }
     622      125691 :         }
     623             : 
     624             :         // #i101556# Handout version information
     625       19751 :         sal_uInt32 TextProperties::getVersion() const
     626             :         {
     627       19751 :             return maVersion;
     628             :         }
     629             :     } // end of namespace properties
     630         651 : } // end of namespace sdr
     631             : 
     632             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10