/**************************************************************
 * 
 * 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_DrawingDocumentDrawView_idl__ 
#define __com_sun_star_drawing_DrawingDocumentDrawView_idl__ 
 
#ifndef __com_sun_star_drawing_XDrawView_idl__ 
#include <com/sun/star/drawing/XDrawView.idl> 
#endif 
 
#ifndef __com_sun_star_beans_XPropertySet_idl__ 
#include <com/sun/star/beans/XPropertySet.idl> 
#endif 
 
#ifndef __com_sun_star_frame_Controller_idl__ 
#include <com/sun/star/frame/Controller.idl> 
#endif 
 
#ifndef __com_sun_star_view_XSelectionSupplier_idl__ 
#include <com/sun/star/view/XSelectionSupplier.idl> 
#endif 
 
#ifndef __com_sun_star_lang_XServiceInfo_idl__ 
#include <com/sun/star/lang/XServiceInfo.idl> 
#endif 

#ifndef __com_sun_star_drawing_XDrawPage_idl__ 
#include <com/sun/star/drawing/XDrawPage.idl> 
#endif 

#ifndef __com_sun_star_awt_XWindow_idl__
#include <com/sun/star/awt/XWindow.idl>
#endif

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

//============================================================================= 
module com {  module sun {  module star {  module view {
    published interface XFormLayerAccess;
}; }; }; };

//============================================================================= 
 
 module com {  module sun {  module star {  module drawing {  
 
//============================================================================= 
 
/** This componend integrates a view to a <type>DrawPage</type>s or
	<type>MasterPage</type> from a <type>DrawingDocument</type>.
 */
published service DrawingDocumentDrawView
{ 
	//------------------------------------------------------------------------- 

	/** this services offers the  integration of this component into the
		desktop.
	*/
	service com::sun::star::frame::Controller;

	//------------------------------------------------------------------------- 

	/** lets you access the window for this view

	    @since OOo 1.1.2
	*/
	[optional] interface com::sun::star::awt::XWindow;

    /** let's you access the view part of the form layer contained in the document's view
    */
    [optional] interface com::sun::star::view::XFormLayerAccess;

	//------------------------------------------------------------------------- 
	 
	/** lets you set/get the current page displayed by this
		view.
	 */
	interface com::sun::star::drawing::XDrawView; 

	//------------------------------------------------------------------------- 
 
	 
	/** lets you access the properties of this service.
	 */
	interface com::sun::star::beans::XPropertySet; 

	//------------------------------------------------------------------------- 
 
	 
	/** gives you access to the selected entities of this 
				view.
	 */
	interface com::sun::star::view::XSelectionSupplier; 
 

	//------------------------------------------------------------------------- 
	 
	/** provides the names of the services implemented by  
				this instance.
	 */
	interface com::sun::star::lang::XServiceInfo; 
 
	//------------------------------------------------------------------------- 
	 
	/** If the view is in masterpage mode, the view shows the masterpages 
		of this model.
	 */
	[property] boolean IsMasterPageMode; 
 
	//------------------------------------------------------------------------- 
	 
	/** If the view is in layer mode, the user can modify the layer of the
		model of this view in the user interface.
	 */
	[property] boolean IsLayerMode; 
 

	//------------------------------------------------------------------------- 
	 
	/** This is the drawing page that is currently visible.
	 */
	[property] XDrawPage CurrentPage;

	//------------------------------------------------------------------------- 
	 
	/** This is the area that is currently visible.
	 */
	[readonly, property] com::sun::star::awt::Rectangle VisibleArea;

	//-------------------------------------------------------------------------

	/** This property defines the zoom type for the document.
        @see com::sun::star::view::DocumentZoomType

		Note: After setting other types then
		<member scope="com::sun::star::view::DocumentZoomType">BY_VALUE</member>,
		implementations may calculate the required zoom value and set the type
		to <member scope="com::sun::star::view::DocumentZoomType">BY_VALUE</member>
		afterwards.

		@since OOo 1.1.2
	*/
   	[optional, property] short ZoomType;

   	//-------------------------------------------------------------------------

   	/** Defines the zoom value to use.
        Valid only if the ZoomType is set to
        <member scope="com::sun::star::view::DocumentZoomType">BY_VALUE</member>.

		@since OOo 1.1.2
	*/
   	[optional, property] short ZoomValue;

   	//-------------------------------------------------------------------------

	/** defines the offset from the top left position of the displayed page
		to the top left position of the view area in 100th/mm.

		@since OOo 1.1.2
	*/
	[optional, property] com::sun::star::awt::Point ViewOffset;

    /** The sub controller takes over view specific handling of properties,
        the selection, and the current page/slide.

        The following line is commented because XDrawSubController is not
        (yet) published and the IDL compiler does not allow that.

        [optional, property] ::com::sun::star::drawing::XDrawSubController SubController;
    */
}; 
 
//============================================================================= 
 
}; }; }; };  
 
#endif 

