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