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

#ifndef __com_sun_star_awt_Size_idl__ 
#include <com/sun/star/awt/Size.idl>
#endif
#ifndef __com_sun_star_awt_Point_idl__ 
#include <com/sun/star/awt/Point.idl>
#endif
#ifndef __com_sun_star_beans_PropertyValue_idl__
#include <com/sun/star/beans/PropertyValue.idl>
#endif
#ifndef __com_sun_star_drawing_EnhancedCustomShapeParameterPair_idl__
#include <com/sun/star/drawing/EnhancedCustomShapeParameterPair.idl>
#endif
#ifndef __sun_star_drawing_EnhancedCustomShapeSegment_idl__
#include <com/sun/star/drawing/EnhancedCustomShapeSegment.idl>
#endif
#ifndef __sun_star_drawing_EnhancedCustomShapeTextFrame_idl__
#include <com/sun/star/drawing/EnhancedCustomShapeTextFrame.idl>
#endif


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

module com { module sun { module star { module drawing { 

//=============================================================================
/**
  This service may be represented by a ::com::sun::star::beans::PropertyValue [].
*/

service EnhancedCustomShapePath
{
	/** This property is specifying the points that makes the geometry of the shape
	*/
	[optional, property] sequence<::com::sun::star::drawing::EnhancedCustomShapeParameterPair> Coordinates;

	/** This property specifies the commands and the way the Coordinates have to be interpreted.
	*/
	[optional, property] sequence<::com::sun::star::drawing::EnhancedCustomShapeSegment> Segments;

	/** This property specifies the horizontal StretchPoint that has to be used. No stretching is used if
	    this property is omitted.
	*/
	[optional, property] long StretchX;

	/** This property specifies the vertical StretchPoint that has to be used. No stretching is used if
		this property is omitted.
	*/
	[optional, property] long StretchY;

	/** This property specifies the text frames that can be used with the shape. In general
	   the first text frame is used, except the shape is containing vertical text, then the object 
	   tries to use the second text frame. The default text frame will be as big as the shape.
	*/
	[optional, property] sequence<::com::sun::star::drawing::EnhancedCustomShapeTextFrame> TextFrames;

	/** This property specifies custom glue points
	*/
	[optional, property] sequence<::com::sun::star::drawing::EnhancedCustomShapeParameterPair> GluePoints;

	/** This property specifies GluePoint leaving directions.
	*/
	[optional, property] sequence< double > GluePointLeavingDirections;

	/** This property defines the GluePoint type. The values that can be used are
		specified in com::sun::star::drawing::EnhancedCustomShapeGluePointType
	*/
	[optional, property] short GluePointType;

	/** This property specifies if this shape supports the EnhancedCustomShapeExtrusion
		properties. The default is true.
	*/
	[optional, property] boolean ExtrusionAllowed;

	/** This property specifies if this shape supports concentric gradient fill. The default
		is false.
	*/
	[optional, property] boolean ConcentricGradientFillAllowed;

	/** This property specifies if this shape supports concentric gradient fill. The
		default is false;
	*/
	[optional, property] boolean TextPathAllowed;
};

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

}; }; }; }; 

#endif

