/**************************************************************
 * 
 * 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_drawing_GluePoint2_idl__ 
#define __com_sun_star_drawing_GluePoint2_idl__ 
 
#ifndef __com_sun_star_drawing_Alignment_idl__
#include <com/sun/star/drawing/Alignment.idl>
#endif

#ifndef __com_sun_star_awt_Point_idl__
#include <com/sun/star/awt/Point.idl>
#endif

#ifndef __com_sun_star_drawing_EscapeDirection_idl__ 
#include <com/sun/star/drawing/EscapeDirection.idl>
#endif

//============================================================================= 
 
 module com {  module sun {  module star {  module drawing {  
 
//============================================================================= 
 
/** This struct defines the attributes of a glue point.
	<p>A glue point is a position inside a drawing shape where an edge
	of a connector shape can be connected.</p>
 */
published struct GluePoint2
{
	/** This is the position of this glue point. Depending on
	    the flag <code>IsRelative</code>, this is either in 1/100cm
		or in 1/100%.

    <!-- Dennis: Is the % correct? -->
	 */
	com::sun::star::awt::Point Position; 
	
	/** if this flag is set to true, the position of this glue point
		is given in 1/100% values instead of 1/100cm. */
	boolean IsRelative;

	/** if this glue points position is not relative, this enum
		specifies the vertical and horizontal alignment of this
		point. The alignment specifies how the glue point is
		moved if the shape is resized. */
	com::sun::star::drawing::Alignment PositionAlignment;

	/** this member specifies the escape direction for a glue
		point. The escape direction is the direction the connecting
		line escapes the shape. */

	com::sun::star::drawing::EscapeDirection Escape;

	/** if this flag is set to false, this is a default glue
		point. Some shapes may have default glue points attached
		to them which cannot be altered or removed. */
	boolean IsUserDefined;
}; 
 
//============================================================================= 
 
}; }; }; };  
 
#endif 

