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



// include -----------------------------------------------------------------
#include "optfltr.hrc"
#include <cuires.hrc>
// pragma ------------------------------------------------------------------

// RID_OFAPAGE_MSFILTEROPT -----------------------------------------------------
TabPage RID_OFAPAGE_MSFILTEROPT
{
	HelpID = "cui:TabPage:RID_OFAPAGE_MSFILTEROPT" ;
	OutputSize = TRUE ;
	Size = MAP_APPFONT ( 260, 185 ) ;
	SVLook = TRUE ;
	Hide = TRUE ;

	FixedLine GB_WORD
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "Microsoft Word 97/2000/XP" ;
	};
	CheckBox CB_WBAS_CODE
	{
		HelpID = "cui:CheckBox:RID_OFAPAGE_MSFILTEROPT:CB_WBAS_CODE" ;
		Pos = MAP_APPFONT ( 12, 14 ) ;
		Size = MAP_APPFONT ( 236, 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Load Basic ~code" ;
	};
	CheckBox CB_WBAS_STG
	{
		HelpID = "cui:CheckBox:RID_OFAPAGE_MSFILTEROPT:CB_WBAS_STG" ;
		Pos = MAP_APPFONT ( 12, 28 ) ;
		Size = MAP_APPFONT ( 236, 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Save ~original Basic code" ;
	};

	FixedLine GB_EXCEL
	{
		Pos = MAP_APPFONT ( 6, 44 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "Microsoft Excel 97/2000/XP" ;
	};
	CheckBox CB_EBAS_CODE
	{
		HelpID = "cui:CheckBox:RID_OFAPAGE_MSFILTEROPT:CB_EBAS_CODE" ;
		Pos = MAP_APPFONT ( 12, 55 ) ;
		Size = MAP_APPFONT ( 236, 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Lo~ad Basic code" ;
	};
	CheckBox CB_EBAS_EXECTBL
	{
		HelpID = "cui:CheckBox:RID_OFAPAGE_MSFILTEROPT:CB_EBAS_EXECTBL" ;
		Pos = MAP_APPFONT ( 22, 69 ) ;
		Size = MAP_APPFONT ( 236, 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "E~xecutable code" ;
	};
	CheckBox CB_EBAS_STG
	{
		HelpID = "cui:CheckBox:RID_OFAPAGE_MSFILTEROPT:CB_EBAS_STG" ;
		Pos = MAP_APPFONT ( 12, 83 ) ;
		Size = MAP_APPFONT ( 236, 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Sa~ve original Basic code" ;
	};

	FixedLine GB_PPOINT
	{
		Pos = MAP_APPFONT ( 6, 99 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "Microsoft PowerPoint 97/2000/XP" ;
	};
	CheckBox CB_PBAS_CODE
	{
		HelpID = "cui:CheckBox:RID_OFAPAGE_MSFILTEROPT:CB_PBAS_CODE" ;
		Pos = MAP_APPFONT ( 12, 110 ) ;
		Size = MAP_APPFONT ( 236, 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Load Ba~sic code" ;
	};
	CheckBox CB_PBAS_STG
	{
		HelpID = "cui:CheckBox:RID_OFAPAGE_MSFILTEROPT:CB_PBAS_STG" ;
		Pos = MAP_APPFONT ( 12, 124 ) ;
		Size = MAP_APPFONT ( 236, 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Sav~e original Basic code" ;
	};
};

// RID_OFAPAGE_MSFILTEROPT2 -----------------------------------------------------
TabPage RID_OFAPAGE_MSFILTEROPT2
{
	HelpID = "cui:TabPage:RID_OFAPAGE_MSFILTEROPT2" ;
	OutputSize = TRUE ;
	Size = MAP_APPFONT ( 260, 185 ) ;
	SVLook = TRUE ;
	Hide = TRUE ;

	Control CLB_SETTINGS
	{
		Pos = MAP_APPFONT ( 6, 6 ) ;
		Size = MAP_APPFONT ( 248, 147 ) ;
		Border = TRUE ;
		TabStop = TRUE ;
	};
	String ST_HEADER1
	{
		Text [ en-US ] = "[L]" ;
	};
	String ST_HEADER2
	{
		Text [ en-US ] = "[S]" ;
	};
	FixedText FT_HEADER1_EXPLANATION
	{
		Pos = MAP_APPFONT ( 6, 160 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "[L]: Load and convert the object" ;
	};
	FixedText FT_HEADER2_EXPLANATION
	{
		Pos = MAP_APPFONT ( 6, 171 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "[S]: Convert and save the object" ;
	};
	String ST_CHG_MATH
	{
		Text [ en-US ] = "MathType to %PRODUCTNAME Math or reverse" ;
	};
	String ST_CHG_WRITER
	{
		Text [ en-US ] = "Word to %PRODUCTNAME Writer or reverse" ;
	};
	String ST_CHG_CALC
	{
		Text [ en-US ] = "Excel to %PRODUCTNAME Calc or reverse" ;
	};
	String ST_CHG_IMPRESS
	{
		Text [ en-US ] = "PowerPoint to %PRODUCTNAME Impress or reverse" ;
	};
};

// ******************************************************************* EOF
