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

#ifndef __com_sun_star_sheet_XSheetCondition_idl__
#include <com/sun/star/sheet/XSheetCondition.idl>
#endif

#ifndef __com_sun_star_beans_XPropertySet_idl__
#include <com/sun/star/beans/XPropertySet.idl>
#endif

#ifndef __com_sun_star_sheet_ValidationType_idl__
#include <com/sun/star/sheet/ValidationType.idl>
#endif

#ifndef __com_sun_star_sheet_ValidationAlertStyle_idl__
#include <com/sun/star/sheet/ValidationAlertStyle.idl>
#endif

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

module com {  module sun {  module star {  module sheet {

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

/** represents the data validation settings for a cell or cell range.
 */
published service TableValidation
{

	interface com::sun::star::beans::XPropertySet;

	interface com::sun::star::sheet::XSheetCondition;

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

	/** specifies the type of validation.
	 */
	[property] com::sun::star::sheet::ValidationType Type;

	//-------------------------------------------------------------------------

	/** specifies if an input message is shown when the cursor is in a
		cell with these validation settings.
	 */
	[property] boolean ShowInputMessage;

	//-------------------------------------------------------------------------

	/** specifies the title of the window showing the input message.

		<p>This is only used if <member>TableValidation::ShowInputMessage</member>
		is set to <TRUE/>.</p>
	 */
	[property] string InputTitle;

	//-------------------------------------------------------------------------

	/** specifies the text of the input message.

		<p>This is only used if <member>TableValidation::ShowInputMessage</member>
		is set to <TRUE/>.</p>
	 */
	[property] string InputMessage;

	//-------------------------------------------------------------------------

	/** specifies if an error message is displayed when invalid data
		is entered.
	 */
	[property] boolean ShowErrorMessage;

	//-------------------------------------------------------------------------

	/** specifies the title of the window showing the error message.

		<p>This is only used if <member>TableValidation::ShowErrorMessage</member>
		is set to <TRUE/>.</p>
	 */
	[property] string ErrorTitle;

	//-------------------------------------------------------------------------

	/** specifies the text of the error message.

		<p>This is only used if <member>TableValidation::ShowErrorMessage</member>
		is set to <TRUE/>.</p>
	 */
	[property] string ErrorMessage;

	//-------------------------------------------------------------------------

	/** specifies if blank cells should be allowed.
	 */
	[property] boolean IgnoreBlankCells;

	//-------------------------------------------------------------------------

	/** specifies the style of the error message.

		<p>This is used only if <member>TableValidation::ShowErrorMessage</member>
		is set to <TRUE/>.</p>
	 */
	[property] com::sun::star::sheet::ValidationAlertStyle ErrorAlertStyle;

	//-------------------------------------------------------------------------

	/** specifies if the list of possible values should be shown on the cell and how.

        See also <type>TableValidationVisibility</type>
	 */
	[optional,property] short ShowList;

};

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

}; }; }; };

#endif

