xref: /AOO41X/main/svx/source/sdr/properties/properties.cxx (revision f6e50924346d0b8c0b07c91832a97665dd718b0c)
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/properties.hxx>
27 #include <svx/sdr/properties/itemsettools.hxx>
28 #include <svl/itemset.hxx>
29 #include <svx/svdogrp.hxx>
30 #include <svx/svditer.hxx>
31 #include <svx/xfillit0.hxx>
32 
33 //////////////////////////////////////////////////////////////////////////////
34 
35 namespace sdr
36 {
37     namespace properties
38     {
BaseProperties(SdrObject & rObj)39         BaseProperties::BaseProperties(SdrObject& rObj)
40         :   mrObject(rObj)
41         {
42         }
43 
BaseProperties(const BaseProperties &,SdrObject & rObj)44         BaseProperties::BaseProperties(const BaseProperties& /*rProps*/, SdrObject& rObj)
45         :   mrObject(rObj)
46         {
47         }
48 
~BaseProperties()49         BaseProperties::~BaseProperties()
50         {
51         }
52 
GetMergedItemSet() const53         const SfxItemSet& BaseProperties::GetMergedItemSet() const
54         {
55             // default implementation falls back to GetObjectItemSet()
56             return GetObjectItemSet();
57         }
58 
SetMergedItemSet(const SfxItemSet & rSet,sal_Bool bClearAllItems)59         void BaseProperties::SetMergedItemSet(const SfxItemSet& rSet, sal_Bool bClearAllItems)
60         {
61             // clear items if requested
62             if(bClearAllItems)
63             {
64                 ClearObjectItem();
65             }
66 
67             // default implementation falls back to SetObjectItemSet()
68             SetObjectItemSet(rSet);
69         }
70 
SetMergedItem(const SfxPoolItem & rItem)71         void BaseProperties::SetMergedItem(const SfxPoolItem& rItem)
72         {
73             // default implementation falls back to SetObjectItem()
74             SetObjectItem(rItem);
75         }
76 
ClearMergedItem(const sal_uInt16 nWhich)77         void BaseProperties::ClearMergedItem(const sal_uInt16 nWhich)
78         {
79             // default implementation falls back to ClearObjectItem()
80             ClearObjectItem(nWhich);
81         }
82 
Scale(const Fraction &)83         void BaseProperties::Scale(const Fraction& /*rScale*/)
84         {
85             // default implementation does nothing; overload where
86             // an ItemSet is implemented.
87         }
88 
MoveToItemPool(SfxItemPool *,SfxItemPool *,SdrModel *)89         void BaseProperties::MoveToItemPool(SfxItemPool* /*pSrcPool*/, SfxItemPool* /*pDestPool*/, SdrModel* /*pNewModel*/)
90         {
91             // Move properties to a new ItemPool. Default implementation does nothing.
92             // Overload where an ItemSet is implemented.
93         }
94 
SetModel(SdrModel *,SdrModel *)95         void BaseProperties::SetModel(SdrModel* /*pOldModel*/, SdrModel* /*pNewModel*/)
96         {
97             // Set new model. Default implementation does nothing.
98             // Overload where an ItemSet is implemented.
99         }
100 
ForceStyleToHardAttributes()101         void BaseProperties::ForceStyleToHardAttributes()
102         {
103             // force all attributes which come from styles to hard attributes
104             // to be able to live without the style. Default implementation does nothing.
105             // Overload where an ItemSet is implemented.
106         }
107 
108         //void BaseProperties::SetItemAndBroadcast(const SfxPoolItem& rItem)
109         //{
110         //  ItemChangeBroadcaster aC(GetSdrObject());
111         //  SetObjectItem(rItem);
112         //  BroadcastItemChange(aC);
113         //}
114 
115         //void BaseProperties::ClearItemAndBroadcast(const sal_uInt16 nWhich)
116         //{
117         //  ItemChangeBroadcaster aC(GetSdrObject());
118         //  ClearObjectItem(nWhich);
119         //  BroadcastItemChange(aC);
120         //}
121 
SetMergedItemSetAndBroadcast(const SfxItemSet & rSet,sal_Bool bClearAllItems)122         void BaseProperties::SetMergedItemSetAndBroadcast(const SfxItemSet& rSet, sal_Bool bClearAllItems)
123         {
124             ItemChangeBroadcaster aC(GetSdrObject());
125 
126             if(bClearAllItems)
127             {
128                 ClearObjectItem();
129             }
130 
131             SetMergedItemSet(rSet);
132             BroadcastItemChange(aC);
133         }
134 
GetItem(const sal_uInt16 nWhich) const135         const SfxPoolItem& BaseProperties::GetItem(const sal_uInt16 nWhich) const
136         {
137             return GetObjectItemSet().Get(nWhich);
138         }
139 
BroadcastItemChange(const ItemChangeBroadcaster & rChange)140         void BaseProperties::BroadcastItemChange(const ItemChangeBroadcaster& rChange)
141         {
142             const sal_uInt32 nCount(rChange.GetRectangleCount());
143 
144             // #110094#-14 Reduce to do only second change
145             //// invalidate all remembered rectangles
146             //for(sal_uInt32 a(0); a < nCount; a++)
147             //{
148             //  GetSdrObject().BroadcastObjectChange(rChange.GetRectangle(a));
149             //}
150 
151             // invalidate all new rectangles
152             if(GetSdrObject().ISA(SdrObjGroup))
153             {
154                 SdrObjListIter aIter((SdrObjGroup&)GetSdrObject(), IM_DEEPNOGROUPS);
155 
156                 while(aIter.IsMore())
157                 {
158                     SdrObject* pObj = aIter.Next();
159                     // This is done with ItemSetChanged
160                     // pObj->SetChanged();
161                     pObj->BroadcastObjectChange();
162                 }
163             }
164             else
165             {
166                 // This is done with ItemSetChanged
167                 // GetSdrObject().SetChanged();
168                 GetSdrObject().BroadcastObjectChange();
169             }
170 
171             // also send the user calls
172             for(sal_uInt32 a(0L); a < nCount; a++)
173             {
174                 GetSdrObject().SendUserCall(SDRUSERCALL_CHGATTR, rChange.GetRectangle(a));
175             }
176         }
177 
getVersion() const178         sal_uInt32 BaseProperties::getVersion() const
179         {
180             return 0;
181         }
182 
CleanupFillProperties(SfxItemSet & rItemSet)183         void CleanupFillProperties( SfxItemSet& rItemSet )
184         {
185             const bool bFillBitmap = rItemSet.GetItemState(XATTR_FILLBITMAP, sal_False) == SFX_ITEM_SET;
186             const bool bFillGradient = rItemSet.GetItemState(XATTR_FILLGRADIENT, sal_False) == SFX_ITEM_SET;
187             const bool bFillHatch = rItemSet.GetItemState(XATTR_FILLHATCH, sal_False) == SFX_ITEM_SET;
188             if( bFillBitmap || bFillGradient || bFillHatch )
189             {
190                 const XFillStyleItem* pFillStyleItem = dynamic_cast< const XFillStyleItem* >( rItemSet.GetItem(XATTR_FILLSTYLE) );
191                 if( pFillStyleItem )
192                 {
193                     if( bFillBitmap && (pFillStyleItem->GetValue() != XFILL_BITMAP) )
194                     {
195                         rItemSet.ClearItem( XATTR_FILLBITMAP );
196                     }
197 
198                     if( bFillGradient && (pFillStyleItem->GetValue() != XFILL_GRADIENT) )
199                     {
200                         rItemSet.ClearItem( XATTR_FILLGRADIENT );
201                     }
202 
203                     if( bFillHatch && (pFillStyleItem->GetValue() != XFILL_HATCH) )
204                     {
205                         rItemSet.ClearItem( XATTR_FILLHATCH );
206                     }
207                 }
208             }
209         }
210 
211     } // end of namespace properties
212 } // end of namespace sdr
213 
214 //////////////////////////////////////////////////////////////////////////////
215 // eof
216