xref: /aoo42x/main/sw/inc/frmfmt.hxx (revision 4d7c9de0)
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 #ifndef _FRMFMT_HXX
24 #define _FRMFMT_HXX
25 
26 #include <com/sun/star/text/PositionLayoutDir.hpp>
27 #include <cppuhelper/weakref.hxx>
28 #include <tools/gen.hxx>
29 #include <format.hxx>
30 #include "swdllapi.h"
31 
32 class SwFlyFrm;
33 class SwAnchoredObject;
34 class Graphic;
35 class Point;
36 class ImageMap;
37 class IMapObject;
38 class SwRect;
39 class SwContact;
40 class SdrObject;
41 
42 class SW_DLLPUBLIC SwFrmFmt: public SwFmt
43 {
44 	friend class SwDoc;
45 	friend class SwPageDesc;	//darf den protected CTor rufen.
46 
47     ::com::sun::star::uno::WeakReference<
48         ::com::sun::star::uno::XInterface> m_wXObject;
49 
50 protected:
51 	SwFrmFmt* pCaptionFmt;
52 	SwFrmFmt( SwAttrPool& rPool, const sal_Char* pFmtNm,
53 				SwFrmFmt *pDrvdFrm, sal_uInt16 nFmtWhich = RES_FRMFMT,
54 				const sal_uInt16* pWhichRange = 0 )
55 	  	: SwFmt( rPool, pFmtNm, (pWhichRange ? pWhichRange : aFrmFmtSetRange),
56 				pDrvdFrm, nFmtWhich )
57 				,pCaptionFmt( NULL )
58 	{}
59 
60 	SwFrmFmt( SwAttrPool& rPool, const String &rFmtNm,
61 				SwFrmFmt *pDrvdFrm, sal_uInt16 nFmtWhich = RES_FRMFMT,
62 				const sal_uInt16* pWhichRange = 0 )
63 	  	: SwFmt( rPool, rFmtNm, (pWhichRange ? pWhichRange : aFrmFmtSetRange),
64 				pDrvdFrm, nFmtWhich )
65 				,pCaptionFmt( NULL )
66 	{}
67 
68    virtual void Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNewValue );
69 
70 public:
71 	TYPEINFO();		//Bereits in Basisklasse Client drin.
72 
73 	//Vernichtet alle Frms in aDepend (Frms werden per PTR_CAST erkannt).
74 	virtual void DelFrms();
75 
76 	//Erzeugt die Ansichten
77 	virtual void MakeFrms();
78 
79 	virtual Graphic MakeGraphic( ImageMap* pMap = NULL );
80 
81 	// returnt das IMapObject, das an dem Format (Fly), in der ImageMap
82 	// an der Point Position definiert ist.
83 	// 	rPoint - teste auf der DocPosition
84 	//	pFly - optionaler FlyFrame, falls der schon bekannt ist.
85 	IMapObject* GetIMapObject( const Point& rPoint,
86 								const SwFlyFrm *pFly = 0 ) const;
87 
88 	// Gibt die tatsaechlche Groesse des Frames zurueck bzw. ein leeres
89 	// Rechteck, wenn kein Layout existiert. Wird pPoint angegeben, dann
90 	// wird der am dichtesten liegende Frame gesucht.
91 	SwRect FindLayoutRect( const sal_Bool bPrtArea = sal_False,
92 							const Point* pPoint = 0,
93 							const sal_Bool bCalcFrm = sal_False ) const;
94 
95 	// Sucht das SdrObject. Der SdrObjUserCall ist Client vom Format.
96 	// Der UserCall kennt sein SdrObject.
97 		  SwContact *FindContactObj();
98 	const SwContact *FindContactObj() const
99 		{ return ((SwFrmFmt*)this)->FindContactObj(); }
100 
101 	// returns the SdrObject, that ist connected to the ContactObject.
102 	// Only DrawFrmFmts are connected to the "real SdrObject". FlyFrmFmts
103 	// are connected to a Master and all FlyFrms has the "real SdrObject".
104 	// "Real SdrObject" has position and a Z-order.
105 		  SdrObject *FindSdrObject();
106 	const SdrObject *FindSdrObject() const
107 		{ return ((SwFrmFmt*)this)->FindSdrObject(); }
108 
109 		  SdrObject *FindRealSdrObject();
110 	const SdrObject *FindRealSdrObject() const
111 		{ return ((SwFrmFmt*)this)->FindRealSdrObject(); }
112 
113 	sal_Bool IsLowerOf( const SwFrmFmt& rFmt ) const;
114 
115     // --> OD 2004-07-27 #i31698#
116     enum tLayoutDir
117     {
118         HORI_L2R,
119         HORI_R2L,
120         VERT_R2L,
121         VERT_L2R    // not supported yet
122     };
123 
124     virtual SwFrmFmt::tLayoutDir GetLayoutDir() const;
125     virtual void SetLayoutDir( const SwFrmFmt::tLayoutDir _eLayoutDir );
126     // <--
127 
128     // --> OD 2004-08-06 #i28749#
129     virtual sal_Int16 GetPositionLayoutDir() const;
130     virtual void SetPositionLayoutDir( const sal_Int16 _nPositionLayoutDir );
131     // <--
132 
133     virtual String GetDescription() const;
134 	sal_Bool HasCaption() const;
135 	void SetCaptionFmt(SwFrmFmt* pFmt);
136 	SwFrmFmt* GetCaptionFmt() const;
137 
138     SW_DLLPRIVATE ::com::sun::star::uno::WeakReference<
139         ::com::sun::star::uno::XInterface> const& GetXObject() const
140             { return m_wXObject; }
141     SW_DLLPRIVATE void SetXObject(::com::sun::star::uno::Reference<
142                     ::com::sun::star::uno::XInterface> const& xObject)
143             { m_wXObject = xObject; }
144 
145 	DECL_FIXEDMEMPOOL_NEWDEL_DLL(SwFrmFmt)
146     void RegisterToFormat( SwFmt& rFmt );
147 };
148 
149 //Das FlyFrame-Format ------------------------------
150 
151 class SW_DLLPUBLIC SwFlyFrmFmt: public SwFrmFmt
152 {
153 	friend class SwDoc;
154 	String msTitle;
155 	String msDesc;
156 
157     // #i972:
158     // it stores the previous position of Prt rectangle from RequestObjectResize
159     // so it can be used to move frames of non-resizable objects to align them correctly
160     // when they get borders (this is done in SwWrtShell::CalcAndGetScale)
161     Point   m_aLastFlyFrmPrtRectPos;
162 
163     //Beide nicht vorhanden.
164 	SwFlyFrmFmt( const SwFlyFrmFmt &rCpy );
165 	SwFlyFrmFmt &operator=( const SwFlyFrmFmt &rCpy );
166 
167 protected:
168 	SwFlyFrmFmt( SwAttrPool& rPool, const sal_Char* pFmtNm,
169 					SwFrmFmt *pDrvdFrm )
170 		: SwFrmFmt( rPool, pFmtNm, pDrvdFrm, RES_FLYFRMFMT )
171 	{}
172 	SwFlyFrmFmt( SwAttrPool& rPool, const String &rFmtNm,
173 					SwFrmFmt *pDrvdFrm )
174 		: SwFrmFmt( rPool, rFmtNm, pDrvdFrm, RES_FLYFRMFMT )
175 	{}
176 
177 public:
178 	TYPEINFO();
179 	~SwFlyFrmFmt();
180 
181 	//Erzeugt die Ansichten
182 	virtual void MakeFrms();
183 
184 	SwFlyFrm* GetFrm( const Point* pDocPos = 0,
185 						const sal_Bool bCalcFrm = sal_False ) const;
186 
187     SwAnchoredObject* GetAnchoredObj( const Point* pDocPos = 0,
188                                       const sal_Bool bCalcFrm = sal_False ) const;
189 
190 	virtual Graphic MakeGraphic( ImageMap* pMap = NULL );
191 
192 	virtual sal_Bool GetInfo( SfxPoolItem& rInfo ) const;
193 
194     // --> OD 2009-07-14 #i73249#
195     const String GetObjTitle() const;
196     void SetObjTitle( const String& rTitle,
197                       bool bBroadcast = false );
198     const String GetObjDescription() const;
199     void SetObjDescription( const String& rDescription,
200                             bool bBroadcast = false );
201     // <--
202 
203     /** SwFlyFrmFmt::IsBackgroundTransparent - for #99657#
204 
205         OD 22.08.2002 - overloading virtual method and its default implementation,
206         because format of fly frame provides transparent backgrounds.
207         Method determines, if background of fly frame is transparent.
208 
209         @author OD
210 
211         @return true, if background color is transparent, but not "no fill"
212         or a existing background graphic is transparent.
213     */
214     virtual sal_Bool IsBackgroundTransparent() const;
215 
216     /** SwFlyFrmFmt::IsBackgroundBrushInherited - for #103898#
217 
218         OD 08.10.2002 - method to determine, if the brush for drawing the
219         background is "inherited" from its parent/grandparent.
220         This is the case, if no background graphic is set and the background
221         color is "no fill"/"auto fill"
222 
223         @author OD
224 
225         @return true, if background brush is "inherited" from parent/grandparent
226     */
227     sal_Bool IsBackgroundBrushInherited() const;
228 
229     const Point & GetLastFlyFrmPrtRectPos() const       { return m_aLastFlyFrmPrtRectPos; }
230     void SetLastFlyFrmPrtRectPos( const Point &rPoint ) { m_aLastFlyFrmPrtRectPos = rPoint; }
231 
232 	DECL_FIXEDMEMPOOL_NEWDEL(SwFlyFrmFmt)
233 };
234 
235 //Das DrawFrame-Format -----------------------------
236 
237 class SW_DLLPUBLIC SwDrawFrmFmt: public SwFrmFmt
238 {
239 	friend class SwDoc;
240 
241     mutable const SdrObject * pSdrObjCached;
242     mutable String sSdrObjCachedComment;
243 
244 	//Beide nicht vorhanden.
245 	SwDrawFrmFmt( const SwDrawFrmFmt &rCpy );
246 	SwDrawFrmFmt &operator=( const SwDrawFrmFmt &rCpy );
247 
248     // --> OD 2004-07-27 #i31698#
249     SwFrmFmt::tLayoutDir meLayoutDir;
250     // <--
251     // --> OD 2004-08-06 #i28749#
252     sal_Int16 mnPositionLayoutDir;
253     // <--
254     // --> OD 2005-03-11 #i44334#, #i44681#
255     bool mbPosAttrSet;
256     // <--
257 protected:
258 	SwDrawFrmFmt( SwAttrPool& rPool, const sal_Char* pFmtNm,
259 					SwFrmFmt *pDrvdFrm )
260         : SwFrmFmt( rPool, pFmtNm, pDrvdFrm, RES_DRAWFRMFMT ),
261           pSdrObjCached(NULL),
262           // --> OD 2004-07-28 #i31698#
263           meLayoutDir( SwFrmFmt::HORI_L2R ),
264           // <--
265           // --> OD 2004-08-06 #i28749#
266           // --> OD 2005-03-10 #i44344#, #i44681# - undo change of issue #i36010#
267           mnPositionLayoutDir( com::sun::star::text::PositionLayoutDir::PositionInLayoutDirOfAnchor ),
268           // <--
269           // --> OD 2005-03-11 #i44334#, #i44681#
270           mbPosAttrSet( false )
271           // <--
272 
273 	{}
274 	SwDrawFrmFmt( SwAttrPool& rPool, const String &rFmtNm,
275 					SwFrmFmt *pDrvdFrm )
276         : SwFrmFmt( rPool, rFmtNm, pDrvdFrm, RES_DRAWFRMFMT ),
277           pSdrObjCached(NULL),
278           // --> OD 2004-07-28 #i31698#
279           meLayoutDir( SwFrmFmt::HORI_L2R ),
280           // <--
281           // --> OD 2004-08-06 #i28749#
282           // --> OD 2005-03-10 #i44344#, #i44681# - undo change of issue #i36010#
283           mnPositionLayoutDir( com::sun::star::text::PositionLayoutDir::PositionInLayoutDirOfAnchor ),
284           // <--
285           // --> OD 2005-03-11 #i44334#, #i44681#
286           mbPosAttrSet( false )
287           // <--
288 	{}
289 
290 public:
291 	TYPEINFO();
292 	~SwDrawFrmFmt();
293 
294 	//DrawObjecte werden aus den Arrays am Layout entfernt. Die DrawObjecte
295 	//werden als geloescht gekennzeichnet.
296 	virtual void DelFrms();
297 
298 	//Anmelden der DrawObjecte in den Arrays am Layout. Loeschkennzeichen
299 	//werden zurueckgesetzt.
300 	virtual void MakeFrms();
301 
302 	virtual Graphic MakeGraphic( ImageMap* pMap = NULL );
303 
304     // --> OD 2004-07-27 #i31698#
305     virtual SwFrmFmt::tLayoutDir GetLayoutDir() const;
306     virtual void SetLayoutDir( const SwFrmFmt::tLayoutDir _eLayoutDir );
307     // <--
308 
309     // --> OD 2004-08-06 #i28749#
310     virtual sal_Int16 GetPositionLayoutDir() const;
311     virtual void SetPositionLayoutDir( const sal_Int16 _nPositionLayoutDir );
312     // <--
313 
314     // --> OD 2005-03-11 #i44334#, #i44681#
315     inline bool IsPosAttrSet() const { return mbPosAttrSet; }
316     inline void PosAttrSet() { mbPosAttrSet = true; }
317     // <--
318 
319     // --> OD 2005-08-16 #i53320#
320     inline void ResetPosAttr()
321     {
322         mbPosAttrSet = false;
323     }
324     // <--
325 
326     virtual String GetDescription() const;
327 
328     DECL_FIXEDMEMPOOL_NEWDEL(SwDrawFrmFmt);
329 };
330 
331 
332 #endif
333 
334