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