diff options
Diffstat (limited to 'sc/source/ui/view/tabview5.cxx')
-rw-r--r-- | sc/source/ui/view/tabview5.cxx | 675 |
1 files changed, 0 insertions, 675 deletions
diff --git a/sc/source/ui/view/tabview5.cxx b/sc/source/ui/view/tabview5.cxx deleted file mode 100644 index 0a7b49462..000000000 --- a/sc/source/ui/view/tabview5.cxx +++ /dev/null @@ -1,675 +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 <svx/fmshell.hxx> -#include <svx/svdobj.hxx> -#include <svx/svdoutl.hxx> -#include <sfx2/bindings.hxx> -#include <sfx2/dispatch.hxx> -#include <sfx2/objsh.hxx> -#include <tools/ref.hxx> - -#include "tabview.hxx" -#include "tabvwsh.hxx" -#include "document.hxx" -#include "gridwin.hxx" -#include "olinewin.hxx" -#include "tabsplit.hxx" -#include "colrowba.hxx" -#include "tabcont.hxx" -#include "hintwin.hxx" -#include "sc.hrc" -#include "pagedata.hxx" -#include "hiranges.hxx" -#include "drawview.hxx" -#include "drwlayer.hxx" -#include "fusel.hxx" // Start-Function -#include "seltrans.hxx" -#include "scmod.hxx" -#include "AccessibilityHints.hxx" -#include "docsh.hxx" -#include "viewuno.hxx" - -#include <vcl/svapp.hxx> - -using namespace com::sun::star; - -// STATIC DATA ----------------------------------------------------------- - - -void ScTabView::Init() -{ - /* RTL layout of the view windows is done manually, because it depends on - the sheet orientation, not the UI setting. Note: controls that are - already constructed (e.g. scroll bars) have the RTL setting of the GUI. - Eventually this has to be disabled manually (see below). */ - pFrameWin->EnableRTL( false ); - - sal_uInt16 i; - - aScrollTimer.SetTimeout(10); - aScrollTimer.SetTimeoutHdl( LINK( this, ScTabView, TimerHdl ) ); - - for (i=0; i<4; i++) - pGridWin[i] = NULL; - pGridWin[SC_SPLIT_BOTTOMLEFT] = new ScGridWindow( pFrameWin, &aViewData, SC_SPLIT_BOTTOMLEFT ); - - pSelEngine = new ScViewSelectionEngine( pGridWin[SC_SPLIT_BOTTOMLEFT], this, - SC_SPLIT_BOTTOMLEFT ); - aFunctionSet.SetSelectionEngine( pSelEngine ); - - pHdrSelEng = new ScHeaderSelectionEngine( pFrameWin, &aHdrFunc ); - - pColBar[SC_SPLIT_LEFT] = new ScColBar( pFrameWin, &aViewData, SC_SPLIT_LEFT, - &aHdrFunc, pHdrSelEng ); - pColBar[SC_SPLIT_RIGHT] = NULL; - pRowBar[SC_SPLIT_BOTTOM] = new ScRowBar( pFrameWin, &aViewData, SC_SPLIT_BOTTOM, - &aHdrFunc, pHdrSelEng ); - pRowBar[SC_SPLIT_TOP] = NULL; - for (i=0; i<2; i++) - pColOutline[i] = pRowOutline[i] = NULL; - - pHSplitter = new ScTabSplitter( pFrameWin, WinBits( WB_HSCROLL ), &aViewData ); - pVSplitter = new ScTabSplitter( pFrameWin, WinBits( WB_VSCROLL ), &aViewData ); - - // SSA: override default keyboard step size to allow snap to row/column - pHSplitter->SetKeyboardStepSize( 1 ); - pVSplitter->SetKeyboardStepSize( 1 ); - - pTabControl = new ScTabControl( pFrameWin, &aViewData ); - /* #i97900# The tab control has to remain in RTL mode if GUI is RTL, this - is needed to draw the 3D effect correctly. The base TabBar implementes - mirroring independent from the GUI direction. Have to set RTL mode - explicitly because the parent frame window is already RTL disabled. */ - pTabControl->EnableRTL( Application::GetSettings().GetLayoutRTL() ); - - InitScrollBar( aHScrollLeft, MAXCOL+1 ); - InitScrollBar( aHScrollRight, MAXCOL+1 ); - InitScrollBar( aVScrollTop, MAXROW+1 ); - InitScrollBar( aVScrollBottom, MAXROW+1 ); - /* #i97900# scrollbars remain in correct RTL mode, needed mirroring etc. - is now handled correctly at the respective places. */ - - // Hier noch nichts anzeigen (Show), weil noch falsch angeordnet ist - // Show kommt dann aus UpdateShow beim ersten Resize - // pTabControl, pGridWin, aHScrollLeft, aVScrollBottom, - // aCornerButton, aScrollBarBox, pHSplitter, pVSplitter - - // Splitter - - pHSplitter->SetSplitHdl( LINK( this, ScTabView, SplitHdl ) ); - pVSplitter->SetSplitHdl( LINK( this, ScTabView, SplitHdl ) ); - - // UpdateShow kommt beim Resize, oder bei Kopie einer bestehenden View aus dem ctor - - pDrawActual = NULL; - pDrawOld = NULL; - - // DrawView darf nicht im TabView - ctor angelegt werden, - // wenn die ViewShell noch nicht konstruiert ist... - // Das gilt auch fuer ViewOptionsHasChanged() - - TestHintWindow(); -} - -ScTabView::~ScTabView() -{ - sal_uInt16 i; - - // remove selection object - ScModule* pScMod = SC_MOD(); - ScSelectionTransferObj* pOld = pScMod->GetSelectionTransfer(); - if ( pOld && pOld->GetView() == this ) - { - pOld->ForgetView(); - pScMod->SetSelectionTransfer( NULL ); - TransferableHelper::ClearSelection( GetActiveWin() ); // may delete pOld - } - - DELETEZ(pBrushDocument); - DELETEZ(pDrawBrushSet); - - DELETEZ(pPageBreakData); - - DELETEZ(pDrawOld); - DELETEZ(pDrawActual); - - aViewData.KillEditView(); // solange GridWin's noch existieren - - DELETEZ(pInputHintWindow); - - if (pDrawView) - { - for (i=0; i<4; i++) - if (pGridWin[i]) - { - pDrawView->VCRemoveWin(pGridWin[i]); - pDrawView->DeleteWindowFromPaintView(pGridWin[i]); - } - - pDrawView->HideSdrPage(); - delete pDrawView; - } - - delete pSelEngine; - - for (i=0; i<4; i++) - delete pGridWin[i]; - - delete pHdrSelEng; - - for (i=0; i<2; i++) - { - delete pColBar[i]; - delete pRowBar[i]; - delete pColOutline[i]; - delete pRowOutline[i]; - } - - delete pHSplitter; - delete pVSplitter; - - delete pTabControl; -} - -void ScTabView::MakeDrawView( sal_uInt8 nForceDesignMode ) -{ - if (!pDrawView) - { - ScDrawLayer* pLayer = aViewData.GetDocument()->GetDrawLayer(); - OSL_ENSURE(pLayer, "wo ist der Draw Layer ??"); - - sal_uInt16 i; - pDrawView = new ScDrawView( pGridWin[SC_SPLIT_BOTTOMLEFT], &aViewData ); - for (i=0; i<4; i++) - if (pGridWin[i]) - { - if ( SC_SPLIT_BOTTOMLEFT != (ScSplitPos)i ) - pDrawView->AddWindowToPaintView(pGridWin[i]); - pDrawView->VCAddWin(pGridWin[i]); - } - pDrawView->RecalcScale(); - for (i=0; i<4; i++) - if (pGridWin[i]) - { - pGridWin[i]->SetMapMode(pGridWin[i]->GetDrawMapMode()); - - pGridWin[i]->Update(); // wegen Invalidate im DrawView ctor (ShowPage), - // damit gleich gezeichnet werden kann - } - SfxRequest aSfxRequest(SID_OBJECT_SELECT, 0,aViewData.GetViewShell()->GetPool()); - SetDrawFuncPtr(new FuSelection( aViewData.GetViewShell(), GetActiveWin(), pDrawView, - pLayer,aSfxRequest)); - - // used when switching back from page preview: restore saved design mode state - // (otherwise, keep the default from the draw view ctor) - if ( nForceDesignMode != SC_FORCEMODE_NONE ) - pDrawView->SetDesignMode( (sal_Bool)nForceDesignMode ); - - // an der FormShell anmelden - FmFormShell* pFormSh = aViewData.GetViewShell()->GetFormShell(); - if (pFormSh) - pFormSh->SetView(pDrawView); - - if (aViewData.GetViewShell()->HasAccessibilityObjects()) - aViewData.GetViewShell()->BroadcastAccessibility(SfxSimpleHint(SC_HINT_ACC_MAKEDRAWLAYER)); - - } -} - -void ScTabView::DoAddWin( ScGridWindow* pWin ) -{ - if (pDrawView) - { - pDrawView->AddWindowToPaintView(pWin); - pDrawView->VCAddWin(pWin); - - // #114409# - pWin->DrawLayerCreated(); - } -} - -//================================================================== - -void ScTabView::TabChanged( bool bSameTabButMoved ) -{ - if (pDrawView) - { - DrawDeselectAll(); // beendet auch Text-Edit-Modus - - sal_uInt16 i; - for (i=0; i<4; i++) - if (pGridWin[i]) - pDrawView->VCRemoveWin(pGridWin[i]); // fuer alte Page - - SCTAB nTab = aViewData.GetTabNo(); - pDrawView->HideSdrPage(); - pDrawView->ShowSdrPage(pDrawView->GetModel()->GetPage(nTab)); - - UpdateLayerLocks(); - - pDrawView->RecalcScale(); - pDrawView->UpdateWorkArea(); // PageSize ist pro Page unterschiedlich - - for (i=0; i<4; i++) - if (pGridWin[i]) - pDrawView->VCAddWin(pGridWin[i]); // fuer neue Page - } - - SfxBindings& rBindings = aViewData.GetBindings(); - - // Es gibt keine einfache Moeglichkeit, alle Slots der FormShell zu invalidieren - // (fuer disablete Slots auf geschuetzten Tabellen), darum hier einfach alles... - rBindings.InvalidateAll(false); - - if (aViewData.GetViewShell()->HasAccessibilityObjects()) - { - SfxSimpleHint aAccHint(SC_HINT_ACC_TABLECHANGED); - aViewData.GetViewShell()->BroadcastAccessibility(aAccHint); - } - - // notification for XActivationBroadcaster - SfxViewFrame* pViewFrame = aViewData.GetViewShell()->GetViewFrame(); - if (pViewFrame) - { - uno::Reference<frame::XController> xController = pViewFrame->GetFrame().GetController(); - if (xController.is()) - { - ScTabViewObj* pImp = ScTabViewObj::getImplementation( xController ); - if (pImp) - pImp->SheetChanged( bSameTabButMoved ); - } - } -} - -void ScTabView::UpdateLayerLocks() -{ - if (pDrawView) - { - SCTAB nTab = aViewData.GetTabNo(); - sal_Bool bEx = aViewData.GetViewShell()->IsDrawSelMode(); - sal_Bool bProt = aViewData.GetDocument()->IsTabProtected( nTab ) || - aViewData.GetSfxDocShell()->IsReadOnly(); - sal_Bool bShared = aViewData.GetDocShell()->IsDocShared(); - - SdrLayer* pLayer; - SdrLayerAdmin& rAdmin = pDrawView->GetModel()->GetLayerAdmin(); - pLayer = rAdmin.GetLayerPerID(SC_LAYER_BACK); - if (pLayer) - pDrawView->SetLayerLocked( pLayer->GetName(), bProt || !bEx || bShared ); - pLayer = rAdmin.GetLayerPerID(SC_LAYER_INTERN); - if (pLayer) - pDrawView->SetLayerLocked( pLayer->GetName(), sal_True ); - pLayer = rAdmin.GetLayerPerID(SC_LAYER_FRONT); - if (pLayer) - pDrawView->SetLayerLocked( pLayer->GetName(), bProt || bShared ); - pLayer = rAdmin.GetLayerPerID(SC_LAYER_CONTROLS); - if (pLayer) - pDrawView->SetLayerLocked( pLayer->GetName(), bProt || bShared ); - pLayer = rAdmin.GetLayerPerID(SC_LAYER_HIDDEN); - if (pLayer) - { - pDrawView->SetLayerLocked( pLayer->GetName(), bProt || bShared ); - pDrawView->SetLayerVisible( pLayer->GetName(), false); - } - } -} - -void ScTabView::DrawDeselectAll() -{ - if (pDrawView) - { - ScTabViewShell* pViewSh = aViewData.GetViewShell(); - if ( pDrawActual && - ( pViewSh->IsDrawTextShell() || pDrawActual->GetSlotID() == SID_DRAW_NOTEEDIT ) ) - { - // end text edit (as if escape pressed, in FuDraw) - aViewData.GetDispatcher().Execute( pDrawActual->GetSlotID(), - SFX_CALLMODE_SLOT | SFX_CALLMODE_RECORD ); - } - - pDrawView->ScEndTextEdit(); - pDrawView->UnmarkAll(); - - if (!pViewSh->IsDrawSelMode()) - pViewSh->SetDrawShell( false ); - } -} - -bool ScTabView::IsDrawTextEdit() const -{ - if (pDrawView) - return pDrawView->IsTextEdit(); - else - return false; -} - -SvxZoomType ScTabView::GetZoomType() const -{ - return aViewData.GetZoomType(); -} - -void ScTabView::SetZoomType( SvxZoomType eNew, bool bAll ) -{ - aViewData.SetZoomType( eNew, bAll ); -} - -void ScTabView::SetZoom( const Fraction& rNewX, const Fraction& rNewY, bool bAll ) -{ - aViewData.SetZoom( rNewX, rNewY, bAll ); - if (pDrawView) - pDrawView->RecalcScale(); - ZoomChanged(); // einzeln wegen CLOOKs -} - -void ScTabView::RefreshZoom() -{ - aViewData.RefreshZoom(); - if (pDrawView) - pDrawView->RecalcScale(); - ZoomChanged(); -} - -void ScTabView::SetPagebreakMode( bool bSet ) -{ - aViewData.SetPagebreakMode(bSet); - if (pDrawView) - pDrawView->RecalcScale(); - ZoomChanged(); // einzeln wegen CLOOKs -} - -void ScTabView::ResetDrawDragMode() -{ - if (pDrawView) - pDrawView->SetDragMode( SDRDRAG_MOVE ); -} - -void ScTabView::ViewOptionsHasChanged( bool bHScrollChanged, bool bGraphicsChanged ) -{ - // DrawView erzeugen, wenn Gitter angezeigt werden soll - if ( !pDrawView && aViewData.GetOptions().GetGridOptions().GetGridVisible() ) - MakeDrawLayer(); - - if (pDrawView) - pDrawView->UpdateUserViewOptions(); - - if (bGraphicsChanged) - DrawEnableAnim(sal_True); // DrawEnableAnim checks the options state - - // if TabBar is set to visible, make sure its size is not 0 - bool bGrow = ( aViewData.IsTabMode() && pTabControl->GetSizePixel().Width() <= 0 ); - - // if ScrollBar is set to visible, TabBar must make room - bool bShrink = ( bHScrollChanged && aViewData.IsTabMode() && aViewData.IsHScrollMode() && - pTabControl->GetSizePixel().Width() > SC_TABBAR_DEFWIDTH ); - - if ( bGrow || bShrink ) - { - Size aSize = pTabControl->GetSizePixel(); - aSize.Width() = SC_TABBAR_DEFWIDTH; // initial size - pTabControl->SetSizePixel(aSize); // DoResize is called later... - } -} - -// Helper-Funktion gegen das Include des Drawing Layers - -SdrView* ScTabView::GetSdrView() -{ - return pDrawView; -} - -void ScTabView::DrawMarkListHasChanged() -{ - if ( pDrawView ) - pDrawView->MarkListHasChanged(); -} - -void ScTabView::UpdateAnchorHandles() -{ - if ( pDrawView ) - pDrawView->AdjustMarkHdl(); -} - -void ScTabView::UpdateIMap( SdrObject* pObj ) -{ - if ( pDrawView ) - pDrawView->UpdateIMap( pObj ); -} - -void ScTabView::DrawMarkRect( const Rectangle& rRect ) -{ - //! store rectangle for repaint during drag - - for (sal_uInt16 i=0; i<4; i++) - { - if ( pGridWin[i] && pGridWin[i]->IsVisible() ) - { - RasterOp aROp = pGridWin[i]->GetRasterOp(); - sal_Bool bHasLine = pGridWin[i]->IsLineColor(); - Color aLine = pGridWin[i]->GetLineColor(); - sal_Bool bHasFill = pGridWin[i]->IsFillColor(); - Color aFill = pGridWin[i]->GetFillColor(); - - pGridWin[i]->SetRasterOp( ROP_INVERT ); - pGridWin[i]->SetLineColor( COL_BLACK ); - pGridWin[i]->SetFillColor(); - - pGridWin[i]->DrawRect(rRect); - - pGridWin[i]->SetRasterOp(aROp); - if (bHasLine) - pGridWin[i]->SetLineColor(aLine); - else - pGridWin[i]->SetLineColor(); - if (bHasFill) - pGridWin[i]->SetFillColor(aFill); - else - pGridWin[i]->SetFillColor(); - } - } -} - -void ScTabView::DrawEnableAnim(bool bSet) -{ - sal_uInt16 i; - if ( pDrawView ) - { - // dont start animations if display of graphics is disabled - // graphics are controlled by VOBJ_TYPE_OLE - if ( bSet && aViewData.GetOptions().GetObjMode(VOBJ_TYPE_OLE) == VOBJ_MODE_SHOW ) - { - if ( !pDrawView->IsAnimationEnabled() ) - { - pDrawView->SetAnimationEnabled(true); - - // Animierte GIFs muessen wieder gestartet werden: - ScDocument* pDoc = aViewData.GetDocument(); - for (i=0; i<4; i++) - if ( pGridWin[i] && pGridWin[i]->IsVisible() ) - pDoc->StartAnimations( aViewData.GetTabNo(), pGridWin[i] ); - } - } - else - { - pDrawView->SetAnimationEnabled(false); - } - } -} - -void ScTabView::UpdateDrawTextOutliner() -{ - if ( pDrawView ) - { - Outliner* pOL = pDrawView->GetTextEditOutliner(); - if (pOL) - aViewData.UpdateOutlinerFlags( *pOL ); - } -} - -void ScTabView::DigitLanguageChanged() -{ - LanguageType eNewLang = SC_MOD()->GetOptDigitLanguage(); - for (sal_uInt16 i=0; i<4; i++) - if ( pGridWin[i] ) - pGridWin[i]->SetDigitLanguage( eNewLang ); -} - -//--------------------------------------------------------------- - -void ScTabView::ScrollToObject( SdrObject* pDrawObj ) -{ - if ( pDrawObj ) - MakeVisible( pDrawObj->GetLogicRect() ); -} - -void ScTabView::MakeVisible( const Rectangle& rHMMRect ) -{ - Window* pWin = GetActiveWin(); - Size aWinSize = pWin->GetOutputSizePixel(); - SCTAB nTab = aViewData.GetTabNo(); - - Rectangle aRect = pWin->LogicToPixel( rHMMRect ); - - long nScrollX=0, nScrollY=0; // Pixel - - if ( aRect.Right() >= aWinSize.Width() ) // rechts raus - { - nScrollX = aRect.Right() - aWinSize.Width() + 1; // rechter Rand sichtbar - if ( aRect.Left() < nScrollX ) - nScrollX = aRect.Left(); // links sichtbar (falls zu gross) - } - if ( aRect.Bottom() >= aWinSize.Height() ) // unten raus - { - nScrollY = aRect.Bottom() - aWinSize.Height() + 1; // unterer Rand sichtbar - if ( aRect.Top() < nScrollY ) - nScrollY = aRect.Top(); // oben sichtbar (falls zu gross) - } - - if ( aRect.Left() < 0 ) // links raus - nScrollX = aRect.Left(); // linker Rand sichtbar - if ( aRect.Top() < 0 ) // oben raus - nScrollY = aRect.Top(); // oberer Rand sichtbar - - if (nScrollX || nScrollY) - { - ScDocument* pDoc = aViewData.GetDocument(); - if ( pDoc->IsNegativePage( nTab ) ) - nScrollX = -nScrollX; - - double nPPTX = aViewData.GetPPTX(); - double nPPTY = aViewData.GetPPTY(); - ScSplitPos eWhich = aViewData.GetActivePart(); - SCCOL nPosX = aViewData.GetPosX(WhichH(eWhich)); - SCROW nPosY = aViewData.GetPosY(WhichV(eWhich)); - - long nLinesX=0, nLinesY=0; // Spalten/Zeilen - um mindestens nScrollX/Y scrollen - - if (nScrollX > 0) - while (nScrollX > 0 && nPosX < MAXCOL) - { - nScrollX -= (long) ( pDoc->GetColWidth(nPosX, nTab) * nPPTX ); - ++nPosX; - ++nLinesX; - } - else if (nScrollX < 0) - while (nScrollX < 0 && nPosX > 0) - { - --nPosX; - nScrollX += (long) ( pDoc->GetColWidth(nPosX, nTab) * nPPTX ); - --nLinesX; - } - - if (nScrollY > 0) - while (nScrollY > 0 && nPosY < MAXROW) - { - nScrollY -= (long) ( pDoc->GetRowHeight(nPosY, nTab) * nPPTY ); - ++nPosY; - ++nLinesY; - } - else if (nScrollY < 0) - while (nScrollY < 0 && nPosY > 0) - { - --nPosY; - nScrollY += (long) ( pDoc->GetRowHeight(nPosY, nTab) * nPPTY ); - --nLinesY; - } - - ScrollLines( nLinesX, nLinesY ); // ausfuehren - } -} - -//--------------------------------------------------------------- - -void ScTabView::SetBrushDocument( ScDocument* pNew, bool bLock ) -{ - delete pBrushDocument; - delete pDrawBrushSet; - - pBrushDocument = pNew; - pDrawBrushSet = NULL; - - bLockPaintBrush = bLock; - - aViewData.GetBindings().Invalidate(SID_FORMATPAINTBRUSH); -} - -void ScTabView::SetDrawBrushSet( SfxItemSet* pNew, bool bLock ) -{ - delete pBrushDocument; - delete pDrawBrushSet; - - pBrushDocument = NULL; - pDrawBrushSet = pNew; - - bLockPaintBrush = bLock; - - aViewData.GetBindings().Invalidate(SID_FORMATPAINTBRUSH); -} - -void ScTabView::ResetBrushDocument() -{ - if ( HasPaintBrush() ) - { - SetBrushDocument( NULL, false ); - SetActivePointer( Pointer( POINTER_ARROW ) ); // switch pointers also when ended with escape key - } -} - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |