/**************************************************************
 *
 * 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 "table.hrc"
#include "convert.hrc"
#include "cmdid.h"
#include "helpid.h"
ModalDialog DLG_CONV_TEXT_TABLE
{
	HelpID = CMD_FN_CONVERT_TEXT_TABLE ;
	OUTPUTSIZE = TRUE ;
	Size = MAP_APPFONT ( 203, 169 ) ;
	Text [ en-US ] = "Convert Table to Text" ;
	MOVEABLE = TRUE ;
	SVLOOK = TRUE ;
	RadioButton CB_TAB
	{
		HelpID = "sw:RadioButton:DLG_CONV_TEXT_TABLE:CB_TAB" ;
		Pos = MAP_APPFONT ( 12, 17 ) ;
		Size = MAP_APPFONT ( 60, 10 ) ;
		Text [ en-US ] = "~Tabs" ;
		TABSTOP = TRUE ;
		Group = TRUE ;
		Check = TRUE ;
	};
	RadioButton CB_SEMI
	{
		HelpID = "sw:RadioButton:DLG_CONV_TEXT_TABLE:CB_SEMI" ;
		Pos = MAP_APPFONT ( 75, 17 ) ;
		Size = MAP_APPFONT ( 60, 10 ) ;
		Text [ en-US ] = "~Semicolons" ;
		TABSTOP = TRUE ;
	};
	RadioButton CB_PARA
	{
		HelpID = "sw:RadioButton:DLG_CONV_TEXT_TABLE:CB_PARA" ;
		Pos = MAP_APPFONT ( 12, 33 ) ;
		Size = MAP_APPFONT ( 60, 10 ) ;
		Text [ en-US ] = "~Paragraph" ;
		TABSTOP = TRUE ;
	};
	RadioButton RB_OTHER
	{
		HelpID = "sw:RadioButton:DLG_CONV_TEXT_TABLE:RB_OTHER" ;
		Pos = MAP_APPFONT ( 75, 33 ) ;
		Size = MAP_APPFONT ( 45, 10 ) ;
		Text [ en-US ] = "~Other: " ;
	};
	Edit ED_OTHER
	{
		HelpID = "sw:Edit:DLG_CONV_TEXT_TABLE:ED_OTHER" ;
		Border = TRUE ;
		Left = TRUE ;
		Pos = MAP_APPFONT ( 123, 32 ) ;
		Size = MAP_APPFONT ( 9, 12 ) ;
		Text = "," ;
		MaxTextLength = 1 ;
	};
	CheckBox CB_KEEPCOLUMN
	{
		HelpID = "sw:CheckBox:DLG_CONV_TEXT_TABLE:CB_KEEPCOLUMN" ;
		Pos = MAP_APPFONT ( 12, 49 ) ;
		Size = MAP_APPFONT ( 128, 10 ) ;
		Check = TRUE ;
		Hide = TRUE ;
		Text [ en-US ] = "Equal width for all columns" ;
	};
	FixedLine FL_DELIM
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 135, 8 ) ;
		Text [ en-US ] = "Separate text at" ;
		Group = TRUE ;
	};
	CheckBox CB_HEADER
	{
		HelpID = "sw:CheckBox:DLG_CONV_TEXT_TABLE:CB_HEADER" ;
		Pos = MAP_APPFONT ( 12, 84 ) ;
		Size = MAP_APPFONT ( 123, 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Heading" ;
	};
	CheckBox CB_REPEAT_HEADER
	{
		HelpID = "sw:CheckBox:DLG_CONV_TEXT_TABLE:CB_REPEAT_HEADER" ;
		Pos = MAP_APPFONT ( 22, 97 ) ;
		Size = MAP_APPFONT ( 113, 10 ) ;
		Text [ en-US ] = "Repeat heading" ;
		TabStop = TRUE ;
	};
	FixedText FT_REPEAT_HEADER
	{
		Pos = MAP_APPFONT ( 125, 113 ) ;
		Size = MAP_APPFONT ( 66, 10 ) ;
		Text [ en-US ] = "The first %POSITION_OF_CONTROL rows" ;
	};
	NumericField NF_REPEAT_HEADER
	{
		HelpID = "sw:NumericField:DLG_CONV_TEXT_TABLE:NF_REPEAT_HEADER" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 191, 112 ) ;
		Size = MAP_APPFONT ( 28, 12 ) ;
		TabStop = TRUE ;
		Left = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 1 ;
		Maximum = 1000 ;
		First = 1 ;
	};
	Window WIN_REPEAT_HEADER
	{
		Pos = MAP_APPFONT ( 30, 110 ) ;
		Size = MAP_APPFONT ( 2, 1 ) ;
	};
	CheckBox CB_DONT_SPLIT
	{
		HelpID = "sw:CheckBox:DLG_CONV_TEXT_TABLE:CB_DONT_SPLIT" ;
		Pos = MAP_APPFONT ( 12, 126 ) ;
		Size = MAP_APPFONT ( 123, 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Don't split table" ;
	};
	CheckBox CB_BORDER
	{
		HelpID = "sw:CheckBox:DLG_CONV_TEXT_TABLE:CB_BORDER" ;
		Pos = MAP_APPFONT ( 12, 139 ) ;
		Size = MAP_APPFONT ( 123, 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Border" ;
	};
	FixedLine FL_OPTIONS
	{
		Pos = MAP_APPFONT ( 6, 71 ) ;
		Size = MAP_APPFONT ( 135, 8 ) ;
		Text [ en-US ] = "Options" ;
	};
	String STR_CONVERT_TEXT_TABLE
	{
		Text [ en-US ] = "Convert Text to Table" ;
	};
	OkButton BT_OK
	{
		Pos = MAP_APPFONT ( 147, 6 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TABSTOP = TRUE ;
		DefButton = TRUE ;
	};
	CancelButton BT_CANCEL
	{
		Pos = MAP_APPFONT ( 147, 23 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TABSTOP = TRUE ;
	};
	HelpButton BT_HELP
	{
		Pos = MAP_APPFONT ( 147, 43 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TABSTOP = TRUE ;
	};
	PushButton BT_AUTOFORMAT
	{
		HelpID = "sw:PushButton:DLG_CONV_TEXT_TABLE:BT_AUTOFORMAT" ;
		Pos = MAP_APPFONT ( 12, 152 ) ;
		Size = MAP_APPFONT ( 86, 14 ) ;
		TabStop = TRUE ;
		Hide = TRUE ;
		Text [ en-US ] = "Auto~Format..." ;
	};
	String STR_SYMBOL
	{
		Text [ en-US ] = "Symbol" ;
	};
};

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