/**************************************************************
 * 
 * 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 BaseTextGraphic
[
	Automation = FALSE;
]
{
	FN_FLIP_VERT_GRAFIC  // status(final|play)
	[
		ExecMethod = ExecAttr ;
		StateMethod = GetAttrState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

	FN_FLIP_HORZ_GRAFIC  // status(final|play)
	[
		ExecMethod = ExecAttr ;
		StateMethod = GetAttrState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

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


    FN_SAVE_GRAPHIC // status(final|play)
    [
        ExecMethod = Execute ;
        StateMethod = GetAttrState ;
    ]

	SID_INSERT_GRAPHIC // zeigt auf FN_FORMAT_GRAFIC_DLG
	[
		ExecMethod = Execute ;
		StateMethod = GetAttrState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	
	SID_TWAIN_TRANSFER
	[
		ExecMethod = Execute ;
		StateMethod = GetAttrState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	
	FN_GRAPHIC_MIRROR_ON_EVEN_PAGES // status(final|play|rec)
	[
		ExecMethod = Execute ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

	SID_ATTR_GRAF_LUMINANCE	// status(final|play|rec)
	[
		ExecMethod = ExecAttr ;
		StateMethod = GetAttrState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	SID_ATTR_GRAF_CONTRAST	// status(final|play|rec)
	[
		ExecMethod = ExecAttr ;
		StateMethod = GetAttrState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	SID_ATTR_GRAF_RED	// status(final|play|rec)
	[
		ExecMethod = ExecAttr ;
		StateMethod = GetAttrState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	SID_ATTR_GRAF_GREEN	// status(final|play|rec)
	[
		ExecMethod = ExecAttr ;
		StateMethod = GetAttrState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	SID_ATTR_GRAF_BLUE	// status(final|play|rec)
	[
		ExecMethod = ExecAttr ;
		StateMethod = GetAttrState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	SID_ATTR_GRAF_GAMMA	// status(final|play|rec)
	[
		ExecMethod = ExecAttr ;
		StateMethod = GetAttrState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	SID_ATTR_GRAF_TRANSPARENCE	// status(final|play|rec)
	[
		ExecMethod = ExecAttr ;
		StateMethod = GetAttrState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	SID_ATTR_GRAF_INVERT	// status(final|play|rec)
	[
		ExecMethod = ExecAttr ;
		StateMethod = GetAttrState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	SID_ATTR_GRAF_MODE	// status(final|play|rec)
	[
		ExecMethod = ExecAttr ;
		StateMethod = GetAttrState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	SID_GRFFILTER	// status(final|play|rec)
	[
		ExecMethod = ExecAttr ;
		StateMethod = GetAttrState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]

	SID_GRFFILTER_INVERT	// status(final|play|rec)
	[
		ExecMethod = ExecAttr ;
		StateMethod = GetAttrState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	SID_GRFFILTER_SMOOTH	// status(final|play|rec)
	[
		ExecMethod = ExecAttr ;
		StateMethod = GetAttrState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	SID_GRFFILTER_SHARPEN	// status(final|play|rec)
	[
		ExecMethod = ExecAttr ;
		StateMethod = GetAttrState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	SID_GRFFILTER_REMOVENOISE	// status(final|play|rec)
	[
		ExecMethod = ExecAttr ;
		StateMethod = GetAttrState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	SID_GRFFILTER_SOBEL	// status(final|play|rec)
	[
		ExecMethod = ExecAttr ;
		StateMethod = GetAttrState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	SID_GRFFILTER_MOSAIC	// status(final|play|rec)
	[
		ExecMethod = ExecAttr ;
		StateMethod = GetAttrState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	SID_GRFFILTER_EMBOSS	// status(final|play|rec)
	[
		ExecMethod = ExecAttr ;
		StateMethod = GetAttrState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	SID_GRFFILTER_POSTER	// status(final|play|rec)
	[
		ExecMethod = ExecAttr ;
		StateMethod = GetAttrState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	SID_GRFFILTER_POPART	// status(final|play|rec)
	[
		ExecMethod = ExecAttr ;
		StateMethod = GetAttrState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	SID_GRFFILTER_SEPIA	// status(final|play|rec)
	[
		ExecMethod = ExecAttr ;
		StateMethod = GetAttrState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
	SID_GRFFILTER_SOLARIZE	// status(final|play|rec)
	[
		ExecMethod = ExecAttr ;
		StateMethod = GetAttrState ;
		DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
	]
        SID_COLOR_SETTINGS       // status(final|play|rec)
        [
                ExecMethod = ExecAttr ;
                StateMethod = GetAttrState ;
                DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
        ]

}

