diff options
Diffstat (limited to 'sd/source/ui/docshell/docshel4.cxx')
-rw-r--r-- | sd/source/ui/docshell/docshel4.cxx | 1012 |
1 files changed, 0 insertions, 1012 deletions
diff --git a/sd/source/ui/docshell/docshel4.cxx b/sd/source/ui/docshell/docshel4.cxx deleted file mode 100644 index 9f9d8a5ec..000000000 --- a/sd/source/ui/docshell/docshel4.cxx +++ /dev/null @@ -1,1012 +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 "DrawDocShell.hxx" -#include <com/sun/star/document/PrinterIndependentLayout.hpp> -#include <tools/urlobj.hxx> -#include <sfx2/progress.hxx> -#include <vcl/waitobj.hxx> -#include <svx/svxids.hrc> -#include <editeng/flstitem.hxx> -#include <editeng/eeitem.hxx> -#include <svl/aeitem.hxx> -#include <svl/flagitem.hxx> -#include <sot/storage.hxx> -#include <sfx2/docfile.hxx> -#include <sfx2/docfilt.hxx> -#include <sfx2/dispatch.hxx> -#include <svx/svdotext.hxx> -#include <svl/style.hxx> -#include <sfx2/printer.hxx> -#include <svtools/ctrltool.hxx> -#include <svtools/sfxecode.hxx> -#include <sot/clsids.hxx> -#include <sot/formats.hxx> -#include <sfx2/request.hxx> -#include <unotools/fltrcfg.hxx> -#include <sfx2/frame.hxx> -#include <sfx2/viewfrm.hxx> -#include <unotools/saveopt.hxx> -#include <com/sun/star/drawing/XDrawPage.hpp> -#include <com/sun/star/drawing/XDrawView.hpp> -#include <comphelper/processfactory.hxx> - -#include "app.hrc" -#include "glob.hrc" -#include "strings.hrc" -#include "strmname.h" -#include "FrameView.hxx" -#include "optsitem.hxx" -#include "Outliner.hxx" -#include "sdattr.hxx" -#include "drawdoc.hxx" -#include "ViewShell.hxx" -#include "app.hxx" -#include "View.hxx" -#include "sdpage.hxx" -#include "sdresid.hxx" -#include "DrawViewShell.hxx" -#include "ViewShellBase.hxx" -#include "Window.hxx" -#include "sdmod.hxx" -#include "OutlineViewShell.hxx" -#include "sdxmlwrp.hxx" -#include "sdpptwrp.hxx" -#include "sdcgmfilter.hxx" -#include "sdgrffilter.hxx" -#include "sdhtmlfilter.hxx" -#include "framework/FrameworkHelper.hxx" - -using namespace ::com::sun::star; -using namespace ::com::sun::star::uno; -using ::sd::framework::FrameworkHelper; - - -namespace sd { - -/************************************************************************* -|* -|* SfxPrinter ggf. erzeugen und zurueckgeben -|* -\************************************************************************/ - -SfxPrinter* DrawDocShell::GetPrinter(sal_Bool bCreate) -{ - if (bCreate && !mpPrinter) - { - // ItemSet mit speziellem Poolbereich anlegen - SfxItemSet* pSet = new SfxItemSet( GetPool(), - SID_PRINTER_NOTFOUND_WARN, SID_PRINTER_NOTFOUND_WARN, - SID_PRINTER_CHANGESTODOC, SID_PRINTER_CHANGESTODOC, - ATTR_OPTIONS_PRINT, ATTR_OPTIONS_PRINT, - 0 ); - // PrintOptionsSet setzen - SdOptionsPrintItem aPrintItem( ATTR_OPTIONS_PRINT, - SD_MOD()->GetSdOptions(mpDoc->GetDocumentType())); - SfxFlagItem aFlagItem( SID_PRINTER_CHANGESTODOC ); - sal_uInt16 nFlags = 0; - - nFlags = (aPrintItem.GetOptionsPrint().IsWarningSize() ? SFX_PRINTER_CHG_SIZE : 0) | - (aPrintItem.GetOptionsPrint().IsWarningOrientation() ? SFX_PRINTER_CHG_ORIENTATION : 0); - aFlagItem.SetValue( nFlags ); - - pSet->Put( aPrintItem ); - pSet->Put( SfxBoolItem( SID_PRINTER_NOTFOUND_WARN, aPrintItem.GetOptionsPrint().IsWarningPrinter() ) ); - pSet->Put( aFlagItem ); - - mpPrinter = new SfxPrinter(pSet); - mbOwnPrinter = sal_True; - - // Ausgabequalitaet setzen - sal_uInt16 nQuality = aPrintItem.GetOptionsPrint().GetOutputQuality(); - - sal_uLong nMode = DRAWMODE_DEFAULT; - - if( nQuality == 1 ) - nMode = DRAWMODE_GRAYLINE | DRAWMODE_GRAYFILL | DRAWMODE_BLACKTEXT | DRAWMODE_GRAYBITMAP | DRAWMODE_GRAYGRADIENT; - else if( nQuality == 2 ) - nMode = DRAWMODE_BLACKLINE | DRAWMODE_BLACKTEXT | DRAWMODE_WHITEFILL | DRAWMODE_GRAYBITMAP | DRAWMODE_WHITEGRADIENT; - - mpPrinter->SetDrawMode( nMode ); - - MapMode aMM (mpPrinter->GetMapMode()); - aMM.SetMapUnit(MAP_100TH_MM); - mpPrinter->SetMapMode(aMM); - UpdateRefDevice(); - } - return mpPrinter; -} - -/************************************************************************* -|* -|* neuen SfxPrinter setzen (Eigentuemeruebergang) -|* -\************************************************************************/ - -void DrawDocShell::SetPrinter(SfxPrinter *pNewPrinter) -{ - if ( mpViewShell ) - { - ::sd::View* pView = mpViewShell->GetView(); - if ( pView->IsTextEdit() ) - pView->SdrEndTextEdit(); - } - - if ( mpPrinter && mbOwnPrinter && (mpPrinter != pNewPrinter) ) - { - delete mpPrinter; - } - - mpPrinter = pNewPrinter; - mbOwnPrinter = sal_True; - if ( mpDoc->GetPrinterIndependentLayout() == ::com::sun::star::document::PrinterIndependentLayout::DISABLED ) - UpdateFontList(); - UpdateRefDevice(); -} - -void DrawDocShell::UpdateFontList() -{ - delete mpFontList; - OutputDevice* pRefDevice = NULL; - if ( mpDoc->GetPrinterIndependentLayout() == ::com::sun::star::document::PrinterIndependentLayout::DISABLED ) - pRefDevice = GetPrinter(sal_True); - else - pRefDevice = SD_MOD()->GetVirtualRefDevice(); - mpFontList = new FontList( pRefDevice, NULL, sal_False ); - SvxFontListItem aFontListItem( mpFontList, SID_ATTR_CHAR_FONTLIST ); - PutItem( aFontListItem ); -} - -Printer* DrawDocShell::GetDocumentPrinter() -{ - return GetPrinter(sal_False); -} - -void DrawDocShell::OnDocumentPrinterChanged(Printer* pNewPrinter) -{ - // if we already have a printer, see if its the same - if( mpPrinter ) - { - // easy case - if( mpPrinter == pNewPrinter ) - return; - - // compare if its the same printer with the same job setup - if( (mpPrinter->GetName() == pNewPrinter->GetName()) && - (mpPrinter->GetJobSetup() == pNewPrinter->GetJobSetup())) - return; - } - - // if (mpPrinter->IsA(SfxPrinter)) - { - // Da kein RTTI verfuegbar, wird hart gecasted (...) - SetPrinter((SfxPrinter*) pNewPrinter); - - // Printer gehoert dem Container - mbOwnPrinter = sal_False; - } -} - -void DrawDocShell::UpdateRefDevice() -{ - if( mpDoc ) - { - // Determine the device for which the output will be formatted. - OutputDevice* pRefDevice = NULL; - switch (mpDoc->GetPrinterIndependentLayout()) - { - case ::com::sun::star::document::PrinterIndependentLayout::DISABLED: - pRefDevice = mpPrinter; - break; - - case ::com::sun::star::document::PrinterIndependentLayout::ENABLED: - pRefDevice = SD_MOD()->GetVirtualRefDevice(); - break; - - default: - // We are confronted with an invalid or un-implemented - // layout mode. Use the printer as formatting device - // as a fall-back. - DBG_ASSERT(false, "DrawDocShell::UpdateRefDevice(): Unexpected printer layout mode"); - - pRefDevice = mpPrinter; - break; - } - mpDoc->SetRefDevice( pRefDevice ); - - ::sd::Outliner* pOutl = mpDoc->GetOutliner( sal_False ); - - if( pOutl ) - pOutl->SetRefDevice( pRefDevice ); - - ::sd::Outliner* pInternalOutl = mpDoc->GetInternalOutliner( sal_False ); - - if( pInternalOutl ) - pInternalOutl->SetRefDevice( pRefDevice ); - } -} - -/************************************************************************* -|* -|* InitNew, (Dokument wird neu erzeugt): Streams oeffnen -|* -\************************************************************************/ - -sal_Bool DrawDocShell::InitNew( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage ) -{ - sal_Bool bRet = sal_False; - - bRet = SfxObjectShell::InitNew( xStorage ); - - Rectangle aVisArea( Point(0, 0), Size(14100, 10000) ); - SetVisArea(aVisArea); - - if (bRet) - { - if( !mbSdDataObj ) - mpDoc->NewOrLoadCompleted(NEW_DOC); // otherwise calling - // NewOrLoadCompleted(NEW_LOADED) in - // SdDrawDocument::AllocModel() - } - return bRet; -} - -/************************************************************************* -|* -|* Load: Pools und Dokument laden -|* -\************************************************************************/ - -sal_Bool DrawDocShell::Load( SfxMedium& rMedium ) -{ - mbNewDocument = sal_False; - - sal_Bool bRet = sal_False; - bool bStartPresentation = false; - ErrCode nError = ERRCODE_NONE; - - SfxItemSet* pSet = rMedium.GetItemSet(); - - - if( pSet ) - { - if( ( SFX_ITEM_SET == pSet->GetItemState(SID_PREVIEW ) ) && ( (SfxBoolItem&) ( pSet->Get( SID_PREVIEW ) ) ).GetValue() ) - { - mpDoc->SetStarDrawPreviewMode( sal_True ); - } - - if( SFX_ITEM_SET == pSet->GetItemState(SID_DOC_STARTPRESENTATION)&& - ( (SfxBoolItem&) ( pSet->Get( SID_DOC_STARTPRESENTATION ) ) ).GetValue() ) - { - bStartPresentation = true; - mpDoc->SetStartWithPresentation( true ); - } - } - - bRet = SfxObjectShell::Load( rMedium ); - if( bRet ) - { - bRet = SdXMLFilter( rMedium, *this, sal_True, SDXMLMODE_Normal, SotStorage::GetVersion( rMedium.GetStorage() ) ).Import( nError ); - } - - if( bRet ) - { - UpdateTablePointers(); - - // If we're an embedded OLE object, use tight bounds - // for our visArea. No point in showing the user lots of empty - // space. Had to remove the check for empty VisArea below, - // since XML load always sets a VisArea before. - //TODO/LATER: looks a little bit strange! - if( ( GetCreateMode() == SFX_CREATE_MODE_EMBEDDED ) && SfxObjectShell::GetVisArea( ASPECT_CONTENT ).IsEmpty() ) - { - SdPage* pPage = mpDoc->GetSdPage( 0, PK_STANDARD ); - - if( pPage ) - SetVisArea( Rectangle( pPage->GetAllObjBoundRect() ) ); - } - - FinishedLoading( SFX_LOADED_ALL ); - - const INetURLObject aUrl; - SfxObjectShell::SetAutoLoad( aUrl, 0, sal_False ); - } - else - { - if( nError == ERRCODE_IO_BROKENPACKAGE ) - SetError( ERRCODE_IO_BROKENPACKAGE, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ) ); - - // TODO/LATER: correct error handling?! - //pStore->SetError( SVSTREAM_WRONGVERSION, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ) ); - else - SetError( ERRCODE_ABORT, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ) ); - } - - // tell SFX to change viewshell when in preview mode - if( IsPreview() || bStartPresentation ) - { - SfxItemSet *pMediumSet = GetMedium()->GetItemSet(); - if( pMediumSet ) - pMediumSet->Put( SfxUInt16Item( SID_VIEW_ID, bStartPresentation ? 1 : 5 ) ); - } - - return bRet; -} - -/************************************************************************* -|* -|* LoadFrom: Inhalte fuer Organizer laden -|* -\************************************************************************/ - -sal_Bool DrawDocShell::LoadFrom( SfxMedium& rMedium ) -{ - mbNewDocument = sal_False; - - WaitObject* pWait = NULL; - if( mpViewShell ) - pWait = new WaitObject( (Window*) mpViewShell->GetActiveWindow() ); - - sal_Bool bRet = sal_False; - - mpDoc->NewOrLoadCompleted( NEW_DOC ); - mpDoc->CreateFirstPages(); - mpDoc->StopWorkStartupDelay(); - - // TODO/LATER: nobody is interested in the error code?! - ErrCode nError = ERRCODE_NONE; - bRet = SdXMLFilter( rMedium, *this, sal_True, SDXMLMODE_Organizer, SotStorage::GetVersion( rMedium.GetStorage() ) ).Import( nError ); - - - // tell SFX to change viewshell when in preview mode - if( IsPreview() ) - { - SfxItemSet *pSet = GetMedium()->GetItemSet(); - - if( pSet ) - pSet->Put( SfxUInt16Item( SID_VIEW_ID, 5 ) ); - } - - delete pWait; - - return bRet; -} - -/************************************************************************* -|* -|* ImportFrom: load from 3rd party format -|* -\************************************************************************/ - -sal_Bool DrawDocShell::ImportFrom( SfxMedium &rMedium, bool bInsert ) -{ - const sal_Bool bRet=SfxObjectShell::ImportFrom(rMedium, bInsert); - - SfxItemSet* pSet = rMedium.GetItemSet(); - if( pSet ) - { - if( SFX_ITEM_SET == pSet->GetItemState(SID_DOC_STARTPRESENTATION)&& - ( (SfxBoolItem&) ( pSet->Get( SID_DOC_STARTPRESENTATION ) ) ).GetValue() ) - { - mpDoc->SetStartWithPresentation( true ); - - // tell SFX to change viewshell when in preview mode - if( IsPreview() ) - { - SfxItemSet *pMediumSet = GetMedium()->GetItemSet(); - if( pMediumSet ) - pMediumSet->Put( SfxUInt16Item( SID_VIEW_ID, 1 ) ); - } - } - } - - return bRet; -} - -/************************************************************************* -|* -|* ConvertFrom: aus Fremdformat laden -|* -\************************************************************************/ - -sal_Bool DrawDocShell::ConvertFrom( SfxMedium& rMedium ) -{ - mbNewDocument = sal_False; - - const String aFilterName( rMedium.GetFilter()->GetFilterName() ); - sal_Bool bRet = sal_False; - bool bStartPresentation = false; - - SetWaitCursor( sal_True ); - - SfxItemSet* pSet = rMedium.GetItemSet(); - if( pSet ) - { - if( ( SFX_ITEM_SET == pSet->GetItemState(SID_PREVIEW ) ) && ( (SfxBoolItem&) ( pSet->Get( SID_PREVIEW ) ) ).GetValue() ) - { - mpDoc->SetStarDrawPreviewMode( sal_True ); - } - - if( SFX_ITEM_SET == pSet->GetItemState(SID_DOC_STARTPRESENTATION)&& - ( (SfxBoolItem&) ( pSet->Get( SID_DOC_STARTPRESENTATION ) ) ).GetValue() ) - { - bStartPresentation = true; - mpDoc->SetStartWithPresentation( true ); - } - } - - if( aFilterName == pFilterPowerPoint97 - || aFilterName == pFilterPowerPoint97Template - || aFilterName == pFilterPowerPoint97AutoPlay) - { - mpDoc->StopWorkStartupDelay(); - bRet = SdPPTFilter( rMedium, *this, sal_True ).Import(); - } - else if (aFilterName.SearchAscii("impress8" ) != STRING_NOTFOUND || - aFilterName.SearchAscii("draw8") != STRING_NOTFOUND ) - { - // TODO/LATER: nobody is interested in the error code?! - mpDoc->CreateFirstPages(); - mpDoc->StopWorkStartupDelay(); - ErrCode nError = ERRCODE_NONE; - bRet = SdXMLFilter( rMedium, *this, sal_True ).Import( nError ); - - } - else if (aFilterName.SearchAscii("StarOffice XML (Draw)" ) != STRING_NOTFOUND || aFilterName.SearchAscii("StarOffice XML (Impress)") != STRING_NOTFOUND ) - { - // TODO/LATER: nobody is interested in the error code?! - mpDoc->CreateFirstPages(); - mpDoc->StopWorkStartupDelay(); - ErrCode nError = ERRCODE_NONE; - bRet = SdXMLFilter( rMedium, *this, sal_True, SDXMLMODE_Normal, SOFFICE_FILEFORMAT_60 ).Import( nError ); - } - else if( aFilterName.EqualsAscii( "CGM - Computer Graphics Metafile" ) ) - { - mpDoc->CreateFirstPages(); - mpDoc->StopWorkStartupDelay(); - bRet = SdCGMFilter( rMedium, *this, sal_True ).Import(); - } - else - { - mpDoc->CreateFirstPages(); - mpDoc->StopWorkStartupDelay(); - bRet = SdGRFFilter( rMedium, *this ).Import(); - } - - FinishedLoading( SFX_LOADED_MAINDOCUMENT | SFX_LOADED_IMAGES ); - - // tell SFX to change viewshell when in preview mode - if( IsPreview() ) - { - SfxItemSet *pMediumSet = GetMedium()->GetItemSet(); - - if( pMediumSet ) - pMediumSet->Put( SfxUInt16Item( SID_VIEW_ID, 5 ) ); - } - SetWaitCursor( sal_False ); - - // tell SFX to change viewshell when in preview mode - if( IsPreview() || bStartPresentation ) - { - SfxItemSet *pMediumSet = GetMedium()->GetItemSet(); - if( pMediumSet ) - pMediumSet->Put( SfxUInt16Item( SID_VIEW_ID, bStartPresentation ? 1 : 5 ) ); - } - - return bRet; -} - -/************************************************************************* -|* -|* Save: Pools und Dokument in die offenen Streams schreiben -|* -\************************************************************************/ - -sal_Bool DrawDocShell::Save() -{ - mpDoc->StopWorkStartupDelay(); - - //TODO/LATER: why this?! - if( GetCreateMode() == SFX_CREATE_MODE_STANDARD ) - SfxObjectShell::SetVisArea( Rectangle() ); - - sal_Bool bRet = SfxObjectShell::Save(); - - if( bRet ) - { - // Call UpdateDocInfoForSave() before export - UpdateDocInfoForSave(); - - bRet = SdXMLFilter( *GetMedium(), *this, sal_True, SDXMLMODE_Normal, SotStorage::GetVersion( GetMedium()->GetStorage() ) ).Export(); - } - - return bRet; -} - -/************************************************************************* -|* -|* SaveAs: Pools und Dokument in den angegebenen Storage sichern -|* -\************************************************************************/ - -sal_Bool DrawDocShell::SaveAs( SfxMedium& rMedium ) -{ - mpDoc->StopWorkStartupDelay(); - - //TODO/LATER: why this?! - if( GetCreateMode() == SFX_CREATE_MODE_STANDARD ) - SfxObjectShell::SetVisArea( Rectangle() ); - - sal_uInt32 nVBWarning = ERRCODE_NONE; - sal_Bool bRet = SfxObjectShell::SaveAs( rMedium ); - - if( bRet ) - { - // Call UpdateDocInfoForSave() before export - UpdateDocInfoForSave(); - bRet = SdXMLFilter( rMedium, *this, sal_True, SDXMLMODE_Normal, SotStorage::GetVersion( rMedium.GetStorage() ) ).Export(); - } - - if( GetError() == ERRCODE_NONE ) - SetError( nVBWarning, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ) ); - - return bRet; -} - -/************************************************************************* -|* -|* ConvertTo: im Fremdformat speichern -|* -\************************************************************************/ - -sal_Bool DrawDocShell::ConvertTo( SfxMedium& rMedium ) -{ - sal_Bool bRet = sal_False; - - if( mpDoc->GetPageCount() ) - { - const SfxFilter* pMediumFilter = rMedium.GetFilter(); - const String aTypeName( pMediumFilter->GetTypeName() ); - SdFilter* pFilter = NULL; - - if( aTypeName.SearchAscii( "graphic_HTML" ) != STRING_NOTFOUND ) - { - pFilter = new SdHTMLFilter( rMedium, *this, sal_True ); - } - else if( aTypeName.SearchAscii( "MS_PowerPoint_97" ) != STRING_NOTFOUND ) - { - pFilter = new SdPPTFilter( rMedium, *this, sal_True ); - ((SdPPTFilter*)pFilter)->PreSaveBasic(); - } - else if ( aTypeName.SearchAscii( "CGM_Computer_Graphics_Metafile" ) != STRING_NOTFOUND ) - { - pFilter = new SdCGMFilter( rMedium, *this, sal_True ); - } - else if( ( aTypeName.SearchAscii( "draw8" ) != STRING_NOTFOUND ) || - ( aTypeName.SearchAscii( "impress8" ) != STRING_NOTFOUND ) ) - { - pFilter = new SdXMLFilter( rMedium, *this, sal_True ); - UpdateDocInfoForSave(); - } - else if( ( aTypeName.SearchAscii( "StarOffice_XML_Impress" ) != STRING_NOTFOUND ) || - ( aTypeName.SearchAscii( "StarOffice_XML_Draw" ) != STRING_NOTFOUND ) ) - { - pFilter = new SdXMLFilter( rMedium, *this, sal_True, SDXMLMODE_Normal, SOFFICE_FILEFORMAT_60 ); - UpdateDocInfoForSave(); - } - else - { - pFilter = new SdGRFFilter( rMedium, *this ); - } - - if( pFilter ) - { - const sal_uLong nOldSwapMode = mpDoc->GetSwapGraphicsMode(); - - mpDoc->SetSwapGraphicsMode( SDR_SWAPGRAPHICSMODE_TEMP ); - - bRet = pFilter->Export(); - if( !bRet ) - mpDoc->SetSwapGraphicsMode( nOldSwapMode ); - - delete pFilter; - } - } - - return bRet; -} - -/************************************************************************* -|* -|* SaveCompleted: die eigenen Streams wieder oeffnen, damit kein anderer -|* sie "besetzt" -|* -\************************************************************************/ - -sal_Bool DrawDocShell::SaveCompleted( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage ) -{ - sal_Bool bRet = sal_False; - - if( SfxObjectShell::SaveCompleted(xStorage) ) - { - mpDoc->NbcSetChanged( sal_False ); - - if( mpViewShell ) - { - if( mpViewShell->ISA( OutlineViewShell ) ) - static_cast<OutlineView*>(mpViewShell->GetView()) - ->GetOutliner()->ClearModifyFlag(); - - SdrOutliner* pOutl = mpViewShell->GetView()->GetTextEditOutliner(); - if( pOutl ) - { - SdrObject* pObj = mpViewShell->GetView()->GetTextEditObject(); - if( pObj ) - pObj->NbcSetOutlinerParaObject( pOutl->CreateParaObject() ); - - pOutl->ClearModifyFlag(); - } - } - - bRet = sal_True; - - SfxViewFrame* pFrame = ( mpViewShell && mpViewShell->GetViewFrame() ) ? - mpViewShell->GetViewFrame() : - SfxViewFrame::Current(); - - if( pFrame ) - pFrame->GetBindings().Invalidate( SID_NAVIGATOR_STATE, sal_True, sal_False ); - } - return bRet; -} - -/************************************************************************* -|* -|* Referenz auf Dokument -|* -\************************************************************************/ - -SdDrawDocument* DrawDocShell::GetDoc() -{ - return mpDoc; -} - -/************************************************************************* -|* -|* Referenz auf Dokument -|* -\************************************************************************/ - -SfxStyleSheetBasePool* DrawDocShell::GetStyleSheetPool() -{ - return( (SfxStyleSheetBasePool*) mpDoc->GetStyleSheetPool() ); -} - -/************************************************************************* -|* -|* Sprung zu Bookmark -|* -\************************************************************************/ - -sal_Bool DrawDocShell::GotoBookmark(const String& rBookmark) -{ - sal_Bool bFound = sal_False; - - if (mpViewShell && mpViewShell->ISA(DrawViewShell)) - { - DrawViewShell* pDrawViewShell = static_cast<DrawViewShell*>(mpViewShell); - ViewShellBase& rBase (mpViewShell->GetViewShellBase()); - - sal_Bool bIsMasterPage = sal_False; - sal_uInt16 nPageNumber = SDRPAGE_NOTFOUND; - SdrObject* pObj = NULL; - - rtl::OUString sBookmark( rBookmark ); - const rtl::OUString sInteraction( RTL_CONSTASCII_USTRINGPARAM( "action?" ) ); - if ( sBookmark.match( sInteraction ) ) - { - const rtl::OUString sJump( RTL_CONSTASCII_USTRINGPARAM( "jump=" ) ); - if ( sBookmark.match( sJump, sInteraction.getLength() ) ) - { - rtl::OUString aDestination( sBookmark.copy( sInteraction.getLength() + sJump.getLength() ) ); - if ( aDestination.match( String( RTL_CONSTASCII_USTRINGPARAM( "firstslide" ) ) ) ) - { - nPageNumber = 1; - } - else if ( aDestination.match( String( RTL_CONSTASCII_USTRINGPARAM( "lastslide" ) ) ) ) - { - nPageNumber = mpDoc->GetPageCount() - 2; - } - else if ( aDestination.match( String( RTL_CONSTASCII_USTRINGPARAM( "previousslide" ) ) ) ) - { - SdPage* pPage = pDrawViewShell->GetActualPage(); - nPageNumber = pPage->GetPageNum(); - nPageNumber = nPageNumber > 2 ? nPageNumber - 2 : SDRPAGE_NOTFOUND; - } - else if ( aDestination.match( String( RTL_CONSTASCII_USTRINGPARAM( "nextslide" ) ) ) ) - { - SdPage* pPage = pDrawViewShell->GetActualPage(); - nPageNumber = pPage->GetPageNum() + 2; - if ( nPageNumber >= mpDoc->GetPageCount() ) - nPageNumber = SDRPAGE_NOTFOUND; - } - } - } - else - { - String aBookmark( rBookmark ); - - // Ist das Bookmark eine Seite? - nPageNumber = mpDoc->GetPageByName( aBookmark, bIsMasterPage ); - - if (nPageNumber == SDRPAGE_NOTFOUND) - { - // Ist das Bookmark ein Objekt? - pObj = mpDoc->GetObj(aBookmark); - - if (pObj) - { - nPageNumber = pObj->GetPage()->GetPageNum(); - } - } - } - if (nPageNumber != SDRPAGE_NOTFOUND) - { - // Jump to the bookmarked page. This is done in three steps. - - bFound = sal_True; - SdPage* pPage; - if (bIsMasterPage) - pPage = (SdPage*) mpDoc->GetMasterPage(nPageNumber); - else - pPage = (SdPage*) mpDoc->GetPage(nPageNumber); - - // 1.) Change the view shell to the edit view, the notes view, - // or the handout view. - PageKind eNewPageKind = pPage->GetPageKind(); - - if( (eNewPageKind != PK_STANDARD) && (mpDoc->GetDocumentType() == DOCUMENT_TYPE_DRAW) ) - return sal_False; - - if (eNewPageKind != pDrawViewShell->GetPageKind()) - { - // Arbeitsbereich wechseln - GetFrameView()->SetPageKind(eNewPageKind); - ::rtl::OUString sViewURL; - switch (eNewPageKind) - { - case PK_STANDARD: - sViewURL = FrameworkHelper::msImpressViewURL; - break; - case PK_NOTES: - sViewURL = FrameworkHelper::msNotesViewURL; - break; - case PK_HANDOUT: - sViewURL = FrameworkHelper::msHandoutViewURL; - break; - default: - break; - } - if (sViewURL.getLength() > 0) - { - ::boost::shared_ptr<FrameworkHelper> pHelper ( - FrameworkHelper::Instance(rBase)); - pHelper->RequestView( - sViewURL, - FrameworkHelper::msCenterPaneURL); - pHelper->WaitForUpdate(); - - // Get the new DrawViewShell. - mpViewShell = pHelper->GetViewShell(FrameworkHelper::msCenterPaneURL).get(); - pDrawViewShell = dynamic_cast<sd::DrawViewShell*>(mpViewShell); - } - else - { - pDrawViewShell = NULL; - } - } - - if (pDrawViewShell != NULL) - { - // Set the edit mode to either the normal edit mode or the - // master page mode. - EditMode eNewEditMode = EM_PAGE; - if (bIsMasterPage) - { - eNewEditMode = EM_MASTERPAGE; - } - - if (eNewEditMode != pDrawViewShell->GetEditMode()) - { - // EditMode setzen - pDrawViewShell->ChangeEditMode(eNewEditMode, sal_False); - } - - // Make the bookmarked page the current page. This is done - // by using the API because this takes care of all the - // little things to be done. Especially writing the view - // data to the frame view. - sal_uInt16 nSdPgNum = (nPageNumber - 1) / 2; - Reference<drawing::XDrawView> xController (rBase.GetController(), UNO_QUERY); - if (xController.is()) - { - Reference<drawing::XDrawPage> xDrawPage (pPage->getUnoPage(), UNO_QUERY); - xController->setCurrentPage (xDrawPage); - } - else - { - // As a fall back switch to the page via the core. - DBG_ASSERT (xController.is(), - "DrawDocShell::GotoBookmark: can't switch page via API"); - pDrawViewShell->SwitchPage(nSdPgNum); - } - - if (pObj != NULL) - { - // Objekt einblenden und selektieren - pDrawViewShell->MakeVisible(pObj->GetLogicRect(), - *pDrawViewShell->GetActiveWindow()); - pDrawViewShell->GetView()->UnmarkAll(); - pDrawViewShell->GetView()->MarkObj( - pObj, - pDrawViewShell->GetView()->GetSdrPageView(), sal_False); - } - } - } - - SfxBindings& rBindings = (pDrawViewShell->GetViewFrame()!=NULL - ? pDrawViewShell->GetViewFrame() - : SfxViewFrame::Current() )->GetBindings(); - - rBindings.Invalidate(SID_NAVIGATOR_STATE, sal_True, sal_False); - rBindings.Invalidate(SID_NAVIGATOR_PAGENAME); - } - - return (bFound); -} - -/************************************************************************* -|* -|* SaveAsOwnFormat: wenn es eine Dokumentvorlage werden soll, -|* -\************************************************************************/ -#include <tools/urlobj.hxx> - -sal_Bool DrawDocShell::SaveAsOwnFormat( SfxMedium& rMedium ) -{ - - const SfxFilter* pFilter = rMedium.GetFilter(); - - if (pFilter->IsOwnTemplateFormat()) - { - // jetzt die StarDraw-Spezialitaeten: - // die Layoutvorlagen der ersten Seite werden mit dem jetzt - // bekannten Layoutnamen versehen, die Layoutnamen der betroffenen - // Masterpages und Seiten werden gesetzt; - // alle Textobjekte der betroffenen Standard-, Notiz- und - // Masterpages werden ueber die Namensaenderung informiert - - String aLayoutName; - - SfxStringItem* pLayoutItem; - if( rMedium.GetItemSet()->GetItemState(SID_TEMPLATE_NAME, sal_False, (const SfxPoolItem**) & pLayoutItem ) == SFX_ITEM_SET ) - { - aLayoutName = pLayoutItem->GetValue(); - } - else - { - INetURLObject aURL( rMedium.GetName() ); - aURL.removeExtension(); - aLayoutName = aURL.getName(); - } - - if( aLayoutName.Len() ) - { - String aOldPageLayoutName = mpDoc->GetSdPage(0, PK_STANDARD)->GetLayoutName(); - mpDoc->RenameLayoutTemplate(aOldPageLayoutName, aLayoutName); - } - } - - return SfxObjectShell::SaveAsOwnFormat(rMedium); -} - -/************************************************************************* -|* -|* FillClass -|* -\************************************************************************/ - -void DrawDocShell::FillClass(SvGlobalName* pClassName, - sal_uInt32* pFormat, - String* , - String* pFullTypeName, - String* pShortTypeName, - sal_Int32 nFileFormat, - sal_Bool bTemplate /* = sal_False */) const -{ - if (nFileFormat == SOFFICE_FILEFORMAT_60) - { - if ( meDocType == DOCUMENT_TYPE_DRAW ) - { - *pClassName = SvGlobalName(SO3_SDRAW_CLASSID_60); - *pFormat = SOT_FORMATSTR_ID_STARDRAW_60; - *pFullTypeName = String(SdResId(STR_GRAPHIC_DOCUMENT_FULLTYPE_60)); - } - else - { - *pClassName = SvGlobalName(SO3_SIMPRESS_CLASSID_60); - *pFormat = SOT_FORMATSTR_ID_STARIMPRESS_60; - *pFullTypeName = String(SdResId(STR_IMPRESS_DOCUMENT_FULLTYPE_60)); - } - } - else if (nFileFormat == SOFFICE_FILEFORMAT_8) - { - if ( meDocType == DOCUMENT_TYPE_DRAW ) - { - *pClassName = SvGlobalName(SO3_SDRAW_CLASSID_60); - *pFormat = bTemplate ? SOT_FORMATSTR_ID_STARDRAW_8_TEMPLATE : SOT_FORMATSTR_ID_STARDRAW_8; - *pFullTypeName = String(RTL_CONSTASCII_USTRINGPARAM("Draw 8")); // HACK: method will be removed with new storage API - } - else - { - *pClassName = SvGlobalName(SO3_SIMPRESS_CLASSID_60); - *pFormat = bTemplate ? SOT_FORMATSTR_ID_STARIMPRESS_8_TEMPLATE : SOT_FORMATSTR_ID_STARIMPRESS_8; - *pFullTypeName = String(RTL_CONSTASCII_USTRINGPARAM("Impress 8")); // HACK: method will be removed with new storage API - } - } - - *pShortTypeName = String(SdResId( (meDocType == DOCUMENT_TYPE_DRAW) ? - STR_GRAPHIC_DOCUMENT : STR_IMPRESS_DOCUMENT )); -} - -OutputDevice* DrawDocShell::GetDocumentRefDev (void) -{ - OutputDevice* pReferenceDevice = SfxObjectShell::GetDocumentRefDev (); - // Only when our parent does not have a reference device then we return - // our own. - if (pReferenceDevice == NULL && mpDoc != NULL) - pReferenceDevice = mpDoc->GetRefDevice (); - return pReferenceDevice; -} - -/** executes the SID_OPENDOC slot to let the framework open a document - with the given URL and this document as a referer */ -void DrawDocShell::OpenBookmark( const String& rBookmarkURL ) -{ - SfxStringItem aStrItem( SID_FILE_NAME, rBookmarkURL ); - SfxStringItem aReferer( SID_REFERER, GetMedium()->GetName() ); - const SfxPoolItem* ppArgs[] = { &aStrItem, &aReferer, 0 }; - ( mpViewShell ? mpViewShell->GetViewFrame() : SfxViewFrame::Current() )->GetBindings().Execute( SID_OPENHYPERLINK, ppArgs ); -} - -} // end of namespace sd - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |