/**************************************************************
 * 
 * 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_UnoControlModel_idl__ 
#define __com_sun_star_awt_UnoControlModel_idl__ 

#ifndef __com_sun_star_awt_UnoControlDialogElement_idl__
#include <com/sun/star/awt/UnoControlDialogElement.idl>
#endif

#ifndef __com_sun_star_awt_XControlModel_idl__ 
#include <com/sun/star/awt/XControlModel.idl> 
#endif 
 
#ifndef __com_sun_star_lang_XComponent_idl__ 
#include <com/sun/star/lang/XComponent.idl> 
#endif 
 
#ifndef __com_sun_star_beans_XPropertySet_idl__ 
#include <com/sun/star/beans/XPropertySet.idl> 
#endif 
 
#ifndef __com_sun_star_beans_XMultiPropertySet_idl__ 
#include <com/sun/star/beans/XMultiPropertySet.idl> 
#endif 
 
#ifndef __com_sun_star_io_XPersistObject_idl__ 
#include <com/sun/star/io/XPersistObject.idl> 
#endif 
 
#ifndef __com_sun_star_util_XCloneable_idl__ 
#include <com/sun/star/util/XCloneable.idl>
#endif


//============================================================================= 
 
 module com {  module sun {  module star {  module awt {  
 
//============================================================================= 
 
/** specifies the standard model of an <type>UnoControl</type> 
	in the <em>Smalltalk model view controller design</em>. 
		
	<p>The interfaces <type scope="com::sun::star::beans">XPropertySet</type> 
	and <type scope="com::sun::star::beans">XMultiPropertySet</type> need 
	access to the model data from the embedding environment. The control 
	and the model can specify additional interfaces to exchange data or 
	export more functionality from the model.</p>
 */
published service UnoControlModel
{ 
	/** This service is present when the control model is embedded in an
        <type>UnoControlDialogModel</type>.    
     */
	[optional] service com::sun::star::awt::UnoControlDialogElement;

	interface com::sun::star::awt::XControlModel; 

	interface com::sun::star::lang::XComponent; 

	interface com::sun::star::beans::XPropertySet; 

	interface com::sun::star::beans::XMultiPropertySet; 

	interface com::sun::star::io::XPersistObject;

    interface com::sun::star::util::XCloneable;
 
	//------------------------------------------------------------------------- 

	/** specifies the service name of the default control for this model.
	 */
	[property] string DefaultControl;
    
}; 
 
//============================================================================= 
 
}; }; }; };  
 
#endif 
