/**************************************************************
 * 
 * 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_form_XGridFieldDataSupplier_idl__ 
#define __com_sun_star_form_XGridFieldDataSupplier_idl__ 
 
#ifndef __com_sun_star_uno_XInterface_idl__ 
#include <com/sun/star/uno/XInterface.idl> 
#endif 
 
#ifndef __com_sun_star_reflection_XIdlClass_idl__ 
#include <com/sun/star/reflection/XIdlClass.idl> 
#endif 
 
 
//============================================================================= 
 
 module com {  module sun {  module star {  module form { 
 
//============================================================================= 
 
/** provides access to the data of a GridControl
	
	<p>You can retrieve the data type information and the data in a row.</p>

	<p>This interface allows to retrieve data even for rows which are not current, which is quite usefull,
	as normally, you can't affect the current row in a grid control without moving the cursor of the underlying
	<type scope="com::sun::star::form::component">DataForm</type>.</p>

	@see XGrid
	@see com::sun::star::form::control::GridControl
	@see com::sun::star::form::component::GridControl

	@deprecated
 */
published interface XGridFieldDataSupplier: com::sun::star::uno::XInterface
{ 
	//------------------------------------------------------------------------- 
	/** checks whether or not the content of the grid's columns can be retrieved in the requested format.

		<p>Not every cell content can be retrieved in every representation. For example, in a text column,
		you usually won't be able to retrieve the content as double.<br/>
		To check if the type you need is supported by the columns, use this method.</p>

		@return
			A sequence of boolean flags. Each flag corresponds to the respective column, and <TRUE/> indicates
			that the column content can be retrieved in the requested format, <FALSE/> denies this.

		@see XGridColumnFactory
		@see DataAwareControlModel
		@see XGridFieldDataSupplier::queryFieldData
	*/
	sequence<boolean> queryFieldDataType( [in] type xType ); 
 
	//------------------------------------------------------------------------- 
	/** retrieves the actual column data for the given row

		<p>If a column does not support the requested type, <NULL/> is returned at the respective
		position.</p>

		@see XGridFieldDataSupplier::queryFieldDataType
	*/
	sequence<any> queryFieldData( [in] long nRow, 
			 [in] type xType ); 
}; 
 
//============================================================================= 
 
}; }; }; }; 
 
/*============================================================================= 
 
=============================================================================*/ 
#endif 
