/**************************************************************
 * 
 * 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_XPopupMenu_idl__ 
#define __com_sun_star_awt_XPopupMenu_idl__ 
 
#ifndef __com_sun_star_awt_XMenu_idl__ 
#include <com/sun/star/awt/XMenu.idl> 
#endif 
 
#ifndef __com_sun_star_awt_Rectangle_idl__ 
#include <com/sun/star/awt/Rectangle.idl> 
#endif 
 
//============================================================================= 
 
 module com {  module sun {  module star {  module awt {  
 
 published interface XWindowPeer; 
 
//============================================================================= 
 
/** controls a popup menu.
 */
published interface XPopupMenu: XMenu
{ 
	//------------------------------------------------------------------------- 
	 
	/** inserts a separator at the specified position.
	 */
	[oneway] void insertSeparator( [in] short nPos ); 
 
	//------------------------------------------------------------------------- 
	 
	/** sets the menu default item.
	 */
	[oneway] void setDefaultItem( [in] short nItemId ); 
 
	//------------------------------------------------------------------------- 
	 
	/** returns the menu default item.
	 */
	short getDefaultItem(); 
 
	//------------------------------------------------------------------------- 
	 
	/** sets the state of the item to be checked or unchecked.
	 */
	[oneway] void checkItem( [in] short nItemId, 
			 [in] boolean bCheck ); 
 
	//------------------------------------------------------------------------- 
	 
	/** returns whether the item is checked or unchecked.
	 */
	boolean isItemChecked( [in] short nItemId ); 
 
	//------------------------------------------------------------------------- 
	 
	/** executes the popup menu and returns the selected item 
		or <code>0</code>, if cancelled.
	 */
	short execute( [in] XWindowPeer Parent, 
			 [in] Rectangle Area, 
			 [in] short Direction ); 
 
}; 
 
//============================================================================= 
 
}; }; }; };  
 
#endif 
