diff options
Diffstat (limited to 'sc/source/ui/view/preview.cxx')
-rw-r--r-- | sc/source/ui/view/preview.cxx | 1623 |
1 files changed, 0 insertions, 1623 deletions
diff --git a/sc/source/ui/view/preview.cxx b/sc/source/ui/view/preview.cxx deleted file mode 100644 index 32a331449..000000000 --- a/sc/source/ui/view/preview.cxx +++ /dev/null @@ -1,1623 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sc.hxx" - - - -// INCLUDE --------------------------------------------------------------- -#include "scitems.hxx" -#include <editeng/eeitem.hxx> - - -#include <svtools/colorcfg.hxx> -#include <svx/fmview.hxx> -#include <editeng/sizeitem.hxx> -#include <svx/svdpagv.hxx> -#include <sfx2/bindings.hxx> -#include <sfx2/viewfrm.hxx> -#include <sfx2/dispatch.hxx> -#include <svtools/accessibilityoptions.hxx> -#include <svl/itemset.hxx> -#include <tools/multisel.hxx> -#include <vcl/waitobj.hxx> -#include <vcl/sound.hxx> - -#include "preview.hxx" -#include "prevwsh.hxx" -#include "prevloc.hxx" -#include "docsh.hxx" -#include "docfunc.hxx" -#include "printfun.hxx" -#include "printopt.hxx" -#include "stlpool.hxx" -#include "undostyl.hxx" -#include "drwlayer.hxx" -#include "scmod.hxx" -#include "globstr.hrc" -#include "sc.hrc" // fuer ShellInvalidate -#include "AccessibleDocumentPagePreview.hxx" -#include <vcl/lineinfo.hxx> -#include <svx/algitem.hxx> -#include <editeng/lrspitem.hxx> -#include <editeng/ulspitem.hxx> -#include <editeng/sizeitem.hxx> -#include "attrib.hxx" -#include "pagepar.hxx" -#include <com/sun/star/accessibility/XAccessible.hpp> -#include "AccessibilityHints.hxx" -#include <vcl/svapp.hxx> -#include "viewutil.hxx" - -// STATIC DATA ----------------------------------------------------------- - -//================================================================== - -#define SC_PREVIEW_SHADOWSIZE 2 - -long lcl_GetDisplayStart( SCTAB nTab, ScDocument* pDoc, std::vector<long>& nPages ) -{ - long nDisplayStart = 0; - for (SCTAB i=0; i<nTab; i++) - { - if ( pDoc->NeedPageResetAfterTab(i) ) - nDisplayStart = 0; - else - nDisplayStart += nPages[i]; - } - return nDisplayStart; -} - - -ScPreview::ScPreview( Window* pParent, ScDocShell* pDocSh, ScPreviewShell* pViewSh ) : - Window( pParent ), - nPageNo( 0 ), - nZoom( 100 ), - bValid( false ), - nTabsTested( 0 ), - nPages(), - nFirstAttr(), - nTab( 0 ), - nTabStart( 0 ), - nDisplayStart( 0 ), - nTotalPages( 0 ), - bStateValid( false ), - bLocationValid( false ), - pLocationData( NULL ), - pDrawView( NULL ), - nCurTab ( ScDocShell::GetCurTab() ), - bInPaint( false ), - bInGetState( false ), - pDocShell( pDocSh ), - pViewShell( pViewSh ), - bLeftRulerMove( false ), - bRightRulerMove( false ), - bTopRulerMove( false ), - bBottomRulerMove( false ), - bHeaderRulerMove( false ), - bFooterRulerMove( false ), - bLeftRulerChange( false ), - bRightRulerChange( false ), - bTopRulerChange( false ), - bBottomRulerChange( false ), - bHeaderRulerChange( false ), - bFooterRulerChange( false ), - bPageMargin ( false ), - bColRulerMove( false ), - mnScale( 0 ), - nColNumberButttonDown( 0 ), - nHeaderHeight ( 0 ), - nFooterHeight ( 0 ) -{ - SetOutDevViewType( OUTDEV_VIEWTYPE_PRINTPREVIEW ); //#106611# - SetBackground(); - - SetHelpId( HID_SC_WIN_PREVIEW ); - SetUniqueId( HID_SC_WIN_PREVIEW ); - - SetDigitLanguage( SC_MOD()->GetOptDigitLanguage() ); -} - - -ScPreview::~ScPreview() -{ - delete pDrawView; - delete pLocationData; -} - -void ScPreview::UpdateDrawView() // nTab muss richtig sein -{ - ScDocument* pDoc = pDocShell->GetDocument(); - ScDrawLayer* pModel = pDoc->GetDrawLayer(); // ist nicht 0 - - // #114135# - if ( pModel ) - { - SdrPage* pPage = pModel->GetPage(nTab); - if ( pDrawView && ( !pDrawView->GetSdrPageView() || pDrawView->GetSdrPageView()->GetPage() != pPage ) ) - { - // die angezeigte Page der DrawView umzustellen (s.u.) funktioniert nicht ?!? - delete pDrawView; - pDrawView = NULL; - } - - if ( !pDrawView ) // neu anlegen? - { - pDrawView = new FmFormView( pModel, this ); - // die DrawView uebernimmt den Design-Modus vom Model - // (Einstellung "Im Entwurfsmodus oeffnen"), darum hier zuruecksetzen - pDrawView->SetDesignMode( sal_True ); - pDrawView->SetPrintPreview( sal_True ); - pDrawView->ShowSdrPage(pPage); - } - } - else if ( pDrawView ) - { - delete pDrawView; // fuer diese Tabelle nicht gebraucht - pDrawView = NULL; - } -} - - -void ScPreview::TestLastPage() -{ - if (nPageNo >= nTotalPages) - { - if (nTotalPages) - { - nPageNo = nTotalPages - 1; - nTab = static_cast<SCTAB>(nPages.size()) -1; - while (nTab > 0 && !nPages[nTab]) // letzte nicht leere Tabelle - --nTab; - OSL_ENSURE(0 < static_cast<SCTAB>(nPages.size()),"alle Tabellen leer?"); - nTabPage = nPages[nTab] - 1; - nTabStart = 0; - for (sal_uInt16 i=0; i<nTab; i++) - nTabStart += nPages[i]; - - ScDocument* pDoc = pDocShell->GetDocument(); - nDisplayStart = lcl_GetDisplayStart( nTab, pDoc, nPages ); - } - else // leeres Dokument - { - nTab = 0; - nPageNo = nTabPage = nTabStart = nDisplayStart = 0; - aState.nPrintTab = 0; - aState.nStartCol = aState.nEndCol = 0; - aState.nStartRow = aState.nEndRow = 0; - aState.nZoom = 0; - aState.nPagesX = aState.nPagesY = 0; - aState.nTabPages = aState.nTotalPages = - aState.nPageStart = aState.nDocPages = 0; - } - } -} - - -void ScPreview::CalcPages( SCTAB /*nToWhichTab*/ ) -{ - WaitObject( this ); - - ScDocument* pDoc = pDocShell->GetDocument(); - nTabCount = pDoc->GetTableCount(); - - SCTAB nAnz = nTabCount; - SCTAB nStart = nTabsTested; - if (!bValid) - { - nStart = 0; - nTotalPages = 0; - nTabsTested = 0; - } - - // update all pending row heights with a single progress bar, - // instead of a separate progress for each sheet from ScPrintFunc - pDocShell->UpdatePendingRowHeights( nAnz-1, true ); - - // PrintOptions is passed to PrintFunc for SkipEmpty flag, - // but always all sheets are used (there is no selected sheet) - ScPrintOptions aOptions = SC_MOD()->GetPrintOptions(); - - ScMarkData aMarkData; - aMarkData.SelectTable( nCurTab, true ); - - while (nStart > static_cast<SCTAB>(nPages.size())) - nPages.push_back(0); - while (nStart > static_cast<SCTAB>(nFirstAttr.size())) - nFirstAttr.push_back(0); - for (SCTAB i=nStart; i<nAnz; i++) - { - if ( i == static_cast<SCTAB>(nPages.size())) - nPages.push_back(0); - if ( i == static_cast<SCTAB>(nFirstAttr.size())) - nFirstAttr.push_back(0); - if (!aOptions.GetAllSheets() && !aMarkData.GetTableSelect( i )) { - nPages[i] = 0; - nFirstAttr[i] = 0; - continue; - } - - long nAttrPage = i > 0 ? nFirstAttr[i-1] : 1; - - long nThisStart = nTotalPages; - ScPrintFunc aPrintFunc( this, pDocShell, i, nAttrPage, 0, NULL, &aOptions ); - long nThisTab = aPrintFunc.GetTotalPages(); - nPages[i] = nThisTab; - nTotalPages += nThisTab; - nFirstAttr[i] = aPrintFunc.GetFirstPageNo(); // behalten oder aus Vorlage - - if (nPageNo>=nThisStart && nPageNo<nTotalPages) - { - nTab = i; - nTabPage = nPageNo - nThisStart; - nTabStart = nThisStart; - - aPrintFunc.GetPrintState( aState ); - aPageSize = aPrintFunc.GetPageSize(); - } - } - - nDisplayStart = lcl_GetDisplayStart( nTab, pDoc, nPages ); - - if (nAnz > nTabsTested) - nTabsTested = nAnz; - - // testen, ob hinter letzter Seite - - if ( nTabsTested >= nTabCount ) - TestLastPage(); - - aState.nDocPages = nTotalPages; - - bValid = sal_True; - bStateValid = sal_True; - DoInvalidate(); -} - - -void ScPreview::RecalcPages() // nur nPageNo geaendert -{ - if (!bValid) - return; // dann wird CalcPages aufgerufen - - SCTAB nOldTab = nTab; - - sal_Bool bDone = false; - while (nPageNo >= nTotalPages && nTabsTested < nTabCount) - { - CalcPages( nTabsTested ); - bDone = sal_True; - } - - if (!bDone) - { - long nPartPages = 0; - for (SCTAB i=0; i<nTabsTested && nTab < static_cast<SCTAB>(nPages.size()); i++) - { - long nThisStart = nPartPages; - nPartPages += nPages[i]; - - if (nPageNo>=nThisStart && nPageNo<nPartPages) - { - nTab = i; - nTabPage = nPageNo - nThisStart; - nTabStart = nThisStart; - } - } - - ScDocument* pDoc = pDocShell->GetDocument(); - nDisplayStart = lcl_GetDisplayStart( nTab, pDoc, nPages ); - } - - TestLastPage(); // testen, ob hinter letzter Seite - - if ( nTab != nOldTab ) - bStateValid = false; - - DoInvalidate(); -} - - -void ScPreview::DoPrint( ScPreviewLocationData* pFillLocation ) -{ - if (!bValid) - { - CalcPages(0); - RecalcPages(); - UpdateDrawView(); // Tabelle evtl. geaendert - } - - Fraction aPreviewZoom( nZoom, 100 ); - Fraction aHorPrevZoom( (long)( 100 * nZoom / pDocShell->GetOutputFactor() ), 10000 ); - MapMode aMMMode( MAP_100TH_MM, Point(), aHorPrevZoom, aPreviewZoom ); - - sal_Bool bDoPrint = ( pFillLocation == NULL ); - sal_Bool bValidPage = ( nPageNo < nTotalPages ); - - ScModule* pScMod = SC_MOD(); - const svtools::ColorConfig& rColorCfg = pScMod->GetColorConfig(); - Color aBackColor( rColorCfg.GetColorValue(svtools::APPBACKGROUND).nColor ); - - if ( bDoPrint && ( aOffset.X() < 0 || aOffset.Y() < 0 ) && bValidPage ) - { - SetMapMode( aMMMode ); - SetLineColor(); - SetFillColor(aBackColor); - - Size aWinSize = GetOutputSize(); - if ( aOffset.X() < 0 ) - DrawRect(Rectangle( 0, 0, -aOffset.X(), aWinSize.Height() )); - if ( aOffset.Y() < 0 ) - DrawRect(Rectangle( 0, 0, aWinSize.Width(), -aOffset.Y() )); - } - - Size aLocalPageSize; - if ( bValidPage ) - { - ScPrintOptions aOptions = pScMod->GetPrintOptions(); - - ScPrintFunc* pPrintFunc; - if (bStateValid) - pPrintFunc = new ScPrintFunc( this, pDocShell, aState, &aOptions ); - else - pPrintFunc = new ScPrintFunc( this, pDocShell, nTab, nFirstAttr[nTab], nTotalPages, NULL, &aOptions ); - - pPrintFunc->SetOffset(aOffset); - pPrintFunc->SetManualZoom(nZoom); - pPrintFunc->SetDateTime(aDate,aTime); - pPrintFunc->SetClearFlag(sal_True); - pPrintFunc->SetUseStyleColor( pScMod->GetAccessOptions().GetIsForPagePreviews() ); - - pPrintFunc->SetDrawView( pDrawView ); - - // MultiSelection fuer die eine Seite muss etwas umstaendlich erzeugt werden... - Range aPageRange( nPageNo+1, nPageNo+1 ); - MultiSelection aPage( aPageRange ); - aPage.SetTotalRange( Range(0,RANGE_MAX) ); - aPage.Select( aPageRange ); - - long nPrinted = pPrintFunc->DoPrint( aPage, nTabStart, nDisplayStart, bDoPrint, NULL, pFillLocation ); - OSL_ENSURE(nPrinted<=1, "was'n nu los?"); - - SetMapMode(aMMMode); - - if (nPrinted) // wenn nichts, alles grau zeichnen - { - aLocalPageSize = pPrintFunc->GetPageSize(); - aLocalPageSize.Width() = (long) (aLocalPageSize.Width() * HMM_PER_TWIPS ); - aLocalPageSize.Height() = (long) (aLocalPageSize.Height() * HMM_PER_TWIPS ); - } - - if (!bStateValid) - { - pPrintFunc->GetPrintState( aState ); - aState.nDocPages = nTotalPages; - bStateValid = sal_True; - } - delete pPrintFunc; - } - - if ( bDoPrint ) - { - long nPageEndX = aLocalPageSize.Width() - aOffset.X(); - long nPageEndY = aLocalPageSize.Height() - aOffset.Y(); - if ( !bValidPage ) - nPageEndX = nPageEndY = 0; - - Size aWinSize = GetOutputSize(); - Point aWinEnd( aWinSize.Width(), aWinSize.Height() ); - sal_Bool bRight = nPageEndX <= aWinEnd.X(); - sal_Bool bBottom = nPageEndY <= aWinEnd.Y(); - if (bRight || bBottom) - { - SetLineColor(); - SetFillColor(aBackColor); - if (bRight) - DrawRect(Rectangle(nPageEndX,0, aWinEnd.X(),aWinEnd.Y())); - if (bBottom) - { - if (bRight) - DrawRect(Rectangle(0,nPageEndY, nPageEndX,aWinEnd.Y())); // Ecke nicht doppelt - else - DrawRect(Rectangle(0,nPageEndY, aWinEnd.X(),aWinEnd.Y())); - } - } - - if ( bValidPage ) - { - Color aBorderColor( SC_MOD()->GetColorConfig().GetColorValue(svtools::FONTCOLOR).nColor ); - - // draw border - - if ( aOffset.X() <= 0 || aOffset.Y() <= 0 || bRight || bBottom ) - { - SetLineColor( aBorderColor ); - SetFillColor(); - - Rectangle aPixel( LogicToPixel( Rectangle( -aOffset.X(), -aOffset.Y(), nPageEndX, nPageEndY ) ) ); - --aPixel.Right(); - --aPixel.Bottom(); - DrawRect( PixelToLogic( aPixel ) ); - } - - // draw shadow - - SetLineColor(); - SetFillColor( aBorderColor ); - - Rectangle aPixel; - - aPixel = LogicToPixel( Rectangle( nPageEndX, -aOffset.Y(), nPageEndX, nPageEndY ) ); - aPixel.Top() += SC_PREVIEW_SHADOWSIZE; - aPixel.Right() += SC_PREVIEW_SHADOWSIZE - 1; - aPixel.Bottom() += SC_PREVIEW_SHADOWSIZE - 1; - DrawRect( PixelToLogic( aPixel ) ); - - aPixel = LogicToPixel( Rectangle( -aOffset.X(), nPageEndY, nPageEndX, nPageEndY ) ); - aPixel.Left() += SC_PREVIEW_SHADOWSIZE; - aPixel.Right() += SC_PREVIEW_SHADOWSIZE - 1; - aPixel.Bottom() += SC_PREVIEW_SHADOWSIZE - 1; - DrawRect( PixelToLogic( aPixel ) ); - } - } -} - -//Issue51656 Add resizeable margin on page preview from maoyg -void ScPreview::Paint( const Rectangle& /* rRect */ ) -{ - if (!bValid) - { - CalcPages(0); - RecalcPages(); - UpdateDrawView(); // Table possibly amended - } - - Fraction aPreviewZoom( nZoom, 100 ); - Fraction aHorPrevZoom( (long)( 100 * nZoom / pDocShell->GetOutputFactor() ), 10000 ); - MapMode aMMMode( MAP_100TH_MM, Point(), aHorPrevZoom, aPreviewZoom ); - - ScModule* pScMod = SC_MOD(); - const svtools::ColorConfig& rColorCfg = pScMod->GetColorConfig(); - Color aBackColor( rColorCfg.GetColorValue(svtools::APPBACKGROUND).nColor ); - - if ( aOffset.X() < 0 || aOffset.Y() < 0 ) - { - SetMapMode( aMMMode ); - SetLineColor(); - SetFillColor(aBackColor); - - Size aWinSize = GetOutputSize(); - if ( aOffset.X() < 0 ) - DrawRect(Rectangle( 0, 0, -aOffset.X(), aWinSize.Height() )); - if ( aOffset.Y() < 0 ) - DrawRect(Rectangle( 0, 0, aWinSize.Width(), -aOffset.Y() )); - } - - long nLeftMargin = 0; - long nRightMargin = 0; - long nTopMargin = 0; - long nBottomMargin = 0; - sal_Bool bHeaderOn = false; - sal_Bool bFooterOn = false; - - ScDocument* pDoc = pDocShell->GetDocument(); - sal_Bool bLayoutRTL = pDoc->IsLayoutRTL( nTab ); - - Size aPaintPageSize; - if ( nPageNo < nTotalPages ) - { - ScPrintOptions aOptions = SC_MOD()->GetPrintOptions(); - - ScPrintFunc* pPrintFunc; - if ( bStateValid ) - pPrintFunc = new ScPrintFunc( pDocShell, this, aState, &aOptions ); - else - pPrintFunc = new ScPrintFunc( pDocShell, this, nTab, nFirstAttr[nTab], nTotalPages, NULL, &aOptions ); - - pPrintFunc->SetOffset(aOffset); - pPrintFunc->SetManualZoom(nZoom); - pPrintFunc->SetDateTime(aDate,aTime); - pPrintFunc->SetClearFlag(sal_True); - pPrintFunc->SetUseStyleColor( pScMod->GetAccessOptions().GetIsForPagePreviews() ); - pPrintFunc->SetDrawView( pDrawView ); - - // Multi Selection for one side must be something umstaendlich generated ... - Range aPageRange( nPageNo+1, nPageNo+1 ); - MultiSelection aPage( aPageRange ); - aPage.SetTotalRange( Range(0,RANGE_MAX) ); - aPage.Select( aPageRange ); - - long nPrinted = pPrintFunc->DoPrint( aPage, nTabStart, nDisplayStart ); - OSL_ENSURE(nPrinted<=1, "was'n nu los?"); - - SetMapMode(aMMMode); - - //init nLeftMargin ... in the ScPrintFunc::InitParam!!! - nLeftMargin = pPrintFunc->GetLeftMargin(); - nRightMargin = pPrintFunc->GetRightMargin(); - nTopMargin = pPrintFunc->GetTopMargin(); - nBottomMargin = pPrintFunc->GetBottomMargin(); - nHeaderHeight = pPrintFunc->GetHeader().nHeight; - nFooterHeight = pPrintFunc->GetFooter().nHeight; - bHeaderOn = pPrintFunc->GetHeader().bEnable; - bFooterOn = pPrintFunc->GetFooter().bEnable; - mnScale = pPrintFunc->GetZoom(); - - Rectangle aPixRect; - Rectangle aRectCellPosition; - Rectangle aRectPosition; - GetLocationData().GetMainCellRange( aPageArea, aPixRect ); - if( !bLayoutRTL ) - { - GetLocationData().GetCellPosition( aPageArea.aStart, aRectPosition ); - nLeftPosition = aRectPosition.Left(); - for( SCCOL i = aPageArea.aStart.Col(); i <= aPageArea.aEnd.Col(); i++ ) - { - GetLocationData().GetCellPosition( ScAddress( i,aPageArea.aStart.Row(),aPageArea.aStart.Tab()),aRectCellPosition ); - nRight[i] = aRectCellPosition.Right(); - } - } - else - { - GetLocationData().GetCellPosition( aPageArea.aEnd, aRectPosition ); - nLeftPosition = aRectPosition.Right()+1; - - GetLocationData().GetCellPosition( aPageArea.aStart,aRectCellPosition ); - nRight[ aPageArea.aEnd.Col() ] = aRectCellPosition.Left(); - for( SCCOL i = aPageArea.aEnd.Col(); i > aPageArea.aStart.Col(); i-- ) - { - GetLocationData().GetCellPosition( ScAddress( i,aPageArea.aEnd.Row(),aPageArea.aEnd.Tab()),aRectCellPosition ); - nRight[ i-1 ] = nRight[ i ] + aRectCellPosition.Right() - aRectCellPosition.Left() + 1; - } - } - - if ( nPrinted ) // If nothing, all gray draw - { - aPaintPageSize = pPrintFunc->GetPageSize(); - aPaintPageSize.Width() = (long) (aPaintPageSize.Width() * HMM_PER_TWIPS ); - aPaintPageSize.Height() = (long) (aPaintPageSize.Height() * HMM_PER_TWIPS ); - - nLeftMargin = (long) ( nLeftMargin * HMM_PER_TWIPS ); - nRightMargin = (long) ( nRightMargin * HMM_PER_TWIPS ); - nTopMargin = (long) ( nTopMargin * HMM_PER_TWIPS ); - nBottomMargin = (long) ( nBottomMargin * HMM_PER_TWIPS ); - nHeaderHeight = (long) ( nHeaderHeight * HMM_PER_TWIPS * mnScale / 100 + nTopMargin ); - nFooterHeight = (long) ( nFooterHeight * HMM_PER_TWIPS * mnScale / 100 + nBottomMargin ); - } - - if ( !bStateValid ) - { - pPrintFunc->GetPrintState( aState ); - aState.nDocPages = nTotalPages; - bStateValid = sal_True; - } - - delete pPrintFunc; - } - - - long nPageEndX = aPaintPageSize.Width() - aOffset.X(); - long nPageEndY = aPaintPageSize.Height() - aOffset.Y(); - Size aWinSize = GetOutputSize(); - Point aWinEnd( aWinSize.Width(), aWinSize.Height() ); - sal_Bool bRight = nPageEndX <= aWinEnd.X(); - sal_Bool bBottom = nPageEndY <= aWinEnd.Y(); - - if( bPageMargin ) - { - SetMapMode(aMMMode); - SetLineColor( COL_BLACK ); - DrawInvert( (long)( nTopMargin - aOffset.Y() ), POINTER_VSIZEBAR ); - DrawInvert( (long)(nPageEndY - nBottomMargin ), POINTER_VSIZEBAR ); - DrawInvert( (long)( nLeftMargin - aOffset.X() ), POINTER_HSIZEBAR ); - DrawInvert( (long)( nPageEndX - nRightMargin ) , POINTER_HSIZEBAR ); - if( bHeaderOn ) - { - DrawInvert( nHeaderHeight - aOffset.Y(), POINTER_VSIZEBAR ); - } - if( bFooterOn ) - { - DrawInvert( nPageEndY - nFooterHeight, POINTER_VSIZEBAR ); - } - - SetMapMode( MapMode( MAP_PIXEL ) ); - for( int i= aPageArea.aStart.Col(); i<= aPageArea.aEnd.Col(); i++ ) - { - Point aColumnTop = LogicToPixel( Point( 0, -aOffset.Y() ) ,aMMMode ); - SetLineColor( COL_BLACK ); - SetFillColor( COL_BLACK ); - DrawRect( Rectangle( Point( nRight[i] - 2, aColumnTop.Y() ),Point( nRight[i] + 2 , 4 + aColumnTop.Y()) )); - DrawLine( Point( nRight[i], aColumnTop.Y() ), Point( nRight[i], 10 + aColumnTop.Y()) ); - } - SetMapMode( aMMMode ); - } - - if (bRight || bBottom) - { - SetMapMode(aMMMode); - SetLineColor(); - SetFillColor(aBackColor); - if (bRight) - DrawRect(Rectangle(nPageEndX,0, aWinEnd.X(),aWinEnd.Y())); - if (bBottom) - { - if (bRight) - DrawRect(Rectangle(0,nPageEndY, nPageEndX,aWinEnd.Y())); // Ecke nicht doppelt - else - DrawRect(Rectangle(0,nPageEndY, aWinEnd.X(),aWinEnd.Y())); - } - } - pViewShell->UpdateScrollBars(); -} -//Issue51656 Add resizeable margin on page preview from maoyg - -void ScPreview::Command( const CommandEvent& rCEvt ) -{ - sal_uInt16 nCmd = rCEvt.GetCommand(); - if ( nCmd == COMMAND_WHEEL || nCmd == COMMAND_STARTAUTOSCROLL || nCmd == COMMAND_AUTOSCROLL ) - { - sal_Bool bDone = pViewShell->ScrollCommand( rCEvt ); - if (!bDone) - Window::Command(rCEvt); - } - else if ( nCmd == COMMAND_CONTEXTMENU ) - SfxDispatcher::ExecutePopup(); - else - Window::Command( rCEvt ); -} - - -void ScPreview::KeyInput( const KeyEvent& rKEvt ) -{ - // The + and - keys can't be configured as accelerator entries, so they must be handled directly - // (in ScPreview, not ScPreviewShell -> only if the preview window has the focus) - - const KeyCode& rKeyCode = rKEvt.GetKeyCode(); - sal_uInt16 nKey = rKeyCode.GetCode(); - sal_Bool bHandled = false; - if(!rKeyCode.GetModifier()) - { - sal_uInt16 nSlot = 0; - switch(nKey) - { - case KEY_ADD: nSlot = SID_PREVIEW_ZOOMIN; break; - case KEY_ESCAPE: nSlot = ScViewUtil::IsFullScreen( *pViewShell ) ? SID_CANCEL : SID_PREVIEW_CLOSE; break; - case KEY_SUBTRACT: nSlot = SID_PREVIEW_ZOOMOUT; break; - } - if(nSlot) - { - bHandled = sal_True; - pViewShell->GetViewFrame()->GetDispatcher()->Execute( nSlot, SFX_CALLMODE_ASYNCHRON ); - } - } - - if ( !bHandled && !pViewShell->KeyInput(rKEvt) ) - Window::KeyInput(rKEvt); -} - - -const ScPreviewLocationData& ScPreview::GetLocationData() -{ - if ( !pLocationData ) - { - pLocationData = new ScPreviewLocationData( pDocShell->GetDocument(), this ); - bLocationValid = false; - } - if ( !bLocationValid ) - { - pLocationData->Clear(); - DoPrint( pLocationData ); - bLocationValid = sal_True; - } - return *pLocationData; -} - - -void ScPreview::DataChanged(sal_Bool bNewTime) -{ - if (bNewTime) - { - aDate = Date(); - aTime = Time(); - } - - bValid = false; - InvalidateLocationData( SC_HINT_DATACHANGED ); - Invalidate(); -} - - -String ScPreview::GetPosString() -{ - if (!bValid) - { - CalcPages(nTab); - UpdateDrawView(); // Tabelle evtl. geaendert - } - - String aString( ScGlobal::GetRscString( STR_PAGE ) ); - aString += ' '; - aString += String::CreateFromInt32(nPageNo+1); - - if (nTabsTested >= nTabCount) - { - aString.AppendAscii(RTL_CONSTASCII_STRINGPARAM( " / " )); - aString += String::CreateFromInt32(nTotalPages); - } - - return aString; -} - - -void ScPreview::SetZoom(sal_uInt16 nNewZoom) -{ - if (nNewZoom < 20) - nNewZoom = 20; - if (nNewZoom > 400) - nNewZoom = 400; - if (nNewZoom != nZoom) - { - nZoom = nNewZoom; - - // apply new MapMode and call UpdateScrollBars to update aOffset - - Fraction aPreviewZoom( nZoom, 100 ); - Fraction aHorPrevZoom( (long)( 100 * nZoom / pDocShell->GetOutputFactor() ), 10000 ); - MapMode aMMMode( MAP_100TH_MM, Point(), aHorPrevZoom, aPreviewZoom ); - SetMapMode( aMMMode ); - - bInPaint = sal_True; // don't scroll during SetYOffset in UpdateScrollBars - pViewShell->UpdateScrollBars(); - bInPaint = false; - - bStateValid = false; - InvalidateLocationData( SC_HINT_ACC_VISAREACHANGED ); - DoInvalidate(); - Invalidate(); - } -} - - -void ScPreview::SetPageNo( long nPage ) -{ - nPageNo = nPage; - RecalcPages(); - UpdateDrawView(); // Tabelle evtl. geaendert - InvalidateLocationData( SC_HINT_DATACHANGED ); - Invalidate(); -} - - -long ScPreview::GetFirstPage(SCTAB nTabP) -{ - if (nTabP >= static_cast<SCTAB>(nPages.size()) ) - OSL_FAIL("nPages out ouf bounds, FIX IT"); - SCTAB nDocTabCount = pDocShell->GetDocument()->GetTableCount(); - if (nTabP >= nDocTabCount) - nTabP = nDocTabCount-1; - - long nPage = 0; - if (nTabP>0) - { - CalcPages( nTabP ); - UpdateDrawView(); // Tabelle evtl. geaendert - - for (SCTAB i=0; i<nTabP; i++) - nPage += nPages[i]; - - // bei leerer Tabelle vorhergehende Seite - - if ( nPages[nTabP]==0 && nPage > 0 ) - --nPage; - } - - return nPage; -} - - -Size lcl_GetDocPageSize( ScDocument* pDoc, SCTAB nTab ) -{ - String aName = pDoc->GetPageStyle( nTab ); - ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool(); - SfxStyleSheetBase* pStyleSheet = pStylePool->Find( aName, SFX_STYLE_FAMILY_PAGE ); - if ( pStyleSheet ) - { - SfxItemSet& rStyleSet = pStyleSheet->GetItemSet(); - return ((const SvxSizeItem&) rStyleSet.Get(ATTR_PAGE_SIZE)).GetSize(); - } - else - { - OSL_FAIL( "PageStyle not found" ); - return Size(); - } -} - - -sal_uInt16 ScPreview::GetOptimalZoom(sal_Bool bWidthOnly) -{ - double nWinScaleX = ScGlobal::nScreenPPTX / pDocShell->GetOutputFactor(); - double nWinScaleY = ScGlobal::nScreenPPTY; - Size aWinSize = GetOutputSizePixel(); - - // desired margin is 0.25cm in default MapMode (like Writer), - // but some additional margin is introduced by integer scale values - // -> add only 0.10cm, so there is some margin in all cases. - Size aMarginSize( LogicToPixel( Size( 100, 100 ), MAP_100TH_MM ) ); - aWinSize.Width() -= 2 * aMarginSize.Width(); - aWinSize.Height() -= 2 * aMarginSize.Height(); - - Size aLocalPageSize = lcl_GetDocPageSize( pDocShell->GetDocument(), nTab ); - if ( aLocalPageSize.Width() && aLocalPageSize.Height() ) - { - long nZoomX = (long) ( aWinSize.Width() * 100 / ( aLocalPageSize.Width() * nWinScaleX )); - long nZoomY = (long) ( aWinSize.Height() * 100 / ( aLocalPageSize.Height() * nWinScaleY )); - - long nOptimal = nZoomX; - if (!bWidthOnly && nZoomY<nOptimal) - nOptimal = nZoomY; - - if (nOptimal<20) - nOptimal = 20; - if (nOptimal>400) - nOptimal = 400; - - return (sal_uInt16) nOptimal; - } - else - return nZoom; -} - - -void ScPreview::SetXOffset( long nX ) -{ - if ( aOffset.X() == nX ) - return; - - if (bValid) - { - long nDif = LogicToPixel(aOffset).X() - LogicToPixel(Point(nX,0)).X(); - aOffset.X() = nX; - if (nDif && !bInPaint) - { - MapMode aOldMode = GetMapMode(); SetMapMode(MAP_PIXEL); - Scroll( nDif, 0 ); - SetMapMode(aOldMode); - } - } - else - { - aOffset.X() = nX; - if (!bInPaint) - Invalidate(); - } - InvalidateLocationData( SC_HINT_ACC_VISAREACHANGED ); - Paint(Rectangle()); -} - - -void ScPreview::SetYOffset( long nY ) -{ - if ( aOffset.Y() == nY ) - return; - - if (bValid) - { - long nDif = LogicToPixel(aOffset).Y() - LogicToPixel(Point(0,nY)).Y(); - aOffset.Y() = nY; - if (nDif && !bInPaint) - { - MapMode aOldMode = GetMapMode(); SetMapMode(MAP_PIXEL); - Scroll( 0, nDif ); - SetMapMode(aOldMode); - } - } - else - { - aOffset.Y() = nY; - if (!bInPaint) - Invalidate(); - } - InvalidateLocationData( SC_HINT_ACC_VISAREACHANGED ); - Paint(Rectangle()); -} - - -void ScPreview::DoInvalidate() -{ - // Wenn das ganze aus dem GetState der Shell gerufen wird, - // muss das Invalidate hinterher asynchron kommen... - - if (bInGetState) - Application::PostUserEvent( STATIC_LINK( this, ScPreview, InvalidateHdl ) ); - else - StaticInvalidate(); // sofort -} - -void ScPreview::StaticInvalidate() -{ - // static method, because it's called asynchronously - // -> must use current viewframe - - SfxViewFrame* pViewFrm = SfxViewFrame::Current(); - if (!pViewFrm) - return; - - SfxBindings& rBindings = pViewFrm->GetBindings(); - rBindings.Invalidate(SID_STATUS_DOCPOS); - rBindings.Invalidate(SID_STATUS_PAGESTYLE); - rBindings.Invalidate(SID_PREVIEW_PREVIOUS); - rBindings.Invalidate(SID_PREVIEW_NEXT); - rBindings.Invalidate(SID_PREVIEW_FIRST); - rBindings.Invalidate(SID_PREVIEW_LAST); - rBindings.Invalidate(SID_ATTR_ZOOM); - rBindings.Invalidate(SID_PREVIEW_ZOOMIN); - rBindings.Invalidate(SID_PREVIEW_ZOOMOUT); - rBindings.Invalidate(SID_PREVIEW_SCALINGFACTOR); - rBindings.Invalidate(SID_ATTR_ZOOMSLIDER); -} - -IMPL_STATIC_LINK( ScPreview, InvalidateHdl, void*, EMPTYARG ) -{ - (void)pThis; // avoid warning - - StaticInvalidate(); - return 0; -} - -void ScPreview::DataChanged( const DataChangedEvent& rDCEvt ) -{ - Window::DataChanged(rDCEvt); - - if ( (rDCEvt.GetType() == DATACHANGED_PRINTER) || - (rDCEvt.GetType() == DATACHANGED_DISPLAY) || - (rDCEvt.GetType() == DATACHANGED_FONTS) || - (rDCEvt.GetType() == DATACHANGED_FONTSUBSTITUTION) || - ((rDCEvt.GetType() == DATACHANGED_SETTINGS) && - (rDCEvt.GetFlags() & SETTINGS_STYLE)) ) - { - if ( rDCEvt.GetType() == DATACHANGED_FONTS ) - pDocShell->UpdateFontList(); - - if ( rDCEvt.GetType() == DATACHANGED_SETTINGS && - (rDCEvt.GetFlags() & SETTINGS_STYLE) ) - { - // scroll bar size may have changed - pViewShell->InvalidateBorder(); // calls OuterResizePixel - } - - Invalidate(); - InvalidateLocationData( SC_HINT_DATACHANGED ); - } -} - -//Issue51656 Add resizeable margin on page preview from maoyg -void ScPreview::MouseButtonDown( const MouseEvent& rMEvt ) -{ - Fraction aPreviewZoom( nZoom, 100 ); - Fraction aHorPrevZoom( (long)( 100 * nZoom / pDocShell->GetOutputFactor() ), 10000 ); - MapMode aMMMode( MAP_100TH_MM, Point(), aHorPrevZoom, aPreviewZoom ); - - aButtonDownChangePoint = PixelToLogic( rMEvt.GetPosPixel(),aMMMode ); - aButtonDownPt = PixelToLogic( rMEvt.GetPosPixel(),aMMMode ); - - CaptureMouse(); - - if( rMEvt.IsLeft() && GetPointer() == POINTER_HSIZEBAR ) - { - SetMapMode( aMMMode ); - if( bLeftRulerChange ) - { - DrawInvert( aButtonDownChangePoint.X(), POINTER_HSIZEBAR ); - bLeftRulerMove = sal_True; - bRightRulerMove = false; - } - else if( bRightRulerChange ) - { - DrawInvert( aButtonDownChangePoint.X(), POINTER_HSIZEBAR ); - bLeftRulerMove = false; - bRightRulerMove = sal_True; - } - } - - if( rMEvt.IsLeft() && GetPointer() == POINTER_VSIZEBAR ) - { - SetMapMode( aMMMode ); - if( bTopRulerChange ) - { - DrawInvert( aButtonDownChangePoint.Y(), POINTER_VSIZEBAR ); - bTopRulerMove = sal_True; - bBottomRulerMove = false; - } - else if( bBottomRulerChange ) - { - DrawInvert( aButtonDownChangePoint.Y(), POINTER_VSIZEBAR ); - bTopRulerMove = false; - bBottomRulerMove = sal_True; - } - else if( bHeaderRulerChange ) - { - DrawInvert( aButtonDownChangePoint.Y(), POINTER_VSIZEBAR ); - bHeaderRulerMove = sal_True; - bFooterRulerMove = false; - } - else if( bFooterRulerChange ) - { - DrawInvert( aButtonDownChangePoint.Y(), POINTER_VSIZEBAR ); - bHeaderRulerMove = false; - bFooterRulerMove = sal_True; - } - } - - if( rMEvt.IsLeft() && GetPointer() == POINTER_HSPLIT ) - { - Point aNowPt = rMEvt.GetPosPixel(); - SCCOL i = 0; - for( i = aPageArea.aStart.Col(); i<= aPageArea.aEnd.Col(); i++ ) - { - if( aNowPt.X() < nRight[i] + 2 && aNowPt.X() > nRight[i] - 2 ) - { - nColNumberButttonDown = i; - break; - } - } - if( i == aPageArea.aEnd.Col()+1 ) - return; - - SetMapMode( aMMMode ); - if( nColNumberButttonDown == aPageArea.aStart.Col() ) - DrawInvert( PixelToLogic( Point( nLeftPosition, 0 ),aMMMode ).X() ,POINTER_HSPLIT ); - else - DrawInvert( PixelToLogic( Point( nRight[ nColNumberButttonDown-1 ], 0 ),aMMMode ).X() ,POINTER_HSPLIT ); - - DrawInvert( aButtonDownChangePoint.X(), POINTER_HSPLIT ); - bColRulerMove = sal_True; - } -} - -void ScPreview::MouseButtonUp( const MouseEvent& rMEvt ) -{ - Fraction aPreviewZoom( nZoom, 100 ); - Fraction aHorPrevZoom( (long)( 100 * nZoom / pDocShell->GetOutputFactor() ), 10000 ); - MapMode aMMMode( MAP_100TH_MM, Point(), aHorPrevZoom, aPreviewZoom ); - - aButtonUpPt = PixelToLogic( rMEvt.GetPosPixel(),aMMMode ); - - long nWidth = (long) lcl_GetDocPageSize(pDocShell->GetDocument(), nTab).Width(); - long nHeight = (long) lcl_GetDocPageSize(pDocShell->GetDocument(), nTab).Height(); - - if( rMEvt.IsLeft() && GetPointer() == POINTER_HSIZEBAR ) - { - SetPointer( Pointer( POINTER_ARROW ) ); - - sal_Bool bMoveRulerAction= sal_True; - - ScDocument * pDoc = pDocShell->GetDocument(); - String aOldName = pDoc->GetPageStyle( nTab ); - sal_Bool bUndo( pDoc->IsUndoEnabled() ); - ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool(); - SfxStyleSheetBase* pStyleSheet = pStylePool->Find( aOldName, SFX_STYLE_FAMILY_PAGE ); - - if ( pStyleSheet ) - { - ScStyleSaveData aOldData; - if( bUndo ) - aOldData.InitFromStyle( pStyleSheet ); - - SfxItemSet& rStyleSet = pStyleSheet->GetItemSet(); - - SvxLRSpaceItem aLRItem = ( const SvxLRSpaceItem& ) rStyleSet.Get( ATTR_LRSPACE ); - - if(( bLeftRulerChange || bRightRulerChange ) && ( aButtonUpPt.X() <= ( 0 - aOffset.X() ) || aButtonUpPt.X() > nWidth * HMM_PER_TWIPS - aOffset.X() ) ) - { - bMoveRulerAction = false; - Paint(Rectangle(0,0,10000,10000)); - } - else if( bLeftRulerChange && ( aButtonUpPt.X() / HMM_PER_TWIPS > nWidth - aLRItem.GetRight() - aOffset.X() / HMM_PER_TWIPS ) ) - { - bMoveRulerAction = false; - Paint(Rectangle(0,0,10000,10000)); - } - else if( bRightRulerChange && ( aButtonUpPt.X() / HMM_PER_TWIPS < aLRItem.GetLeft() - aOffset.X() / HMM_PER_TWIPS ) ) - { - bMoveRulerAction = false; - Paint(Rectangle(0,0,10000,10000)); - } - else if( aButtonDownPt.X() == aButtonUpPt.X() ) - { - bMoveRulerAction = false; - DrawInvert( aButtonUpPt.X(), POINTER_HSIZEBAR ); - } - if( bMoveRulerAction ) - { - if( bLeftRulerChange && bLeftRulerMove ) - { - aLRItem.SetLeft( (long)( aButtonUpPt.X() / HMM_PER_TWIPS + aOffset.X() / HMM_PER_TWIPS )); - rStyleSet.Put( aLRItem ); - pDocShell->SetModified(true); - } - else if( bRightRulerChange && bRightRulerMove ) - { - aLRItem.SetRight( (long)( nWidth - aButtonUpPt.X() / HMM_PER_TWIPS - aOffset.X() / HMM_PER_TWIPS )); - rStyleSet.Put( aLRItem ); - pDocShell->SetModified(true); - } - - ScStyleSaveData aNewData; - aNewData.InitFromStyle( pStyleSheet ); - if( bUndo ) - { - pDocShell->GetUndoManager()->AddUndoAction( - new ScUndoModifyStyle( pDocShell, SFX_STYLE_FAMILY_PAGE, - aOldData, aNewData ) ); - } - - if ( ValidTab( nTab ) ) - { - ScPrintFunc aPrintFunc( pDocShell, this, nTab ); - aPrintFunc.UpdatePages(); - } - - Rectangle aRect(0,0,10000,10000); - Paint( aRect ); - bLeftRulerChange = false; - bRightRulerChange = false; - } - } - bLeftRulerMove = false; - bRightRulerMove = false; - } - - if( rMEvt.IsLeft() && GetPointer() == POINTER_VSIZEBAR ) - { - SetPointer( POINTER_ARROW ); - - sal_Bool bMoveRulerAction = sal_True; - if( ( bTopRulerChange || bBottomRulerChange || bHeaderRulerChange || bFooterRulerChange ) && ( aButtonUpPt.Y() <= ( 0 - aOffset.Y() ) || aButtonUpPt.Y() > nHeight * HMM_PER_TWIPS -aOffset.Y() ) ) - { - bMoveRulerAction = false; - Paint( Rectangle(0,0,10000,10000) ); - } - else if( aButtonDownPt.Y() == aButtonUpPt.Y() ) - { - bMoveRulerAction = false; - DrawInvert( aButtonUpPt.Y(), POINTER_VSIZEBAR ); - } - if( bMoveRulerAction ) - { - ScDocument * pDoc = pDocShell->GetDocument(); - sal_Bool bUndo( pDoc->IsUndoEnabled() ); - ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool(); - SfxStyleSheetBase* pStyleSheet = pStylePool->Find( pDoc->GetPageStyle( nTab ), SFX_STYLE_FAMILY_PAGE ); - OSL_ENSURE( pStyleSheet, "PageStyle not found" ); - if ( pStyleSheet ) - { - ScStyleSaveData aOldData; - if( bUndo ) - aOldData.InitFromStyle( pStyleSheet ); - - SfxItemSet& rStyleSet = pStyleSheet->GetItemSet(); - - SvxULSpaceItem aULItem = ( const SvxULSpaceItem&)rStyleSet.Get( ATTR_ULSPACE ); - - if( bTopRulerMove && bTopRulerChange ) - { - aULItem.SetUpperValue( (sal_uInt16)( aButtonUpPt.Y() / HMM_PER_TWIPS + aOffset.Y() / HMM_PER_TWIPS ) ); - rStyleSet.Put( aULItem ); - pDocShell->SetModified(true); - } - else if( bBottomRulerMove && bBottomRulerChange ) - { - aULItem.SetLowerValue( (sal_uInt16)( nHeight - aButtonUpPt.Y() / HMM_PER_TWIPS - aOffset.Y() / HMM_PER_TWIPS ) ); - rStyleSet.Put( aULItem ); - pDocShell->SetModified(true); - } - else if( bHeaderRulerMove && bHeaderRulerChange ) - { - const SfxPoolItem* pItem = NULL; - if ( rStyleSet.GetItemState( ATTR_PAGE_HEADERSET, false, &pItem ) == SFX_ITEM_SET ) - { - SfxItemSet& pHeaderSet = ((SvxSetItem*)pItem)->GetItemSet(); - Size aHeaderSize = ((const SvxSizeItem&)pHeaderSet.Get(ATTR_PAGE_SIZE)).GetSize(); - aHeaderSize.Height() = (long)( aButtonUpPt.Y() / HMM_PER_TWIPS + aOffset.Y() / HMM_PER_TWIPS - aULItem.GetUpper()); - aHeaderSize.Height() = aHeaderSize.Height() * 100 / mnScale; - SvxSetItem aNewHeader( (const SvxSetItem&)rStyleSet.Get(ATTR_PAGE_HEADERSET) ); - aNewHeader.GetItemSet().Put( SvxSizeItem( ATTR_PAGE_SIZE, aHeaderSize ) ); - rStyleSet.Put( aNewHeader ); - pDocShell->SetModified(true); - } - } - else if( bFooterRulerMove && bFooterRulerChange ) - { - const SfxPoolItem* pItem = NULL; - if( rStyleSet.GetItemState( ATTR_PAGE_FOOTERSET, false, &pItem ) == SFX_ITEM_SET ) - { - SfxItemSet& pFooterSet = ((SvxSetItem*)pItem)->GetItemSet(); - Size aFooterSize = ((const SvxSizeItem&)pFooterSet.Get(ATTR_PAGE_SIZE)).GetSize(); - aFooterSize.Height() = (long)( nHeight - aButtonUpPt.Y() / HMM_PER_TWIPS - aOffset.Y() / HMM_PER_TWIPS - aULItem.GetLower() ); - aFooterSize.Height() = aFooterSize.Height() * 100 / mnScale; - SvxSetItem aNewFooter( (const SvxSetItem&)rStyleSet.Get(ATTR_PAGE_FOOTERSET) ); - aNewFooter.GetItemSet().Put( SvxSizeItem( ATTR_PAGE_SIZE, aFooterSize ) ); - rStyleSet.Put( aNewFooter ); - pDocShell->SetModified(true); - } - } - - ScStyleSaveData aNewData; - aNewData.InitFromStyle( pStyleSheet ); - if( bUndo ) - { - pDocShell->GetUndoManager()->AddUndoAction( - new ScUndoModifyStyle( pDocShell, SFX_STYLE_FAMILY_PAGE, - aOldData, aNewData ) ); - } - - if ( ValidTab( nTab ) ) - { - ScPrintFunc aPrintFunc( pDocShell, this, nTab ); - aPrintFunc.UpdatePages(); - } - - Rectangle aRect(0,0,10000,10000); - Paint( aRect ); - bTopRulerChange = false; - bBottomRulerChange = false; - bHeaderRulerChange = false; - bFooterRulerChange = false; - } - } - bTopRulerMove = false; - bBottomRulerMove = false; - bHeaderRulerMove = false; - bFooterRulerMove = false; - } - if( rMEvt.IsLeft() && GetPointer() == POINTER_HSPLIT ) - { - SetPointer(POINTER_ARROW); - ScDocument* pDoc = pDocShell->GetDocument(); - sal_Bool bLayoutRTL = pDoc->IsLayoutRTL( nTab ); - sal_Bool bMoveRulerAction = sal_True; - if( aButtonDownPt.X() == aButtonUpPt.X() ) - { - bMoveRulerAction = false; - if( nColNumberButttonDown == aPageArea.aStart.Col() ) - DrawInvert( PixelToLogic( Point( nLeftPosition, 0 ),aMMMode ).X() ,POINTER_HSPLIT ); - else - DrawInvert( PixelToLogic( Point( nRight[ nColNumberButttonDown-1 ], 0 ),aMMMode ).X() ,POINTER_HSPLIT ); - DrawInvert( aButtonUpPt.X(), POINTER_HSPLIT ); - } - if( bMoveRulerAction ) - { - long nNewColWidth = 0; - ScDocFunc aFunc(*pDocShell); - SCCOLROW nCols[2] = { nColNumberButttonDown, nColNumberButttonDown }; - - if( !bLayoutRTL ) - { - nNewColWidth = (long) ( PixelToLogic( Point( rMEvt.GetPosPixel().X() - nRight[ nColNumberButttonDown ], 0), aMMMode ).X() / HMM_PER_TWIPS ) * 100 / mnScale; - nNewColWidth += pDocShell->GetDocument()->GetColWidth( nColNumberButttonDown, nTab ); - } - else - { - - nNewColWidth = (long) ( PixelToLogic( Point( nRight[ nColNumberButttonDown ] - rMEvt.GetPosPixel().X(), 0), aMMMode ).X() / HMM_PER_TWIPS ) * 100 / mnScale; - nNewColWidth += pDocShell->GetDocument()->GetColWidth( nColNumberButttonDown, nTab ); - } - - if( nNewColWidth >= 0 ) - { - aFunc.SetWidthOrHeight( true, 1,nCols, nTab, SC_SIZE_DIRECT, (sal_uInt16)nNewColWidth, true, true); - pDocShell->SetModified(true); - } - if ( ValidTab( nTab ) ) - { - ScPrintFunc aPrintFunc( pDocShell, this, nTab ); - aPrintFunc.UpdatePages(); - } - Rectangle nRect(0,0,10000,10000); - Paint( nRect ); - } - bColRulerMove = false; - } - ReleaseMouse(); -} - -void ScPreview::MouseMove( const MouseEvent& rMEvt ) -{ - Fraction aPreviewZoom( nZoom, 100 ); - Fraction aHorPrevZoom( (long)( 100 * nZoom / pDocShell->GetOutputFactor() ), 10000 ); - MapMode aMMMode( MAP_100TH_MM, Point(), aHorPrevZoom, aPreviewZoom ); - Point aMouseMovePoint = PixelToLogic( rMEvt.GetPosPixel(), aMMMode ); - - long nLeftMargin = 0; - long nRightMargin = 0; - long nTopMargin = 0; - long nBottomMargin = 0; - Size PageSize; - - long nWidth = (long) lcl_GetDocPageSize(pDocShell->GetDocument(), nTab).Width(); - long nHeight = (long) lcl_GetDocPageSize(pDocShell->GetDocument(), nTab).Height(); - - if ( nPageNo < nTotalPages ) - { - ScPrintOptions aOptions = SC_MOD()->GetPrintOptions(); - - ScPrintFunc* pPrintFunc; - - if (bStateValid) - pPrintFunc = new ScPrintFunc( pDocShell, this, aState, &aOptions ); - else - pPrintFunc = new ScPrintFunc( pDocShell, this, nTab, nFirstAttr[nTab], nTotalPages, NULL, &aOptions ); - - nLeftMargin = (long)( pPrintFunc->GetLeftMargin() * HMM_PER_TWIPS - aOffset.X() ); - nRightMargin = (long)( pPrintFunc->GetRightMargin() * HMM_PER_TWIPS ); - nRightMargin = (long)( nWidth * HMM_PER_TWIPS - nRightMargin - aOffset.X() ); - nTopMargin = (long)( pPrintFunc->GetTopMargin() * HMM_PER_TWIPS - aOffset.Y() ); - nBottomMargin = (long)( pPrintFunc->GetBottomMargin() * HMM_PER_TWIPS ); - nBottomMargin = (long)( nHeight * HMM_PER_TWIPS - nBottomMargin - aOffset.Y() ); - if( mnScale > 0 ) - { - nHeaderHeight = (long)( nTopMargin + pPrintFunc->GetHeader().nHeight * HMM_PER_TWIPS * mnScale / 100 ); - nFooterHeight = (long)( nBottomMargin - pPrintFunc->GetFooter().nHeight * HMM_PER_TWIPS * mnScale / 100 ); - } - else - { - nHeaderHeight = (long)( nTopMargin + pPrintFunc->GetHeader().nHeight * HMM_PER_TWIPS ); - nFooterHeight = (long)( nBottomMargin - pPrintFunc->GetFooter().nHeight * HMM_PER_TWIPS ); - } - delete pPrintFunc; - } - - Point aPixPt( rMEvt.GetPosPixel() ); - Point aLeftTop = LogicToPixel( Point( nLeftMargin, -aOffset.Y() ) , aMMMode ); - Point aLeftBottom = LogicToPixel( Point( nLeftMargin ,(long)(nHeight * HMM_PER_TWIPS - aOffset.Y()) ), aMMMode ); - Point aRightTop = LogicToPixel( Point( nRightMargin, -aOffset.Y() ), aMMMode ); - Point aTopLeft = LogicToPixel( Point( -aOffset.X(), nTopMargin ), aMMMode ); - Point aTopRight = LogicToPixel( Point( (long)(nWidth * HMM_PER_TWIPS - aOffset.X()), nTopMargin ), aMMMode ); - Point aBottomLeft = LogicToPixel( Point( -aOffset.X(), nBottomMargin ), aMMMode ); - Point aHeaderLeft = LogicToPixel( Point( -aOffset.X(), nHeaderHeight ), aMMMode ); - Point aFooderLeft = LogicToPixel( Point( -aOffset.X(), nFooterHeight ), aMMMode ); - - sal_Bool bOnColRulerChange = false; - - for( SCCOL i=aPageArea.aStart.Col(); i<= aPageArea.aEnd.Col(); i++ ) - { - Point aColumnTop = LogicToPixel( Point( 0, -aOffset.Y() ) ,aMMMode ); - Point aColumnBottom = LogicToPixel( Point( 0, (long)( nHeight * HMM_PER_TWIPS - aOffset.Y()) ), aMMMode ); - if( aPixPt.X() < ( nRight[i] + 2 ) && ( aPixPt.X() > ( nRight[i] - 2 ) ) && ( aPixPt.X() < aRightTop.X() ) && ( aPixPt.X() > aLeftTop.X() ) - && ( aPixPt.Y() > aColumnTop.Y() ) && ( aPixPt.Y() < aColumnBottom.Y() ) && !bLeftRulerMove && !bRightRulerMove - && !bTopRulerMove && !bBottomRulerMove && !bHeaderRulerMove && !bFooterRulerMove ) - { - bOnColRulerChange = sal_True; - if( !rMEvt.GetButtons() && GetPointer() == POINTER_HSPLIT ) - nColNumberButttonDown = i; - break; - } - } - - if( aPixPt.X() < ( aLeftTop.X() + 2 ) && aPixPt.X() > ( aLeftTop.X() - 2 ) && !bRightRulerMove ) - { - bLeftRulerChange = sal_True; - bRightRulerChange = false; - } - else if( aPixPt.X() < ( aRightTop.X() + 2 ) && aPixPt.X() > ( aRightTop.X() - 2 ) && !bLeftRulerMove ) - { - bLeftRulerChange = false; - bRightRulerChange = sal_True; - } - else if( aPixPt.Y() < ( aTopLeft.Y() + 2 ) && aPixPt.Y() > ( aTopLeft.Y() - 2 ) && !bBottomRulerMove && !bHeaderRulerMove && !bFooterRulerMove ) - { - bTopRulerChange = sal_True; - bBottomRulerChange = false; - bHeaderRulerChange = false; - bFooterRulerChange = false; - } - else if( aPixPt.Y() < ( aBottomLeft.Y() + 2 ) && aPixPt.Y() > ( aBottomLeft.Y() - 2 ) && !bTopRulerMove && !bHeaderRulerMove && !bFooterRulerMove ) - { - bTopRulerChange = false; - bBottomRulerChange = sal_True; - bHeaderRulerChange = false; - bFooterRulerChange = false; - } - else if( aPixPt.Y() < ( aHeaderLeft.Y() + 2 ) && aPixPt.Y() > ( aHeaderLeft.Y() - 2 ) && !bTopRulerMove && !bBottomRulerMove && !bFooterRulerMove ) - { - bTopRulerChange = false; - bBottomRulerChange = false; - bHeaderRulerChange = sal_True; - bFooterRulerChange = false; - } - else if( aPixPt.Y() < ( aFooderLeft.Y() + 2 ) && aPixPt.Y() > ( aFooderLeft.Y() - 2 ) && !bTopRulerMove && !bBottomRulerMove && !bHeaderRulerMove ) - { - bTopRulerChange = false; - bBottomRulerChange = false; - bHeaderRulerChange = false; - bFooterRulerChange = sal_True; - } - - if( bPageMargin ) - { - if(( (aPixPt.X() < ( aLeftTop.X() + 2 ) && aPixPt.X() > ( aLeftTop.X() - 2 )) || bLeftRulerMove || - ( aPixPt.X() < ( aRightTop.X() + 2 ) && aPixPt.X() > ( aRightTop.X() - 2 ) ) || bRightRulerMove || bOnColRulerChange || bColRulerMove ) - && aPixPt.Y() > aLeftTop.Y() && aPixPt.Y() < aLeftBottom.Y() ) - { - if( bOnColRulerChange || bColRulerMove ) - { - SetPointer( Pointer( POINTER_HSPLIT ) ); - if( bColRulerMove ) - { - if( aMouseMovePoint.X() > -aOffset.X() && aMouseMovePoint.X() < nWidth * HMM_PER_TWIPS - aOffset.X() ) - DragMove( aMouseMovePoint.X(), POINTER_HSPLIT ); - } - } - else - { - if( bLeftRulerChange && !bTopRulerMove && !bBottomRulerMove && !bHeaderRulerMove && !bFooterRulerMove ) - { - SetPointer( Pointer( POINTER_HSIZEBAR ) ); - if( bLeftRulerMove ) - { - if( aMouseMovePoint.X() > -aOffset.X() && aMouseMovePoint.X() < nWidth * HMM_PER_TWIPS - aOffset.X() ) - DragMove( aMouseMovePoint.X(), POINTER_HSIZEBAR ); - } - } - else if( bRightRulerChange && !bTopRulerMove && !bBottomRulerMove && !bHeaderRulerMove && !bFooterRulerMove ) - { - SetPointer( Pointer( POINTER_HSIZEBAR ) ); - if( bRightRulerMove ) - { - if( aMouseMovePoint.X() > -aOffset.X() && aMouseMovePoint.X() < nWidth * HMM_PER_TWIPS - aOffset.X() ) - DragMove( aMouseMovePoint.X(), POINTER_HSIZEBAR ); - } - } - } - } - else - { - if( ( ( aPixPt.Y() < ( aTopLeft.Y() + 2 ) && aPixPt.Y() > ( aTopLeft.Y() - 2 ) ) || bTopRulerMove || - ( aPixPt.Y() < ( aBottomLeft.Y() + 2 ) && aPixPt.Y() > ( aBottomLeft.Y() - 2 ) ) || bBottomRulerMove || - ( aPixPt.Y() < ( aHeaderLeft.Y() + 2 ) && aPixPt.Y() > ( aHeaderLeft.Y() - 2 ) ) || bHeaderRulerMove || - ( aPixPt.Y() < ( aFooderLeft.Y() + 2 ) && aPixPt.Y() > ( aFooderLeft.Y() - 2 ) ) || bFooterRulerMove ) - && aPixPt.X() > aTopLeft.X() && aPixPt.X() < aTopRight.X() ) - { - if( bTopRulerChange ) - { - SetPointer( Pointer( POINTER_VSIZEBAR ) ); - if( bTopRulerMove ) - { - if( aMouseMovePoint.Y() > -aOffset.Y() && aMouseMovePoint.Y() < nHeight * HMM_PER_TWIPS - aOffset.Y() ) - DragMove( aMouseMovePoint.Y(), POINTER_VSIZEBAR ); - } - } - else if( bBottomRulerChange ) - { - SetPointer( Pointer( POINTER_VSIZEBAR ) ); - if( bBottomRulerMove ) - { - if( aMouseMovePoint.Y() > -aOffset.Y() && aMouseMovePoint.Y() < nHeight * HMM_PER_TWIPS - aOffset.Y() ) - DragMove( aMouseMovePoint.Y(), POINTER_VSIZEBAR ); - } - } - else if( bHeaderRulerChange ) - { - SetPointer( Pointer( POINTER_VSIZEBAR ) ); - if( bHeaderRulerMove ) - { - if( aMouseMovePoint.Y() > -aOffset.Y() && aMouseMovePoint.Y() < nHeight * HMM_PER_TWIPS - aOffset.Y() ) - DragMove( aMouseMovePoint.Y(), POINTER_VSIZEBAR ); - } - } - else if( bFooterRulerChange ) - { - SetPointer( Pointer( POINTER_VSIZEBAR ) ); - if( bFooterRulerMove ) - { - if( aMouseMovePoint.Y() > -aOffset.Y() && aMouseMovePoint.Y() < nHeight * HMM_PER_TWIPS - aOffset.Y() ) - DragMove( aMouseMovePoint.Y(), POINTER_VSIZEBAR ); - } - } - } - else - SetPointer( Pointer( POINTER_ARROW ) ); - } - } -} -//Issue51656 Add resizeable margin on page preview from maoyg -void ScPreview::InvalidateLocationData(sal_uLong nId) -{ - bLocationValid = false; - if (pViewShell->HasAccessibilityObjects()) - pViewShell->BroadcastAccessibility( SfxSimpleHint( nId ) ); -} - -void ScPreview::GetFocus() -{ - if (pViewShell->HasAccessibilityObjects()) - pViewShell->BroadcastAccessibility( ScAccWinFocusGotHint(GetAccessible()) ); -} - -void ScPreview::LoseFocus() -{ - if (pViewShell->HasAccessibilityObjects()) - pViewShell->BroadcastAccessibility( ScAccWinFocusLostHint(GetAccessible()) ); -} - -com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessible> ScPreview::CreateAccessible() -{ - ScAccessibleDocumentPagePreview* pAccessible = - new ScAccessibleDocumentPagePreview( GetAccessibleParentWindow()->GetAccessible(), pViewShell ); - com::sun::star::uno::Reference < com::sun::star::accessibility::XAccessible > xAccessible = pAccessible; - pAccessible->Init(); - return xAccessible; -} - -//Issue51656 Add resizeable margin on page preview from maoyg -void ScPreview::DragMove( long nDragMovePos, sal_uInt16 nFlags ) -{ - Fraction aPreviewZoom( nZoom, 100 ); - Fraction aHorPrevZoom( (long)( 100 * nZoom / pDocShell->GetOutputFactor() ), 10000 ); - MapMode aMMMode( MAP_100TH_MM, Point(), aHorPrevZoom, aPreviewZoom ); - SetMapMode( aMMMode ); - long nPos = nDragMovePos; - if( nFlags == POINTER_HSIZEBAR || nFlags == POINTER_HSPLIT ) - { - if( nDragMovePos != aButtonDownChangePoint.X() ) - { - DrawInvert( aButtonDownChangePoint.X(), nFlags ); - aButtonDownChangePoint.X() = nPos; - DrawInvert( aButtonDownChangePoint.X(), nFlags ); - } - } - else if( nFlags == POINTER_VSIZEBAR ) - { - if( nDragMovePos != aButtonDownChangePoint.Y() ) - { - DrawInvert( aButtonDownChangePoint.Y(), nFlags ); - aButtonDownChangePoint.Y() = nPos; - DrawInvert( aButtonDownChangePoint.Y(), nFlags ); - } - } -} - -void ScPreview::DrawInvert( long nDragPos, sal_uInt16 nFlags ) -{ - long nHeight = (long) lcl_GetDocPageSize( pDocShell->GetDocument(), nTab ).Height(); - long nWidth = (long) lcl_GetDocPageSize( pDocShell->GetDocument(), nTab ).Width(); - if( nFlags == POINTER_HSIZEBAR || nFlags == POINTER_HSPLIT ) - { - Rectangle aRect( nDragPos, -aOffset.Y(), nDragPos + 1,(long)( ( nHeight * HMM_PER_TWIPS ) - aOffset.Y())); - Invert( aRect,INVERT_50 ); - } - else if( nFlags == POINTER_VSIZEBAR ) - { - Rectangle aRect( -aOffset.X(), nDragPos,(long)( ( nWidth * HMM_PER_TWIPS ) - aOffset.X() ), nDragPos + 1 ); - Invert( aRect,INVERT_50 ); - } -} -//Issue51656 Add resizeable margin on page preview from maoyg - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |