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

Generated by: LCOV version 1.10