/**************************************************************
 * 
 * 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_form_XDatabaseParameterBroadcaster2_idl__
#define __com_sun_star_form_XDatabaseParameterBroadcaster2_idl__

#ifndef __com_sun_star_form_XDatabaseParameterBroadcaster_idl__
#include <com/sun/star/form/XDatabaseParameterBroadcaster.idl>
#endif

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

module com {  module sun {  module star {  module form {

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

/** provides the possibility of receiving an event for configuration of parameters.

    <p>Note that this interface provides exactly the same functionality as the
    <type>XDatabaseParameterBroadcaster</type> interface. It exists purely for compatibility
    with the <member scope="com::sun::star::script">XEventAttacher::attachSingleEventListener</member>:
    It expects the methods for adding and removing listeners to follow a certain naming scheme,
    respective to the name of the listener which is being added/removed.</p>

    @see XDatabaseParameterBroadcaster
    @see com::sun::star::script::XEventAttacher
*/
interface XDatabaseParameterBroadcaster2: XDatabaseParameterBroadcaster
{
	//-------------------------------------------------------------------------
	/** registers an XDatabaseParameterListener

        <p>This method behaves exactly as the <member>XDatabaseParameterBroadcaster::addParameterListener</member>
        method inherited from the base interface.</p>
	*/
	[oneway] void addDatabaseParameterListener( [in] com::sun::star::form::XDatabaseParameterListener aListener );

	//-------------------------------------------------------------------------

	/** revokes an XDatabaseParameterListener

        <p>This method behaves exactly as the <member>XDatabaseParameterBroadcaster::removeParameterListener</member>
        method inherited from the base interface.</p>
	*/
	[oneway] void removeDatabaseParameterListener( [in] com::sun::star::form::XDatabaseParameterListener aListener );

};

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

}; }; }; };

/*=============================================================================

=============================================================================*/
#endif
