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/itemsettools.hxx>
27  #include <tools/debug.hxx>
28  #include <svl/itemset.hxx>
29  #include <svl/whiter.hxx>
30  #include <svx/svdogrp.hxx>
31  #include <svx/svditer.hxx>
32  #include <vcl/region.hxx>
33  
34  //////////////////////////////////////////////////////////////////////////////
35  // class to remember broadcast start positions
36  
37  namespace sdr
38  {
39  	namespace properties
40  	{
ItemChangeBroadcaster(const SdrObject & rObj)41  		ItemChangeBroadcaster::ItemChangeBroadcaster(const SdrObject& rObj)
42  		{
43  			if(rObj.ISA(SdrObjGroup))
44  			{
45  				SdrObjListIter aIter((const SdrObjGroup&)rObj, IM_DEEPNOGROUPS);
46  				mpData = new RectangleVector;
47  				DBG_ASSERT(mpData, "ItemChangeBroadcaster: No memory (!)");
48  				((RectangleVector*)mpData)->reserve(aIter.Count());
49  
50  				while(aIter.IsMore())
51  				{
52  					SdrObject* pObj = aIter.Next();
53  
54  					if(pObj)
55  					{
56  						((RectangleVector*)mpData)->push_back(pObj->GetLastBoundRect());
57  					}
58  				}
59  
60  				mnCount = ((RectangleVector*)mpData)->size();
61  			}
62  			else
63  			{
64  				mpData = new Rectangle(rObj.GetLastBoundRect());
65  				mnCount = 1L;
66  			}
67  		}
68  
~ItemChangeBroadcaster()69  		ItemChangeBroadcaster::~ItemChangeBroadcaster()
70  		{
71  			if(mnCount > 1)
72  			{
73  				delete ((RectangleVector*)mpData);
74  			}
75  			else
76  			{
77  				delete ((Rectangle*)mpData);
78  			}
79  		}
80  
GetRectangleCount() const81  		sal_uInt32 ItemChangeBroadcaster::GetRectangleCount() const
82  		{
83  			return mnCount;
84  		}
85  
GetRectangle(sal_uInt32 nIndex) const86  		const Rectangle& ItemChangeBroadcaster::GetRectangle(sal_uInt32 nIndex) const
87  		{
88  			if(mnCount > 1)
89  			{
90  				return (*((RectangleVector*)mpData))[nIndex];
91  			}
92  			else
93  			{
94  				return *((Rectangle*)mpData);
95  			}
96  		}
97  	} // end of namespace properties
98  } // end of namespace sdr
99  
100  //////////////////////////////////////////////////////////////////////////////
101  
102  namespace sdr
103  {
104  	namespace properties
105  	{
ScaleItemSet(SfxItemSet & rSet,const Fraction & rScale)106  		void ScaleItemSet(SfxItemSet& rSet, const Fraction& rScale)
107  		{
108  			sal_Int32 nMul(rScale.GetNumerator());
109  			sal_Int32 nDiv(rScale.GetDenominator());
110  
111  			if(!rScale.IsValid() || !nDiv)
112  			{
113  				return;
114  			}
115  
116  			SfxWhichIter aIter(rSet);
117  			sal_uInt16 nWhich(aIter.FirstWhich());
118  			const SfxPoolItem *pItem = NULL;
119  
120  			while(nWhich)
121  			{
122  				if(SFX_ITEM_SET == rSet.GetItemState(nWhich, sal_False, &pItem))
123  				{
124  					if(pItem->HasMetrics())
125  					{
126  						SfxPoolItem* pNewItem = pItem->Clone();
127  						pNewItem->ScaleMetrics(nMul, nDiv);
128  						rSet.Put(*pNewItem);
129  					}
130  				}
131  				nWhich = aIter.NextWhich();
132  			}
133  		}
134  	} // end of namespace properties
135  } // end of namespace sdr
136  
137  //////////////////////////////////////////////////////////////////////////////
138  // eof
139