/**************************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 *************************************************************/



#ifndef _XMLOFF_FORMS_CONTROLPROPERTYMAP_HXX_
#define _XMLOFF_FORMS_CONTROLPROPERTYMAP_HXX_

#include <xmloff/xmlprmap.hxx>
#include <xmloff/xmlexppr.hxx>

struct XMLPropertyMapEntry;
//.........................................................................
namespace xmloff
{
//.........................................................................

	const XMLPropertyMapEntry* getControlStylePropertyMap( );

	void initializePropertyMaps();

	//=====================================================================
	//= OFormComponentStyleExportMapper
	//=====================================================================
	class OFormComponentStyleExportMapper : public SvXMLExportPropertyMapper
	{
	public:
		OFormComponentStyleExportMapper( const UniReference< XMLPropertySetMapper >& _rMapper );

		void handleSpecialItem(
			SvXMLAttributeList&							_rAttrList,
			const XMLPropertyState&						_rProperty,
			const SvXMLUnitConverter&					_rUnitConverter,
			const SvXMLNamespaceMap&					_rNamespaceMap,
			const ::std::vector< XMLPropertyState >*	_pProperties,
			sal_uInt32									_nIdx
		) const;
	};

//.........................................................................
}	// namespace xmloff
//.........................................................................

#endif // _XMLOFF_FORMS_CONTROLPROPERTYMAP_HXX_


