1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 /* 3 * This file is part of the LibreOffice project. 4 * 5 * This Source Code Form is subject to the terms of the Mozilla Public 6 * License, v. 2.0. If a copy of the MPL was not distributed with this 7 * file, You can obtain one at http://mozilla.org/MPL/2.0/. 8 * 9 * This file incorporates work covered by the following license notice: 10 * 11 * Licensed to the Apache Software Foundation (ASF) under one or more 12 * contributor license agreements. See the NOTICE file distributed 13 * with this work for additional information regarding copyright 14 * ownership. The ASF licenses this file to you under the Apache 15 * License, Version 2.0 (the "License"); you may not use this file 16 * except in compliance with the License. You may obtain a copy of 17 * the License at http://www.apache.org/licenses/LICENSE-2.0 . 18 */ 19 20 #ifndef INCLUDED_SD_INC_SDPAGE_HXX 21 #define INCLUDED_SD_INC_SDPAGE_HXX 22 23 #include <com/sun/star/drawing/XDrawPage.hpp> 24 #include <com/sun/star/presentation/FadeEffect.hpp> 25 #include <com/sun/star/office/XAnnotation.hpp> 26 27 #include <memory> 28 #include <vector> 29 #include <editeng/flditem.hxx> 30 #include <svx/svdobj.hxx> 31 #include <svx/fmpage.hxx> 32 #include <xmloff/autolayout.hxx> 33 #include "diadef.h" 34 #include "pres.hxx" 35 #include "shapelist.hxx" 36 #include "misc/scopelock.hxx" 37 #include "sddllapi.h" 38 39 namespace com { namespace sun { namespace star { namespace animations { 40 class XAnimationNode; 41 } } } } 42 43 class SfxStyleSheet; 44 class SdDrawDocument; 45 class SdrTextObj; 46 class SdPageLink; 47 class SfxItemSet; 48 class Paragraph; 49 class Outliner; 50 class SdStyleSheet; 51 52 namespace sd 53 { 54 class MainSequence; 55 } 56 57 namespace sd { 58 59 struct SD_DLLPUBLIC HeaderFooterSettings 60 { 61 bool mbHeaderVisible; 62 OUString maHeaderText; 63 64 bool mbFooterVisible; 65 OUString maFooterText; 66 67 bool mbSlideNumberVisible; 68 69 bool mbDateTimeVisible; 70 bool mbDateTimeIsFixed; 71 OUString maDateTimeText; 72 SvxDateFormat meDateFormat; 73 SvxTimeFormat meTimeFormat; 74 75 HeaderFooterSettings(); 76 77 bool operator==( const HeaderFooterSettings& rSettings ) const; 78 }; 79 80 typedef std::vector< css::uno::Reference< css::office::XAnnotation > > AnnotationVector; 81 } 82 83 namespace sd { 84 class UndoAnimation; 85 class UndoTransition; 86 class UndoGeoObject; 87 class UndoAttrObject; 88 } 89 90 class SD_DLLPUBLIC SdPage final : public FmFormPage, public SdrObjUserCall 91 { 92 SdPage& operator=(const SdPage&) = delete; 93 SdPage(const SdPage&) = delete; 94 95 friend class SdGenericDrawPage; 96 friend class SdDrawPage; 97 friend class sd::UndoAnimation; 98 friend class sd::UndoTransition; 99 friend class ModifyPageUndoAction; 100 friend class sd::UndoGeoObject; 101 friend class sd::UndoAttrObject; 102 103 PageKind mePageKind; ///< page type 104 AutoLayout meAutoLayout; ///< AutoLayout 105 sd::ShapeList maPresentationShapeList;///< presentation objects 106 sd::ScopeLock maLockAutoLayoutArrangement; 107 bool mbSelected; ///< selection identifier 108 PresChange mePresChange; ///< manual / automatic / semi automatic 109 double mfTime; ///< Display time in seconds 110 bool mbSoundOn; ///< with / without sound. 111 bool mbExcluded; ///< will (not) be displayed during show. 112 OUString maLayoutName; ///< Name of the layout 113 OUString maSoundFile; ///< Path to sound file (MS-DOS notation). 114 bool mbLoopSound; 115 bool mbStopSound; 116 OUString maCreatedPageName; ///< generated page name by GetPageName. 117 OUString maFileName; ///< file name. 118 OUString maBookmarkName; ///< Bookmark name. 119 bool mbScaleObjects; ///< Objects should be scaled 120 bool mbBackgroundFullSize; ///< Background object to represent the whole page. 121 rtl_TextEncoding meCharSet; ///< Text encoding 122 sal_uInt16 mnPaperBin; ///< PaperBin 123 SdPageLink* mpPageLink; ///< Page link (at left sides only) 124 125 sd::AnnotationVector maAnnotations; 126 127 /** holds the smil animation sequences for this page */ 128 css::uno::Reference< css::animations::XAnimationNode > mxAnimationNode; 129 130 /** a helper class to manipulate effects inside the main sequence */ 131 std::shared_ptr< sd::MainSequence > mpMainSequence; 132 133 virtual css::uno::Reference< css::uno::XInterface > createUnoPage() override; 134 135 std::unique_ptr<SfxItemSet> mpItems; 136 137 SfxItemSet* getOrCreateItems(); 138 139 sd::HeaderFooterSettings maHeaderFooterSettings; 140 141 // new transition settings 142 sal_Int16 mnTransitionType; 143 sal_Int16 mnTransitionSubtype; 144 bool mbTransitionDirection; 145 sal_Int32 mnTransitionFadeColor; 146 double mfTransitionDuration; 147 148 void lateInit(const SdPage& rSrcPage); 149 150 public: 151 152 SdPage(SdDrawDocument& rNewDoc, bool bMasterPage); 153 virtual ~SdPage() override; 154 155 virtual SdrPage* CloneSdrPage(SdrModel& rTargetModel) const override; 156 157 virtual void SetSize(const Size& aSize) override; 158 virtual void SetBorder(sal_Int32 nLft, sal_Int32 nUpp, sal_Int32 nRgt, sal_Int32 Lwr) override; 159 virtual void SetLeftBorder(sal_Int32 nBorder) override; 160 virtual void SetRightBorder(sal_Int32 nBorder) override; 161 virtual void SetUpperBorder(sal_Int32 nBorder) override; 162 virtual void SetLowerBorder(sal_Int32 nBorder) override; 163 virtual bool IsReadOnly() const override; 164 GetPresentationShapeList()165 sd::ShapeList& GetPresentationShapeList() { return maPresentationShapeList; } 166 167 void EnsureMasterPageDefaultBackground(); 168 SdrObject* CreatePresObj(PresObjKind eObjKind, bool bVertical, const ::tools::Rectangle& rRect); 169 SdrObject* CreateDefaultPresObj(PresObjKind eObjKind); 170 void DestroyDefaultPresObj(PresObjKind eObjKind); 171 SdrObject* GetPresObj(PresObjKind eObjKind, int nIndex = 1, bool bFuzzySearch = false ); 172 PresObjKind GetPresObjKind(SdrObject* pObj) const; 173 OUString GetPresObjText(PresObjKind eObjKind) const; 174 SfxStyleSheet* GetStyleSheetForMasterPageBackground() const; 175 SfxStyleSheet* GetStyleSheetForPresObj(PresObjKind eObjKind) const; 176 sal_Int64 GetHashCode() const; 177 bool RestoreDefaultText( SdrObject* pObj ); 178 179 /** @return true if the given SdrObject is inside the presentation object list */ 180 bool IsPresObj(const SdrObject* pObj); 181 182 /** removes the given SdrObject from the presentation object list */ 183 void RemovePresObj(const SdrObject* pObj); 184 185 /** inserts the given SdrObject into the presentation object list */ 186 void InsertPresObj(SdrObject* pObj, PresObjKind eKind ); 187 188 void SetAutoLayout(AutoLayout eLayout, bool bInit=false, bool bCreate=false); GetAutoLayout() const189 AutoLayout GetAutoLayout() const { return meAutoLayout; } 190 void CreateTitleAndLayout(bool bInit=false, bool bCreate=false); 191 SdrObject* InsertAutoLayoutShape(SdrObject* pObj, PresObjKind eObjKind, bool bVertical, const ::tools::Rectangle& rRect, bool bInit); 192 193 virtual void NbcInsertObject(SdrObject* pObj, size_t nPos=SAL_MAX_SIZE) override; 194 virtual SdrObject* NbcRemoveObject(size_t nObjNum) override; 195 virtual SdrObject* RemoveObject(size_t nObjNum) override; 196 197 /** Also override ReplaceObject methods to realize when 198 objects are removed with this mechanism instead of RemoveObject*/ 199 virtual SdrObject* ReplaceObject(SdrObject* pNewObj, size_t nObjNum) override; 200 201 void SetObjText(SdrTextObj* pObj, SdrOutliner* pOutliner, PresObjKind eObjKind, const OUString& rStr ); 202 SetPageKind(PageKind ePgType)203 void SetPageKind(PageKind ePgType) { mePageKind = ePgType; } GetPageKind() const204 PageKind GetPageKind() const { return mePageKind; } 205 SetSelected(bool bSel)206 void SetSelected(bool bSel) { mbSelected = bSel; } IsSelected() const207 bool IsSelected() const { return mbSelected; } 208 209 void SetFadeEffect(css::presentation::FadeEffect eNewEffect); 210 css::presentation::FadeEffect GetFadeEffect() const; 211 SetPresChange(PresChange eChange)212 void SetPresChange(PresChange eChange) { mePresChange = eChange; } GetPresChange() const213 PresChange GetPresChange() const { return mePresChange; } 214 SetTime(double fNewTime)215 void SetTime(double fNewTime) { mfTime = fNewTime; } GetTime() const216 double GetTime() const { return mfTime; } 217 SetSound(bool bNewSoundOn)218 void SetSound(bool bNewSoundOn) { mbSoundOn = bNewSoundOn; } IsSoundOn() const219 bool IsSoundOn() const { return mbSoundOn; } 220 SetExcluded(bool bNewExcluded)221 void SetExcluded(bool bNewExcluded) { mbExcluded = bNewExcluded; } IsExcluded() const222 bool IsExcluded() const { return mbExcluded; } 223 IsScaleObjects() const224 bool IsScaleObjects() const { return mbScaleObjects; } 225 SetSoundFile(const OUString & rStr)226 void SetSoundFile(const OUString& rStr) { maSoundFile = rStr; } GetSoundFile() const227 const OUString& GetSoundFile() const { return maSoundFile; } 228 SetLoopSound(bool bLoopSound)229 void SetLoopSound( bool bLoopSound ) { mbLoopSound = bLoopSound; } IsLoopSound() const230 bool IsLoopSound() const { return mbLoopSound; } 231 SetStopSound(bool bStopSound)232 void SetStopSound( bool bStopSound ) { mbStopSound = bStopSound; } IsStopSound() const233 bool IsStopSound() const { return mbStopSound; } 234 getTransitionType() const235 sal_Int16 getTransitionType() const { return mnTransitionType;} 236 void setTransitionType( sal_Int16 nTransitionType ); 237 getTransitionSubtype() const238 sal_Int16 getTransitionSubtype() const { return mnTransitionSubtype;} 239 void setTransitionSubtype( sal_Int16 nTransitionSubtype ); 240 getTransitionDirection() const241 bool getTransitionDirection() const { return mbTransitionDirection;} 242 void setTransitionDirection( bool bTransitionbDirection ); 243 getTransitionFadeColor() const244 sal_Int32 getTransitionFadeColor() const { return mnTransitionFadeColor;} 245 void setTransitionFadeColor( sal_Int32 nTransitionFadeColor ); 246 getTransitionDuration() const247 double getTransitionDuration() const { return mfTransitionDuration;} 248 void setTransitionDuration( double fTranstionDuration ); 249 250 virtual void Changed(const SdrObject& rObj, SdrUserCallType eType, 251 const ::tools::Rectangle& rOldBoundRect) override; 252 253 void SetLayoutName(const OUString& aName); GetLayoutName() const254 virtual OUString GetLayoutName() const override { return maLayoutName; } 255 SetFileName(const OUString & aName)256 void SetFileName(const OUString& aName) { maFileName = aName; } GetFileName() const257 const OUString& GetFileName() const { return maFileName; } SetBookmarkName(const OUString & aName)258 void SetBookmarkName(const OUString& aName) { maBookmarkName = aName; } GetBookmarkName() const259 const OUString& GetBookmarkName() const { return maBookmarkName; } 260 261 void ConnectLink(); 262 void DisconnectLink(); 263 264 void ScaleObjects(const Size& rNewPageSize, const ::tools::Rectangle& rNewBorderRect, 265 bool bScaleAllObj); 266 267 const OUString& GetName() const; GetRealName() const268 OUString const & GetRealName() const { return FmFormPage::GetName(); }; 269 270 void SetPresentationLayout(const OUString& rLayoutName, 271 bool bReplaceStyleSheets = true, 272 bool bSetMasterPage = true, 273 bool bReverseOrder = false); 274 void EndListenOutlineText(); 275 276 void SetBackgroundFullSize( bool bIn ); IsBackgroundFullSize() const277 bool IsBackgroundFullSize() const { return mbBackgroundFullSize; } 278 SetPaperBin(sal_uInt16 nBin)279 void SetPaperBin(sal_uInt16 nBin) { mnPaperBin = nBin; } GetPaperBin() const280 sal_uInt16 GetPaperBin() const { return mnPaperBin; } 281 virtual void SetOrientation(Orientation eOrient) override; 282 virtual Orientation GetOrientation() const override; 283 284 virtual SfxStyleSheet* GetTextStyleSheetForObject( SdrObject* pObj ) const override; 285 286 bool setAlienAttributes( const css::uno::Any& rAttributes ); 287 void getAlienAttributes( css::uno::Any& rAttributes ); 288 289 /** @return the main animation node 290 291 @throws css::uno::RuntimeException 292 */ 293 css::uno::Reference< css::animations::XAnimationNode > const & getAnimationNode(); 294 295 /** sets the main animation node 296 297 @throws css::uno::RuntimeException 298 */ 299 void setAnimationNode( css::uno::Reference< css::animations::XAnimationNode > const & xNode ); 300 301 /// @return a helper class to manipulate effects inside the main sequence 302 std::shared_ptr< sd::MainSequence > const & getMainSequence(); 303 304 /** quick check if this slide has an animation node. 305 This can be used to have a cost free check if there are no animations ad this slide. 306 If it returns true this does not mean that there are animations available. 307 */ 308 bool hasAnimationNode() const; 309 310 /// @return the SdPage implementation for the given XDrawPage or 0 if not available 311 static SdPage* getImplementation( const css::uno::Reference< css::drawing::XDrawPage >& xPage ); 312 313 /** removes all custom animations for the given shape */ 314 void removeAnimations( const SdrObject* pObj ); 315 316 /** Notify that the object has been renamed and the animation effects has to update. */ 317 void notifyObjectRenamed(const SdrObject* pObj); 318 319 /** Set the name of the page and broadcast a model change. 320 */ 321 void SetName (const OUString& rName); 322 323 const sd::HeaderFooterSettings& getHeaderFooterSettings() const; 324 void setHeaderFooterSettings( const sd::HeaderFooterSettings& rNewSettings ); 325 326 /** 327 @return true if the object from the ViewObjectContact should 328 be visible on this page while rendering. 329 330 bEdit selects if visibility test is for an editing view or a final render, 331 like printing. 332 */ 333 virtual bool checkVisibility( 334 const sdr::contact::ViewObjectContact& rOriginal, 335 const sdr::contact::DisplayInfo& rDisplayInfo, 336 bool bEdit ) override; 337 338 /** callback from the sd::View when a new paragraph for one object on this page is created */ 339 void onParagraphInserted( ::Outliner* pOutliner, Paragraph const * pPara, SdrObject* pObj ); 340 341 /** callback from the sd::View when a paragraph from one object on this page is removed */ 342 void onParagraphRemoving( ::Outliner* pOutliner, Paragraph const * pPara, SdrObject* pObj ); 343 344 /** callback from the sd::View when an object just left text edit mode */ 345 void onEndTextEdit( SdrObject* pObj ); 346 347 /** @return the presentation style with the given helpid from this masterpage or this 348 slides masterpage */ 349 SdStyleSheet* getPresentationStyle( sal_uInt32 nHelpId ) const; 350 351 /** removes all empty presentation objects from this slide */ 352 void RemoveEmptyPresentationObjects(); 353 354 ::tools::Rectangle GetTitleRect() const; 355 ::tools::Rectangle GetLayoutRect() const; 356 357 static void CalculateHandoutAreas( SdDrawDocument& rModel, AutoLayout eLayout, bool bHorizontal, std::vector< ::tools::Rectangle >& rAreas ); 358 359 /** Set the "precious" flag to the given value. 360 */ 361 void SetPrecious (const bool bIsPrecious); 362 363 /** The "precious" flag is used for master pages to prevent some unused 364 master pages from being deleted automatically. For pages 365 other than master pages this flag can be ignored. 366 @return 367 When this method returns <TRUE/> for a master page then this 368 master page should not be deleted automatically. 369 */ IsPrecious() const370 bool IsPrecious() const { return mbIsPrecious; } 371 372 void createAnnotation( css::uno::Reference< css::office::XAnnotation >& xAnnotation ); 373 void addAnnotation( const css::uno::Reference< css::office::XAnnotation >& xAnnotation, int nIndex ); 374 void removeAnnotation( const css::uno::Reference< css::office::XAnnotation >& xAnnotation ); getAnnotations() const375 const sd::AnnotationVector& getAnnotations() const { return maAnnotations; } 376 bool Equals(const SdPage&) const; 377 virtual void dumpAsXml(xmlTextWriterPtr pWriter) const override; getPageId() const378 sal_uInt16 getPageId() const { return mnPageId; } 379 380 static sal_uInt16 mnLastPageId; 381 382 private: 383 bool mbIsPrecious; 384 385 // page id of this page 386 sal_uInt16 const mnPageId; 387 388 /** clone the animations from this and set them to rTargetPage 389 * TTTT: Order is strange, should be the other way around by 390 * convention/convenience and makes usage a little dangerous... 391 */ 392 void cloneAnimations( SdPage& rTargetPage ) const; 393 394 /** called before a shape is removed or replaced from this slide */ 395 void onRemoveObject( SdrObject* pObject ); 396 }; 397 398 #endif // INCLUDED_SD_INC_SDPAGE_HXX 399 400 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 401