xref: /aoo42x/main/sd/source/ui/view/viewshe2.cxx (revision a5258243)
1cdf0e10cSrcweir /*************************************************************************
2cdf0e10cSrcweir  *
3cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4cdf0e10cSrcweir  *
5cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6cdf0e10cSrcweir  *
7cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8cdf0e10cSrcweir  *
9cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10cdf0e10cSrcweir  *
11cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14cdf0e10cSrcweir  *
15cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20cdf0e10cSrcweir  *
21cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25cdf0e10cSrcweir  *
26cdf0e10cSrcweir  ************************************************************************/
27cdf0e10cSrcweir 
28cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29cdf0e10cSrcweir #include "precompiled_sd.hxx"
30cdf0e10cSrcweir #include <com/sun/star/embed/NoVisualAreaSizeException.hpp>
31cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp>
32cdf0e10cSrcweir #include <com/sun/star/chart2/XChartDocument.hpp>
33cdf0e10cSrcweir #include <com/sun/star/drawing/FillStyle.hpp>
34cdf0e10cSrcweir #include <com/sun/star/drawing/LineStyle.hpp>
35cdf0e10cSrcweir 
36cdf0e10cSrcweir #include "ViewShell.hxx"
37cdf0e10cSrcweir #include "ViewShellHint.hxx"
38cdf0e10cSrcweir 
39cdf0e10cSrcweir #include "ViewShellImplementation.hxx"
40cdf0e10cSrcweir #include "FactoryIds.hxx"
41cdf0e10cSrcweir 
42cdf0e10cSrcweir #ifndef _SVXIDS_HRC
43cdf0e10cSrcweir #include <svx/svxids.hrc>
44cdf0e10cSrcweir #endif
45cdf0e10cSrcweir #ifndef _SCRBAR_HXX //autogen
46cdf0e10cSrcweir #include <vcl/scrbar.hxx>
47cdf0e10cSrcweir #endif
48cdf0e10cSrcweir #include <svx/svdpagv.hxx>
49cdf0e10cSrcweir #include <sfx2/dispatch.hxx>
50cdf0e10cSrcweir #include <sfx2/app.hxx>
51cdf0e10cSrcweir #include <svx/ruler.hxx>
52cdf0e10cSrcweir #include <editeng/outliner.hxx>
53cdf0e10cSrcweir #include <svtools/ehdl.hxx>
54cdf0e10cSrcweir #include <svx/svdoole2.hxx>
55cdf0e10cSrcweir #include <svtools/sfxecode.hxx>
56cdf0e10cSrcweir #include <svx/fmshell.hxx>
57cdf0e10cSrcweir #include <sfx2/dispatch.hxx>
58cdf0e10cSrcweir #include <rtl/ustrbuf.hxx>
59cdf0e10cSrcweir #include <unotools/moduleoptions.hxx>
60cdf0e10cSrcweir #ifndef _SVX_DIALOGS_HRC
61cdf0e10cSrcweir #include <svx/dialogs.hrc>
62cdf0e10cSrcweir #endif
63cdf0e10cSrcweir #include <sot/clsids.hxx>
64cdf0e10cSrcweir 
65cdf0e10cSrcweir #include "misc.hxx"
66cdf0e10cSrcweir #include "strings.hrc"
67cdf0e10cSrcweir #include "app.hrc"
68cdf0e10cSrcweir #include "unokywds.hxx"
69cdf0e10cSrcweir 
70cdf0e10cSrcweir #include "sdundogr.hxx"
71cdf0e10cSrcweir #include "FrameView.hxx"
72cdf0e10cSrcweir #include "undopage.hxx"
73cdf0e10cSrcweir #include "sdresid.hxx"
74cdf0e10cSrcweir #include "drawdoc.hxx"
75cdf0e10cSrcweir #include "View.hxx"
76cdf0e10cSrcweir #include "fupoor.hxx"
77cdf0e10cSrcweir #include "Client.hxx"
78cdf0e10cSrcweir #include "DrawDocShell.hxx"
79cdf0e10cSrcweir #include "fusearch.hxx"
80cdf0e10cSrcweir #include "slideshow.hxx"
81cdf0e10cSrcweir #include "sdpage.hxx"
82cdf0e10cSrcweir #include "DrawViewShell.hxx"
83cdf0e10cSrcweir #include "ViewShellBase.hxx"
84cdf0e10cSrcweir 
85cdf0e10cSrcweir #include "Window.hxx"
86cdf0e10cSrcweir 
87cdf0e10cSrcweir #include <sfx2/viewfrm.hxx>
88cdf0e10cSrcweir #include <svtools/soerr.hxx>
89cdf0e10cSrcweir #include <toolkit/helper/vclunohelper.hxx>
90cdf0e10cSrcweir 
91cdf0e10cSrcweir #ifdef _MSC_VER
92cdf0e10cSrcweir #pragma optimize ( "", off )
93cdf0e10cSrcweir #endif
94cdf0e10cSrcweir 
95cdf0e10cSrcweir using namespace com::sun::star;
96cdf0e10cSrcweir 
97cdf0e10cSrcweir const String aEmptyStr;
98cdf0e10cSrcweir 
99cdf0e10cSrcweir namespace sd {
100cdf0e10cSrcweir 
101cdf0e10cSrcweir /*************************************************************************
102cdf0e10cSrcweir |*
103cdf0e10cSrcweir |* Scrollbar-Update: Thumbpos und VisibleSize anpassen
104cdf0e10cSrcweir |*
105cdf0e10cSrcweir \************************************************************************/
106cdf0e10cSrcweir 
107cdf0e10cSrcweir void ViewShell::UpdateScrollBars()
108cdf0e10cSrcweir {
109cdf0e10cSrcweir 	if (mpHorizontalScrollBar.get() != NULL)
110cdf0e10cSrcweir 	{
111cdf0e10cSrcweir 		long nW = (long)(mpContentWindow->GetVisibleWidth() * 32000);
112cdf0e10cSrcweir 		long nX = (long)(mpContentWindow->GetVisibleX() * 32000);
113cdf0e10cSrcweir 		mpHorizontalScrollBar->SetVisibleSize(nW);
114cdf0e10cSrcweir 		mpHorizontalScrollBar->SetThumbPos(nX);
115cdf0e10cSrcweir 		nW = 32000 - nW;
116cdf0e10cSrcweir 		long nLine = (long) (mpContentWindow->GetScrlLineWidth() * nW);
117cdf0e10cSrcweir 		long nPage = (long) (mpContentWindow->GetScrlPageWidth() * nW);
118cdf0e10cSrcweir 		mpHorizontalScrollBar->SetLineSize(nLine);
119cdf0e10cSrcweir 		mpHorizontalScrollBar->SetPageSize(nPage);
120cdf0e10cSrcweir 	}
121cdf0e10cSrcweir 
122cdf0e10cSrcweir 	if (mpVerticalScrollBar.get() != NULL)
123cdf0e10cSrcweir 	{
124cdf0e10cSrcweir 		long nH = (long)(mpContentWindow->GetVisibleHeight() * 32000);
125cdf0e10cSrcweir 		long nY = (long)(mpContentWindow->GetVisibleY() * 32000);
126cdf0e10cSrcweir 
127cdf0e10cSrcweir 		if(IsPageFlipMode()) // ie in zoom mode where no panning
128cdf0e10cSrcweir 		{
129cdf0e10cSrcweir 			SdPage* pPage = static_cast<DrawViewShell*>(this)->GetActualPage();
130cdf0e10cSrcweir 			sal_uInt16 nCurPage = (pPage->GetPageNum() - 1) / 2;
131cdf0e10cSrcweir 			sal_uInt16 nTotalPages = GetDoc()->GetSdPageCount(pPage->GetPageKind());
132cdf0e10cSrcweir 			mpVerticalScrollBar->SetRange(Range(0,256*nTotalPages));
133cdf0e10cSrcweir 			mpVerticalScrollBar->SetVisibleSize(256);
134cdf0e10cSrcweir 			mpVerticalScrollBar->SetThumbPos(256*nCurPage);
135cdf0e10cSrcweir 			mpVerticalScrollBar->SetLineSize(256);
136cdf0e10cSrcweir 			mpVerticalScrollBar->SetPageSize(256);
137cdf0e10cSrcweir 		}
138cdf0e10cSrcweir 		else
139cdf0e10cSrcweir 		{
140cdf0e10cSrcweir 			mpVerticalScrollBar->SetRange(Range(0,32000));
141cdf0e10cSrcweir 			mpVerticalScrollBar->SetVisibleSize(nH);
142cdf0e10cSrcweir 			mpVerticalScrollBar->SetThumbPos(nY);
143cdf0e10cSrcweir 			nH = 32000 - nH;
144cdf0e10cSrcweir 			long nLine = (long) (mpContentWindow->GetScrlLineHeight() * nH);
145cdf0e10cSrcweir 			long nPage = (long) (mpContentWindow->GetScrlPageHeight() * nH);
146cdf0e10cSrcweir 			mpVerticalScrollBar->SetLineSize(nLine);
147cdf0e10cSrcweir 			mpVerticalScrollBar->SetPageSize(nPage);
148cdf0e10cSrcweir 		}
149cdf0e10cSrcweir 	}
150cdf0e10cSrcweir 
151cdf0e10cSrcweir 	if (mbHasRulers)
152cdf0e10cSrcweir 	{
153cdf0e10cSrcweir 		UpdateHRuler();
154cdf0e10cSrcweir 		UpdateVRuler();
155cdf0e10cSrcweir 	}
156cdf0e10cSrcweir 
157cdf0e10cSrcweir }
158cdf0e10cSrcweir /*************************************************************************
159cdf0e10cSrcweir |*
160cdf0e10cSrcweir |* Handling fuer horizontale Scrollbars
161cdf0e10cSrcweir |*
162cdf0e10cSrcweir \************************************************************************/
163cdf0e10cSrcweir 
164cdf0e10cSrcweir IMPL_LINK_INLINE_START(ViewShell, HScrollHdl, ScrollBar *, pHScroll )
165cdf0e10cSrcweir {
166cdf0e10cSrcweir 	return VirtHScrollHdl(pHScroll);
167cdf0e10cSrcweir }
168cdf0e10cSrcweir IMPL_LINK_INLINE_END(ViewShell, HScrollHdl, ScrollBar *, pHScroll )
169cdf0e10cSrcweir 
170cdf0e10cSrcweir /*************************************************************************
171cdf0e10cSrcweir |*
172cdf0e10cSrcweir |* virtueller Scroll-Handler fuer horizontale Scrollbars
173cdf0e10cSrcweir |*
174cdf0e10cSrcweir \************************************************************************/
175cdf0e10cSrcweir 
176cdf0e10cSrcweir long ViewShell::VirtHScrollHdl(ScrollBar* pHScroll)
177cdf0e10cSrcweir {
178cdf0e10cSrcweir 	long nDelta = pHScroll->GetDelta();
179cdf0e10cSrcweir 
180cdf0e10cSrcweir 	if (nDelta != 0)
181cdf0e10cSrcweir 	{
182cdf0e10cSrcweir 		double fX = (double) pHScroll->GetThumbPos() / pHScroll->GetRange().Len();
183cdf0e10cSrcweir 
184cdf0e10cSrcweir 		// alle Fenster der Spalte scrollen
185cdf0e10cSrcweir         ::sd::View* pView = GetView();
186cdf0e10cSrcweir         OutlinerView* pOLV = NULL;
187cdf0e10cSrcweir 
188cdf0e10cSrcweir         if (pView)
189cdf0e10cSrcweir             pOLV = pView->GetTextEditOutlinerView();
190cdf0e10cSrcweir 
191cdf0e10cSrcweir         if (pOLV)
192cdf0e10cSrcweir             pOLV->HideCursor();
193cdf0e10cSrcweir 
194cdf0e10cSrcweir         mpContentWindow->SetVisibleXY(fX, -1);
195cdf0e10cSrcweir 
196cdf0e10cSrcweir         Rectangle aVisArea = GetDocSh()->GetVisArea(ASPECT_CONTENT);
197cdf0e10cSrcweir         Point aVisAreaPos = GetActiveWindow()->PixelToLogic( Point(0,0) );
198cdf0e10cSrcweir         aVisArea.SetPos(aVisAreaPos);
199cdf0e10cSrcweir         GetDocSh()->SetVisArea(aVisArea);
200cdf0e10cSrcweir 
201cdf0e10cSrcweir         Size aVisSizePixel = GetActiveWindow()->GetOutputSizePixel();
202cdf0e10cSrcweir         Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0), aVisSizePixel) );
203cdf0e10cSrcweir         VisAreaChanged(aVisAreaWin);
204cdf0e10cSrcweir 
205cdf0e10cSrcweir         if (pView)
206cdf0e10cSrcweir         {
207cdf0e10cSrcweir             pView->VisAreaChanged(GetActiveWindow());
208cdf0e10cSrcweir         }
209cdf0e10cSrcweir 
210cdf0e10cSrcweir         if (pOLV)
211cdf0e10cSrcweir             pOLV->ShowCursor();
212cdf0e10cSrcweir 
213cdf0e10cSrcweir 		if (mbHasRulers)
214cdf0e10cSrcweir 			UpdateHRuler();
215cdf0e10cSrcweir 
216cdf0e10cSrcweir 	}
217cdf0e10cSrcweir 
218cdf0e10cSrcweir 	return 0;
219cdf0e10cSrcweir }
220cdf0e10cSrcweir 
221cdf0e10cSrcweir /*************************************************************************
222cdf0e10cSrcweir |*
223cdf0e10cSrcweir |* Handling fuer vertikale Scrollbars
224cdf0e10cSrcweir |*
225cdf0e10cSrcweir \************************************************************************/
226cdf0e10cSrcweir 
227cdf0e10cSrcweir IMPL_LINK_INLINE_START(ViewShell, VScrollHdl, ScrollBar *, pVScroll )
228cdf0e10cSrcweir {
229cdf0e10cSrcweir 	return VirtVScrollHdl(pVScroll);
230cdf0e10cSrcweir }
231cdf0e10cSrcweir IMPL_LINK_INLINE_END(ViewShell, VScrollHdl, ScrollBar *, pVScroll )
232cdf0e10cSrcweir 
233cdf0e10cSrcweir /*************************************************************************
234cdf0e10cSrcweir |*
235cdf0e10cSrcweir |* Handling fuer vertikale Scrollbars
236cdf0e10cSrcweir |*
237cdf0e10cSrcweir \************************************************************************/
238cdf0e10cSrcweir 
239cdf0e10cSrcweir long ViewShell::VirtVScrollHdl(ScrollBar* pVScroll)
240cdf0e10cSrcweir {
241cdf0e10cSrcweir 	if(IsPageFlipMode())
242cdf0e10cSrcweir 	{
243cdf0e10cSrcweir 		SdPage* pPage = static_cast<DrawViewShell*>(this)->GetActualPage();
244cdf0e10cSrcweir 		sal_uInt16 nCurPage = (pPage->GetPageNum() - 1) >> 1;
245cdf0e10cSrcweir 		sal_uInt16 nNewPage = (sal_uInt16)pVScroll->GetThumbPos()/256;
246cdf0e10cSrcweir 		if( nCurPage != nNewPage )
247cdf0e10cSrcweir 			static_cast<DrawViewShell*>(this)->SwitchPage(nNewPage);
248cdf0e10cSrcweir 	}
249cdf0e10cSrcweir 	else //panning mode
250cdf0e10cSrcweir 	{
251cdf0e10cSrcweir 		double fY = (double) pVScroll->GetThumbPos() / pVScroll->GetRange().Len();
252cdf0e10cSrcweir 
253cdf0e10cSrcweir         ::sd::View* pView = GetView();
254cdf0e10cSrcweir         OutlinerView* pOLV = NULL;
255cdf0e10cSrcweir 
256cdf0e10cSrcweir         if (pView)
257cdf0e10cSrcweir             pOLV = pView->GetTextEditOutlinerView();
258cdf0e10cSrcweir 
259cdf0e10cSrcweir         if (pOLV)
260cdf0e10cSrcweir             pOLV->HideCursor();
261cdf0e10cSrcweir 
262cdf0e10cSrcweir         mpContentWindow->SetVisibleXY(-1, fY);
263cdf0e10cSrcweir 
264cdf0e10cSrcweir         Rectangle aVisArea = GetDocSh()->GetVisArea(ASPECT_CONTENT);
265cdf0e10cSrcweir         Point aVisAreaPos = GetActiveWindow()->PixelToLogic( Point(0,0) );
266cdf0e10cSrcweir         aVisArea.SetPos(aVisAreaPos);
267cdf0e10cSrcweir         GetDocSh()->SetVisArea(aVisArea);
268cdf0e10cSrcweir 
269cdf0e10cSrcweir         Size aVisSizePixel = GetActiveWindow()->GetOutputSizePixel();
270cdf0e10cSrcweir         Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0), aVisSizePixel) );
271cdf0e10cSrcweir         VisAreaChanged(aVisAreaWin);
272cdf0e10cSrcweir 
273cdf0e10cSrcweir         if (pView)
274cdf0e10cSrcweir         {
275cdf0e10cSrcweir             pView->VisAreaChanged(GetActiveWindow());
276cdf0e10cSrcweir         }
277cdf0e10cSrcweir 
278cdf0e10cSrcweir         if (pOLV)
279cdf0e10cSrcweir             pOLV->ShowCursor();
280cdf0e10cSrcweir 
281cdf0e10cSrcweir 		if (mbHasRulers)
282cdf0e10cSrcweir 			UpdateVRuler();
283cdf0e10cSrcweir 
284cdf0e10cSrcweir 	}
285cdf0e10cSrcweir 
286cdf0e10cSrcweir 	return 0;
287cdf0e10cSrcweir }
288cdf0e10cSrcweir 
289cdf0e10cSrcweir SvxRuler* ViewShell::CreateHRuler(::sd::Window* , sal_Bool )
290cdf0e10cSrcweir {
291cdf0e10cSrcweir 	return NULL;
292cdf0e10cSrcweir }
293cdf0e10cSrcweir 
294cdf0e10cSrcweir SvxRuler* ViewShell::CreateVRuler(::sd::Window* )
295cdf0e10cSrcweir {
296cdf0e10cSrcweir 	return NULL;
297cdf0e10cSrcweir }
298cdf0e10cSrcweir 
299cdf0e10cSrcweir void ViewShell::UpdateHRuler()
300cdf0e10cSrcweir {
301cdf0e10cSrcweir }
302cdf0e10cSrcweir 
303cdf0e10cSrcweir void ViewShell::UpdateVRuler()
304cdf0e10cSrcweir {
305cdf0e10cSrcweir }
306cdf0e10cSrcweir 
307cdf0e10cSrcweir long ViewShell::GetHCtrlWidth()
308cdf0e10cSrcweir {
309cdf0e10cSrcweir 	return 0;
310cdf0e10cSrcweir }
311cdf0e10cSrcweir 
312cdf0e10cSrcweir /*************************************************************************
313cdf0e10cSrcweir |*
314cdf0e10cSrcweir |* Eine bestimmte Anzahl von Zeilen scrollen (wird beim automatischen
315cdf0e10cSrcweir |* Scrollen (Zeichen/Draggen) verwendet)
316cdf0e10cSrcweir |*
317cdf0e10cSrcweir \************************************************************************/
318cdf0e10cSrcweir 
319cdf0e10cSrcweir void ViewShell::ScrollLines(long nLinesX, long nLinesY)
320cdf0e10cSrcweir {
321cdf0e10cSrcweir 	if ( nLinesX )
322cdf0e10cSrcweir 	{
323cdf0e10cSrcweir 		nLinesX *= mpHorizontalScrollBar->GetLineSize();
324cdf0e10cSrcweir 	}
325cdf0e10cSrcweir 	if ( nLinesY )
326cdf0e10cSrcweir 	{
327cdf0e10cSrcweir 		nLinesY *= mpVerticalScrollBar->GetLineSize();
328cdf0e10cSrcweir 	}
329cdf0e10cSrcweir 
330cdf0e10cSrcweir 	Scroll(nLinesX, nLinesY);
331cdf0e10cSrcweir }
332cdf0e10cSrcweir 
333cdf0e10cSrcweir /*************************************************************************
334cdf0e10cSrcweir |*
335cdf0e10cSrcweir |* Window um nScrollX, nScrollY scrollen
336cdf0e10cSrcweir |*
337cdf0e10cSrcweir \************************************************************************/
338cdf0e10cSrcweir 
339cdf0e10cSrcweir void ViewShell::Scroll(long nScrollX, long nScrollY)
340cdf0e10cSrcweir {
341cdf0e10cSrcweir 	if (nScrollX)
342cdf0e10cSrcweir 	{
343cdf0e10cSrcweir 		long nNewThumb = mpHorizontalScrollBar->GetThumbPos() + nScrollX;
344cdf0e10cSrcweir 		mpHorizontalScrollBar->SetThumbPos(nNewThumb);
345cdf0e10cSrcweir 	}
346cdf0e10cSrcweir 	if (nScrollY)
347cdf0e10cSrcweir 	{
348cdf0e10cSrcweir 		long nNewThumb = mpVerticalScrollBar->GetThumbPos() + nScrollY;
349cdf0e10cSrcweir 		mpVerticalScrollBar->SetThumbPos(nNewThumb);
350cdf0e10cSrcweir 	}
351cdf0e10cSrcweir 	double	fX = (double) mpHorizontalScrollBar->GetThumbPos() /
352cdf0e10cSrcweir 							mpHorizontalScrollBar->GetRange().Len();
353cdf0e10cSrcweir 	double	fY = (double) mpVerticalScrollBar->GetThumbPos() /
354cdf0e10cSrcweir 							mpVerticalScrollBar->GetRange().Len();
355cdf0e10cSrcweir 
356cdf0e10cSrcweir 	GetActiveWindow()->SetVisibleXY(fX, fY);
357cdf0e10cSrcweir 
358cdf0e10cSrcweir 	Rectangle aVisArea = GetDocSh()->GetVisArea(ASPECT_CONTENT);
359cdf0e10cSrcweir 	Point aVisAreaPos = GetActiveWindow()->PixelToLogic( Point(0,0) );
360cdf0e10cSrcweir 	aVisArea.SetPos(aVisAreaPos);
361cdf0e10cSrcweir 	GetDocSh()->SetVisArea(aVisArea);
362cdf0e10cSrcweir 
363cdf0e10cSrcweir 	Size aVisSizePixel = GetActiveWindow()->GetOutputSizePixel();
364cdf0e10cSrcweir 	Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0), aVisSizePixel) );
365cdf0e10cSrcweir 	VisAreaChanged(aVisAreaWin);
366cdf0e10cSrcweir 
367cdf0e10cSrcweir 	::sd::View* pView = GetView();
368cdf0e10cSrcweir 	if (pView)
369cdf0e10cSrcweir 	{
370cdf0e10cSrcweir 		pView->VisAreaChanged(GetActiveWindow());
371cdf0e10cSrcweir 	}
372cdf0e10cSrcweir 
373cdf0e10cSrcweir 	if (mbHasRulers)
374cdf0e10cSrcweir 	{
375cdf0e10cSrcweir 		UpdateHRuler();
376cdf0e10cSrcweir 		UpdateVRuler();
377cdf0e10cSrcweir 	}
378cdf0e10cSrcweir }
379cdf0e10cSrcweir 
380cdf0e10cSrcweir /*************************************************************************
381cdf0e10cSrcweir |*
382cdf0e10cSrcweir |* Den Zoomfaktor fuer alle Split-Windows setzen
383cdf0e10cSrcweir |*
384cdf0e10cSrcweir \************************************************************************/
385cdf0e10cSrcweir 
386cdf0e10cSrcweir void ViewShell::SetZoom(long nZoom)
387cdf0e10cSrcweir {
388cdf0e10cSrcweir 	Fraction aUIScale(nZoom, 100);
389cdf0e10cSrcweir 	aUIScale *= GetDoc()->GetUIScale();
390cdf0e10cSrcweir 
391cdf0e10cSrcweir     if (mpHorizontalRuler.get() != NULL)
392cdf0e10cSrcweir         mpHorizontalRuler->SetZoom(aUIScale);
393cdf0e10cSrcweir 
394cdf0e10cSrcweir     if (mpVerticalRuler.get() != NULL)
395cdf0e10cSrcweir         mpVerticalRuler->SetZoom(aUIScale);
396cdf0e10cSrcweir 
397cdf0e10cSrcweir     if (mpContentWindow.get() != NULL)
398cdf0e10cSrcweir     {
399cdf0e10cSrcweir         mpContentWindow->SetZoomIntegral(nZoom);
400cdf0e10cSrcweir 
401cdf0e10cSrcweir 		// #i74769# Here is a 2nd way (besides Window::Scroll) to set the visible prt
402cdf0e10cSrcweir 		// of the window. It needs - like Scroll(SCROLL_CHILDREN) does - also to move
403cdf0e10cSrcweir 		// the child windows. I am trying INVALIDATE_CHILDREN here which makes things better,
404cdf0e10cSrcweir 		// but does not solve the problem completely. Neet to ask PL.
405cdf0e10cSrcweir         mpContentWindow->Invalidate(INVALIDATE_CHILDREN);
406cdf0e10cSrcweir     }
407cdf0e10cSrcweir 
408cdf0e10cSrcweir 	Size aVisSizePixel = GetActiveWindow()->GetOutputSizePixel();
409cdf0e10cSrcweir 	Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0), aVisSizePixel) );
410cdf0e10cSrcweir 	VisAreaChanged(aVisAreaWin);
411cdf0e10cSrcweir 
412cdf0e10cSrcweir 	::sd::View* pView = GetView();
413cdf0e10cSrcweir 	if (pView)
414cdf0e10cSrcweir 	{
415cdf0e10cSrcweir 		pView->VisAreaChanged(GetActiveWindow());
416cdf0e10cSrcweir 	}
417cdf0e10cSrcweir 
418cdf0e10cSrcweir 	UpdateScrollBars();
419cdf0e10cSrcweir }
420cdf0e10cSrcweir 
421cdf0e10cSrcweir /*************************************************************************
422cdf0e10cSrcweir |*
423cdf0e10cSrcweir |* Zoomrechteck fuer aktives Fenster einstellen und alle Split-Windows
424cdf0e10cSrcweir |* auf den gleichen Zoomfaktor setzen
425cdf0e10cSrcweir |*
426cdf0e10cSrcweir \************************************************************************/
427cdf0e10cSrcweir 
428cdf0e10cSrcweir void ViewShell::SetZoomRect(const Rectangle& rZoomRect)
429cdf0e10cSrcweir {
430cdf0e10cSrcweir 	long nZoom = GetActiveWindow()->SetZoomRect(rZoomRect);
431cdf0e10cSrcweir 	Fraction aUIScale(nZoom, 100);
432cdf0e10cSrcweir 	aUIScale *= GetDoc()->GetUIScale();
433cdf0e10cSrcweir 
434cdf0e10cSrcweir 	Point aPos = GetActiveWindow()->GetWinViewPos();
435cdf0e10cSrcweir 
436cdf0e10cSrcweir     if (mpHorizontalRuler.get() != NULL)
437cdf0e10cSrcweir         mpHorizontalRuler->SetZoom(aUIScale);
438cdf0e10cSrcweir 
439cdf0e10cSrcweir     if (mpVerticalRuler.get() != NULL)
440cdf0e10cSrcweir         mpVerticalRuler->SetZoom(aUIScale);
441cdf0e10cSrcweir 
442cdf0e10cSrcweir     if (mpContentWindow.get() != NULL)
443cdf0e10cSrcweir     {
444cdf0e10cSrcweir         Point aNewPos = mpContentWindow->GetWinViewPos();
445cdf0e10cSrcweir         aNewPos.X() = aPos.X();
446cdf0e10cSrcweir         aNewPos.Y() = aPos.Y();
447cdf0e10cSrcweir         mpContentWindow->SetZoomIntegral(nZoom);
448cdf0e10cSrcweir         mpContentWindow->SetWinViewPos(aNewPos);
449cdf0e10cSrcweir         mpContentWindow->UpdateMapOrigin();
450cdf0e10cSrcweir 
451cdf0e10cSrcweir 		// #i74769# see above
452cdf0e10cSrcweir         mpContentWindow->Invalidate(INVALIDATE_CHILDREN);
453cdf0e10cSrcweir     }
454cdf0e10cSrcweir 
455cdf0e10cSrcweir 	Size aVisSizePixel = GetActiveWindow()->GetOutputSizePixel();
456cdf0e10cSrcweir 	Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0), aVisSizePixel) );
457cdf0e10cSrcweir 	VisAreaChanged(aVisAreaWin);
458cdf0e10cSrcweir 
459cdf0e10cSrcweir 	::sd::View* pView = GetView();
460cdf0e10cSrcweir 	if (pView)
461cdf0e10cSrcweir 	{
462cdf0e10cSrcweir 		pView->VisAreaChanged(GetActiveWindow());
463cdf0e10cSrcweir 	}
464cdf0e10cSrcweir 
465cdf0e10cSrcweir 	UpdateScrollBars();
466cdf0e10cSrcweir }
467cdf0e10cSrcweir 
468cdf0e10cSrcweir /*************************************************************************
469cdf0e10cSrcweir |*
470cdf0e10cSrcweir |* Abbildungsparameter fuer alle Split-Windows initialisieren
471cdf0e10cSrcweir |*
472cdf0e10cSrcweir \************************************************************************/
473cdf0e10cSrcweir 
474cdf0e10cSrcweir void ViewShell::InitWindows(const Point& rViewOrigin, const Size& rViewSize,
475cdf0e10cSrcweir 							  const Point& rWinPos, sal_Bool bUpdate)
476cdf0e10cSrcweir {
477cdf0e10cSrcweir     if (mpContentWindow.get() != NULL)
478cdf0e10cSrcweir     {
479cdf0e10cSrcweir         mpContentWindow->SetViewOrigin(rViewOrigin);
480cdf0e10cSrcweir         mpContentWindow->SetViewSize(rViewSize);
481cdf0e10cSrcweir         mpContentWindow->SetWinViewPos(rWinPos);
482cdf0e10cSrcweir 
483cdf0e10cSrcweir         if ( bUpdate )
484cdf0e10cSrcweir         {
485cdf0e10cSrcweir             mpContentWindow->UpdateMapOrigin();
486cdf0e10cSrcweir             mpContentWindow->Invalidate();
487cdf0e10cSrcweir         }
488cdf0e10cSrcweir     }
489cdf0e10cSrcweir 
490cdf0e10cSrcweir 	Size aVisSizePixel = GetActiveWindow()->GetOutputSizePixel();
491cdf0e10cSrcweir 	Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0), aVisSizePixel) );
492cdf0e10cSrcweir 	VisAreaChanged(aVisAreaWin);
493cdf0e10cSrcweir 
494cdf0e10cSrcweir 	::sd::View* pView = GetView();
495cdf0e10cSrcweir 	if (pView)
496cdf0e10cSrcweir 	{
497cdf0e10cSrcweir 		pView->VisAreaChanged(GetActiveWindow());
498cdf0e10cSrcweir 	}
499cdf0e10cSrcweir }
500cdf0e10cSrcweir 
501cdf0e10cSrcweir /*************************************************************************
502cdf0e10cSrcweir |*
503cdf0e10cSrcweir |* Alle Split-Windows unter dem uebergebenen Rechteck invalidieren
504cdf0e10cSrcweir |*
505cdf0e10cSrcweir \************************************************************************/
506cdf0e10cSrcweir 
507cdf0e10cSrcweir void ViewShell::InvalidateWindows()
508cdf0e10cSrcweir {
509cdf0e10cSrcweir     if (mpContentWindow.get() != NULL)
510cdf0e10cSrcweir         mpContentWindow->Invalidate();
511cdf0e10cSrcweir }
512cdf0e10cSrcweir 
513cdf0e10cSrcweir 
514cdf0e10cSrcweir /*************************************************************************
515cdf0e10cSrcweir |*
516cdf0e10cSrcweir |* Auf allen Split-Windows ein Markierungsrechteck mit dem
517cdf0e10cSrcweir |* uebergebenen Pen zeichnen
518cdf0e10cSrcweir |*
519cdf0e10cSrcweir \************************************************************************/
520cdf0e10cSrcweir 
521cdf0e10cSrcweir void ViewShell::DrawMarkRect(const Rectangle& rRect) const
522cdf0e10cSrcweir {
523cdf0e10cSrcweir     if (mpContentWindow.get() != NULL)
524cdf0e10cSrcweir     {
525cdf0e10cSrcweir         mpContentWindow->InvertTracking(rRect, SHOWTRACK_OBJECT | SHOWTRACK_WINDOW);
526cdf0e10cSrcweir     }
527cdf0e10cSrcweir }
528cdf0e10cSrcweir 
529cdf0e10cSrcweir /*************************************************************************
530cdf0e10cSrcweir |*
531cdf0e10cSrcweir |* Groesse und Raender aller Seiten setzen
532cdf0e10cSrcweir |*
533cdf0e10cSrcweir \************************************************************************/
534cdf0e10cSrcweir 
535cdf0e10cSrcweir void ViewShell::SetPageSizeAndBorder(PageKind ePageKind, const Size& rNewSize,
536cdf0e10cSrcweir 									   long nLeft, long nRight,
537cdf0e10cSrcweir 									   long nUpper, long nLower, sal_Bool bScaleAll,
538cdf0e10cSrcweir 									   Orientation eOrientation, sal_uInt16 nPaperBin,
539cdf0e10cSrcweir 							           sal_Bool bBackgroundFullSize)
540cdf0e10cSrcweir {
541cdf0e10cSrcweir 	SdPage* pPage = 0;
542cdf0e10cSrcweir 	SdUndoGroup* pUndoGroup = NULL;
543cdf0e10cSrcweir 	pUndoGroup = new SdUndoGroup(GetDoc());
544cdf0e10cSrcweir 	String aString(SdResId(STR_UNDO_CHANGE_PAGEFORMAT));
545cdf0e10cSrcweir 	pUndoGroup->SetComment(aString);
546cdf0e10cSrcweir     SfxViewShell* pViewShell = GetViewShell();
547cdf0e10cSrcweir     OSL_ASSERT (pViewShell!=NULL);
548cdf0e10cSrcweir 
549cdf0e10cSrcweir 	sal_uInt16 i, nPageCnt = GetDoc()->GetMasterSdPageCount(ePageKind);
550cdf0e10cSrcweir 
551cdf0e10cSrcweir     Broadcast (ViewShellHint(ViewShellHint::HINT_PAGE_RESIZE_START));
552cdf0e10cSrcweir 
553cdf0e10cSrcweir 	for (i = 0; i < nPageCnt; i++)
554cdf0e10cSrcweir 	{
555cdf0e10cSrcweir 		/**********************************************************************
556cdf0e10cSrcweir 		* Erst alle MasterPages bearbeiten
557cdf0e10cSrcweir 		**********************************************************************/
558cdf0e10cSrcweir 		pPage = GetDoc()->GetMasterSdPage(i, ePageKind);
559cdf0e10cSrcweir 
560cdf0e10cSrcweir 		SdUndoAction* pUndo = new SdPageFormatUndoAction(GetDoc(), pPage,
561cdf0e10cSrcweir 							pPage->GetSize(),
562cdf0e10cSrcweir 							pPage->GetLftBorder(), pPage->GetRgtBorder(),
563cdf0e10cSrcweir 							pPage->GetUppBorder(), pPage->GetLwrBorder(),
564cdf0e10cSrcweir 							pPage->IsScaleObjects(),
565cdf0e10cSrcweir 							pPage->GetOrientation(),
566cdf0e10cSrcweir 							pPage->GetPaperBin(),
567cdf0e10cSrcweir 							pPage->IsBackgroundFullSize(),
568cdf0e10cSrcweir 							rNewSize,
569cdf0e10cSrcweir 							nLeft, nRight,
570cdf0e10cSrcweir 							nUpper, nLower,
571cdf0e10cSrcweir 							bScaleAll,
572cdf0e10cSrcweir 							eOrientation,
573cdf0e10cSrcweir 							nPaperBin,
574cdf0e10cSrcweir 							bBackgroundFullSize);
575cdf0e10cSrcweir 		pUndoGroup->AddAction(pUndo);
576cdf0e10cSrcweir 
577cdf0e10cSrcweir 		if (rNewSize.Width() > 0 ||
578cdf0e10cSrcweir 			nLeft  >= 0 || nRight >= 0 || nUpper >= 0 || nLower >= 0)
579cdf0e10cSrcweir 		{
580cdf0e10cSrcweir 			Rectangle aNewBorderRect(nLeft, nUpper, nRight, nLower);
581cdf0e10cSrcweir 			pPage->ScaleObjects(rNewSize, aNewBorderRect, bScaleAll);
582cdf0e10cSrcweir 
583cdf0e10cSrcweir 			if (rNewSize.Width() > 0)
584cdf0e10cSrcweir 				pPage->SetSize(rNewSize);
585cdf0e10cSrcweir 		}
586cdf0e10cSrcweir 
587cdf0e10cSrcweir 		if( nLeft  >= 0 || nRight >= 0 || nUpper >= 0 || nLower >= 0 )
588cdf0e10cSrcweir 		{
589cdf0e10cSrcweir 			pPage->SetBorder(nLeft, nUpper, nRight, nLower);
590cdf0e10cSrcweir 		}
591cdf0e10cSrcweir 
592cdf0e10cSrcweir 		pPage->SetOrientation(eOrientation);
593cdf0e10cSrcweir 		pPage->SetPaperBin( nPaperBin );
594cdf0e10cSrcweir 		pPage->SetBackgroundFullSize( bBackgroundFullSize );
595cdf0e10cSrcweir 
596cdf0e10cSrcweir 		if ( ePageKind == PK_STANDARD )
597cdf0e10cSrcweir 			GetDoc()->GetMasterSdPage(i, PK_NOTES)->CreateTitleAndLayout();
598cdf0e10cSrcweir 
599cdf0e10cSrcweir 		pPage->CreateTitleAndLayout();
600cdf0e10cSrcweir 	}
601cdf0e10cSrcweir 
602cdf0e10cSrcweir 	nPageCnt = GetDoc()->GetSdPageCount(ePageKind);
603cdf0e10cSrcweir 
604cdf0e10cSrcweir 	for (i = 0; i < nPageCnt; i++)
605cdf0e10cSrcweir 	{
606cdf0e10cSrcweir 		/**********************************************************************
607cdf0e10cSrcweir 		* Danach alle Pages bearbeiten
608cdf0e10cSrcweir 		**********************************************************************/
609cdf0e10cSrcweir 		pPage = GetDoc()->GetSdPage(i, ePageKind);
610cdf0e10cSrcweir 
611cdf0e10cSrcweir 		SdUndoAction* pUndo = new SdPageFormatUndoAction(GetDoc(), pPage,
612cdf0e10cSrcweir 								pPage->GetSize(),
613cdf0e10cSrcweir 								pPage->GetLftBorder(), pPage->GetRgtBorder(),
614cdf0e10cSrcweir 								pPage->GetUppBorder(), pPage->GetLwrBorder(),
615cdf0e10cSrcweir 								pPage->IsScaleObjects(),
616cdf0e10cSrcweir 								pPage->GetOrientation(),
617cdf0e10cSrcweir 								pPage->GetPaperBin(),
618cdf0e10cSrcweir 								pPage->IsBackgroundFullSize(),
619cdf0e10cSrcweir 								rNewSize,
620cdf0e10cSrcweir 								nLeft, nRight,
621cdf0e10cSrcweir 								nUpper, nLower,
622cdf0e10cSrcweir 								bScaleAll,
623cdf0e10cSrcweir 								eOrientation,
624cdf0e10cSrcweir 								nPaperBin,
625cdf0e10cSrcweir 								bBackgroundFullSize);
626cdf0e10cSrcweir 		pUndoGroup->AddAction(pUndo);
627cdf0e10cSrcweir 
628cdf0e10cSrcweir 		if (rNewSize.Width() > 0 ||
629cdf0e10cSrcweir 			nLeft  >= 0 || nRight >= 0 || nUpper >= 0 || nLower >= 0)
630cdf0e10cSrcweir 		{
631cdf0e10cSrcweir 			Rectangle aNewBorderRect(nLeft, nUpper, nRight, nLower);
632cdf0e10cSrcweir 			pPage->ScaleObjects(rNewSize, aNewBorderRect, bScaleAll);
633cdf0e10cSrcweir 
634cdf0e10cSrcweir 			if (rNewSize.Width() > 0)
635cdf0e10cSrcweir 				pPage->SetSize(rNewSize);
636cdf0e10cSrcweir 		}
637cdf0e10cSrcweir 
638cdf0e10cSrcweir 		if( nLeft  >= 0 || nRight >= 0 || nUpper >= 0 || nLower >= 0 )
639cdf0e10cSrcweir 		{
640cdf0e10cSrcweir 			pPage->SetBorder(nLeft, nUpper, nRight, nLower);
641cdf0e10cSrcweir 		}
642cdf0e10cSrcweir 
643cdf0e10cSrcweir 		pPage->SetOrientation(eOrientation);
644cdf0e10cSrcweir 		pPage->SetPaperBin( nPaperBin );
645cdf0e10cSrcweir 		pPage->SetBackgroundFullSize( bBackgroundFullSize );
646cdf0e10cSrcweir 
647cdf0e10cSrcweir 		if ( ePageKind == PK_STANDARD )
648cdf0e10cSrcweir 		{
649cdf0e10cSrcweir 			SdPage* pNotesPage = GetDoc()->GetSdPage(i, PK_NOTES);
650cdf0e10cSrcweir 			pNotesPage->SetAutoLayout( pNotesPage->GetAutoLayout() );
651cdf0e10cSrcweir 		}
652cdf0e10cSrcweir 
653cdf0e10cSrcweir 		pPage->SetAutoLayout( pPage->GetAutoLayout() );
654cdf0e10cSrcweir 	}
655cdf0e10cSrcweir 
656cdf0e10cSrcweir 	// Handoutseite an neues Format der Standardseiten anpassen
657cdf0e10cSrcweir 	if( (ePageKind == PK_STANDARD) || (ePageKind == PK_HANDOUT) )
658cdf0e10cSrcweir 		GetDoc()->GetSdPage(0, PK_HANDOUT)->CreateTitleAndLayout(sal_True);
659cdf0e10cSrcweir 
660cdf0e10cSrcweir 	// Undo Gruppe dem Undo Manager uebergeben
661cdf0e10cSrcweir 	pViewShell->GetViewFrame()->GetObjectShell()
662cdf0e10cSrcweir         ->GetUndoManager()->AddUndoAction(pUndoGroup);
663cdf0e10cSrcweir 
664cdf0e10cSrcweir 	long nWidth = pPage->GetSize().Width();
665cdf0e10cSrcweir 	long nHeight = pPage->GetSize().Height();
666cdf0e10cSrcweir 
667cdf0e10cSrcweir 	Point aPageOrg = Point(nWidth, nHeight / 2);
668cdf0e10cSrcweir 	Size aViewSize = Size(nWidth * 3, nHeight * 2);
669cdf0e10cSrcweir 
670cdf0e10cSrcweir 	InitWindows(aPageOrg, aViewSize, Point(-1, -1), sal_True);
671cdf0e10cSrcweir 
672cdf0e10cSrcweir 	Point aVisAreaPos;
673cdf0e10cSrcweir 
674cdf0e10cSrcweir 	if ( GetDocSh()->GetCreateMode() == SFX_CREATE_MODE_EMBEDDED )
675cdf0e10cSrcweir 	{
676cdf0e10cSrcweir 		aVisAreaPos = GetDocSh()->GetVisArea(ASPECT_CONTENT).TopLeft();
677cdf0e10cSrcweir 	}
678cdf0e10cSrcweir 
679cdf0e10cSrcweir 	::sd::View* pView = GetView();
680cdf0e10cSrcweir 	if (pView)
681cdf0e10cSrcweir 	{
682cdf0e10cSrcweir 		pView->SetWorkArea(Rectangle(Point() - aVisAreaPos - aPageOrg, aViewSize));
683cdf0e10cSrcweir 	}
684cdf0e10cSrcweir 
685cdf0e10cSrcweir 	UpdateScrollBars();
686cdf0e10cSrcweir 
687cdf0e10cSrcweir 	Point aNewOrigin(pPage->GetLftBorder(), pPage->GetUppBorder());
688cdf0e10cSrcweir 
689cdf0e10cSrcweir 	if (pView)
690cdf0e10cSrcweir 	{
691cdf0e10cSrcweir 		pView->GetSdrPageView()->SetPageOrigin(aNewOrigin);
692cdf0e10cSrcweir 	}
693cdf0e10cSrcweir 
694cdf0e10cSrcweir 	pViewShell->GetViewFrame()->GetBindings().Invalidate(SID_RULER_NULL_OFFSET);
695cdf0e10cSrcweir 
696cdf0e10cSrcweir 	// auf (neue) Seitengroesse zoomen
697cdf0e10cSrcweir 	pViewShell->GetViewFrame()->GetDispatcher()->Execute(SID_SIZE_PAGE,
698cdf0e10cSrcweir 			SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD);
699cdf0e10cSrcweir 
700cdf0e10cSrcweir     Broadcast (ViewShellHint(ViewShellHint::HINT_PAGE_RESIZE_END));
701cdf0e10cSrcweir }
702cdf0e10cSrcweir 
703cdf0e10cSrcweir /*************************************************************************
704cdf0e10cSrcweir |*
705cdf0e10cSrcweir |* Zoom-Faktor fuer InPlace einstellen
706cdf0e10cSrcweir |*
707cdf0e10cSrcweir \************************************************************************/
708cdf0e10cSrcweir 
709cdf0e10cSrcweir void ViewShell::SetZoomFactor(const Fraction& rZoomX, const Fraction&)
710cdf0e10cSrcweir {
711cdf0e10cSrcweir 	long nZoom = (long)((double) rZoomX * 100);
712cdf0e10cSrcweir 	SetZoom(nZoom);
713cdf0e10cSrcweir }
714cdf0e10cSrcweir 
715cdf0e10cSrcweir 
716cdf0e10cSrcweir /*************************************************************************
717cdf0e10cSrcweir |*
718cdf0e10cSrcweir |* Aktives Fenster setzen
719cdf0e10cSrcweir |*
720cdf0e10cSrcweir \************************************************************************/
721cdf0e10cSrcweir 
722cdf0e10cSrcweir void ViewShell::SetActiveWindow (::sd::Window* pWin)
723cdf0e10cSrcweir {
724cdf0e10cSrcweir     SfxViewShell* pViewShell = GetViewShell();
725cdf0e10cSrcweir     OSL_ASSERT (pViewShell!=NULL);
726cdf0e10cSrcweir 
727cdf0e10cSrcweir     if (pViewShell->GetWindow() != pWin)
728cdf0e10cSrcweir 	{
729cdf0e10cSrcweir 		// #i31551# was wrong, it may have been a problem with the repaint at that time.
730cdf0e10cSrcweir 		// For transparent form controls, it is necessary to have that flag set, all apps
731cdf0e10cSrcweir 		// do set it. Enabling again.
732cdf0e10cSrcweir 		if (pWin)
733cdf0e10cSrcweir 		{
734cdf0e10cSrcweir 			pWin->EnableChildTransparentMode();
735cdf0e10cSrcweir 		}
736cdf0e10cSrcweir 	}
737cdf0e10cSrcweir 
738cdf0e10cSrcweir     if (mpActiveWindow != pWin)
739cdf0e10cSrcweir         mpActiveWindow = pWin;
740cdf0e10cSrcweir 
741cdf0e10cSrcweir     // The rest of this function is not guarded anymore against calling this
742cdf0e10cSrcweir     // method with an already active window because the functions may still
743cdf0e10cSrcweir     // point to the old window when the new one has already been assigned to
744cdf0e10cSrcweir     // pWindow elsewhere.
745cdf0e10cSrcweir     ::sd::View* pView = GetView();
746cdf0e10cSrcweir     if (pView)
747cdf0e10cSrcweir     {
748cdf0e10cSrcweir         pView->SetActualWin(pWin);
749cdf0e10cSrcweir     }
750cdf0e10cSrcweir     if(HasCurrentFunction())
751cdf0e10cSrcweir     {
752cdf0e10cSrcweir         GetCurrentFunction()->SetWindow(pWin);
753cdf0e10cSrcweir     }
754cdf0e10cSrcweir }
755cdf0e10cSrcweir 
756cdf0e10cSrcweir 
757cdf0e10cSrcweir 
758cdf0e10cSrcweir /*************************************************************************
759cdf0e10cSrcweir |*
760cdf0e10cSrcweir |* RequestHelp event
761cdf0e10cSrcweir |*
762cdf0e10cSrcweir \************************************************************************/
763cdf0e10cSrcweir 
764cdf0e10cSrcweir sal_Bool ViewShell::RequestHelp(const HelpEvent& rHEvt, ::sd::Window*)
765cdf0e10cSrcweir {
766cdf0e10cSrcweir 	sal_Bool bReturn = sal_False;
767cdf0e10cSrcweir 
768cdf0e10cSrcweir 	if (rHEvt.GetMode())
769cdf0e10cSrcweir 	{
770cdf0e10cSrcweir 		if( GetView() )
771cdf0e10cSrcweir 			bReturn = GetView()->getSmartTags().RequestHelp(rHEvt);
772cdf0e10cSrcweir 
773cdf0e10cSrcweir 		if(!bReturn && HasCurrentFunction())
774cdf0e10cSrcweir 		{
775cdf0e10cSrcweir 			bReturn = GetCurrentFunction()->RequestHelp(rHEvt);
776cdf0e10cSrcweir 		}
777cdf0e10cSrcweir 	}
778cdf0e10cSrcweir 
779cdf0e10cSrcweir 	return(bReturn);
780cdf0e10cSrcweir }
781cdf0e10cSrcweir 
782cdf0e10cSrcweir 
783cdf0e10cSrcweir 
784cdf0e10cSrcweir 
785cdf0e10cSrcweir FrameView* ViewShell::GetFrameView (void)
786cdf0e10cSrcweir {
787cdf0e10cSrcweir     return mpFrameView;
788cdf0e10cSrcweir }
789cdf0e10cSrcweir 
790cdf0e10cSrcweir 
791cdf0e10cSrcweir 
792cdf0e10cSrcweir 
793cdf0e10cSrcweir void ViewShell::SetFrameView (FrameView* pNewFrameView)
794cdf0e10cSrcweir {
795cdf0e10cSrcweir     mpFrameView = pNewFrameView;
796cdf0e10cSrcweir     ReadFrameViewData (mpFrameView);
797cdf0e10cSrcweir }
798cdf0e10cSrcweir 
799cdf0e10cSrcweir 
800cdf0e10cSrcweir 
801cdf0e10cSrcweir 
802cdf0e10cSrcweir /*************************************************************************
803cdf0e10cSrcweir |*
804cdf0e10cSrcweir |* Read FrameViews data and set actual views data
805cdf0e10cSrcweir |*
806cdf0e10cSrcweir \************************************************************************/
807cdf0e10cSrcweir 
808cdf0e10cSrcweir void ViewShell::ReadFrameViewData(FrameView*)
809cdf0e10cSrcweir {
810cdf0e10cSrcweir }
811cdf0e10cSrcweir 
812cdf0e10cSrcweir 
813cdf0e10cSrcweir 
814cdf0e10cSrcweir /*************************************************************************
815cdf0e10cSrcweir |*
816cdf0e10cSrcweir |* Write actual views data to FrameView
817cdf0e10cSrcweir |*
818cdf0e10cSrcweir \************************************************************************/
819cdf0e10cSrcweir 
820cdf0e10cSrcweir void ViewShell::WriteFrameViewData()
821cdf0e10cSrcweir {
822cdf0e10cSrcweir }
823cdf0e10cSrcweir 
824cdf0e10cSrcweir /*************************************************************************
825cdf0e10cSrcweir |*
826cdf0e10cSrcweir |* OLE-Object aktivieren
827cdf0e10cSrcweir |*
828cdf0e10cSrcweir \************************************************************************/
829cdf0e10cSrcweir 
830cdf0e10cSrcweir sal_Bool ViewShell::ActivateObject(SdrOle2Obj* pObj, long nVerb)
831cdf0e10cSrcweir {
832cdf0e10cSrcweir 	ErrCode aErrCode = 0;
833cdf0e10cSrcweir 
834cdf0e10cSrcweir 	SfxErrorContext aEC(ERRCTX_SO_DOVERB, GetActiveWindow(), RID_SO_ERRCTX);
835cdf0e10cSrcweir 	sal_Bool bAbort = sal_False;
836cdf0e10cSrcweir 	GetDocSh()->SetWaitCursor( sal_True );
837cdf0e10cSrcweir     SfxViewShell* pViewShell = GetViewShell();
838cdf0e10cSrcweir     OSL_ASSERT (pViewShell!=NULL);
839cdf0e10cSrcweir     bool bChangeDefaultsForChart = false;
840cdf0e10cSrcweir 
841cdf0e10cSrcweir     uno::Reference < embed::XEmbeddedObject > xObj = pObj->GetObjRef();
842cdf0e10cSrcweir     if ( !xObj.is() )
843cdf0e10cSrcweir 	{
844cdf0e10cSrcweir 		/**********************************************************
845cdf0e10cSrcweir 		* Leeres OLE-Objekt mit OLE-Objekt versehen
846cdf0e10cSrcweir 		**********************************************************/
847cdf0e10cSrcweir 		String aName = pObj->GetProgName();
848cdf0e10cSrcweir         ::rtl::OUString aObjName;
849cdf0e10cSrcweir         SvGlobalName aClass;
850cdf0e10cSrcweir 
851cdf0e10cSrcweir         if( aName.EqualsAscii( "StarChart" ) || aName.EqualsAscii("StarOrg") )
852cdf0e10cSrcweir 		{
853cdf0e10cSrcweir 			if( SvtModuleOptions().IsChart() )
854cdf0e10cSrcweir             {
855cdf0e10cSrcweir                 aClass = SvGlobalName( SO3_SCH_CLASSID );
856cdf0e10cSrcweir                 bChangeDefaultsForChart = true;
857cdf0e10cSrcweir             }
858cdf0e10cSrcweir 		}
859cdf0e10cSrcweir 		else if( aName.EqualsAscii( "StarCalc" ))
860cdf0e10cSrcweir 		{
861cdf0e10cSrcweir 			if( SvtModuleOptions().IsCalc() )
862cdf0e10cSrcweir                 aClass = SvGlobalName( SO3_SC_CLASSID );
863cdf0e10cSrcweir 		}
864cdf0e10cSrcweir 		else if( aName.EqualsAscii( "StarMath" ))
865cdf0e10cSrcweir 		{
866cdf0e10cSrcweir 			if( SvtModuleOptions().IsMath() )
867cdf0e10cSrcweir                 aClass = SvGlobalName( SO3_SM_CLASSID );
868cdf0e10cSrcweir 		}
869cdf0e10cSrcweir 
870cdf0e10cSrcweir         if ( aClass != SvGlobalName() )
871cdf0e10cSrcweir             xObj = GetDocSh()->GetEmbeddedObjectContainer().CreateEmbeddedObject( aClass.GetByteSequence(), aObjName );
872cdf0e10cSrcweir 
873cdf0e10cSrcweir         if( !xObj.is() )
874cdf0e10cSrcweir 		{
875cdf0e10cSrcweir 			aName = String();
876cdf0e10cSrcweir 
877cdf0e10cSrcweir 			// Dialog "OLE-Objekt einfuegen" aufrufen
878cdf0e10cSrcweir 			GetDocSh()->SetWaitCursor( sal_False );
879cdf0e10cSrcweir 			pViewShell->GetViewFrame()->GetDispatcher()->Execute(
880cdf0e10cSrcweir                 SID_INSERT_OBJECT,
881cdf0e10cSrcweir                 SFX_CALLMODE_SYNCHRON | SFX_CALLMODE_RECORD);
882cdf0e10cSrcweir             xObj = pObj->GetObjRef();
883cdf0e10cSrcweir 			GetDocSh()->SetWaitCursor( sal_True );
884cdf0e10cSrcweir 
885cdf0e10cSrcweir             if (!xObj.is())
886cdf0e10cSrcweir 			{
887cdf0e10cSrcweir 				bAbort = sal_True;
888cdf0e10cSrcweir 			}
889cdf0e10cSrcweir 		}
890cdf0e10cSrcweir 
891cdf0e10cSrcweir         if ( xObj.is() )
892cdf0e10cSrcweir 		{
893cdf0e10cSrcweir 			/******************************************************
894cdf0e10cSrcweir 			* OLE-Objekt ist nicht mehr leer
895cdf0e10cSrcweir 			******************************************************/
896cdf0e10cSrcweir 			pObj->SetEmptyPresObj(sal_False);
897cdf0e10cSrcweir 			pObj->SetOutlinerParaObject(NULL);
898cdf0e10cSrcweir 			pObj->SetGraphic(NULL);
899cdf0e10cSrcweir 
900cdf0e10cSrcweir 			/******************************************************
901cdf0e10cSrcweir 			* Das leere OLE-Objekt bekommt ein neues IPObj
902cdf0e10cSrcweir 			******************************************************/
903cdf0e10cSrcweir 			if (aName.Len())
904cdf0e10cSrcweir 			{
905cdf0e10cSrcweir                 pObj->SetObjRef(xObj);
906cdf0e10cSrcweir 				pObj->SetName(aObjName);
907cdf0e10cSrcweir     			pObj->SetPersistName(aObjName);
908cdf0e10cSrcweir 			}
909cdf0e10cSrcweir 			else
910cdf0e10cSrcweir 			{
911cdf0e10cSrcweir 				// Das Einfuegen hat der Dialog schon gemacht
912cdf0e10cSrcweir                 pObj->SetObjRef(xObj);
913cdf0e10cSrcweir 			}
914cdf0e10cSrcweir 
915cdf0e10cSrcweir 			Rectangle aRect = pObj->GetLogicRect();
916cdf0e10cSrcweir 
917cdf0e10cSrcweir 			if ( pObj->GetAspect() != embed::Aspects::MSOLE_ICON )
918cdf0e10cSrcweir 			{
919cdf0e10cSrcweir             	awt::Size aSz;
920cdf0e10cSrcweir             	aSz.Width = aRect.GetWidth();
921cdf0e10cSrcweir             	aSz.Height = aRect.GetHeight();
922cdf0e10cSrcweir             	xObj->setVisualAreaSize( pObj->GetAspect(), aSz );
923cdf0e10cSrcweir 			}
924cdf0e10cSrcweir 
925cdf0e10cSrcweir             GetViewShellBase().SetVerbs( xObj->getSupportedVerbs() );
926cdf0e10cSrcweir 
927cdf0e10cSrcweir 			nVerb = SVVERB_SHOW;
928cdf0e10cSrcweir 		}
929cdf0e10cSrcweir 		else
930cdf0e10cSrcweir 		{
931cdf0e10cSrcweir 			aErrCode = ERRCODE_SFX_OLEGENERAL;
932cdf0e10cSrcweir 		}
933cdf0e10cSrcweir 	}
934cdf0e10cSrcweir 
935cdf0e10cSrcweir 	if( aErrCode == 0 )
936cdf0e10cSrcweir 	{
937cdf0e10cSrcweir 		::sd::View* pView = GetView();
938cdf0e10cSrcweir 
939cdf0e10cSrcweir 		if (pView->IsTextEdit())
940cdf0e10cSrcweir 		{
941cdf0e10cSrcweir 			pView->SdrEndTextEdit();
942cdf0e10cSrcweir 		}
943cdf0e10cSrcweir 
944cdf0e10cSrcweir         SfxInPlaceClient* pSdClient =
945cdf0e10cSrcweir             static_cast<Client*>(pViewShell->FindIPClient(
946cdf0e10cSrcweir                 pObj->GetObjRef(), GetActiveWindow()));
947cdf0e10cSrcweir 
948cdf0e10cSrcweir         if ( !pSdClient )
949cdf0e10cSrcweir 		{
950cdf0e10cSrcweir 			pSdClient = new Client(pObj, this, GetActiveWindow());
951cdf0e10cSrcweir 		}
952cdf0e10cSrcweir 
953cdf0e10cSrcweir 		Rectangle aRect = pObj->GetLogicRect();
954*a5258243SPedro Giffuni 
955*a5258243SPedro Giffuni         {
956*a5258243SPedro Giffuni             // #i118485# center on BoundRect for activation,
957*a5258243SPedro Giffuni             // OLE may be sheared/rotated now
958*a5258243SPedro Giffuni         	const Rectangle& rBoundRect = pObj->GetCurrentBoundRect();
959*a5258243SPedro Giffuni             const Point aDelta(rBoundRect.Center() - aRect.Center());
960*a5258243SPedro Giffuni             aRect.Move(aDelta.X(), aDelta.Y());
961*a5258243SPedro Giffuni         }
962*a5258243SPedro Giffuni 
963cdf0e10cSrcweir         Size aDrawSize = aRect.GetSize();
964cdf0e10cSrcweir 
965cdf0e10cSrcweir 		MapMode aMapMode( GetDoc()->GetScaleUnit() );
966cdf0e10cSrcweir         Size aObjAreaSize = pObj->GetOrigObjSize( &aMapMode );
967cdf0e10cSrcweir         if( pObj->IsChart() ) //charts never should be stretched see #i84323# for example
968cdf0e10cSrcweir             aObjAreaSize = aDrawSize;
969cdf0e10cSrcweir 
970cdf0e10cSrcweir         Fraction aScaleWidth (aDrawSize.Width(),  aObjAreaSize.Width() );
971cdf0e10cSrcweir         Fraction aScaleHeight(aDrawSize.Height(), aObjAreaSize.Height() );
972cdf0e10cSrcweir         aScaleWidth.ReduceInaccurate(10);       // kompatibel zum SdrOle2Obj
973cdf0e10cSrcweir         aScaleHeight.ReduceInaccurate(10);
974cdf0e10cSrcweir         pSdClient->SetSizeScale(aScaleWidth, aScaleHeight);
975cdf0e10cSrcweir 
976cdf0e10cSrcweir         // sichtbarer Ausschnitt wird nur inplace veraendert!
977cdf0e10cSrcweir         aRect.SetSize(aObjAreaSize);
978cdf0e10cSrcweir 		// the object area size must be set after scaling, since it triggers the resizing
979cdf0e10cSrcweir         pSdClient->SetObjArea(aRect);
980cdf0e10cSrcweir 
981cdf0e10cSrcweir         if( bChangeDefaultsForChart && xObj.is())
982cdf0e10cSrcweir         {
983cdf0e10cSrcweir             AdaptDefaultsForChart( xObj );
984cdf0e10cSrcweir         }
985cdf0e10cSrcweir 
986cdf0e10cSrcweir         pSdClient->DoVerb(nVerb);   // ErrCode wird ggf. vom Sfx ausgegeben
987cdf0e10cSrcweir 		pViewShell->GetViewFrame()->GetBindings().Invalidate(
988cdf0e10cSrcweir             SID_NAVIGATOR_STATE, sal_True, sal_False);
989cdf0e10cSrcweir 	}
990cdf0e10cSrcweir 
991cdf0e10cSrcweir 	GetDocSh()->SetWaitCursor( sal_False );
992cdf0e10cSrcweir 
993cdf0e10cSrcweir 	if (aErrCode != 0 && !bAbort)
994cdf0e10cSrcweir 	{
995cdf0e10cSrcweir 		ErrorHandler::HandleError(* new StringErrorInfo(aErrCode, String() ) );
996cdf0e10cSrcweir 	}
997cdf0e10cSrcweir 
998cdf0e10cSrcweir 	return aErrCode == 0;
999cdf0e10cSrcweir }
1000cdf0e10cSrcweir 
1001cdf0e10cSrcweir /*************************************************************************
1002cdf0e10cSrcweir |*
1003cdf0e10cSrcweir |* umschliessendes Rechteck aller (Split-)Fenster zurueckgeben.
1004cdf0e10cSrcweir |*
1005cdf0e10cSrcweir \************************************************************************/
1006cdf0e10cSrcweir 
1007cdf0e10cSrcweir const Rectangle& ViewShell::GetAllWindowRect()
1008cdf0e10cSrcweir {
1009cdf0e10cSrcweir 	maAllWindowRectangle.SetPos(
1010cdf0e10cSrcweir         mpContentWindow->OutputToScreenPixel(Point(0,0)));
1011cdf0e10cSrcweir 	return maAllWindowRectangle;
1012cdf0e10cSrcweir }
1013cdf0e10cSrcweir 
1014cdf0e10cSrcweir /*************************************************************************
1015cdf0e10cSrcweir |*
1016cdf0e10cSrcweir |* Read user data
1017cdf0e10cSrcweir |*
1018cdf0e10cSrcweir \************************************************************************/
1019cdf0e10cSrcweir void ViewShell::ReadUserData(const String&)
1020cdf0e10cSrcweir {
1021cdf0e10cSrcweir 	// Auf an FrameView gemerkte VisArea zoomen
1022cdf0e10cSrcweir 	GetViewShell()->GetViewFrame()->GetDispatcher()->Execute(SID_SIZE_VISAREA,
1023cdf0e10cSrcweir         SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD);
1024cdf0e10cSrcweir }
1025cdf0e10cSrcweir 
1026cdf0e10cSrcweir /*************************************************************************
1027cdf0e10cSrcweir |*
1028cdf0e10cSrcweir |* Write user data
1029cdf0e10cSrcweir |*
1030cdf0e10cSrcweir \************************************************************************/
1031cdf0e10cSrcweir 
1032cdf0e10cSrcweir void ViewShell::WriteUserData(String&)
1033cdf0e10cSrcweir {
1034cdf0e10cSrcweir 	// Das Schreiben unserer Daten erfolgt stets in WriteFrameViewData()
1035cdf0e10cSrcweir 	WriteFrameViewData();
1036cdf0e10cSrcweir }
1037cdf0e10cSrcweir 
1038cdf0e10cSrcweir 
1039cdf0e10cSrcweir /*************************************************************************
1040cdf0e10cSrcweir |*
1041cdf0e10cSrcweir |* Lineale ein- / ausschalten
1042cdf0e10cSrcweir |*
1043cdf0e10cSrcweir \************************************************************************/
1044cdf0e10cSrcweir 
1045cdf0e10cSrcweir void ViewShell::SetRuler(sal_Bool bRuler)
1046cdf0e10cSrcweir {
1047cdf0e10cSrcweir     mbHasRulers = ( bRuler && !GetDocSh()->IsPreview() ); // no rulers on preview mode
1048cdf0e10cSrcweir 
1049cdf0e10cSrcweir     if (mpHorizontalRuler.get() != NULL)
1050cdf0e10cSrcweir     {
1051cdf0e10cSrcweir         if (mbHasRulers)
1052cdf0e10cSrcweir         {
1053cdf0e10cSrcweir             mpHorizontalRuler->Show();
1054cdf0e10cSrcweir         }
1055cdf0e10cSrcweir         else
1056cdf0e10cSrcweir         {
1057cdf0e10cSrcweir             mpHorizontalRuler->Hide();
1058cdf0e10cSrcweir         }
1059cdf0e10cSrcweir     }
1060cdf0e10cSrcweir 
1061cdf0e10cSrcweir     if (mpVerticalRuler.get() != NULL)
1062cdf0e10cSrcweir     {
1063cdf0e10cSrcweir         if (mbHasRulers)
1064cdf0e10cSrcweir         {
1065cdf0e10cSrcweir             mpVerticalRuler->Show();
1066cdf0e10cSrcweir         }
1067cdf0e10cSrcweir         else
1068cdf0e10cSrcweir         {
1069cdf0e10cSrcweir             mpVerticalRuler->Hide();
1070cdf0e10cSrcweir         }
1071cdf0e10cSrcweir     }
1072cdf0e10cSrcweir 
1073cdf0e10cSrcweir     OSL_ASSERT(GetViewShell()!=NULL);
1074cdf0e10cSrcweir     if (IsMainViewShell())
1075cdf0e10cSrcweir         GetViewShell()->InvalidateBorder();
1076cdf0e10cSrcweir }
1077cdf0e10cSrcweir 
1078cdf0e10cSrcweir /*************************************************************************
1079cdf0e10cSrcweir |*
1080cdf0e10cSrcweir |* AcceptDrop
1081cdf0e10cSrcweir |*
1082cdf0e10cSrcweir \************************************************************************/
1083cdf0e10cSrcweir 
1084cdf0e10cSrcweir sal_Int8 ViewShell::AcceptDrop (
1085cdf0e10cSrcweir     const AcceptDropEvent& rEvt,
1086cdf0e10cSrcweir     DropTargetHelper& rTargetHelper,
1087cdf0e10cSrcweir     ::sd::Window* pTargetWindow,
1088cdf0e10cSrcweir     sal_uInt16 nPage,
1089cdf0e10cSrcweir     sal_uInt16 nLayer)
1090cdf0e10cSrcweir {
1091cdf0e10cSrcweir 	::sd::View* pView = GetView();
1092cdf0e10cSrcweir 	return( pView ? pView->AcceptDrop( rEvt, rTargetHelper, pTargetWindow, nPage, nLayer ) : DND_ACTION_NONE );
1093cdf0e10cSrcweir }
1094cdf0e10cSrcweir 
1095cdf0e10cSrcweir /*************************************************************************
1096cdf0e10cSrcweir |*
1097cdf0e10cSrcweir |* ExecuteDrop
1098cdf0e10cSrcweir |*
1099cdf0e10cSrcweir \************************************************************************/
1100cdf0e10cSrcweir 
1101cdf0e10cSrcweir sal_Int8 ViewShell::ExecuteDrop (
1102cdf0e10cSrcweir     const ExecuteDropEvent& rEvt,
1103cdf0e10cSrcweir     DropTargetHelper& rTargetHelper,
1104cdf0e10cSrcweir     ::sd::Window* pTargetWindow,
1105cdf0e10cSrcweir     sal_uInt16 nPage,
1106cdf0e10cSrcweir     sal_uInt16 nLayer)
1107cdf0e10cSrcweir {
1108cdf0e10cSrcweir 	::sd::View*	pView = GetView();
1109cdf0e10cSrcweir 	return( pView ? pView->ExecuteDrop( rEvt, rTargetHelper, pTargetWindow, nPage, nLayer ) : DND_ACTION_NONE );
1110cdf0e10cSrcweir }
1111cdf0e10cSrcweir 
1112cdf0e10cSrcweir #ifdef _MSC_VER
1113cdf0e10cSrcweir #pragma optimize ( "", on )
1114cdf0e10cSrcweir #endif
1115cdf0e10cSrcweir 
1116cdf0e10cSrcweir void ViewShell::WriteUserDataSequence ( ::com::sun::star::uno::Sequence <
1117cdf0e10cSrcweir     ::com::sun::star::beans::PropertyValue >& rSequence, sal_Bool bBrowse)
1118cdf0e10cSrcweir {
1119cdf0e10cSrcweir 	const sal_Int32 nIndex = rSequence.getLength();
1120cdf0e10cSrcweir 	rSequence.realloc( nIndex + 1 );
1121cdf0e10cSrcweir 
1122cdf0e10cSrcweir     OSL_ASSERT (GetViewShell()!=NULL);
1123cdf0e10cSrcweir     // Get the view id from the view shell in the center pane.  This will
1124cdf0e10cSrcweir     // usually be the called view shell, but to be on the safe side we call
1125cdf0e10cSrcweir     // the main view shell explicitly.
1126cdf0e10cSrcweir     sal_uInt16 nViewID (IMPRESS_FACTORY_ID);
1127cdf0e10cSrcweir     if (GetViewShellBase().GetMainViewShell().get() != NULL)
1128cdf0e10cSrcweir         nViewID = GetViewShellBase().GetMainViewShell()->mpImpl->GetViewId();
1129cdf0e10cSrcweir 	rSequence[nIndex].Name = rtl::OUString (
1130cdf0e10cSrcweir         RTL_CONSTASCII_USTRINGPARAM( sUNO_View_ViewId ) );
1131cdf0e10cSrcweir 	rtl::OUStringBuffer sBuffer (
1132cdf0e10cSrcweir         rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "view" ) ) );
1133cdf0e10cSrcweir 	sBuffer.append( static_cast<sal_Int32>(nViewID));
1134cdf0e10cSrcweir 	rSequence[nIndex].Value <<= sBuffer.makeStringAndClear();
1135cdf0e10cSrcweir 
1136cdf0e10cSrcweir 	mpFrameView->WriteUserDataSequence( rSequence, bBrowse );
1137cdf0e10cSrcweir }
1138cdf0e10cSrcweir 
1139cdf0e10cSrcweir 
1140cdf0e10cSrcweir void ViewShell::ReadUserDataSequence ( const ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >& rSequence, sal_Bool bBrowse )
1141cdf0e10cSrcweir {
1142cdf0e10cSrcweir 	mpFrameView->ReadUserDataSequence( rSequence, bBrowse );
1143cdf0e10cSrcweir }
1144cdf0e10cSrcweir 
1145cdf0e10cSrcweir void ViewShell::VisAreaChanged(const Rectangle& rRect)
1146cdf0e10cSrcweir {
1147cdf0e10cSrcweir     OSL_ASSERT (GetViewShell()!=NULL);
1148cdf0e10cSrcweir 	GetViewShell()->VisAreaChanged(rRect);
1149cdf0e10cSrcweir }
1150cdf0e10cSrcweir 
1151cdf0e10cSrcweir void ViewShell::SetWinViewPos(const Point& rWinPos, bool bUpdate)
1152cdf0e10cSrcweir {
1153cdf0e10cSrcweir     if (mpContentWindow.get() != NULL)
1154cdf0e10cSrcweir     {
1155cdf0e10cSrcweir         mpContentWindow->SetWinViewPos(rWinPos);
1156cdf0e10cSrcweir 
1157cdf0e10cSrcweir         if ( bUpdate )
1158cdf0e10cSrcweir         {
1159cdf0e10cSrcweir             mpContentWindow->UpdateMapOrigin();
1160cdf0e10cSrcweir             mpContentWindow->Invalidate();
1161cdf0e10cSrcweir         }
1162cdf0e10cSrcweir     }
1163cdf0e10cSrcweir 
1164cdf0e10cSrcweir 	if (mbHasRulers)
1165cdf0e10cSrcweir 	{
1166cdf0e10cSrcweir 		UpdateHRuler();
1167cdf0e10cSrcweir 		UpdateVRuler();
1168cdf0e10cSrcweir 	}
1169cdf0e10cSrcweir 
1170cdf0e10cSrcweir 	UpdateScrollBars();
1171cdf0e10cSrcweir 
1172cdf0e10cSrcweir 	Size aVisSizePixel = GetActiveWindow()->GetOutputSizePixel();
1173cdf0e10cSrcweir 	Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0), aVisSizePixel) );
1174cdf0e10cSrcweir 	VisAreaChanged(aVisAreaWin);
1175cdf0e10cSrcweir 
1176cdf0e10cSrcweir 	::sd::View* pView = GetView();
1177cdf0e10cSrcweir 	if (pView)
1178cdf0e10cSrcweir 	{
1179cdf0e10cSrcweir 		pView->VisAreaChanged(GetActiveWindow());
1180cdf0e10cSrcweir 	}
1181cdf0e10cSrcweir }
1182cdf0e10cSrcweir 
1183cdf0e10cSrcweir Point ViewShell::GetWinViewPos() const
1184cdf0e10cSrcweir {
1185cdf0e10cSrcweir 	return mpContentWindow->GetWinViewPos();
1186cdf0e10cSrcweir }
1187cdf0e10cSrcweir 
1188cdf0e10cSrcweir Point ViewShell::GetViewOrigin() const
1189cdf0e10cSrcweir {
1190cdf0e10cSrcweir 	return mpContentWindow->GetViewOrigin();
1191cdf0e10cSrcweir }
1192cdf0e10cSrcweir 
1193cdf0e10cSrcweir void ViewShell::AdaptDefaultsForChart(
1194cdf0e10cSrcweir     const uno::Reference < embed::XEmbeddedObject > & xEmbObj )
1195cdf0e10cSrcweir {
1196cdf0e10cSrcweir     if( xEmbObj.is())
1197cdf0e10cSrcweir     {
1198cdf0e10cSrcweir         uno::Reference< chart2::XChartDocument > xChartDoc( xEmbObj->getComponent(), uno::UNO_QUERY );
1199cdf0e10cSrcweir         OSL_ENSURE( xChartDoc.is(), "Trying to set chart property to non-chart OLE" );
1200cdf0e10cSrcweir         if( !xChartDoc.is())
1201cdf0e10cSrcweir             return;
1202cdf0e10cSrcweir 
1203cdf0e10cSrcweir         try
1204cdf0e10cSrcweir         {
1205cdf0e10cSrcweir             // set background to transparent (none)
1206cdf0e10cSrcweir             uno::Reference< beans::XPropertySet > xPageProp( xChartDoc->getPageBackground());
1207cdf0e10cSrcweir             if( xPageProp.is())
1208cdf0e10cSrcweir                 xPageProp->setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("FillStyle")),
1209cdf0e10cSrcweir                                              uno::makeAny( drawing::FillStyle_NONE ));
1210cdf0e10cSrcweir             // set no border
1211cdf0e10cSrcweir             if( xPageProp.is())
1212cdf0e10cSrcweir                 xPageProp->setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("LineStyle")),
1213cdf0e10cSrcweir                                              uno::makeAny( drawing::LineStyle_NONE ));
1214cdf0e10cSrcweir         }
1215cdf0e10cSrcweir         catch( const uno::Exception & )
1216cdf0e10cSrcweir         {
1217cdf0e10cSrcweir             OSL_ENSURE( false, "Exception caught in AdaptDefaultsForChart" );
1218cdf0e10cSrcweir         }
1219cdf0e10cSrcweir     }
1220cdf0e10cSrcweir }
1221cdf0e10cSrcweir 
1222cdf0e10cSrcweir } // end of namespace sd
1223