/**************************************************************
 * 
 * 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.
 * 
 *************************************************************/



interface Documents
[
	uuid = "61753B60-1114-101D-B8ED-3273768855A7" ;
]
{
	SID_NEWDOC // ole(opt) api(final/play/rec)
	[
		ExecMethod = NewDocExec_Impl ;
	]
	SID_OPENDOC // ole(no) api(final/play/rec)
	[
		ExecMethod = OpenDocExec_Impl ;
	]
    SID_OPENHYPERLINK // ole(no) api(final/play/rec)
    [
        ExecMethod = OpenDocExec_Impl ;
    ]
	SID_OPENURL // ole(no) api(no)
	[
		ExecMethod = OpenDocExec_Impl ;
	]
	SID_OPENTEMPLATE // ole(no) api(final/play/rec)
	[
		ExecMethod = OpenDocExec_Impl ;
	]
	SID_CLOSEDOCS // ole(req) api(final/play/rec)
	[
		ExecMethod = MiscExec_Impl ;
		StateMethod = MiscState_Impl ;
	]
	SID_SAVEDOCS // ole(no) api(final/play/rec)
	[
		ExecMethod = MiscExec_Impl ;
		StateMethod = MiscState_Impl ;
	]
}

 //=========================================================================
interface Document
[
	Automation = FALSE ;
]
{
	SID_DOCTITLE // ole(opt) api(final/norec)
	[
		ExecMethod = ExecProps_Impl ;
		StateMethod = StateProps_Impl ;
	]
	SID_DOCPATH // ole(req) api(final/play/norec)
	[
		ExecMethod = ExecProps_Impl ;
		StateMethod = StateProps_Impl ;
	]
	SID_DOCFULLNAME // ole(req) api(final/play/norec)
	[
		ExecMethod = ExecProps_Impl ;
		StateMethod = StateProps_Impl ;
	]
	SID_CLOSEDOC // ole(req) api(final/play/rec)
	[
		ExecMethod = ExecFile_Impl ;
		StateMethod = GetState_Impl ;
	]
	SID_CLOSING // ole(no) api(final/play/norec)
	[
		StateMethod = StateProps_Impl ;
	]
	SID_ACTIVATE // ole(no) api(final/play/norec)
	[
		ExecMethod = ExecView_Impl ;
		StateMethod = StateView_Impl ;
	]
}

interface OfficeDocument : Document
[
	Automation = FALSE
]
{
	SID_DOCINFO_AUTHOR // ole(opt) api(todo)
	[
		ExecMethod = ExecProps_Impl ;
		StateMethod = StateProps_Impl ;
	]
	SID_DOCINFO_COMMENTS // ole(opt) api(todo)
	[
		ExecMethod = ExecProps_Impl ;
		StateMethod = StateProps_Impl ;
	]
	SID_DOCINFO_KEYWORDS // ole(opt) api(todo)
	[
		ExecMethod = ExecProps_Impl ;
		StateMethod = StateProps_Impl ;
	]
	SID_DOC_READONLY // ole(opt) api(final/play/norec)
	[
		ExecMethod = ExecProps_Impl ;
		StateMethod = StateProps_Impl ;
	]
	SID_DOC_SAVED // ole(req) api(final/play/norec)
	[
		ExecMethod = ExecProps_Impl ;
		StateMethod = StateProps_Impl ;
	]
	SID_DOC_MODIFIED // ole(no) api(final/noplay/norec)
	[
		StateMethod = GetState_Impl ;
	]
	SID_MODIFIED // ole(no) api(final/noplay/norec)
	[
		ExecMethod = ExecProps_Impl ;
		StateMethod = GetState_Impl ;
	]
	SID_SAVEDOC // ole(req) api(final/play/rec)
	[
		ExecMethod = ExecFile_Impl ;
		StateMethod = GetState_Impl ;
	]
	SID_SAVEASDOC // ole(req) api(final/play/rec)
	[
		ExecMethod = ExecFile_Impl ;
		StateMethod = GetState_Impl ;
	]
	SID_DOCTEMPLATE // ole(no) api(final/play/rec)
	[
		ExecMethod = ExecFile_Impl ;
		StateMethod = GetState_Impl ;
	]
	SID_PRINTDOC //ole(req) api(final/play/norec)
	[
		ExecMethod = PrintExec_Impl ;
		StateMethod = NoState ;
	]
	SID_PRINTOUT // ole(opt) api(final/play/norec)
	[
		ExecMethod = PrintExec_Impl ;
		StateMethod = PrintState_Impl ;
	]
	SID_DOC_LOADING // ole(no) api(final/play/norec)
	[
		StateMethod = StateProps_Impl ;
	]
	SID_IMG_LOADING // ole(no) api(final/play/norec)
	[
		StateMethod = StateProps_Impl ;
	]
	SID_VERSION
	[
        ExecMethod = ExecFile_Impl;
        StateMethod = GetState_Impl;
	]
    SID_SIGNATURE
    [
        ExecMethod = ExecFile_Impl;
        StateMethod = GetState_Impl;
    ]
    SID_MACRO_SIGNATURE
    [
        ExecMethod = ExecFile_Impl;
        StateMethod = GetState_Impl;
    ]
}

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

shell SfxObjectShell
{
    import OfficeDocument [Automation];

	SID_DOCINFO // ole(no) api(final/play)
	[
		ExecMethod = ExecFile_Impl ;
		StateMethod = GetState_Impl ;
	]
	SID_DOCINFO_TITLE // ole(no) api(final/play/rec)
	[
		StateMethod = GetState_Impl ;
	]
	SID_EXPORTDOC
	[
		ExecMethod = ExecFile_Impl ;
		StateMethod = GetState_Impl ;
	]
	SID_EXPORTDOCASPDF
	[
		ExecMethod = ExecFile_Impl ;
		StateMethod = GetState_Impl ;
	]
	SID_DIRECTEXPORTDOCASPDF
	[
		ExecMethod = ExecFile_Impl ;
		StateMethod = GetState_Impl ;
	]
    SID_SAVE_VERSION_ON_CLOSE
	[
        ExecMethod = ExecFile_Impl ;
        StateMethod = GetState_Impl ;
	]
	SID_SIGNATURE
	[
        ExecMethod = ExecFile_Impl;
        StateMethod = GetState_Impl;
	]
    SID_MACRO_SIGNATURE
    [
            ExecMethod = ExecFile_Impl;
            StateMethod = GetState_Impl;
    ]
} ;
