/**************************************************************
 * 
 * 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 __com_sun_star_util_NumberFormatsSupplier_idl__
#define __com_sun_star_util_NumberFormatsSupplier_idl__

#ifndef __com_sun_star_util_XNumberFormatsSupplier_idl__
#include <com/sun/star/util/XNumberFormatsSupplier.idl>
#endif

#ifndef __com_sun_star_lang_XInitialization_idl__
#include <com/sun/star/lang/XInitialization.idl>
#endif

//=============================================================================

 module com {  module sun {  module star {  module util {

//=============================================================================

/** provides an supplier of number formats

	@see NumberFormats
	@see NumberFormatter

    @since OpenOffice 1.1.2
*/
published service NumberFormatsSupplier
{
	/** used to initialize the component when instantiating.

		<p>In the <member scope="com::sun::star::lang">XInitialization::initialize</member> method, you can
		pass a <type scope="com::sun::star::lang">Locale</type> to specify the default locale of the
		number formats supplier.</p>

		<p>The component should be initialized only once, after it has been instantiated, and before it
		has been used.<br/>
		If you initialize it a second time (or after you used it), it is up to implementation
		how this is handled.</p>
	*/
	interface com::sun::star::lang::XInitialization;

	/** allows access to the number formats supplied by the component.
	*/
	interface XNumberFormatsSupplier;
};

//=============================================================================

}; }; }; };

#endif

