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

#ifndef __com_sun_star_uno_XInterface_idl__
#include <com/sun/star/uno/XInterface.idl>
#endif

#ifndef __ooo_vba_XHelperInterface_idl__
#include <ooo/vba/XHelperInterface.idl>
#endif

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

module ooo {  module vba {  module excel {

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

interface XValidation
{
	interface ::ooo::vba::XHelperInterface;

	[attribute] boolean IgnoreBlank;
	[attribute] boolean InCellDropdown;
	[attribute] boolean ShowInput;
	[attribute] boolean ShowError;
	[attribute] string InputTitle;
	[attribute] string ErrorTitle;
	[attribute] string InputMessage;
	[attribute] string ErrorMessage;
	[attribute, readonly] string Formula1;
	[attribute, readonly] string Formula2;
	void Delete();
	void Add( [in] any Type, [in] any AlertStyle, [in] any Operator, [in] any Formula1, [in] any Formula2);
};

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

}; }; };

#endif
