/**************************************************************
 *
 * 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 "opthtml.hrc"
#include <cuires.hrc>

// RID_OFAPAGE_HTMLOPT -----------------------------------------------------
TabPage RID_OFAPAGE_HTMLOPT
{
	HelpID = "cui:TabPage:RID_OFAPAGE_HTMLOPT" ;
	OutputSize = TRUE ;
	Size = MAP_APPFONT ( 260, 185 ) ;
	SVLook = TRUE ;
	Hide = TRUE ;
	FixedText FT_SIZE1
	{
		Pos = MAP_APPFONT ( 12, 16 ) ;
		Size = MAP_APPFONT ( 30, 8 ) ;
		Text [ en-US ] = "Size ~1" ;
	};
	NumericField NF_SIZE1
	{
		HelpID = "cui:NumericField:RID_OFAPAGE_HTMLOPT:NF_SIZE1" ;
		Pos = MAP_APPFONT ( 45, 14 ) ;
		Size = MAP_APPFONT ( 30, 12 ) ;
		Border = TRUE ;
		TabStop = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 1 ;
		Maximum = 50 ;
		Value = 1 ;
		First = 1 ;
		Last = 50 ;
		SpinSize = 1 ;
	};
	FixedText FT_SIZE2
	{
		Pos = MAP_APPFONT ( 12, 32 ) ;
		Size = MAP_APPFONT ( 30, 8 ) ;
		Text [ en-US ] = "Size ~2" ;
	};
	NumericField NF_SIZE2
	{
		HelpID = "cui:NumericField:RID_OFAPAGE_HTMLOPT:NF_SIZE2" ;
		Pos = MAP_APPFONT ( 45, 30 ) ;
		Size = MAP_APPFONT ( 30, 12 ) ;
		Border = TRUE ;
		TabStop = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 1 ;
		Maximum = 50 ;
		Value = 1 ;
		First = 1 ;
		Last = 50 ;
		SpinSize = 1 ;
	};
	FixedText FT_SIZE3
	{
		Pos = MAP_APPFONT ( 12, 48 ) ;
		Size = MAP_APPFONT ( 30, 8 ) ;
		Text [ en-US ] = "Size ~3" ;
	};
	NumericField NF_SIZE3
	{
		HelpID = "cui:NumericField:RID_OFAPAGE_HTMLOPT:NF_SIZE3" ;
		Pos = MAP_APPFONT ( 45, 46 ) ;
		Size = MAP_APPFONT ( 30, 12 ) ;
		Border = TRUE ;
		TabStop = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 1 ;
		Maximum = 50 ;
		Value = 1 ;
		First = 1 ;
		Last = 50 ;
		SpinSize = 1 ;
	};
	FixedText FT_SIZE4
	{
		Pos = MAP_APPFONT ( 12, 64 ) ;
		Size = MAP_APPFONT ( 30, 8 ) ;
		Text [ en-US ] = "Size ~4" ;
	};
	NumericField NF_SIZE4
	{
		HelpID = "cui:NumericField:RID_OFAPAGE_HTMLOPT:NF_SIZE4" ;
		Pos = MAP_APPFONT ( 45, 62 ) ;
		Size = MAP_APPFONT ( 30, 12 ) ;
		Border = TRUE ;
		TabStop = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 1 ;
		Maximum = 50 ;
		Value = 1 ;
		First = 1 ;
		Last = 50 ;
		SpinSize = 1 ;
	};
	FixedText FT_SIZE5
	{
		Pos = MAP_APPFONT ( 12, 80 ) ;
		Size = MAP_APPFONT ( 30, 8 ) ;
		Text [ en-US ] = "Size ~5" ;
	};
	NumericField NF_SIZE5
	{
		HelpID = "cui:NumericField:RID_OFAPAGE_HTMLOPT:NF_SIZE5" ;
		Pos = MAP_APPFONT ( 45, 78 ) ;
		Size = MAP_APPFONT ( 30, 12 ) ;
		Border = TRUE ;
		TabStop = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 1 ;
		Maximum = 50 ;
		Value = 1 ;
		First = 1 ;
		Last = 50 ;
		SpinSize = 1 ;
	};
	FixedText FT_SIZE6
	{
		Pos = MAP_APPFONT ( 12, 96 ) ;
		Size = MAP_APPFONT ( 30, 8 ) ;
		Text [ en-US ] = "Size ~6" ;
	};
	NumericField NF_SIZE6
	{
		HelpID = "cui:NumericField:RID_OFAPAGE_HTMLOPT:NF_SIZE6" ;
		Pos = MAP_APPFONT ( 45, 94 ) ;
		Size = MAP_APPFONT ( 30, 12 ) ;
		Border = TRUE ;
		TabStop = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 1 ;
		Maximum = 50 ;
		Value = 1 ;
		First = 1 ;
		Last = 50 ;
		SpinSize = 1 ;
	};
	FixedText FT_SIZE7
	{
		Pos = MAP_APPFONT ( 12, 112 ) ;
		Size = MAP_APPFONT ( 30, 8 ) ;
		Text [ en-US ] = "Size ~7" ;
	};
	NumericField NF_SIZE7
	{
		HelpID = "cui:NumericField:RID_OFAPAGE_HTMLOPT:NF_SIZE7" ;
		Pos = MAP_APPFONT ( 45, 110 ) ;
		Size = MAP_APPFONT ( 30, 12 ) ;
		Border = TRUE ;
		TabStop = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 1 ;
		Maximum = 50 ;
		Value = 1 ;
		First = 1 ;
		Last = 50 ;
		SpinSize = 1 ;
	};
	FixedLine GB_FONTSIZE
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 75, 8 ) ;
		Text [ en-US ] = "Font sizes" ;
	};
	FixedLine GB_IMPORT
	{
		Pos = MAP_APPFONT ( 87, 3 ) ;
		Size = MAP_APPFONT ( 167, 8 ) ;
		Text [ en-US ] = "Import" ;
	};
	CheckBox CB_NUMBERS_ENGLISH_US
	{
		HelpID = "cui:CheckBox:RID_OFAPAGE_HTMLOPT:CB_NUMBERS_ENGLISH_US" ;
		Pos = MAP_APPFONT ( 93, 14 ) ;
		Size = MAP_APPFONT ( 161, 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "~Use '%ENGLISHUSLOCALE' locale for numbers" ;
	};
	CheckBox CB_UNKNOWN_TAGS
	{
		HelpID = "cui:CheckBox:RID_OFAPAGE_HTMLOPT:CB_UNKNOWN_TAGS" ;
		Pos = MAP_APPFONT ( 93, 28 ) ;
		Size = MAP_APPFONT ( 155, 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "~Import unknown HTML tags as fields" ;
	};
	CheckBox CB_IGNORE_FONTNAMES
	{
		HelpID = "cui:CheckBox:RID_OFAPAGE_HTMLOPT:CB_IGNORE_FONTNAMES" ;
		Pos = MAP_APPFONT ( 93, 42 ) ;
		Size = MAP_APPFONT ( 155, 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Ignore ~font settings" ;
	};
	FixedLine GB_EXPORT
	{
		Pos = MAP_APPFONT ( 87, 58 ) ;
		Size = MAP_APPFONT ( 167, 8 ) ;
		Text [ en-US ] = "Export" ;
	};
	ListBox LB_EXPORT
	{
		HelpID = "cui:ListBox:RID_OFAPAGE_HTMLOPT:LB_EXPORT" ;
		Pos = MAP_APPFONT ( 93, 69 ) ;
		Size = MAP_APPFONT ( 155, 50 ) ;
		Border = TRUE ;
		DropDown = TRUE ;
		StringList =
		{
			< "HTML 3.2" ;						> ;
			< "Microsoft Internet Explorer" ;	> ;
			< "Netscape Navigator" ;			> ;
			< "%PRODUCTNAME Writer" ;			> ;
		};
	};
	CheckBox CB_STARBASIC
	{
		HelpID = "cui:CheckBox:RID_OFAPAGE_HTMLOPT:CB_STARBASIC" ;
		Pos = MAP_APPFONT ( 93, 88 ) ;
		Size = MAP_APPFONT ( 155, 10 ) ;
		Text = "%PRODUCTNAME ~Basic" ;
	};
	CheckBox CB_STARBASIC_WARNING
	{
		HelpID = "cui:CheckBox:RID_OFAPAGE_HTMLOPT:CB_STARBASIC_WARNING" ;
		Pos = MAP_APPFONT ( 99, 102 ) ;
		Size = MAP_APPFONT ( 149, 10 ) ;
		Text [ en-US ] = "Display ~warning" ;
	};
	CheckBox CB_PRINT_EXTENSION
	{
		HelpID = "cui:CheckBox:RID_OFAPAGE_HTMLOPT:CB_PRINT_EXTENSION" ;
		Pos = MAP_APPFONT ( 93, 116 ) ;
		Size = MAP_APPFONT ( 155, 10 ) ;
		Text [ en-US ] = "~Print layout" ;
	};
	CheckBox CB_LOCAL_GRF
	{
		HelpID = "cui:CheckBox:RID_OFAPAGE_HTMLOPT:CB_LOCAL_GRF" ;
		Pos = MAP_APPFONT ( 93, 130 ) ;
		Size = MAP_APPFONT ( 155, 10 ) ;
		Text [ en-US ] = "~Copy local graphics to Internet" ;
	};

	FixedText FT_CHARSET
	{
		Pos = MAP_APPFONT ( 93, 144 ) ;
		Size = MAP_APPFONT ( 65, 8 ) ;
		Text [ en-US ] = "Character set" ;
	};
	ListBox LB_CHARSET
	{
		HelpID = "cui:ListBox:RID_OFAPAGE_HTMLOPT:LB_CHARSET" ;
		Pos = MAP_APPFONT ( 162, 143 ) ;
		Size = MAP_APPFONT ( 86, 61 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		Sort = TRUE ;
	};
};

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