/**************************************************************
 * 
 * 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 TableSelection
[
	uuid = "BA338A41-064E-11d0-89CB-008029E4B0B1" ;
]
{
	SID_DELETE_PRINTAREA		[ ExecMethod = Execute; StateMethod = GetState; ]
	SID_OPENDLG_EDIT_PRINTAREA	[ ExecMethod = Execute; StateMethod = GetState; ]
	SID_CHANGE_PRINTAREA		[ ExecMethod = Execute; ]
	FID_DEL_MANUALBREAKS		[ ExecMethod = Execute; StateMethod = GetState; ]
	FID_RESET_PRINTZOOM			[ ExecMethod = Execute; StateMethod = GetState; ]
	SbxObject Cells SID_SC_CELLS
	(
		INT16	Column		SID_SC_CELLS,
		INT32	Row			FN_PARAM_1
	)
	[
	]
	UINT16 Index FID_TAB_INDEX
	[
		Readonly ;
	]
	FID_PROTECT_TABLE		[ ExecMethod = Execute; StateMethod = GetState; ]
	FID_PROTECT_DOC			[ ExecMethod = Execute; StateMethod = GetState; ]

	SID_AUTO_OUTLINE		[ ExecMethod = Execute; StateMethod = GetState; ]
	SID_OUTLINE_DELETEALL	[ ExecMethod = Execute; StateMethod = GetState; ]
	SID_FORMATPAGE			[ ExecMethod = Execute; StateMethod = GetState; ]
	SID_HFEDIT				[ ExecMethod = Execute; StateMethod = GetState; ]
	SID_DETECTIVE_DEL_ALL	[ ExecMethod = Execute; StateMethod = GetState; ]
	FID_TABLE_VISIBLE	[ ExecMethod = ExecuteTable; StateMethod = GetStateTable; ]
	FID_TAB_MOVE		[ ExecMethod = ExecuteTable; StateMethod = GetStateTable; ]
	FID_DELETE_TABLE	[ ExecMethod = ExecuteTable; StateMethod = GetStateTable; ]
	FID_TAB_RENAME		[ ExecMethod = ExecuteTable; StateMethod = GetStateTable; ]
	FID_TAB_RTL			[ ExecMethod = ExecuteTable; StateMethod = GetStateTable; ]
    FID_TAB_SET_TAB_BG_COLOR    [ ExecMethod = ExecuteTable; StateMethod = GetStateTable; ]

	SID_TABLE_ACTIVATE	[ ExecMethod = Execute; ]
}


 //============================================================================
interface TableDocument
[
	uuid = "BA338A42-064E-11d0-89CB-008029E4B0B1" ;
]
{
	SID_SBA_IMPORT	[ ExecMethod = Execute; ]
	SID_SC_CELLS	[ ExecMethod = Execute; ]
	SID_SC_CELLTEXT	[ ExecMethod = Execute; ]
	SID_SC_SETTEXT	[ ExecMethod = Execute; ]
	SID_SC_RANGE	[ ExecMethod = Execute; ]
	SID_SC_SELECTION	[ StateMethod = GetSbxState; ]
	SID_SC_ACTIVECELL	[ StateMethod = GetSbxState; ]
	SID_SC_ACTIVETAB	[ StateMethod = GetSbxState; ]
	SID_TABLES_GET		[ StateMethod = GetSbxState; ]
	SID_TABLES_COUNT	[ StateMethod = GetState; ]
	SID_PIVOT_GET		[ StateMethod = GetSbxState; ]
	SID_SC_ACTIVEOBJECT	[ StateMethod = GetDrawObjState; ]
	SID_ATTR_YEAR2000	[ StateMethod = GetState; ExecMethod = Execute; ]
	SbxObject OLEObjects
	[
		Readonly ;
		IsCollection ;
	]
	SID_CHART_SOURCE	[ ExecMethod = Execute; ]
	SID_CHART_ADDSOURCE	[ ExecMethod = Execute; ]
	FID_AUTO_CALC	[ ExecMethod = Execute; StateMethod = GetState; ]
	FID_RECALC		[ ExecMethod = Execute; StateMethod = GetState; ]
	FID_HARD_RECALC	[ ExecMethod = Execute;                         ]
	SID_UPDATETABLINKS		[ ExecMethod = Execute; ]
	SID_REIMPORT_AFTER_LOAD	[ ExecMethod = Execute; ]
	SID_AUTO_STYLE			[ ExecMethod = Execute; ]

	SID_GET_COLORTABLE		[ ExecMethod = Execute; ]

	FID_CHG_RECORD			[ ExecMethod = Execute; StateMethod = GetState; ]
	SID_DOCUMENT_COMPARE	[ ExecMethod = Execute; StateMethod = GetState; ]
	SID_DOCUMENT_MERGE		[ ExecMethod = Execute; StateMethod = GetState; ]
    SID_CHG_PROTECT         [ ExecMethod = Execute; StateMethod = GetState; ]

	SID_DELETE_SCENARIO		[ ExecMethod = Execute; ]
	SID_EDIT_SCENARIO		[ ExecMethod = Execute; ]
	SID_ATTR_CHAR_FONTLIST  [ StateMethod = GetState; ]
    SID_SHARE_DOC           [ ExecMethod = Execute; StateMethod = GetState; ]
}


 //============================================================================
shell ScDocShell
[
	uuid ( "3F543FA0-B6A6-101B-9961-04021C007002" )
]
{
		import TableDocument[Automation];
}
