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/defaultproperties.hxx> 27*b1cdbd2cSJim Jagielski #include <svx/sdr/properties/itemsettools.hxx> 28*b1cdbd2cSJim Jagielski #include <svl/itemset.hxx> 29*b1cdbd2cSJim Jagielski #include <svl/whiter.hxx> 30*b1cdbd2cSJim Jagielski 31*b1cdbd2cSJim Jagielski #include <vector> 32*b1cdbd2cSJim Jagielski #include <svx/svdobj.hxx> 33*b1cdbd2cSJim Jagielski #include <svx/svddef.hxx> 34*b1cdbd2cSJim Jagielski #include <svx/svdpool.hxx> 35*b1cdbd2cSJim Jagielski #include <editeng/eeitem.hxx> 36*b1cdbd2cSJim Jagielski 37*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 38*b1cdbd2cSJim Jagielski 39*b1cdbd2cSJim Jagielski namespace sdr 40*b1cdbd2cSJim Jagielski { 41*b1cdbd2cSJim Jagielski namespace properties 42*b1cdbd2cSJim Jagielski { CreateObjectSpecificItemSet(SfxItemPool & rPool)43*b1cdbd2cSJim Jagielski SfxItemSet& DefaultProperties::CreateObjectSpecificItemSet(SfxItemPool& rPool) 44*b1cdbd2cSJim Jagielski { 45*b1cdbd2cSJim Jagielski // Basic implementation; Basic object has NO attributes 46*b1cdbd2cSJim Jagielski return *(new SfxItemSet(rPool)); 47*b1cdbd2cSJim Jagielski } 48*b1cdbd2cSJim Jagielski DefaultProperties(SdrObject & rObj)49*b1cdbd2cSJim Jagielski DefaultProperties::DefaultProperties(SdrObject& rObj) 50*b1cdbd2cSJim Jagielski : BaseProperties(rObj), 51*b1cdbd2cSJim Jagielski mpItemSet(0L) 52*b1cdbd2cSJim Jagielski { 53*b1cdbd2cSJim Jagielski } 54*b1cdbd2cSJim Jagielski DefaultProperties(const DefaultProperties & rProps,SdrObject & rObj)55*b1cdbd2cSJim Jagielski DefaultProperties::DefaultProperties(const DefaultProperties& rProps, SdrObject& rObj) 56*b1cdbd2cSJim Jagielski : BaseProperties(rObj), 57*b1cdbd2cSJim Jagielski mpItemSet(0L) 58*b1cdbd2cSJim Jagielski { 59*b1cdbd2cSJim Jagielski if(rProps.mpItemSet) 60*b1cdbd2cSJim Jagielski { 61*b1cdbd2cSJim Jagielski mpItemSet = rProps.mpItemSet->Clone(sal_True); 62*b1cdbd2cSJim Jagielski 63*b1cdbd2cSJim Jagielski // do not keep parent info, this may be changed by later construrtors. 64*b1cdbd2cSJim Jagielski // This class just copies the ItemSet, ignore parent. 65*b1cdbd2cSJim Jagielski if(mpItemSet && mpItemSet->GetParent()) 66*b1cdbd2cSJim Jagielski { 67*b1cdbd2cSJim Jagielski mpItemSet->SetParent(0L); 68*b1cdbd2cSJim Jagielski } 69*b1cdbd2cSJim Jagielski } 70*b1cdbd2cSJim Jagielski } 71*b1cdbd2cSJim Jagielski Clone(SdrObject & rObj) const72*b1cdbd2cSJim Jagielski BaseProperties& DefaultProperties::Clone(SdrObject& rObj) const 73*b1cdbd2cSJim Jagielski { 74*b1cdbd2cSJim Jagielski return *(new DefaultProperties(*this, rObj)); 75*b1cdbd2cSJim Jagielski } 76*b1cdbd2cSJim Jagielski ~DefaultProperties()77*b1cdbd2cSJim Jagielski DefaultProperties::~DefaultProperties() 78*b1cdbd2cSJim Jagielski { 79*b1cdbd2cSJim Jagielski if(mpItemSet) 80*b1cdbd2cSJim Jagielski { 81*b1cdbd2cSJim Jagielski delete mpItemSet; 82*b1cdbd2cSJim Jagielski mpItemSet = 0L; 83*b1cdbd2cSJim Jagielski } 84*b1cdbd2cSJim Jagielski } 85*b1cdbd2cSJim Jagielski GetObjectItemSet() const86*b1cdbd2cSJim Jagielski const SfxItemSet& DefaultProperties::GetObjectItemSet() const 87*b1cdbd2cSJim Jagielski { 88*b1cdbd2cSJim Jagielski if(!mpItemSet) 89*b1cdbd2cSJim Jagielski { 90*b1cdbd2cSJim Jagielski ((DefaultProperties*)this)->mpItemSet = &(((DefaultProperties*)this)->CreateObjectSpecificItemSet(*GetSdrObject().GetObjectItemPool())); 91*b1cdbd2cSJim Jagielski ((DefaultProperties*)this)->ForceDefaultAttributes(); 92*b1cdbd2cSJim Jagielski } 93*b1cdbd2cSJim Jagielski 94*b1cdbd2cSJim Jagielski DBG_ASSERT(mpItemSet, "Could not create an SfxItemSet(!)"); 95*b1cdbd2cSJim Jagielski 96*b1cdbd2cSJim Jagielski return *mpItemSet; 97*b1cdbd2cSJim Jagielski } 98*b1cdbd2cSJim Jagielski SetObjectItem(const SfxPoolItem & rItem)99*b1cdbd2cSJim Jagielski void DefaultProperties::SetObjectItem(const SfxPoolItem& rItem) 100*b1cdbd2cSJim Jagielski { 101*b1cdbd2cSJim Jagielski const sal_uInt16 nWhichID(rItem.Which()); 102*b1cdbd2cSJim Jagielski 103*b1cdbd2cSJim Jagielski if(AllowItemChange(nWhichID, &rItem)) 104*b1cdbd2cSJim Jagielski { 105*b1cdbd2cSJim Jagielski ItemChange(nWhichID, &rItem); 106*b1cdbd2cSJim Jagielski PostItemChange(nWhichID); 107*b1cdbd2cSJim Jagielski 108*b1cdbd2cSJim Jagielski SfxItemSet aSet(*GetSdrObject().GetObjectItemPool(), nWhichID, nWhichID); 109*b1cdbd2cSJim Jagielski aSet.Put(rItem); 110*b1cdbd2cSJim Jagielski ItemSetChanged(aSet); 111*b1cdbd2cSJim Jagielski } 112*b1cdbd2cSJim Jagielski } 113*b1cdbd2cSJim Jagielski SetObjectItemDirect(const SfxPoolItem & rItem)114*b1cdbd2cSJim Jagielski void DefaultProperties::SetObjectItemDirect(const SfxPoolItem& rItem) 115*b1cdbd2cSJim Jagielski { 116*b1cdbd2cSJim Jagielski const sal_uInt16 nWhichID(rItem.Which()); 117*b1cdbd2cSJim Jagielski 118*b1cdbd2cSJim Jagielski if(AllowItemChange(nWhichID, &rItem)) 119*b1cdbd2cSJim Jagielski { 120*b1cdbd2cSJim Jagielski ItemChange(nWhichID, &rItem); 121*b1cdbd2cSJim Jagielski } 122*b1cdbd2cSJim Jagielski } 123*b1cdbd2cSJim Jagielski ClearObjectItem(const sal_uInt16 nWhich)124*b1cdbd2cSJim Jagielski void DefaultProperties::ClearObjectItem(const sal_uInt16 nWhich) 125*b1cdbd2cSJim Jagielski { 126*b1cdbd2cSJim Jagielski if(AllowItemChange(nWhich)) 127*b1cdbd2cSJim Jagielski { 128*b1cdbd2cSJim Jagielski ItemChange(nWhich); 129*b1cdbd2cSJim Jagielski PostItemChange(nWhich); 130*b1cdbd2cSJim Jagielski 131*b1cdbd2cSJim Jagielski if(nWhich) 132*b1cdbd2cSJim Jagielski { 133*b1cdbd2cSJim Jagielski SfxItemSet aSet(*GetSdrObject().GetObjectItemPool(), nWhich, nWhich, 0, 0); 134*b1cdbd2cSJim Jagielski ItemSetChanged(aSet); 135*b1cdbd2cSJim Jagielski } 136*b1cdbd2cSJim Jagielski } 137*b1cdbd2cSJim Jagielski } 138*b1cdbd2cSJim Jagielski ClearObjectItemDirect(const sal_uInt16 nWhich)139*b1cdbd2cSJim Jagielski void DefaultProperties::ClearObjectItemDirect(const sal_uInt16 nWhich) 140*b1cdbd2cSJim Jagielski { 141*b1cdbd2cSJim Jagielski if(AllowItemChange(nWhich)) 142*b1cdbd2cSJim Jagielski { 143*b1cdbd2cSJim Jagielski ItemChange(nWhich); 144*b1cdbd2cSJim Jagielski } 145*b1cdbd2cSJim Jagielski } 146*b1cdbd2cSJim Jagielski SetObjectItemSet(const SfxItemSet & rSet)147*b1cdbd2cSJim Jagielski void DefaultProperties::SetObjectItemSet(const SfxItemSet& rSet) 148*b1cdbd2cSJim Jagielski { 149*b1cdbd2cSJim Jagielski SfxWhichIter aWhichIter(rSet); 150*b1cdbd2cSJim Jagielski sal_uInt16 nWhich(aWhichIter.FirstWhich()); 151*b1cdbd2cSJim Jagielski const SfxPoolItem *pPoolItem; 152*b1cdbd2cSJim Jagielski std::vector< sal_uInt16 > aPostItemChangeList; 153*b1cdbd2cSJim Jagielski sal_Bool bDidChange(sal_False); 154*b1cdbd2cSJim Jagielski SfxItemSet aSet(*GetSdrObject().GetObjectItemPool(), SDRATTR_START, EE_ITEMS_END, 0, 0); 155*b1cdbd2cSJim Jagielski 156*b1cdbd2cSJim Jagielski // give a hint to STL_Vector 157*b1cdbd2cSJim Jagielski aPostItemChangeList.reserve(rSet.Count()); 158*b1cdbd2cSJim Jagielski 159*b1cdbd2cSJim Jagielski while(nWhich) 160*b1cdbd2cSJim Jagielski { 161*b1cdbd2cSJim Jagielski if(SFX_ITEM_SET == rSet.GetItemState(nWhich, sal_False, &pPoolItem)) 162*b1cdbd2cSJim Jagielski { 163*b1cdbd2cSJim Jagielski if(AllowItemChange(nWhich, pPoolItem)) 164*b1cdbd2cSJim Jagielski { 165*b1cdbd2cSJim Jagielski bDidChange = sal_True; 166*b1cdbd2cSJim Jagielski ItemChange(nWhich, pPoolItem); 167*b1cdbd2cSJim Jagielski aPostItemChangeList.push_back( nWhich ); 168*b1cdbd2cSJim Jagielski aSet.Put(*pPoolItem); 169*b1cdbd2cSJim Jagielski } 170*b1cdbd2cSJim Jagielski } 171*b1cdbd2cSJim Jagielski 172*b1cdbd2cSJim Jagielski nWhich = aWhichIter.NextWhich(); 173*b1cdbd2cSJim Jagielski } 174*b1cdbd2cSJim Jagielski 175*b1cdbd2cSJim Jagielski if(bDidChange) 176*b1cdbd2cSJim Jagielski { 177*b1cdbd2cSJim Jagielski std::vector< sal_uInt16 >::iterator aIter = aPostItemChangeList.begin(); 178*b1cdbd2cSJim Jagielski const std::vector< sal_uInt16 >::iterator aEnd = aPostItemChangeList.end(); 179*b1cdbd2cSJim Jagielski 180*b1cdbd2cSJim Jagielski while(aIter != aEnd) 181*b1cdbd2cSJim Jagielski { 182*b1cdbd2cSJim Jagielski PostItemChange(*aIter); 183*b1cdbd2cSJim Jagielski aIter++; 184*b1cdbd2cSJim Jagielski } 185*b1cdbd2cSJim Jagielski 186*b1cdbd2cSJim Jagielski ItemSetChanged(aSet); 187*b1cdbd2cSJim Jagielski } 188*b1cdbd2cSJim Jagielski } 189*b1cdbd2cSJim Jagielski ItemSetChanged(const SfxItemSet &)190*b1cdbd2cSJim Jagielski void DefaultProperties::ItemSetChanged(const SfxItemSet& /*rSet*/) 191*b1cdbd2cSJim Jagielski { 192*b1cdbd2cSJim Jagielski } 193*b1cdbd2cSJim Jagielski AllowItemChange(const sal_uInt16,const SfxPoolItem *) const194*b1cdbd2cSJim Jagielski sal_Bool DefaultProperties::AllowItemChange(const sal_uInt16 /*nWhich*/, const SfxPoolItem* /*pNewItem*/) const 195*b1cdbd2cSJim Jagielski { 196*b1cdbd2cSJim Jagielski return sal_True; 197*b1cdbd2cSJim Jagielski } 198*b1cdbd2cSJim Jagielski ItemChange(const sal_uInt16,const SfxPoolItem *)199*b1cdbd2cSJim Jagielski void DefaultProperties::ItemChange(const sal_uInt16 /*nWhich*/, const SfxPoolItem* /*pNewItem*/) 200*b1cdbd2cSJim Jagielski { 201*b1cdbd2cSJim Jagielski } 202*b1cdbd2cSJim Jagielski PostItemChange(const sal_uInt16 nWhich)203*b1cdbd2cSJim Jagielski void DefaultProperties::PostItemChange(const sal_uInt16 nWhich ) 204*b1cdbd2cSJim Jagielski { 205*b1cdbd2cSJim Jagielski if( (nWhich == XATTR_FILLSTYLE) && (mpItemSet != NULL) ) 206*b1cdbd2cSJim Jagielski CleanupFillProperties(*mpItemSet); 207*b1cdbd2cSJim Jagielski } 208*b1cdbd2cSJim Jagielski SetStyleSheet(SfxStyleSheet *,sal_Bool)209*b1cdbd2cSJim Jagielski void DefaultProperties::SetStyleSheet(SfxStyleSheet* /*pNewStyleSheet*/, sal_Bool /*bDontRemoveHardAttr*/) 210*b1cdbd2cSJim Jagielski { 211*b1cdbd2cSJim Jagielski // no StyleSheet in DefaultProperties 212*b1cdbd2cSJim Jagielski } 213*b1cdbd2cSJim Jagielski GetStyleSheet() const214*b1cdbd2cSJim Jagielski SfxStyleSheet* DefaultProperties::GetStyleSheet() const 215*b1cdbd2cSJim Jagielski { 216*b1cdbd2cSJim Jagielski // no StyleSheet in DefaultProperties 217*b1cdbd2cSJim Jagielski return 0L; 218*b1cdbd2cSJim Jagielski } 219*b1cdbd2cSJim Jagielski ForceDefaultAttributes()220*b1cdbd2cSJim Jagielski void DefaultProperties::ForceDefaultAttributes() 221*b1cdbd2cSJim Jagielski { 222*b1cdbd2cSJim Jagielski } 223*b1cdbd2cSJim Jagielski Scale(const Fraction & rScale)224*b1cdbd2cSJim Jagielski void DefaultProperties::Scale(const Fraction& rScale) 225*b1cdbd2cSJim Jagielski { 226*b1cdbd2cSJim Jagielski if(mpItemSet) 227*b1cdbd2cSJim Jagielski { 228*b1cdbd2cSJim Jagielski ScaleItemSet(*mpItemSet, rScale); 229*b1cdbd2cSJim Jagielski } 230*b1cdbd2cSJim Jagielski } 231*b1cdbd2cSJim Jagielski } // end of namespace properties 232*b1cdbd2cSJim Jagielski } // end of namespace sdr 233*b1cdbd2cSJim Jagielski 234*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////// 235*b1cdbd2cSJim Jagielski // eof 236