/**************************************************************
 * 
 * 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_awt_WindowEvent_idl__ 
#define __com_sun_star_awt_WindowEvent_idl__ 
 
#ifndef __com_sun_star_lang_EventObject_idl__ 
#include <com/sun/star/lang/EventObject.idl> 
#endif 
 
 
//============================================================================= 
 
 module com {  module sun {  module star {  module awt {  
 
//============================================================================= 
 
/** specifies a window event.
 */
published struct WindowEvent: com::sun::star::lang::EventObject
{ 
	//------------------------------------------------------------------------- 
	 
	/** specifies the outer x position of the window.
	 */
	long X; 
 
	//------------------------------------------------------------------------- 
	 
	/** specifies the outer y position of the window.
	 */
	long Y; 
 
	//------------------------------------------------------------------------- 
	 
	/** specifies the outer (total) width of the window.
	 */
	long Width; 
 
	//------------------------------------------------------------------------- 
	 
	/** specifies the outer (total) height of the window.
	 */
	long Height; 
 
	//------------------------------------------------------------------------- 
	 
	/** specifies the inset from the left. 
						
		<p>The inset is the distance between the outer and the inner window,
		that means the left inset is the width of the left border.</p>
	 */
	long LeftInset; 
 
	//------------------------------------------------------------------------- 
	 
	/** specifies the inset from the top. 
						
		<p>The inset is the distance between the outer and the inner window,
		that means the top inset is the heigt of the top border.</p>
	 */
	long TopInset; 
 
	//------------------------------------------------------------------------- 
	 
	/** specifies the inset from the right. 
						
		<p>The inset is the distance between the outer and the inner window,
		that means the right inset is the width of the right border.</p>
	 */
	long RightInset; 
 
	//------------------------------------------------------------------------- 
	 
	/** specifies the inset from the bottom. 
						
		<p>The inset is the distance between the outer and the inner window,
		that means the bottom inset is the heigt of the bottom border.</p>
	 */
	long BottomInset; 
 
}; 
 
//============================================================================= 
 
}; }; }; };  
 
#endif 
