/**************************************************************
 * 
 * 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_NumberFormatSettings_idl__ 
#define __com_sun_star_util_NumberFormatSettings_idl__ 
 
#ifndef __com_sun_star_beans_XPropertySet_idl__ 
#include <com/sun/star/beans/XPropertySet.idl> 
#endif 
 
#ifndef __com_sun_star_util_Date_idl__ 
#include <com/sun/star/util/Date.idl> 
#endif 
 
 
//============================================================================= 
 
 module com {  module sun {  module star {  module util {  
 
//============================================================================= 
 
/** specifies the settings for number formatting.
 */
published service NumberFormatSettings
{ 
	/** provides access to the properties.
	 */
	interface com::sun::star::beans::XPropertySet; 
 
	//------------------------------------------------------------------------- 
	 
	/** specifies the date which is represented by the value 0.

		<p>The most common value for this is 12/30/1899.</p>
	 */
	[property] com::sun::star::util::Date NullDate; 
 
	//------------------------------------------------------------------------- 
	 
	/** specifies the maximum number of decimals used for the
		standard number format ("General").
	 */
	[property] short StandardDecimals; 
 
	//------------------------------------------------------------------------- 
	 
	/** is set to indicate that a zero value should be formatted as an empty string.
	 */
	[property] boolean NoZero; 
 
	//------------------------------------------------------------------------- 
	 
	/** specifies the first year to be generated from a two-digit
		year input.
	 */
	[property] short TwoDigitDateStart; 
 
}; 
 
//============================================================================= 
 
}; }; }; };  
 
#endif

