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

#include <com/sun/star/text/TextField.idl>
#include <com/sun/star/text/DependentTextField.idl>

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

module com { module sun { module star { module text { module textfield {

//=============================================================================
/** specifies service of an expression text field.
	@see com::sun::star::text::TextField
*/
published service SetExpression
{
	service  com::sun::star::text::DependentTextField;

    /** contains the textual content of the field.
     */
    [property]string Content;
    /** contains the current content of the text field.
		<p> This property is escpecially usefull for import/export purposes. </p>
	 */
    [property]string CurrentPresentation;

    /** this is the number format for this field.
		@see com::sun::star::util::NumberFormatter
	*/
    [property]long NumberFormat;
    /** specifies the type of the numbering as
        <type scope="com::sun::star::style">NumberingType</type>
     */
    [property]short NumberingType;
    /** determins whether the content is displayed or evaluated.
     */
    [property]boolean IsShowFormula;
    /** contains an informational text that is displayed at the user
     interface if it's an input field.
      */
    [property]string Hint;
    /** determines whether this field is an input field.
     */
    [property]boolean IsInput;
    /** determines whether the field is visible.
     */
    [property]boolean IsVisible;
    /** contains the sequence value when this field is used as sequence field.
     */
    [property]short SequenceValue;
    /** determins the type of the variable as described in
        <type scope="com::sun::star::text">SetVariableType</type>
     */
    [property]short SubType;
    /** contains the numerical value of the field.
     */
    [property]double Value;
    /** contains the name of the set expression field master this field is connected to.
     */
    [property]string VariableName;
    /** determines whether changes in language attributes at the position the text field
        is located also change the number format as appropriate for this language. 

	@since OOo 1.1.2
     */
    [optional, property] boolean IsFixedLanguage;
};

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

}; }; }; }; };

#endif

