diff options
Diffstat (limited to 'sd/source/ui/view/drviews1.cxx')
-rw-r--r-- | sd/source/ui/view/drviews1.cxx | 1366 |
1 files changed, 0 insertions, 1366 deletions
diff --git a/sd/source/ui/view/drviews1.cxx b/sd/source/ui/view/drviews1.cxx deleted file mode 100644 index 2966dc6a3..000000000 --- a/sd/source/ui/view/drviews1.cxx +++ /dev/null @@ -1,1366 +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 "DrawViewShell.hxx" -#include "ViewShellImplementation.hxx" - -#include "DrawController.hxx" -#include <com/sun/star/embed/EmbedStates.hpp> - -#include "comphelper/anytostring.hxx" -#include "comphelper/scopeguard.hxx" -#include "cppuhelper/exc_hlp.hxx" -#include "rtl/ref.hxx" - -#include <svx/svxids.hrc> -#include <svx/svdpagv.hxx> -#include <sfx2/viewfrm.hxx> -#include <sfx2/bindings.hxx> -#include <svx/svdoole2.hxx> -#include <sfx2/dispatch.hxx> -#include <vcl/scrbar.hxx> -#include <svx/svdograf.hxx> -#include <svx/svdopage.hxx> -#include <vcl/msgbox.hxx> -#include <sot/storage.hxx> -#include <svx/fmshell.hxx> -#include <svx/globl3d.hxx> -#include <svx/fmglob.hxx> -#include <editeng/outliner.hxx> -#include <svx/dialogs.hrc> - -#include "view/viewoverlaymanager.hxx" - -#include "glob.hrc" -#include "app.hrc" -#include "res_bmp.hrc" -#include "strings.hrc" -#include "helpids.h" - -#include "app.hxx" -#include "fupoor.hxx" -#include "sdresid.hxx" -#include "fusel.hxx" -#include "sdpage.hxx" -#include "FrameView.hxx" -#include "stlpool.hxx" -#include "Window.hxx" -#include "drawview.hxx" -#include "drawdoc.hxx" -#include "DrawDocShell.hxx" -#include "Ruler.hxx" -#include "Client.hxx" -#include "slideshow.hxx" -#include "optsitem.hxx" -#include "fusearch.hxx" -#include "Outliner.hxx" -#include "AnimationChildWindow.hxx" -#include "SdUnoDrawView.hxx" -#include "ToolBarManager.hxx" -#include "FormShellManager.hxx" -#include "ViewShellBase.hxx" -#include "LayerDialogChildWindow.hxx" -#include "LayerTabBar.hxx" -#include "ViewShellManager.hxx" -#include "ViewShellHint.hxx" - -#include <sfx2/request.hxx> -#include <boost/bind.hpp> - -#ifdef _MSC_VER -#if (_MSC_VER < 1400) -#pragma optimize ( "", off ) -#endif -#endif - -using namespace com::sun::star; - -namespace sd { - -void DrawViewShell::Activate(sal_Bool bIsMDIActivate) -{ - ViewShell::Activate(bIsMDIActivate); -} - -void DrawViewShell::UIActivating( SfxInPlaceClient* pCli ) -{ - ViewShell::UIActivating(pCli); - - // Disable own controls - maTabControl.Disable(); - if (GetLayerTabControl() != NULL) - GetLayerTabControl()->Disable(); -} - -void DrawViewShell::UIDeactivated( SfxInPlaceClient* pCli ) -{ - // Enable own controls - maTabControl.Enable(); - if (GetLayerTabControl() != NULL) - GetLayerTabControl()->Enable(); - - ViewShell::UIDeactivated(pCli); -} - - -/************************************************************************* -|* -|* Deactivate() -|* -\************************************************************************/ - -void DrawViewShell::Deactivate(sal_Bool bIsMDIActivate) -{ - ViewShell::Deactivate(bIsMDIActivate); -} - -namespace -{ - class LockUI - { - private: - void Lock(bool bLock); - SfxViewFrame *mpFrame; - public: - LockUI(SfxViewFrame *pFrame) : mpFrame(pFrame) { Lock(true); } - ~LockUI() { Lock(false); } - - }; - - void LockUI::Lock(bool bLock) - { - if (!mpFrame) - return; - mpFrame->Enable( !bLock ); - } -} - -/************************************************************************* -|* -|* Wird gerufen, wenn sich der Selektionszustand der View aendert -|* -\************************************************************************/ -void DrawViewShell::SelectionHasChanged (void) -{ - Invalidate(); - - //Update3DWindow(); // 3D-Controller - SfxBoolItem aItem( SID_3D_STATE, sal_True ); - GetViewFrame()->GetDispatcher()->Execute( - SID_3D_STATE, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, &aItem, 0L ); - - SdrOle2Obj* pOleObj = NULL; - - if ( mpDrawView->AreObjectsMarked() ) - { - const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList(); - - if (rMarkList.GetMarkCount() == 1) - { - SdrMark* pMark = rMarkList.GetMark(0); - SdrObject* pObj = pMark->GetMarkedSdrObj(); - - sal_uInt32 nInv = pObj->GetObjInventor(); - sal_uInt16 nSdrObjKind = pObj->GetObjIdentifier(); - - if (nInv == SdrInventor && nSdrObjKind == OBJ_OLE2) - { - pOleObj = (SdrOle2Obj*) pObj; - UpdateIMapDlg( pObj ); - } - else if (nSdrObjKind == OBJ_GRAF) - UpdateIMapDlg( pObj ); - } - } - - ViewShellBase& rBase = GetViewShellBase(); - rBase.SetVerbs( uno::Sequence< embed::VerbDescriptor >() ); - - try - { - Client* pIPClient = static_cast<Client*>(rBase.GetIPClient()); - if ( pIPClient && pIPClient->IsObjectInPlaceActive() ) - { - /********************************************************************** - * Ggf. OLE-Objekt beruecksichtigen und deaktivieren - **********************************************************************/ - - // this means we recently deselected an inplace active ole object so - // we need to deselect it now - if (!pOleObj) - { - //#i47279# disable frame until after object has completed unload - LockUI aUILock(GetViewFrame()); - pIPClient->DeactivateObject(); - //HMHmpDrView->ShowMarkHdl(); - } - else - { - uno::Reference < embed::XEmbeddedObject > xObj = pOleObj->GetObjRef(); - if ( xObj.is() ) - { - rBase.SetVerbs( xObj->getSupportedVerbs() ); - } - else - { - rBase.SetVerbs( uno::Sequence < embed::VerbDescriptor >() ); - } - } - } - else - { - if ( pOleObj ) - { - uno::Reference < embed::XEmbeddedObject > xObj = pOleObj->GetObjRef(); - if ( xObj.is() ) - { - rBase.SetVerbs( xObj->getSupportedVerbs() ); - } - else - { - rBase.SetVerbs( uno::Sequence < embed::VerbDescriptor >() ); - } - } - else - { - rBase.SetVerbs( uno::Sequence < embed::VerbDescriptor >() ); - } - } - } - catch( ::com::sun::star::uno::Exception& e ) - { - (void)e; - OSL_FAIL( - (rtl::OString("sd::DrawViewShell::SelectionHasChanged(), " - "exception caught: ") + - rtl::OUStringToOString( - comphelper::anyToString( cppu::getCaughtException() ), - RTL_TEXTENCODING_UTF8 )).getStr() ); - } - - if( HasCurrentFunction() ) - { - GetCurrentFunction()->SelectionHasChanged(); - } - else - { - GetViewShellBase().GetToolBarManager()->SelectionHasChanged(*this,*mpDrawView); - } - - // Invalidate for every subshell - GetViewShellBase().GetViewShellManager()->InvalidateAllSubShells(this); - - mpDrawView->UpdateSelectionClipboard( sal_False ); - - GetViewShellBase().GetDrawController().FireSelectionChangeListener(); -} - - -/************************************************************************* -|* -|* Zoomfaktor setzen -|* -\************************************************************************/ - -void DrawViewShell::SetZoom( long nZoom ) -{ - // Make sure that the zoom factor will not be recalculated on - // following window resizings. - mbZoomOnPage = sal_False; - ViewShell::SetZoom( nZoom ); - GetViewFrame()->GetBindings().Invalidate( SID_ATTR_ZOOM ); - GetViewFrame()->GetBindings().Invalidate( SID_ATTR_ZOOMSLIDER ); - mpViewOverlayManager->onZoomChanged(); -} - -/************************************************************************* -|* -|* Zoomrechteck fuer aktives Fenster einstellen -|* -\************************************************************************/ - -void DrawViewShell::SetZoomRect( const Rectangle& rZoomRect ) -{ - ViewShell::SetZoomRect( rZoomRect ); - GetViewFrame()->GetBindings().Invalidate( SID_ATTR_ZOOM ); - GetViewFrame()->GetBindings().Invalidate( SID_ATTR_ZOOMSLIDER ); - mpViewOverlayManager->onZoomChanged(); -} - -/************************************************************************* -|* -|* PrepareClose, ggfs. Texteingabe beenden, damit andere Viewshells ein -|* aktualisiertes Textobjekt vorfinden -|* -\************************************************************************/ - -sal_uInt16 DrawViewShell::PrepareClose( sal_Bool bUI, sal_Bool bForBrowsing ) -{ - if ( ViewShell::PrepareClose(bUI, bForBrowsing) != sal_True ) - return sal_False; - - sal_Bool bRet = sal_True; - - if( bRet && HasCurrentFunction() ) - { - sal_uInt16 nID = GetCurrentFunction()->GetSlotID(); - if (nID == SID_TEXTEDIT || nID == SID_ATTR_CHAR) - { - mpDrawView->SdrEndTextEdit(); - } - } - else if( !bRet ) - { - maCloseTimer.SetTimeoutHdl( LINK( this, DrawViewShell, CloseHdl ) ); - maCloseTimer.SetTimeout( 20 ); - maCloseTimer.Start(); - } - - return bRet; -} - -/************************************************************************* -|* -|* Status (Enabled/Disabled) von Menue-SfxSlots setzen -|* -\************************************************************************/ - -void DrawViewShell::ChangeEditMode(EditMode eEMode, bool bIsLayerModeActive) -{ - if (meEditMode != eEMode || mbIsLayerModeActive != bIsLayerModeActive) - { - ViewShellManager::UpdateLock aLock (GetViewShellBase().GetViewShellManager()); - - sal_uInt16 nActualPageNum = 0; - - GetViewShellBase().GetDrawController().FireChangeEditMode (eEMode == EM_MASTERPAGE); - GetViewShellBase().GetDrawController().FireChangeLayerMode (bIsLayerModeActive); - - if ( mpDrawView->IsTextEdit() ) - { - mpDrawView->SdrEndTextEdit(); - } - - LayerTabBar* pLayerBar = GetLayerTabControl(); - if (pLayerBar != NULL) - pLayerBar->EndEditMode(); - maTabControl.EndEditMode(); - - if (mePageKind == PK_HANDOUT) - { - // Bei Handzetteln nur MasterPage zulassen - eEMode = EM_MASTERPAGE; - } - - meEditMode = eEMode; - mbIsLayerModeActive = bIsLayerModeActive; - - // Determine whether to show the master view toolbar. The master - // page mode has to be active and the shell must not be a handout - // view. - bool bShowMasterViewToolbar (meEditMode == EM_MASTERPAGE - && GetShellType() != ViewShell::ST_HANDOUT); - - // If the master view toolbar is not shown we hide it before - // switching the edit mode. - if (::sd::ViewShell::mpImpl->mbIsInitialized - && IsMainViewShell() - && ! bShowMasterViewToolbar) - { - GetViewShellBase().GetToolBarManager()->ResetToolBars(ToolBarManager::TBG_MASTER_MODE); - } - - if (meEditMode == EM_PAGE) - { - /****************************************************************** - * PAGEMODE - ******************************************************************/ - - maTabControl.Clear(); - - SdPage* pPage; - String aPageName; - sal_uInt16 nPageCnt = GetDoc()->GetSdPageCount(mePageKind); - - for (sal_uInt16 i = 0; i < nPageCnt; i++) - { - pPage = GetDoc()->GetSdPage(i, mePageKind); - aPageName = pPage->GetName(); - maTabControl.InsertPage(i + 1, aPageName); - - if ( pPage->IsSelected() && nActualPageNum == 0 ) - { - nActualPageNum = i; - } - } - - maTabControl.SetCurPageId(nActualPageNum + 1); - - SwitchPage(nActualPageNum); - } - else - { - /****************************************************************** - * MASTERPAGE - ******************************************************************/ - GetViewFrame()->SetChildWindow( - AnimationChildWindow::GetChildWindowId(), sal_False ); - - if (!mpActualPage) - { - // Sofern es keine mpActualPage gibt, wird die erste genommen - mpActualPage = GetDoc()->GetSdPage(0, mePageKind); - } - - maTabControl.Clear(); - sal_uInt16 nActualMasterPageNum = 0; - sal_uInt16 nMasterPageCnt = GetDoc()->GetMasterSdPageCount(mePageKind); - - for (sal_uInt16 i = 0; i < nMasterPageCnt; i++) - { - SdPage* pMaster = GetDoc()->GetMasterSdPage(i, mePageKind); - String aLayoutName(pMaster->GetLayoutName()); - aLayoutName.Erase(aLayoutName.SearchAscii(SD_LT_SEPARATOR)); - - maTabControl.InsertPage(i + 1, aLayoutName); - - if (&(mpActualPage->TRG_GetMasterPage()) == pMaster) - { - nActualMasterPageNum = i; - } - } - - maTabControl.SetCurPageId(nActualMasterPageNum + 1); - SwitchPage(nActualMasterPageNum); - } - - // If the master view toolbar is to be shown we turn it on after the - // edit mode has been changed. - if (::sd::ViewShell::mpImpl->mbIsInitialized - && IsMainViewShell() - && bShowMasterViewToolbar) - { - GetViewShellBase().GetToolBarManager()->SetToolBar( - ToolBarManager::TBG_MASTER_MODE, - ToolBarManager::msMasterViewToolBar); - } - - if ( ! mbIsLayerModeActive) - { - maTabControl.Show(); - // Set the tab control only for draw pages. For master page - // this has been done already above. - if (meEditMode == EM_PAGE) - maTabControl.SetCurPageId (nActualPageNum + 1); - } - /*AF: The LayerDialogChildWindow is not used anymore (I hope). - if (GetViewFrame()->KnowsChildWindow( - LayerDialogChildWindow::GetChildWindowId())) - { - GetViewFrame()->SetChildWindow( - LayerDialogChildWindow::GetChildWindowId(), - IsLayerModeActive()); - } - */ - ResetActualLayer(); - - Invalidate( SID_PAGEMODE ); - Invalidate( SID_LAYERMODE ); - Invalidate( SID_MASTERPAGE ); - Invalidate( SID_DELETE_MASTER_PAGE ); - Invalidate( SID_DELETE_PAGE ); - Invalidate( SID_SLIDE_MASTERPAGE ); - Invalidate( SID_TITLE_MASTERPAGE ); - Invalidate( SID_NOTES_MASTERPAGE ); - Invalidate( SID_HANDOUT_MASTERPAGE ); - } -} - - - - -bool DrawViewShell::IsLayerModeActive (void) const -{ - return mbIsLayerModeActive; -} - - - - -/************************************************************************* -|* -|* Groesse des TabControls und der ModeButtons zurueckgeben -|* -\************************************************************************/ - -long DrawViewShell::GetHCtrlWidth() -{ - // return maTabControl.GetSizePixel().Width(); - return 0; -} - - -/************************************************************************* -|* -|* Horizontales Lineal erzeugen -|* -\************************************************************************/ - -SvxRuler* DrawViewShell::CreateHRuler (::sd::Window* pWin, sal_Bool bIsFirst) -{ - Ruler* pRuler; - WinBits aWBits; - sal_uInt16 nFlags = SVXRULER_SUPPORT_OBJECT; - - if ( bIsFirst ) - { - aWBits = WB_HSCROLL | WB_3DLOOK | WB_BORDER | WB_EXTRAFIELD; - nFlags |= ( SVXRULER_SUPPORT_SET_NULLOFFSET | - SVXRULER_SUPPORT_TABS | - SVXRULER_SUPPORT_PARAGRAPH_MARGINS ); // Neu - } - else - aWBits = WB_HSCROLL | WB_3DLOOK | WB_BORDER; - - pRuler = new Ruler (*this, GetParentWindow(), pWin, nFlags, - GetViewFrame()->GetBindings(), aWBits); - pRuler->SetSourceUnit(pWin->GetMapMode().GetMapUnit()); - - // Metric ... - sal_uInt16 nMetric = (sal_uInt16)GetDoc()->GetUIUnit(); - - if( nMetric == 0xffff ) - nMetric = (sal_uInt16)GetViewShellBase().GetViewFrame()->GetDispatcher()->GetModule()->GetFieldUnit(); - - pRuler->SetUnit( FieldUnit( nMetric ) ); - - // ... und auch DefTab am Lineal einstellen - pRuler->SetDefTabDist( GetDoc()->GetDefaultTabulator() ); // Neu - - Fraction aUIScale(pWin->GetMapMode().GetScaleX()); - aUIScale *= GetDoc()->GetUIScale(); - pRuler->SetZoom(aUIScale); - - return pRuler; -} - -/************************************************************************* -|* -|* Vertikales Lineal erzeugen -|* -\************************************************************************/ - -SvxRuler* DrawViewShell::CreateVRuler(::sd::Window* pWin) -{ - Ruler* pRuler; - WinBits aWBits = WB_VSCROLL | WB_3DLOOK | WB_BORDER; - sal_uInt16 nFlags = SVXRULER_SUPPORT_OBJECT; - - pRuler = new Ruler(*this, GetParentWindow(), pWin, nFlags, - GetViewFrame()->GetBindings(), aWBits); - pRuler->SetSourceUnit(pWin->GetMapMode().GetMapUnit()); - - // Metric same as HRuler, use document setting - sal_uInt16 nMetric = (sal_uInt16)GetDoc()->GetUIUnit(); - - if( nMetric == 0xffff ) - nMetric = (sal_uInt16)GetViewShellBase().GetViewFrame()->GetDispatcher()->GetModule()->GetFieldUnit(); - - pRuler->SetUnit( FieldUnit( nMetric ) ); - - Fraction aUIScale(pWin->GetMapMode().GetScaleY()); - aUIScale *= GetDoc()->GetUIScale(); - pRuler->SetZoom(aUIScale); - - return pRuler; -} - -/************************************************************************* -|* -|* Horizontales Lineal aktualisieren -|* -\************************************************************************/ - -void DrawViewShell::UpdateHRuler() -{ - Invalidate( SID_ATTR_LONG_LRSPACE ); - Invalidate( SID_RULER_PAGE_POS ); - Invalidate( SID_RULER_OBJECT ); - Invalidate( SID_RULER_TEXT_RIGHT_TO_LEFT ); - - if (mpHorizontalRuler.get() != NULL) - mpHorizontalRuler->ForceUpdate(); -} - -/************************************************************************* -|* -|* Vertikales Lineal aktualisieren -|* -\************************************************************************/ - -void DrawViewShell::UpdateVRuler() -{ - Invalidate( SID_ATTR_LONG_LRSPACE ); - Invalidate( SID_RULER_PAGE_POS ); - Invalidate( SID_RULER_OBJECT ); - - if (mpVerticalRuler.get() != NULL) - mpVerticalRuler->ForceUpdate(); -} - -/************************************************************************* -|* -|* Metrik setzen -|* -\************************************************************************/ - -void DrawViewShell::SetUIUnit(FieldUnit eUnit) -{ - ViewShell::SetUIUnit(eUnit); -} - -/************************************************************************* -|* -|* TabControl nach Splitteraenderung aktualisieren -|* -\************************************************************************/ - -IMPL_LINK( DrawViewShell, TabSplitHdl, TabBar *, pTab ) -{ - const long int nMax = maViewSize.Width() - maScrBarWH.Width() - - maTabControl.GetPosPixel().X() ; - - Size aTabSize = maTabControl.GetSizePixel(); - aTabSize.Width() = Min(pTab->GetSplitSize(), (long)(nMax-1)); - - maTabControl.SetSizePixel(aTabSize); - GetLayerTabControl()->SetSizePixel(aTabSize); - - Point aPos = maTabControl.GetPosPixel(); - aPos.X() += aTabSize.Width(); - - Size aScrSize(nMax - aTabSize.Width(), maScrBarWH.Height()); - mpHorizontalScrollBar->SetPosSizePixel(aPos, aScrSize); - - return 0; -} - -/// inherited from sd::ViewShell -SdPage* DrawViewShell::getCurrentPage() const -{ - const sal_Int32 nPageCount = (meEditMode == EM_PAGE)? - GetDoc()->GetSdPageCount(mePageKind): - GetDoc()->GetMasterSdPageCount(mePageKind); - - sal_Int32 nCurrentPage = maTabControl.GetCurPageId() - 1; - DBG_ASSERT( (nPageCount>0) && (nCurrentPage<nPageCount), "sd::DrawViewShell::getCurrentPage(), illegal page index!" ); - if( (nPageCount < 0) || (nCurrentPage>=nPageCount) ) - nCurrentPage = 0; // play safe here - - if (meEditMode == EM_PAGE) - { - return GetDoc()->GetSdPage((sal_uInt16)nCurrentPage, mePageKind); - } - else // EM_MASTERPAGE - { - return GetDoc()->GetMasterSdPage((sal_uInt16)nCurrentPage, mePageKind); - } -} - -/************************************************************************* -|* -|* neue aktuelle Seite auswaehlen, falls sich die Seitenfolge geaendert -|* hat (z. B. durch Undo) -|* -\************************************************************************/ - -void DrawViewShell::ResetActualPage() -{ - if (!GetDoc()) - return; - - sal_uInt16 nCurrentPage = maTabControl.GetCurPageId() - 1; - sal_uInt16 nPageCount = (meEditMode == EM_PAGE)?GetDoc()->GetSdPageCount(mePageKind):GetDoc()->GetMasterSdPageCount(mePageKind); - if (nPageCount > 0) - nCurrentPage = Min((sal_uInt16)(nPageCount - 1), nCurrentPage); - else - nCurrentPage = 0; - - if (meEditMode == EM_PAGE) - { - - // Update fuer TabControl - maTabControl.Clear(); - - SdPage* pPage = NULL; - String aPageName; - - for (sal_uInt16 i = 0; i < nPageCount; i++) - { - pPage = GetDoc()->GetSdPage(i, mePageKind); - aPageName = pPage->GetName(); - maTabControl.InsertPage(i + 1, aPageName); - - // Selektionskennungen der Seiten korrigieren - GetDoc()->SetSelected(pPage, i == nCurrentPage); - } - - maTabControl.SetCurPageId(nCurrentPage + 1); - } - else // EM_MASTERPAGE - { - SdPage* pActualPage = GetDoc()->GetMasterSdPage(nCurrentPage, mePageKind); - maTabControl.Clear(); - sal_uInt16 nActualMasterPageNum = 0; - - sal_uInt16 nMasterPageCnt = GetDoc()->GetMasterSdPageCount(mePageKind); - for (sal_uInt16 i = 0; i < nMasterPageCnt; i++) - { - SdPage* pMaster = GetDoc()->GetMasterSdPage(i, mePageKind); - String aLayoutName(pMaster->GetLayoutName()); - aLayoutName.Erase(aLayoutName.SearchAscii(SD_LT_SEPARATOR)); - maTabControl.InsertPage(i + 1, aLayoutName); - - if (pActualPage == pMaster) - nActualMasterPageNum = i; - } - - maTabControl.SetCurPageId(nActualMasterPageNum + 1); - SwitchPage(nActualMasterPageNum); - } - - GetViewFrame()->GetDispatcher()->Execute(SID_SWITCHPAGE, - SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD); -} - -/************************************************************************* -|* -|* Verb auf OLE-Objekt anwenden -|* -\************************************************************************/ - - -ErrCode DrawViewShell::DoVerb(long nVerb) -{ - if ( mpDrawView->AreObjectsMarked() ) - { - const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList(); - - if (rMarkList.GetMarkCount() == 1) - { - SdrMark* pMark = rMarkList.GetMark(0); - SdrObject* pObj = pMark->GetMarkedSdrObj(); - - sal_uInt32 nInv = pObj->GetObjInventor(); - sal_uInt16 nSdrObjKind = pObj->GetObjIdentifier(); - - if (nInv == SdrInventor && nSdrObjKind == OBJ_OLE2) - { - ActivateObject( (SdrOle2Obj*) pObj, nVerb); - } - } - } - - return 0; -} - - -/************************************************************************* -|* -|* OLE-Object aktivieren -|* -\************************************************************************/ - -sal_Bool DrawViewShell::ActivateObject(SdrOle2Obj* pObj, long nVerb) -{ - sal_Bool bActivated = sal_False; - - if ( !GetDocSh()->IsUIActive() ) - { - ToolBarManager::UpdateLock aLock (GetViewShellBase().GetToolBarManager()); - - bActivated = ViewShell::ActivateObject(pObj, nVerb); - - OSL_ASSERT(GetViewShell()!=NULL); - Client* pClient = static_cast<Client*>(GetViewShell()->GetIPClient()); - if (pClient) - pClient->SetSdrGrafObj(NULL); - } - - return(bActivated); -} - -/************************************************************************* -|* -|* Auf gewuenschte Seite schalten -|* Der Parameter nSelectedPage bezieht sich auf den aktuellen EditMode -|* -\************************************************************************/ - -void LclResetFlag (bool& rbFlag) {rbFlag = false;} - -sal_Bool DrawViewShell::SwitchPage(sal_uInt16 nSelectedPage) -{ - /** Under some circumstances there are nested calls to SwitchPage() and - may crash the application (activation of form controls when the - shell of the edit view is not on top of the shell stack, see issue - 83888 for details.) Therefore the nested calls are ignored (they - would jump to the wrong page anyway.) - */ - if (mbIsInSwitchPage) - return sal_False; - mbIsInSwitchPage = true; - comphelper::ScopeGuard aGuard (::boost::bind(LclResetFlag, ::boost::ref(mbIsInSwitchPage))); - - if (GetActiveWindow()->IsInPaint()) - { - // Switching the current page while a Paint is being executed is - // dangerous. So, post it for later execution and return. - maAsynchronousSwitchPageCall.Post(::boost::bind( - ::std::mem_fun(&DrawViewShell::SwitchPage), - this, - nSelectedPage)); - return sal_False; - } - - sal_Bool bOK = sal_False; - - // With the current implementation of FuSlideShow there is a problem - // when it dsplays the show in a window: When the show is stopped it - // returns at one point in time SDRPAGE_NOTFOUND as current page index. - // Because FuSlideShow is currently being rewritten this bug is fixed - // here. - // This is not as bad a hack as it may look because making SwitchPage() - // more robust with respect to invalid page numbers is a good thing - // anyway. - if (nSelectedPage == SDRPAGE_NOTFOUND) - { - nSelectedPage = 0; - } - else - { - // Make sure that the given page index points to an existing page. Move - // the index into the valid range if necessary. - sal_uInt16 nPageCount = (meEditMode == EM_PAGE) - ? GetDoc()->GetSdPageCount(mePageKind) - : GetDoc()->GetMasterSdPageCount(mePageKind); - if (nSelectedPage >= nPageCount) - nSelectedPage = nPageCount-1; - } - - if (IsSwitchPageAllowed()) - { - ModifyGuard aGuard2( GetDoc() ); - - bOK = sal_True; - - if (mpActualPage) - { - SdPage* pNewPage = NULL; - - if (meEditMode == EM_MASTERPAGE) - { - if( GetDoc()->GetMasterSdPageCount(mePageKind) > nSelectedPage ) - pNewPage = GetDoc()->GetMasterSdPage(nSelectedPage, mePageKind); - - if( pNewPage ) - { - SdrPageView* pPV = mpDrawView->GetSdrPageView(); - - String sPageText (pNewPage->GetLayoutName()); - sPageText.Erase(sPageText.SearchAscii(SD_LT_SEPARATOR)); - if (pPV - && pNewPage == dynamic_cast< SdPage* >( pPV->GetPage() ) - && sPageText == maTabControl.GetPageText(nSelectedPage+1)) - { - // this slide is already visible - return sal_True; - } - } - } - else - { - OSL_ASSERT(mpFrameView!=NULL); - mpFrameView->SetSelectedPage(nSelectedPage); - - if (GetDoc()->GetSdPageCount(mePageKind) > nSelectedPage) - pNewPage = GetDoc()->GetSdPage(nSelectedPage, mePageKind); - - if (mpActualPage == pNewPage) - { - SdrPageView* pPV = mpDrawView->GetSdrPageView(); - - SdPage* pCurrentPage = dynamic_cast< SdPage* >( pPV->GetPage()); - if (pPV - && pNewPage == pCurrentPage - && pNewPage->GetName() == maTabControl.GetPageText(nSelectedPage+1)) - { - // this slide is already visible - return sal_True; - } - } - } - } - - if( mpDrawView ) - mpDrawView->SdrEndTextEdit(); - - mpActualPage = NULL; - - if (meEditMode == EM_PAGE) - { - mpActualPage = GetDoc()->GetSdPage(nSelectedPage, mePageKind); - } - else - { - SdPage* pMaster = GetDoc()->GetMasterSdPage(nSelectedPage, mePageKind); - - // Passt die selektierte Seite zur MasterPage? - sal_uInt16 nPageCount = GetDoc()->GetSdPageCount(mePageKind); - for (sal_uInt16 i = 0; i < nPageCount; i++) - { - SdPage* pPage = GetDoc()->GetSdPage(i, mePageKind); - if(pPage && pPage->IsSelected() && pMaster == &(pPage->TRG_GetMasterPage())) - { - mpActualPage = pPage; - break; - } - } - - if (!mpActualPage) - { - // Die erste Seite nehmen, welche zur MasterPage passt - for (sal_uInt16 i = 0; i < nPageCount; i++) - { - SdPage* pPage = GetDoc()->GetSdPage(i, mePageKind); - if(pPage && pMaster == &(pPage->TRG_GetMasterPage())) - { - mpActualPage = pPage; - break; - } - } - } - } - - for (sal_uInt16 i = 0; i < GetDoc()->GetSdPageCount(mePageKind); i++) - { - // Alle Seiten deselektieren - GetDoc()->SetSelected( GetDoc()->GetSdPage(i, mePageKind), sal_False); - } - - if (!mpActualPage) - { - // Sofern es keine mpActualPage gibt, wird die erste genommen - mpActualPage = GetDoc()->GetSdPage(0, mePageKind); - } - - // diese Seite auch selektieren (mpActualPage zeigt immer auf Zeichenseite, - // nie auf eine Masterpage) - GetDoc()->SetSelected(mpActualPage, sal_True); - - rtl::Reference< sd::SlideShow > xSlideshow( SlideShow::GetSlideShow( GetDoc() ) ); - if( !xSlideshow.is() || !xSlideshow->isRunning() || ( xSlideshow->getAnimationMode() != ANIMATIONMODE_SHOW ) ) - { - // VisArea zuziehen, um ggf. Objekte zu deaktivieren - // !!! only if we are not in presentation mode (#96279) !!! - OSL_ASSERT (GetViewShell()!=NULL); - GetViewShell()->DisconnectAllClients(); - VisAreaChanged(Rectangle(Point(), Size(1, 1))); - } - - if (meEditMode == EM_PAGE) - { - /********************************************************************** - * PAGEMODE - **********************************************************************/ - GetDoc()->SetSelected(mpActualPage, sal_True); - - SdrPageView* pPageView = mpDrawView->GetSdrPageView(); - - if (pPageView) - { - mpFrameView->SetVisibleLayers( pPageView->GetVisibleLayers() ); - mpFrameView->SetPrintableLayers( pPageView->GetPrintableLayers() ); - mpFrameView->SetLockedLayers( pPageView->GetLockedLayers() ); - - if (mePageKind == PK_NOTES) - { - mpFrameView->SetNotesHelpLines( pPageView->GetHelpLines() ); - } - else if (mePageKind == PK_HANDOUT) - { - mpFrameView->SetHandoutHelpLines( pPageView->GetHelpLines() ); - } - else - { - mpFrameView->SetStandardHelpLines( pPageView->GetHelpLines() ); - } - } - - mpDrawView->HideSdrPage(); - mpDrawView->ShowSdrPage(mpActualPage); - GetViewShellBase().GetDrawController().FireSwitchCurrentPage(mpActualPage); - - SdrPageView* pNewPageView = mpDrawView->GetSdrPageView(); - - if (pNewPageView) - { - pNewPageView->SetVisibleLayers( mpFrameView->GetVisibleLayers() ); - pNewPageView->SetPrintableLayers( mpFrameView->GetPrintableLayers() ); - pNewPageView->SetLockedLayers( mpFrameView->GetLockedLayers() ); - - if (mePageKind == PK_NOTES) - { - pNewPageView->SetHelpLines( mpFrameView->GetNotesHelpLines() ); - } - else if (mePageKind == PK_HANDOUT) - { - pNewPageView->SetHelpLines( mpFrameView->GetHandoutHelpLines() ); - } - else - { - pNewPageView->SetHelpLines( mpFrameView->GetStandardHelpLines() ); - } - } - - maTabControl.SetCurPageId(nSelectedPage+1); - String aPageName = mpActualPage->GetName(); - - if (maTabControl.GetPageText(nSelectedPage+1) != aPageName) - { - maTabControl.SetPageText(nSelectedPage+1, aPageName); - } - } - else - { - /********************************************************************** - * MASTERPAGE - **********************************************************************/ - SdrPageView* pPageView = mpDrawView->GetSdrPageView(); - - if (pPageView) - { - mpFrameView->SetVisibleLayers( pPageView->GetVisibleLayers() ); - mpFrameView->SetPrintableLayers( pPageView->GetPrintableLayers() ); - mpFrameView->SetLockedLayers( pPageView->GetLockedLayers() ); - - if (mePageKind == PK_NOTES) - { - mpFrameView->SetNotesHelpLines( pPageView->GetHelpLines() ); - } - else if (mePageKind == PK_HANDOUT) - { - mpFrameView->SetHandoutHelpLines( pPageView->GetHelpLines() ); - } - else - { - mpFrameView->SetStandardHelpLines( pPageView->GetHelpLines() ); - } - } - - mpDrawView->HideSdrPage(); - - SdPage* pMaster = GetDoc()->GetMasterSdPage(nSelectedPage, mePageKind); - - if( !pMaster ) // Falls es diese Page nicht geben sollte - pMaster = GetDoc()->GetMasterSdPage(0, mePageKind); - - sal_uInt16 nNum = pMaster->GetPageNum(); - mpDrawView->ShowSdrPage(mpDrawView->GetModel()->GetMasterPage(nNum)); - - GetViewShellBase().GetDrawController().FireSwitchCurrentPage(pMaster); - - SdrPageView* pNewPageView = mpDrawView->GetSdrPageView(); - - if (pNewPageView) - { - pNewPageView->SetVisibleLayers( mpFrameView->GetVisibleLayers() ); - pNewPageView->SetPrintableLayers( mpFrameView->GetPrintableLayers() ); - pNewPageView->SetLockedLayers( mpFrameView->GetLockedLayers() ); - - if (mePageKind == PK_NOTES) - { - pNewPageView->SetHelpLines( mpFrameView->GetNotesHelpLines() ); - } - else if (mePageKind == PK_HANDOUT) - { - pNewPageView->SetHelpLines( mpFrameView->GetHandoutHelpLines() ); - } - else - { - pNewPageView->SetHelpLines( mpFrameView->GetStandardHelpLines() ); - } - } - - String aLayoutName(pMaster->GetLayoutName()); - aLayoutName.Erase(aLayoutName.SearchAscii(SD_LT_SEPARATOR)); - - maTabControl.SetCurPageId(nSelectedPage+1); - - if (maTabControl.GetPageText(nSelectedPage+1) != aLayoutName) - { - maTabControl.SetPageText(nSelectedPage+1, aLayoutName); - } - - if( mePageKind == PK_HANDOUT ) - { - // set pages for all available handout presentation objects - sd::ShapeList& rShapeList = pMaster->GetPresentationShapeList(); - SdrObject* pObj = 0; - - while( (pObj = rShapeList.getNextShape(pObj)) != 0 ) - { - if( pMaster->GetPresObjKind(pObj) == PRESOBJ_HANDOUT ) - { - // #i105146# We want no content to be displayed for PK_HANDOUT, - // so just never set a page as content - static_cast<SdrPageObj*>(pObj)->SetReferencedPage(0); - } - } - } - } - - Size aVisSizePixel = GetActiveWindow()->GetOutputSizePixel(); - Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0), aVisSizePixel) ); - VisAreaChanged(aVisAreaWin); - mpDrawView->VisAreaChanged(GetActiveWindow()); - - // Damit der Navigator (und das Effekte-Window) das mitbekommt (/-men) - SfxBindings& rBindings = GetViewFrame()->GetBindings(); - rBindings.Invalidate(SID_NAVIGATOR_PAGENAME, sal_True, sal_False); - rBindings.Invalidate(SID_STATUS_PAGE, sal_True, sal_False); - rBindings.Invalidate(SID_DELETE_MASTER_PAGE, sal_True, sal_False); - rBindings.Invalidate(SID_DELETE_PAGE, sal_True, sal_False); - rBindings.Invalidate(SID_ASSIGN_LAYOUT,sal_True,sal_False); - rBindings.Invalidate(SID_INSERTPAGE,sal_True,sal_False); - UpdatePreview( mpActualPage ); - - mpDrawView->AdjustMarkHdl(); - } - - return (bOK); -} - - -/************************************************************************* -|* -|* Pruefen, ob ein Seitenwechsel erlaubt ist -|* -\************************************************************************/ - -sal_Bool DrawViewShell::IsSwitchPageAllowed() const -{ - bool bOK = true; - - FmFormShell* pFormShell = GetViewShellBase().GetFormShellManager()->GetFormShell(); - if (pFormShell!=NULL && !pFormShell->PrepareClose (sal_False)) - bOK = false; - - return bOK; -} - -/************************************************************************* -|* -|* neue aktuelle Seite auswaehlen, falls sich die Seitenfolge geaendert -|* hat (z. B. durch Undo) -|* -\************************************************************************/ - -void DrawViewShell::ResetActualLayer() -{ - LayerTabBar* pLayerBar = GetLayerTabControl(); - if (pLayerBar != NULL) - { - // remember old layer cound and current layer id - // this is needed when one layer is renamed to - // restore current layer - sal_uInt16 nOldLayerCnt = pLayerBar->GetPageCount(); - sal_uInt16 nOldLayerId = pLayerBar->GetCurPageId(); - - /************************************************************* - * Update fuer LayerTab - *************************************************************/ - pLayerBar->Clear(); - - String aName; - String aActiveLayer = mpDrawView->GetActiveLayer(); - String aBackgroundLayer( SdResId(STR_LAYER_BCKGRND) ); - String aBackgroundObjLayer( SdResId(STR_LAYER_BCKGRNDOBJ) ); - String aLayoutLayer( SdResId(STR_LAYER_LAYOUT) ); - String aControlsLayer( SdResId(STR_LAYER_CONTROLS) ); - String aMeasureLinesLayer( SdResId(STR_LAYER_MEASURELINES) ); - sal_uInt16 nActiveLayer = SDRLAYER_NOTFOUND; - SdrLayerAdmin& rLayerAdmin = GetDoc()->GetLayerAdmin(); - sal_uInt16 nLayerCnt = rLayerAdmin.GetLayerCount(); - - for ( sal_uInt16 nLayer = 0; nLayer < nLayerCnt; nLayer++ ) - { - aName = rLayerAdmin.GetLayer(nLayer)->GetName(); - - if ( aName == aActiveLayer ) - { - nActiveLayer = nLayer; - } - - if ( aName != aBackgroundLayer ) - { - if (meEditMode == EM_MASTERPAGE) - { - // Layer der Page nicht auf MasterPage anzeigen - if (aName != aLayoutLayer && - aName != aControlsLayer && - aName != aMeasureLinesLayer) - { - pLayerBar->InsertPage(nLayer+1, aName); - - TabBarPageBits nBits = 0; - SdrPageView* pPV = mpDrawView->GetSdrPageView(); - - if (pPV && !pPV->IsLayerVisible(aName)) - { - // Unsichtbare Layer werden anders dargestellt - nBits = TPB_SPECIAL; - } - - pLayerBar->SetPageBits(nLayer+1, nBits); - } - } - else - { - // Layer der MasterPage nicht auf Page anzeigen - if ( aName != aBackgroundObjLayer ) - { - pLayerBar->InsertPage(nLayer+1, aName); - - TabBarPageBits nBits = 0; - - if (!mpDrawView->GetSdrPageView()->IsLayerVisible(aName)) - { - // Unsichtbare Layer werden anders dargestellt - nBits = TPB_SPECIAL; - } - - pLayerBar->SetPageBits(nLayer+1, nBits); - } - } - } - } - - if ( nActiveLayer == SDRLAYER_NOTFOUND ) - { - if( nOldLayerCnt == pLayerBar->GetPageCount() ) - { - nActiveLayer = nOldLayerId - 1; - } - else - { - nActiveLayer = ( meEditMode == EM_MASTERPAGE ) ? 2 : 0; - } - - mpDrawView->SetActiveLayer( pLayerBar->GetPageText(nActiveLayer + 1) ); - } - - pLayerBar->SetCurPageId(nActiveLayer + 1); - GetViewFrame()->GetBindings().Invalidate( SID_MODIFYLAYER ); - GetViewFrame()->GetBindings().Invalidate( SID_DELETE_LAYER ); - } -} - -/************************************************************************* -|* -|* Verzoegertes Close ausfuehren -|* -\************************************************************************/ - -IMPL_LINK( DrawViewShell, CloseHdl, Timer*, pTimer ) -{ - pTimer->Stop(); - GetViewFrame()->GetBindings().Execute( SID_CLOSEWIN ); - return 0L; -} - -/************************************************************************* -|* -|* AcceptDrop -|* -\************************************************************************/ - -sal_Int8 DrawViewShell::AcceptDrop ( - const AcceptDropEvent& rEvt, - DropTargetHelper& rTargetHelper, - ::sd::Window* pTargetWindow, - sal_uInt16 nPage, - sal_uInt16 nLayer ) -{ - if( nPage != SDRPAGE_NOTFOUND ) - nPage = GetDoc()->GetSdPage( nPage, mePageKind )->GetPageNum(); - - if( SlideShow::IsRunning( GetViewShellBase() ) ) - return DND_ACTION_NONE; - - return mpDrawView->AcceptDrop( rEvt, rTargetHelper, pTargetWindow, nPage, nLayer ); -} - -/************************************************************************* -|* -|* ExecuteDrop -|* -\************************************************************************/ - -sal_Int8 DrawViewShell::ExecuteDrop ( - const ExecuteDropEvent& rEvt, - DropTargetHelper& rTargetHelper, - ::sd::Window* pTargetWindow, - sal_uInt16 nPage, - sal_uInt16 nLayer) -{ - if( nPage != SDRPAGE_NOTFOUND ) - nPage = GetDoc()->GetSdPage( nPage, mePageKind )->GetPageNum(); - - if( SlideShow::IsRunning( GetViewShellBase() ) ) - return DND_ACTION_NONE; - - Broadcast(ViewShellHint(ViewShellHint::HINT_COMPLEX_MODEL_CHANGE_START)); - sal_Int8 nResult (mpDrawView->ExecuteDrop( rEvt, rTargetHelper, pTargetWindow, nPage, nLayer )); - Broadcast(ViewShellHint(ViewShellHint::HINT_COMPLEX_MODEL_CHANGE_END)); - - return nResult; -} - -} // end of namespace sd - -#ifdef _MSC_VER -#if (_MSC_VER < 1400) -#pragma optimize ( "", on ) -#endif -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |