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

#ifndef __com_sun_star_drawing_EnhancedCustomShapeParameterPair_idl__
#include <com/sun/star/drawing/EnhancedCustomShapeParameterPair.idl>
#endif

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

service EnhancedCustomShapeHandle
{
	/** Specifies if the x position of the handle is mirrored.
	*/
	[optional, property] boolean MirroredX;

	/** Specifies if the y position of the handle is mirrored.
	*/
	[optional, property] boolean MirroredY;

	/** Specifies if the handle directions are swapped if the shape is taller than wide.
	*/
	[optional, property] boolean Switched;

	/** If the property Polar is set, then the first value specifies the radius and the second
	    parameter the angle of the handle. Otherwise, if the handle is not polar, the first parameter
		specifies the horizontal handle position, the vertical handle position is described by the
		second parameter.
	*/
	[optional, property] com::sun::star::drawing::EnhancedCustomShapeParameterPair Position;

	/** If this attribute is set, the handle is a polar handle. The property specifies the center
	    position of the handle. If this attribute is set, the attributes RangeX and RangeY are ignored,
		instead the attribute RadiusRange is used.
	*/
	[optional, property] ::com::sun::star::drawing::EnhancedCustomShapeParameterPair Polar;

	/** RefX, if this attribute is set, it specifies the index of the adjustment 
		value which is connected to the horizontal position of the handle
	*/
	[optional, property] long RefX;

	/** RefY, if this attribute is set, it specifies the index of the adjustment 
		value which is connected to the vertical position of the handle
	*/
	[optional, property] long RefY;

	/** RefAngle, if this attribute is set, it specifies the index of the adjustment 
		value which is connected to the angle of the handle
	*/
	[optional, property] long RefAngle;

	/** RefR, if this attribute is set, it specifies the index of the adjustment 
		value which is connected to the radius of the handle
	*/
	[optional, property] long RefR;

	/** If the attribute RangeXMinimum is set, it specifies the horizontal minimum range of the handle.
	*/
	[optional, property] ::com::sun::star::drawing::EnhancedCustomShapeParameter RangeXMinimum;

	/** If the attribute RangeXMaximum is set, it specifies the horizontal maximum range of the handle.
	*/
	[optional, property] ::com::sun::star::drawing::EnhancedCustomShapeParameter RangeXMaximum;

	/** If the attribute RangeYMinimum is set, it specifies the vertical minimum range of the handle.
	*/
	[optional, property] ::com::sun::star::drawing::EnhancedCustomShapeParameter RangeYMinimum;

	/** If the attribute RangeYMaximum is set, it specifies the vertical maximum range of the handle.
	*/
	[optional, property] ::com::sun::star::drawing::EnhancedCustomShapeParameter RangeYMaximum;
	
	/** If this attribute is set, it specifies the minimum radius range that can be used for a polar handle. 
	*/
	[optional, property] ::com::sun::star::drawing::EnhancedCustomShapeParameter RadiusRangeMinimum;

	/** If this attribute is set, it specifies the maximum radius range that can be used for a polar handle. 
	*/
	[optional, property] ::com::sun::star::drawing::EnhancedCustomShapeParameter RadiusRangeMaximum;
};
 
//============================================================================= 
 
}; }; }; };
 
#endif 

