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

Generated by: LCOV version 1.10