xref: /aoo4110/main/sc/source/ui/view/prevwsh.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_sc.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski 
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski // INCLUDE ---------------------------------------------------------------
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski #include "scitems.hxx"
32*b1cdbd2cSJim Jagielski #include <editeng/eeitem.hxx>
33*b1cdbd2cSJim Jagielski 
34*b1cdbd2cSJim Jagielski #include <sfx2/app.hxx>
35*b1cdbd2cSJim Jagielski #include <editeng/sizeitem.hxx>
36*b1cdbd2cSJim Jagielski #include <svl/srchitem.hxx>
37*b1cdbd2cSJim Jagielski #include <svx/zoomslideritem.hxx>
38*b1cdbd2cSJim Jagielski #include <svx/svdview.hxx>
39*b1cdbd2cSJim Jagielski //CHINA001 #include <svx/zoom.hxx>
40*b1cdbd2cSJim Jagielski #include <sfx2/dispatch.hxx>
41*b1cdbd2cSJim Jagielski #include <sfx2/objface.hxx>
42*b1cdbd2cSJim Jagielski #include <sfx2/request.hxx>
43*b1cdbd2cSJim Jagielski #include <svl/stritem.hxx>
44*b1cdbd2cSJim Jagielski #include <svl/whiter.hxx>
45*b1cdbd2cSJim Jagielski #include <vcl/msgbox.hxx>
46*b1cdbd2cSJim Jagielski #include <vcl/help.hxx>
47*b1cdbd2cSJim Jagielski #include <tools/urlobj.hxx>
48*b1cdbd2cSJim Jagielski #include <sfx2/docfile.hxx>
49*b1cdbd2cSJim Jagielski #include <sfx2/printer.hxx>
50*b1cdbd2cSJim Jagielski 
51*b1cdbd2cSJim Jagielski #ifndef _SVX_ZOOMSLIDERITEM_HXX
52*b1cdbd2cSJim Jagielski #include <svx/zoomslideritem.hxx>
53*b1cdbd2cSJim Jagielski #endif
54*b1cdbd2cSJim Jagielski #include "prevwsh.hxx"
55*b1cdbd2cSJim Jagielski #include "preview.hxx"
56*b1cdbd2cSJim Jagielski #include "printfun.hxx"
57*b1cdbd2cSJim Jagielski #include "attrib.hxx"
58*b1cdbd2cSJim Jagielski #include "scmod.hxx"
59*b1cdbd2cSJim Jagielski #include "inputhdl.hxx"
60*b1cdbd2cSJim Jagielski #include "docsh.hxx"
61*b1cdbd2cSJim Jagielski #include "tabvwsh.hxx"
62*b1cdbd2cSJim Jagielski #include "stlpool.hxx"
63*b1cdbd2cSJim Jagielski #include "editutil.hxx"
64*b1cdbd2cSJim Jagielski #include "scresid.hxx"
65*b1cdbd2cSJim Jagielski #include "globstr.hrc"
66*b1cdbd2cSJim Jagielski #include "sc.hrc"
67*b1cdbd2cSJim Jagielski #include "ViewSettingsSequenceDefines.hxx"
68*b1cdbd2cSJim Jagielski #include "tpprint.hxx"
69*b1cdbd2cSJim Jagielski #include "printopt.hxx"
70*b1cdbd2cSJim Jagielski #include <xmloff/xmluconv.hxx>
71*b1cdbd2cSJim Jagielski #include <rtl/ustrbuf.hxx>
72*b1cdbd2cSJim Jagielski 
73*b1cdbd2cSJim Jagielski #include <svx/svxdlg.hxx> //CHINA001
74*b1cdbd2cSJim Jagielski #include <svx/dialogs.hrc> //CHINA001
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski #ifndef _SVX_ZOOM_HXX
77*b1cdbd2cSJim Jagielski #include <svx/zoom_def.hxx>
78*b1cdbd2cSJim Jagielski #endif
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski #include "sc.hrc" //CHINA001
81*b1cdbd2cSJim Jagielski #include "scabstdlg.hxx" //CHINA001
82*b1cdbd2cSJim Jagielski //	fuer Rad-Maus
83*b1cdbd2cSJim Jagielski #define SC_DELTA_ZOOM	10
84*b1cdbd2cSJim Jagielski #define MINZOOM_SLIDER 10
85*b1cdbd2cSJim Jagielski #define MAXZOOM_SLIDER 400
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski #define SC_USERDATA_SEP	';'
88*b1cdbd2cSJim Jagielski 
89*b1cdbd2cSJim Jagielski using namespace com::sun::star;
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
92*b1cdbd2cSJim Jagielski 
93*b1cdbd2cSJim Jagielski #define ScPreviewShell
94*b1cdbd2cSJim Jagielski #include "scslots.hxx"
95*b1cdbd2cSJim Jagielski 
96*b1cdbd2cSJim Jagielski TYPEINIT1( ScPreviewShell, SfxViewShell );
97*b1cdbd2cSJim Jagielski 
SFX_IMPL_INTERFACE(ScPreviewShell,SfxViewShell,ScResId (SCSTR_PREVIEWSHELL))98*b1cdbd2cSJim Jagielski SFX_IMPL_INTERFACE( ScPreviewShell, SfxViewShell, ScResId(SCSTR_PREVIEWSHELL) )
99*b1cdbd2cSJim Jagielski {
100*b1cdbd2cSJim Jagielski 	SFX_OBJECTBAR_REGISTRATION(SFX_OBJECTBAR_OBJECT|SFX_VISIBILITY_STANDARD|
101*b1cdbd2cSJim Jagielski 								SFX_VISIBILITY_SERVER|SFX_VISIBILITY_READONLYDOC,
102*b1cdbd2cSJim Jagielski 								ScResId(RID_OBJECTBAR_PREVIEW));
103*b1cdbd2cSJim Jagielski 	SFX_POPUPMENU_REGISTRATION(ScResId(RID_POPUP_PREVIEW));
104*b1cdbd2cSJim Jagielski }
105*b1cdbd2cSJim Jagielski 
106*b1cdbd2cSJim Jagielski SFX_IMPL_NAMED_VIEWFACTORY( ScPreviewShell, "PrintPreview" )
107*b1cdbd2cSJim Jagielski {
108*b1cdbd2cSJim Jagielski 	SFX_VIEW_REGISTRATION(ScDocShell);
109*b1cdbd2cSJim Jagielski }
110*b1cdbd2cSJim Jagielski 
111*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
112*b1cdbd2cSJim Jagielski 
Construct(Window * pParent)113*b1cdbd2cSJim Jagielski void ScPreviewShell::Construct( Window* pParent )
114*b1cdbd2cSJim Jagielski {
115*b1cdbd2cSJim Jagielski 	eZoom = SVX_ZOOM_WHOLEPAGE;
116*b1cdbd2cSJim Jagielski 
117*b1cdbd2cSJim Jagielski 	pCorner = new ScrollBarBox( pParent, WB_SIZEABLE );
118*b1cdbd2cSJim Jagielski 
119*b1cdbd2cSJim Jagielski 	pHorScroll = new ScrollBar(pParent, WB_HSCROLL );
120*b1cdbd2cSJim Jagielski 	pVerScroll = new ScrollBar(pParent, WB_VSCROLL);
121*b1cdbd2cSJim Jagielski 
122*b1cdbd2cSJim Jagielski     // SSA: --- RTL --- no mirroring for horizontal scrollbars
123*b1cdbd2cSJim Jagielski     pHorScroll->EnableRTL( sal_False );
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski 	pHorScroll->SetEndScrollHdl( LINK( this, ScPreviewShell, ScrollHandler ) );
126*b1cdbd2cSJim Jagielski 	pVerScroll->SetEndScrollHdl( LINK( this, ScPreviewShell, ScrollHandler ) );
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski 	pPreview = new ScPreview( pParent, pDocShell, this );
129*b1cdbd2cSJim Jagielski 
130*b1cdbd2cSJim Jagielski 	SetPool( &SC_MOD()->GetPool() );
131*b1cdbd2cSJim Jagielski 	SetWindow( pPreview );
132*b1cdbd2cSJim Jagielski     StartListening(*pDocShell,sal_True);
133*b1cdbd2cSJim Jagielski     StartListening(*SFX_APP(),sal_True);        // #i62045# #i62046# application is needed for Calc's own hints
134*b1cdbd2cSJim Jagielski 	SfxBroadcaster* pDrawBC = pDocShell->GetDocument()->GetDrawBroadcaster();
135*b1cdbd2cSJim Jagielski 	if (pDrawBC)
136*b1cdbd2cSJim Jagielski 		StartListening(*pDrawBC);
137*b1cdbd2cSJim Jagielski 
138*b1cdbd2cSJim Jagielski 	pHorScroll->Show();
139*b1cdbd2cSJim Jagielski 	pVerScroll->Show();
140*b1cdbd2cSJim Jagielski 	pCorner->Show();
141*b1cdbd2cSJim Jagielski 	SetHelpId( HID_SCSHELL_PREVWSH );
142*b1cdbd2cSJim Jagielski 	SetName(String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("Preview")));
143*b1cdbd2cSJim Jagielski }
144*b1cdbd2cSJim Jagielski 
ScPreviewShell(SfxViewFrame * pViewFrame,SfxViewShell * pOldSh)145*b1cdbd2cSJim Jagielski ScPreviewShell::ScPreviewShell( SfxViewFrame* pViewFrame,
146*b1cdbd2cSJim Jagielski 								SfxViewShell* pOldSh ) :
147*b1cdbd2cSJim Jagielski 	SfxViewShell( pViewFrame, SFX_VIEW_CAN_PRINT | SFX_VIEW_HAS_PRINTOPTIONS ),
148*b1cdbd2cSJim Jagielski 	pDocShell( (ScDocShell*)pViewFrame->GetObjectShell() ),
149*b1cdbd2cSJim Jagielski 	nSourceDesignMode( SC_FORCEMODE_NONE ),
150*b1cdbd2cSJim Jagielski 	pAccessibilityBroadcaster( NULL )
151*b1cdbd2cSJim Jagielski {
152*b1cdbd2cSJim Jagielski 	Construct( &pViewFrame->GetWindow() );
153*b1cdbd2cSJim Jagielski 
154*b1cdbd2cSJim Jagielski 	if ( pOldSh && pOldSh->ISA( ScTabViewShell ) )
155*b1cdbd2cSJim Jagielski 	{
156*b1cdbd2cSJim Jagielski 		//	store view settings, show table from TabView
157*b1cdbd2cSJim Jagielski 		//!	store live ScViewData instead, and update on ScTablesHint?
158*b1cdbd2cSJim Jagielski 		//!	or completely forget aSourceData on ScTablesHint?
159*b1cdbd2cSJim Jagielski 
160*b1cdbd2cSJim Jagielski 		ScTabViewShell* pTabViewShell = ((ScTabViewShell*)pOldSh);
161*b1cdbd2cSJim Jagielski 		ScViewData* pData = pTabViewShell->GetViewData();
162*b1cdbd2cSJim Jagielski 		pData->WriteUserDataSequence( aSourceData );
163*b1cdbd2cSJim Jagielski 		InitStartTable( pData->GetTabNo() );
164*b1cdbd2cSJim Jagielski 
165*b1cdbd2cSJim Jagielski 		//	#106334# also have to store the TabView's DesignMode state
166*b1cdbd2cSJim Jagielski 		//	(only if draw view exists)
167*b1cdbd2cSJim Jagielski 		SdrView* pDrawView = pTabViewShell->GetSdrView();
168*b1cdbd2cSJim Jagielski 		if ( pDrawView )
169*b1cdbd2cSJim Jagielski 			nSourceDesignMode = pDrawView->IsDesignMode();
170*b1cdbd2cSJim Jagielski 	}
171*b1cdbd2cSJim Jagielski }
172*b1cdbd2cSJim Jagielski 
~ScPreviewShell()173*b1cdbd2cSJim Jagielski __EXPORT ScPreviewShell::~ScPreviewShell()
174*b1cdbd2cSJim Jagielski {
175*b1cdbd2cSJim Jagielski     // #108333#; notify Accessibility that Shell is dying and before destroy all
176*b1cdbd2cSJim Jagielski     BroadcastAccessibility( SfxSimpleHint( SFX_HINT_DYING ) );
177*b1cdbd2cSJim Jagielski     DELETEZ(pAccessibilityBroadcaster);
178*b1cdbd2cSJim Jagielski 
179*b1cdbd2cSJim Jagielski     SfxBroadcaster* pDrawBC = pDocShell->GetDocument()->GetDrawBroadcaster();
180*b1cdbd2cSJim Jagielski 	if (pDrawBC)
181*b1cdbd2cSJim Jagielski 		EndListening(*pDrawBC);
182*b1cdbd2cSJim Jagielski 	EndListening(*SFX_APP());
183*b1cdbd2cSJim Jagielski 	EndListening(*pDocShell);
184*b1cdbd2cSJim Jagielski 
185*b1cdbd2cSJim Jagielski 	SetWindow(0);
186*b1cdbd2cSJim Jagielski 	delete pPreview;
187*b1cdbd2cSJim Jagielski 	delete pHorScroll;
188*b1cdbd2cSJim Jagielski 	delete pVerScroll;
189*b1cdbd2cSJim Jagielski 	delete pCorner;
190*b1cdbd2cSJim Jagielski 
191*b1cdbd2cSJim Jagielski 	//	#97612# normal mode of operation is switching back to default view in the same frame,
192*b1cdbd2cSJim Jagielski 	//	so there's no need to activate any other window here anymore
193*b1cdbd2cSJim Jagielski }
194*b1cdbd2cSJim Jagielski 
InitStartTable(SCTAB nTab)195*b1cdbd2cSJim Jagielski void ScPreviewShell::InitStartTable(SCTAB nTab)
196*b1cdbd2cSJim Jagielski {
197*b1cdbd2cSJim Jagielski 	pPreview->SetPageNo( pPreview->GetFirstPage(nTab) );
198*b1cdbd2cSJim Jagielski }
199*b1cdbd2cSJim Jagielski 
200*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
201*b1cdbd2cSJim Jagielski 
GetDescription() const202*b1cdbd2cSJim Jagielski String __EXPORT ScPreviewShell::GetDescription() const
203*b1cdbd2cSJim Jagielski {
204*b1cdbd2cSJim Jagielski 	return String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM(" ** Test ** "));
205*b1cdbd2cSJim Jagielski }
206*b1cdbd2cSJim Jagielski 
GetOptimalSizePixel() const207*b1cdbd2cSJim Jagielski Size __EXPORT ScPreviewShell::GetOptimalSizePixel() const
208*b1cdbd2cSJim Jagielski {
209*b1cdbd2cSJim Jagielski 	Size aOptSize(100,100);
210*b1cdbd2cSJim Jagielski 
211*b1cdbd2cSJim Jagielski 	ScTabViewShell*     pViewSh = pDocShell->GetBestViewShell();
212*b1cdbd2cSJim Jagielski 
213*b1cdbd2cSJim Jagielski 	if ( pViewSh )
214*b1cdbd2cSJim Jagielski 	{
215*b1cdbd2cSJim Jagielski 		ScViewData*			pViewData	= pViewSh->GetViewData();
216*b1cdbd2cSJim Jagielski 		SCTAB				nCurTab		= pViewData->GetTabNo();
217*b1cdbd2cSJim Jagielski 		ScDocument*			pDoc		= pDocShell->GetDocument();
218*b1cdbd2cSJim Jagielski 		ScStyleSheetPool*	pStylePool  = pDoc->GetStyleSheetPool();
219*b1cdbd2cSJim Jagielski 		SfxStyleSheetBase*	pStyleSheet = pStylePool->Find(
220*b1cdbd2cSJim Jagielski 											pDoc->GetPageStyle( nCurTab ),
221*b1cdbd2cSJim Jagielski 											SFX_STYLE_FAMILY_PAGE );
222*b1cdbd2cSJim Jagielski 
223*b1cdbd2cSJim Jagielski 		DBG_ASSERT( pStyleSheet, "PageStyle not found :-/" );
224*b1cdbd2cSJim Jagielski 
225*b1cdbd2cSJim Jagielski 		if ( pStyleSheet )
226*b1cdbd2cSJim Jagielski 		{
227*b1cdbd2cSJim Jagielski 			const SfxItemSet&  rSet 	 = pStyleSheet->GetItemSet();
228*b1cdbd2cSJim Jagielski 			const SvxSizeItem& rItem	 = (const SvxSizeItem&)rSet.Get( ATTR_PAGE_SIZE );
229*b1cdbd2cSJim Jagielski 			const Size&		   rPageSize = rItem.GetSize();
230*b1cdbd2cSJim Jagielski 
231*b1cdbd2cSJim Jagielski 			aOptSize.Width()  = (long) (rPageSize.Width()  * pViewData->GetPPTX());
232*b1cdbd2cSJim Jagielski 			aOptSize.Height() = (long) (rPageSize.Height() * pViewData->GetPPTY());
233*b1cdbd2cSJim Jagielski 		}
234*b1cdbd2cSJim Jagielski 	}
235*b1cdbd2cSJim Jagielski 	else
236*b1cdbd2cSJim Jagielski 	{
237*b1cdbd2cSJim Jagielski 		DBG_ERROR( "TabViewShell not found :-/" );
238*b1cdbd2cSJim Jagielski 	}
239*b1cdbd2cSJim Jagielski 
240*b1cdbd2cSJim Jagielski 	return aOptSize;
241*b1cdbd2cSJim Jagielski }
242*b1cdbd2cSJim Jagielski 
AdjustPosSizePixel(const Point & rPos,const Size & rSize)243*b1cdbd2cSJim Jagielski void __EXPORT ScPreviewShell::AdjustPosSizePixel( const Point &rPos, const Size &rSize )
244*b1cdbd2cSJim Jagielski {
245*b1cdbd2cSJim Jagielski 	long nBarW = GetViewFrame()->GetWindow().GetSettings().GetStyleSettings().GetScrollBarSize();
246*b1cdbd2cSJim Jagielski 	long nBarH = nBarW;
247*b1cdbd2cSJim Jagielski //	long nBarW = pVerScroll->GetSizePixel().Width();
248*b1cdbd2cSJim Jagielski //	long nBarH = pHorScroll->GetSizePixel().Height();
249*b1cdbd2cSJim Jagielski 
250*b1cdbd2cSJim Jagielski 	Size aOutSize( rSize.Width()-nBarW, rSize.Height()-nBarH );
251*b1cdbd2cSJim Jagielski 	pPreview->SetPosSizePixel( rPos, aOutSize );
252*b1cdbd2cSJim Jagielski 	pHorScroll->SetPosSizePixel( Point( rPos.X(), rPos.Y() + aOutSize.Height() ),
253*b1cdbd2cSJim Jagielski 								 Size( aOutSize.Width(), nBarH ) );
254*b1cdbd2cSJim Jagielski 	pVerScroll->SetPosSizePixel( Point( rPos.X() + aOutSize.Width(), rPos.Y() ),
255*b1cdbd2cSJim Jagielski 								 Size( nBarW, aOutSize.Height() ) );
256*b1cdbd2cSJim Jagielski 	pCorner->SetPosSizePixel( Point( rPos.X() + aOutSize.Width(), rPos.Y() + aOutSize.Height() ),
257*b1cdbd2cSJim Jagielski 							  Size( nBarW, nBarH ) );
258*b1cdbd2cSJim Jagielski 
259*b1cdbd2cSJim Jagielski 	if ( SVX_ZOOM_WHOLEPAGE == eZoom )
260*b1cdbd2cSJim Jagielski 		pPreview->SetZoom( pPreview->GetOptimalZoom(sal_False) );
261*b1cdbd2cSJim Jagielski 	else if ( SVX_ZOOM_PAGEWIDTH == eZoom )
262*b1cdbd2cSJim Jagielski 		pPreview->SetZoom( pPreview->GetOptimalZoom(sal_True) );
263*b1cdbd2cSJim Jagielski 
264*b1cdbd2cSJim Jagielski 	UpdateScrollBars();
265*b1cdbd2cSJim Jagielski }
266*b1cdbd2cSJim Jagielski 
InnerResizePixel(const Point & rOfs,const Size & rSize)267*b1cdbd2cSJim Jagielski void __EXPORT ScPreviewShell::InnerResizePixel( const Point &rOfs, const Size &rSize )
268*b1cdbd2cSJim Jagielski {
269*b1cdbd2cSJim Jagielski 	AdjustPosSizePixel( rOfs,rSize );
270*b1cdbd2cSJim Jagielski }
271*b1cdbd2cSJim Jagielski 
OuterResizePixel(const Point & rOfs,const Size & rSize)272*b1cdbd2cSJim Jagielski void __EXPORT ScPreviewShell::OuterResizePixel( const Point &rOfs, const Size &rSize )
273*b1cdbd2cSJim Jagielski {
274*b1cdbd2cSJim Jagielski 	AdjustPosSizePixel( rOfs,rSize );
275*b1cdbd2cSJim Jagielski }
276*b1cdbd2cSJim Jagielski 
UpdateScrollBars()277*b1cdbd2cSJim Jagielski void ScPreviewShell::UpdateScrollBars()
278*b1cdbd2cSJim Jagielski {
279*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = pDocShell->GetDocument();
280*b1cdbd2cSJim Jagielski 	SCTAB nTab = pPreview->GetTab();
281*b1cdbd2cSJim Jagielski 
282*b1cdbd2cSJim Jagielski 	ScStyleSheetPool*	pStylePool	= pDoc->GetStyleSheetPool();
283*b1cdbd2cSJim Jagielski 	SfxStyleSheetBase*	pStyleSheet = pStylePool->Find( pDoc->GetPageStyle( nTab ),
284*b1cdbd2cSJim Jagielski 														SFX_STYLE_FAMILY_PAGE );
285*b1cdbd2cSJim Jagielski 	DBG_ASSERT(pStyleSheet,"StyleSheet nicht gefunden");
286*b1cdbd2cSJim Jagielski 	if (!pStyleSheet) return;
287*b1cdbd2cSJim Jagielski 	const SfxItemSet* pParamSet = &pStyleSheet->GetItemSet();
288*b1cdbd2cSJim Jagielski 
289*b1cdbd2cSJim Jagielski 	Size aPageSize = ((const SvxSizeItem&) pParamSet->Get(ATTR_PAGE_SIZE)).GetSize();
290*b1cdbd2cSJim Jagielski 	aPageSize.Width()  = (long) (aPageSize.Width()  * HMM_PER_TWIPS );
291*b1cdbd2cSJim Jagielski 	aPageSize.Height() = (long) (aPageSize.Height() * HMM_PER_TWIPS );
292*b1cdbd2cSJim Jagielski 
293*b1cdbd2cSJim Jagielski 	//	for centering, page size without the shadow is used
294*b1cdbd2cSJim Jagielski 
295*b1cdbd2cSJim Jagielski 	Size aWindowSize = pPreview->GetOutputSize();
296*b1cdbd2cSJim Jagielski 
297*b1cdbd2cSJim Jagielski 	Point aOfs = pPreview->GetOffset();
298*b1cdbd2cSJim Jagielski 	long nMaxPos;
299*b1cdbd2cSJim Jagielski 
300*b1cdbd2cSJim Jagielski     if( pHorScroll )
301*b1cdbd2cSJim Jagielski     {
302*b1cdbd2cSJim Jagielski         pHorScroll->SetRange( Range( 0, aPageSize.Width() ) );
303*b1cdbd2cSJim Jagielski         pHorScroll->SetLineSize( aWindowSize.Width() / 16 );
304*b1cdbd2cSJim Jagielski         pHorScroll->SetPageSize( aWindowSize.Width() );
305*b1cdbd2cSJim Jagielski         pHorScroll->SetVisibleSize( aWindowSize.Width() );
306*b1cdbd2cSJim Jagielski         nMaxPos = aPageSize.Width() - aWindowSize.Width();
307*b1cdbd2cSJim Jagielski         if ( nMaxPos<0 )
308*b1cdbd2cSJim Jagielski         {
309*b1cdbd2cSJim Jagielski             //	page smaller than window -> center (but put scrollbar to 0)
310*b1cdbd2cSJim Jagielski             aOfs.X() = 0;
311*b1cdbd2cSJim Jagielski             pPreview->SetXOffset( nMaxPos / 2 );
312*b1cdbd2cSJim Jagielski         }
313*b1cdbd2cSJim Jagielski         else if (aOfs.X() < 0)
314*b1cdbd2cSJim Jagielski         {
315*b1cdbd2cSJim Jagielski             //	page larger than window -> never use negative offset
316*b1cdbd2cSJim Jagielski             aOfs.X() = 0;
317*b1cdbd2cSJim Jagielski             pPreview->SetXOffset( 0 );
318*b1cdbd2cSJim Jagielski         }
319*b1cdbd2cSJim Jagielski         else if (aOfs.X() > nMaxPos)
320*b1cdbd2cSJim Jagielski         {
321*b1cdbd2cSJim Jagielski             //	limit offset to align with right edge of window
322*b1cdbd2cSJim Jagielski             aOfs.X() = nMaxPos;
323*b1cdbd2cSJim Jagielski             pPreview->SetXOffset(nMaxPos);
324*b1cdbd2cSJim Jagielski         }
325*b1cdbd2cSJim Jagielski         pHorScroll->SetThumbPos( aOfs.X() );
326*b1cdbd2cSJim Jagielski     }
327*b1cdbd2cSJim Jagielski 
328*b1cdbd2cSJim Jagielski     if( pVerScroll )
329*b1cdbd2cSJim Jagielski     {
330*b1cdbd2cSJim Jagielski         long nPageNo     = pPreview->GetPageNo();
331*b1cdbd2cSJim Jagielski         long nTotalPages = pPreview->GetTotalPages();
332*b1cdbd2cSJim Jagielski 
333*b1cdbd2cSJim Jagielski         nMaxVertPos = aPageSize.Height() - aWindowSize.Height();
334*b1cdbd2cSJim Jagielski         pVerScroll->SetLineSize( aWindowSize.Height() / 16  );
335*b1cdbd2cSJim Jagielski         pVerScroll->SetPageSize( aWindowSize.Height() );
336*b1cdbd2cSJim Jagielski         pVerScroll->SetVisibleSize( aWindowSize.Height() );
337*b1cdbd2cSJim Jagielski         if ( nMaxVertPos < 0 )
338*b1cdbd2cSJim Jagielski         {
339*b1cdbd2cSJim Jagielski             //	page smaller than window -> center (but put scrollbar to 0)
340*b1cdbd2cSJim Jagielski             aOfs.Y() = 0;
341*b1cdbd2cSJim Jagielski             pPreview->SetYOffset( nMaxVertPos / 2 );
342*b1cdbd2cSJim Jagielski             pVerScroll->SetThumbPos( nPageNo * aWindowSize.Height() );
343*b1cdbd2cSJim Jagielski             pVerScroll->SetRange( Range( 0, aWindowSize.Height() * nTotalPages ));
344*b1cdbd2cSJim Jagielski         }
345*b1cdbd2cSJim Jagielski         else if (aOfs.Y() < 0)
346*b1cdbd2cSJim Jagielski         {
347*b1cdbd2cSJim Jagielski             //	page larger than window -> never use negative offset
348*b1cdbd2cSJim Jagielski             pVerScroll->SetRange( Range( 0, aPageSize.Height() ) );
349*b1cdbd2cSJim Jagielski             aOfs.Y() = 0;
350*b1cdbd2cSJim Jagielski             pPreview->SetYOffset( 0 );
351*b1cdbd2cSJim Jagielski             pVerScroll->SetThumbPos( aOfs.Y() );
352*b1cdbd2cSJim Jagielski         }
353*b1cdbd2cSJim Jagielski         else if (aOfs.Y() > nMaxVertPos )
354*b1cdbd2cSJim Jagielski         {
355*b1cdbd2cSJim Jagielski             //	limit offset to align with window bottom
356*b1cdbd2cSJim Jagielski             pVerScroll->SetRange( Range( 0, aPageSize.Height() ) );
357*b1cdbd2cSJim Jagielski             aOfs.Y() = nMaxVertPos;
358*b1cdbd2cSJim Jagielski             pPreview->SetYOffset( nMaxVertPos );
359*b1cdbd2cSJim Jagielski             pVerScroll->SetThumbPos( aOfs.Y() );
360*b1cdbd2cSJim Jagielski         }
361*b1cdbd2cSJim Jagielski     }
362*b1cdbd2cSJim Jagielski }
363*b1cdbd2cSJim Jagielski 
IMPL_LINK(ScPreviewShell,ScrollHandler,ScrollBar *,pScroll)364*b1cdbd2cSJim Jagielski IMPL_LINK (ScPreviewShell,ScrollHandler, ScrollBar* ,pScroll )
365*b1cdbd2cSJim Jagielski {
366*b1cdbd2cSJim Jagielski     long nPos           = pScroll->GetThumbPos();
367*b1cdbd2cSJim Jagielski     long nDelta         = pScroll->GetDelta();
368*b1cdbd2cSJim Jagielski     long nMaxRange      = pScroll->GetRangeMax();
369*b1cdbd2cSJim Jagielski     long nTotalPages    = pPreview->GetTotalPages();
370*b1cdbd2cSJim Jagielski     long nPageNo        = 0;
371*b1cdbd2cSJim Jagielski     long nPerPageLength = 0;
372*b1cdbd2cSJim Jagielski     sal_Bool bIsDivide      = sal_True;
373*b1cdbd2cSJim Jagielski 
374*b1cdbd2cSJim Jagielski     if( nTotalPages )
375*b1cdbd2cSJim Jagielski         nPerPageLength = nMaxRange / nTotalPages;
376*b1cdbd2cSJim Jagielski 
377*b1cdbd2cSJim Jagielski     if( nPerPageLength )
378*b1cdbd2cSJim Jagielski     {
379*b1cdbd2cSJim Jagielski         nPageNo = nPos / nPerPageLength;
380*b1cdbd2cSJim Jagielski         if( nPos % nPerPageLength )
381*b1cdbd2cSJim Jagielski         {
382*b1cdbd2cSJim Jagielski             bIsDivide = sal_False;
383*b1cdbd2cSJim Jagielski             nPageNo ++;
384*b1cdbd2cSJim Jagielski         }
385*b1cdbd2cSJim Jagielski     }
386*b1cdbd2cSJim Jagielski 
387*b1cdbd2cSJim Jagielski     sal_Bool bHoriz = ( pScroll == pHorScroll );
388*b1cdbd2cSJim Jagielski 
389*b1cdbd2cSJim Jagielski     if( bHoriz )
390*b1cdbd2cSJim Jagielski         pPreview->SetXOffset( nPos );
391*b1cdbd2cSJim Jagielski     else
392*b1cdbd2cSJim Jagielski     {
393*b1cdbd2cSJim Jagielski         if( nMaxVertPos > 0 )
394*b1cdbd2cSJim Jagielski             pPreview->SetYOffset( nPos );
395*b1cdbd2cSJim Jagielski         else
396*b1cdbd2cSJim Jagielski         {
397*b1cdbd2cSJim Jagielski             Point  aMousePos = pScroll->OutputToNormalizedScreenPixel( pScroll->GetPointerPosPixel() );
398*b1cdbd2cSJim Jagielski             Point  aPos      = pScroll->GetParent()->OutputToNormalizedScreenPixel( pScroll->GetPosPixel() );
399*b1cdbd2cSJim Jagielski             String aHelpStr;
400*b1cdbd2cSJim Jagielski             Rectangle aRect;
401*b1cdbd2cSJim Jagielski             sal_uInt16   nAlign;
402*b1cdbd2cSJim Jagielski 
403*b1cdbd2cSJim Jagielski             if( nDelta < 0 )
404*b1cdbd2cSJim Jagielski             {
405*b1cdbd2cSJim Jagielski                 if ( nTotalPages && nPageNo > 0 && !bIsDivide )
406*b1cdbd2cSJim Jagielski                     pPreview->SetPageNo( nPageNo-1 );
407*b1cdbd2cSJim Jagielski                 if( bIsDivide )
408*b1cdbd2cSJim Jagielski                     pPreview->SetPageNo( nPageNo );
409*b1cdbd2cSJim Jagielski 
410*b1cdbd2cSJim Jagielski                 aHelpStr = ScGlobal::GetRscString( STR_PAGE );
411*b1cdbd2cSJim Jagielski                 aHelpStr += ' ';
412*b1cdbd2cSJim Jagielski                 aHelpStr += String::CreateFromInt32( nPageNo );
413*b1cdbd2cSJim Jagielski 
414*b1cdbd2cSJim Jagielski                 aHelpStr.AppendAscii(RTL_CONSTASCII_STRINGPARAM( " / " ));
415*b1cdbd2cSJim Jagielski                 aHelpStr += String::CreateFromInt32( nTotalPages );
416*b1cdbd2cSJim Jagielski             }
417*b1cdbd2cSJim Jagielski             else if( nDelta > 0 )
418*b1cdbd2cSJim Jagielski             {
419*b1cdbd2cSJim Jagielski                 sal_Bool bAllTested	= pPreview->AllTested();
420*b1cdbd2cSJim Jagielski                 if ( nTotalPages && ( nPageNo < nTotalPages || !bAllTested ) )
421*b1cdbd2cSJim Jagielski                     pPreview->SetPageNo( nPageNo );
422*b1cdbd2cSJim Jagielski 
423*b1cdbd2cSJim Jagielski                 aHelpStr = ScGlobal::GetRscString( STR_PAGE );
424*b1cdbd2cSJim Jagielski                 aHelpStr += ' ';
425*b1cdbd2cSJim Jagielski                 aHelpStr += String::CreateFromInt32( nPageNo+1 );
426*b1cdbd2cSJim Jagielski 
427*b1cdbd2cSJim Jagielski                 aHelpStr.AppendAscii(RTL_CONSTASCII_STRINGPARAM( " / " ));
428*b1cdbd2cSJim Jagielski                 aHelpStr += String::CreateFromInt32( nTotalPages );
429*b1cdbd2cSJim Jagielski             }
430*b1cdbd2cSJim Jagielski 
431*b1cdbd2cSJim Jagielski             aRect.Left()    = aPos.X() - 8;
432*b1cdbd2cSJim Jagielski             aRect.Top()	    = aMousePos.Y();
433*b1cdbd2cSJim Jagielski             aRect.Right() 	= aRect.Left();
434*b1cdbd2cSJim Jagielski             aRect.Top()		= aRect.Top();
435*b1cdbd2cSJim Jagielski             nAlign		    = QUICKHELP_BOTTOM|QUICKHELP_CENTER;
436*b1cdbd2cSJim Jagielski             Help::ShowQuickHelp( pScroll->GetParent(), aRect, aHelpStr, nAlign );
437*b1cdbd2cSJim Jagielski         }
438*b1cdbd2cSJim Jagielski     }
439*b1cdbd2cSJim Jagielski 
440*b1cdbd2cSJim Jagielski 	return 0;
441*b1cdbd2cSJim Jagielski }
442*b1cdbd2cSJim Jagielski 
ScrollCommand(const CommandEvent & rCEvt)443*b1cdbd2cSJim Jagielski sal_Bool ScPreviewShell::ScrollCommand( const CommandEvent& rCEvt )
444*b1cdbd2cSJim Jagielski {
445*b1cdbd2cSJim Jagielski 	sal_Bool bDone = sal_False;
446*b1cdbd2cSJim Jagielski 	const CommandWheelData* pData = rCEvt.GetWheelData();
447*b1cdbd2cSJim Jagielski 	if ( pData && pData->GetMode() == COMMAND_WHEEL_ZOOM )
448*b1cdbd2cSJim Jagielski 	{
449*b1cdbd2cSJim Jagielski 		long nOld = pPreview->GetZoom();
450*b1cdbd2cSJim Jagielski 		long nNew = nOld;
451*b1cdbd2cSJim Jagielski 		if ( pData->GetDelta() < 0 )
452*b1cdbd2cSJim Jagielski 			nNew = Max( (long) MINZOOM, (long)( nOld - SC_DELTA_ZOOM ) );
453*b1cdbd2cSJim Jagielski 		else
454*b1cdbd2cSJim Jagielski 			nNew = Min( (long) MAXZOOM, (long)( nOld + SC_DELTA_ZOOM ) );
455*b1cdbd2cSJim Jagielski 
456*b1cdbd2cSJim Jagielski 		if ( nNew != nOld )
457*b1cdbd2cSJim Jagielski 		{
458*b1cdbd2cSJim Jagielski 			eZoom = SVX_ZOOM_PERCENT;
459*b1cdbd2cSJim Jagielski 			pPreview->SetZoom( (sal_uInt16)nNew );
460*b1cdbd2cSJim Jagielski 		}
461*b1cdbd2cSJim Jagielski 
462*b1cdbd2cSJim Jagielski 		bDone = sal_True;
463*b1cdbd2cSJim Jagielski 	}
464*b1cdbd2cSJim Jagielski 	else
465*b1cdbd2cSJim Jagielski 	{
466*b1cdbd2cSJim Jagielski 		bDone = pPreview->HandleScrollCommand( rCEvt, pHorScroll, pVerScroll );
467*b1cdbd2cSJim Jagielski 	}
468*b1cdbd2cSJim Jagielski 
469*b1cdbd2cSJim Jagielski 	return bDone;
470*b1cdbd2cSJim Jagielski }
471*b1cdbd2cSJim Jagielski 
GetPrinter(sal_Bool bCreate)472*b1cdbd2cSJim Jagielski SfxPrinter* __EXPORT ScPreviewShell::GetPrinter( sal_Bool bCreate )
473*b1cdbd2cSJim Jagielski {
474*b1cdbd2cSJim Jagielski 	return pDocShell->GetPrinter(bCreate);
475*b1cdbd2cSJim Jagielski }
476*b1cdbd2cSJim Jagielski 
SetPrinter(SfxPrinter * pNewPrinter,sal_uInt16 nDiffFlags,bool)477*b1cdbd2cSJim Jagielski sal_uInt16 __EXPORT ScPreviewShell::SetPrinter( SfxPrinter *pNewPrinter, sal_uInt16 nDiffFlags, bool )
478*b1cdbd2cSJim Jagielski {
479*b1cdbd2cSJim Jagielski 	return pDocShell->SetPrinter( pNewPrinter, nDiffFlags );
480*b1cdbd2cSJim Jagielski }
481*b1cdbd2cSJim Jagielski 
CreatePrintOptionsPage(Window * pParent,const SfxItemSet & rOptions)482*b1cdbd2cSJim Jagielski SfxTabPage* ScPreviewShell::CreatePrintOptionsPage( Window *pParent, const SfxItemSet &rOptions )
483*b1cdbd2cSJim Jagielski {
484*b1cdbd2cSJim Jagielski 	ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
485*b1cdbd2cSJim Jagielski 	DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001
486*b1cdbd2cSJim Jagielski 	//CHINA001 return ScTpPrintOptions::Create( pParent, rOptions );
487*b1cdbd2cSJim Jagielski 	::CreateTabPage ScTpPrintOptionsCreate = 	pFact->GetTabPageCreatorFunc( RID_SCPAGE_PRINT );
488*b1cdbd2cSJim Jagielski 	if ( ScTpPrintOptionsCreate )
489*b1cdbd2cSJim Jagielski 		return  (*ScTpPrintOptionsCreate)( pParent, rOptions);
490*b1cdbd2cSJim Jagielski 	return 0;
491*b1cdbd2cSJim Jagielski }
492*b1cdbd2cSJim Jagielski 
493*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
494*b1cdbd2cSJim Jagielski 
Activate(sal_Bool bMDI)495*b1cdbd2cSJim Jagielski void __EXPORT ScPreviewShell::Activate(sal_Bool bMDI)
496*b1cdbd2cSJim Jagielski {
497*b1cdbd2cSJim Jagielski 	SfxViewShell::Activate(bMDI);
498*b1cdbd2cSJim Jagielski 
499*b1cdbd2cSJim Jagielski 	//!	Basic etc. -> auslagern in eigene Datei (s. tabvwsh4)
500*b1cdbd2cSJim Jagielski 
501*b1cdbd2cSJim Jagielski 	if (bMDI)
502*b1cdbd2cSJim Jagielski 	{
503*b1cdbd2cSJim Jagielski 		// InputHdl ist jetzt meistens Null, keine Assertion mehr!
504*b1cdbd2cSJim Jagielski 		ScInputHandler*	pInputHdl = SC_MOD()->GetInputHdl();
505*b1cdbd2cSJim Jagielski 		if ( pInputHdl )
506*b1cdbd2cSJim Jagielski 			pInputHdl->NotifyChange( NULL );
507*b1cdbd2cSJim Jagielski 	}
508*b1cdbd2cSJim Jagielski }
509*b1cdbd2cSJim Jagielski 
Deactivate(sal_Bool bMDI)510*b1cdbd2cSJim Jagielski void __EXPORT ScPreviewShell::Deactivate(sal_Bool bMDI)
511*b1cdbd2cSJim Jagielski {
512*b1cdbd2cSJim Jagielski 	SfxViewShell::Deactivate(bMDI);
513*b1cdbd2cSJim Jagielski 
514*b1cdbd2cSJim Jagielski 	if (bMDI)
515*b1cdbd2cSJim Jagielski 	{
516*b1cdbd2cSJim Jagielski 	}
517*b1cdbd2cSJim Jagielski }
518*b1cdbd2cSJim Jagielski 
519*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
520*b1cdbd2cSJim Jagielski 
Execute(SfxRequest & rReq)521*b1cdbd2cSJim Jagielski void __EXPORT ScPreviewShell::Execute( SfxRequest& rReq )
522*b1cdbd2cSJim Jagielski {
523*b1cdbd2cSJim Jagielski 	sal_uInt16 nSlot = rReq.GetSlot();
524*b1cdbd2cSJim Jagielski 	const SfxItemSet* pReqArgs = rReq.GetArgs();
525*b1cdbd2cSJim Jagielski 
526*b1cdbd2cSJim Jagielski 	switch ( nSlot )
527*b1cdbd2cSJim Jagielski 	{
528*b1cdbd2cSJim Jagielski 		case SID_FORMATPAGE:
529*b1cdbd2cSJim Jagielski 		case SID_STATUS_PAGESTYLE:
530*b1cdbd2cSJim Jagielski 		case SID_HFEDIT:
531*b1cdbd2cSJim Jagielski 			pDocShell->ExecutePageStyle( *this, rReq, pPreview->GetTab() );
532*b1cdbd2cSJim Jagielski 			break;
533*b1cdbd2cSJim Jagielski 		case SID_REPAINT:
534*b1cdbd2cSJim Jagielski 			pPreview->Invalidate();
535*b1cdbd2cSJim Jagielski 			rReq.Done();
536*b1cdbd2cSJim Jagielski 			break;
537*b1cdbd2cSJim Jagielski 		case SID_PREV_TABLE: // Accelerator
538*b1cdbd2cSJim Jagielski 		case SID_PREVIEW_PREVIOUS:
539*b1cdbd2cSJim Jagielski 			{
540*b1cdbd2cSJim Jagielski 				long nPage = pPreview->GetPageNo();
541*b1cdbd2cSJim Jagielski 				long nTotal = pPreview->GetTotalPages();
542*b1cdbd2cSJim Jagielski 				if (nTotal && nPage > 0)
543*b1cdbd2cSJim Jagielski 					pPreview->SetPageNo( nPage-1 );
544*b1cdbd2cSJim Jagielski 			}
545*b1cdbd2cSJim Jagielski 			break;
546*b1cdbd2cSJim Jagielski 		case SID_NEXT_TABLE: // Accelerator
547*b1cdbd2cSJim Jagielski 		case SID_PREVIEW_NEXT:
548*b1cdbd2cSJim Jagielski 			{
549*b1cdbd2cSJim Jagielski 				sal_Bool bAllTested	= pPreview->AllTested();
550*b1cdbd2cSJim Jagielski 				long nPage = pPreview->GetPageNo();
551*b1cdbd2cSJim Jagielski 				long nTotal = pPreview->GetTotalPages();
552*b1cdbd2cSJim Jagielski 				if (nTotal && (nPage+1 < nTotal || !bAllTested))
553*b1cdbd2cSJim Jagielski 					pPreview->SetPageNo( nPage+1 );
554*b1cdbd2cSJim Jagielski 			}
555*b1cdbd2cSJim Jagielski 			break;
556*b1cdbd2cSJim Jagielski 		case SID_CURSORTOPOFFILE: // Accelerator
557*b1cdbd2cSJim Jagielski 		case SID_PREVIEW_FIRST:
558*b1cdbd2cSJim Jagielski 			{
559*b1cdbd2cSJim Jagielski 				long nPage = pPreview->GetPageNo();
560*b1cdbd2cSJim Jagielski 				long nTotal = pPreview->GetTotalPages();
561*b1cdbd2cSJim Jagielski 				if (nTotal && nPage != 0)
562*b1cdbd2cSJim Jagielski 					pPreview->SetPageNo( 0 );
563*b1cdbd2cSJim Jagielski 			}
564*b1cdbd2cSJim Jagielski 			break;
565*b1cdbd2cSJim Jagielski 		case SID_CURSORENDOFFILE: // Accelerator
566*b1cdbd2cSJim Jagielski 		case SID_PREVIEW_LAST:
567*b1cdbd2cSJim Jagielski 			{
568*b1cdbd2cSJim Jagielski 				if (!pPreview->AllTested())
569*b1cdbd2cSJim Jagielski 					pPreview->CalcAll();
570*b1cdbd2cSJim Jagielski 
571*b1cdbd2cSJim Jagielski 				long nPage = pPreview->GetPageNo();
572*b1cdbd2cSJim Jagielski 				long nTotal = pPreview->GetTotalPages();
573*b1cdbd2cSJim Jagielski 				if (nTotal && nPage+1 != nTotal)
574*b1cdbd2cSJim Jagielski 					pPreview->SetPageNo( nTotal-1 );
575*b1cdbd2cSJim Jagielski 			}
576*b1cdbd2cSJim Jagielski 			break;
577*b1cdbd2cSJim Jagielski 		case SID_ATTR_ZOOM:
578*b1cdbd2cSJim Jagielski 		case FID_SCALE:
579*b1cdbd2cSJim Jagielski 			{
580*b1cdbd2cSJim Jagielski 				sal_uInt16		nZoom		= 100;
581*b1cdbd2cSJim Jagielski 				sal_Bool		bCancel		= sal_False;
582*b1cdbd2cSJim Jagielski 
583*b1cdbd2cSJim Jagielski 				eZoom = SVX_ZOOM_PERCENT;
584*b1cdbd2cSJim Jagielski 
585*b1cdbd2cSJim Jagielski 				if ( pReqArgs )
586*b1cdbd2cSJim Jagielski 				{
587*b1cdbd2cSJim Jagielski 
588*b1cdbd2cSJim Jagielski 					const SvxZoomItem& rZoomItem = (const SvxZoomItem&)
589*b1cdbd2cSJim Jagielski 												   pReqArgs->Get(SID_ATTR_ZOOM);
590*b1cdbd2cSJim Jagielski 
591*b1cdbd2cSJim Jagielski 					eZoom = rZoomItem.GetType();
592*b1cdbd2cSJim Jagielski 					nZoom = rZoomItem.GetValue();
593*b1cdbd2cSJim Jagielski 				}
594*b1cdbd2cSJim Jagielski 				else
595*b1cdbd2cSJim Jagielski 				{
596*b1cdbd2cSJim Jagielski 					SfxItemSet		aSet	 ( GetPool(), SID_ATTR_ZOOM, SID_ATTR_ZOOM );
597*b1cdbd2cSJim Jagielski 					SvxZoomItem		aZoomItem( SVX_ZOOM_PERCENT, pPreview->GetZoom(), SID_ATTR_ZOOM );
598*b1cdbd2cSJim Jagielski 
599*b1cdbd2cSJim Jagielski 					aSet.Put( aZoomItem );
600*b1cdbd2cSJim Jagielski 					//CHINA001 SvxZoomDialog* pDlg = pDlg = new SvxZoomDialog( NULL, aSet );
601*b1cdbd2cSJim Jagielski 					SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
602*b1cdbd2cSJim Jagielski 					if(pFact)
603*b1cdbd2cSJim Jagielski 					{
604*b1cdbd2cSJim Jagielski 						AbstractSvxZoomDialog* pDlg = pFact->CreateSvxZoomDialog(NULL, aSet);
605*b1cdbd2cSJim Jagielski 						DBG_ASSERT(pDlg, "Dialogdiet fail!");//CHINA001
606*b1cdbd2cSJim Jagielski 						pDlg->SetLimits( 20, 400 );
607*b1cdbd2cSJim Jagielski 						pDlg->HideButton( ZOOMBTN_OPTIMAL );
608*b1cdbd2cSJim Jagielski 						bCancel = ( RET_CANCEL == pDlg->Execute() );
609*b1cdbd2cSJim Jagielski 
610*b1cdbd2cSJim Jagielski 						if ( !bCancel )
611*b1cdbd2cSJim Jagielski 						{
612*b1cdbd2cSJim Jagielski 							const SvxZoomItem&	rZoomItem = (const SvxZoomItem&)
613*b1cdbd2cSJim Jagielski 													pDlg->GetOutputItemSet()->
614*b1cdbd2cSJim Jagielski 														Get( SID_ATTR_ZOOM );
615*b1cdbd2cSJim Jagielski 
616*b1cdbd2cSJim Jagielski 							eZoom = rZoomItem.GetType();
617*b1cdbd2cSJim Jagielski 							nZoom = rZoomItem.GetValue();
618*b1cdbd2cSJim Jagielski 						}
619*b1cdbd2cSJim Jagielski 
620*b1cdbd2cSJim Jagielski 						delete pDlg;
621*b1cdbd2cSJim Jagielski 					}
622*b1cdbd2cSJim Jagielski 				}
623*b1cdbd2cSJim Jagielski 
624*b1cdbd2cSJim Jagielski 				if ( !bCancel )
625*b1cdbd2cSJim Jagielski 				{
626*b1cdbd2cSJim Jagielski 					switch ( eZoom )
627*b1cdbd2cSJim Jagielski 					{
628*b1cdbd2cSJim Jagielski 						case SVX_ZOOM_OPTIMAL:
629*b1cdbd2cSJim Jagielski 						case SVX_ZOOM_WHOLEPAGE:
630*b1cdbd2cSJim Jagielski 							nZoom = pPreview->GetOptimalZoom(sal_False);
631*b1cdbd2cSJim Jagielski 							break;
632*b1cdbd2cSJim Jagielski 						case SVX_ZOOM_PAGEWIDTH:
633*b1cdbd2cSJim Jagielski 							nZoom = pPreview->GetOptimalZoom(sal_True);
634*b1cdbd2cSJim Jagielski 							break;
635*b1cdbd2cSJim Jagielski                         default:
636*b1cdbd2cSJim Jagielski                         {
637*b1cdbd2cSJim Jagielski                             // added to avoid warnings
638*b1cdbd2cSJim Jagielski                         }
639*b1cdbd2cSJim Jagielski 					}
640*b1cdbd2cSJim Jagielski 
641*b1cdbd2cSJim Jagielski 					pPreview->SetZoom( nZoom );
642*b1cdbd2cSJim Jagielski 					rReq.Done();
643*b1cdbd2cSJim Jagielski 				}
644*b1cdbd2cSJim Jagielski 			}
645*b1cdbd2cSJim Jagielski 			break;
646*b1cdbd2cSJim Jagielski 		case SID_PREVIEW_ZOOMIN:
647*b1cdbd2cSJim Jagielski 			{
648*b1cdbd2cSJim Jagielski 				sal_uInt16 nNew = pPreview->GetZoom() + 20 ;
649*b1cdbd2cSJim Jagielski 				nNew -= nNew % 20;
650*b1cdbd2cSJim Jagielski 				pPreview->SetZoom( nNew );
651*b1cdbd2cSJim Jagielski 				eZoom = SVX_ZOOM_PERCENT;
652*b1cdbd2cSJim Jagielski 				rReq.Done();
653*b1cdbd2cSJim Jagielski 			}
654*b1cdbd2cSJim Jagielski 			break;
655*b1cdbd2cSJim Jagielski 		case SID_PREVIEW_ZOOMOUT:
656*b1cdbd2cSJim Jagielski 			{
657*b1cdbd2cSJim Jagielski 				sal_uInt16 nNew = pPreview->GetZoom() - 1;
658*b1cdbd2cSJim Jagielski 				nNew -= nNew % 20;
659*b1cdbd2cSJim Jagielski 				pPreview->SetZoom( nNew );
660*b1cdbd2cSJim Jagielski 				eZoom = SVX_ZOOM_PERCENT;
661*b1cdbd2cSJim Jagielski 				rReq.Done();
662*b1cdbd2cSJim Jagielski 			}
663*b1cdbd2cSJim Jagielski 			break;
664*b1cdbd2cSJim Jagielski         case SID_PREVIEW_MARGIN:
665*b1cdbd2cSJim Jagielski             {
666*b1cdbd2cSJim Jagielski                 sal_Bool bMargin = pPreview->GetPageMargins();
667*b1cdbd2cSJim Jagielski                 pPreview->SetPageMargins( !bMargin );
668*b1cdbd2cSJim Jagielski                 pPreview->Invalidate();
669*b1cdbd2cSJim Jagielski                 rReq.Done();
670*b1cdbd2cSJim Jagielski             }
671*b1cdbd2cSJim Jagielski             break;
672*b1cdbd2cSJim Jagielski         case SID_ATTR_ZOOMSLIDER:
673*b1cdbd2cSJim Jagielski             {
674*b1cdbd2cSJim Jagielski                 const SfxPoolItem* pItem;
675*b1cdbd2cSJim Jagielski                 eZoom = SVX_ZOOM_PERCENT;
676*b1cdbd2cSJim Jagielski                 if( pReqArgs && SFX_ITEM_SET == pReqArgs->GetItemState( SID_ATTR_ZOOMSLIDER, sal_True, &pItem ) )
677*b1cdbd2cSJim Jagielski                 {
678*b1cdbd2cSJim Jagielski                     const sal_uInt16 nCurrentZoom = ((const SvxZoomSliderItem*)pItem)->GetValue();
679*b1cdbd2cSJim Jagielski                     if( nCurrentZoom )
680*b1cdbd2cSJim Jagielski                     {
681*b1cdbd2cSJim Jagielski                         pPreview->SetZoom( nCurrentZoom );
682*b1cdbd2cSJim Jagielski                         rReq.Done();
683*b1cdbd2cSJim Jagielski                     }
684*b1cdbd2cSJim Jagielski                 }
685*b1cdbd2cSJim Jagielski             }
686*b1cdbd2cSJim Jagielski             break;
687*b1cdbd2cSJim Jagielski         case SID_PREVIEW_SCALINGFACTOR:
688*b1cdbd2cSJim Jagielski             {
689*b1cdbd2cSJim Jagielski                 const SfxPoolItem* pItem;
690*b1cdbd2cSJim Jagielski                 SCTAB nTab                      = pPreview->GetTab();
691*b1cdbd2cSJim Jagielski                 String aOldName                 = pDocShell->GetDocument()->GetPageStyle( pPreview->GetTab() );
692*b1cdbd2cSJim Jagielski                 ScStyleSheetPool* pStylePool    = pDocShell->GetDocument()->GetStyleSheetPool();
693*b1cdbd2cSJim Jagielski                 SfxStyleSheetBase* pStyleSheet  = pStylePool->Find( aOldName, SFX_STYLE_FAMILY_PAGE );
694*b1cdbd2cSJim Jagielski                 DBG_ASSERT( pStyleSheet, "PageStyle not found! :-/" );
695*b1cdbd2cSJim Jagielski 
696*b1cdbd2cSJim Jagielski                 if ( pReqArgs && pStyleSheet && SFX_ITEM_SET == pReqArgs->GetItemState( SID_PREVIEW_SCALINGFACTOR, sal_True, &pItem ) )
697*b1cdbd2cSJim Jagielski                 {
698*b1cdbd2cSJim Jagielski                     const sal_uInt16 nCurrentZoom   = ((const SvxZoomSliderItem *)pItem)->GetValue();
699*b1cdbd2cSJim Jagielski                     SfxItemSet& rSet            = pStyleSheet->GetItemSet();
700*b1cdbd2cSJim Jagielski                     rSet.Put( SfxUInt16Item( ATTR_PAGE_SCALE, nCurrentZoom ) );
701*b1cdbd2cSJim Jagielski                     ScPrintFunc aPrintFunc( pDocShell, pDocShell->GetPrinter(), nTab );
702*b1cdbd2cSJim Jagielski                     aPrintFunc.UpdatePages();
703*b1cdbd2cSJim Jagielski                     rReq.Done();
704*b1cdbd2cSJim Jagielski                 }
705*b1cdbd2cSJim Jagielski                 GetViewFrame()->GetBindings().Invalidate( nSlot );
706*b1cdbd2cSJim Jagielski             }
707*b1cdbd2cSJim Jagielski             break;
708*b1cdbd2cSJim Jagielski 		case SID_PRINTPREVIEW:
709*b1cdbd2cSJim Jagielski 		case SID_PREVIEW_CLOSE:
710*b1cdbd2cSJim Jagielski 			//	print preview is now always in the same frame as the tab view
711*b1cdbd2cSJim Jagielski 			//	-> always switch this frame back to normal view
712*b1cdbd2cSJim Jagielski 			//	(ScTabViewShell ctor reads stored view data)
713*b1cdbd2cSJim Jagielski 
714*b1cdbd2cSJim Jagielski             GetViewFrame()->GetDispatcher()->Execute( SID_VIEWSHELL0, SFX_CALLMODE_ASYNCHRON );
715*b1cdbd2cSJim Jagielski 			break;
716*b1cdbd2cSJim Jagielski 		case SID_CURSORPAGEUP:
717*b1cdbd2cSJim Jagielski 		case SID_CURSORPAGEDOWN:
718*b1cdbd2cSJim Jagielski 		case SID_CURSORHOME:
719*b1cdbd2cSJim Jagielski 		case SID_CURSOREND:
720*b1cdbd2cSJim Jagielski 		case SID_CURSORUP:
721*b1cdbd2cSJim Jagielski 		case SID_CURSORDOWN:
722*b1cdbd2cSJim Jagielski 		case SID_CURSORLEFT:
723*b1cdbd2cSJim Jagielski 		case SID_CURSORRIGHT:
724*b1cdbd2cSJim Jagielski 			DoScroll( nSlot );
725*b1cdbd2cSJim Jagielski 			break;
726*b1cdbd2cSJim Jagielski         case SID_CANCEL:
727*b1cdbd2cSJim Jagielski             if( ScViewUtil::IsFullScreen( *this ) )
728*b1cdbd2cSJim Jagielski                 ScViewUtil::SetFullScreen( *this, false );
729*b1cdbd2cSJim Jagielski             break;
730*b1cdbd2cSJim Jagielski 
731*b1cdbd2cSJim Jagielski 		default:
732*b1cdbd2cSJim Jagielski 			break;
733*b1cdbd2cSJim Jagielski 	}
734*b1cdbd2cSJim Jagielski }
735*b1cdbd2cSJim Jagielski 
GetState(SfxItemSet & rSet)736*b1cdbd2cSJim Jagielski void __EXPORT ScPreviewShell::GetState( SfxItemSet& rSet )
737*b1cdbd2cSJim Jagielski {
738*b1cdbd2cSJim Jagielski 	pPreview->SetInGetState(sal_True);
739*b1cdbd2cSJim Jagielski 
740*b1cdbd2cSJim Jagielski 	SCTAB nTab		= pPreview->GetTab();
741*b1cdbd2cSJim Jagielski 	long nPage		= pPreview->GetPageNo();
742*b1cdbd2cSJim Jagielski 	long nTotal		= pPreview->GetTotalPages();
743*b1cdbd2cSJim Jagielski 	sal_uInt16 nZoom	= pPreview->GetZoom();
744*b1cdbd2cSJim Jagielski 	sal_Bool bAllTested	= pPreview->AllTested();
745*b1cdbd2cSJim Jagielski 
746*b1cdbd2cSJim Jagielski 	SfxWhichIter aIter(rSet);
747*b1cdbd2cSJim Jagielski 	sal_uInt16 nWhich = aIter.FirstWhich();
748*b1cdbd2cSJim Jagielski 	while ( nWhich )
749*b1cdbd2cSJim Jagielski 	{
750*b1cdbd2cSJim Jagielski 		switch (nWhich)
751*b1cdbd2cSJim Jagielski 		{
752*b1cdbd2cSJim Jagielski 			case SID_STATUS_PAGESTYLE:
753*b1cdbd2cSJim Jagielski 			case SID_HFEDIT:
754*b1cdbd2cSJim Jagielski 				pDocShell->GetStatePageStyle( *this, rSet, nTab );
755*b1cdbd2cSJim Jagielski 				break;
756*b1cdbd2cSJim Jagielski 			case SID_UNDO:
757*b1cdbd2cSJim Jagielski 			case SID_REDO:
758*b1cdbd2cSJim Jagielski 			case SID_REPEAT:
759*b1cdbd2cSJim Jagielski 				rSet.DisableItem(nWhich);
760*b1cdbd2cSJim Jagielski 				break;
761*b1cdbd2cSJim Jagielski 			case SID_PREVIEW_PREVIOUS:
762*b1cdbd2cSJim Jagielski 			case SID_PREVIEW_FIRST:
763*b1cdbd2cSJim Jagielski 				if (!nTotal || nPage==0)
764*b1cdbd2cSJim Jagielski 					rSet.DisableItem(nWhich);
765*b1cdbd2cSJim Jagielski 				break;
766*b1cdbd2cSJim Jagielski 			case SID_PREVIEW_NEXT:
767*b1cdbd2cSJim Jagielski 			case SID_PREVIEW_LAST:
768*b1cdbd2cSJim Jagielski 				if (bAllTested)
769*b1cdbd2cSJim Jagielski 					if (!nTotal || nPage==nTotal-1)
770*b1cdbd2cSJim Jagielski 						rSet.DisableItem(nWhich);
771*b1cdbd2cSJim Jagielski 				break;
772*b1cdbd2cSJim Jagielski 			case SID_PREVIEW_ZOOMIN:
773*b1cdbd2cSJim Jagielski 				if (nZoom >= 400)
774*b1cdbd2cSJim Jagielski 					rSet.DisableItem(nWhich);
775*b1cdbd2cSJim Jagielski 				break;
776*b1cdbd2cSJim Jagielski 			case SID_PREVIEW_ZOOMOUT:
777*b1cdbd2cSJim Jagielski 				if (nZoom <= 20)
778*b1cdbd2cSJim Jagielski 					rSet.DisableItem(nWhich);
779*b1cdbd2cSJim Jagielski 				break;
780*b1cdbd2cSJim Jagielski 			case SID_ATTR_ZOOM:
781*b1cdbd2cSJim Jagielski 				{
782*b1cdbd2cSJim Jagielski 					SvxZoomItem aZoom( eZoom, nZoom, nWhich );
783*b1cdbd2cSJim Jagielski 					aZoom.SetValueSet( SVX_ZOOM_ENABLE_ALL & ~SVX_ZOOM_ENABLE_OPTIMAL );
784*b1cdbd2cSJim Jagielski 					rSet.Put( aZoom );
785*b1cdbd2cSJim Jagielski 				}
786*b1cdbd2cSJim Jagielski 				break;
787*b1cdbd2cSJim Jagielski             case SID_ATTR_ZOOMSLIDER:
788*b1cdbd2cSJim Jagielski                 {
789*b1cdbd2cSJim Jagielski                     SvxZoomSliderItem aZoomSliderItem( nZoom, MINZOOM, MAXZOOM, SID_ATTR_ZOOMSLIDER );
790*b1cdbd2cSJim Jagielski                     aZoomSliderItem.AddSnappingPoint( 100 );
791*b1cdbd2cSJim Jagielski                     rSet.Put( aZoomSliderItem );
792*b1cdbd2cSJim Jagielski                 }
793*b1cdbd2cSJim Jagielski                 break;
794*b1cdbd2cSJim Jagielski             case SID_PREVIEW_SCALINGFACTOR:
795*b1cdbd2cSJim Jagielski                 {
796*b1cdbd2cSJim Jagielski                     if( pDocShell->IsReadOnly() )
797*b1cdbd2cSJim Jagielski                         rSet.DisableItem( nWhich );
798*b1cdbd2cSJim Jagielski                     else
799*b1cdbd2cSJim Jagielski                     {
800*b1cdbd2cSJim Jagielski                         String aOldName                 = pDocShell->GetDocument()->GetPageStyle( pPreview->GetTab() );
801*b1cdbd2cSJim Jagielski                         ScStyleSheetPool* pStylePool    = pDocShell->GetDocument()->GetStyleSheetPool();
802*b1cdbd2cSJim Jagielski                         SfxStyleSheetBase* pStyleSheet  = pStylePool->Find( aOldName, SFX_STYLE_FAMILY_PAGE );
803*b1cdbd2cSJim Jagielski                         DBG_ASSERT( pStyleSheet, "PageStyle not found! :-/" );
804*b1cdbd2cSJim Jagielski 
805*b1cdbd2cSJim Jagielski                         if ( pStyleSheet )
806*b1cdbd2cSJim Jagielski                         {
807*b1cdbd2cSJim Jagielski                             SfxItemSet& rStyleSet   = pStyleSheet->GetItemSet();
808*b1cdbd2cSJim Jagielski                             sal_uInt16 nCurrentZoom     = ((const SfxUInt16Item&)rStyleSet.Get(ATTR_PAGE_SCALE)).GetValue();
809*b1cdbd2cSJim Jagielski                             if( nCurrentZoom )
810*b1cdbd2cSJim Jagielski                             {
811*b1cdbd2cSJim Jagielski                                 SvxZoomSliderItem aZoomSliderItem( nCurrentZoom, MINZOOM_SLIDER, MAXZOOM_SLIDER, SID_PREVIEW_SCALINGFACTOR );
812*b1cdbd2cSJim Jagielski                                 aZoomSliderItem.AddSnappingPoint( 100 );
813*b1cdbd2cSJim Jagielski                                 rSet.Put( aZoomSliderItem );
814*b1cdbd2cSJim Jagielski                             }
815*b1cdbd2cSJim Jagielski                             else
816*b1cdbd2cSJim Jagielski                                 rSet.DisableItem( nWhich );
817*b1cdbd2cSJim Jagielski                         }
818*b1cdbd2cSJim Jagielski                     }
819*b1cdbd2cSJim Jagielski                 }
820*b1cdbd2cSJim Jagielski                 break;
821*b1cdbd2cSJim Jagielski 			case SID_STATUS_DOCPOS:
822*b1cdbd2cSJim Jagielski 				rSet.Put( SfxStringItem( nWhich, pPreview->GetPosString() ) );
823*b1cdbd2cSJim Jagielski 				break;
824*b1cdbd2cSJim Jagielski 			case SID_PRINTPREVIEW:
825*b1cdbd2cSJim Jagielski 				rSet.Put( SfxBoolItem( nWhich, sal_True ) );
826*b1cdbd2cSJim Jagielski 				break;
827*b1cdbd2cSJim Jagielski 			case SID_FORMATPAGE:
828*b1cdbd2cSJim Jagielski             case SID_PREVIEW_MARGIN:
829*b1cdbd2cSJim Jagielski                 if( pDocShell->IsReadOnly() )
830*b1cdbd2cSJim Jagielski 					rSet.DisableItem( nWhich );
831*b1cdbd2cSJim Jagielski 				break;
832*b1cdbd2cSJim Jagielski 		}
833*b1cdbd2cSJim Jagielski 
834*b1cdbd2cSJim Jagielski 		nWhich = aIter.NextWhich();
835*b1cdbd2cSJim Jagielski 	}
836*b1cdbd2cSJim Jagielski 
837*b1cdbd2cSJim Jagielski 	pPreview->SetInGetState(sal_False);
838*b1cdbd2cSJim Jagielski }
839*b1cdbd2cSJim Jagielski 
FillFieldData(ScHeaderFieldData & rData)840*b1cdbd2cSJim Jagielski void ScPreviewShell::FillFieldData( ScHeaderFieldData& rData )
841*b1cdbd2cSJim Jagielski {
842*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = pDocShell->GetDocument();
843*b1cdbd2cSJim Jagielski 	SCTAB nTab = pPreview->GetTab();
844*b1cdbd2cSJim Jagielski 	pDoc->GetName( nTab, rData.aTabName );
845*b1cdbd2cSJim Jagielski 
846*b1cdbd2cSJim Jagielski 	rData.aTitle		= pDocShell->GetTitle();
847*b1cdbd2cSJim Jagielski 	const INetURLObject& rURLObj = pDocShell->GetMedium()->GetURLObject();
848*b1cdbd2cSJim Jagielski 	rData.aLongDocName	= rURLObj.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS );
849*b1cdbd2cSJim Jagielski 	if ( rData.aLongDocName.Len() )
850*b1cdbd2cSJim Jagielski 		rData.aShortDocName = rURLObj.GetName( INetURLObject::DECODE_UNAMBIGUOUS );
851*b1cdbd2cSJim Jagielski 	else
852*b1cdbd2cSJim Jagielski 		rData.aShortDocName = rData.aLongDocName = rData.aTitle;
853*b1cdbd2cSJim Jagielski 	rData.nPageNo		= pPreview->GetPageNo() + 1;
854*b1cdbd2cSJim Jagielski 
855*b1cdbd2cSJim Jagielski 	sal_Bool bAllTested	= pPreview->AllTested();
856*b1cdbd2cSJim Jagielski 	if (bAllTested)
857*b1cdbd2cSJim Jagielski 		rData.nTotalPages = pPreview->GetTotalPages();
858*b1cdbd2cSJim Jagielski 	else
859*b1cdbd2cSJim Jagielski 		rData.nTotalPages = 99;
860*b1cdbd2cSJim Jagielski 
861*b1cdbd2cSJim Jagielski 	//	eNumType kennt der Dialog selber
862*b1cdbd2cSJim Jagielski }
863*b1cdbd2cSJim Jagielski 
WriteUserData(String & rData,sal_Bool)864*b1cdbd2cSJim Jagielski void __EXPORT ScPreviewShell::WriteUserData(String& rData, sal_Bool /* bBrowse */)
865*b1cdbd2cSJim Jagielski {
866*b1cdbd2cSJim Jagielski 	//	nZoom
867*b1cdbd2cSJim Jagielski 	//	nPageNo
868*b1cdbd2cSJim Jagielski 
869*b1cdbd2cSJim Jagielski 	rData =  String::CreateFromInt32(pPreview->GetZoom());
870*b1cdbd2cSJim Jagielski 	rData += (sal_Unicode) SC_USERDATA_SEP;
871*b1cdbd2cSJim Jagielski 	rData += String::CreateFromInt32(pPreview->GetPageNo());
872*b1cdbd2cSJim Jagielski }
873*b1cdbd2cSJim Jagielski 
ReadUserData(const String & rData,sal_Bool)874*b1cdbd2cSJim Jagielski void __EXPORT ScPreviewShell::ReadUserData(const String& rData, sal_Bool /* bBrowse */)
875*b1cdbd2cSJim Jagielski {
876*b1cdbd2cSJim Jagielski 	xub_StrLen nCount = rData.GetTokenCount();
877*b1cdbd2cSJim Jagielski 	if (nCount)
878*b1cdbd2cSJim Jagielski 	{
879*b1cdbd2cSJim Jagielski 		xub_StrLen nIndex = 0;
880*b1cdbd2cSJim Jagielski 		pPreview->SetZoom((sal_uInt16)rData.GetToken( 0, SC_USERDATA_SEP, nIndex ).ToInt32());
881*b1cdbd2cSJim Jagielski 		pPreview->SetPageNo(rData.GetToken( 0, SC_USERDATA_SEP, nIndex ).ToInt32());
882*b1cdbd2cSJim Jagielski 		eZoom = SVX_ZOOM_PERCENT;
883*b1cdbd2cSJim Jagielski 	}
884*b1cdbd2cSJim Jagielski }
885*b1cdbd2cSJim Jagielski 
WriteUserDataSequence(uno::Sequence<beans::PropertyValue> & rSeq,sal_Bool)886*b1cdbd2cSJim Jagielski void __EXPORT ScPreviewShell::WriteUserDataSequence(uno::Sequence < beans::PropertyValue >& rSeq, sal_Bool /* bBrowse */)
887*b1cdbd2cSJim Jagielski {
888*b1cdbd2cSJim Jagielski 	rSeq.realloc(3);
889*b1cdbd2cSJim Jagielski 	beans::PropertyValue* pSeq = rSeq.getArray();
890*b1cdbd2cSJim Jagielski 	if(pSeq)
891*b1cdbd2cSJim Jagielski 	{
892*b1cdbd2cSJim Jagielski 		sal_uInt16 nViewID(GetViewFrame()->GetCurViewId());
893*b1cdbd2cSJim Jagielski 		pSeq[0].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_VIEWID));
894*b1cdbd2cSJim Jagielski 		rtl::OUStringBuffer sBuffer(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_VIEW)));
895*b1cdbd2cSJim Jagielski 		SvXMLUnitConverter::convertNumber(sBuffer, static_cast<sal_Int32>(nViewID));
896*b1cdbd2cSJim Jagielski 		pSeq[0].Value <<= sBuffer.makeStringAndClear();
897*b1cdbd2cSJim Jagielski 		pSeq[1].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_ZOOMVALUE));
898*b1cdbd2cSJim Jagielski 		pSeq[1].Value <<= sal_Int32 (pPreview->GetZoom());
899*b1cdbd2cSJim Jagielski 		pSeq[2].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PageNumber"));
900*b1cdbd2cSJim Jagielski 		pSeq[2].Value <<= pPreview->GetPageNo();
901*b1cdbd2cSJim Jagielski 	}
902*b1cdbd2cSJim Jagielski }
903*b1cdbd2cSJim Jagielski 
ReadUserDataSequence(const uno::Sequence<beans::PropertyValue> & rSeq,sal_Bool)904*b1cdbd2cSJim Jagielski void __EXPORT ScPreviewShell::ReadUserDataSequence(const uno::Sequence < beans::PropertyValue >& rSeq, sal_Bool /* bBrowse */)
905*b1cdbd2cSJim Jagielski {
906*b1cdbd2cSJim Jagielski 	sal_Int32 nCount(rSeq.getLength());
907*b1cdbd2cSJim Jagielski 	if (nCount)
908*b1cdbd2cSJim Jagielski 	{
909*b1cdbd2cSJim Jagielski 		sal_Int32 nTemp = 0;
910*b1cdbd2cSJim Jagielski 		const beans::PropertyValue* pSeq = rSeq.getConstArray();
911*b1cdbd2cSJim Jagielski 		if(pSeq)
912*b1cdbd2cSJim Jagielski 		{
913*b1cdbd2cSJim Jagielski 			for(sal_Int32 i = 0; i < nCount; i++, pSeq++)
914*b1cdbd2cSJim Jagielski 			{
915*b1cdbd2cSJim Jagielski 				rtl::OUString sName(pSeq->Name);
916*b1cdbd2cSJim Jagielski 				if(sName.compareToAscii(SC_ZOOMVALUE) == 0)
917*b1cdbd2cSJim Jagielski 				{
918*b1cdbd2cSJim Jagielski 					if (pSeq->Value >>= nTemp)
919*b1cdbd2cSJim Jagielski 						pPreview->SetZoom(sal_uInt16(nTemp));
920*b1cdbd2cSJim Jagielski 				}
921*b1cdbd2cSJim Jagielski 				else if (sName.compareToAscii("PageNumber") == 0)
922*b1cdbd2cSJim Jagielski 				{
923*b1cdbd2cSJim Jagielski 					if (pSeq->Value >>= nTemp)
924*b1cdbd2cSJim Jagielski 						pPreview->SetPageNo(nTemp);
925*b1cdbd2cSJim Jagielski 				}
926*b1cdbd2cSJim Jagielski 			}
927*b1cdbd2cSJim Jagielski 		}
928*b1cdbd2cSJim Jagielski 	}
929*b1cdbd2cSJim Jagielski }
930*b1cdbd2cSJim Jagielski 
DoScroll(sal_uInt16 nMode)931*b1cdbd2cSJim Jagielski void ScPreviewShell::DoScroll( sal_uInt16 nMode )
932*b1cdbd2cSJim Jagielski {
933*b1cdbd2cSJim Jagielski 	Point	aCurPos, aPrevPos;
934*b1cdbd2cSJim Jagielski 
935*b1cdbd2cSJim Jagielski 	long nHRange	= pHorScroll->GetRange().Max();
936*b1cdbd2cSJim Jagielski 	long nHLine		= pHorScroll->GetLineSize();
937*b1cdbd2cSJim Jagielski 	long nHPage		= pHorScroll->GetPageSize();
938*b1cdbd2cSJim Jagielski 	long nVRange	= pVerScroll->GetRange().Max();
939*b1cdbd2cSJim Jagielski 	long nVLine		= pVerScroll->GetLineSize();
940*b1cdbd2cSJim Jagielski 	long nVPage		= pVerScroll->GetPageSize();
941*b1cdbd2cSJim Jagielski 
942*b1cdbd2cSJim Jagielski 	aCurPos.X() = pHorScroll->GetThumbPos();
943*b1cdbd2cSJim Jagielski 	aCurPos.Y() = pVerScroll->GetThumbPos();
944*b1cdbd2cSJim Jagielski 	aPrevPos = aCurPos;
945*b1cdbd2cSJim Jagielski 
946*b1cdbd2cSJim Jagielski 	long nThumbPos	= pVerScroll->GetThumbPos();
947*b1cdbd2cSJim Jagielski 	long nRangeMax	= pVerScroll->GetRangeMax();
948*b1cdbd2cSJim Jagielski 
949*b1cdbd2cSJim Jagielski 	switch( nMode )
950*b1cdbd2cSJim Jagielski 	{
951*b1cdbd2cSJim Jagielski         case SID_CURSORUP:
952*b1cdbd2cSJim Jagielski             if( nMaxVertPos<0 )
953*b1cdbd2cSJim Jagielski             {
954*b1cdbd2cSJim Jagielski                 long nPage = pPreview->GetPageNo();
955*b1cdbd2cSJim Jagielski 
956*b1cdbd2cSJim Jagielski                 if( nPage>0 )
957*b1cdbd2cSJim Jagielski                 {
958*b1cdbd2cSJim Jagielski                     SfxViewFrame* pSfxViewFrame = GetViewFrame();
959*b1cdbd2cSJim Jagielski                     SfxRequest aSfxRequest( pSfxViewFrame, SID_PREVIEW_PREVIOUS );
960*b1cdbd2cSJim Jagielski                     Execute( aSfxRequest );
961*b1cdbd2cSJim Jagielski                 }
962*b1cdbd2cSJim Jagielski             }
963*b1cdbd2cSJim Jagielski             else
964*b1cdbd2cSJim Jagielski                 aCurPos.Y() -= nVLine;
965*b1cdbd2cSJim Jagielski             break;
966*b1cdbd2cSJim Jagielski         case SID_CURSORDOWN:
967*b1cdbd2cSJim Jagielski             if( nMaxVertPos<0 )
968*b1cdbd2cSJim Jagielski             {
969*b1cdbd2cSJim Jagielski                 long nPage = pPreview->GetPageNo();
970*b1cdbd2cSJim Jagielski                 long nTotal = pPreview->GetTotalPages();
971*b1cdbd2cSJim Jagielski 
972*b1cdbd2cSJim Jagielski                 // before testing for last page, make sure all page counts are calculated
973*b1cdbd2cSJim Jagielski                 if ( nPage+1 == nTotal && !pPreview->AllTested() )
974*b1cdbd2cSJim Jagielski                 {
975*b1cdbd2cSJim Jagielski                     pPreview->CalcAll();
976*b1cdbd2cSJim Jagielski                     nTotal = pPreview->GetTotalPages();
977*b1cdbd2cSJim Jagielski                 }
978*b1cdbd2cSJim Jagielski 
979*b1cdbd2cSJim Jagielski                 if( nPage<nTotal-1 )
980*b1cdbd2cSJim Jagielski                 {
981*b1cdbd2cSJim Jagielski                     SfxViewFrame* pSfxViewFrame = GetViewFrame();
982*b1cdbd2cSJim Jagielski                     SfxRequest aSfxRequest( pSfxViewFrame, SID_PREVIEW_NEXT );
983*b1cdbd2cSJim Jagielski                     Execute( aSfxRequest );
984*b1cdbd2cSJim Jagielski                 }
985*b1cdbd2cSJim Jagielski             }
986*b1cdbd2cSJim Jagielski             else
987*b1cdbd2cSJim Jagielski                 aCurPos.Y() += nVLine;
988*b1cdbd2cSJim Jagielski             break;
989*b1cdbd2cSJim Jagielski         case SID_CURSORLEFT:
990*b1cdbd2cSJim Jagielski             aCurPos.X() -= nHLine;
991*b1cdbd2cSJim Jagielski             break;
992*b1cdbd2cSJim Jagielski         case SID_CURSORRIGHT:
993*b1cdbd2cSJim Jagielski             aCurPos.X() += nHLine;
994*b1cdbd2cSJim Jagielski             break;
995*b1cdbd2cSJim Jagielski         case SID_CURSORPAGEUP:
996*b1cdbd2cSJim Jagielski             if( nThumbPos==0 || nMaxVertPos<0 )
997*b1cdbd2cSJim Jagielski             {
998*b1cdbd2cSJim Jagielski                 long nPage = pPreview->GetPageNo();
999*b1cdbd2cSJim Jagielski 
1000*b1cdbd2cSJim Jagielski                 if( nPage>0 )
1001*b1cdbd2cSJim Jagielski                 {
1002*b1cdbd2cSJim Jagielski                     SfxViewFrame* pSfxViewFrame = GetViewFrame();
1003*b1cdbd2cSJim Jagielski                     SfxRequest aSfxRequest( pSfxViewFrame, SID_PREVIEW_PREVIOUS );
1004*b1cdbd2cSJim Jagielski                     Execute( aSfxRequest );
1005*b1cdbd2cSJim Jagielski                     aCurPos.Y() = nVRange;
1006*b1cdbd2cSJim Jagielski                 }
1007*b1cdbd2cSJim Jagielski             }
1008*b1cdbd2cSJim Jagielski             else
1009*b1cdbd2cSJim Jagielski                 aCurPos.Y() -= nVPage;
1010*b1cdbd2cSJim Jagielski             break;
1011*b1cdbd2cSJim Jagielski         case SID_CURSORPAGEDOWN:
1012*b1cdbd2cSJim Jagielski             if( (abs(nVPage+nThumbPos-nRangeMax)<10) || nMaxVertPos<0 )
1013*b1cdbd2cSJim Jagielski             {
1014*b1cdbd2cSJim Jagielski                 long nPage = pPreview->GetPageNo();
1015*b1cdbd2cSJim Jagielski                 long nTotal = pPreview->GetTotalPages();
1016*b1cdbd2cSJim Jagielski 
1017*b1cdbd2cSJim Jagielski                 // before testing for last page, make sure all page counts are calculated
1018*b1cdbd2cSJim Jagielski                 if ( nPage+1 == nTotal && !pPreview->AllTested() )
1019*b1cdbd2cSJim Jagielski                 {
1020*b1cdbd2cSJim Jagielski                     pPreview->CalcAll();
1021*b1cdbd2cSJim Jagielski                     nTotal = pPreview->GetTotalPages();
1022*b1cdbd2cSJim Jagielski                 }
1023*b1cdbd2cSJim Jagielski                 if( nPage<nTotal-1 )
1024*b1cdbd2cSJim Jagielski                 {
1025*b1cdbd2cSJim Jagielski                     SfxViewFrame* pSfxViewFrame = GetViewFrame();
1026*b1cdbd2cSJim Jagielski                     SfxRequest aSfxRequest( pSfxViewFrame, SID_PREVIEW_NEXT );
1027*b1cdbd2cSJim Jagielski                     Execute( aSfxRequest );
1028*b1cdbd2cSJim Jagielski                     aCurPos.Y() = 0;
1029*b1cdbd2cSJim Jagielski                 }
1030*b1cdbd2cSJim Jagielski             }
1031*b1cdbd2cSJim Jagielski             else
1032*b1cdbd2cSJim Jagielski                 aCurPos.Y() += nVPage;
1033*b1cdbd2cSJim Jagielski             break;
1034*b1cdbd2cSJim Jagielski         case SID_CURSORHOME:
1035*b1cdbd2cSJim Jagielski             if( nMaxVertPos<0 )
1036*b1cdbd2cSJim Jagielski             {
1037*b1cdbd2cSJim Jagielski                 long nPage  = pPreview->GetPageNo();
1038*b1cdbd2cSJim Jagielski                 long nTotal = pPreview->GetTotalPages();
1039*b1cdbd2cSJim Jagielski                 if( nTotal && nPage != 0 )
1040*b1cdbd2cSJim Jagielski                 {
1041*b1cdbd2cSJim Jagielski                     SfxViewFrame* pSfxViewFrame = GetViewFrame();
1042*b1cdbd2cSJim Jagielski                     SfxRequest aSfxRequest( pSfxViewFrame, SID_PREVIEW_FIRST );
1043*b1cdbd2cSJim Jagielski                     Execute( aSfxRequest );
1044*b1cdbd2cSJim Jagielski                 }
1045*b1cdbd2cSJim Jagielski             }
1046*b1cdbd2cSJim Jagielski             else
1047*b1cdbd2cSJim Jagielski             {
1048*b1cdbd2cSJim Jagielski                 aCurPos.Y() = 0;
1049*b1cdbd2cSJim Jagielski                 aCurPos.X() = 0;
1050*b1cdbd2cSJim Jagielski             }
1051*b1cdbd2cSJim Jagielski             break;
1052*b1cdbd2cSJim Jagielski         case SID_CURSOREND:
1053*b1cdbd2cSJim Jagielski             if( nMaxVertPos<0 )
1054*b1cdbd2cSJim Jagielski             {
1055*b1cdbd2cSJim Jagielski                 if( !pPreview->AllTested() )
1056*b1cdbd2cSJim Jagielski                     pPreview->CalcAll();
1057*b1cdbd2cSJim Jagielski                 long nPage  = pPreview->GetPageNo();
1058*b1cdbd2cSJim Jagielski                 long nTotal = pPreview->GetTotalPages();
1059*b1cdbd2cSJim Jagielski                 if( nTotal && nPage+1 != nTotal )
1060*b1cdbd2cSJim Jagielski                 {
1061*b1cdbd2cSJim Jagielski                     SfxViewFrame* pSfxViewFrame = GetViewFrame();
1062*b1cdbd2cSJim Jagielski                     SfxRequest aSfxRequest( pSfxViewFrame, SID_PREVIEW_LAST );
1063*b1cdbd2cSJim Jagielski                     Execute( aSfxRequest );
1064*b1cdbd2cSJim Jagielski                 }
1065*b1cdbd2cSJim Jagielski             }
1066*b1cdbd2cSJim Jagielski             else
1067*b1cdbd2cSJim Jagielski             {
1068*b1cdbd2cSJim Jagielski                 aCurPos.Y() = nVRange;
1069*b1cdbd2cSJim Jagielski                 aCurPos.X() = nHRange;
1070*b1cdbd2cSJim Jagielski             }
1071*b1cdbd2cSJim Jagielski             break;
1072*b1cdbd2cSJim Jagielski 	}
1073*b1cdbd2cSJim Jagielski 
1074*b1cdbd2cSJim Jagielski 		// nHRange-nHPage kann negativ sein, deshalb Abfrage auf < 0 hinterher
1075*b1cdbd2cSJim Jagielski 
1076*b1cdbd2cSJim Jagielski     if( aCurPos.Y() > (nVRange-nVPage) )
1077*b1cdbd2cSJim Jagielski         aCurPos.Y() = (nVRange-nVPage);
1078*b1cdbd2cSJim Jagielski     if( aCurPos.Y() < 0 )
1079*b1cdbd2cSJim Jagielski         aCurPos.Y() = 0;
1080*b1cdbd2cSJim Jagielski     if( aCurPos.X() > (nHRange-nHPage) )
1081*b1cdbd2cSJim Jagielski         aCurPos.X() = (nHRange-nHPage);
1082*b1cdbd2cSJim Jagielski     if( aCurPos.X() < 0 )
1083*b1cdbd2cSJim Jagielski         aCurPos.X() = 0;
1084*b1cdbd2cSJim Jagielski 
1085*b1cdbd2cSJim Jagielski     if( nMaxVertPos>=0 )
1086*b1cdbd2cSJim Jagielski     {
1087*b1cdbd2cSJim Jagielski 	    if( aCurPos.Y() != aPrevPos.Y() )
1088*b1cdbd2cSJim Jagielski 	    {
1089*b1cdbd2cSJim Jagielski 	    	pVerScroll->SetThumbPos( aCurPos.Y() );
1090*b1cdbd2cSJim Jagielski 	        pPreview->SetYOffset( aCurPos.Y() );
1091*b1cdbd2cSJim Jagielski 	    }
1092*b1cdbd2cSJim Jagielski     }
1093*b1cdbd2cSJim Jagielski 
1094*b1cdbd2cSJim Jagielski 	if( aCurPos.X() != aPrevPos.X() )
1095*b1cdbd2cSJim Jagielski 	{
1096*b1cdbd2cSJim Jagielski 		pHorScroll->SetThumbPos( aCurPos.X() );
1097*b1cdbd2cSJim Jagielski 		pPreview->SetXOffset( aCurPos.X() );
1098*b1cdbd2cSJim Jagielski 	}
1099*b1cdbd2cSJim Jagielski 
1100*b1cdbd2cSJim Jagielski }
1101*b1cdbd2cSJim Jagielski 
AddAccessibilityObject(SfxListener & rObject)1102*b1cdbd2cSJim Jagielski void ScPreviewShell::AddAccessibilityObject( SfxListener& rObject )
1103*b1cdbd2cSJim Jagielski {
1104*b1cdbd2cSJim Jagielski 	if (!pAccessibilityBroadcaster)
1105*b1cdbd2cSJim Jagielski 		pAccessibilityBroadcaster = new SfxBroadcaster;
1106*b1cdbd2cSJim Jagielski 
1107*b1cdbd2cSJim Jagielski 	rObject.StartListening( *pAccessibilityBroadcaster );
1108*b1cdbd2cSJim Jagielski }
1109*b1cdbd2cSJim Jagielski 
RemoveAccessibilityObject(SfxListener & rObject)1110*b1cdbd2cSJim Jagielski void ScPreviewShell::RemoveAccessibilityObject( SfxListener& rObject )
1111*b1cdbd2cSJim Jagielski {
1112*b1cdbd2cSJim Jagielski 	if (pAccessibilityBroadcaster)
1113*b1cdbd2cSJim Jagielski 		rObject.EndListening( *pAccessibilityBroadcaster );
1114*b1cdbd2cSJim Jagielski 	else
1115*b1cdbd2cSJim Jagielski 	{
1116*b1cdbd2cSJim Jagielski 		DBG_ERROR("kein Accessibility-Broadcaster?");
1117*b1cdbd2cSJim Jagielski 	}
1118*b1cdbd2cSJim Jagielski }
1119*b1cdbd2cSJim Jagielski 
BroadcastAccessibility(const SfxHint & rHint)1120*b1cdbd2cSJim Jagielski void ScPreviewShell::BroadcastAccessibility( const SfxHint &rHint )
1121*b1cdbd2cSJim Jagielski {
1122*b1cdbd2cSJim Jagielski 	if (pAccessibilityBroadcaster)
1123*b1cdbd2cSJim Jagielski 		pAccessibilityBroadcaster->Broadcast( rHint );
1124*b1cdbd2cSJim Jagielski }
1125*b1cdbd2cSJim Jagielski 
HasAccessibilityObjects()1126*b1cdbd2cSJim Jagielski sal_Bool ScPreviewShell::HasAccessibilityObjects()
1127*b1cdbd2cSJim Jagielski {
1128*b1cdbd2cSJim Jagielski 	return pAccessibilityBroadcaster && pAccessibilityBroadcaster->HasListeners();
1129*b1cdbd2cSJim Jagielski }
1130*b1cdbd2cSJim Jagielski 
GetLocationData()1131*b1cdbd2cSJim Jagielski const ScPreviewLocationData& ScPreviewShell::GetLocationData()
1132*b1cdbd2cSJim Jagielski {
1133*b1cdbd2cSJim Jagielski 	return pPreview->GetLocationData();
1134*b1cdbd2cSJim Jagielski }
1135*b1cdbd2cSJim Jagielski 
GetDocument()1136*b1cdbd2cSJim Jagielski ScDocument* ScPreviewShell::GetDocument()
1137*b1cdbd2cSJim Jagielski {
1138*b1cdbd2cSJim Jagielski 	return pDocShell->GetDocument();
1139*b1cdbd2cSJim Jagielski }
1140*b1cdbd2cSJim Jagielski 
1141*b1cdbd2cSJim Jagielski 
1142