1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_svx.hxx" 26 #include <svx/sdr/properties/customshapeproperties.hxx> 27 #include <svl/itemset.hxx> 28 #include <svl/style.hxx> 29 #include <svx/svdoashp.hxx> 30 #include <editeng/eeitem.hxx> 31 #include <svx/sdtagitm.hxx> 32 #include <svl/whiter.hxx> 33 #include <svl/itemset.hxx> 34 #include <svl/smplhint.hxx> 35 36 ////////////////////////////////////////////////////////////////////////////// 37 38 namespace sdr 39 { 40 namespace properties 41 { 42 void CustomShapeProperties::UpdateTextFrameStatus() 43 { 44 SdrTextObj& rObj = (SdrTextObj&)GetSdrObject(); 45 SdrTextAutoGrowHeightItem& rAutoGrowHeightItem = 46 (SdrTextAutoGrowHeightItem&)rObj.GetMergedItem( SDRATTR_TEXT_AUTOGROWHEIGHT ); 47 rObj.bTextFrame = rAutoGrowHeightItem.GetValue() != 0; 48 49 if ( rObj.bTextFrame ) 50 rObj.NbcAdjustTextFrameWidthAndHeight(); 51 } 52 53 SfxItemSet& CustomShapeProperties::CreateObjectSpecificItemSet(SfxItemPool& rPool) 54 { 55 return *(new SfxItemSet(rPool, 56 57 // ranges from SdrAttrObj 58 SDRATTR_START, SDRATTR_SHADOW_LAST, 59 SDRATTR_MISC_FIRST, SDRATTR_MISC_LAST, 60 SDRATTR_TEXTDIRECTION, SDRATTR_TEXTDIRECTION, 61 62 // Graphic Attributes 63 SDRATTR_GRAF_FIRST, SDRATTR_GRAF_LAST, 64 65 // 3d Properties 66 SDRATTR_3D_FIRST, SDRATTR_3D_LAST, 67 68 // CustomShape properties 69 SDRATTR_CUSTOMSHAPE_FIRST, SDRATTR_CUSTOMSHAPE_LAST, 70 71 // range from SdrTextObj 72 EE_ITEMS_START, EE_ITEMS_END, 73 74 // end 75 0, 0)); 76 } 77 sal_Bool CustomShapeProperties::AllowItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem ) const 78 { 79 sal_Bool bAllowItemChange = sal_True; 80 if ( !pNewItem ) 81 { 82 if ( ( nWhich >= SDRATTR_CUSTOMSHAPE_FIRST ) && ( nWhich <= SDRATTR_CUSTOMSHAPE_LAST ) ) 83 bAllowItemChange = sal_False; 84 } 85 if ( bAllowItemChange ) 86 bAllowItemChange = TextProperties::AllowItemChange( nWhich, pNewItem ); 87 return bAllowItemChange; 88 } 89 void CustomShapeProperties::ClearObjectItem(const sal_uInt16 nWhich) 90 { 91 if ( !nWhich ) 92 { 93 SfxWhichIter aIter( *mpItemSet ); 94 sal_uInt16 nWhich2 = aIter.FirstWhich(); 95 while( nWhich2 ) 96 { 97 TextProperties::ClearObjectItemDirect( nWhich2 ); 98 nWhich2 = aIter.NextWhich(); 99 } 100 SfxItemSet aSet((SfxItemPool&)(*GetSdrObject().GetObjectItemPool())); 101 ItemSetChanged(aSet); 102 } 103 else 104 TextProperties::ClearObjectItem( nWhich ); 105 } 106 void CustomShapeProperties::ClearObjectItemDirect(const sal_uInt16 nWhich) 107 { 108 if ( !nWhich ) 109 { 110 SfxWhichIter aIter( *mpItemSet ); 111 sal_uInt16 nWhich2 = aIter.FirstWhich(); 112 while( nWhich2 ) 113 { 114 TextProperties::ClearObjectItemDirect( nWhich2 ); 115 nWhich2 = aIter.NextWhich(); 116 } 117 } 118 else 119 TextProperties::ClearObjectItemDirect( nWhich ); 120 } 121 void CustomShapeProperties::ItemSetChanged(const SfxItemSet& rSet) 122 { 123 SdrObjCustomShape& rObj = (SdrObjCustomShape&)GetSdrObject(); 124 125 if( SFX_ITEM_SET == rSet.GetItemState( SDRATTR_TEXT_AUTOGROWHEIGHT ) ) 126 { 127 rObj.bTextFrame = ((SdrTextAutoGrowHeightItem&)rSet.Get( SDRATTR_TEXT_AUTOGROWHEIGHT )).GetValue() != 0; 128 } 129 130 // call parent 131 TextProperties::ItemSetChanged(rSet); 132 133 // local changes, removing cached objects 134 rObj.InvalidateRenderGeometry(); 135 } 136 void CustomShapeProperties::ItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem) 137 { 138 SdrObjCustomShape& rObj = (SdrObjCustomShape&)GetSdrObject(); 139 //OutlinerParaObject* pParaObj = rObj.GetOutlinerParaObject(); 140 141 if( pNewItem && ( SDRATTR_TEXT_AUTOGROWHEIGHT == nWhich ) ) 142 { 143 rObj.bTextFrame = ((SdrTextAutoGrowHeightItem*)pNewItem)->GetValue() != 0; 144 } 145 // call parent 146 TextProperties::ItemChange( nWhich, pNewItem ); 147 148 rObj.InvalidateRenderGeometry(); 149 } 150 void CustomShapeProperties::SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr) 151 { 152 TextProperties::SetStyleSheet( pNewStyleSheet, bDontRemoveHardAttr ); 153 UpdateTextFrameStatus(); 154 } 155 void CustomShapeProperties::ForceDefaultAttributes() 156 { 157 UpdateTextFrameStatus(); 158 159 /* SJ: Following is no good if creating customshapes, leading to objects that are white after loading via xml 160 161 SdrTextObj& rObj = (SdrTextObj&)GetSdrObject(); 162 sal_Bool bTextFrame(rObj.IsTextFrame()); 163 164 // force ItemSet 165 GetObjectItemSet(); 166 167 if(bTextFrame) 168 { 169 mpItemSet->Put(XLineStyleItem(XLINE_NONE)); 170 mpItemSet->Put(XFillColorItem(String(), Color(COL_WHITE))); 171 mpItemSet->Put(XFillStyleItem(XFILL_NONE)); 172 } 173 else 174 { 175 mpItemSet->Put(SvxAdjustItem(SVX_ADJUST_CENTER)); 176 mpItemSet->Put(SdrTextHorzAdjustItem(SDRTEXTHORZADJUST_CENTER)); 177 mpItemSet->Put(SdrTextVertAdjustItem(SDRTEXTVERTADJUST_CENTER)); 178 } 179 */ 180 } 181 CustomShapeProperties::CustomShapeProperties(SdrObject& rObj) 182 : TextProperties(rObj) 183 { 184 } 185 186 CustomShapeProperties::CustomShapeProperties(const CustomShapeProperties& rProps, SdrObject& rObj) 187 : TextProperties(rProps, rObj) 188 { 189 } 190 191 CustomShapeProperties::~CustomShapeProperties() 192 { 193 } 194 195 BaseProperties& CustomShapeProperties::Clone(SdrObject& rObj) const 196 { 197 return *(new CustomShapeProperties(*this, rObj)); 198 } 199 void CustomShapeProperties::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) 200 { 201 TextProperties::Notify( rBC, rHint ); 202 203 sal_Bool bRemoveRenderGeometry = sal_False; 204 205 const SfxStyleSheetHint *pStyleHint = PTR_CAST( SfxStyleSheetHint, &rHint ); 206 const SfxSimpleHint *pSimpleHint = PTR_CAST( SfxSimpleHint, &rHint ); 207 if ( pStyleHint && pStyleHint->GetStyleSheet() == GetStyleSheet() ) 208 { 209 switch( pStyleHint->GetHint() ) 210 { 211 case SFX_STYLESHEET_MODIFIED : 212 case SFX_STYLESHEET_CHANGED : 213 bRemoveRenderGeometry = sal_True; 214 break; 215 }; 216 } 217 else if ( pSimpleHint && pSimpleHint->GetId() == SFX_HINT_DATACHANGED ) 218 { 219 bRemoveRenderGeometry = sal_True; 220 } 221 if ( bRemoveRenderGeometry ) 222 { 223 UpdateTextFrameStatus(); 224 225 // local changes, removing cached objects 226 SdrObjCustomShape& rObj = (SdrObjCustomShape&)GetSdrObject(); 227 rObj.InvalidateRenderGeometry(); 228 } 229 230 } 231 } // end of namespace properties 232 } // end of namespace sdr 233 234 ////////////////////////////////////////////////////////////////////////////// 235 // eof 236