/**************************************************************
 * 
 * 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_chart_ChartAxisZSupplier_idl__ 
#define __com_sun_star_chart_ChartAxisZSupplier_idl__ 
 
#ifndef __com_sun_star_chart_XAxisZSupplier_idl__ 
#include <com/sun/star/chart/XAxisZSupplier.idl> 
#endif 
 
 
//============================================================================= 
 
 module com {  module sun {  module star {  module chart {  
 
//============================================================================= 
 
/** A helper service for chart documents which supply a z-axis.
 */
published service ChartAxisZSupplier
{ 
    /** offers access to the axis object, the title, and the grids
     */
	interface com::sun::star::chart::XAxisZSupplier; 
 
	//------------------------------------------------------------------------- 
	 
	/** Determines if the z-axis is shown or hidden.@see ChartAxis
	 */
	[property] boolean HasZAxis; 
 
	//------------------------------------------------------------------------- 
	 
	/** Determines if the description of the z-axis
		is shown or hidden.
	 */
	[property] boolean HasZAxisDescription; 
 
	//------------------------------------------------------------------------- 
	 
	/** Determines if the major grid of the z-axis
		is shown or hidden.@see ChartGrid
	 */
	[property] boolean HasZAxisGrid; 
 
	//------------------------------------------------------------------------- 
	 
	/** Determines if the minor grid of the z-axis is shown
		or hidden.@see ChartGrid
	 */
	[property] boolean HasZAxisHelpGrid; 
 
	//------------------------------------------------------------------------- 
	 
	/** Determines if the title of the z-axis is shown
		or hidden.@see ChartTitle
	 */
	[property] boolean HasZAxisTitle; 
}; 
 
//============================================================================= 
 
}; }; }; };  
 
#endif 
