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

#ifndef  __com_sun_star_script_BasicErrorException_idl__
#include <com/sun/star/script/BasicErrorException.idl>
#endif

#ifndef  __ooo_vba_XHelperInterface_idl__
#include <ooo/vba/XHelperInterface.idl>
#endif
module ooo { module vba { module word {

interface XRange;

interface XTable 
{
    interface ::ooo::vba::XHelperInterface;
    [attribute, readonly ] string Name; // for debug only

    XRange Range() raises (com::sun::star::script::BasicErrorException);

    /**
     select the table
     */
    void Select()
        raises (com::sun::star::script::BasicErrorException);

    /**
     delete the table
     */
    void Delete()
        raises (com::sun::star::script::BasicErrorException);

    /**
     convert the table to text
     @param Separator the separator used for the text where cell separation was
     @return XRange a range containing the text
     @throw BasicErrorException when the conversion cannot be done
     */
/*
    XRange ConvertToText([in] any Separator, [in] any NestedTables)
        raises(com::sun::star::script::BasicErrorException);
*/
    any Borders( [in] any Index );

};

}; }; };

#endif

