diff options
Diffstat (limited to 'sd/inc/sdpage.hxx')
-rw-r--r-- | sd/inc/sdpage.hxx | 412 |
1 files changed, 412 insertions, 0 deletions
diff --git a/sd/inc/sdpage.hxx b/sd/inc/sdpage.hxx new file mode 100644 index 000000000000..68431d0c82d4 --- /dev/null +++ b/sd/inc/sdpage.hxx @@ -0,0 +1,412 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef _SDPAGE_HXX +#define _SDPAGE_HXX + +#include <boost/shared_ptr.hpp> + +#ifndef INCLUDED_FUNCTIONAL +#include <functional> +#define INCLUDED_FUNCTIONAL +#endif +#include <com/sun/star/drawing/XDrawPage.hpp> +#include <com/sun/star/presentation/FadeEffect.hpp> +#include <com/sun/star/office/XAnnotation.hpp> + +#include <list> +#include <functional> +#include <vector> +#include <svx/svdobj.hxx> +#include <svx/fmpage.hxx> +#include "fadedef.h" +#include "diadef.h" +#ifndef _PRESENTATION +#include "pres.hxx" +#endif +#include "shapelist.hxx" +#include "misc/scopelock.hxx" +#include "sddllapi.h" + +namespace com { namespace sun { namespace star { namespace animations { + class XAnimationNode; +} } } } + +class SfxStyleSheet; +class SdDrawDocument; +class SdrTextObj; +class SdPageLink; +class StarBASIC; +class SfxItemSet; +struct StyleRequestData; +class SdPage; +class Paragraph; +class Outliner; +class SdStyleSheet; + +namespace sd +{ + class MainSequence; +} + +namespace boost +{ + template<class X> class shared_ptr; +} + +namespace sd { + + struct SD_DLLPUBLIC HeaderFooterSettings + { + bool mbHeaderVisible; + String maHeaderText; + + bool mbFooterVisible; + String maFooterText; + + bool mbSlideNumberVisible; + + bool mbDateTimeVisible; + bool mbDateTimeIsFixed; + String maDateTimeText; + int meDateTimeFormat; + + HeaderFooterSettings(); + + bool operator==( const HeaderFooterSettings& rSettings ) const; + }; + + typedef std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::office::XAnnotation > > AnnotationVector; +} + +namespace sd { + class UndoAnimation; + class UndoTransition; + class UndoGeoObject; + class UndoAttrObject; +} + +class SD_DLLPUBLIC SdPage : public FmFormPage, public SdrObjUserCall +{ +friend class SdGenericDrawPage; +friend class SdDrawPage; +friend class sd::UndoAnimation; +friend class sd::UndoTransition; +friend class ModifyPageUndoAction; +friend class sd::UndoGeoObject; +friend class sd::UndoAttrObject; + +protected: + PageKind mePageKind; // Seitentyp + AutoLayout meAutoLayout; // AutoLayout + sd::ShapeList maPresentationShapeList; // Praesentationsobjekte + sd::ScopeLock maLockAutoLayoutArrangement; + sal_Bool mbSelected; // Selektionskennung + PresChange mePresChange; // manuell/automatisch/halbautomatisch + sal_uInt32 mnTime; // Anzeigedauer in Sekunden + sal_Bool mbSoundOn; // mit/ohne Sound (sal_True/sal_False) + sal_Bool mbExcluded; // wird in der Show nicht/doch + // angezeigt (sal_True/sal_False) + String maLayoutName; // Name des Layouts + String maSoundFile; // Pfad zum Soundfile (MSDOS-Notation) + bool mbLoopSound; + bool mbStopSound; + String maCreatedPageName; // von GetPageName erzeugter Seitenname + String maFileName; // Filename + String maBookmarkName; // Bookmarkname + sal_Bool mbScaleObjects; // Objekte sollen skaliert werden + sal_Bool mbBackgroundFullSize; // Hintergrundobjekt auf ganze Seite darstellen + rtl_TextEncoding meCharSet; // Text-Encoding + sal_uInt16 mnPaperBin; // PaperBin + Orientation meOrientation; // Print-Orientation + SdPageLink* mpPageLink; // PageLink (nur bei gelinkten Seiten) + + sd::AnnotationVector maAnnotations; + + /** holds the smil animation sequences for this page */ + ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode > mxAnimationNode; + + /** a helper class to manipulate effects inside the main sequence */ + boost::shared_ptr< sd::MainSequence > mpMainSequence; + + virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > createUnoPage(); + + SfxItemSet* mpItems; + + SfxItemSet* getOrCreateItems(); + + sd::HeaderFooterSettings maHeaderFooterSettings; + + // new transition settings + sal_Int16 mnTransitionType; + sal_Int16 mnTransitionSubtype; + sal_Bool mbTransitionDirection; + sal_Int32 mnTransitionFadeColor; + double mfTransitionDuration; + +public: + TYPEINFO(); + + SdPage(SdDrawDocument& rNewDoc, StarBASIC* pBasic, sal_Bool bMasterPage=sal_False); + SdPage(const SdPage& rSrcPage); + ~SdPage(); + virtual SdrPage* Clone() const; + virtual SdrPage* Clone(SdrModel* pNewModel) const; + + virtual void SetSize(const Size& aSize); + virtual void SetBorder(sal_Int32 nLft, sal_Int32 nUpp, sal_Int32 nRgt, sal_Int32 Lwr); + virtual void SetLftBorder(sal_Int32 nBorder); + virtual void SetRgtBorder(sal_Int32 nBorder); + virtual void SetUppBorder(sal_Int32 nBorder); + virtual void SetLwrBorder(sal_Int32 nBorder); + virtual void SetModel(SdrModel* pNewModel); + virtual bool IsReadOnly() const; + + sd::ShapeList& GetPresentationShapeList() { return maPresentationShapeList; } + + void EnsureMasterPageDefaultBackground(); + SdrObject* CreatePresObj(PresObjKind eObjKind, sal_Bool bVertical, const Rectangle& rRect, sal_Bool bInsert=sal_False); + SdrObject* CreateDefaultPresObj(PresObjKind eObjKind, bool bInsert); + SdrObject* GetPresObj(PresObjKind eObjKind, int nIndex = 1, bool bFuzzySearch = false ); + PresObjKind GetPresObjKind(SdrObject* pObj) const; + String GetPresObjText(PresObjKind eObjKind) const; + SfxStyleSheet* GetStyleSheetForMasterPageBackground() const; + SfxStyleSheet* GetStyleSheetForPresObj(PresObjKind eObjKind) const; + bool RestoreDefaultText( SdrObject* pObj ); + + /** returns true if the given SdrObject is inside the presentation object list */ + bool IsPresObj(const SdrObject* pObj); + + /** removes the given SdrObject from the presentation object list */ + void RemovePresObj(const SdrObject* pObj); + + /** inserts the given SdrObject into the presentation object list */ + void InsertPresObj(SdrObject* pObj, PresObjKind eKind ); + + void SetAutoLayout(AutoLayout eLayout, sal_Bool bInit=sal_False, sal_Bool bCreate=sal_False); + AutoLayout GetAutoLayout() const { return meAutoLayout; } + void CreateTitleAndLayout(sal_Bool bInit=sal_False, sal_Bool bCreate=sal_False); + SdrObject* InsertAutoLayoutShape(SdrObject* pObj, PresObjKind eObjKind, bool bVertical, Rectangle aRect, bool bInit ); + + virtual void NbcInsertObject(SdrObject* pObj, sal_uLong nPos=CONTAINER_APPEND, + const SdrInsertReason* pReason=NULL); + virtual SdrObject* NbcRemoveObject(sal_uLong nObjNum); + virtual SdrObject* RemoveObject(sal_uLong nObjNum); + + // Also overload ReplaceObject methods to realize when + // objects are removed with this mechanism instead of RemoveObject + virtual SdrObject* NbcReplaceObject(SdrObject* pNewObj, sal_uLong nObjNum); + virtual SdrObject* ReplaceObject(SdrObject* pNewObj, sal_uLong nObjNum); + + virtual void SetLinkData(const String& rLinkName, const String& rLinkData); + + void SetObjText(SdrTextObj* pObj, SdrOutliner* pOutliner, PresObjKind eObjKind, const String& rStr ); + + void SetPageKind(PageKind ePgType) { mePageKind = ePgType; } + PageKind GetPageKind() const { return mePageKind; } + + void SetSelected(sal_Bool bSel) { mbSelected = bSel; } + sal_Bool IsSelected() const { return mbSelected; } + + void SetFadeEffect(::com::sun::star::presentation::FadeEffect eNewEffect); + ::com::sun::star::presentation::FadeEffect GetFadeEffect() const; + + void SetPresChange(PresChange eChange) { mePresChange = eChange; } + PresChange GetPresChange() const { return mePresChange; } + + void SetTime(sal_uInt32 nNewTime) { mnTime = nNewTime; } + sal_uInt32 GetTime() const { return mnTime; } + + void SetSound(sal_Bool bNewSoundOn) { mbSoundOn = bNewSoundOn; } + sal_Bool IsSoundOn() const { return mbSoundOn; } + + void SetExcluded(sal_Bool bNewExcluded) { mbExcluded = bNewExcluded; } + sal_Bool IsExcluded() const { return mbExcluded; } + + void SetScaleObjects(sal_Bool bScale) { mbScaleObjects = bScale; } + sal_Bool IsScaleObjects() const { return mbScaleObjects; } + + void SetSoundFile(const String& rStr) { maSoundFile = rStr; } + String GetSoundFile() const { return maSoundFile; } + + void SetLoopSound( bool bLoopSound ) { mbLoopSound = bLoopSound; } + bool IsLoopSound() const { return mbLoopSound; } + + void SetStopSound( bool bStopSound ) { mbStopSound = bStopSound; } + bool IsStopSound() const { return mbStopSound; } + + sal_Int16 getTransitionType() const; + void setTransitionType( sal_Int16 nTransitionType ); + + sal_Int16 getTransitionSubtype() const; + void setTransitionSubtype( sal_Int16 nTransitionSubtype ); + + sal_Bool getTransitionDirection() const; + void setTransitionDirection( sal_Bool bTransitionbDirection ); + + sal_Int32 getTransitionFadeColor() const; + void setTransitionFadeColor( sal_Int32 nTransitionFadeColor ); + + double getTransitionDuration() const; + void setTransitionDuration( double fTranstionDuration ); + + // Virtuelle Methoden von SdrObjUserCall + virtual void Changed(const SdrObject& rObj, SdrUserCallType eType, + const Rectangle& rOldBoundRect); + + void SetLayoutName(String aName); + virtual String GetLayoutName() const { return maLayoutName; } + + void SetFileName(const String& aName) { maFileName = aName; } + virtual String GetFileName() const { return maFileName; } + void SetBookmarkName(const String& aName) { maBookmarkName = aName; } + virtual String GetBookmarkName() const { return maBookmarkName; } + SdPageLink* GetLink() { return mpPageLink; } + + void ConnectLink(); + void DisconnectLink(); + + void ScaleObjects(const Size& rNewPageSize, const Rectangle& rNewBorderRect, + sal_Bool bScaleAllObj); + + const String& GetName() const; + String GetRealName() const { return FmFormPage::GetName(); }; + + void SetPresentationLayout(const String& rLayoutName, + sal_Bool bReplaceStyleSheets = sal_True, + sal_Bool bSetMasterPage = sal_True, + sal_Bool bReverseOrder = sal_False); + void EndListenOutlineText(); + + void SetBackgroundFullSize( sal_Bool bIn ); + sal_Bool IsBackgroundFullSize() const { return mbBackgroundFullSize; } + + rtl_TextEncoding GetCharSet() { return(meCharSet); } + + void SetPaperBin(sal_uInt16 nBin) { mnPaperBin = nBin; } + sal_uInt16 GetPaperBin() const { return mnPaperBin; } + virtual void SetOrientation(Orientation eOrient); + virtual Orientation GetOrientation() const; + + virtual SfxStyleSheet* GetTextStyleSheetForObject( SdrObject* pObj ) const; + + sal_Bool setAlienAttributes( const com::sun::star::uno::Any& rAttributes ); + void getAlienAttributes( com::sun::star::uno::Any& rAttributes ); + + /** returns the main animation node */ + ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode > getAnimationNode() throw (::com::sun::star::uno::RuntimeException); + + /** sets the main animation node */ + void setAnimationNode( ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xNode ) throw (::com::sun::star::uno::RuntimeException); + + /** returns a helper class to manipulate effects inside the main sequence */ + boost::shared_ptr< sd::MainSequence > getMainSequence(); + + /** quick check if this slide has an animation node. + This can be used to have a cost free check if there are no animations ad this slide. + If it returns true this does not mean that there are animations available. + */ + bool hasAnimationNode() const; + + /** returns the SdPage implementation for the given XDrawPage or 0 if not available */ + static SdPage* getImplementation( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage >& xPage ); + + /** removes all custom animations for the given shape */ + void removeAnimations( const SdrObject* pObj ); + + /** Set the name of the page and broadcast a model change. + */ + virtual void SetName (const String& rName); + + const sd::HeaderFooterSettings& getHeaderFooterSettings() const; + void setHeaderFooterSettings( const sd::HeaderFooterSettings& rNewSettings ); + + /** this method returns true if the object from the ViewObjectContact should + be visible on this page while rendering. + bEdit selects if visibility test is for an editing view or a final render, + like printing. + */ + virtual bool checkVisibility( + const sdr::contact::ViewObjectContact& rOriginal, + const sdr::contact::DisplayInfo& rDisplayInfo, + bool bEdit ); + + /** callback from the sd::View when a new paragraph for one object on this page is created */ + void onParagraphInserted( ::Outliner* pOutliner, Paragraph* pPara, SdrObject* pObj ); + + /** callback from the sd::View when a paragraph from one object on this page is removed */ + void onParagraphRemoving( ::Outliner* pOutliner, Paragraph* pPara, SdrObject* pObj ); + + /** callback from the sd::View when an object just left text edit mode */ + void onEndTextEdit( SdrObject* pObj ); + + /** returns the presentation style with the given helpid from this masterpage or this + slides masterpage */ + SdStyleSheet* getPresentationStyle( sal_uInt32 nHelpId ) const; + + /** removes all empty presentation objects from this slide */ + void RemoveEmptyPresentationObjects(); + + Rectangle GetTitleRect() const; + Rectangle GetLayoutRect() const; + + static void CalculateHandoutAreas( SdDrawDocument& rModel, AutoLayout eLayout, bool bHorizontal, std::vector< Rectangle >& rAreas ); + + /** Set the "precious" flag to the given value. + */ + void SetPrecious (const bool bIsPrecious); + + /** The "precious" flag is used for master pages to prevent some unused + master pages from being deleted automatically. For pages + other than master pages this flag can be ignored. + @return + When this method returns <TRUE/> for a master page then this + master page should not be deleted automatically. + */ + bool IsPrecious (void) const; + + void createAnnotation( ::com::sun::star::uno::Reference< ::com::sun::star::office::XAnnotation >& xAnnotation ); + void addAnnotation( const ::com::sun::star::uno::Reference< ::com::sun::star::office::XAnnotation >& xAnnotation, int nIndex = -1 ); + void removeAnnotation( const ::com::sun::star::uno::Reference< ::com::sun::star::office::XAnnotation >& xAnnotation ); + const sd::AnnotationVector& getAnnotations() const { return maAnnotations; } + bool hasAnnotations() const { return !maAnnotations.empty(); } + +private: + bool mbIsPrecious; + + /** clone the animations from this and set them to rTargetPage + */ + void cloneAnimations( SdPage& rTargetPage ) const; + + /** called before a shape is removed or replaced from this slide */ + void onRemoveObject( SdrObject* pObject ); +}; + +#endif // _SDPAGE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |