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

#include <com/sun/star/uno/XInterface.idl>

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

module ooo {  module vba {

/** The VBA equivalent to the UNO interface
    <type scope="com::sun::star::ui::dialogs">XExecutableDialog</type>.
 */
interface XExecutableDialog
{
    /** Executes the dialog.

        @return
            The return value is dependent on the calling context. Usually, on
            cancelling the dialog the implementation will return <FALSE/>,
            otherwise the return value will contain the expected result.
     */
    any execute();
};

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

}; };

#endif
