xref: /AOO41X/main/svx/source/svdraw/svdpagv.cxx (revision f6e50924346d0b8c0b07c91832a97665dd718b0c)
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
10cdf0e10cSrcweir  *
11*f6e50924SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
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.
19cdf0e10cSrcweir  *
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/svdpagv.hxx>
27cdf0e10cSrcweir #include <com/sun/star/awt/XWindow.hpp>
28cdf0e10cSrcweir #include <com/sun/star/awt/PosSize.hpp>
29cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
30cdf0e10cSrcweir #include <svx/svdoutl.hxx>
31cdf0e10cSrcweir #include <svx/xpoly.hxx>
32cdf0e10cSrcweir #include <svx/svdouno.hxx>
33cdf0e10cSrcweir #include <svx/svdpage.hxx>
34cdf0e10cSrcweir #include <svx/svdview.hxx>
35cdf0e10cSrcweir 
36cdf0e10cSrcweir #include <svx/svdedxv.hxx>
37cdf0e10cSrcweir #include <svx/svdpagv.hxx>
38cdf0e10cSrcweir #include <svx/svdoutl.hxx>
39cdf0e10cSrcweir #include <svx/svdpagv.hxx>
40cdf0e10cSrcweir #include <editeng/outliner.hxx>
41cdf0e10cSrcweir #include <svx/svdetc.hxx>
42cdf0e10cSrcweir #include <svx/svdobj.hxx>
43cdf0e10cSrcweir #include <svx/svdouno.hxx>
44cdf0e10cSrcweir #include <svx/svdpage.hxx>
45cdf0e10cSrcweir #include <svx/svdview.hxx>
46cdf0e10cSrcweir #include "svx/svditer.hxx"
47cdf0e10cSrcweir #include <svx/svdogrp.hxx>
48cdf0e10cSrcweir #include <svx/svdtypes.hxx>
49cdf0e10cSrcweir 
50cdf0e10cSrcweir #include <svx/svdotext.hxx> // fuer PaintOutlinerView
51cdf0e10cSrcweir #include <svx/svdoole2.hxx>
52cdf0e10cSrcweir 
53cdf0e10cSrcweir // #110094#
54cdf0e10cSrcweir #include <svx/sdr/contact/objectcontactofpageview.hxx>
55cdf0e10cSrcweir #include <svx/svdogrp.hxx>
56cdf0e10cSrcweir #include <svx/sdr/contact/viewobjectcontactredirector.hxx>
57cdf0e10cSrcweir #include <svx/fmview.hxx>
58cdf0e10cSrcweir 
59cdf0e10cSrcweir // for search on vector
60cdf0e10cSrcweir #include <algorithm>
61cdf0e10cSrcweir 
62cdf0e10cSrcweir using namespace ::rtl;
63cdf0e10cSrcweir using namespace ::com::sun::star;
64cdf0e10cSrcweir #include <svx/sdrpagewindow.hxx>
65cdf0e10cSrcweir #include <svx/sdrpaintwindow.hxx>
66cdf0e10cSrcweir 
67cdf0e10cSrcweir TYPEINIT1(SdrPageView, SfxListener);
68cdf0e10cSrcweir DBG_NAME(SdrPageView);
69cdf0e10cSrcweir 
70cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
71cdf0e10cSrcweir // interface to SdrPageWindow
72cdf0e10cSrcweir 
73cdf0e10cSrcweir SdrPageWindow* SdrPageView::FindPageWindow(SdrPaintWindow& rPaintWindow) const
74cdf0e10cSrcweir {
75cdf0e10cSrcweir 	for(SdrPageWindowVector::const_iterator a = maPageWindows.begin(); a != maPageWindows.end(); a++)
76cdf0e10cSrcweir 	{
77cdf0e10cSrcweir 		if(&((*a)->GetPaintWindow()) == &rPaintWindow)
78cdf0e10cSrcweir 		{
79cdf0e10cSrcweir 			return *a;
80cdf0e10cSrcweir 		}
81cdf0e10cSrcweir 	}
82cdf0e10cSrcweir 
83cdf0e10cSrcweir 	return 0L;
84cdf0e10cSrcweir }
85cdf0e10cSrcweir 
86cdf0e10cSrcweir const SdrPageWindow* SdrPageView::FindPatchedPageWindow( const OutputDevice& _rOutDev ) const
87cdf0e10cSrcweir {
88cdf0e10cSrcweir 	for (   SdrPageWindowVector::const_iterator loop = maPageWindows.begin();
89cdf0e10cSrcweir             loop != maPageWindows.end();
90cdf0e10cSrcweir             ++loop
91cdf0e10cSrcweir         )
92cdf0e10cSrcweir 	{
93cdf0e10cSrcweir         const SdrPageWindow& rPageWindow( *(*loop) );
94cdf0e10cSrcweir         const SdrPaintWindow& rPaintWindow( rPageWindow.GetOriginalPaintWindow() ? *rPageWindow.GetOriginalPaintWindow() : rPageWindow.GetPaintWindow() );
95cdf0e10cSrcweir         if ( &rPaintWindow.GetOutputDevice() == &_rOutDev )
96cdf0e10cSrcweir         {
97cdf0e10cSrcweir             return &rPageWindow;
98cdf0e10cSrcweir         }
99cdf0e10cSrcweir 	}
100cdf0e10cSrcweir 
101cdf0e10cSrcweir 	return NULL;
102cdf0e10cSrcweir }
103cdf0e10cSrcweir 
104cdf0e10cSrcweir SdrPageWindow* SdrPageView::FindPageWindow(const OutputDevice& rOutDev) const
105cdf0e10cSrcweir {
106cdf0e10cSrcweir 	for(SdrPageWindowVector::const_iterator a = maPageWindows.begin(); a != maPageWindows.end(); a++)
107cdf0e10cSrcweir 	{
108cdf0e10cSrcweir 		if(&((*a)->GetPaintWindow().GetOutputDevice()) == &rOutDev)
109cdf0e10cSrcweir 		{
110cdf0e10cSrcweir 			return *a;
111cdf0e10cSrcweir 		}
112cdf0e10cSrcweir 	}
113cdf0e10cSrcweir 
114cdf0e10cSrcweir 	return 0L;
115cdf0e10cSrcweir }
116cdf0e10cSrcweir 
117cdf0e10cSrcweir SdrPageWindow* SdrPageView::GetPageWindow(sal_uInt32 nIndex) const
118cdf0e10cSrcweir {
119cdf0e10cSrcweir 	// #126416#
120cdf0e10cSrcweir 	if(nIndex < maPageWindows.size())
121cdf0e10cSrcweir 	{
122cdf0e10cSrcweir 		return maPageWindows[nIndex];
123cdf0e10cSrcweir 	}
124cdf0e10cSrcweir 
125cdf0e10cSrcweir 	return 0L;
126cdf0e10cSrcweir }
127cdf0e10cSrcweir 
128cdf0e10cSrcweir void SdrPageView::ClearPageWindows()
129cdf0e10cSrcweir {
130cdf0e10cSrcweir 	// #126416#
131cdf0e10cSrcweir 	for(SdrPageWindowVector::const_iterator a = maPageWindows.begin(); a != maPageWindows.end(); a++)
132cdf0e10cSrcweir 	{
133cdf0e10cSrcweir 		delete *a;
134cdf0e10cSrcweir 	}
135cdf0e10cSrcweir 
136cdf0e10cSrcweir 	maPageWindows.clear();
137cdf0e10cSrcweir }
138cdf0e10cSrcweir 
139cdf0e10cSrcweir void SdrPageView::AppendPageWindow(SdrPageWindow& rNew)
140cdf0e10cSrcweir {
141cdf0e10cSrcweir 	maPageWindows.push_back(&rNew);
142cdf0e10cSrcweir }
143cdf0e10cSrcweir 
144cdf0e10cSrcweir SdrPageWindow* SdrPageView::RemovePageWindow(sal_uInt32 nPos)
145cdf0e10cSrcweir {
146cdf0e10cSrcweir 	if(nPos < maPageWindows.size())
147cdf0e10cSrcweir 	{
148cdf0e10cSrcweir 		SdrPageWindowVector::iterator aAccess = maPageWindows.begin() + nPos;
149cdf0e10cSrcweir 		// #114376# remember return value
150cdf0e10cSrcweir 		SdrPageWindow* pErasedSdrPageWindow = *aAccess;
151cdf0e10cSrcweir 		maPageWindows.erase(aAccess);
152cdf0e10cSrcweir 		return pErasedSdrPageWindow;
153cdf0e10cSrcweir 	}
154cdf0e10cSrcweir 
155cdf0e10cSrcweir 	return 0L;
156cdf0e10cSrcweir }
157cdf0e10cSrcweir 
158cdf0e10cSrcweir SdrPageWindow* SdrPageView::RemovePageWindow(SdrPageWindow& rOld)
159cdf0e10cSrcweir {
160cdf0e10cSrcweir 	const SdrPageWindowVector::iterator aFindResult = ::std::find(maPageWindows.begin(), maPageWindows.end(), &rOld);
161cdf0e10cSrcweir 
162cdf0e10cSrcweir 	if(aFindResult != maPageWindows.end())
163cdf0e10cSrcweir 	{
164cdf0e10cSrcweir 		// #114376# remember return value
165cdf0e10cSrcweir 		SdrPageWindow* pSdrPageWindow = *aFindResult;
166cdf0e10cSrcweir 		maPageWindows.erase(aFindResult);
167cdf0e10cSrcweir 		return pSdrPageWindow;
168cdf0e10cSrcweir 	}
169cdf0e10cSrcweir 
170cdf0e10cSrcweir 	return 0L;
171cdf0e10cSrcweir }
172cdf0e10cSrcweir 
173cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
174cdf0e10cSrcweir 
175cdf0e10cSrcweir SdrPageView::SdrPageView(SdrPage* pPage1, SdrView& rNewView)
176cdf0e10cSrcweir :	mrView(rNewView),
177cdf0e10cSrcweir 	// #103911# col_auto color lets the view takes the default SvxColorConfig entry
178cdf0e10cSrcweir 	maDocumentColor( COL_AUTO ),
179cdf0e10cSrcweir 	maBackgroundColor(COL_AUTO ), // #i48367# also react on autocolor
180cdf0e10cSrcweir 	mpPreparedPageWindow(0) // #i72752#
181cdf0e10cSrcweir {
182cdf0e10cSrcweir 	DBG_CTOR(SdrPageView,NULL);
183cdf0e10cSrcweir 	mpPage = pPage1;
184cdf0e10cSrcweir 
185cdf0e10cSrcweir 	if(mpPage)
186cdf0e10cSrcweir 	{
187cdf0e10cSrcweir 		aPgOrg.X()=mpPage->GetLftBorder();
188cdf0e10cSrcweir 		aPgOrg.Y()=mpPage->GetUppBorder();
189cdf0e10cSrcweir 	}
190cdf0e10cSrcweir 	mbHasMarked = sal_False;
191cdf0e10cSrcweir 	aLayerVisi.SetAll();
192cdf0e10cSrcweir 	aLayerPrn.SetAll();
193cdf0e10cSrcweir 
194cdf0e10cSrcweir 	mbVisible = sal_False;
195cdf0e10cSrcweir 	pAktList = NULL;
196cdf0e10cSrcweir 	pAktGroup = NULL;
197cdf0e10cSrcweir 	SetAktGroupAndList(NULL, mpPage);
198cdf0e10cSrcweir 
199cdf0e10cSrcweir 	StartListening(*rNewView.GetModel());
200cdf0e10cSrcweir 
201cdf0e10cSrcweir 	for(sal_uInt32 a(0L); a < rNewView.PaintWindowCount(); a++)
202cdf0e10cSrcweir 	{
203cdf0e10cSrcweir 		AddPaintWindowToPageView(*rNewView.GetPaintWindow(a));
204cdf0e10cSrcweir 	}
205cdf0e10cSrcweir }
206cdf0e10cSrcweir 
207cdf0e10cSrcweir SdrPageView::~SdrPageView()
208cdf0e10cSrcweir {
209cdf0e10cSrcweir 	DBG_DTOR(SdrPageView,NULL);
210cdf0e10cSrcweir 
211cdf0e10cSrcweir 	// cleanup window vector
212cdf0e10cSrcweir 	ClearPageWindows();
213cdf0e10cSrcweir }
214cdf0e10cSrcweir 
215cdf0e10cSrcweir SdrPageWindow& SdrPageView::CreateNewPageWindowEntry(SdrPaintWindow& rPaintWindow)
216cdf0e10cSrcweir {
217cdf0e10cSrcweir 	// MIB 3.7.08: Das WinRec muss sofort in die Liste eingetragen werden,
218cdf0e10cSrcweir 	// weil sich das InsertControlContainer darauf verlaesst
219cdf0e10cSrcweir 	//SdrPageViewWinRec* pRec = new SdrPageViewWinRec( *this, pOut );
220cdf0e10cSrcweir 	//pWinList->Insert(pRec);
221cdf0e10cSrcweir 	SdrPageWindow& rWindow = *(new SdrPageWindow(*this, rPaintWindow));
222cdf0e10cSrcweir 	AppendPageWindow(rWindow);
223cdf0e10cSrcweir 
224cdf0e10cSrcweir 	return rWindow;
225cdf0e10cSrcweir }
226cdf0e10cSrcweir 
227cdf0e10cSrcweir void SdrPageView::AddPaintWindowToPageView(SdrPaintWindow& rPaintWindow)
228cdf0e10cSrcweir {
229cdf0e10cSrcweir 	if(!FindPageWindow(rPaintWindow))
230cdf0e10cSrcweir 	{
231cdf0e10cSrcweir 		CreateNewPageWindowEntry(rPaintWindow);
232cdf0e10cSrcweir 	}
233cdf0e10cSrcweir }
234cdf0e10cSrcweir 
235cdf0e10cSrcweir void SdrPageView::RemovePaintWindowFromPageView(SdrPaintWindow& rPaintWindow)
236cdf0e10cSrcweir {
237cdf0e10cSrcweir 	SdrPageWindow* pCandidate = FindPageWindow(rPaintWindow);
238cdf0e10cSrcweir 
239cdf0e10cSrcweir 	if(pCandidate)
240cdf0e10cSrcweir 	{
241cdf0e10cSrcweir 		pCandidate = RemovePageWindow(*pCandidate);
242cdf0e10cSrcweir 
243cdf0e10cSrcweir 		if(pCandidate)
244cdf0e10cSrcweir 		{
245cdf0e10cSrcweir 			delete pCandidate;
246cdf0e10cSrcweir 		}
247cdf0e10cSrcweir 	}
248cdf0e10cSrcweir }
249cdf0e10cSrcweir 
250cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer > SdrPageView::GetControlContainer( const OutputDevice& _rDevice ) const
251cdf0e10cSrcweir {
252cdf0e10cSrcweir     ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer > xReturn;
253cdf0e10cSrcweir 	const SdrPageWindow* pCandidate = FindPatchedPageWindow( _rDevice );
254cdf0e10cSrcweir 
255cdf0e10cSrcweir 	if ( pCandidate )
256cdf0e10cSrcweir         xReturn = pCandidate->GetControlContainer( true );
257cdf0e10cSrcweir 
258cdf0e10cSrcweir 	return xReturn;
259cdf0e10cSrcweir }
260cdf0e10cSrcweir 
261cdf0e10cSrcweir void __EXPORT SdrPageView::Notify(SfxBroadcaster& /*rBC*/, const SfxHint& /*rHint*/)
262cdf0e10cSrcweir {
263cdf0e10cSrcweir     // not really interested in
264cdf0e10cSrcweir }
265cdf0e10cSrcweir 
266cdf0e10cSrcweir void SdrPageView::ModelHasChanged()
267cdf0e10cSrcweir {
268cdf0e10cSrcweir 	if (GetAktGroup()!=NULL) CheckAktGroup();
269cdf0e10cSrcweir }
270cdf0e10cSrcweir 
271cdf0e10cSrcweir sal_Bool SdrPageView::IsReadOnly() const
272cdf0e10cSrcweir {
273cdf0e10cSrcweir 	return (0L == GetPage() || GetView().GetModel()->IsReadOnly() || GetPage()->IsReadOnly() || GetObjList()->IsReadOnly());
274cdf0e10cSrcweir }
275cdf0e10cSrcweir 
276cdf0e10cSrcweir void SdrPageView::Show()
277cdf0e10cSrcweir {
278cdf0e10cSrcweir 	if(!IsVisible())
279cdf0e10cSrcweir 	{
280cdf0e10cSrcweir 		mbVisible = sal_True;
281cdf0e10cSrcweir 		InvalidateAllWin();
282cdf0e10cSrcweir 
283cdf0e10cSrcweir 		for(sal_uInt32 a(0L); a < GetView().PaintWindowCount(); a++)
284cdf0e10cSrcweir 		{
285cdf0e10cSrcweir 			AddPaintWindowToPageView(*GetView().GetPaintWindow(a));
286cdf0e10cSrcweir 		}
287cdf0e10cSrcweir 	}
288cdf0e10cSrcweir }
289cdf0e10cSrcweir 
290cdf0e10cSrcweir void SdrPageView::Hide()
291cdf0e10cSrcweir {
292cdf0e10cSrcweir 	if(IsVisible())
293cdf0e10cSrcweir 	{
294cdf0e10cSrcweir 		InvalidateAllWin();
295cdf0e10cSrcweir 		mbVisible = sal_False;
296cdf0e10cSrcweir 		ClearPageWindows();
297cdf0e10cSrcweir 	}
298cdf0e10cSrcweir }
299cdf0e10cSrcweir 
300cdf0e10cSrcweir Rectangle SdrPageView::GetPageRect() const
301cdf0e10cSrcweir {
302cdf0e10cSrcweir 	if (GetPage()==NULL) return Rectangle();
303cdf0e10cSrcweir 	return Rectangle(Point(),Size(GetPage()->GetWdt()+1,GetPage()->GetHgt()+1));
304cdf0e10cSrcweir }
305cdf0e10cSrcweir 
306cdf0e10cSrcweir void SdrPageView::InvalidateAllWin()
307cdf0e10cSrcweir {
308cdf0e10cSrcweir 	if(IsVisible() && GetPage())
309cdf0e10cSrcweir 	{
310cdf0e10cSrcweir 		Rectangle aRect(Point(0,0),Size(GetPage()->GetWdt()+1,GetPage()->GetHgt()+1));
311cdf0e10cSrcweir 		aRect.Union(GetPage()->GetAllObjBoundRect());
312cdf0e10cSrcweir 		GetView().InvalidateAllWin(aRect);
313cdf0e10cSrcweir 	}
314cdf0e10cSrcweir }
315cdf0e10cSrcweir 
316cdf0e10cSrcweir void SdrPageView::InvalidateAllWin(const Rectangle& rRect, sal_Bool bPlus1Pix)
317cdf0e10cSrcweir {
318cdf0e10cSrcweir 	if(IsVisible())
319cdf0e10cSrcweir 	{
320cdf0e10cSrcweir 		GetView().InvalidateAllWin(rRect, bPlus1Pix);
321cdf0e10cSrcweir 	}
322cdf0e10cSrcweir }
323cdf0e10cSrcweir 
324cdf0e10cSrcweir void SdrPageView::PaintOutlinerView(OutputDevice* pOut, const Rectangle& rRect) const
325cdf0e10cSrcweir {
326cdf0e10cSrcweir 	if (GetView().pTextEditOutliner==NULL) return;
327cdf0e10cSrcweir 	//const SdrObject* pTextObjTmp=GetView().GetTextEditObject();
328cdf0e10cSrcweir 	//const SdrTextObj* pText=PTR_CAST(SdrTextObj,pTextObjTmp);
329cdf0e10cSrcweir 	//FASTBOOL bTextFrame=pText!=NULL && pText->IsTextFrame();
330cdf0e10cSrcweir 	sal_uIntPtr nViewAnz=GetView().pTextEditOutliner->GetViewCount();
331cdf0e10cSrcweir 	for (sal_uIntPtr i=0; i<nViewAnz; i++) {
332cdf0e10cSrcweir 		OutlinerView* pOLV=GetView().pTextEditOutliner->GetView(i);
333cdf0e10cSrcweir 		if (pOLV->GetWindow()==pOut) {
334cdf0e10cSrcweir 			GetView().ImpPaintOutlinerView(*pOLV, rRect);
335cdf0e10cSrcweir 			return;
336cdf0e10cSrcweir 		}
337cdf0e10cSrcweir 	}
338cdf0e10cSrcweir }
339cdf0e10cSrcweir 
340cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
341cdf0e10cSrcweir 
342cdf0e10cSrcweir void SdrPageView::PrePaint()
343cdf0e10cSrcweir {
344cdf0e10cSrcweir 	const sal_uInt32 nCount(PageWindowCount());
345cdf0e10cSrcweir 
346cdf0e10cSrcweir     for(sal_uInt32 a(0); a < nCount; a++)
347cdf0e10cSrcweir     {
348cdf0e10cSrcweir         SdrPageWindow* pCandidate = GetPageWindow(a);
349cdf0e10cSrcweir 
350cdf0e10cSrcweir         if(pCandidate)
351cdf0e10cSrcweir         {
352cdf0e10cSrcweir             pCandidate->PrePaint();
353cdf0e10cSrcweir         }
354cdf0e10cSrcweir     }
355cdf0e10cSrcweir }
356cdf0e10cSrcweir 
357cdf0e10cSrcweir void SdrPageView::PostPaint()
358cdf0e10cSrcweir {
359cdf0e10cSrcweir 	const sal_uInt32 nCount(PageWindowCount());
360cdf0e10cSrcweir 
361cdf0e10cSrcweir     for(sal_uInt32 a(0); a < nCount; a++)
362cdf0e10cSrcweir     {
363cdf0e10cSrcweir         SdrPageWindow* pCandidate = GetPageWindow(a);
364cdf0e10cSrcweir 
365cdf0e10cSrcweir         if(pCandidate)
366cdf0e10cSrcweir         {
367cdf0e10cSrcweir             pCandidate->PostPaint();
368cdf0e10cSrcweir         }
369cdf0e10cSrcweir     }
370cdf0e10cSrcweir }
371cdf0e10cSrcweir 
372cdf0e10cSrcweir void SdrPageView::CompleteRedraw(SdrPaintWindow& rPaintWindow, const Region& rReg, sdr::contact::ViewObjectContactRedirector* pRedirector) const
373cdf0e10cSrcweir {
374cdf0e10cSrcweir 	if(GetPage())
375cdf0e10cSrcweir 	{
376cdf0e10cSrcweir 		SdrPageWindow* pPageWindow = FindPageWindow(rPaintWindow);
377cdf0e10cSrcweir 		sal_Bool bIsTempTarget(sal_False);
378cdf0e10cSrcweir 
379cdf0e10cSrcweir 		if(!pPageWindow)
380cdf0e10cSrcweir 		{
381cdf0e10cSrcweir 			// create temp PageWindow
382cdf0e10cSrcweir 			pPageWindow = new SdrPageWindow(*((SdrPageView*)this), rPaintWindow);
383cdf0e10cSrcweir 			bIsTempTarget = sal_True;
384cdf0e10cSrcweir 		}
385cdf0e10cSrcweir 
386cdf0e10cSrcweir 		// do the redraw
387cdf0e10cSrcweir 		pPageWindow->PrepareRedraw(rReg);
388cdf0e10cSrcweir 		pPageWindow->RedrawAll(pRedirector);
389cdf0e10cSrcweir 
390cdf0e10cSrcweir 		// get rid of temp PageWindow
391cdf0e10cSrcweir 		if(bIsTempTarget)
392cdf0e10cSrcweir 		{
393cdf0e10cSrcweir 			delete pPageWindow;
394cdf0e10cSrcweir 			pPageWindow = 0L;
395cdf0e10cSrcweir 		}
396cdf0e10cSrcweir 	}
397cdf0e10cSrcweir }
398cdf0e10cSrcweir 
399cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
400cdf0e10cSrcweir // #i74769# use SdrPaintWindow directly
401cdf0e10cSrcweir 
402cdf0e10cSrcweir void SdrPageView::setPreparedPageWindow(SdrPageWindow* pKnownTarget)
403cdf0e10cSrcweir {
404cdf0e10cSrcweir 	// #i72752# remember prepared SdrPageWindow
405cdf0e10cSrcweir 	mpPreparedPageWindow = pKnownTarget;
406cdf0e10cSrcweir }
407cdf0e10cSrcweir 
408cdf0e10cSrcweir void SdrPageView::DrawLayer(SdrLayerID nID, OutputDevice* pGivenTarget, sdr::contact::ViewObjectContactRedirector* pRedirector) const
409cdf0e10cSrcweir {
410cdf0e10cSrcweir 	if(GetPage())
411cdf0e10cSrcweir 	{
412cdf0e10cSrcweir 		if(pGivenTarget)
413cdf0e10cSrcweir 		{
414cdf0e10cSrcweir 			const SdrPageWindow* pKnownTarget = FindPageWindow(*pGivenTarget);
415cdf0e10cSrcweir 
416cdf0e10cSrcweir 			if(pKnownTarget)
417cdf0e10cSrcweir 			{
418cdf0e10cSrcweir 				// paint known target
419cdf0e10cSrcweir 				pKnownTarget->RedrawLayer(&nID, pRedirector);
420cdf0e10cSrcweir 			}
421cdf0e10cSrcweir 			else
422cdf0e10cSrcweir 			{
423cdf0e10cSrcweir 				// #i72752# DrawLayer() uses a OutputDevice different from BeginDrawLayer. This happens
424cdf0e10cSrcweir 				// e.g. when SW paints a single text line in text edit mode. Try to use it
425cdf0e10cSrcweir 				SdrPageWindow* pPreparedTarget = mpPreparedPageWindow;
426cdf0e10cSrcweir 
427cdf0e10cSrcweir 				if(pPreparedTarget)
428cdf0e10cSrcweir 				{
429cdf0e10cSrcweir 					// if we have a prepared target, do not use a new SdrPageWindow since this
430cdf0e10cSrcweir 					// works but is expensive. Just use a temporary PaintWindow
431cdf0e10cSrcweir 					SdrPaintWindow aTemporaryPaintWindow(mrView, *pGivenTarget);
432cdf0e10cSrcweir 
433cdf0e10cSrcweir 					// Copy existing paint region to use the same as prepared in BeginDrawLayer
434cdf0e10cSrcweir 					SdrPaintWindow& rExistingPaintWindow = pPreparedTarget->GetPaintWindow();
435cdf0e10cSrcweir 					const Region& rExistingRegion = rExistingPaintWindow.GetRedrawRegion();
436cdf0e10cSrcweir 					aTemporaryPaintWindow.SetRedrawRegion(rExistingRegion);
437cdf0e10cSrcweir 
438cdf0e10cSrcweir 					// patch the ExistingPageWindow
439cdf0e10cSrcweir 					pPreparedTarget->patchPaintWindow(aTemporaryPaintWindow);
440cdf0e10cSrcweir 
441cdf0e10cSrcweir 					// redraw the layer
442cdf0e10cSrcweir 					pPreparedTarget->RedrawLayer(&nID, pRedirector);
443cdf0e10cSrcweir 
444cdf0e10cSrcweir 					// restore the ExistingPageWindow
445cdf0e10cSrcweir 					pPreparedTarget->unpatchPaintWindow();
446cdf0e10cSrcweir 				}
447cdf0e10cSrcweir 				else
448cdf0e10cSrcweir 				{
449cdf0e10cSrcweir 					OSL_ENSURE(false, "SdrPageView::DrawLayer: Creating temporary SdrPageWindow (ObjectContact), this should never be needed (!)");
450cdf0e10cSrcweir 
451cdf0e10cSrcweir 					// None of the known OutputDevices is the target of this paint, use
452cdf0e10cSrcweir 					// a temporary SdrPageWindow for this Redraw.
453cdf0e10cSrcweir 					SdrPaintWindow aTemporaryPaintWindow(mrView, *pGivenTarget);
454cdf0e10cSrcweir 					SdrPageWindow aTemporaryPageWindow(*((SdrPageView*)this), aTemporaryPaintWindow);
455cdf0e10cSrcweir 
456cdf0e10cSrcweir 					// #i72752#
457cdf0e10cSrcweir 					// Copy existing paint region if other PageWindows exist, this was created by
458cdf0e10cSrcweir 					// PrepareRedraw() from BeginDrawLayer(). Needs to be used e.g. when suddenly SW
459cdf0e10cSrcweir 					// paints into an unknown device other than the view was created for (e.g. VirtualDevice)
460cdf0e10cSrcweir 					if(PageWindowCount())
461cdf0e10cSrcweir 					{
462cdf0e10cSrcweir 						SdrPageWindow* pExistingPageWindow = GetPageWindow(0L);
463cdf0e10cSrcweir 						SdrPaintWindow& rExistingPaintWindow = pExistingPageWindow->GetPaintWindow();
464cdf0e10cSrcweir 						const Region& rExistingRegion = rExistingPaintWindow.GetRedrawRegion();
465cdf0e10cSrcweir 						aTemporaryPaintWindow.SetRedrawRegion(rExistingRegion);
466cdf0e10cSrcweir 					}
467cdf0e10cSrcweir 
468cdf0e10cSrcweir 					aTemporaryPageWindow.RedrawLayer(&nID, pRedirector);
469cdf0e10cSrcweir 				}
470cdf0e10cSrcweir 			}
471cdf0e10cSrcweir 		}
472cdf0e10cSrcweir 		else
473cdf0e10cSrcweir 		{
474cdf0e10cSrcweir 			// paint in all known windows
475cdf0e10cSrcweir 			for(sal_uInt32 a(0L); a < PageWindowCount(); a++)
476cdf0e10cSrcweir 			{
477cdf0e10cSrcweir 				SdrPageWindow* pTarget = GetPageWindow(a);
478cdf0e10cSrcweir 				pTarget->RedrawLayer(&nID, pRedirector);
479cdf0e10cSrcweir 			}
480cdf0e10cSrcweir 		}
481cdf0e10cSrcweir 	}
482cdf0e10cSrcweir }
483cdf0e10cSrcweir 
484cdf0e10cSrcweir void SdrPageView::SetDesignMode( bool _bDesignMode ) const
485cdf0e10cSrcweir {
486cdf0e10cSrcweir     for ( sal_uInt32 i = 0L; i < PageWindowCount(); ++i )
487cdf0e10cSrcweir     {
488cdf0e10cSrcweir         const SdrPageWindow& rPageViewWindow = *GetPageWindow(i);
489cdf0e10cSrcweir         rPageViewWindow.SetDesignMode( _bDesignMode );
490cdf0e10cSrcweir     }
491cdf0e10cSrcweir }
492cdf0e10cSrcweir 
493cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
494cdf0e10cSrcweir 
495cdf0e10cSrcweir #ifdef OS2
496cdf0e10cSrcweir #define RGBCOLOR(r,g,b) ((sal_uIntPtr)(((sal_uInt8)(b) | ((sal_uInt16)(g)<<8)) | (((sal_uIntPtr)(sal_uInt8)(r))<<16)))
497cdf0e10cSrcweir #endif
498cdf0e10cSrcweir 
499cdf0e10cSrcweir void SdrPageView::DrawPageViewGrid(OutputDevice& rOut, const Rectangle& rRect, Color aColor)
500cdf0e10cSrcweir {
501cdf0e10cSrcweir 	if (GetPage()==NULL)
502cdf0e10cSrcweir 		return;
503cdf0e10cSrcweir 
504cdf0e10cSrcweir 	long nx1=GetView().aGridBig.Width();
505cdf0e10cSrcweir 	long nx2=GetView().aGridFin.Width();
506cdf0e10cSrcweir 	long ny1=GetView().aGridBig.Height();
507cdf0e10cSrcweir 	long ny2=GetView().aGridFin.Height();
508cdf0e10cSrcweir 
509cdf0e10cSrcweir 	if (nx1==0) nx1=nx2;
510cdf0e10cSrcweir 	if (nx2==0) nx2=nx1;
511cdf0e10cSrcweir 	if (ny1==0) ny1=ny2;
512cdf0e10cSrcweir 	if (ny2==0) ny2=ny1;
513cdf0e10cSrcweir 	if (nx1==0) { nx1=ny1; nx2=ny2; }
514cdf0e10cSrcweir 	if (ny1==0) { ny1=nx1; ny2=nx2; }
515cdf0e10cSrcweir 	if (nx1<0) nx1=-nx1;
516cdf0e10cSrcweir 	if (nx2<0) nx2=-nx2;
517cdf0e10cSrcweir 	if (ny1<0) ny1=-ny1;
518cdf0e10cSrcweir 	if (ny2<0) ny2=-ny2;
519cdf0e10cSrcweir 
520cdf0e10cSrcweir 	if (nx1!=0)
521cdf0e10cSrcweir 	{
522cdf0e10cSrcweir 		// no more global output size, use window size instead to decide grid sizes
523cdf0e10cSrcweir 		long nScreenWdt = rOut.GetOutputSizePixel().Width();
524cdf0e10cSrcweir 		// old: long nScreenWdt=System::GetDesktopRectPixel().GetWidth();
525cdf0e10cSrcweir 
526cdf0e10cSrcweir 		// Grid bei kleinen Zoomstufen etwas erweitern
527cdf0e10cSrcweir 		//Size a1PixSiz(rOut.PixelToLogic(Size(1,1)));
528cdf0e10cSrcweir 		long nMinDotPix=2;
529cdf0e10cSrcweir 		long nMinLinPix=4;
530cdf0e10cSrcweir 
531cdf0e10cSrcweir 		if (nScreenWdt>=1600)
532cdf0e10cSrcweir 		{
533cdf0e10cSrcweir 			nMinDotPix=4;
534cdf0e10cSrcweir 			nMinLinPix=8;
535cdf0e10cSrcweir 		}
536cdf0e10cSrcweir 		else if (nScreenWdt>=1024)
537cdf0e10cSrcweir 		{
538cdf0e10cSrcweir 			nMinDotPix=3;
539cdf0e10cSrcweir 			nMinLinPix=6;
540cdf0e10cSrcweir 		}
541cdf0e10cSrcweir 		else
542cdf0e10cSrcweir 		{ // z.B. 640x480
543cdf0e10cSrcweir 			nMinDotPix=2;
544cdf0e10cSrcweir 			nMinLinPix=4;
545cdf0e10cSrcweir 		}
546cdf0e10cSrcweir 		Size aMinDotDist(rOut.PixelToLogic(Size(nMinDotPix,nMinDotPix)));
547cdf0e10cSrcweir 		//Size a3PixSiz(rOut.PixelToLogic(Size(2,2)));
548cdf0e10cSrcweir 		Size aMinLinDist(rOut.PixelToLogic(Size(nMinLinPix,nMinLinPix)));
549cdf0e10cSrcweir 		FASTBOOL bHoriSolid=nx2<aMinDotDist.Width();
550cdf0e10cSrcweir 		FASTBOOL bVertSolid=ny2<aMinDotDist.Height();
551cdf0e10cSrcweir 		// Linienabstand vergroessern (mind. 4 Pixel)
552cdf0e10cSrcweir 		// Vergroesserung: *2 *5 *10 *20 *50 *100 ...
553cdf0e10cSrcweir 		int nTgl=0;
554cdf0e10cSrcweir 		long nVal0=nx1;
555cdf0e10cSrcweir 		while (nx1<aMinLinDist.Width())
556cdf0e10cSrcweir 		{
557cdf0e10cSrcweir 			long a=nx1;
558cdf0e10cSrcweir 
559cdf0e10cSrcweir 			if (nTgl==0) nx1*=2;
560cdf0e10cSrcweir 			if (nTgl==1) nx1=nVal0*5; // => nx1*=2.5
561cdf0e10cSrcweir 			if (nTgl==2) nx1*=2;
562cdf0e10cSrcweir 
563cdf0e10cSrcweir 			nVal0=a;
564cdf0e10cSrcweir 			nTgl++; if (nTgl>=3) nTgl=0;
565cdf0e10cSrcweir 		}
566cdf0e10cSrcweir 		nTgl=0;
567cdf0e10cSrcweir 		nVal0=ny1;
568cdf0e10cSrcweir 		while (ny1<aMinLinDist.Height())
569cdf0e10cSrcweir 		{
570cdf0e10cSrcweir 			long a=ny1;
571cdf0e10cSrcweir 
572cdf0e10cSrcweir 			if (nTgl==0) ny1*=2;
573cdf0e10cSrcweir 			if (nTgl==1) ny1=nVal0*5; // => ny1*=2.5
574cdf0e10cSrcweir 			if (nTgl==2) ny1*=2;
575cdf0e10cSrcweir 
576cdf0e10cSrcweir 			nVal0=a;
577cdf0e10cSrcweir 			nTgl++;
578cdf0e10cSrcweir 
579cdf0e10cSrcweir 			if (nTgl>=3) nTgl=0;
580cdf0e10cSrcweir 		}
581cdf0e10cSrcweir 		// Keine Zwischenpunkte, wenn...
582cdf0e10cSrcweir 		//if (nx2<a2PixSiz.Width()) nx2=nx1;
583cdf0e10cSrcweir 		//if (ny2<a2PixSiz.Height()) ny2=ny1;
584cdf0e10cSrcweir 
585cdf0e10cSrcweir 		FASTBOOL bHoriFine=nx2<nx1;
586cdf0e10cSrcweir 		FASTBOOL bVertFine=ny2<ny1;
587cdf0e10cSrcweir 		FASTBOOL bHoriLines=bHoriSolid || bHoriFine || !bVertFine;
588cdf0e10cSrcweir 		FASTBOOL bVertLines=bVertSolid || bVertFine;
589cdf0e10cSrcweir 
590cdf0e10cSrcweir 		Color aColorMerk( rOut.GetLineColor() );
591cdf0e10cSrcweir 		rOut.SetLineColor( aColor );
592cdf0e10cSrcweir 
593cdf0e10cSrcweir 		bool bMap0=rOut.IsMapModeEnabled();
594cdf0e10cSrcweir 
595cdf0e10cSrcweir 		long nWrX=0;//aWriterPageOffset.X();
596cdf0e10cSrcweir 		long nWrY=0;//aWriterPageOffset.Y();
597cdf0e10cSrcweir 		Point aOrg(aPgOrg);
598cdf0e10cSrcweir 		long x1=GetPage()->GetLftBorder()+1+nWrX;
599cdf0e10cSrcweir 		long x2=GetPage()->GetWdt()-GetPage()->GetRgtBorder()-1+nWrY;
600cdf0e10cSrcweir 		long y1=GetPage()->GetUppBorder()+1+nWrX;
601cdf0e10cSrcweir 		long y2=GetPage()->GetHgt()-GetPage()->GetLwrBorder()-1+nWrY;
602cdf0e10cSrcweir 		const SdrPageGridFrameList* pFrames=GetPage()->GetGridFrameList(this,NULL);
603cdf0e10cSrcweir 		//sal_uInt16 nBufSiz=1024; // 4k Buffer = max. 512 Punkte
604cdf0e10cSrcweir 		// #90353# long* pBuf = NULL;
605cdf0e10cSrcweir 		sal_uInt16 nGridPaintAnz=1;
606cdf0e10cSrcweir 		if (pFrames!=NULL) nGridPaintAnz=pFrames->GetCount();
607cdf0e10cSrcweir 		for (sal_uInt16 nGridPaintNum=0; nGridPaintNum<nGridPaintAnz; nGridPaintNum++) {
608cdf0e10cSrcweir 			if (pFrames!=NULL) {
609cdf0e10cSrcweir 				const SdrPageGridFrame& rGF=(*pFrames)[nGridPaintNum];
610cdf0e10cSrcweir 				nWrX=rGF.GetPaperRect().Left();
611cdf0e10cSrcweir 				nWrY=rGF.GetPaperRect().Top();
612cdf0e10cSrcweir 				x1=rGF.GetUserArea().Left();
613cdf0e10cSrcweir 				x2=rGF.GetUserArea().Right();
614cdf0e10cSrcweir 				y1=rGF.GetUserArea().Top();
615cdf0e10cSrcweir 				y2=rGF.GetUserArea().Bottom();
616cdf0e10cSrcweir 				aOrg=rGF.GetUserArea().TopLeft();
617cdf0e10cSrcweir 				aOrg-=rGF.GetPaperRect().TopLeft();
618cdf0e10cSrcweir 			}
619cdf0e10cSrcweir 			if (!rRect.IsEmpty()) {
620cdf0e10cSrcweir 				Size a1PixSiz(rOut.PixelToLogic(Size(1,1)));
621cdf0e10cSrcweir 				long nX1Pix=a1PixSiz.Width();  // 1 Pixel Toleranz drauf
622cdf0e10cSrcweir 				long nY1Pix=a1PixSiz.Height();
623cdf0e10cSrcweir 				if (x1<rRect.Left()  -nX1Pix) x1=rRect.Left()  -nX1Pix;
624cdf0e10cSrcweir 				if (x2>rRect.Right() +nX1Pix) x2=rRect.Right() +nX1Pix;
625cdf0e10cSrcweir 				if (y1<rRect.Top()	 -nY1Pix) y1=rRect.Top()   -nY1Pix;
626cdf0e10cSrcweir 				if (y2>rRect.Bottom()+nY1Pix) y2=rRect.Bottom()+nY1Pix;
627cdf0e10cSrcweir 			}
628cdf0e10cSrcweir 			Point aPnt;
629cdf0e10cSrcweir 
630cdf0e10cSrcweir 			long xBigOrg=aOrg.X()+nWrX;
631cdf0e10cSrcweir 			while (xBigOrg>=x1) xBigOrg-=nx1;
632cdf0e10cSrcweir 			while (xBigOrg<x1) xBigOrg+=nx1;
633cdf0e10cSrcweir 			long xFinOrg=xBigOrg;
634cdf0e10cSrcweir 			while (xFinOrg>=x1) xFinOrg-=nx2;
635cdf0e10cSrcweir 			while (xFinOrg<x1) xFinOrg+=nx2;
636cdf0e10cSrcweir 
637cdf0e10cSrcweir 			long yBigOrg=aOrg.Y()+nWrY;
638cdf0e10cSrcweir 			while (yBigOrg>=y1) yBigOrg-=ny1;
639cdf0e10cSrcweir 			while (yBigOrg<y1) yBigOrg+=ny1;
640cdf0e10cSrcweir 			long yFinOrg=yBigOrg;
641cdf0e10cSrcweir 			while (yFinOrg>=y1) yFinOrg-=ny2;
642cdf0e10cSrcweir 			while (yFinOrg<y1) yFinOrg+=ny2;
643cdf0e10cSrcweir 
644cdf0e10cSrcweir 			if( x1 <= x2 && y1 <= y2 )
645cdf0e10cSrcweir 			{
646cdf0e10cSrcweir 				if( bHoriLines )
647cdf0e10cSrcweir 				{
648cdf0e10cSrcweir 					sal_uIntPtr nGridFlags = ( bHoriSolid ? GRID_HORZLINES : GRID_DOTS );
649cdf0e10cSrcweir 					sal_uInt16 nSteps = sal_uInt16(nx1 / nx2);
650cdf0e10cSrcweir 					sal_uInt32 nRestPerStepMul1000 = nSteps ? ( ((nx1 * 1000L)/ nSteps) - (nx2 * 1000L) ) : 0;
651cdf0e10cSrcweir 					sal_uInt32 nStepOffset = 0;
652cdf0e10cSrcweir 					sal_uInt16 nPointOffset = 0;
653cdf0e10cSrcweir 
654cdf0e10cSrcweir 					for(sal_uInt16 a=0;a<nSteps;a++)
655cdf0e10cSrcweir 					{
656cdf0e10cSrcweir 						// Zeichnen
657cdf0e10cSrcweir 						rOut.DrawGrid(
658cdf0e10cSrcweir 							Rectangle( xFinOrg + (a * nx2) + nPointOffset, yBigOrg, x2, y2 ),
659cdf0e10cSrcweir 							Size( nx1, ny1 ), nGridFlags );
660cdf0e10cSrcweir 
661cdf0e10cSrcweir 						// Schritt machen
662cdf0e10cSrcweir 						nStepOffset += nRestPerStepMul1000;
663cdf0e10cSrcweir 						while(nStepOffset >= 1000)
664cdf0e10cSrcweir 						{
665cdf0e10cSrcweir 							nStepOffset -= 1000;
666cdf0e10cSrcweir 							nPointOffset++;
667cdf0e10cSrcweir 						}
668cdf0e10cSrcweir 					}
669cdf0e10cSrcweir 				}
670cdf0e10cSrcweir 
671cdf0e10cSrcweir 				if( bVertLines )
672cdf0e10cSrcweir 				{
673cdf0e10cSrcweir 					sal_uIntPtr nGridFlags = ( bVertSolid ? GRID_VERTLINES : GRID_DOTS );
674cdf0e10cSrcweir 					sal_uInt16 nSteps = sal_uInt16(ny1 / ny2);
675cdf0e10cSrcweir 					sal_uInt32 nRestPerStepMul1000 = nSteps ? ( ((ny1 * 1000L)/ nSteps) - (ny2 * 1000L) ) : 0;
676cdf0e10cSrcweir 					sal_uInt32 nStepOffset = 0;
677cdf0e10cSrcweir 					sal_uInt16 nPointOffset = 0;
678cdf0e10cSrcweir 
679cdf0e10cSrcweir 					for(sal_uInt16 a=0;a<nSteps;a++)
680cdf0e10cSrcweir 					{
681cdf0e10cSrcweir 						// Zeichnen
682cdf0e10cSrcweir 						rOut.DrawGrid(
683cdf0e10cSrcweir 							Rectangle( xBigOrg, yFinOrg + (a * ny2) + nPointOffset, x2, y2 ),
684cdf0e10cSrcweir 							Size( nx1, ny1 ), nGridFlags );
685cdf0e10cSrcweir 
686cdf0e10cSrcweir 						// Schritt machen
687cdf0e10cSrcweir 						nStepOffset += nRestPerStepMul1000;
688cdf0e10cSrcweir 						while(nStepOffset >= 1000)
689cdf0e10cSrcweir 						{
690cdf0e10cSrcweir 							nStepOffset -= 1000;
691cdf0e10cSrcweir 							nPointOffset++;
692cdf0e10cSrcweir 						}
693cdf0e10cSrcweir 					}
694cdf0e10cSrcweir 
695cdf0e10cSrcweir 					// rOut.DrawGrid( Rectangle( xo + xBigOrg, yo + yFinOrg, x2, y2 ), Size( nx1, ny2 ), nGridFlags );
696cdf0e10cSrcweir 				}
697cdf0e10cSrcweir 			}
698cdf0e10cSrcweir 		}
699cdf0e10cSrcweir 
700cdf0e10cSrcweir 		rOut.EnableMapMode(bMap0);
701cdf0e10cSrcweir 		rOut.SetLineColor(aColorMerk);
702cdf0e10cSrcweir 	}
703cdf0e10cSrcweir }
704cdf0e10cSrcweir 
705cdf0e10cSrcweir void SdrPageView::AdjHdl()
706cdf0e10cSrcweir {
707cdf0e10cSrcweir 	GetView().AdjustMarkHdl();
708cdf0e10cSrcweir }
709cdf0e10cSrcweir 
710cdf0e10cSrcweir void SdrPageView::SetLayer(const XubString& rName, SetOfByte& rBS, sal_Bool bJa)
711cdf0e10cSrcweir {
712cdf0e10cSrcweir 	if(!GetPage())
713cdf0e10cSrcweir 		return;
714cdf0e10cSrcweir 
715cdf0e10cSrcweir 	SdrLayerID nID = GetPage()->GetLayerAdmin().GetLayerID(rName, sal_True);
716cdf0e10cSrcweir 
717cdf0e10cSrcweir 	if(SDRLAYER_NOTFOUND != nID)
718cdf0e10cSrcweir 		rBS.Set(nID, bJa);
719cdf0e10cSrcweir }
720cdf0e10cSrcweir 
721cdf0e10cSrcweir sal_Bool SdrPageView::IsLayer(const XubString& rName, const SetOfByte& rBS) const
722cdf0e10cSrcweir {
723cdf0e10cSrcweir 	if(!GetPage())
724cdf0e10cSrcweir 		return sal_False;
725cdf0e10cSrcweir 
726cdf0e10cSrcweir 	sal_Bool bRet(sal_False);
727cdf0e10cSrcweir 
728cdf0e10cSrcweir 	if(rName.Len())
729cdf0e10cSrcweir 	{
730cdf0e10cSrcweir 		SdrLayerID nId = GetPage()->GetLayerAdmin().GetLayerID(rName, sal_True);
731cdf0e10cSrcweir 
732cdf0e10cSrcweir 		if(SDRLAYER_NOTFOUND != nId)
733cdf0e10cSrcweir 		{
734cdf0e10cSrcweir 			bRet = rBS.IsSet(nId);
735cdf0e10cSrcweir 		}
736cdf0e10cSrcweir 	}
737cdf0e10cSrcweir 
738cdf0e10cSrcweir 	return bRet;
739cdf0e10cSrcweir }
740cdf0e10cSrcweir 
741cdf0e10cSrcweir void SdrPageView::SetAllLayers(SetOfByte& rB, sal_Bool bJa)
742cdf0e10cSrcweir {
743cdf0e10cSrcweir 	if(bJa)
744cdf0e10cSrcweir 	{
745cdf0e10cSrcweir 		rB.SetAll();
746cdf0e10cSrcweir 		rB.Clear(SDRLAYER_NOTFOUND);
747cdf0e10cSrcweir 	}
748cdf0e10cSrcweir 	else
749cdf0e10cSrcweir 	{
750cdf0e10cSrcweir 		rB.ClearAll();
751cdf0e10cSrcweir 	}
752cdf0e10cSrcweir }
753cdf0e10cSrcweir 
754cdf0e10cSrcweir sal_Bool SdrPageView::IsObjMarkable(SdrObject* pObj) const
755cdf0e10cSrcweir {
756cdf0e10cSrcweir 	if(pObj)
757cdf0e10cSrcweir 	{
758cdf0e10cSrcweir 		// Vom Markieren ausgeschlossen?
759cdf0e10cSrcweir 		if(pObj->IsMarkProtect())
760cdf0e10cSrcweir 		{
761cdf0e10cSrcweir 			return sal_False;
762cdf0e10cSrcweir 		}
763cdf0e10cSrcweir 
764cdf0e10cSrcweir 		// only visible are markable
765cdf0e10cSrcweir 		if( !pObj->IsVisible() )
766cdf0e10cSrcweir 		{
767cdf0e10cSrcweir 			return sal_False;
768cdf0e10cSrcweir 		}
769cdf0e10cSrcweir 
770cdf0e10cSrcweir 		// #112440#
771cdf0e10cSrcweir 		if(pObj->ISA(SdrObjGroup))
772cdf0e10cSrcweir 		{
773cdf0e10cSrcweir 			// If object is a Group object, visibility depends evtl. on
774cdf0e10cSrcweir 			// multiple layers. If one object is markable, Group is markable.
775cdf0e10cSrcweir 			SdrObjList* pObjList = ((SdrObjGroup*)pObj)->GetSubList();
776cdf0e10cSrcweir 
777cdf0e10cSrcweir 			if(pObjList && pObjList->GetObjCount())
778cdf0e10cSrcweir 			{
779cdf0e10cSrcweir 				sal_Bool bGroupIsMarkable(sal_False);
780cdf0e10cSrcweir 
781cdf0e10cSrcweir 				for(sal_uInt32 a(0L); !bGroupIsMarkable && a < pObjList->GetObjCount(); a++)
782cdf0e10cSrcweir 				{
783cdf0e10cSrcweir 					SdrObject* pCandidate = pObjList->GetObj(a);
784cdf0e10cSrcweir 
785cdf0e10cSrcweir 					// call recursively
786cdf0e10cSrcweir 					if(IsObjMarkable(pCandidate))
787cdf0e10cSrcweir 					{
788cdf0e10cSrcweir 						bGroupIsMarkable = sal_True;
789cdf0e10cSrcweir 					}
790cdf0e10cSrcweir 				}
791cdf0e10cSrcweir 
792cdf0e10cSrcweir 				return bGroupIsMarkable;
793cdf0e10cSrcweir 			}
794cdf0e10cSrcweir 			else
795cdf0e10cSrcweir 			{
796cdf0e10cSrcweir 				// #i43302#
797cdf0e10cSrcweir 				// Allow empty groups to be selected to be able to delete them
798cdf0e10cSrcweir 				return sal_True;
799cdf0e10cSrcweir 			}
800cdf0e10cSrcweir 		}
801cdf0e10cSrcweir 		else
802cdf0e10cSrcweir 		{
803cdf0e10cSrcweir 			// Der Layer muss sichtbar und darf nicht gesperrt sein
804cdf0e10cSrcweir 			SdrLayerID nL = pObj->GetLayer();
805cdf0e10cSrcweir 			return (aLayerVisi.IsSet(sal_uInt8(nL)) && !aLayerLock.IsSet(sal_uInt8(nL)));
806cdf0e10cSrcweir 		}
807cdf0e10cSrcweir 	}
808cdf0e10cSrcweir 
809cdf0e10cSrcweir 	return sal_False;
810cdf0e10cSrcweir }
811cdf0e10cSrcweir 
812cdf0e10cSrcweir void SdrPageView::SetPageOrigin(const Point& rOrg)
813cdf0e10cSrcweir {
814cdf0e10cSrcweir 	if (rOrg!=aPgOrg) {
815cdf0e10cSrcweir 		aPgOrg=rOrg;
816cdf0e10cSrcweir 		if (GetView().IsGridVisible()) {
817cdf0e10cSrcweir 			InvalidateAllWin();
818cdf0e10cSrcweir 		}
819cdf0e10cSrcweir 	}
820cdf0e10cSrcweir }
821cdf0e10cSrcweir 
822cdf0e10cSrcweir void SdrPageView::ImpInvalidateHelpLineArea(sal_uInt16 nNum) const
823cdf0e10cSrcweir {
824cdf0e10cSrcweir 	if (GetView().IsHlplVisible() && nNum<aHelpLines.GetCount()) {
825cdf0e10cSrcweir 		const SdrHelpLine& rHL=aHelpLines[nNum];
826cdf0e10cSrcweir 
827cdf0e10cSrcweir 		for(sal_uInt32 a(0L); a < GetView().PaintWindowCount(); a++)
828cdf0e10cSrcweir 		{
829cdf0e10cSrcweir 			SdrPaintWindow* pCandidate = GetView().GetPaintWindow(a);
830cdf0e10cSrcweir 
831cdf0e10cSrcweir 			if(pCandidate->OutputToWindow())
832cdf0e10cSrcweir 			{
833cdf0e10cSrcweir 				OutputDevice& rOutDev = pCandidate->GetOutputDevice();
834cdf0e10cSrcweir 				Rectangle aR(rHL.GetBoundRect(rOutDev));
835cdf0e10cSrcweir 				Size aSiz(rOutDev.PixelToLogic(Size(1,1)));
836cdf0e10cSrcweir 				aR.Left() -= aSiz.Width();
837cdf0e10cSrcweir 				aR.Right() += aSiz.Width();
838cdf0e10cSrcweir 				aR.Top() -= aSiz.Height();
839cdf0e10cSrcweir 				aR.Bottom() += aSiz.Height();
840cdf0e10cSrcweir 				((SdrView&)GetView()).InvalidateOneWin((Window&)rOutDev, aR);
841cdf0e10cSrcweir 			}
842cdf0e10cSrcweir 		}
843cdf0e10cSrcweir 	}
844cdf0e10cSrcweir }
845cdf0e10cSrcweir 
846cdf0e10cSrcweir void SdrPageView::SetHelpLines(const SdrHelpLineList& rHLL)
847cdf0e10cSrcweir {
848cdf0e10cSrcweir 	aHelpLines=rHLL;
849cdf0e10cSrcweir 	InvalidateAllWin();
850cdf0e10cSrcweir }
851cdf0e10cSrcweir 
852cdf0e10cSrcweir void SdrPageView::SetHelpLine(sal_uInt16 nNum, const SdrHelpLine& rNewHelpLine)
853cdf0e10cSrcweir {
854cdf0e10cSrcweir 	if (nNum<aHelpLines.GetCount() && aHelpLines[nNum]!=rNewHelpLine) {
855cdf0e10cSrcweir 		FASTBOOL bNeedRedraw=sal_True;
856cdf0e10cSrcweir 		if (aHelpLines[nNum].GetKind()==rNewHelpLine.GetKind()) {
857cdf0e10cSrcweir 			switch (rNewHelpLine.GetKind()) {
858cdf0e10cSrcweir 				case SDRHELPLINE_VERTICAL  : if (aHelpLines[nNum].GetPos().X()==rNewHelpLine.GetPos().X()) bNeedRedraw=sal_False; break;
859cdf0e10cSrcweir 				case SDRHELPLINE_HORIZONTAL: if (aHelpLines[nNum].GetPos().Y()==rNewHelpLine.GetPos().Y()) bNeedRedraw=sal_False; break;
860cdf0e10cSrcweir 				default: break;
861cdf0e10cSrcweir 			} // switch
862cdf0e10cSrcweir 		}
863cdf0e10cSrcweir 		if (bNeedRedraw) ImpInvalidateHelpLineArea(nNum);
864cdf0e10cSrcweir 		aHelpLines[nNum]=rNewHelpLine;
865cdf0e10cSrcweir 		if (bNeedRedraw) ImpInvalidateHelpLineArea(nNum);
866cdf0e10cSrcweir 	}
867cdf0e10cSrcweir }
868cdf0e10cSrcweir 
869cdf0e10cSrcweir void SdrPageView::DeleteHelpLine(sal_uInt16 nNum)
870cdf0e10cSrcweir {
871cdf0e10cSrcweir 	if (nNum<aHelpLines.GetCount()) {
872cdf0e10cSrcweir 		ImpInvalidateHelpLineArea(nNum);
873cdf0e10cSrcweir 		aHelpLines.Delete(nNum);
874cdf0e10cSrcweir 	}
875cdf0e10cSrcweir }
876cdf0e10cSrcweir 
877cdf0e10cSrcweir void SdrPageView::InsertHelpLine(const SdrHelpLine& rHL, sal_uInt16 nNum)
878cdf0e10cSrcweir {
879cdf0e10cSrcweir 	if (nNum>aHelpLines.GetCount()) nNum=aHelpLines.GetCount();
880cdf0e10cSrcweir 	aHelpLines.Insert(rHL,nNum);
881cdf0e10cSrcweir 	if (GetView().IsHlplVisible()) {
882cdf0e10cSrcweir 		if (GetView().IsHlplFront()) {
883cdf0e10cSrcweir 			// Hier optimieren ...
884cdf0e10cSrcweir 			ImpInvalidateHelpLineArea(nNum);
885cdf0e10cSrcweir 		 } else {
886cdf0e10cSrcweir 			ImpInvalidateHelpLineArea(nNum);
887cdf0e10cSrcweir 		}
888cdf0e10cSrcweir 	}
889cdf0e10cSrcweir }
890cdf0e10cSrcweir 
891cdf0e10cSrcweir // Betretene Gruppe und Liste setzen
892cdf0e10cSrcweir void SdrPageView::SetAktGroupAndList(SdrObject* pNewGroup, SdrObjList* pNewList)
893cdf0e10cSrcweir {
894cdf0e10cSrcweir 	if(pAktGroup != pNewGroup)
895cdf0e10cSrcweir 	{
896cdf0e10cSrcweir 		pAktGroup = pNewGroup;
897cdf0e10cSrcweir 	}
898cdf0e10cSrcweir 	if(pAktList != pNewList)
899cdf0e10cSrcweir 	{
900cdf0e10cSrcweir 		pAktList = pNewList;
901cdf0e10cSrcweir 	}
902cdf0e10cSrcweir }
903cdf0e10cSrcweir 
904cdf0e10cSrcweir sal_Bool SdrPageView::EnterGroup(SdrObject* pObj)
905cdf0e10cSrcweir {
906cdf0e10cSrcweir 	sal_Bool bRet(sal_False);
907cdf0e10cSrcweir 
908cdf0e10cSrcweir 	if(pObj && pObj->IsGroupObject())
909cdf0e10cSrcweir 	{
910cdf0e10cSrcweir 		sal_Bool bGlueInvalidate(GetView().ImpIsGlueVisible());
911cdf0e10cSrcweir 
912cdf0e10cSrcweir 		if(bGlueInvalidate)
913cdf0e10cSrcweir 		{
914cdf0e10cSrcweir 			GetView().GlueInvalidate();
915cdf0e10cSrcweir 		}
916cdf0e10cSrcweir 
917cdf0e10cSrcweir 		// deselect all
918cdf0e10cSrcweir 		GetView().UnmarkAll();
919cdf0e10cSrcweir 
920cdf0e10cSrcweir 		// set current group and list
921cdf0e10cSrcweir 		SdrObjList* pNewObjList = pObj->GetSubList();
922cdf0e10cSrcweir 		SetAktGroupAndList(pObj, pNewObjList);
923cdf0e10cSrcweir 
924cdf0e10cSrcweir 		// select contained object if only one object is contained,
925cdf0e10cSrcweir 		// else select nothing and let the user decide what to do next
926cdf0e10cSrcweir 		if(pNewObjList && pNewObjList->GetObjCount() == 1)
927cdf0e10cSrcweir 		{
928cdf0e10cSrcweir 			SdrObject* pFirstObject = pNewObjList->GetObj(0L);
929cdf0e10cSrcweir 
930cdf0e10cSrcweir 			if(GetView().GetSdrPageView())
931cdf0e10cSrcweir 			{
932cdf0e10cSrcweir 				GetView().MarkObj(pFirstObject, GetView().GetSdrPageView());
933cdf0e10cSrcweir 			}
934cdf0e10cSrcweir 		}
935cdf0e10cSrcweir 
936cdf0e10cSrcweir 		// build new handles
937cdf0e10cSrcweir 		GetView().AdjustMarkHdl();
938cdf0e10cSrcweir 
939cdf0e10cSrcweir 		// invalidate only when view wants to visualize group entering
940cdf0e10cSrcweir 		if(GetView().DoVisualizeEnteredGroup())
941cdf0e10cSrcweir 		{
942cdf0e10cSrcweir 			InvalidateAllWin();
943cdf0e10cSrcweir 		}
944cdf0e10cSrcweir 
945cdf0e10cSrcweir 		if (bGlueInvalidate)
946cdf0e10cSrcweir 		{
947cdf0e10cSrcweir 			GetView().GlueInvalidate();
948cdf0e10cSrcweir 		}
949cdf0e10cSrcweir 
950cdf0e10cSrcweir 		bRet = sal_True;
951cdf0e10cSrcweir 	}
952cdf0e10cSrcweir 
953cdf0e10cSrcweir 	return bRet;
954cdf0e10cSrcweir }
955cdf0e10cSrcweir 
956cdf0e10cSrcweir void SdrPageView::LeaveOneGroup()
957cdf0e10cSrcweir {
958cdf0e10cSrcweir 	if(GetAktGroup())
959cdf0e10cSrcweir 	{
960cdf0e10cSrcweir 		sal_Bool bGlueInvalidate = (GetView().ImpIsGlueVisible());
961cdf0e10cSrcweir 
962cdf0e10cSrcweir 		if(bGlueInvalidate)
963cdf0e10cSrcweir 			GetView().GlueInvalidate();
964cdf0e10cSrcweir 
965cdf0e10cSrcweir 		SdrObject* pLastGroup = GetAktGroup();
966cdf0e10cSrcweir 		SdrObject* pParentGroup = GetAktGroup()->GetUpGroup();
967cdf0e10cSrcweir 		SdrObjList* pParentList = GetPage();
968cdf0e10cSrcweir 
969cdf0e10cSrcweir 		if(pParentGroup)
970cdf0e10cSrcweir 			pParentList = pParentGroup->GetSubList();
971cdf0e10cSrcweir 
972cdf0e10cSrcweir 		// Alles deselektieren
973cdf0e10cSrcweir 		GetView().UnmarkAll();
974cdf0e10cSrcweir 
975cdf0e10cSrcweir 		// Zuweisungen, pAktGroup und pAktList muessen gesetzt sein
976cdf0e10cSrcweir 		SetAktGroupAndList(pParentGroup, pParentList);
977cdf0e10cSrcweir 
978cdf0e10cSrcweir 		// gerade verlassene Gruppe selektieren
979cdf0e10cSrcweir 		if(pLastGroup)
980cdf0e10cSrcweir 			if(GetView().GetSdrPageView())
981cdf0e10cSrcweir 				GetView().MarkObj(pLastGroup, GetView().GetSdrPageView());
982cdf0e10cSrcweir 
983cdf0e10cSrcweir 		GetView().AdjustMarkHdl();
984cdf0e10cSrcweir 
985cdf0e10cSrcweir 		// invalidate only when view wants to visualize group entering
986cdf0e10cSrcweir 		if(GetView().DoVisualizeEnteredGroup())
987cdf0e10cSrcweir 			InvalidateAllWin();
988cdf0e10cSrcweir 
989cdf0e10cSrcweir 		if(bGlueInvalidate)
990cdf0e10cSrcweir 			GetView().GlueInvalidate();
991cdf0e10cSrcweir 	}
992cdf0e10cSrcweir }
993cdf0e10cSrcweir 
994cdf0e10cSrcweir void SdrPageView::LeaveAllGroup()
995cdf0e10cSrcweir {
996cdf0e10cSrcweir 	if(GetAktGroup())
997cdf0e10cSrcweir 	{
998cdf0e10cSrcweir 		sal_Bool bGlueInvalidate = (GetView().ImpIsGlueVisible());
999cdf0e10cSrcweir 
1000cdf0e10cSrcweir 		if(bGlueInvalidate)
1001cdf0e10cSrcweir 			GetView().GlueInvalidate();
1002cdf0e10cSrcweir 
1003cdf0e10cSrcweir 		SdrObject* pLastGroup = GetAktGroup();
1004cdf0e10cSrcweir 
1005cdf0e10cSrcweir 		// Alles deselektieren
1006cdf0e10cSrcweir 		GetView().UnmarkAll();
1007cdf0e10cSrcweir 
1008cdf0e10cSrcweir 		// Zuweisungen, pAktGroup und pAktList muessen gesetzt sein
1009cdf0e10cSrcweir 		SetAktGroupAndList(NULL, GetPage());
1010cdf0e10cSrcweir 
1011cdf0e10cSrcweir 		// Oberste letzte Gruppe finden und selektieren
1012cdf0e10cSrcweir 		if(pLastGroup)
1013cdf0e10cSrcweir 		{
1014cdf0e10cSrcweir 			while(pLastGroup->GetUpGroup())
1015cdf0e10cSrcweir 				pLastGroup = pLastGroup->GetUpGroup();
1016cdf0e10cSrcweir 
1017cdf0e10cSrcweir 			if(GetView().GetSdrPageView())
1018cdf0e10cSrcweir 				GetView().MarkObj(pLastGroup, GetView().GetSdrPageView());
1019cdf0e10cSrcweir 		}
1020cdf0e10cSrcweir 
1021cdf0e10cSrcweir 		GetView().AdjustMarkHdl();
1022cdf0e10cSrcweir 
1023cdf0e10cSrcweir 		// invalidate only when view wants to visualize group entering
1024cdf0e10cSrcweir 		if(GetView().DoVisualizeEnteredGroup())
1025cdf0e10cSrcweir 			InvalidateAllWin();
1026cdf0e10cSrcweir 
1027cdf0e10cSrcweir 		if(bGlueInvalidate)
1028cdf0e10cSrcweir 			GetView().GlueInvalidate();
1029cdf0e10cSrcweir 	}
1030cdf0e10cSrcweir }
1031cdf0e10cSrcweir 
1032cdf0e10cSrcweir sal_uInt16 SdrPageView::GetEnteredLevel() const
1033cdf0e10cSrcweir {
1034cdf0e10cSrcweir 	sal_uInt16 nAnz=0;
1035cdf0e10cSrcweir 	SdrObject* pGrp=GetAktGroup();
1036cdf0e10cSrcweir 	while (pGrp!=NULL) {
1037cdf0e10cSrcweir 		nAnz++;
1038cdf0e10cSrcweir 		pGrp=pGrp->GetUpGroup();
1039cdf0e10cSrcweir 	}
1040cdf0e10cSrcweir 	return nAnz;
1041cdf0e10cSrcweir }
1042cdf0e10cSrcweir 
1043cdf0e10cSrcweir XubString SdrPageView::GetActualGroupName() const
1044cdf0e10cSrcweir {
1045cdf0e10cSrcweir 	if(GetAktGroup())
1046cdf0e10cSrcweir 	{
1047cdf0e10cSrcweir 		XubString aStr(GetAktGroup()->GetName());
1048cdf0e10cSrcweir 
1049cdf0e10cSrcweir 		if(!aStr.Len())
1050cdf0e10cSrcweir 			aStr += sal_Unicode('?');
1051cdf0e10cSrcweir 
1052cdf0e10cSrcweir 		return aStr;
1053cdf0e10cSrcweir 	}
1054cdf0e10cSrcweir 	else
1055cdf0e10cSrcweir 		return String();
1056cdf0e10cSrcweir }
1057cdf0e10cSrcweir 
1058cdf0e10cSrcweir XubString SdrPageView::GetActualPathName(sal_Unicode cSep) const
1059cdf0e10cSrcweir {
1060cdf0e10cSrcweir 	XubString aStr;
1061cdf0e10cSrcweir 	sal_Bool bNamFnd(sal_False);
1062cdf0e10cSrcweir 	SdrObject* pGrp = GetAktGroup();
1063cdf0e10cSrcweir 
1064cdf0e10cSrcweir 	while(pGrp)
1065cdf0e10cSrcweir 	{
1066cdf0e10cSrcweir 		XubString aStr1(pGrp->GetName());
1067cdf0e10cSrcweir 
1068cdf0e10cSrcweir 		if(!aStr1.Len())
1069cdf0e10cSrcweir 			aStr1 += sal_Unicode('?');
1070cdf0e10cSrcweir 		else
1071cdf0e10cSrcweir 			bNamFnd = sal_True;
1072cdf0e10cSrcweir 
1073cdf0e10cSrcweir 		aStr += aStr1;
1074cdf0e10cSrcweir 		pGrp = pGrp->GetUpGroup();
1075cdf0e10cSrcweir 
1076cdf0e10cSrcweir 		if(pGrp)
1077cdf0e10cSrcweir 			aStr += cSep;
1078cdf0e10cSrcweir 	}
1079cdf0e10cSrcweir 
1080cdf0e10cSrcweir 	if(!bNamFnd && GetAktGroup())
1081cdf0e10cSrcweir 	{
1082cdf0e10cSrcweir 		aStr = String();
1083cdf0e10cSrcweir 		aStr += sal_Unicode('(');
1084cdf0e10cSrcweir 		aStr += String::CreateFromInt32( GetEnteredLevel() );
1085cdf0e10cSrcweir 		aStr += sal_Unicode(')');
1086cdf0e10cSrcweir 	}
1087cdf0e10cSrcweir 
1088cdf0e10cSrcweir 	return aStr;
1089cdf0e10cSrcweir }
1090cdf0e10cSrcweir 
1091cdf0e10cSrcweir void SdrPageView::CheckAktGroup()
1092cdf0e10cSrcweir {
1093cdf0e10cSrcweir 	SdrObject* pGrp=GetAktGroup();
1094cdf0e10cSrcweir 	while (pGrp!=NULL &&
1095cdf0e10cSrcweir 		   (!pGrp->IsInserted() || pGrp->GetObjList()==NULL ||
1096cdf0e10cSrcweir 			pGrp->GetPage()==NULL || pGrp->GetModel()==NULL)) { // irgendwas daneben?
1097cdf0e10cSrcweir 		pGrp=pGrp->GetUpGroup();
1098cdf0e10cSrcweir 	}
1099cdf0e10cSrcweir 	if (pGrp!=GetAktGroup()) {
1100cdf0e10cSrcweir 		if (pGrp!=NULL) EnterGroup(pGrp);
1101cdf0e10cSrcweir 		else LeaveAllGroup();
1102cdf0e10cSrcweir 	}
1103cdf0e10cSrcweir }
1104cdf0e10cSrcweir 
1105cdf0e10cSrcweir // #103834# Set background color for svx at SdrPageViews
1106cdf0e10cSrcweir void SdrPageView::SetApplicationBackgroundColor(Color aBackgroundColor)
1107cdf0e10cSrcweir {
1108cdf0e10cSrcweir 	maBackgroundColor = aBackgroundColor;
1109cdf0e10cSrcweir }
1110cdf0e10cSrcweir 
1111cdf0e10cSrcweir // #109585#
1112cdf0e10cSrcweir Color SdrPageView::GetApplicationBackgroundColor() const
1113cdf0e10cSrcweir {
1114cdf0e10cSrcweir 	return maBackgroundColor;
1115cdf0e10cSrcweir }
1116cdf0e10cSrcweir 
1117cdf0e10cSrcweir // #103911# Set document color for svx at SdrPageViews
1118cdf0e10cSrcweir void SdrPageView::SetApplicationDocumentColor(Color aDocumentColor)
1119cdf0e10cSrcweir {
1120cdf0e10cSrcweir 	maDocumentColor = aDocumentColor;
1121cdf0e10cSrcweir }
1122cdf0e10cSrcweir 
1123cdf0e10cSrcweir Color SdrPageView::GetApplicationDocumentColor() const
1124cdf0e10cSrcweir {
1125cdf0e10cSrcweir 	return maDocumentColor;
1126cdf0e10cSrcweir }
1127cdf0e10cSrcweir 
1128cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1129cdf0e10cSrcweir // eof
1130