/**************************************************************
 *
 * 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_excel_XStyle_idl__
#define __ooo_vba_excel_XStyle_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
#ifndef __ooo_vba_excel_XFormat_idl__
#include <ooo/vba/excel/XFormat.idl>
#endif

module ooo {  module vba { module excel {
interface XStyle
{
    interface XFormat;

    boolean BuiltIn()
        raises(com::sun::star::script::BasicErrorException);

    void setName([in] string Name)
        raises(com::sun::star::script::BasicErrorException);

    string getName()
        raises(com::sun::star::script::BasicErrorException);

    void setNameLocal([in] string NameLocal)
        raises(com::sun::star::script::BasicErrorException);

    string getNameLocal()
        raises(com::sun::star::script::BasicErrorException);

    void Delete()
        raises(com::sun::star::script::BasicErrorException);

    /**    void		setValue( [in] string Value ) raises ( com::sun::star::script::BasicErrorException );

     string		getValue( ) raises ( com::sun::star::script::BasicErrorException );

     void		setIncludeAlignment( [in] boolean IncludeAlignment ) raises ( com::sun::star::script::BasicErrorException );

     boolean		getIncludeAlignment( ) raises ( com::sun::star::script::BasicErrorException );

     void		setIncludeBorder( [in] boolean IncludeBorder ) raises ( com::sun::star::script::BasicErrorException );

     boolean		getIncludeBorder( ) raises ( com::sun::star::script::BasicErrorException );

     void		setIncludeFont( [in] boolean IncludeFont ) raises ( com::sun::star::script::BasicErrorException );

     boolean		getIncludeFont( ) raises ( com::sun::star::script::BasicErrorException );

     void		setIncludeNumber( [in] boolean IncludeNumber ) raises ( com::sun::star::script::BasicErrorException );

     boolean		getIncludeNumber( ) raises ( com::sun::star::script::BasicErrorException );

     void		setIncludePatterns( [in] boolean IncludePatterns ) raises ( com::sun::star::script::BasicErrorException );

     boolean		getIncludePatterns( ) raises ( com::sun::star::script::BasicErrorException );

     void		setIncludeProtection( [in] boolean IncludeProtection ) raises ( com::sun::star::script::BasicErrorException );

     boolean		getIncludeProtection( ) raises ( com::sun::star::script::BasicErrorException );
     */

};

}; }; };

#endif
