/**************************************************************
 * 
 * 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 Text : BaseText
[
	uuid = "1BD56200-111A-101D-9757-6E74207A7520"
]
{
	FN_INSERT_FRAME_INTERACT // status()
	[
		ExecMethod = ExecInsert ;
		StateMethod = StateInsert ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
		Cachable ;
	]
	 // hier sollen die Slots eingefuegt werden, die vom StarWriter/WEB
	 // nicht unterstuetzt werden

	import TextSelection;

	/*-----------------24.01.97 08.13-------------------
	Spezielle Feldbefehle
--------------------------------------------------*/

	FN_INSERT_FLD_TOPIC
	[
		ExecMethod = ExecField ;
		StateMethod = StateField ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
		ReadOnlyDoc = FALSE ;
	]
	/*-----------------24.01.97 08.13-------------------
	Ende Spezielle Feldbefehle
--------------------------------------------------*/

	/*-----------------24.01.97 07.36-------------------
	Verzeichnisse
--------------------------------------------------*/

	/*
enum TOXTypes
{
	TOX_INDEX,
	TOX_USER,
	TOX_CONTENT
};

 */

	FN_INSERT_IDX_ENTRY_DLG // status(final|play)
	[
		ExecMethod = ExecIdx ;
		StateMethod = GetIdxState ;
	]

	FN_INSERT_AUTH_ENTRY_DLG
	[
		ExecMethod = ExecIdx ;
		StateMethod = GetIdxState ;
	]
	FN_EDIT_AUTH_ENTRY_DLG
	[
		ExecMethod = ExecIdx ;
		StateMethod = GetIdxState ;
	]
	FN_EDIT_IDX_ENTRY_DLG // status(final|play)
	[
		ExecMethod = ExecIdx ;
		StateMethod = GetIdxState ;
	]
	FN_INSERT_MULTI_TOX // status(final|play)
	[
		ExecMethod = ExecIdx ;
		StateMethod = GetIdxState ;
	]
	FN_REMOVE_CUR_TOX
	[
		ExecMethod = ExecIdx ;
		StateMethod = GetIdxState ;
	]
	FN_IDX_MARK_TO_IDX // status(final|play)
	[
		ExecMethod = ExecIdx ;
	]

	/*-----------------24.01.97 08.01-------------------
	Absatzeinstellungen
--------------------------------------------------*/

	/*-----------------24.01.97 08.01-------------------
	Ende Absatzeinstellungen
--------------------------------------------------*/

}

shell SwTextShell : SwBaseShell
{
	import Text[Automation];
}

