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

#ifndef __com_sun_star_inspection_XPropertyControl_idl__
#include <com/sun/star/inspection/XPropertyControl.idl>
#endif
#ifndef __com_sun_star_beans_Optional_idl__
#include <com/sun/star/beans/Optional.idl>
#endif
#ifndef __com_sun_star_lang_IllegalArgumentException_idl__
#include <com/sun/star/lang/IllegalArgumentException.idl>
#endif

//=============================================================================
module com {  module sun {  module star {  module inspection {

//-----------------------------------------------------------------------------
/** defines the interface for an <type>XPropertyControl</type> which supports
    displaying and entering numerical values.

    @since OpenOffice 2.0.3
*/
published interface XNumericControl : XPropertyControl
{
    /** describes the number of decimal digits to use for the value
    */
    [attribute] short   DecimalDigits;

    /** describes the minimum value which is allowed to be entered in the control
    */
    [attribute] com::sun::star::beans::Optional<double> MinValue;

    /** describes the maximum value which is allowed to be entered in the control
    */
    [attribute] com::sun::star::beans::Optional<double> MaxValue;

    /** describes a <type scope="com::sun::star::util">MeasureUnit</type> to be applied
        for displaying values.

        <p>Only a certain set of <type scope="com::sun::star::util">MeasureUnit</type> values is
        supported. In particular, every value which denotes a fraction of another
        unit (like 100th millimeters) cannot be used as DisplayUnit.</p>

        @throws com::sun::star::lang::IllegalArgumentException
            if the caller attempts to set an unsupported <type scope="com::sun::star::util">MeasureUnit</type>
    */
    [attribute] short DisplayUnit
    {
        set raises (com::sun::star::lang::IllegalArgumentException);
    };

    /** describes a <type scope="com::sun::star::util">MeasureUnit</type> to be
        applied for transferring values.

        <p>The core measurement unit for a property value might differ from the unit which
        is used by the control to display it. For instance, your property value might require
        that your values denote 100th millimeters, but to the user, you want to present the
        value as, say, inches. In this case, a numeric control can automatically handle the
        value conversion for you, if you give it a ValueUnit different from the DisplayUnit.</p>

        @see XPropertyControl::Value
    */
    [attribute] short ValueUnit;
};

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

}; }; }; };

#endif
