xref: /aoo42x/main/svx/source/svdraw/svditer.cxx (revision f6e50924)
1*f6e50924SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*f6e50924SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*f6e50924SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*f6e50924SAndrew Rist  * distributed with this work for additional information
6*f6e50924SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*f6e50924SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*f6e50924SAndrew Rist  * "License"); you may not use this file except in compliance
9*f6e50924SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*f6e50924SAndrew Rist  *
11*f6e50924SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*f6e50924SAndrew Rist  *
13*f6e50924SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*f6e50924SAndrew Rist  * software distributed under the License is distributed on an
15*f6e50924SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*f6e50924SAndrew Rist  * KIND, either express or implied.  See the License for the
17*f6e50924SAndrew Rist  * specific language governing permissions and limitations
18*f6e50924SAndrew Rist  * under the License.
19*f6e50924SAndrew Rist  *
20*f6e50924SAndrew Rist  *************************************************************/
21*f6e50924SAndrew Rist 
22*f6e50924SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_svx.hxx"
26cdf0e10cSrcweir #include "svx/svditer.hxx"
27cdf0e10cSrcweir #include <svx/svdpage.hxx>
28cdf0e10cSrcweir #include <svx/svdogrp.hxx>
29cdf0e10cSrcweir #include <svx/svdobj.hxx>
30cdf0e10cSrcweir #include <svx/svdmark.hxx>
31cdf0e10cSrcweir 
32cdf0e10cSrcweir // #99190#
33cdf0e10cSrcweir #include <svx/scene3d.hxx>
34cdf0e10cSrcweir 
SdrObjListIter(const SdrObjList & rObjList,SdrIterMode eMode,sal_Bool bReverse)35cdf0e10cSrcweir SdrObjListIter::SdrObjListIter(const SdrObjList& rObjList, SdrIterMode eMode, sal_Bool bReverse)
36cdf0e10cSrcweir :	maObjList(1024, 64, 64),
37cdf0e10cSrcweir 	mnIndex(0L),
38cdf0e10cSrcweir 	mbReverse(bReverse)
39cdf0e10cSrcweir {
40cdf0e10cSrcweir 	ImpProcessObjectList(rObjList, eMode, sal_True);
41cdf0e10cSrcweir 	Reset();
42cdf0e10cSrcweir }
43cdf0e10cSrcweir 
SdrObjListIter(const SdrObjList & rObjList,sal_Bool bUseZOrder,SdrIterMode eMode,sal_Bool bReverse)44cdf0e10cSrcweir SdrObjListIter::SdrObjListIter(const SdrObjList& rObjList, sal_Bool bUseZOrder, SdrIterMode eMode, sal_Bool bReverse)
45cdf0e10cSrcweir :	maObjList(1024, 64, 64),
46cdf0e10cSrcweir 	mnIndex(0L),
47cdf0e10cSrcweir 	mbReverse(bReverse)
48cdf0e10cSrcweir {
49cdf0e10cSrcweir 	ImpProcessObjectList(rObjList, eMode, bUseZOrder);
50cdf0e10cSrcweir 	Reset();
51cdf0e10cSrcweir }
52cdf0e10cSrcweir 
SdrObjListIter(const SdrObject & rObj,SdrIterMode eMode,sal_Bool bReverse)53cdf0e10cSrcweir SdrObjListIter::SdrObjListIter( const SdrObject& rObj, SdrIterMode eMode, sal_Bool bReverse )
54cdf0e10cSrcweir :	maObjList(1024, 64, 64),
55cdf0e10cSrcweir 	mnIndex(0L),
56cdf0e10cSrcweir 	mbReverse(bReverse)
57cdf0e10cSrcweir {
58cdf0e10cSrcweir 	if ( rObj.ISA( SdrObjGroup ) )
59cdf0e10cSrcweir 		ImpProcessObjectList(*rObj.GetSubList(), eMode, sal_True);
60cdf0e10cSrcweir 	else
61cdf0e10cSrcweir 		maObjList.Insert( (void*)&rObj, LIST_APPEND );
62cdf0e10cSrcweir 	Reset();
63cdf0e10cSrcweir }
64cdf0e10cSrcweir 
SdrObjListIter(const SdrMarkList & rMarkList,SdrIterMode eMode,sal_Bool bReverse)65cdf0e10cSrcweir SdrObjListIter::SdrObjListIter( const SdrMarkList& rMarkList, SdrIterMode eMode, sal_Bool bReverse )
66cdf0e10cSrcweir :	maObjList(1024, 64, 64),
67cdf0e10cSrcweir 	mnIndex(0L),
68cdf0e10cSrcweir 	mbReverse(bReverse)
69cdf0e10cSrcweir {
70cdf0e10cSrcweir 	ImpProcessMarkList(rMarkList, eMode);
71cdf0e10cSrcweir 	Reset();
72cdf0e10cSrcweir }
73cdf0e10cSrcweir 
ImpProcessObjectList(const SdrObjList & rObjList,SdrIterMode eMode,sal_Bool bUseZOrder)74cdf0e10cSrcweir void SdrObjListIter::ImpProcessObjectList(const SdrObjList& rObjList, SdrIterMode eMode, sal_Bool bUseZOrder)
75cdf0e10cSrcweir {
76cdf0e10cSrcweir 	for( sal_uIntPtr nIdx = 0, nCount = rObjList.GetObjCount(); nIdx < nCount; ++nIdx )
77cdf0e10cSrcweir 	{
78cdf0e10cSrcweir 		SdrObject* pObj = bUseZOrder ?
79cdf0e10cSrcweir             rObjList.GetObj( nIdx ) : rObjList.GetObjectForNavigationPosition( nIdx );
80cdf0e10cSrcweir         OSL_ASSERT( pObj != 0 );
81cdf0e10cSrcweir         if( pObj )
82cdf0e10cSrcweir             ImpProcessObj( pObj, eMode, bUseZOrder );
83cdf0e10cSrcweir 	}
84cdf0e10cSrcweir }
85cdf0e10cSrcweir 
ImpProcessMarkList(const SdrMarkList & rMarkList,SdrIterMode eMode)86cdf0e10cSrcweir void SdrObjListIter::ImpProcessMarkList( const SdrMarkList& rMarkList, SdrIterMode eMode )
87cdf0e10cSrcweir {
88cdf0e10cSrcweir     for( sal_uIntPtr nIdx = 0, nCount = rMarkList.GetMarkCount(); nIdx < nCount; ++nIdx )
89cdf0e10cSrcweir         if( SdrObject* pObj = rMarkList.GetMark( nIdx )->GetMarkedSdrObj() )
90cdf0e10cSrcweir             ImpProcessObj( pObj, eMode, sal_False );
91cdf0e10cSrcweir }
92cdf0e10cSrcweir 
ImpProcessObj(SdrObject * pObj,SdrIterMode eMode,sal_Bool bUseZOrder)93cdf0e10cSrcweir void SdrObjListIter::ImpProcessObj(SdrObject* pObj, SdrIterMode eMode, sal_Bool bUseZOrder)
94cdf0e10cSrcweir {
95cdf0e10cSrcweir     bool bIsGroup = pObj->IsGroupObject();
96cdf0e10cSrcweir     // #99190# 3D objects are no group objects, IsGroupObject()
97cdf0e10cSrcweir     // only tests if pSub is not null ptr :-(
98cdf0e10cSrcweir     if( bIsGroup && pObj->ISA( E3dObject ) && !pObj->ISA( E3dScene ) )
99cdf0e10cSrcweir         bIsGroup = false;
100cdf0e10cSrcweir 
101cdf0e10cSrcweir     if( !bIsGroup || (eMode != IM_DEEPNOGROUPS) )
102cdf0e10cSrcweir         maObjList.Insert( pObj, LIST_APPEND );
103cdf0e10cSrcweir 
104cdf0e10cSrcweir     if( bIsGroup && (eMode != IM_FLAT) )
105cdf0e10cSrcweir         ImpProcessObjectList( *pObj->GetSubList(), eMode, bUseZOrder );
106cdf0e10cSrcweir }
107