/**************************************************************
 * 
 * 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_ui_dialogs_XControlAccess_idl__
#define __com_sun_star_ui_dialogs_XControlAccess_idl__

#ifndef __com_sun_star_uno_XInterface_idl__
#include <com/sun/star/uno/XInterface.idl>
#endif

#ifndef __com_sun_star_lang_IllegalArgumentException_idl__
#include <com/sun/star/lang/IllegalArgumentException.idl>
#endif

//=============================================================================

module com { module sun { module star { module ui { module dialogs {

//=============================================================================
/** Generic control access interface. 

	<p>Use this interface to access user interface controls supported
        by the implementing service. The supported controls, control 
        properties and the appropriate values are documented in the 
        decription of the implementing service.</p>
    
    @see com::sun::star::ui::dialogs::FilePicker
    @see com::sun::star::ui::dialogs::FilePicker

    @since OpenOffice 1.1.2
*/
published interface XControlAccess: com::sun::star::uno::XInterface
{
//-------------------------------------------------------------------------
/** Change a control property.
    
    @param aControlName
        The name of the control. Common control names are for
        instance 'OkButton' or 'CancelButton'.
    
    @param aControlProperty
        The control property to manipulate. Common control properties
        are for instance 'Label' or 'State'.
    
    @param aValue
        A value appropriated for the property.
    
    @throws com::sun::star::lang::IllegalArgumentException
        when the control is not supported, the control property is invalid or
        the value fits not the control action.
*/
void setControlProperty( [in] string aControlName, [in] string aControlProperty, [in] any aValue )
    raises( com::sun::star::lang::IllegalArgumentException );

//-------------------------------------------------------------------------
/** Query for a control property.

    @param aControlName
       The name of the control. Common control names are for
        instance 'OkButton' or 'CancelButton'.
       
    @param aControlProperty
        The requested control property. Common control properties
        are for instance 'Label' or 'State'.
        
    @returns 
        the requested value.
        
    @throws com::sun::star::lang::IllegalArgumentException
        when the control is not supported or the control property is invalid.
*/
any getControlProperty( [in] string aControlName, [in] string aControlProperty )
    raises( com::sun::star::lang::IllegalArgumentException );
};

//=============================================================================

}; }; }; }; };

#endif

