/**************************************************************
 * 
 * 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_report_XImageControl_idl__
#define __com_sun_star_report_XImageControl_idl__

#ifndef __com_sun_star_report_XReportControlModel_idl__
#include <com/sun/star/report/XReportControlModel.idl>
#endif
#ifndef __com_sun_star_form_XImageProducerSupplier_idl__
#include <com/sun/star/form/XImageProducerSupplier.idl>
#endif

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

 module com {  module sun {  module star {  module report {

//=============================================================================
published interface XImageControl
{
    interface XReportControlModel;

    /** supplies the caller with an <type scope="com::sun::star::awt">XImageProducer</type>.

        <p>Other components can register as <type scope="com::sun::star::awt">XImageConsumer</type>
        at this producer. Then they will be notified of any change in the image to be displayed.</p>

        <p>Whenever the <member scope="com::sun::star::awt">UnoControlImageControlModel::ImageURL</member>
        property is changed, the model loads the specified image, and sets it as image source
        at its <type scope="com::sun::star::awt">XImageProducer</type>. Then, all
        <type scope="com::sun::star::awt">XImageConsumer</type>s are notified and supplied with
        the binary data of the image.<br/>
        Usually, controls acting for an <type>ImageControl</type> model are consumers, and use the
        data stream to display the image</p>
     */
    interface com::sun::star::form::XImageProducerSupplier;

    /** specifies an URL to an image to use for the control.
     */
    [attribute,bound] string ImageURL;

    /** defines how to scale the image

        <p>If this property is present, it supersedes the <member>ScaleImage</member> property.</p>

        <p>The value of this property is one of the <type scope="com::sun::star::awt">ImageScaleMode</type> constants.</p>

        @since OOo 3.2
    */
    [attribute,bound] short ScaleMode
    {
        set raises (com::sun::star::lang::IllegalArgumentException);
    };

    /** Specifies that the IRI given in the data field should be preserved, otherwise the content will be inserted in the resulting report document.
        If the data field contains something different as string then this attribute will be ignored.
    */
    [attribute,bound] boolean PreserveIRI;
};

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

}; }; }; };

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

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