/**************************************************************
 * 
 * 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_beans_Property_idl__ 
#define __com_sun_star_beans_Property_idl__ 
 
#ifndef __com_sun_star_reflection_XIdlClass_idl__ 
#include <com/sun/star/reflection/XIdlClass.idl> 
#endif 
 
 
//============================================================================= 
 
module com {  module sun {  module star {  module beans {  
 
//============================================================================= 
 
/** This structure describes a property.
	
	
	<dl>There are three types of properties:
		<dt>- bound properties</dt>
		<dt>- constrained properties</dt>
		<dt>- free properties</dt>
	</dl>
 */
published struct Property
{
	/** specifies the name of the property.
		
		<p>The name is unique within an <type>XPropertySet</type>.
		Upper and lower case are distinguished.</p>
	 */
	string Name; 
 
	//------------------------------------------------------------------------- 
	 
	/** contains an implementation-specific handle for the property.
		
		<p>It may be -1 if the implementation has no handle. You can use 
		this handle to get values from the <type>XFastPropertySet</type>.</p>
	 */
	long Handle; 
 
	//------------------------------------------------------------------------- 
	 
	/** contains an object that identifies the declared type for
		the property. 
		
		<p>If the property has multiple types or the type is not 
		known, <strong>but not an <atom>any</atom></strong>, then 
		<const>void</const> must be returned.</p>
	 */
	type Type; 
 
	//------------------------------------------------------------------------- 
	 
	/** This field may contain zero or more constants of the
		<type>PropertyAttribute</type> constants group.
	 */
	short Attributes; 
 
}; 
 
//============================================================================= 
 
}; }; }; };  
 
#endif 
