xref: /aoo41x/main/sd/source/ui/unoidl/unopback.cxx (revision 5b190011)
1*5b190011SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*5b190011SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*5b190011SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*5b190011SAndrew Rist  * distributed with this work for additional information
6*5b190011SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*5b190011SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*5b190011SAndrew Rist  * "License"); you may not use this file except in compliance
9*5b190011SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*5b190011SAndrew Rist  *
11*5b190011SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*5b190011SAndrew Rist  *
13*5b190011SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*5b190011SAndrew Rist  * software distributed under the License is distributed on an
15*5b190011SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*5b190011SAndrew Rist  * KIND, either express or implied.  See the License for the
17*5b190011SAndrew Rist  * specific language governing permissions and limitations
18*5b190011SAndrew Rist  * under the License.
19*5b190011SAndrew Rist  *
20*5b190011SAndrew Rist  *************************************************************/
21*5b190011SAndrew Rist 
22*5b190011SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sd.hxx"
26cdf0e10cSrcweir #include <com/sun/star/drawing/BitmapMode.hpp>
27cdf0e10cSrcweir #include <vos/mutex.hxx>
28cdf0e10cSrcweir #include <vcl/svapp.hxx>
29cdf0e10cSrcweir #include <svl/itemset.hxx>
30cdf0e10cSrcweir #include <svx/svdpool.hxx>
31cdf0e10cSrcweir #include <comphelper/extract.hxx>
32cdf0e10cSrcweir #include <rtl/uuid.h>
33cdf0e10cSrcweir #include <rtl/memory.h>
34cdf0e10cSrcweir #include <svx/xflbstit.hxx>
35cdf0e10cSrcweir #include <svx/xflbmtit.hxx>
36cdf0e10cSrcweir #include <svx/svdobj.hxx>
37cdf0e10cSrcweir #include <svx/unoprov.hxx>
38cdf0e10cSrcweir #include <svx/unoshape.hxx>
39cdf0e10cSrcweir #include <comphelper/serviceinfohelper.hxx>
40cdf0e10cSrcweir 
41cdf0e10cSrcweir #include "unopback.hxx"
42cdf0e10cSrcweir #include "unohelp.hxx"
43cdf0e10cSrcweir #include "drawdoc.hxx"
44cdf0e10cSrcweir #include "unokywds.hxx"
45cdf0e10cSrcweir 
46cdf0e10cSrcweir using namespace ::rtl;
47cdf0e10cSrcweir using namespace ::vos;
48cdf0e10cSrcweir using namespace ::com::sun::star;
49cdf0e10cSrcweir 
50cdf0e10cSrcweir const SvxItemPropertySet* ImplGetPageBackgroundPropertySet()
51cdf0e10cSrcweir {
52cdf0e10cSrcweir 	static const SfxItemPropertyMapEntry aPageBackgroundPropertyMap_Impl[] =
53cdf0e10cSrcweir 	{
54cdf0e10cSrcweir 		FILL_PROPERTIES
55cdf0e10cSrcweir 		{0,0,0,0,0,0}
56cdf0e10cSrcweir 	};
57cdf0e10cSrcweir 
58cdf0e10cSrcweir     static SvxItemPropertySet aPageBackgroundPropertySet_Impl( aPageBackgroundPropertyMap_Impl, SdrObject::GetGlobalDrawObjectItemPool() );
59cdf0e10cSrcweir 	return &aPageBackgroundPropertySet_Impl;
60cdf0e10cSrcweir }
61cdf0e10cSrcweir 
62cdf0e10cSrcweir UNO3_GETIMPLEMENTATION_IMPL( SdUnoPageBackground );
63cdf0e10cSrcweir 
64cdf0e10cSrcweir SdUnoPageBackground::SdUnoPageBackground(
65cdf0e10cSrcweir     SdDrawDocument* pDoc /* = NULL */,
66cdf0e10cSrcweir     const SfxItemSet* pSet /* = NULL */) throw()
67cdf0e10cSrcweir :   mpPropSet(ImplGetPageBackgroundPropertySet()),
68cdf0e10cSrcweir     mpSet(NULL),
69cdf0e10cSrcweir     mpDoc(pDoc)
70cdf0e10cSrcweir {
71cdf0e10cSrcweir 	if( pDoc )
72cdf0e10cSrcweir 	{
73cdf0e10cSrcweir 		StartListening( *pDoc );
74cdf0e10cSrcweir 		mpSet = new SfxItemSet( pDoc->GetPool(), XATTR_FILL_FIRST, XATTR_FILL_LAST );
75cdf0e10cSrcweir 
76cdf0e10cSrcweir 		if( pSet )
77cdf0e10cSrcweir 			mpSet->Put(*pSet);
78cdf0e10cSrcweir 	}
79cdf0e10cSrcweir }
80cdf0e10cSrcweir 
81cdf0e10cSrcweir SdUnoPageBackground::~SdUnoPageBackground() throw()
82cdf0e10cSrcweir {
83cdf0e10cSrcweir 	if( mpDoc )
84cdf0e10cSrcweir 		EndListening( *mpDoc );
85cdf0e10cSrcweir 
86cdf0e10cSrcweir 	if( mpSet )
87cdf0e10cSrcweir 		delete mpSet;
88cdf0e10cSrcweir }
89cdf0e10cSrcweir 
90cdf0e10cSrcweir void SdUnoPageBackground::Notify( SfxBroadcaster&, const SfxHint& rHint )
91cdf0e10cSrcweir {
92cdf0e10cSrcweir 	const SdrHint* pSdrHint = PTR_CAST( SdrHint, &rHint );
93cdf0e10cSrcweir 
94cdf0e10cSrcweir 	if( pSdrHint )
95cdf0e10cSrcweir 	{
96cdf0e10cSrcweir 		// delete item set if document is dying because then the pool
97cdf0e10cSrcweir 		// will also die
98cdf0e10cSrcweir 		if( pSdrHint->GetKind() == HINT_MODELCLEARED )
99cdf0e10cSrcweir 		{
100cdf0e10cSrcweir 			delete mpSet;
101cdf0e10cSrcweir 			mpSet = NULL;
102cdf0e10cSrcweir 			mpDoc = NULL;
103cdf0e10cSrcweir 		}
104cdf0e10cSrcweir 	}
105cdf0e10cSrcweir 
106cdf0e10cSrcweir }
107cdf0e10cSrcweir 
108cdf0e10cSrcweir void SdUnoPageBackground::fillItemSet( SdDrawDocument* pDoc, SfxItemSet& rSet ) throw()
109cdf0e10cSrcweir {
110cdf0e10cSrcweir 	rSet.ClearItem();
111cdf0e10cSrcweir 
112cdf0e10cSrcweir 	if( mpSet == NULL )
113cdf0e10cSrcweir 	{
114cdf0e10cSrcweir 		StartListening( *pDoc );
115cdf0e10cSrcweir 		mpDoc = pDoc;
116cdf0e10cSrcweir 
117cdf0e10cSrcweir 		mpSet = new SfxItemSet( *rSet.GetPool(), XATTR_FILL_FIRST, XATTR_FILL_LAST );
118cdf0e10cSrcweir 
119cdf0e10cSrcweir 		if( mpPropSet->AreThereOwnUsrAnys() )
120cdf0e10cSrcweir 		{
121cdf0e10cSrcweir 			uno::Any* pAny;
122cdf0e10cSrcweir             PropertyEntryVector_t aProperties = mpPropSet->getPropertyMap()->getPropertyEntries();
123cdf0e10cSrcweir             PropertyEntryVector_t::const_iterator aIt = aProperties.begin();
124cdf0e10cSrcweir 
125cdf0e10cSrcweir 			while( aIt != aProperties.end() )
126cdf0e10cSrcweir 			{
127cdf0e10cSrcweir 				pAny = mpPropSet->GetUsrAnyForID( aIt->nWID );
128cdf0e10cSrcweir 				if( pAny )
129cdf0e10cSrcweir 				{
130cdf0e10cSrcweir 					OUString aPropertyName( aIt->sName );
131cdf0e10cSrcweir 					switch( aIt->nWID )
132cdf0e10cSrcweir 					{
133cdf0e10cSrcweir 						case XATTR_FILLFLOATTRANSPARENCE :
134cdf0e10cSrcweir 						case XATTR_FILLGRADIENT :
135cdf0e10cSrcweir 						{
136cdf0e10cSrcweir 							if ( ( pAny->getValueType() == ::getCppuType((const ::com::sun::star::awt::Gradient*)0) )
137cdf0e10cSrcweir 								&& ( aIt->nMemberId == MID_FILLGRADIENT ) )
138cdf0e10cSrcweir 							{
139cdf0e10cSrcweir 								setPropertyValue( aPropertyName, *pAny );
140cdf0e10cSrcweir 							}
141cdf0e10cSrcweir 							else if ( ( pAny->getValueType() == ::getCppuType((const ::rtl::OUString*)0) ) &&
142cdf0e10cSrcweir 										( aIt->nMemberId == MID_NAME ) )
143cdf0e10cSrcweir 							{
144cdf0e10cSrcweir 								setPropertyValue( aPropertyName, *pAny );
145cdf0e10cSrcweir 							}
146cdf0e10cSrcweir 						}
147cdf0e10cSrcweir 						break;
148cdf0e10cSrcweir 						case XATTR_FILLHATCH :
149cdf0e10cSrcweir 						{
150cdf0e10cSrcweir 							if ( ( pAny->getValueType() == ::getCppuType((const ::com::sun::star::drawing::Hatch*)0) )
151cdf0e10cSrcweir 								&& ( aIt->nMemberId == MID_FILLHATCH ) )
152cdf0e10cSrcweir 							{
153cdf0e10cSrcweir 								setPropertyValue( aPropertyName, *pAny );
154cdf0e10cSrcweir 							}
155cdf0e10cSrcweir 							else if ( ( pAny->getValueType() == ::getCppuType((const ::rtl::OUString*)0) ) &&
156cdf0e10cSrcweir 										( aIt->nMemberId == MID_NAME ) )
157cdf0e10cSrcweir 							{
158cdf0e10cSrcweir 								setPropertyValue( aPropertyName, *pAny );
159cdf0e10cSrcweir 							}
160cdf0e10cSrcweir 						}
161cdf0e10cSrcweir 						break;
162cdf0e10cSrcweir 						case XATTR_FILLBITMAP :
163cdf0e10cSrcweir 						{
164cdf0e10cSrcweir 							if ( ( ( pAny->getValueType() == ::getCppuType((const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XBitmap >*)0) ) ||
165cdf0e10cSrcweir 									( pAny->getValueType() == ::getCppuType((const ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic >*)0) ) ) &&
166cdf0e10cSrcweir 									( aIt->nMemberId == MID_BITMAP ) )
167cdf0e10cSrcweir 							{
168cdf0e10cSrcweir 								setPropertyValue( aPropertyName, *pAny );
169cdf0e10cSrcweir 							}
170cdf0e10cSrcweir 							else if ( ( pAny->getValueType() == ::getCppuType((const ::rtl::OUString*)0) ) &&
171cdf0e10cSrcweir 										( ( aIt->nMemberId == MID_NAME ) || ( aIt->nMemberId == MID_GRAFURL ) ) )
172cdf0e10cSrcweir 							{
173cdf0e10cSrcweir 								setPropertyValue( aPropertyName, *pAny );
174cdf0e10cSrcweir 							}
175cdf0e10cSrcweir 						}
176cdf0e10cSrcweir 						break;
177cdf0e10cSrcweir 
178cdf0e10cSrcweir 						default:
179cdf0e10cSrcweir 							setPropertyValue( aPropertyName, *pAny );
180cdf0e10cSrcweir 					}
181cdf0e10cSrcweir 			    }
182cdf0e10cSrcweir 				++aIt;
183cdf0e10cSrcweir 			}
184cdf0e10cSrcweir 		}
185cdf0e10cSrcweir 	}
186cdf0e10cSrcweir 
187cdf0e10cSrcweir 	rSet.Put( *mpSet );
188cdf0e10cSrcweir }
189cdf0e10cSrcweir 
190cdf0e10cSrcweir // XServiceInfo
191cdf0e10cSrcweir OUString SAL_CALL SdUnoPageBackground::getImplementationName()
192cdf0e10cSrcweir 	throw(uno::RuntimeException)
193cdf0e10cSrcweir {
194cdf0e10cSrcweir 	return OUString::createFromAscii( sUNO_SdUnoPageBackground );
195cdf0e10cSrcweir }
196cdf0e10cSrcweir 
197cdf0e10cSrcweir sal_Bool SAL_CALL SdUnoPageBackground::supportsService( const OUString& ServiceName )
198cdf0e10cSrcweir 	throw(uno::RuntimeException)
199cdf0e10cSrcweir {
200cdf0e10cSrcweir 	return comphelper::ServiceInfoHelper::supportsService( ServiceName, getSupportedServiceNames() );
201cdf0e10cSrcweir }
202cdf0e10cSrcweir 
203cdf0e10cSrcweir uno::Sequence< OUString > SAL_CALL SdUnoPageBackground::getSupportedServiceNames()
204cdf0e10cSrcweir 	throw(uno::RuntimeException)
205cdf0e10cSrcweir {
206cdf0e10cSrcweir 	uno::Sequence< OUString > aNameSequence( 2 );
207cdf0e10cSrcweir 	OUString* pStrings = aNameSequence.getArray();
208cdf0e10cSrcweir 
209cdf0e10cSrcweir 	*pStrings++ = OUString( RTL_CONSTASCII_USTRINGPARAM( sUNO_Service_PageBackground ) );
210cdf0e10cSrcweir 	*pStrings   = OUString( RTL_CONSTASCII_USTRINGPARAM( sUNO_Service_FillProperties ) );
211cdf0e10cSrcweir 
212cdf0e10cSrcweir 	return aNameSequence;
213cdf0e10cSrcweir }
214cdf0e10cSrcweir 
215cdf0e10cSrcweir // XPropertySet
216cdf0e10cSrcweir uno::Reference< beans::XPropertySetInfo > SAL_CALL SdUnoPageBackground::getPropertySetInfo()
217cdf0e10cSrcweir 	throw(uno::RuntimeException)
218cdf0e10cSrcweir {
219cdf0e10cSrcweir 	return mpPropSet->getPropertySetInfo();
220cdf0e10cSrcweir }
221cdf0e10cSrcweir 
222cdf0e10cSrcweir void SAL_CALL SdUnoPageBackground::setPropertyValue( const OUString& aPropertyName, const uno::Any& aValue )
223cdf0e10cSrcweir 	throw(beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException)
224cdf0e10cSrcweir {
225cdf0e10cSrcweir 	OGuard aGuard( Application::GetSolarMutex() );
226cdf0e10cSrcweir 
227cdf0e10cSrcweir 	const SfxItemPropertySimpleEntry* pEntry = getPropertyMapEntry( aPropertyName );
228cdf0e10cSrcweir 
229cdf0e10cSrcweir 	if( pEntry == NULL )
230cdf0e10cSrcweir 	{
231cdf0e10cSrcweir 		throw beans::UnknownPropertyException();
232cdf0e10cSrcweir 	}
233cdf0e10cSrcweir 	else
234cdf0e10cSrcweir 	{
235cdf0e10cSrcweir 		if( mpSet )
236cdf0e10cSrcweir 		{
237cdf0e10cSrcweir 			if( pEntry->nWID == OWN_ATTR_FILLBMP_MODE )
238cdf0e10cSrcweir 			{
239cdf0e10cSrcweir 				drawing::BitmapMode eMode;
240cdf0e10cSrcweir 				if( aValue >>= eMode )
241cdf0e10cSrcweir 				{
242cdf0e10cSrcweir 					mpSet->Put( XFillBmpStretchItem( eMode == drawing::BitmapMode_STRETCH ) );
243cdf0e10cSrcweir 					mpSet->Put( XFillBmpTileItem( eMode == drawing::BitmapMode_REPEAT ) );
244cdf0e10cSrcweir 					return;
245cdf0e10cSrcweir 				}
246cdf0e10cSrcweir 				throw lang::IllegalArgumentException();
247cdf0e10cSrcweir 			}
248cdf0e10cSrcweir 
249cdf0e10cSrcweir 			SfxItemPool& rPool = *mpSet->GetPool();
250cdf0e10cSrcweir 			SfxItemSet aSet( rPool,	pEntry->nWID, pEntry->nWID);
251cdf0e10cSrcweir 			aSet.Put( *mpSet );
252cdf0e10cSrcweir 
253cdf0e10cSrcweir 			if( !aSet.Count() )
254cdf0e10cSrcweir 				aSet.Put( rPool.GetDefaultItem( pEntry->nWID ) );
255cdf0e10cSrcweir 
256cdf0e10cSrcweir 			if( pEntry->nMemberId == MID_NAME && ( pEntry->nWID == XATTR_FILLBITMAP || pEntry->nWID == XATTR_FILLGRADIENT || pEntry->nWID == XATTR_FILLHATCH || pEntry->nWID == XATTR_FILLFLOATTRANSPARENCE ) )
257cdf0e10cSrcweir 			{
258cdf0e10cSrcweir 				OUString aName;
259cdf0e10cSrcweir 				if(!(aValue >>= aName ))
260cdf0e10cSrcweir 					throw lang::IllegalArgumentException();
261cdf0e10cSrcweir 
262cdf0e10cSrcweir 				SvxShape::SetFillAttribute( pEntry->nWID, aName, aSet );
263cdf0e10cSrcweir 			}
264cdf0e10cSrcweir 			else
265cdf0e10cSrcweir 			{
266cdf0e10cSrcweir 				SvxItemPropertySet_setPropertyValue( *mpPropSet, pEntry, aValue, aSet );
267cdf0e10cSrcweir 			}
268cdf0e10cSrcweir 
269cdf0e10cSrcweir 			mpSet->Put( aSet );
270cdf0e10cSrcweir 		}
271cdf0e10cSrcweir 		else
272cdf0e10cSrcweir 		{
273cdf0e10cSrcweir 			if(pEntry && pEntry->nWID)
274cdf0e10cSrcweir 				mpPropSet->setPropertyValue( pEntry, aValue );
275cdf0e10cSrcweir 		}
276cdf0e10cSrcweir 	}
277cdf0e10cSrcweir }
278cdf0e10cSrcweir 
279cdf0e10cSrcweir uno::Any SAL_CALL SdUnoPageBackground::getPropertyValue( const OUString& PropertyName )
280cdf0e10cSrcweir 	throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
281cdf0e10cSrcweir {
282cdf0e10cSrcweir 	OGuard aGuard( Application::GetSolarMutex() );
283cdf0e10cSrcweir 
284cdf0e10cSrcweir 	uno::Any aAny;
285cdf0e10cSrcweir 	const SfxItemPropertySimpleEntry* pEntry = getPropertyMapEntry(PropertyName);
286cdf0e10cSrcweir 
287cdf0e10cSrcweir 	if( pEntry == NULL )
288cdf0e10cSrcweir 	{
289cdf0e10cSrcweir 		throw beans::UnknownPropertyException();
290cdf0e10cSrcweir 	}
291cdf0e10cSrcweir 	else
292cdf0e10cSrcweir 	{
293cdf0e10cSrcweir 		if( mpSet )
294cdf0e10cSrcweir 		{
295cdf0e10cSrcweir 			if( pEntry->nWID == OWN_ATTR_FILLBMP_MODE )
296cdf0e10cSrcweir 			{
297cdf0e10cSrcweir 				XFillBmpStretchItem* pStretchItem = (XFillBmpStretchItem*)mpSet->GetItem(XATTR_FILLBMP_STRETCH);
298cdf0e10cSrcweir 				XFillBmpTileItem* pTileItem = (XFillBmpTileItem*)mpSet->GetItem(XATTR_FILLBMP_TILE);
299cdf0e10cSrcweir 
300cdf0e10cSrcweir 				if( pStretchItem && pTileItem )
301cdf0e10cSrcweir 				{
302cdf0e10cSrcweir 					if( pTileItem->GetValue() )
303cdf0e10cSrcweir 						aAny <<= drawing::BitmapMode_REPEAT;
304cdf0e10cSrcweir 					else if( pStretchItem->GetValue() )
305cdf0e10cSrcweir 						aAny <<= drawing::BitmapMode_STRETCH;
306cdf0e10cSrcweir 					else
307cdf0e10cSrcweir 						aAny <<= drawing::BitmapMode_NO_REPEAT;
308cdf0e10cSrcweir 				}
309cdf0e10cSrcweir 			}
310cdf0e10cSrcweir 			else
311cdf0e10cSrcweir 			{
312cdf0e10cSrcweir 				SfxItemPool& rPool = *mpSet->GetPool();
313cdf0e10cSrcweir 				SfxItemSet aSet( rPool,	pEntry->nWID, pEntry->nWID);
314cdf0e10cSrcweir 				aSet.Put( *mpSet );
315cdf0e10cSrcweir 
316cdf0e10cSrcweir 				if( !aSet.Count() )
317cdf0e10cSrcweir 					aSet.Put( rPool.GetDefaultItem( pEntry->nWID ) );
318cdf0e10cSrcweir 
319cdf0e10cSrcweir 				// Hole Wert aus ItemSet
320cdf0e10cSrcweir 				aAny = SvxItemPropertySet_getPropertyValue( *mpPropSet, pEntry, aSet );
321cdf0e10cSrcweir 			}
322cdf0e10cSrcweir 		}
323cdf0e10cSrcweir 		else
324cdf0e10cSrcweir 		{
325cdf0e10cSrcweir 			if(pEntry && pEntry->nWID)
326cdf0e10cSrcweir 				aAny = mpPropSet->getPropertyValue( pEntry );
327cdf0e10cSrcweir 		}
328cdf0e10cSrcweir 	}
329cdf0e10cSrcweir 	return aAny;
330cdf0e10cSrcweir }
331cdf0e10cSrcweir 
332cdf0e10cSrcweir void SAL_CALL SdUnoPageBackground::addPropertyChangeListener( const OUString& , const uno::Reference< beans::XPropertyChangeListener >&  ) throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) {}
333cdf0e10cSrcweir void SAL_CALL SdUnoPageBackground::removePropertyChangeListener( const OUString& , const uno::Reference< beans::XPropertyChangeListener >&  ) throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) {}
334cdf0e10cSrcweir void SAL_CALL SdUnoPageBackground::addVetoableChangeListener( const OUString& , const uno::Reference< beans::XVetoableChangeListener >&  ) throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) {}
335cdf0e10cSrcweir void SAL_CALL SdUnoPageBackground::removeVetoableChangeListener( const OUString& , const uno::Reference< beans::XVetoableChangeListener >&  ) throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException) {}
336cdf0e10cSrcweir 
337cdf0e10cSrcweir // XPropertyState
338cdf0e10cSrcweir beans::PropertyState SAL_CALL SdUnoPageBackground::getPropertyState( const OUString& PropertyName )
339cdf0e10cSrcweir 	throw(beans::UnknownPropertyException, uno::RuntimeException)
340cdf0e10cSrcweir {
341cdf0e10cSrcweir 	OGuard aGuard( Application::GetSolarMutex() );
342cdf0e10cSrcweir 
343cdf0e10cSrcweir 	const SfxItemPropertySimpleEntry* pEntry = getPropertyMapEntry(PropertyName);
344cdf0e10cSrcweir 
345cdf0e10cSrcweir 	if( pEntry == NULL )
346cdf0e10cSrcweir 		throw beans::UnknownPropertyException();
347cdf0e10cSrcweir 
348cdf0e10cSrcweir 	if( mpSet )
349cdf0e10cSrcweir 	{
350cdf0e10cSrcweir 		if( pEntry->nWID == OWN_ATTR_FILLBMP_MODE )
351cdf0e10cSrcweir 		{
352cdf0e10cSrcweir 			if( mpSet->GetItemState( XATTR_FILLBMP_STRETCH, false ) == SFX_ITEM_SET ||
353cdf0e10cSrcweir 				mpSet->GetItemState( XATTR_FILLBMP_TILE, false ) == SFX_ITEM_SET )
354cdf0e10cSrcweir 			{
355cdf0e10cSrcweir 				return beans::PropertyState_DIRECT_VALUE;
356cdf0e10cSrcweir 			}
357cdf0e10cSrcweir 			else
358cdf0e10cSrcweir 			{
359cdf0e10cSrcweir 				return beans::PropertyState_AMBIGUOUS_VALUE;
360cdf0e10cSrcweir 			}
361cdf0e10cSrcweir 		}
362cdf0e10cSrcweir 
363cdf0e10cSrcweir 		switch( mpSet->GetItemState( pEntry->nWID, sal_False ) )
364cdf0e10cSrcweir 		{
365cdf0e10cSrcweir 		case SFX_ITEM_READONLY:
366cdf0e10cSrcweir 		case SFX_ITEM_SET:
367cdf0e10cSrcweir 			return beans::PropertyState_DIRECT_VALUE;
368cdf0e10cSrcweir 		case SFX_ITEM_DEFAULT:
369cdf0e10cSrcweir 			return beans::PropertyState_DEFAULT_VALUE;
370cdf0e10cSrcweir 		default:
371cdf0e10cSrcweir //		case SFX_ITEM_DONTCARE:
372cdf0e10cSrcweir //		case SFX_ITEM_DISABLED:
373cdf0e10cSrcweir 			return beans::PropertyState_AMBIGUOUS_VALUE;
374cdf0e10cSrcweir 		}
375cdf0e10cSrcweir 	}
376cdf0e10cSrcweir 	else
377cdf0e10cSrcweir 	{
378cdf0e10cSrcweir 		if( NULL == mpPropSet->GetUsrAnyForID(pEntry->nWID) )
379cdf0e10cSrcweir 			return beans::PropertyState_DEFAULT_VALUE;
380cdf0e10cSrcweir 		else
381cdf0e10cSrcweir 			return beans::PropertyState_DIRECT_VALUE;
382cdf0e10cSrcweir 	}
383cdf0e10cSrcweir }
384cdf0e10cSrcweir 
385cdf0e10cSrcweir uno::Sequence< beans::PropertyState > SAL_CALL SdUnoPageBackground::getPropertyStates( const uno::Sequence< OUString >& aPropertyName )
386cdf0e10cSrcweir 	throw(beans::UnknownPropertyException, uno::RuntimeException)
387cdf0e10cSrcweir {
388cdf0e10cSrcweir 	OGuard aGuard( Application::GetSolarMutex() );
389cdf0e10cSrcweir 
390cdf0e10cSrcweir 	sal_Int32 nCount = aPropertyName.getLength();
391cdf0e10cSrcweir 	const OUString* pNames = aPropertyName.getConstArray();
392cdf0e10cSrcweir 
393cdf0e10cSrcweir 	uno::Sequence< beans::PropertyState > aPropertyStateSequence( nCount );
394cdf0e10cSrcweir 	beans::PropertyState* pState = aPropertyStateSequence.getArray();
395cdf0e10cSrcweir 
396cdf0e10cSrcweir 	while( nCount-- )
397cdf0e10cSrcweir 		*pState++ = getPropertyState( *pNames++ );
398cdf0e10cSrcweir 
399cdf0e10cSrcweir 	return aPropertyStateSequence;
400cdf0e10cSrcweir }
401cdf0e10cSrcweir 
402cdf0e10cSrcweir void SAL_CALL SdUnoPageBackground::setPropertyToDefault( const OUString& PropertyName )
403cdf0e10cSrcweir 	throw(beans::UnknownPropertyException, uno::RuntimeException)
404cdf0e10cSrcweir {
405cdf0e10cSrcweir 	OGuard aGuard( Application::GetSolarMutex() );
406cdf0e10cSrcweir 
407cdf0e10cSrcweir 	const SfxItemPropertySimpleEntry* pEntry = getPropertyMapEntry(PropertyName);
408cdf0e10cSrcweir 
409cdf0e10cSrcweir 	if( pEntry == NULL )
410cdf0e10cSrcweir 		throw beans::UnknownPropertyException();
411cdf0e10cSrcweir 
412cdf0e10cSrcweir 	if( mpSet )
413cdf0e10cSrcweir 	{
414cdf0e10cSrcweir 		if( pEntry->nWID == OWN_ATTR_FILLBMP_MODE )
415cdf0e10cSrcweir 		{
416cdf0e10cSrcweir 			mpSet->ClearItem( XATTR_FILLBMP_STRETCH );
417cdf0e10cSrcweir 			mpSet->ClearItem( XATTR_FILLBMP_TILE );
418cdf0e10cSrcweir 		}
419cdf0e10cSrcweir 		else
420cdf0e10cSrcweir 		{
421cdf0e10cSrcweir 			mpSet->ClearItem( pEntry->nWID );
422cdf0e10cSrcweir 		}
423cdf0e10cSrcweir 	}
424cdf0e10cSrcweir }
425cdf0e10cSrcweir 
426cdf0e10cSrcweir uno::Any SAL_CALL SdUnoPageBackground::getPropertyDefault( const OUString& aPropertyName )
427cdf0e10cSrcweir 	throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
428cdf0e10cSrcweir {
429cdf0e10cSrcweir 	OGuard aGuard( Application::GetSolarMutex() );
430cdf0e10cSrcweir 
431cdf0e10cSrcweir 	const SfxItemPropertySimpleEntry* pEntry = getPropertyMapEntry(aPropertyName);
432cdf0e10cSrcweir 	if( pEntry == NULL || mpSet == NULL )
433cdf0e10cSrcweir 		throw beans::UnknownPropertyException();
434cdf0e10cSrcweir 
435cdf0e10cSrcweir 	uno::Any aAny;
436cdf0e10cSrcweir 	if( mpSet )
437cdf0e10cSrcweir 	{
438cdf0e10cSrcweir 		if( pEntry->nWID == OWN_ATTR_FILLBMP_MODE )
439cdf0e10cSrcweir 		{
440cdf0e10cSrcweir 			aAny <<= drawing::BitmapMode_REPEAT;
441cdf0e10cSrcweir 		}
442cdf0e10cSrcweir 		else
443cdf0e10cSrcweir 		{
444cdf0e10cSrcweir 			SfxItemPool& rPool = *mpSet->GetPool();
445cdf0e10cSrcweir 			SfxItemSet aSet( rPool,	pEntry->nWID, pEntry->nWID);
446cdf0e10cSrcweir 			aSet.Put( rPool.GetDefaultItem( pEntry->nWID ) );
447cdf0e10cSrcweir 
448cdf0e10cSrcweir 			aAny = SvxItemPropertySet_getPropertyValue( *mpPropSet, pEntry, aSet );
449cdf0e10cSrcweir 		}
450cdf0e10cSrcweir 	}
451cdf0e10cSrcweir 	return aAny;
452cdf0e10cSrcweir }
453cdf0e10cSrcweir 
454cdf0e10cSrcweir /** this is used because our property map is not sorted yet */
455cdf0e10cSrcweir const SfxItemPropertySimpleEntry* SdUnoPageBackground::getPropertyMapEntry( const OUString& rPropertyName ) const throw()
456cdf0e10cSrcweir {
457cdf0e10cSrcweir 	return mpPropSet->getPropertyMap()->getByName(rPropertyName);
458cdf0e10cSrcweir }
459cdf0e10cSrcweir 
460