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