xref: /trunk/main/svx/inc/svx/svdpage.hxx (revision 86e1cf34)
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 _SVDPAGE_HXX
25 #define _SVDPAGE_HXX
26 
27 #include <vcl/bitmap.hxx>
28 #include <vcl/print.hxx>
29 #include <vcl/gdimtf.hxx>
30 #include <tools/weakbase.hxx>
31 #include <cppuhelper/weakref.hxx>
32 #include <svx/svdtypes.hxx>
33 #include <svx/svdlayer.hxx>
34 #include <svx/sdrcomment.hxx>
35 #include <vector>
36 #include <svx/sdrpageuser.hxx>
37 #include <svx/sdr/contact/viewobjectcontactredirector.hxx>
38 #include <svx/sdrmasterpagedescriptor.hxx>
39 #include "svx/svxdllapi.h"
40 #include <com/sun/star/container/XIndexAccess.hpp>
41 #include <svx/svdobj.hxx>
42 #include <boost/scoped_ptr.hpp>
43 
44 //////////////////////////////////////////////////////////////////////////////
45 // predefines
46 
47 namespace sdr { namespace contact { class ViewContact; }}
48 class SdrPage;
49 class SdrModel;
50 class SfxItemPool;
51 class SdrPageView;
52 class SdrLayerAdmin;
53 class SetOfByte;
54 class Color;
55 class SfxStyleSheet;
56 class SvxUnoDrawPagesAccess;
57 
58 enum SdrInsertReasonKind {SDRREASON_UNKNOWN,    // unbekannt
59 						  SDRREASON_STREAMING,  // einlesen eines Doks
60 						  SDRREASON_UNDO,       // kommt aus dem Undo
61 						  SDRREASON_COPY,       // irgendjemand kopiert...
62 						  SDRREASON_VIEWCREATE, // vom Anwender interaktiv erzeugt
63 						  SDRREASON_VIEWCALL};  // Durch SdrView::Group(), ...
64 
65 class SdrInsertReason {
66 	const SdrObject* pRefObj;
67 	SdrInsertReasonKind eReason;
68 public:
SdrInsertReason()69 	SdrInsertReason(): pRefObj(NULL),eReason(SDRREASON_UNKNOWN) {}
SdrInsertReason(SdrInsertReasonKind eR,const SdrObject * pO=NULL)70 	SdrInsertReason(SdrInsertReasonKind eR,const SdrObject* pO=NULL): pRefObj(pO),eReason(eR) {}
SetReferenceObject(const SdrObject * pO)71 	void SetReferenceObject(const SdrObject* pO)  { pRefObj=pO; }
GetReferenceObject() const72 	const SdrObject* GetReferenceObject() const   { return pRefObj; }
SetReason(SdrInsertReasonKind eR)73 	void SetReason(SdrInsertReasonKind eR)        { eReason=eR; }
GetReason() const74 	SdrInsertReasonKind GetReason() const         { return eReason; }
75 };
76 
77 //////////////////////////////////////////////////////////////////////////////
78 // class SdrObjList
79 
80 class SVX_DLLPUBLIC SdrObjList
81 {
82 private:
83     typedef ::std::vector<SdrObject*> SdrObjectContainerType;
84 	SdrObjectContainerType maList;
85 
86 protected:
87 friend class SdrObjListIter;
88 friend class SdrEditView;
89 	SdrObjList* pUpList;   // Vaterliste
90 	SdrModel*   pModel;    // Diese Liste gehoert zu diesem Model (Layer,ItemPool,Storage).
91 	SdrPage*    pPage;     // Page, in die Liste haengt. Kann auch this sein.
92 	SdrObject*  pOwnerObj; // OwnerObject, falls Liste eines GruppenObjekts.
93 	Rectangle   aOutRect;
94 	Rectangle   aSnapRect;
95 	SdrObjListKind eListKind;
96 	FASTBOOL    bObjOrdNumsDirty;
97 	FASTBOOL    bRectsDirty;
98 protected:
99 	virtual void RecalcRects();
100 
101 private:
102 	/// simple ActionChildInserted forwarder to have it on a central place
103 	void impChildInserted(SdrObject& rChild) const;
104 public:
105 	TYPEINFO();
106 	SdrObjList(SdrModel* pNewModel, SdrPage* pNewPage, SdrObjList* pNewUpList=NULL);
107 	SdrObjList(const SdrObjList& rSrcList);
108 	virtual ~SdrObjList();
109 	// !!! Diese Methode nur fuer Leute, die ganz genau wissen was sie tun !!!
110 
111 	// #110094# This should not be needed (!)
SetObjOrdNumsDirty()112 	void SetObjOrdNumsDirty()                           { bObjOrdNumsDirty=sal_True; }
113 	// pModel, pPage, pUpList und pOwnerObj werden Zuweisungeoperator nicht veraendert!
114 	void operator=(const SdrObjList& rSrcList);
115 	void CopyObjects(const SdrObjList& rSrcList);
116 	// alles Aufraeumen (ohne Undo)
117 	void    Clear();
GetListKind() const118 	SdrObjListKind GetListKind() const                  { return eListKind; }
SetListKind(SdrObjListKind eNewKind)119 	void           SetListKind(SdrObjListKind eNewKind) { eListKind=eNewKind; }
GetUpList() const120 	SdrObjList*    GetUpList() const                    { return pUpList; }
SetUpList(SdrObjList * pNewUpList)121 	void           SetUpList(SdrObjList* pNewUpList)    { pUpList=pNewUpList; }
GetOwnerObj() const122 	SdrObject*     GetOwnerObj() const                  { return pOwnerObj; }
SetOwnerObj(SdrObject * pNewOwner)123 	void           SetOwnerObj(SdrObject* pNewOwner)    { pOwnerObj=pNewOwner; }
124 	virtual SdrPage* GetPage() const;
125 	virtual void     SetPage(SdrPage* pNewPage);
126 	virtual SdrModel* GetModel() const;
127 	virtual void      SetModel(SdrModel* pNewModel);
128 	// Neuberechnung der Objekt-Ordnungsnummern
129 	void     RecalcObjOrdNums();
IsObjOrdNumsDirty() const130 	FASTBOOL IsObjOrdNumsDirty() const        { return bObjOrdNumsDirty; }
131 	virtual void NbcInsertObject(SdrObject* pObj, sal_uIntPtr nPos=CONTAINER_APPEND
132 								 , const SdrInsertReason* pReason=NULL
133 																	  );
134 	virtual void InsertObject(SdrObject* pObj, sal_uIntPtr nPos=CONTAINER_APPEND
135 							  , const SdrInsertReason* pReason=NULL
136 																	 );
137 	// aus Liste entfernen ohne delete
138 	virtual SdrObject* NbcRemoveObject(sal_uIntPtr nObjNum);
139 	virtual SdrObject* RemoveObject(sal_uIntPtr nObjNum);
140 	// Vorhandenes Objekt durch ein anderes ersetzen.
141 	// Wie Remove&Insert jedoch performanter, da die Ordnungsnummern
142 	// nicht Dirty gesetzt werden muessen.
143 	virtual SdrObject* NbcReplaceObject(SdrObject* pNewObj, sal_uIntPtr nObjNum);
144 	virtual SdrObject* ReplaceObject(SdrObject* pNewObj, sal_uIntPtr nObjNum);
145 	// Die Z-Order eines Objekts veraendern
146 	virtual SdrObject* NbcSetObjectOrdNum(sal_uIntPtr nOldObjNum, sal_uIntPtr nNewObjNum);
147 	virtual SdrObject* SetObjectOrdNum(sal_uIntPtr nOldObjNum, sal_uIntPtr nNewObjNum);
148 
149 	virtual void SetRectsDirty();
150 
151 	const Rectangle& GetAllObjSnapRect() const;
152 	const Rectangle& GetAllObjBoundRect() const;
153 
154 	// Alle Textobjekte neu formatieren, z.B. bei Druckerwechsel
155 	void NbcReformatAllTextObjects();
156 	void ReformatAllTextObjects();
157 
158 	/** #103122# reformats all edge objects that are connected to other objects */
159 	void ReformatAllEdgeObjects();
160 
161 	// Die Vorlagenattribute der Zeichenobjekte in harte Attribute verwandeln.
162 	void BurnInStyleSheetAttributes();
163 
164 	sal_uIntPtr      GetObjCount() const;
165 	SdrObject* GetObj(sal_uIntPtr nNum) const;
166 
167 	// Gelinkte Seite oder gelinktes Gruppenobjekt
168 	virtual FASTBOOL IsReadOnly() const;
169 
170 	// Zaehlt alle Objekte inkl. Objekte in Objektgruppen, ...
171 	sal_uIntPtr   CountAllObjects() const;
172 
173 	// Alle aufgelagerten Teile (z.B. Grafiken) der Liste in den
174 	// Speicher laden.
175 	void	ForceSwapInObjects() const;
176     void    ForceSwapOutObjects() const;
177 
SwapInAll() const178     void	SwapInAll() const { ForceSwapInObjects(); }
SwapOutAll() const179     void	SwapOutAll() const { ForceSwapOutObjects(); }
180 
181     /** Makes the object list flat, i.e. the object list content are
182         then tree leaves
183 
184     	This method travels recursively over all group objects in this
185     	list, extracts the content, inserts it flat to the list and
186     	removes the group object afterwards.
187      */
188     virtual void FlattenGroups();
189     /** Ungroup the object at the given index
190 
191     	This method ungroups the content of the group object at the
192     	given index, i.e. the content is put flat into the object list
193     	(if the object at the given index is no group, this method is
194     	a no-op). If the group itself contains group objects, the
195     	operation is performed recursively, such that the content of
196     	the given object contains no groups afterwards.
197      */
198     virtual void UnGroupObj( sal_uIntPtr nObjNum );
199 
200     /** Return whether there is an explicit, user defined, object navigation
201         order.  When there is one this method returns <TRUE/> and the
202         GetObjectForNavigationPosition() and
203         SdrObject::GetNavigationPosition() methods will return values
204         different from those returne by SdrObject::GetOrdNum() and
205         GetObj().
206     */
207     bool HasObjectNavigationOrder (void) const;
208 
209     /** Set the navigation position of the given object to the specified
210         value.  Note that this changes the navigation position for all
211         objects on or following the old or new position.
212     */
213     void SetObjectNavigationPosition (
214         SdrObject& rObject,
215         const sal_uInt32 nNewNavigationPosition);
216 
217     /** Return the object for the given navigation position.  When there is
218         a user defined navigation order, i.e. mpNavigationOrder is not NULL,
219         then that is used to look up the object.  Otherwise the z-order is
220         used by looking up the object in maList.
221         @param nNavigationPosition
222             Valid values include 0 and are smaller than the number of
223             objects as returned by GetObjCount().
224         @return
225             The returned pointer is NULL for invalid positions.
226     */
227     SdrObject* GetObjectForNavigationPosition (const sal_uInt32 nNavigationPosition) const;
228 
229     /** Restore the navigation order to that defined by the z-order.
230     */
231     void ClearObjectNavigationOrder (void);
232 
233     /** Set the navigation position of all SdrObjects to their position in
234         the mpNavigationOrder list.  This method returns immediately when no
235         update is necessary.
236         @return
237             This method returns <TRUE/> when the navigation positions stored
238             in SdrObjects are up to date.
239             It returns <FALSE/> when the navigation positions are not valid,
240             for example because no explicit navigation order has been
241             defined, i.e. HasObjectNavigationOrder() would return <FALSE/>.
242     */
243     bool RecalcNavigationPositions (void);
244 
245     /** Set the navigation order to the one defined by the given list of
246         XShape objects.
247         @param rxOrder
248             When this is an empty reference then the navigation order is
249             reset to the z-order. The preferred way to do this, however, is
250             to call ClearObjectNavigationOrder().
251             Otherwise this list is expected to contain all the shapes in the
252             called SdrObjList.
253     */
254     void SetNavigationOrder (const ::com::sun::star::uno::Reference<
255         ::com::sun::star::container::XIndexAccess>& rxOrder);
256 
257 private:
258     class WeakSdrObjectContainerType;
259     /// This list, if it exists, defines the navigation order.  It it does
260     /// not exist then maList defines the navigation order.
261     ::boost::scoped_ptr<WeakSdrObjectContainerType> mpNavigationOrder;
262 
263     /// This flag is <TRUE/> when the mpNavigation list has been changed but
264     /// the indices of the referenced SdrObjects still have their old values.
265 	bool mbIsNavigationOrderDirty;
266 
267     /** Insert an SdrObject into maList.  Do not modify the maList member
268         directly.
269         @param rObject
270             The object to insert into the object list.
271         @param nInsertPosition
272             The given object is inserted before the object at this
273             position.  Valid values include 0 (the object is inserted at the
274             head of the list) and the number of objects in the list as
275             returned by GetObjCount() (the object is inserted at the end of
276             the list.)
277     */
278     void InsertObjectIntoContainer (
279         SdrObject& rObject,
280         const sal_uInt32 nInsertPosition);
281 
282     /** Replace an object in the object list.
283         @param rObject
284             The new object that replaces the one in the list at the
285             specified position.
286         @param nObjectPosition
287             The object at this position in the object list is replaced by
288             the given object.  Valid values include 0 and are smaller than
289             the number of objects in the list.
290     */
291     void ReplaceObjectInContainer (
292         SdrObject& rObject,
293         const sal_uInt32 nObjectPosition);
294 
295     /** Remove an object from the object list.
296         The object list has to contain at least one element.
297         @param nObjectPosition
298             The object at this position is removed from the object list.
299             Valid values include 0 and are smaller than the number of
300             objects in the list.
301     */
302     void RemoveObjectFromContainer (
303         const sal_uInt32 nObjectPosition);
304 };
305 
306 /*
307 Eine Sdraw-Seite enthaelt genau eine Objektliste sowie eine Beschreibung
308 der physikalischen Seitendimensionen (Groesse/Raender). Letzteres wird
309 lediglich zum Fangen von Objekten beim Draggen benoetigt.
310 An der Seite lassen sich (ueber SdrObjList) Objekte einfuegen und loeschen,
311 nach vorn und nach hinten stellen. Ausserdem kann die Ordnungszahl eines
312 Objektes abgefragt sowie direkt gesetzt werden.
313 */
314 
315 // Used for all methods which return a page number
316 #define SDRPAGE_NOTFOUND 0xFFFF
317 
318 //////////////////////////////////////////////////////////////////////////////
319 // class SdrPageGridFrame
320 
321 // Fuer das Fangraster/Punkgitter im Writer
322 class SdrPageGridFrame
323 {
324 	Rectangle aPaper;
325 	Rectangle aUserArea;
326 public:
SdrPageGridFrame(const Rectangle & rPaper)327 	SdrPageGridFrame(const Rectangle& rPaper): aPaper(rPaper), aUserArea(rPaper) {}
SdrPageGridFrame(const Rectangle & rPaper,const Rectangle & rUser)328 	SdrPageGridFrame(const Rectangle& rPaper, const Rectangle& rUser): aPaper(rPaper), aUserArea(rUser) {}
SetPaperRect(const Rectangle & rPaper)329 	void             SetPaperRect(const Rectangle& rPaper) { aPaper=rPaper; }
SetUserArea(const Rectangle & rUser)330 	void             SetUserArea(const Rectangle& rUser)   { aUserArea=rUser; }
GetPaperRect() const331 	const Rectangle& GetPaperRect() const                  { return aPaper; }
GetUserArea() const332 	const Rectangle& GetUserArea() const                   { return aUserArea; }
333 };
334 
335 class SVX_DLLPUBLIC SdrPageGridFrameList {
336 	Container aList;
337 private:
338 	SVX_DLLPRIVATE SdrPageGridFrameList(const SdrPageGridFrameList& rSrcList);      // never implemented
339 	SVX_DLLPRIVATE void           operator=(const SdrPageGridFrameList& rSrcList);  // never implemented
340 protected:
GetObject(sal_uInt16 i) const341 	SdrPageGridFrame* GetObject(sal_uInt16 i) const { return (SdrPageGridFrame*)(aList.GetObject(i)); }
342 public:
SdrPageGridFrameList()343 	SdrPageGridFrameList(): aList(1024,4,4)                            {}
~SdrPageGridFrameList()344 	~SdrPageGridFrameList()                                            { Clear(); }
345 	void           Clear();
GetCount() const346 	sal_uInt16         GetCount() const                                    { return sal_uInt16(aList.Count()); }
Insert(const SdrPageGridFrame & rGF,sal_uInt16 nPos=0xFFFF)347 	void           Insert(const SdrPageGridFrame& rGF, sal_uInt16 nPos=0xFFFF) { aList.Insert(new SdrPageGridFrame(rGF),nPos); }
Delete(sal_uInt16 nPos)348 	void           Delete(sal_uInt16 nPos)                                 { delete (SdrPageGridFrame*)aList.Remove(nPos); }
Move(sal_uInt16 nPos,sal_uInt16 nNewPos)349 	void           Move(sal_uInt16 nPos, sal_uInt16 nNewPos)                   { aList.Insert(aList.Remove(nPos),nNewPos); }
operator [](sal_uInt16 nPos)350 	SdrPageGridFrame&       operator[](sal_uInt16 nPos)                    { return *GetObject(nPos); }
operator [](sal_uInt16 nPos) const351 	const SdrPageGridFrame& operator[](sal_uInt16 nPos) const              { return *GetObject(nPos); }
352 };
353 
354 ////////////////////////////////////////////////////////////////////////////////////////////////////
355 // class SdrPageProperties
356 
357 class SVX_DLLPUBLIC SdrPageProperties : public SfxListener
358 {
359 private:
360     // data
361     SdrPage*                mpSdrPage;
362     SfxStyleSheet*          mpStyleSheet;
363     SfxItemSet*             mpProperties;
364 
365     // internal helpers
366 	void ImpRemoveStyleSheet();
367 	void ImpAddStyleSheet(SfxStyleSheet& rNewStyleSheet);
368 
369     // not implemented
370 	SdrPageProperties& operator=(const SdrPageProperties& rCandidate);
371 
372 public:
373     // construct/destruct
374 	SdrPageProperties(SdrPage& rSdrPage);
375     virtual ~SdrPageProperties();
376 
377 	// Notify(...) from baseclass SfxListener
378 	virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint);
379 
380     // data read/write
381     const SfxItemSet& GetItemSet() const;
382 	void PutItemSet(const SfxItemSet& rSet);
383 	void PutItem(const SfxPoolItem& rItem);
384 	void ClearItem(const sal_uInt16 nWhich = 0);
385 
386     // StyleSheet access
387     void SetStyleSheet(SfxStyleSheet* pStyleSheet);
388     SfxStyleSheet* GetStyleSheet() const;
389 };
390 
391 ////////////////////////////////////////////////////////////////////////////////////////////////////
392 // class SdrPage
393 
394 class SVX_DLLPUBLIC SdrPage : public SdrObjList, public tools::WeakBase< SdrPage >
395 {
396 	///////////////////////////////////////////////////////////////////////////////
397 	// start PageUser section
398 private:
399 	// #111111# PageUser section
400 	sdr::PageUserVector												maPageUsers;
401 
402 public:
403 	void AddPageUser(sdr::PageUser& rNewUser);
404 	void RemovePageUser(sdr::PageUser& rOldUser);
405 
406 	///////////////////////////////////////////////////////////////////////////////
407 	// end PageUser section
408 
409 	///////////////////////////////////////////////////////////////////////////////
410 	// #110094# DrawContact section
411 private:
412 	sdr::contact::ViewContact*										mpViewContact;
413 protected:
414 	virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact();
415 public:
416 	sdr::contact::ViewContact& GetViewContact() const;
417 
418 	// #110094# DrawContact support: Methods for handling Page changes
419 	void ActionChanged() const;
420 
421 	// #i9076#
422 	friend class SdrModel;
423 	friend class SvxUnoDrawPagesAccess;
424 
425 // this class uses its own UNO wrapper
426 // and thus has to set mxUnoPage
427 friend class ChXChartDocument;
428 
429 	sal_Int32 nWdt;     // Seitengroesse
430 	sal_Int32 nHgt;     // Seitengroesse
431 	sal_Int32 nBordLft; // Seitenrand links
432 	sal_Int32 nBordUpp; // Seitenrand oben
433 	sal_Int32 nBordRgt; // Seitenrand rechts
434 	sal_Int32 nBordLwr; // Seitenrand unten
435 
436 	// this is a weak reference to a possible living api wrapper for this page
437 	::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > mxUnoPage;
438 
439 protected:
440 	SdrLayerAdmin* 	    pLayerAdmin;
441 private:
442     SdrPageProperties*  mpSdrPageProperties;
443 
444 public:
getSdrPageProperties()445     SdrPageProperties& getSdrPageProperties() { return *mpSdrPageProperties; }
getSdrPageProperties() const446     const SdrPageProperties& getSdrPageProperties() const { return *mpSdrPageProperties; }
447     const SdrPageProperties* getCorrectSdrPageProperties() const;
448 
449 protected:
450 	// new MasterPageDescriptorVector
451 	::sdr::MasterPageDescriptor*					mpMasterPageDescriptor;
452 
453 	SetOfByte  aPrefVisiLayers;
454 	sal_uInt16     nPageNum;
455 
456     // bitfield
457     unsigned            mbMaster : 1;               // flag if this is a MasterPage
458     unsigned            mbInserted : 1;
459     unsigned            mbObjectsNotPersistent : 1;
460     unsigned            mbSwappingLocked : 1;
461 
462     // #i93597#
463     unsigned            mbPageBorderOnlyLeftRight : 1;
464 
465     virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > createUnoPage();
466 
467 public:
468 	TYPEINFO();
469 	SdrPage(SdrModel& rNewModel, bool bMasterPage=false);
470 	// Copy-Ctor und Zuweisungeoperator sind nicht getestet!
471 	SdrPage(const SdrPage& rSrcPage);
472 	virtual ~SdrPage();
473 	// pModel, pPage, pUpList, pOwnerObj und mbInserted werden Zuweisungeoperator nicht veraendert!
474 	virtual void operator=(const SdrPage& rSrcPage);
475 	virtual SdrPage* Clone() const;
476 	virtual SdrPage* Clone(SdrModel* pNewModel) const;
IsMasterPage() const477 	bool IsMasterPage() const       { return mbMaster; }
478 	void SetInserted(bool bNew = true);
IsInserted() const479 	FASTBOOL IsInserted() const         { return mbInserted; }
480 	virtual void SetChanged();
481 
482 	// #i68775# React on PageNum changes (from Model in most cases)
483 	void SetPageNum(sal_uInt16 nNew);
484 	sal_uInt16 GetPageNum() const;
485 
486     // #i93597# Allow page border definition to not be the full rectangle but to
487     // use only the left and right vertical edges (reportdesigner)
setPageBorderOnlyLeftRight(bool bNew)488     void setPageBorderOnlyLeftRight(bool bNew) { mbPageBorderOnlyLeftRight = bNew; }
getPageBorderOnlyLeftRight() const489     bool getPageBorderOnlyLeftRight() const { return mbPageBorderOnlyLeftRight; }
490 
491 	virtual void SetSize(const Size& aSiz);
492 	virtual Size GetSize() const;
493 	virtual void SetOrientation(Orientation eOri);
494 	virtual Orientation GetOrientation() const;
495 	virtual sal_Int32 GetWdt() const;
496 	virtual sal_Int32 GetHgt() const;
497 	virtual void  SetBorder(sal_Int32 nLft, sal_Int32 nUpp, sal_Int32 nRgt, sal_Int32 Lwr);
498 	virtual void  SetLftBorder(sal_Int32 nBorder);
499 	virtual void  SetUppBorder(sal_Int32 nBorder);
500 	virtual void  SetRgtBorder(sal_Int32 nBorder);
501 	virtual void  SetLwrBorder(sal_Int32 nBorder);
502 	virtual sal_Int32 GetLftBorder() const;
503 	virtual sal_Int32 GetUppBorder() const;
504 	virtual sal_Int32 GetRgtBorder() const;
505 	virtual sal_Int32 GetLwrBorder() const;
506 
507 	virtual void SetModel(SdrModel* pNewModel);
508 
509 	// New MasterPage interface
TRG_HasMasterPage() const510 	sal_Bool TRG_HasMasterPage() const { return (0L != mpMasterPageDescriptor); }
511 	void TRG_SetMasterPage(SdrPage& rNew);
512 	void TRG_ClearMasterPage();
513 	SdrPage& TRG_GetMasterPage() const;
514 	const SetOfByte& TRG_GetMasterPageVisibleLayers() const;
515 	void TRG_SetMasterPageVisibleLayers(const SetOfByte& rNew);
516 	sdr::contact::ViewContact& TRG_GetMasterPageDescriptorViewContact() const;
517 
518 //#if 0 // _SOLAR__PRIVATE
519 protected:
520 	void TRG_ImpMasterPageRemoved(const SdrPage& rRemovedPage);
521 //#endif // __PRIVATE
522 public:
523 
524 	// Aenderungen an den Layern setzen nicht das Modified-Flag !
GetLayerAdmin() const525 	const         SdrLayerAdmin& GetLayerAdmin() const                  { return *pLayerAdmin; }
GetLayerAdmin()526 				  SdrLayerAdmin& GetLayerAdmin()                        { return *pLayerAdmin; }
527 
528 	// GetBitmap und GetMetafile sind noch nicht implementiert.
529 	// Bitmap in Bildschirmaufloesung und -farbtiefe aus den Objekten der
530 	// Page erzeugen.
GetBitmap(FASTBOOL bTrimBorders=sal_True) const531 	Bitmap        GetBitmap(FASTBOOL bTrimBorders=sal_True) const               { return GetBitmap(aPrefVisiLayers,bTrimBorders); }
532 	Bitmap        GetBitmap(const SetOfByte& rVisibleLayers, FASTBOOL bTrimBorders=sal_True) const;
533 	// Metafile aus den Objekten der Page erzeugen
GetMetaFile(FASTBOOL bTrimBorders=sal_True)534 	GDIMetaFile   GetMetaFile(FASTBOOL bTrimBorders=sal_True)                   { return GetMetaFile(aPrefVisiLayers,bTrimBorders); }
535 	GDIMetaFile   GetMetaFile(const SetOfByte& rVisibleLayers, FASTBOOL bTrimBorders=sal_True);
536 
537 	virtual String GetLayoutName() const;
538 
539 	// fuer's Raster im Writer, auch fuer AlignObjects wenn 1 Objekt markiert ist
540 	// wenn pRect!=NULL, dann die Seiten, die von diesem Rect intersected werden
541 	// ansonsten die sichtbaren Seiten.
542 	virtual const SdrPageGridFrameList* GetGridFrameList(const SdrPageView* pPV, const Rectangle* pRect) const;
IsObjectsNotPersistent() const543 	bool IsObjectsNotPersistent() const          { return mbObjectsNotPersistent; }
SetObjectsNotPersistent(bool b)544 	void SetObjectsNotPersistent(bool b)     { mbObjectsNotPersistent = b; }
545 	// Durch Setzen dieses Flags, kann das Auslagern (Swappen) von
546 	// Teilen der Page (z.B. Grafiken) unterbunden werden.
547 	// Es werden hierdurch jedoch nicht automatisch alle ausgelagerten
548 	// Teile nachgeladen, dies geschieht erst bei konkretem Bedarf oder
549 	// durch Aufruf von SwapInAll().
550 	// Fuer die MasterPage(s) der Page muss dies ggf. separat gemacht werden.
IsSwappingLocked() const551 	bool IsSwappingLocked() const { return mbSwappingLocked; }
SetSwappingLocked(bool bLock)552 	void SetSwappingLocked(bool bLock) { mbSwappingLocked = bLock; }
553 
554 	::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > getUnoPage();
555 
556 	virtual SfxStyleSheet* GetTextStyleSheetForObject( SdrObject* pObj ) const;
557 
558 	FASTBOOL HasTransparentObjects( sal_Bool bCheckForAlphaChannel = sal_False ) const;
559 
560 	/** *deprecated* returns an averaged background color of this page */
561     // #i75566# GetBackgroundColor -> GetPageBackgroundColor
562 	Color GetPageBackgroundColor() const;
563 
564 	/** *deprecated* returns an averaged background color of this page */
565     // #i75566# GetBackgroundColor -> GetPageBackgroundColor and bScreenDisplay hint value
566 	Color GetPageBackgroundColor( SdrPageView* pView, bool bScreenDisplay = true) const;
567 
568 	/** this method returns true if the object from the ViewObjectContact should
569 		be visible on this page while rendering.
570 		bEdit selects if visibility test is for an editing view or a final render,
571 		like printing.
572 	*/
573 	virtual bool checkVisibility(
574 		const sdr::contact::ViewObjectContact& rOriginal,
575 		const sdr::contact::DisplayInfo& rDisplayInfo,
576 		bool bEdit );
577 
578     /** Check if page is the HandoutMasterPage (in SVX, no PK_HANDOUT available) */
579     bool isHandoutMasterPage() const;
580 
581     //////////////////////////////////////////////////////////////////////////////
582     // sdr::Comment interface
583 private:
584 	sdr::CommentVector									maComments;
585 
586 public:
GetCommentCount() const587 	sal_uInt32 GetCommentCount() const { return maComments.size(); }
588 	const sdr::Comment& GetCommentByIndex(sal_uInt32 nIndex);
589 	void AddComment(const sdr::Comment& rNew);
590 	void ReplaceCommentByIndex(sal_uInt32 nIndex, const sdr::Comment& rNew);
591 };
592 
593 typedef tools::WeakReference< SdrPage > SdrPageWeakRef;
594 
595 //////////////////////////////////////////////////////////////////////////////
596 // use new redirector instead of pPaintProc
597 
598 class SVX_DLLPUBLIC StandardCheckVisisbilityRedirector : public ::sdr::contact::ViewObjectContactRedirector
599 {
600 public:
601 	StandardCheckVisisbilityRedirector();
602 	virtual ~StandardCheckVisisbilityRedirector();
603 
604 	// all default implementations just call the same methods at the original. To do something
605 	// different, overload the method and at least do what the method does.
606 	virtual drawinglayer::primitive2d::Primitive2DSequence createRedirectedPrimitive2DSequence(
607 		const sdr::contact::ViewObjectContact& rOriginal,
608 		const sdr::contact::DisplayInfo& rDisplayInfo);
609 };
610 
611 //////////////////////////////////////////////////////////////////////////////
612 
613 #endif //_SVDPAGE_HXX
614 
615