diff options
Diffstat (limited to 'sd/source/ui/view/viewshe2.cxx')
-rw-r--r-- | sd/source/ui/view/viewshe2.cxx | 1209 |
1 files changed, 0 insertions, 1209 deletions
diff --git a/sd/source/ui/view/viewshe2.cxx b/sd/source/ui/view/viewshe2.cxx deleted file mode 100644 index 2aef1b6c1..000000000 --- a/sd/source/ui/view/viewshe2.cxx +++ /dev/null @@ -1,1209 +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_sd.hxx" -#include <com/sun/star/embed/NoVisualAreaSizeException.hpp> -#include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/chart2/XChartDocument.hpp> -#include <com/sun/star/drawing/FillStyle.hpp> -#include <com/sun/star/drawing/LineStyle.hpp> - -#include "ViewShell.hxx" -#include "ViewShellHint.hxx" - -#include "ViewShellImplementation.hxx" -#include "FactoryIds.hxx" - -#include <svx/svxids.hrc> -#include <vcl/scrbar.hxx> -#include <svx/svdpagv.hxx> -#include <sfx2/dispatch.hxx> -#include <sfx2/app.hxx> -#include <svx/ruler.hxx> -#include <editeng/outliner.hxx> -#include <svtools/ehdl.hxx> -#include <svx/svdoole2.hxx> -#include <svtools/sfxecode.hxx> -#include <svx/fmshell.hxx> -#include <sfx2/dispatch.hxx> -#include <rtl/ustrbuf.hxx> -#include <unotools/moduleoptions.hxx> -#include <svx/dialogs.hrc> -#include <sot/clsids.hxx> - -#include "strings.hrc" -#include "app.hrc" -#include "unokywds.hxx" - -#include "sdundogr.hxx" -#include "FrameView.hxx" -#include "undopage.hxx" -#include "sdresid.hxx" -#include "drawdoc.hxx" -#include "View.hxx" -#include "fupoor.hxx" -#include "Client.hxx" -#include "DrawDocShell.hxx" -#include "fusearch.hxx" -#include "slideshow.hxx" -#include "sdpage.hxx" -#include "DrawViewShell.hxx" -#include "ViewShellBase.hxx" - -#include "Window.hxx" - -#include <sfx2/viewfrm.hxx> -#include <svtools/soerr.hxx> -#include <toolkit/helper/vclunohelper.hxx> - -#ifdef _MSC_VER -#pragma optimize ( "", off ) -#endif - -using namespace com::sun::star; - -const String aEmptyStr; - -namespace sd { - -/************************************************************************* -|* -|* Scrollbar-Update: Thumbpos und VisibleSize anpassen -|* -\************************************************************************/ - -void ViewShell::UpdateScrollBars() -{ - if (mpHorizontalScrollBar.get() != NULL) - { - long nW = (long)(mpContentWindow->GetVisibleWidth() * 32000); - long nX = (long)(mpContentWindow->GetVisibleX() * 32000); - mpHorizontalScrollBar->SetVisibleSize(nW); - mpHorizontalScrollBar->SetThumbPos(nX); - nW = 32000 - nW; - long nLine = (long) (mpContentWindow->GetScrlLineWidth() * nW); - long nPage = (long) (mpContentWindow->GetScrlPageWidth() * nW); - mpHorizontalScrollBar->SetLineSize(nLine); - mpHorizontalScrollBar->SetPageSize(nPage); - } - - if (mpVerticalScrollBar.get() != NULL) - { - long nH = (long)(mpContentWindow->GetVisibleHeight() * 32000); - long nY = (long)(mpContentWindow->GetVisibleY() * 32000); - - if(IsPageFlipMode()) // ie in zoom mode where no panning - { - SdPage* pPage = static_cast<DrawViewShell*>(this)->GetActualPage(); - sal_uInt16 nCurPage = (pPage->GetPageNum() - 1) / 2; - sal_uInt16 nTotalPages = GetDoc()->GetSdPageCount(pPage->GetPageKind()); - mpVerticalScrollBar->SetRange(Range(0,256*nTotalPages)); - mpVerticalScrollBar->SetVisibleSize(256); - mpVerticalScrollBar->SetThumbPos(256*nCurPage); - mpVerticalScrollBar->SetLineSize(256); - mpVerticalScrollBar->SetPageSize(256); - } - else - { - mpVerticalScrollBar->SetRange(Range(0,32000)); - mpVerticalScrollBar->SetVisibleSize(nH); - mpVerticalScrollBar->SetThumbPos(nY); - nH = 32000 - nH; - long nLine = (long) (mpContentWindow->GetScrlLineHeight() * nH); - long nPage = (long) (mpContentWindow->GetScrlPageHeight() * nH); - mpVerticalScrollBar->SetLineSize(nLine); - mpVerticalScrollBar->SetPageSize(nPage); - } - } - - if (mbHasRulers) - { - UpdateHRuler(); - UpdateVRuler(); - } - -} -/************************************************************************* -|* -|* Handling fuer horizontale Scrollbars -|* -\************************************************************************/ - -IMPL_LINK_INLINE_START(ViewShell, HScrollHdl, ScrollBar *, pHScroll ) -{ - return VirtHScrollHdl(pHScroll); -} -IMPL_LINK_INLINE_END(ViewShell, HScrollHdl, ScrollBar *, pHScroll ) - -/************************************************************************* -|* -|* virtueller Scroll-Handler fuer horizontale Scrollbars -|* -\************************************************************************/ - -long ViewShell::VirtHScrollHdl(ScrollBar* pHScroll) -{ - long nDelta = pHScroll->GetDelta(); - - if (nDelta != 0) - { - double fX = (double) pHScroll->GetThumbPos() / pHScroll->GetRange().Len(); - - // alle Fenster der Spalte scrollen - ::sd::View* pView = GetView(); - OutlinerView* pOLV = NULL; - - if (pView) - pOLV = pView->GetTextEditOutlinerView(); - - if (pOLV) - pOLV->HideCursor(); - - mpContentWindow->SetVisibleXY(fX, -1); - - Rectangle aVisArea = GetDocSh()->GetVisArea(ASPECT_CONTENT); - Point aVisAreaPos = GetActiveWindow()->PixelToLogic( Point(0,0) ); - aVisArea.SetPos(aVisAreaPos); - GetDocSh()->SetVisArea(aVisArea); - - Size aVisSizePixel = GetActiveWindow()->GetOutputSizePixel(); - Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0), aVisSizePixel) ); - VisAreaChanged(aVisAreaWin); - - if (pView) - { - pView->VisAreaChanged(GetActiveWindow()); - } - - if (pOLV) - pOLV->ShowCursor(); - - if (mbHasRulers) - UpdateHRuler(); - - } - - return 0; -} - -/************************************************************************* -|* -|* Handling fuer vertikale Scrollbars -|* -\************************************************************************/ - -IMPL_LINK_INLINE_START(ViewShell, VScrollHdl, ScrollBar *, pVScroll ) -{ - return VirtVScrollHdl(pVScroll); -} -IMPL_LINK_INLINE_END(ViewShell, VScrollHdl, ScrollBar *, pVScroll ) - -/************************************************************************* -|* -|* Handling fuer vertikale Scrollbars -|* -\************************************************************************/ - -long ViewShell::VirtVScrollHdl(ScrollBar* pVScroll) -{ - if(IsPageFlipMode()) - { - SdPage* pPage = static_cast<DrawViewShell*>(this)->GetActualPage(); - sal_uInt16 nCurPage = (pPage->GetPageNum() - 1) >> 1; - sal_uInt16 nNewPage = (sal_uInt16)pVScroll->GetThumbPos()/256; - if( nCurPage != nNewPage ) - static_cast<DrawViewShell*>(this)->SwitchPage(nNewPage); - } - else //panning mode - { - double fY = (double) pVScroll->GetThumbPos() / pVScroll->GetRange().Len(); - - ::sd::View* pView = GetView(); - OutlinerView* pOLV = NULL; - - if (pView) - pOLV = pView->GetTextEditOutlinerView(); - - if (pOLV) - pOLV->HideCursor(); - - mpContentWindow->SetVisibleXY(-1, fY); - - Rectangle aVisArea = GetDocSh()->GetVisArea(ASPECT_CONTENT); - Point aVisAreaPos = GetActiveWindow()->PixelToLogic( Point(0,0) ); - aVisArea.SetPos(aVisAreaPos); - GetDocSh()->SetVisArea(aVisArea); - - Size aVisSizePixel = GetActiveWindow()->GetOutputSizePixel(); - Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0), aVisSizePixel) ); - VisAreaChanged(aVisAreaWin); - - if (pView) - { - pView->VisAreaChanged(GetActiveWindow()); - } - - if (pOLV) - pOLV->ShowCursor(); - - if (mbHasRulers) - UpdateVRuler(); - - } - - return 0; -} - -SvxRuler* ViewShell::CreateHRuler(::sd::Window* , sal_Bool ) -{ - return NULL; -} - -SvxRuler* ViewShell::CreateVRuler(::sd::Window* ) -{ - return NULL; -} - -void ViewShell::UpdateHRuler() -{ -} - -void ViewShell::UpdateVRuler() -{ -} - -long ViewShell::GetHCtrlWidth() -{ - return 0; -} - -/************************************************************************* -|* -|* Eine bestimmte Anzahl von Zeilen scrollen (wird beim automatischen -|* Scrollen (Zeichen/Draggen) verwendet) -|* -\************************************************************************/ - -void ViewShell::ScrollLines(long nLinesX, long nLinesY) -{ - if ( nLinesX ) - { - nLinesX *= mpHorizontalScrollBar->GetLineSize(); - } - if ( nLinesY ) - { - nLinesY *= mpVerticalScrollBar->GetLineSize(); - } - - Scroll(nLinesX, nLinesY); -} - -/************************************************************************* -|* -|* Window um nScrollX, nScrollY scrollen -|* -\************************************************************************/ - -void ViewShell::Scroll(long nScrollX, long nScrollY) -{ - if (nScrollX) - { - long nNewThumb = mpHorizontalScrollBar->GetThumbPos() + nScrollX; - mpHorizontalScrollBar->SetThumbPos(nNewThumb); - } - if (nScrollY) - { - long nNewThumb = mpVerticalScrollBar->GetThumbPos() + nScrollY; - mpVerticalScrollBar->SetThumbPos(nNewThumb); - } - double fX = (double) mpHorizontalScrollBar->GetThumbPos() / - mpHorizontalScrollBar->GetRange().Len(); - double fY = (double) mpVerticalScrollBar->GetThumbPos() / - mpVerticalScrollBar->GetRange().Len(); - - GetActiveWindow()->SetVisibleXY(fX, fY); - - Rectangle aVisArea = GetDocSh()->GetVisArea(ASPECT_CONTENT); - Point aVisAreaPos = GetActiveWindow()->PixelToLogic( Point(0,0) ); - aVisArea.SetPos(aVisAreaPos); - GetDocSh()->SetVisArea(aVisArea); - - Size aVisSizePixel = GetActiveWindow()->GetOutputSizePixel(); - Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0), aVisSizePixel) ); - VisAreaChanged(aVisAreaWin); - - ::sd::View* pView = GetView(); - if (pView) - { - pView->VisAreaChanged(GetActiveWindow()); - } - - if (mbHasRulers) - { - UpdateHRuler(); - UpdateVRuler(); - } -} - -/************************************************************************* -|* -|* Den Zoomfaktor fuer alle Split-Windows setzen -|* -\************************************************************************/ - -void ViewShell::SetZoom(long nZoom) -{ - Fraction aUIScale(nZoom, 100); - aUIScale *= GetDoc()->GetUIScale(); - - if (mpHorizontalRuler.get() != NULL) - mpHorizontalRuler->SetZoom(aUIScale); - - if (mpVerticalRuler.get() != NULL) - mpVerticalRuler->SetZoom(aUIScale); - - if (mpContentWindow.get() != NULL) - { - mpContentWindow->SetZoomIntegral(nZoom); - - // #i74769# Here is a 2nd way (besides Window::Scroll) to set the visible prt - // of the window. It needs - like Scroll(SCROLL_CHILDREN) does - also to move - // the child windows. I am trying INVALIDATE_CHILDREN here which makes things better, - // but does not solve the problem completely. Neet to ask PL. - mpContentWindow->Invalidate(INVALIDATE_CHILDREN); - } - - Size aVisSizePixel = GetActiveWindow()->GetOutputSizePixel(); - Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0), aVisSizePixel) ); - VisAreaChanged(aVisAreaWin); - - ::sd::View* pView = GetView(); - if (pView) - { - pView->VisAreaChanged(GetActiveWindow()); - } - - UpdateScrollBars(); -} - -/************************************************************************* -|* -|* Zoomrechteck fuer aktives Fenster einstellen und alle Split-Windows -|* auf den gleichen Zoomfaktor setzen -|* -\************************************************************************/ - -void ViewShell::SetZoomRect(const Rectangle& rZoomRect) -{ - long nZoom = GetActiveWindow()->SetZoomRect(rZoomRect); - Fraction aUIScale(nZoom, 100); - aUIScale *= GetDoc()->GetUIScale(); - - Point aPos = GetActiveWindow()->GetWinViewPos(); - - if (mpHorizontalRuler.get() != NULL) - mpHorizontalRuler->SetZoom(aUIScale); - - if (mpVerticalRuler.get() != NULL) - mpVerticalRuler->SetZoom(aUIScale); - - if (mpContentWindow.get() != NULL) - { - Point aNewPos = mpContentWindow->GetWinViewPos(); - aNewPos.X() = aPos.X(); - aNewPos.Y() = aPos.Y(); - mpContentWindow->SetZoomIntegral(nZoom); - mpContentWindow->SetWinViewPos(aNewPos); - mpContentWindow->UpdateMapOrigin(); - - // #i74769# see above - mpContentWindow->Invalidate(INVALIDATE_CHILDREN); - } - - Size aVisSizePixel = GetActiveWindow()->GetOutputSizePixel(); - Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0), aVisSizePixel) ); - VisAreaChanged(aVisAreaWin); - - ::sd::View* pView = GetView(); - if (pView) - { - pView->VisAreaChanged(GetActiveWindow()); - } - - UpdateScrollBars(); -} - -/************************************************************************* -|* -|* Abbildungsparameter fuer alle Split-Windows initialisieren -|* -\************************************************************************/ - -void ViewShell::InitWindows(const Point& rViewOrigin, const Size& rViewSize, - const Point& rWinPos, sal_Bool bUpdate) -{ - if (mpContentWindow.get() != NULL) - { - mpContentWindow->SetViewOrigin(rViewOrigin); - mpContentWindow->SetViewSize(rViewSize); - mpContentWindow->SetWinViewPos(rWinPos); - - if ( bUpdate ) - { - mpContentWindow->UpdateMapOrigin(); - mpContentWindow->Invalidate(); - } - } - - Size aVisSizePixel = GetActiveWindow()->GetOutputSizePixel(); - Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0), aVisSizePixel) ); - VisAreaChanged(aVisAreaWin); - - ::sd::View* pView = GetView(); - if (pView) - { - pView->VisAreaChanged(GetActiveWindow()); - } -} - -/************************************************************************* -|* -|* Alle Split-Windows unter dem uebergebenen Rechteck invalidieren -|* -\************************************************************************/ - -void ViewShell::InvalidateWindows() -{ - if (mpContentWindow.get() != NULL) - mpContentWindow->Invalidate(); -} - - -/************************************************************************* -|* -|* Auf allen Split-Windows ein Markierungsrechteck mit dem -|* uebergebenen Pen zeichnen -|* -\************************************************************************/ - -void ViewShell::DrawMarkRect(const Rectangle& rRect) const -{ - if (mpContentWindow.get() != NULL) - { - mpContentWindow->InvertTracking(rRect, SHOWTRACK_OBJECT | SHOWTRACK_WINDOW); - } -} - -/************************************************************************* -|* -|* Groesse und Raender aller Seiten setzen -|* -\************************************************************************/ - -void ViewShell::SetPageSizeAndBorder(PageKind ePageKind, const Size& rNewSize, - long nLeft, long nRight, - long nUpper, long nLower, sal_Bool bScaleAll, - Orientation eOrientation, sal_uInt16 nPaperBin, - sal_Bool bBackgroundFullSize) -{ - SdPage* pPage = 0; - SdUndoGroup* pUndoGroup = NULL; - pUndoGroup = new SdUndoGroup(GetDoc()); - String aString(SdResId(STR_UNDO_CHANGE_PAGEFORMAT)); - pUndoGroup->SetComment(aString); - SfxViewShell* pViewShell = GetViewShell(); - OSL_ASSERT (pViewShell!=NULL); - - sal_uInt16 i, nPageCnt = GetDoc()->GetMasterSdPageCount(ePageKind); - - Broadcast (ViewShellHint(ViewShellHint::HINT_PAGE_RESIZE_START)); - - for (i = 0; i < nPageCnt; i++) - { - /********************************************************************** - * Erst alle MasterPages bearbeiten - **********************************************************************/ - pPage = GetDoc()->GetMasterSdPage(i, ePageKind); - - SdUndoAction* pUndo = new SdPageFormatUndoAction(GetDoc(), pPage, - pPage->GetSize(), - pPage->GetLftBorder(), pPage->GetRgtBorder(), - pPage->GetUppBorder(), pPage->GetLwrBorder(), - pPage->IsScaleObjects(), - pPage->GetOrientation(), - pPage->GetPaperBin(), - pPage->IsBackgroundFullSize(), - rNewSize, - nLeft, nRight, - nUpper, nLower, - bScaleAll, - eOrientation, - nPaperBin, - bBackgroundFullSize); - pUndoGroup->AddAction(pUndo); - - if (rNewSize.Width() > 0 || - nLeft >= 0 || nRight >= 0 || nUpper >= 0 || nLower >= 0) - { - Rectangle aNewBorderRect(nLeft, nUpper, nRight, nLower); - pPage->ScaleObjects(rNewSize, aNewBorderRect, bScaleAll); - - if (rNewSize.Width() > 0) - pPage->SetSize(rNewSize); - } - - if( nLeft >= 0 || nRight >= 0 || nUpper >= 0 || nLower >= 0 ) - { - pPage->SetBorder(nLeft, nUpper, nRight, nLower); - } - - pPage->SetOrientation(eOrientation); - pPage->SetPaperBin( nPaperBin ); - pPage->SetBackgroundFullSize( bBackgroundFullSize ); - - if ( ePageKind == PK_STANDARD ) - GetDoc()->GetMasterSdPage(i, PK_NOTES)->CreateTitleAndLayout(); - - pPage->CreateTitleAndLayout(); - } - - nPageCnt = GetDoc()->GetSdPageCount(ePageKind); - - for (i = 0; i < nPageCnt; i++) - { - /********************************************************************** - * Danach alle Pages bearbeiten - **********************************************************************/ - pPage = GetDoc()->GetSdPage(i, ePageKind); - - SdUndoAction* pUndo = new SdPageFormatUndoAction(GetDoc(), pPage, - pPage->GetSize(), - pPage->GetLftBorder(), pPage->GetRgtBorder(), - pPage->GetUppBorder(), pPage->GetLwrBorder(), - pPage->IsScaleObjects(), - pPage->GetOrientation(), - pPage->GetPaperBin(), - pPage->IsBackgroundFullSize(), - rNewSize, - nLeft, nRight, - nUpper, nLower, - bScaleAll, - eOrientation, - nPaperBin, - bBackgroundFullSize); - pUndoGroup->AddAction(pUndo); - - if (rNewSize.Width() > 0 || - nLeft >= 0 || nRight >= 0 || nUpper >= 0 || nLower >= 0) - { - Rectangle aNewBorderRect(nLeft, nUpper, nRight, nLower); - pPage->ScaleObjects(rNewSize, aNewBorderRect, bScaleAll); - - if (rNewSize.Width() > 0) - pPage->SetSize(rNewSize); - } - - if( nLeft >= 0 || nRight >= 0 || nUpper >= 0 || nLower >= 0 ) - { - pPage->SetBorder(nLeft, nUpper, nRight, nLower); - } - - pPage->SetOrientation(eOrientation); - pPage->SetPaperBin( nPaperBin ); - pPage->SetBackgroundFullSize( bBackgroundFullSize ); - - if ( ePageKind == PK_STANDARD ) - { - SdPage* pNotesPage = GetDoc()->GetSdPage(i, PK_NOTES); - pNotesPage->SetAutoLayout( pNotesPage->GetAutoLayout() ); - } - - pPage->SetAutoLayout( pPage->GetAutoLayout() ); - } - - // Handoutseite an neues Format der Standardseiten anpassen - if( (ePageKind == PK_STANDARD) || (ePageKind == PK_HANDOUT) ) - GetDoc()->GetSdPage(0, PK_HANDOUT)->CreateTitleAndLayout(sal_True); - - // Undo Gruppe dem Undo Manager uebergeben - pViewShell->GetViewFrame()->GetObjectShell() - ->GetUndoManager()->AddUndoAction(pUndoGroup); - - long nWidth = pPage->GetSize().Width(); - long nHeight = pPage->GetSize().Height(); - - Point aPageOrg = Point(nWidth, nHeight / 2); - Size aViewSize = Size(nWidth * 3, nHeight * 2); - - InitWindows(aPageOrg, aViewSize, Point(-1, -1), sal_True); - - Point aVisAreaPos; - - if ( GetDocSh()->GetCreateMode() == SFX_CREATE_MODE_EMBEDDED ) - { - aVisAreaPos = GetDocSh()->GetVisArea(ASPECT_CONTENT).TopLeft(); - } - - ::sd::View* pView = GetView(); - if (pView) - { - pView->SetWorkArea(Rectangle(Point() - aVisAreaPos - aPageOrg, aViewSize)); - } - - UpdateScrollBars(); - - Point aNewOrigin(pPage->GetLftBorder(), pPage->GetUppBorder()); - - if (pView) - { - pView->GetSdrPageView()->SetPageOrigin(aNewOrigin); - } - - pViewShell->GetViewFrame()->GetBindings().Invalidate(SID_RULER_NULL_OFFSET); - - // auf (neue) Seitengroesse zoomen - pViewShell->GetViewFrame()->GetDispatcher()->Execute(SID_SIZE_PAGE, - SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD); - - Broadcast (ViewShellHint(ViewShellHint::HINT_PAGE_RESIZE_END)); -} - -/************************************************************************* -|* -|* Zoom-Faktor fuer InPlace einstellen -|* -\************************************************************************/ - -void ViewShell::SetZoomFactor(const Fraction& rZoomX, const Fraction&) -{ - long nZoom = (long)((double) rZoomX * 100); - SetZoom(nZoom); -} - - -/************************************************************************* -|* -|* Aktives Fenster setzen -|* -\************************************************************************/ - -void ViewShell::SetActiveWindow (::sd::Window* pWin) -{ - SfxViewShell* pViewShell = GetViewShell(); - OSL_ASSERT (pViewShell!=NULL); - - if (pViewShell->GetWindow() != pWin) - { - // #i31551# was wrong, it may have been a problem with the repaint at that time. - // For transparent form controls, it is necessary to have that flag set, all apps - // do set it. Enabling again. - if (pWin) - { - pWin->EnableChildTransparentMode(); - } - } - - if (mpActiveWindow != pWin) - mpActiveWindow = pWin; - - // The rest of this function is not guarded anymore against calling this - // method with an already active window because the functions may still - // point to the old window when the new one has already been assigned to - // pWindow elsewhere. - ::sd::View* pView = GetView(); - if (pView) - { - pView->SetActualWin(pWin); - } - if(HasCurrentFunction()) - { - GetCurrentFunction()->SetWindow(pWin); - } -} - - - -/************************************************************************* -|* -|* RequestHelp event -|* -\************************************************************************/ - -sal_Bool ViewShell::RequestHelp(const HelpEvent& rHEvt, ::sd::Window*) -{ - sal_Bool bReturn = sal_False; - - if (rHEvt.GetMode()) - { - if( GetView() ) - bReturn = GetView()->getSmartTags().RequestHelp(rHEvt); - - if(!bReturn && HasCurrentFunction()) - { - bReturn = GetCurrentFunction()->RequestHelp(rHEvt); - } - } - - return(bReturn); -} - - - - -FrameView* ViewShell::GetFrameView (void) -{ - return mpFrameView; -} - - - - -void ViewShell::SetFrameView (FrameView* pNewFrameView) -{ - mpFrameView = pNewFrameView; - ReadFrameViewData (mpFrameView); -} - - - - -/************************************************************************* -|* -|* Read FrameViews data and set actual views data -|* -\************************************************************************/ - -void ViewShell::ReadFrameViewData(FrameView*) -{ -} - - - -/************************************************************************* -|* -|* Write actual views data to FrameView -|* -\************************************************************************/ - -void ViewShell::WriteFrameViewData() -{ -} - -/************************************************************************* -|* -|* OLE-Object aktivieren -|* -\************************************************************************/ - -sal_Bool ViewShell::ActivateObject(SdrOle2Obj* pObj, long nVerb) -{ - ErrCode aErrCode = 0; - - SfxErrorContext aEC(ERRCTX_SO_DOVERB, GetActiveWindow(), RID_SO_ERRCTX); - sal_Bool bAbort = sal_False; - GetDocSh()->SetWaitCursor( sal_True ); - SfxViewShell* pViewShell = GetViewShell(); - OSL_ASSERT (pViewShell!=NULL); - bool bChangeDefaultsForChart = false; - - uno::Reference < embed::XEmbeddedObject > xObj = pObj->GetObjRef(); - if ( !xObj.is() ) - { - /********************************************************** - * Leeres OLE-Objekt mit OLE-Objekt versehen - **********************************************************/ - String aName = pObj->GetProgName(); - ::rtl::OUString aObjName; - SvGlobalName aClass; - - if( aName.EqualsAscii( "StarChart" ) || aName.EqualsAscii("StarOrg") ) - { - if( SvtModuleOptions().IsChart() ) - { - aClass = SvGlobalName( SO3_SCH_CLASSID ); - bChangeDefaultsForChart = true; - } - } - else if( aName.EqualsAscii( "StarCalc" )) - { - if( SvtModuleOptions().IsCalc() ) - aClass = SvGlobalName( SO3_SC_CLASSID ); - } - else if( aName.EqualsAscii( "StarMath" )) - { - if( SvtModuleOptions().IsMath() ) - aClass = SvGlobalName( SO3_SM_CLASSID ); - } - - if ( aClass != SvGlobalName() ) - xObj = GetDocSh()->GetEmbeddedObjectContainer().CreateEmbeddedObject( aClass.GetByteSequence(), aObjName ); - - if( !xObj.is() ) - { - aName = String(); - - // Dialog "OLE-Objekt einfuegen" aufrufen - GetDocSh()->SetWaitCursor( sal_False ); - pViewShell->GetViewFrame()->GetDispatcher()->Execute( - SID_INSERT_OBJECT, - SFX_CALLMODE_SYNCHRON | SFX_CALLMODE_RECORD); - xObj = pObj->GetObjRef(); - GetDocSh()->SetWaitCursor( sal_True ); - - if (!xObj.is()) - { - bAbort = sal_True; - } - } - - if ( xObj.is() ) - { - /****************************************************** - * OLE-Objekt ist nicht mehr leer - ******************************************************/ - pObj->SetEmptyPresObj(sal_False); - pObj->SetOutlinerParaObject(NULL); - pObj->SetGraphic(NULL); - - /****************************************************** - * Das leere OLE-Objekt bekommt ein neues IPObj - ******************************************************/ - if (aName.Len()) - { - pObj->SetObjRef(xObj); - pObj->SetName(aObjName); - pObj->SetPersistName(aObjName); - } - else - { - // Das Einfuegen hat der Dialog schon gemacht - pObj->SetObjRef(xObj); - } - - Rectangle aRect = pObj->GetLogicRect(); - - if ( pObj->GetAspect() != embed::Aspects::MSOLE_ICON ) - { - awt::Size aSz; - aSz.Width = aRect.GetWidth(); - aSz.Height = aRect.GetHeight(); - xObj->setVisualAreaSize( pObj->GetAspect(), aSz ); - } - - GetViewShellBase().SetVerbs( xObj->getSupportedVerbs() ); - - nVerb = SVVERB_SHOW; - } - else - { - aErrCode = ERRCODE_SFX_OLEGENERAL; - } - } - - if( aErrCode == 0 ) - { - ::sd::View* pView = GetView(); - - if (pView->IsTextEdit()) - { - pView->SdrEndTextEdit(); - } - - SfxInPlaceClient* pSdClient = - static_cast<Client*>(pViewShell->FindIPClient( - pObj->GetObjRef(), GetActiveWindow())); - - if ( !pSdClient ) - { - pSdClient = new Client(pObj, this, GetActiveWindow()); - } - - Rectangle aRect = pObj->GetLogicRect(); - Size aDrawSize = aRect.GetSize(); - - MapMode aMapMode( GetDoc()->GetScaleUnit() ); - Size aObjAreaSize = pObj->GetOrigObjSize( &aMapMode ); - if( pObj->IsChart() ) //charts never should be stretched see #i84323# for example - aObjAreaSize = aDrawSize; - - Fraction aScaleWidth (aDrawSize.Width(), aObjAreaSize.Width() ); - Fraction aScaleHeight(aDrawSize.Height(), aObjAreaSize.Height() ); - aScaleWidth.ReduceInaccurate(10); // kompatibel zum SdrOle2Obj - aScaleHeight.ReduceInaccurate(10); - pSdClient->SetSizeScale(aScaleWidth, aScaleHeight); - - // sichtbarer Ausschnitt wird nur inplace veraendert! - aRect.SetSize(aObjAreaSize); - // the object area size must be set after scaling, since it triggers the resizing - pSdClient->SetObjArea(aRect); - - if( bChangeDefaultsForChart && xObj.is()) - { - AdaptDefaultsForChart( xObj ); - } - - pSdClient->DoVerb(nVerb); // ErrCode wird ggf. vom Sfx ausgegeben - pViewShell->GetViewFrame()->GetBindings().Invalidate( - SID_NAVIGATOR_STATE, sal_True, sal_False); - } - - GetDocSh()->SetWaitCursor( sal_False ); - - if (aErrCode != 0 && !bAbort) - { - ErrorHandler::HandleError(* new StringErrorInfo(aErrCode, String() ) ); - } - - return aErrCode == 0; -} - -/************************************************************************* -|* -|* umschliessendes Rechteck aller (Split-)Fenster zurueckgeben. -|* -\************************************************************************/ - -const Rectangle& ViewShell::GetAllWindowRect() -{ - maAllWindowRectangle.SetPos( - mpContentWindow->OutputToScreenPixel(Point(0,0))); - return maAllWindowRectangle; -} - -/************************************************************************* -|* -|* Read user data -|* -\************************************************************************/ -void ViewShell::ReadUserData(const String&) -{ - // Auf an FrameView gemerkte VisArea zoomen - GetViewShell()->GetViewFrame()->GetDispatcher()->Execute(SID_SIZE_VISAREA, - SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD); -} - -/************************************************************************* -|* -|* Write user data -|* -\************************************************************************/ - -void ViewShell::WriteUserData(String&) -{ - // Das Schreiben unserer Daten erfolgt stets in WriteFrameViewData() - WriteFrameViewData(); -} - - -/************************************************************************* -|* -|* Lineale ein- / ausschalten -|* -\************************************************************************/ - -void ViewShell::SetRuler(sal_Bool bRuler) -{ - mbHasRulers = ( bRuler && !GetDocSh()->IsPreview() ); // no rulers on preview mode - - if (mpHorizontalRuler.get() != NULL) - { - if (mbHasRulers) - { - mpHorizontalRuler->Show(); - } - else - { - mpHorizontalRuler->Hide(); - } - } - - if (mpVerticalRuler.get() != NULL) - { - if (mbHasRulers) - { - mpVerticalRuler->Show(); - } - else - { - mpVerticalRuler->Hide(); - } - } - - OSL_ASSERT(GetViewShell()!=NULL); - if (IsMainViewShell()) - GetViewShell()->InvalidateBorder(); -} - -/************************************************************************* -|* -|* AcceptDrop -|* -\************************************************************************/ - -sal_Int8 ViewShell::AcceptDrop ( - const AcceptDropEvent& rEvt, - DropTargetHelper& rTargetHelper, - ::sd::Window* pTargetWindow, - sal_uInt16 nPage, - sal_uInt16 nLayer) -{ - ::sd::View* pView = GetView(); - return( pView ? pView->AcceptDrop( rEvt, rTargetHelper, pTargetWindow, nPage, nLayer ) : DND_ACTION_NONE ); -} - -/************************************************************************* -|* -|* ExecuteDrop -|* -\************************************************************************/ - -sal_Int8 ViewShell::ExecuteDrop ( - const ExecuteDropEvent& rEvt, - DropTargetHelper& rTargetHelper, - ::sd::Window* pTargetWindow, - sal_uInt16 nPage, - sal_uInt16 nLayer) -{ - ::sd::View* pView = GetView(); - return( pView ? pView->ExecuteDrop( rEvt, rTargetHelper, pTargetWindow, nPage, nLayer ) : DND_ACTION_NONE ); -} - -#ifdef _MSC_VER -#pragma optimize ( "", on ) -#endif - -void ViewShell::WriteUserDataSequence ( ::com::sun::star::uno::Sequence < - ::com::sun::star::beans::PropertyValue >& rSequence, sal_Bool bBrowse) -{ - const sal_Int32 nIndex = rSequence.getLength(); - rSequence.realloc( nIndex + 1 ); - - OSL_ASSERT (GetViewShell()!=NULL); - // Get the view id from the view shell in the center pane. This will - // usually be the called view shell, but to be on the safe side we call - // the main view shell explicitly. - sal_uInt16 nViewID (IMPRESS_FACTORY_ID); - if (GetViewShellBase().GetMainViewShell().get() != NULL) - nViewID = GetViewShellBase().GetMainViewShell()->mpImpl->GetViewId(); - rSequence[nIndex].Name = rtl::OUString ( - RTL_CONSTASCII_USTRINGPARAM( sUNO_View_ViewId ) ); - rtl::OUStringBuffer sBuffer ( - rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "view" ) ) ); - sBuffer.append( static_cast<sal_Int32>(nViewID)); - rSequence[nIndex].Value <<= sBuffer.makeStringAndClear(); - - mpFrameView->WriteUserDataSequence( rSequence, bBrowse ); -} - - -void ViewShell::ReadUserDataSequence ( const ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >& rSequence, sal_Bool bBrowse ) -{ - mpFrameView->ReadUserDataSequence( rSequence, bBrowse ); -} - -void ViewShell::VisAreaChanged(const Rectangle& rRect) -{ - OSL_ASSERT (GetViewShell()!=NULL); - GetViewShell()->VisAreaChanged(rRect); -} - -void ViewShell::SetWinViewPos(const Point& rWinPos, bool bUpdate) -{ - if (mpContentWindow.get() != NULL) - { - mpContentWindow->SetWinViewPos(rWinPos); - - if ( bUpdate ) - { - mpContentWindow->UpdateMapOrigin(); - mpContentWindow->Invalidate(); - } - } - - if (mbHasRulers) - { - UpdateHRuler(); - UpdateVRuler(); - } - - UpdateScrollBars(); - - Size aVisSizePixel = GetActiveWindow()->GetOutputSizePixel(); - Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0), aVisSizePixel) ); - VisAreaChanged(aVisAreaWin); - - ::sd::View* pView = GetView(); - if (pView) - { - pView->VisAreaChanged(GetActiveWindow()); - } -} - -Point ViewShell::GetWinViewPos() const -{ - return mpContentWindow->GetWinViewPos(); -} - -Point ViewShell::GetViewOrigin() const -{ - return mpContentWindow->GetViewOrigin(); -} - -void ViewShell::AdaptDefaultsForChart( - const uno::Reference < embed::XEmbeddedObject > & xEmbObj ) -{ - if( xEmbObj.is()) - { - uno::Reference< chart2::XChartDocument > xChartDoc( xEmbObj->getComponent(), uno::UNO_QUERY ); - OSL_ENSURE( xChartDoc.is(), "Trying to set chart property to non-chart OLE" ); - if( !xChartDoc.is()) - return; - - try - { - // set background to transparent (none) - uno::Reference< beans::XPropertySet > xPageProp( xChartDoc->getPageBackground()); - if( xPageProp.is()) - xPageProp->setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("FillStyle")), - uno::makeAny( drawing::FillStyle_NONE )); - // set no border - if( xPageProp.is()) - xPageProp->setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("LineStyle")), - uno::makeAny( drawing::LineStyle_NONE )); - } - catch( const uno::Exception & ) - { - OSL_FAIL( "Exception caught in AdaptDefaultsForChart" ); - } - } -} - -} // end of namespace sd - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |