/**************************************************************
 * 
 * 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_XWindow2_idl__ 
#define __com_sun_star_awt_XWindow2_idl__ 
 
#ifndef __com_sun_star_awt_XWindow_idl__ 
#include <com/sun/star/awt/XWindow.idl> 
#endif 
 
#ifndef __com_sun_star_awt_Size_idl__ 
#include <com/sun/star/awt/Size.idl> 
#endif 
 
 
 
//============================================================================= 
 
 module com {  module sun {  module star {  module awt {  
 
//============================================================================= 
 
/** specifies some extended operations for a window component.
		
	<p>A window is a rectangular region on an output device with 
	its own position, size, and internal coordinate system.
    A window is used for displaying data. In addition, the window
    receives events from the user.</p>
 */
published interface XWindow2: com::sun::star::awt::XWindow
{ 
	//------------------------------------------------------------------------- 
	 
	/** sets the inner bounds of the window, also known as the client size

        @param Size
        the inner width and height of the window.

    */
	void setOutputSize( [in] com::sun::star::awt::Size aSize ); 
 
	//------------------------------------------------------------------------- 
	 
	/** returns the inner bounds of the window, also known as the client size.
	 */
	com::sun::star::awt::Size getOutputSize(); 
 
	//------------------------------------------------------------------------- 
	 
	/** returns the visibility state of the window
	 */
	boolean isVisible(); 
 
	//------------------------------------------------------------------------- 
	 
	/** returns the activation state of the window
	 */
	boolean isActive(); 
 
	//------------------------------------------------------------------------- 
	 
	/** returns the enabled state of the window
	 */
	boolean isEnabled(); 
 
	//------------------------------------------------------------------------- 
	 
	/** returns the focus state of the window
	 */
	boolean hasFocus(); 
 
	//------------------------------------------------------------------------- 
}; 
 
//============================================================================= 
 
}; }; }; };  
 
#endif 
