xref: /AOO41X/main/sd/inc/sdpage.hxx (revision 67e470dafe1997e73f56ff7ff4878983707e3e07)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _SDPAGE_HXX
25 #define _SDPAGE_HXX
26 
27 #ifndef BOOST_SHARED_PTR_HPP_INCLUDED
28 #include <boost/shared_ptr.hpp>
29 #endif
30 
31 #ifndef INCLUDED_FUNCTIONAL
32 #include <functional>
33 #define INCLUDED_FUNCTIONAL
34 #endif
35 #include <com/sun/star/drawing/XDrawPage.hpp>
36 #include <com/sun/star/presentation/FadeEffect.hpp>
37 #include <com/sun/star/office/XAnnotation.hpp>
38 
39 #include <list>
40 #include <functional>
41 #include <vector>
42 #include <svx/svdobj.hxx>
43 #ifndef _FM_FMPAGE_HXX //autogen
44 #include <svx/fmpage.hxx>
45 #endif
46 #include "fadedef.h"
47 #include "diadef.h"
48 #ifndef _PRESENTATION
49 #include "pres.hxx"
50 #endif
51 #include "shapelist.hxx"
52 #include "misc/scopelock.hxx"
53 #include "sddllapi.h"
54 
55 namespace com { namespace sun { namespace star { namespace animations {
56     class XAnimationNode;
57 } } } }
58 
59 class SfxStyleSheet;
60 class SdDrawDocument;
61 class SdrTextObj;
62 class SdPageLink;
63 class StarBASIC;
64 class SfxItemSet;
65 struct StyleRequestData;
66 class SdPage;
67 class Paragraph;
68 class Outliner;
69 class SdStyleSheet;
70 
71 namespace sd
72 {
73     class MainSequence;
74 }
75 
76 namespace boost
77 {
78     template<class X> class shared_ptr;
79 }
80 
81 namespace sd {
82 
83     struct SD_DLLPUBLIC HeaderFooterSettings
84     {
85         bool mbHeaderVisible;
86         String maHeaderText;
87 
88         bool mbFooterVisible;
89         String maFooterText;
90 
91         bool mbSlideNumberVisible;
92 
93         bool mbDateTimeVisible;
94         bool mbDateTimeIsFixed;
95         String maDateTimeText;
96         int meDateTimeFormat;
97 
98         HeaderFooterSettings();
99 
100         bool operator==( const HeaderFooterSettings& rSettings ) const;
101     };
102 
103     typedef std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::office::XAnnotation > > AnnotationVector;
104 }
105 
106 namespace sd {
107     class UndoAnimation;
108     class UndoTransition;
109     class UndoGeoObject;
110     class UndoAttrObject;
111 }
112 
113 class SD_DLLPUBLIC SdPage : public FmFormPage, public SdrObjUserCall
114 {
115 friend class SdGenericDrawPage;
116 friend class SdDrawPage;
117 friend class sd::UndoAnimation;
118 friend class sd::UndoTransition;
119 friend class ModifyPageUndoAction;
120 friend class sd::UndoGeoObject;
121 friend class sd::UndoAttrObject;
122 
123 protected:
124     PageKind    mePageKind;               // Seitentyp
125     AutoLayout  meAutoLayout;             // AutoLayout
126     sd::ShapeList maPresentationShapeList;            // Praesentationsobjekte
127     sd::ScopeLock maLockAutoLayoutArrangement;
128     sal_Bool        mbSelected;               // Selektionskennung
129     PresChange  mePresChange;             // manuell/automatisch/halbautomatisch
130     sal_uInt32      mnTime;                   // Anzeigedauer in Sekunden
131     sal_Bool        mbSoundOn;                // mit/ohne Sound (sal_True/sal_False)
132     sal_Bool        mbExcluded;               // wird in der Show nicht/doch
133                                           // angezeigt (sal_True/sal_False)
134     String      maLayoutName;             // Name des Layouts
135     String      maSoundFile;               // Pfad zum Soundfile (MSDOS-Notation)
136     bool        mbLoopSound;
137     bool        mbStopSound;
138     String      maCreatedPageName;         // von GetPageName erzeugter Seitenname
139     String      maFileName;                // Filename
140     String      maBookmarkName;           // Bookmarkname
141     sal_Bool        mbScaleObjects;           // Objekte sollen skaliert werden
142     sal_Bool        mbBackgroundFullSize;     // Hintergrundobjekt auf ganze Seite darstellen
143     rtl_TextEncoding meCharSet;            // Text-Encoding
144     sal_uInt16      mnPaperBin;                // PaperBin
145     Orientation meOrientation;             // Print-Orientation
146     SdPageLink* mpPageLink;               // PageLink (nur bei gelinkten Seiten)
147 
148     sd::AnnotationVector    maAnnotations;
149 
150     /** holds the smil animation sequences for this page */
151     ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode > mxAnimationNode;
152 
153     /** a helper class to manipulate effects inside the main sequence */
154     boost::shared_ptr< sd::MainSequence > mpMainSequence;
155 
156     virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > createUnoPage();
157 
158     SfxItemSet* mpItems;
159 
160     SfxItemSet* getOrCreateItems();
161 
162     sd::HeaderFooterSettings    maHeaderFooterSettings;
163 
164     // new transition settings
165     sal_Int16 mnTransitionType;
166     sal_Int16 mnTransitionSubtype;
167     sal_Bool mbTransitionDirection;
168     sal_Int32 mnTransitionFadeColor;
169     double mfTransitionDuration;
170 
171 public:
172     TYPEINFO();
173 
174     SdPage(SdDrawDocument& rNewDoc, StarBASIC* pBasic, sal_Bool bMasterPage=sal_False);
175     SdPage(const SdPage& rSrcPage);
176     ~SdPage();
177     virtual SdrPage* Clone() const;
178     virtual SdrPage* Clone(SdrModel* pNewModel) const;
179 
180     virtual void    SetSize(const Size& aSize);
181     virtual void    SetBorder(sal_Int32 nLft, sal_Int32 nUpp, sal_Int32 nRgt, sal_Int32 Lwr);
182     virtual void    SetLftBorder(sal_Int32 nBorder);
183     virtual void    SetRgtBorder(sal_Int32 nBorder);
184     virtual void    SetUppBorder(sal_Int32 nBorder);
185     virtual void    SetLwrBorder(sal_Int32 nBorder);
186     virtual void    SetModel(SdrModel* pNewModel);
187     virtual FASTBOOL IsReadOnly() const;
188 
GetPresentationShapeList()189     sd::ShapeList&  GetPresentationShapeList() { return maPresentationShapeList; }
190 
191     void EnsureMasterPageDefaultBackground();
192     SdrObject*      CreatePresObj(PresObjKind eObjKind, sal_Bool bVertical, const Rectangle& rRect, sal_Bool bInsert=sal_False);
193     SdrObject*      CreateDefaultPresObj(PresObjKind eObjKind, bool bInsert);
194     SdrObject*      GetPresObj(PresObjKind eObjKind, int nIndex = 1, bool bFuzzySearch = false );
195     PresObjKind     GetPresObjKind(SdrObject* pObj) const;
196     String          GetPresObjText(PresObjKind eObjKind) const;
197     SfxStyleSheet* GetStyleSheetForMasterPageBackground() const;
198     SfxStyleSheet*  GetStyleSheetForPresObj(PresObjKind eObjKind) const;
199     bool            RestoreDefaultText( SdrObject* pObj );
200 
201     /** returns true if the given SdrObject is inside the presentation object list */
202     bool            IsPresObj(const SdrObject* pObj);
203 
204     /** removes the given SdrObject from the presentation object list */
205     void            RemovePresObj(const SdrObject* pObj);
206 
207     /** inserts the given SdrObject into the presentation object list */
208     void            InsertPresObj(SdrObject* pObj, PresObjKind eKind );
209 
210     void            SetAutoLayout(AutoLayout eLayout, sal_Bool bInit=sal_False, sal_Bool bCreate=sal_False);
GetAutoLayout() const211     AutoLayout      GetAutoLayout() const { return meAutoLayout; }
212     void            CreateTitleAndLayout(sal_Bool bInit=sal_False, sal_Bool bCreate=sal_False);
213     SdrObject*      InsertAutoLayoutShape(SdrObject* pObj, PresObjKind eObjKind, bool bVertical, Rectangle aRect, bool bInit );
214 
215     virtual void       NbcInsertObject(SdrObject* pObj, sal_uLong nPos=CONTAINER_APPEND,
216                                        const SdrInsertReason* pReason=NULL);
217     virtual SdrObject* NbcRemoveObject(sal_uLong nObjNum);
218     virtual SdrObject* RemoveObject(sal_uLong nObjNum);
219 
220     // #95876# Also overload ReplaceObject methods to realize when
221     // objects are removed with this mechanism instead of RemoveObject
222     virtual SdrObject* NbcReplaceObject(SdrObject* pNewObj, sal_uLong nObjNum);
223     virtual SdrObject* ReplaceObject(SdrObject* pNewObj, sal_uLong nObjNum);
224 
225     virtual void SetLinkData(const String& rLinkName, const String& rLinkData);
226 
227     void        SetObjText(SdrTextObj* pObj, SdrOutliner* pOutliner, PresObjKind eObjKind, const String& rStr );
228 
SetPageKind(PageKind ePgType)229     void        SetPageKind(PageKind ePgType)        { mePageKind = ePgType; }
GetPageKind() const230     PageKind    GetPageKind() const                  { return mePageKind; }
231 
SetSelected(sal_Bool bSel)232     void        SetSelected(sal_Bool bSel)               { mbSelected = bSel; }
IsSelected() const233     sal_Bool        IsSelected() const                   { return mbSelected; }
234 
235     void        SetFadeEffect(::com::sun::star::presentation::FadeEffect eNewEffect);
236     ::com::sun::star::presentation::FadeEffect  GetFadeEffect() const;
237 
SetPresChange(PresChange eChange)238     void        SetPresChange(PresChange eChange)    { mePresChange = eChange; }
GetPresChange() const239     PresChange  GetPresChange() const                { return mePresChange; }
240 
SetTime(sal_uInt32 nNewTime)241     void        SetTime(sal_uInt32 nNewTime)             { mnTime = nNewTime; }
GetTime() const242     sal_uInt32      GetTime() const                      { return mnTime; }
243 
SetSound(sal_Bool bNewSoundOn)244     void        SetSound(sal_Bool bNewSoundOn)           { mbSoundOn = bNewSoundOn; }
IsSoundOn() const245     sal_Bool        IsSoundOn() const                    { return mbSoundOn; }
246 
SetExcluded(sal_Bool bNewExcluded)247     void        SetExcluded(sal_Bool bNewExcluded)      { mbExcluded = bNewExcluded; }
IsExcluded() const248     sal_Bool        IsExcluded() const                  { return mbExcluded; }
249 
SetScaleObjects(sal_Bool bScale)250     void        SetScaleObjects(sal_Bool bScale)        { mbScaleObjects = bScale; }
IsScaleObjects() const251     sal_Bool        IsScaleObjects() const              { return mbScaleObjects; }
252 
SetSoundFile(const String & rStr)253     void        SetSoundFile(const String& rStr)    { maSoundFile = rStr; }
GetSoundFile() const254     String      GetSoundFile() const                { return maSoundFile; }
255 
SetLoopSound(bool bLoopSound)256     void        SetLoopSound( bool bLoopSound ) { mbLoopSound = bLoopSound; }
IsLoopSound() const257     bool        IsLoopSound() const                 { return mbLoopSound; }
258 
SetStopSound(bool bStopSound)259     void        SetStopSound( bool bStopSound ) { mbStopSound = bStopSound; }
IsStopSound() const260     bool        IsStopSound() const             { return mbStopSound; }
261 
262     sal_Int16   getTransitionType() const;
263     void        setTransitionType( sal_Int16 nTransitionType );
264 
265     sal_Int16   getTransitionSubtype() const;
266     void        setTransitionSubtype( sal_Int16 nTransitionSubtype );
267 
268     sal_Bool    getTransitionDirection() const;
269     void        setTransitionDirection( sal_Bool bTransitionbDirection );
270 
271     sal_Int32   getTransitionFadeColor() const;
272     void        setTransitionFadeColor( sal_Int32 nTransitionFadeColor );
273 
274     double      getTransitionDuration() const;
275     void        setTransitionDuration( double fTranstionDuration );
276 
277     // Virtuelle Methoden von SdrObjUserCall
278     virtual void Changed(const SdrObject& rObj, SdrUserCallType eType,
279                          const Rectangle& rOldBoundRect);
280 
281     void            SetLayoutName(String aName);
GetLayoutName() const282     virtual String  GetLayoutName() const       { return maLayoutName; }
283 
SetFileName(const String & aName)284     void            SetFileName(const String& aName) { maFileName = aName; }
GetFileName() const285     virtual String  GetFileName() const       { return maFileName; }
SetBookmarkName(const String & aName)286     void            SetBookmarkName(const String& aName) { maBookmarkName = aName; }
GetBookmarkName() const287     virtual String  GetBookmarkName() const       { return maBookmarkName; }
GetLink()288     SdPageLink*     GetLink() { return mpPageLink; }
289 
290     void            ConnectLink();
291     void            DisconnectLink();
292 
293     void    ScaleObjects(const Size& rNewPageSize, const Rectangle& rNewBorderRect,
294                          sal_Bool bScaleAllObj);
295 
296     const String&   GetName() const;
GetRealName() const297     String          GetRealName() const { return FmFormPage::GetName(); };
298 
299     void    SetPresentationLayout(const String& rLayoutName,
300                                   sal_Bool bReplaceStyleSheets = sal_True,
301                                   sal_Bool bSetMasterPage = sal_True,
302                                   sal_Bool bReverseOrder = sal_False);
303     void    EndListenOutlineText();
304 
305     void    SetBackgroundFullSize( sal_Bool bIn );
IsBackgroundFullSize() const306     sal_Bool    IsBackgroundFullSize() const { return mbBackgroundFullSize; }
307 
GetCharSet()308     rtl_TextEncoding GetCharSet() { return(meCharSet); }
309 
SetPaperBin(sal_uInt16 nBin)310     void    SetPaperBin(sal_uInt16 nBin) { mnPaperBin = nBin; }
GetPaperBin() const311     sal_uInt16  GetPaperBin() const { return mnPaperBin; }
312     virtual void        SetOrientation(Orientation eOrient);
313     virtual Orientation GetOrientation() const;
314 
315     virtual SfxStyleSheet* GetTextStyleSheetForObject( SdrObject* pObj ) const;
316 
317     sal_Bool setAlienAttributes( const com::sun::star::uno::Any& rAttributes );
318     void getAlienAttributes( com::sun::star::uno::Any& rAttributes );
319 
320     /** returns the main animation node */
321     ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode > getAnimationNode() throw (::com::sun::star::uno::RuntimeException);
322 
323     /** sets the main animation node */
324     void setAnimationNode( ::com::sun::star::uno::Reference< ::com::sun::star::animations::XAnimationNode >& xNode ) throw (::com::sun::star::uno::RuntimeException);
325 
326     /** returns a helper class to manipulate effects inside the main sequence */
327     boost::shared_ptr< sd::MainSequence > getMainSequence();
328 
329     /** quick check if this slide has an animation node.
330         This can be used to have a cost free check if there are no animations ad this slide.
331         If it returns true this does not mean that there are animations available.
332     */
333     bool hasAnimationNode() const;
334 
335     /** returns the SdPage implementation for the given XDrawPage or 0 if not available */
336     static SdPage* getImplementation( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage >& xPage );
337 
338     /** removes all custom animations for the given shape */
339     void removeAnimations( const SdrObject* pObj );
340 
341     /** Set the name of the page and broadcast a model change.
342     */
343     virtual void SetName (const String& rName);
344 
345     const sd::HeaderFooterSettings& getHeaderFooterSettings() const;
346     void setHeaderFooterSettings( const sd::HeaderFooterSettings& rNewSettings );
347 
348     /** this method returns true if the object from the ViewObjectContact should
349         be visible on this page while rendering.
350         bEdit selects if visibility test is for an editing view or a final render,
351         like printing.
352     */
353     virtual bool checkVisibility(
354         const sdr::contact::ViewObjectContact& rOriginal,
355         const sdr::contact::DisplayInfo& rDisplayInfo,
356         bool bEdit );
357 
358     /** callback from the sd::View when a new paragraph for one object on this page is created */
359     void onParagraphInserted( ::Outliner* pOutliner, Paragraph* pPara, SdrObject* pObj );
360 
361     /** callback from the sd::View when a paragraph from one object on this page is removed */
362     void onParagraphRemoving( ::Outliner* pOutliner, Paragraph* pPara, SdrObject* pObj );
363 
364     /** callback from the sd::View when an object just left text edit mode */
365     void onEndTextEdit( SdrObject* pObj );
366 
367     /** returns the presentation style with the given helpid from this masterpage or this
368         slides masterpage */
369     SdStyleSheet* getPresentationStyle( sal_uInt32 nHelpId ) const;
370 
371     /** removes all empty presentation objects from this slide */
372     void RemoveEmptyPresentationObjects();
373 
374     Rectangle   GetTitleRect() const;
375     Rectangle   GetLayoutRect() const;
376 
377     static void CalculateHandoutAreas( SdDrawDocument& rModel, AutoLayout eLayout, bool bHorizontal, std::vector< Rectangle >& rAreas );
378 
379     /** Set the "precious" flag to the given value.
380     */
381     void SetPrecious (const bool bIsPrecious);
382 
383     /** The "precious" flag is used for master pages to prevent some unused
384         master pages from being deleted automatically.  For pages
385         other than master pages this flag can be ignored.
386         @return
387             When this method returns <TRUE/> for a master page then this
388             master page should not be deleted automatically.
389     */
390     bool IsPrecious (void) const;
391 
392     void createAnnotation( ::com::sun::star::uno::Reference< ::com::sun::star::office::XAnnotation >& xAnnotation );
393     void addAnnotation( const ::com::sun::star::uno::Reference< ::com::sun::star::office::XAnnotation >& xAnnotation, int nIndex = -1 );
394     void removeAnnotation( const ::com::sun::star::uno::Reference< ::com::sun::star::office::XAnnotation >& xAnnotation );
getAnnotations() const395     const sd::AnnotationVector& getAnnotations() const { return maAnnotations; }
hasAnnotations() const396     bool hasAnnotations() const { return !maAnnotations.empty(); }
397 
398 private:
399     bool mbIsPrecious;
400 
401     /** clone the animations from this and set them to rTargetPage
402     */
403     void cloneAnimations( SdPage& rTargetPage ) const;
404 
405     /** called before a shape is removed or replaced from this slide */
406     void onRemoveObject( SdrObject* pObject );
407 };
408 
409 #endif     // _SDPAGE_HXX
410