/**************************************************************
 * 
 * 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_table_CellValueBinding_idl__
#define __com_sun_star_table_CellValueBinding_idl__

#ifndef __com_sun_star_form_binding_ValueBinding_idl__
#include <com/sun/star/form/binding/ValueBinding.idl>
#endif
#ifndef __com_sun_star_table_CellAddress_idl__
#include <com/sun/star/table/CellAddress.idl>
#endif
#ifndef __com_sun_star_lang_XInitialization_idl__
#include <com/sun/star/lang/XInitialization.idl>
#endif

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

module com {  module sun {  module star {  module table {

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

/** defines the binding to a single cell in a table document

    <p>Read/Write access to the cell represented by this component is supported,
    as well as active broadcasting of value changes.</p>

    <p>The binding supports exchanging <em>double</em> values, <em>string</em>
    values.</p>

    <p>The component cannot be instantiated at a global service factory, instead
    it's usually provided by a document instance.</p>

    @see com::sun::star::document::OfficeDocument
*/
service CellValueBinding
{
    /** ensures the basic functionality for binding to a value
    */
    service com::sun::star::form::binding::ValueBinding;

    /** specifies the cell within a document whose value is reflected
        by the binding.
    */
    [property, bound, readonly] com::sun::star::table::CellAddress  BoundCell;

    /** allows notifications of changes in the content of the underlying cell.

        <p>Note that this interface is already optionally allowed in the
        underlying service (<type scope="com::sun::star::form::binding">ValueBinding</type>),
        but it loses it's optionality here.</p>
    */
    interface com::sun::star::util::XModifyBroadcaster;

    /** allows setting initial, creation-time properties of the component

        <p>This interface is used to initialize the component after creation. It has
        to be used exactly once in the life time of the component, every second call
        to <member scope"com::sun::star::lang">XInitialization::initialize</member>
        will throw an exception.</p>

        <p>The arguments passed to the <member scope"com::sun::star::lang">XInitialization::initialize</member>
        method must be instances of <type scope="com::sun::star::beans">NamedValue</type>, where
        the <member scope"com::sun::star::beans">NamedValue::Name</member> denotes the type of information
        to initialize, and the <member scope"com::sun::star::beans">NamedValue::Value</member>
        the inital value.</p>

        <p>The following aspects of the components can be initialized:<br/>
            <ul><li><b>BoundCell</b><br/>
                specifies the address of the cell to bind this instance to. Must be a
                <type scope="com::sun::star::table">CellAddress</type> instance.</li>
            </ul>
        </p>
    */
    interface com::sun::star::lang::XInitialization;
};

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

}; }; }; };

#endif
