1*b0724fc6SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*b0724fc6SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*b0724fc6SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*b0724fc6SAndrew Rist  * distributed with this work for additional information
6*b0724fc6SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*b0724fc6SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*b0724fc6SAndrew Rist  * "License"); you may not use this file except in compliance
9*b0724fc6SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*b0724fc6SAndrew Rist  *
11*b0724fc6SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*b0724fc6SAndrew Rist  *
13*b0724fc6SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*b0724fc6SAndrew Rist  * software distributed under the License is distributed on an
15*b0724fc6SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b0724fc6SAndrew Rist  * KIND, either express or implied.  See the License for the
17*b0724fc6SAndrew Rist  * specific language governing permissions and limitations
18*b0724fc6SAndrew Rist  * under the License.
19*b0724fc6SAndrew Rist  *
20*b0724fc6SAndrew Rist  *************************************************************/
21*b0724fc6SAndrew Rist 
22*b0724fc6SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_toolkit.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include <toolkit/helper/unopropertyarrayhelper.hxx>
28cdf0e10cSrcweir #include <toolkit/helper/property.hxx>
29cdf0e10cSrcweir 
30cdf0e10cSrcweir //	----------------------------------------------------
31cdf0e10cSrcweir //	class UnoPropertyArrayHelper
32cdf0e10cSrcweir //	----------------------------------------------------
33cdf0e10cSrcweir 
UnoPropertyArrayHelper(const::com::sun::star::uno::Sequence<sal_Int32> & rIDs)34cdf0e10cSrcweir UnoPropertyArrayHelper::UnoPropertyArrayHelper( const ::com::sun::star::uno::Sequence<sal_Int32>& rIDs )
35cdf0e10cSrcweir {
36cdf0e10cSrcweir 	sal_Int32 nIDs = rIDs.getLength();
37cdf0e10cSrcweir 	const sal_Int32* pIDs = rIDs.getConstArray();
38cdf0e10cSrcweir 	for ( sal_Int32 n = 0; n < nIDs; n++ )
39cdf0e10cSrcweir 		maIDs.Insert( pIDs[n], (void*)1L );
40cdf0e10cSrcweir }
41cdf0e10cSrcweir 
UnoPropertyArrayHelper(const std::list<sal_uInt16> & rIDs)42cdf0e10cSrcweir UnoPropertyArrayHelper::UnoPropertyArrayHelper( const std::list< sal_uInt16 > &rIDs )
43cdf0e10cSrcweir {
44cdf0e10cSrcweir     std::list< sal_uInt16 >::const_iterator iter;
45cdf0e10cSrcweir     for( iter = rIDs.begin(); iter != rIDs.end(); iter++)
46cdf0e10cSrcweir 	  maIDs.Insert( *iter, (void*)1L);
47cdf0e10cSrcweir }
48cdf0e10cSrcweir 
ImplHasProperty(sal_uInt16 nPropId) const49cdf0e10cSrcweir sal_Bool UnoPropertyArrayHelper::ImplHasProperty( sal_uInt16 nPropId ) const
50cdf0e10cSrcweir {
51cdf0e10cSrcweir 	if ( ( nPropId >= BASEPROPERTY_FONTDESCRIPTORPART_START ) && ( nPropId <= BASEPROPERTY_FONTDESCRIPTORPART_END ) )
52cdf0e10cSrcweir 		nPropId = BASEPROPERTY_FONTDESCRIPTOR;
53cdf0e10cSrcweir 
54cdf0e10cSrcweir 	return maIDs.Get( nPropId ) ? sal_True : sal_False;
55cdf0e10cSrcweir }
56cdf0e10cSrcweir 
57cdf0e10cSrcweir // ::cppu::IPropertyArrayHelper
fillPropertyMembersByHandle(::rtl::OUString * pPropName,sal_Int16 * pAttributes,sal_Int32 nPropId)58cdf0e10cSrcweir sal_Bool UnoPropertyArrayHelper::fillPropertyMembersByHandle( ::rtl::OUString * pPropName, sal_Int16 * pAttributes, sal_Int32 nPropId )
59cdf0e10cSrcweir {
60cdf0e10cSrcweir     sal_uInt16 id = sal::static_int_cast< sal_uInt16 >(nPropId);
61cdf0e10cSrcweir 	sal_Bool bValid = ImplHasProperty( id );
62cdf0e10cSrcweir 	if ( bValid )
63cdf0e10cSrcweir 	{
64cdf0e10cSrcweir 		if ( pPropName )
65cdf0e10cSrcweir 			*pPropName = GetPropertyName( id );
66cdf0e10cSrcweir 		if ( pAttributes )
67cdf0e10cSrcweir 			*pAttributes = GetPropertyAttribs( id );
68cdf0e10cSrcweir 	}
69cdf0e10cSrcweir 	return bValid;
70cdf0e10cSrcweir }
71cdf0e10cSrcweir 
getProperties()72cdf0e10cSrcweir ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property > UnoPropertyArrayHelper::getProperties()
73cdf0e10cSrcweir {
74cdf0e10cSrcweir 	// Sortiert nach Namen...
75cdf0e10cSrcweir 
76cdf0e10cSrcweir 	Table aSortedPropsIds;
77cdf0e10cSrcweir 	sal_uInt32 nProps = maIDs.Count();
78cdf0e10cSrcweir 	for ( sal_uInt32 s = 0; s < nProps; s++ )
79cdf0e10cSrcweir 	{
80cdf0e10cSrcweir 		sal_uInt16 nId = sal::static_int_cast< sal_uInt16 >(
81cdf0e10cSrcweir             maIDs.GetObjectKey( s ));
82cdf0e10cSrcweir 		aSortedPropsIds.Insert( 1+GetPropertyOrderNr( nId ), (void*)(sal_uInt32)nId );
83cdf0e10cSrcweir 
84cdf0e10cSrcweir 		if ( nId == BASEPROPERTY_FONTDESCRIPTOR )
85cdf0e10cSrcweir 		{
86cdf0e10cSrcweir 			// Einzelproperties...
87cdf0e10cSrcweir 			for ( sal_uInt16 i = BASEPROPERTY_FONTDESCRIPTORPART_START; i <= BASEPROPERTY_FONTDESCRIPTORPART_END; i++ )
88cdf0e10cSrcweir 				aSortedPropsIds.Insert( 1+GetPropertyOrderNr( i ), (void*)(sal_uInt32)i );
89cdf0e10cSrcweir 		}
90cdf0e10cSrcweir 	}
91cdf0e10cSrcweir 
92cdf0e10cSrcweir 	nProps = aSortedPropsIds.Count();	// koennen jetzt mehr sein
93cdf0e10cSrcweir 	::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property> aProps( nProps );
94cdf0e10cSrcweir 	::com::sun::star::beans::Property* pProps = aProps.getArray();
95cdf0e10cSrcweir 
96cdf0e10cSrcweir 	for ( sal_uInt32 n = 0; n < nProps; n++ )
97cdf0e10cSrcweir 	{
98cdf0e10cSrcweir 		sal_uInt16 nId = (sal_uInt16)(sal_uLong)aSortedPropsIds.GetObject( n );
99cdf0e10cSrcweir 		pProps[n].Name = GetPropertyName( nId );
100cdf0e10cSrcweir 		pProps[n].Handle = nId;
101cdf0e10cSrcweir 		pProps[n].Type = *GetPropertyType( nId );
102cdf0e10cSrcweir 		pProps[n].Attributes = GetPropertyAttribs( nId );
103cdf0e10cSrcweir 	}
104cdf0e10cSrcweir 
105cdf0e10cSrcweir 	return aProps;
106cdf0e10cSrcweir }
107cdf0e10cSrcweir 
getPropertyByName(const::rtl::OUString & rPropertyName)108cdf0e10cSrcweir ::com::sun::star::beans::Property UnoPropertyArrayHelper::getPropertyByName(const ::rtl::OUString& rPropertyName) throw (::com::sun::star::beans::UnknownPropertyException)
109cdf0e10cSrcweir {
110cdf0e10cSrcweir 	::com::sun::star::beans::Property aProp;
111cdf0e10cSrcweir 	sal_uInt16 nId = GetPropertyId( rPropertyName );
112cdf0e10cSrcweir 	if ( ImplHasProperty( nId ) )
113cdf0e10cSrcweir 	{
114cdf0e10cSrcweir 		aProp.Name = rPropertyName;
115cdf0e10cSrcweir 		aProp.Handle = -1;
116cdf0e10cSrcweir 		aProp.Type = *GetPropertyType( nId );
117cdf0e10cSrcweir 		aProp.Attributes = GetPropertyAttribs( nId );
118cdf0e10cSrcweir 	}
119cdf0e10cSrcweir 
120cdf0e10cSrcweir 	return aProp;
121cdf0e10cSrcweir }
122cdf0e10cSrcweir 
hasPropertyByName(const::rtl::OUString & rPropertyName)123cdf0e10cSrcweir sal_Bool UnoPropertyArrayHelper::hasPropertyByName(const ::rtl::OUString& rPropertyName)
124cdf0e10cSrcweir {
125cdf0e10cSrcweir 	return ImplHasProperty( GetPropertyId( rPropertyName ) );
126cdf0e10cSrcweir }
127cdf0e10cSrcweir 
getHandleByName(const::rtl::OUString & rPropertyName)128cdf0e10cSrcweir sal_Int32 UnoPropertyArrayHelper::getHandleByName( const ::rtl::OUString & rPropertyName )
129cdf0e10cSrcweir {
130cdf0e10cSrcweir 	sal_Int32 nId = (sal_Int32 ) GetPropertyId( rPropertyName );
131cdf0e10cSrcweir 	return nId ? nId : (-1);
132cdf0e10cSrcweir }
133cdf0e10cSrcweir 
fillHandles(sal_Int32 * pHandles,const::com::sun::star::uno::Sequence<::rtl::OUString> & rPropNames)134cdf0e10cSrcweir sal_Int32 UnoPropertyArrayHelper::fillHandles( sal_Int32* pHandles, const ::com::sun::star::uno::Sequence< ::rtl::OUString > & rPropNames )
135cdf0e10cSrcweir {
136cdf0e10cSrcweir 	const ::rtl::OUString* pNames = rPropNames.getConstArray();
137cdf0e10cSrcweir 	sal_Int32 nValues = rPropNames.getLength();
138cdf0e10cSrcweir 	sal_Int32 nValidHandles = 0;
139cdf0e10cSrcweir 
140cdf0e10cSrcweir 	for ( sal_Int32 n = 0; n < nValues; n++ )
141cdf0e10cSrcweir 	{
142cdf0e10cSrcweir 		sal_uInt16 nPropId = GetPropertyId( pNames[n] );
143cdf0e10cSrcweir 		if ( nPropId && ImplHasProperty( nPropId ) )
144cdf0e10cSrcweir 		{
145cdf0e10cSrcweir 			pHandles[n] = nPropId;
146cdf0e10cSrcweir 			nValidHandles++;
147cdf0e10cSrcweir 		}
148cdf0e10cSrcweir 		else
149cdf0e10cSrcweir 		{
150cdf0e10cSrcweir 			pHandles[n] = -1;
151cdf0e10cSrcweir 		}
152cdf0e10cSrcweir 	}
153cdf0e10cSrcweir 	return nValidHandles;
154cdf0e10cSrcweir }
155cdf0e10cSrcweir 
156cdf0e10cSrcweir 
157