xref: /AOO41X/main/sfx2/source/doc/frmdescr.cxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_sfx2.hxx"
30 
31 #include <sot/object.hxx>
32 #include <tools/stream.hxx>
33 #include <vcl/splitwin.hxx>
34 #include <svl/itemset.hxx>
35 #ifndef GCC
36 #endif
37 
38 #include <sfx2/frmdescr.hxx>
39 #include <sfx2/app.hxx>
40 
41 DBG_NAME(SfxFrameDescriptor);
42 
43 #define VERSION (sal_uInt16) 3
44 
45 struct SfxFrameDescriptor_Impl
46 {
47 	Wallpaper*	pWallpaper;
48 	SfxItemSet*	pArgs;
49 	sal_Bool		bEditable;
50 
51 	SfxFrameDescriptor_Impl() : pWallpaper( NULL ), pArgs( NULL ), bEditable( sal_True ) {}
52 	~SfxFrameDescriptor_Impl()
53 	{
54 		delete pWallpaper;
55 		delete pArgs;
56 	}
57 };
58 
59 SfxFrameDescriptor::SfxFrameDescriptor() :
60 	aMargin( -1, -1 ),
61 	nWidth( 0L ),
62 	eScroll( ScrollingAuto ),
63 	eSizeSelector( SIZE_ABS ),
64 	nHasBorder( BORDER_YES ),
65 	nItemId( 0 ),
66 	bResizeHorizontal( sal_True ),
67 	bResizeVertical( sal_True ),
68 	bHasUI( sal_True ),
69 	bReadOnly( sal_False )
70 {
71 	DBG_CTOR(SfxFrameDescriptor, 0);
72 
73 	pImp = new SfxFrameDescriptor_Impl;
74 }
75 
76 SfxFrameDescriptor::~SfxFrameDescriptor()
77 {
78 	DBG_DTOR(SfxFrameDescriptor, 0);
79 	delete pImp;
80 }
81 
82 SfxItemSet* SfxFrameDescriptor::GetArgs()
83 {
84 	if( !pImp->pArgs )
85 		pImp->pArgs = new SfxAllItemSet( SFX_APP()->GetPool() );
86 	return pImp->pArgs;
87 }
88 
89 void SfxFrameDescriptor::SetURL( const String& rURL )
90 {
91 	aURL = INetURLObject(rURL);
92 	SetActualURL( aURL );
93 }
94 
95 void SfxFrameDescriptor::SetURL( const INetURLObject& rURL )
96 {
97 	aURL = rURL.GetMainURL( INetURLObject::DECODE_TO_IURI );
98 	SetActualURL( aURL );
99 }
100 
101 void SfxFrameDescriptor::SetActualURL( const String& rURL )
102 {
103 	aActualURL = INetURLObject(rURL);
104 	if ( pImp->pArgs )
105 		pImp->pArgs->ClearItem();
106 }
107 
108 void SfxFrameDescriptor::SetActualURL( const INetURLObject& rURL )
109 {
110 	SetActualURL(String(rURL.GetMainURL( INetURLObject::DECODE_TO_IURI )));
111 }
112 
113 void SfxFrameDescriptor::SetEditable( sal_Bool bSet )
114 {
115 	pImp->bEditable = bSet;
116 }
117 
118 sal_Bool SfxFrameDescriptor::IsEditable() const
119 {
120 	return pImp->bEditable;
121 }
122 
123 sal_Bool SfxFrameDescriptor::CompareOriginal( SfxFrameDescriptor& rDescr ) const
124 {
125 	if( aURL != rDescr.aURL )
126 		return sal_False;
127 	else
128         return sal_True;
129 }
130 
131 sal_Bool SfxFrameDescriptor::CheckContent() const
132 {
133 	sal_Bool bRet = !( aURL == aActualURL );
134 	return bRet;
135 }
136 
137 void SfxFrameDescriptor::UnifyContent( sal_Bool bTakeActual )
138 {
139 	if ( bTakeActual )
140 		aURL = aActualURL;
141 	else
142 		aActualURL = aURL;
143 }
144 
145 SfxFrameDescriptor* SfxFrameDescriptor::Clone( sal_Bool bWithIds ) const
146 {
147     SfxFrameDescriptor *pFrame = new SfxFrameDescriptor;
148 
149 	pFrame->aURL = aURL;
150 	pFrame->aActualURL = aActualURL;
151 	pFrame->aName = aName;
152 	pFrame->aMargin = aMargin;
153 	pFrame->nWidth = nWidth;
154 	pFrame->eSizeSelector = eSizeSelector;
155 	pFrame->eScroll = eScroll;
156 	pFrame->bResizeHorizontal = bResizeHorizontal;
157 	pFrame->bResizeVertical = bResizeVertical;
158 	pFrame->nHasBorder = nHasBorder;
159 	pFrame->bHasUI = bHasUI;
160 	pFrame->SetReadOnly( IsReadOnly() );
161 	pFrame->SetEditable( IsEditable() );
162 	if ( pImp->pWallpaper )
163 		pFrame->pImp->pWallpaper = new Wallpaper( *pImp->pWallpaper );
164 	if( pImp->pArgs )
165 	{
166 		// Aktuell ist im Clone von SfxAllItemSets noch ein Bug...
167 		pFrame->pImp->pArgs = new SfxAllItemSet( SFX_APP()->GetPool() );
168 		pFrame->pImp->pArgs->Put(*pImp->pArgs);
169 	}
170 
171 	if ( bWithIds )
172 		pFrame->nItemId = nItemId;
173 	else
174 		pFrame->nItemId = 0;
175 
176 	return pFrame;
177 }
178 
179 sal_uInt16 SfxFrameDescriptor::GetWinBits() const
180 {
181 	sal_uInt16 nBits = 0;
182 	if ( eSizeSelector == SIZE_REL )
183 		nBits |= SWIB_RELATIVESIZE;
184 	if ( eSizeSelector == SIZE_PERCENT )
185 		nBits |= SWIB_PERCENTSIZE;
186 	if ( !IsResizable() )
187 		nBits |= SWIB_FIXED;
188 	if ( !nWidth )
189 		nBits |= SWIB_INVISIBLE;
190 	return nBits;
191 }
192 
193 sal_Bool SfxFrameDescriptor::HasFrameBorder() const
194 {
195     return (nHasBorder & BORDER_YES) != 0;
196 }
197 
198 long SfxFrameDescriptor::GetSize() const
199 {
200 	return nWidth;
201 }
202 
203 void SfxFrameDescriptor::TakeProperties( const SfxFrameProperties& rProp )
204 {
205 	aURL = aActualURL = INetURLObject(rProp.aURL);
206 	aName = rProp.aName;
207 	aMargin.Width() = rProp.lMarginWidth;
208 	aMargin.Height() = rProp.lMarginHeight;
209 	nWidth = rProp.lSize;
210 	eScroll = rProp.eScroll;
211 	eSizeSelector = rProp.eSizeSelector;
212 	nHasBorder = rProp.bHasBorder ? BORDER_YES : BORDER_NO;
213 	if ( rProp.bBorderSet )
214 		nHasBorder |= BORDER_SET;
215 	bResizeHorizontal = bResizeVertical = rProp.bResizable;
216 }
217 
218 void SfxFrameDescriptor::SetWallpaper( const Wallpaper& rWallpaper )
219 {
220 	DELETEZ( pImp->pWallpaper );
221 
222 	if ( rWallpaper.GetStyle() != WALLPAPER_NULL )
223 		pImp->pWallpaper = new Wallpaper( rWallpaper );
224 }
225 
226 const Wallpaper* SfxFrameDescriptor::GetWallpaper() const
227 {
228 	return pImp->pWallpaper;
229 }
230 
231 sal_uInt16 SfxFrameDescriptor::GetItemPos() const
232 {
233 	return USHRT_MAX;
234 }
235 
236 
237 SfxFrameProperties::SfxFrameProperties( const SfxFrameDescriptor *pD )
238 	: aURL( pD->GetURL().GetMainURL( INetURLObject::DECODE_TO_IURI ) )
239 	, aName( pD->GetName() )
240 	, lMarginWidth( pD->GetMargin().Width() )
241 	, lMarginHeight( pD->GetMargin().Height() )
242 	, lSize( pD->GetWidth() )
243 	, lSetSize( SIZE_NOT_SET )
244 	, lFrameSpacing( SPACING_NOT_SET )
245 	, lInheritedFrameSpacing( SPACING_NOT_SET )
246 	, eScroll( pD->GetScrollingMode() )
247 	, eSizeSelector( pD->GetSizeSelector() )
248 	, eSetSizeSelector( SIZE_REL )
249 	, bHasBorder( pD->HasFrameBorder() )
250 	, bBorderSet( pD->IsFrameBorderSet() )
251 	, bResizable( pD->IsResizable() )
252 	, bSetResizable( sal_False )
253 	, bIsRootSet( sal_False )
254 	, bIsInColSet( sal_False )
255 	, bHasBorderInherited( sal_False )
256 	, pFrame( pD->Clone() )
257 {
258     bBorderSet = sal_True;
259 }
260 
261 SfxFrameProperties&	SfxFrameProperties::operator =(
262 	const SfxFrameProperties &rProp )
263 {
264 	aURL = rProp.aURL;
265 	aName = rProp.aName;
266 	lMarginWidth = rProp.lMarginWidth;
267 	lMarginHeight = rProp.lMarginHeight;
268 	lSize = rProp.lSize;
269 	lSetSize = rProp.lSetSize;
270 	lFrameSpacing = rProp.lFrameSpacing;
271 	lInheritedFrameSpacing = rProp.lInheritedFrameSpacing;
272 	eScroll = rProp.eScroll;
273 	eSizeSelector = rProp.eSizeSelector;
274 	eSetSizeSelector = rProp.eSetSizeSelector;
275 	bHasBorder = rProp.bHasBorder;
276 	bBorderSet = rProp.bBorderSet;
277 	bResizable = rProp.bResizable;
278 	bSetResizable = rProp.bSetResizable;
279 	bIsRootSet = rProp.bIsRootSet;
280 	bIsInColSet = rProp.bIsInColSet;
281 	bHasBorderInherited = rProp.bHasBorderInherited;
282 	pFrame = rProp.pFrame->Clone();
283 	return *this;
284 }
285 
286 int SfxFrameProperties::operator ==( const SfxFrameProperties& rProp ) const
287 {
288 	return aURL == rProp.aURL && aName == rProp.aName && lMarginWidth == rProp.lMarginWidth && lMarginHeight == rProp.lMarginHeight &&
289 			lSize == rProp.lSize && eScroll == rProp.eScroll && eSizeSelector == rProp.eSizeSelector &&
290 			lSetSize == rProp.lSetSize && lFrameSpacing == rProp.lFrameSpacing && eSetSizeSelector == rProp.eSetSizeSelector &&
291 			bHasBorder == rProp.bHasBorder && bBorderSet == rProp.bBorderSet &&
292 			bResizable == rProp.bResizable && bSetResizable == rProp.bSetResizable;
293 }
294 
295 TYPEINIT1(SfxFrameDescriptorItem, SfxPoolItem);
296 
297 SfxFrameDescriptorItem::~SfxFrameDescriptorItem()
298 {}
299 
300 int SfxFrameDescriptorItem::operator==( const SfxPoolItem& rAttr ) const
301 {
302 	DBG_ASSERT( SfxPoolItem::operator==(rAttr), "unequal types" );
303 
304 	return aProperties == ((SfxFrameDescriptorItem&)rAttr).aProperties;
305 }
306 
307 // -----------------------------------------------------------------------
308 
309 SfxPoolItem* SfxFrameDescriptorItem::Clone( SfxItemPool* ) const
310 {
311 	return new SfxFrameDescriptorItem( *this );
312 }
313 
314 //------------------------------------------------------------------------
315 
316 SfxItemPresentation SfxFrameDescriptorItem::GetPresentation
317 (
318 	SfxItemPresentation /*ePres*/,
319 	SfxMapUnit			/*eCoreUnit*/,
320 	SfxMapUnit			/*ePresUnit*/,
321 	XubString& 			rText,
322     const IntlWrapper *
323 )	const
324 {
325 	rText.Erase();
326 	return SFX_ITEM_PRESENTATION_NONE;
327 }
328 
329 
330