/**************************************************************
 * 
 * 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 BaseTextFrame
[
	Automation = FALSE;
]
{
	FN_FRAME_TO_ANCHOR  // status()
	[
		/*OS: Datentypen unvertraeglich ?? */
		ExecMethod = Execute ;
		StateMethod = NoState ;
	]

	FN_FRAME_ALIGN_VERT_CENTER // status(play|final)
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

	FN_FRAME_ALIGN_VERT_BOTTOM  // status(play|final)
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

	FN_FRAME_ALIGN_VERT_TOP   // status(play|final)
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

	FN_FRAME_ALIGN_VERT_ROW_CENTER  // status(play|final)
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

	FN_FRAME_ALIGN_VERT_ROW_BOTTOM // status(play|final)
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

	FN_FRAME_ALIGN_VERT_ROW_TOP  // status(play|final)
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

	FN_FRAME_ALIGN_VERT_CHAR_CENTER // status(play|final)
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

	FN_FRAME_ALIGN_VERT_CHAR_BOTTOM  // status(play|final)
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

	FN_FRAME_ALIGN_VERT_CHAR_TOP  // status(play|final)
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

	FN_FRAME_ALIGN_HORZ_CENTER  // status(play|final)
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

	FN_FRAME_ALIGN_HORZ_RIGHT // status(play|final)
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

	FN_FRAME_ALIGN_HORZ_LEFT // status(play|final)
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]


	SID_FRAME_TO_TOP // status(final|play)
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

	SID_FRAME_TO_BOTTOM  // status(final|play)
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]


	FN_FRAME_UP  // status(final|play)
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

	FN_FRAME_DOWN // status(final|play)
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

	SID_ATTR_ULSPACE // status(final|play)
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

	SID_ATTR_LRSPACE // status(final|play)
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
		GroupId = GID_FRAME;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

	FN_FORMAT_FRAME_DLG   // status(final|play)
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

	SID_FRAME_LINESTYLE // status()
	[
		ExecMethod = ExecFrameStyle ;
		StateMethod = GetLineStyleState ;
		Export = FALSE; //#44439#
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

	SID_FRAME_LINECOLOR // status(final|play)
	[
		ExecMethod = ExecFrameStyle ;
		StateMethod = GetLineStyleState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
    SID_OBJECT_ALIGN_CENTER  // status(play|final)
    [
        ExecMethod = Execute ;
        StateMethod = GetState ;
        DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
    ]

    SID_OBJECT_ALIGN_RIGHT // status(play|final)
    [
        ExecMethod = Execute ;
        StateMethod = GetState ;
        DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
    ]

    SID_OBJECT_ALIGN_LEFT // status(play|final)
    [
        ExecMethod = Execute ;
        StateMethod = GetState ;
        DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
    ]

    SID_OBJECT_ALIGN_UP // status(play|final)
    [
        ExecMethod = Execute ;
        StateMethod = GetState ;
        DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
    ]

    SID_OBJECT_ALIGN_MIDDLE  // status(play|final)
    [
        ExecMethod = Execute ;
        StateMethod = GetState ;
        DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
    ]

    SID_OBJECT_ALIGN_DOWN   // status(play|final)
    [
        ExecMethod = Execute ;
        StateMethod = GetState ;
        DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
    ]

    FN_FORMAT_FOOTNOTE_DLG // status()
	[
		ExecMethod = Execute;
	]

    SID_OPEN_XML_FILTERSETTINGS // ole : no, status : ?
    [
        ExecMethod = Execute ;
    ]

    FN_WORDCOUNT_DIALOG
    [
        ExecMethod = Execute;
    ]

   	FN_NUMBERING_OUTLINE_DLG   // status(final|play)
	[
		ExecMethod = Execute ;
	]
        // --> OD 2009-07-08 #i73249#
        FN_TITLE_DESCRIPTION_SHAPE
        [
                ExecMethod = Execute ;
                StateMethod = GetState ;
                DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
        ]
        // <--


    /*****************************************************

 Abfragefunktionen fuer ImageMaps

 ****************************************************/

//
// Slots ohne Export

	FN_INSERT_FRAME
	[
		ExecMethod = Execute ;
		StateMethod = StateInsert ;
		Export = False;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

	SID_ATTR_BORDER // status()
	[
		ExecMethod = ExecFrameStyle ;
		StateMethod = GetLineStyleState ;
		GroupId = GID_FRAME;
		Export = False;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

	SID_HYPERLINK_SETLINK  // status()
	[
		ExecMethod = Execute ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

	SID_HYPERLINK_GETLINK  // status()
	[
		StateMethod = GetState ;
	]

	FN_FRAME_MIRROR_ON_EVEN_PAGES // status(final|play|rec)
	[
		ExecMethod = Execute ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
}


