LCOV - code coverage report
Current view: top level - sc/source/ui/view - prevwsh.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 301 637 47.3 %
Date: 2014-11-03 Functions: 35 52 67.3 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10