/**************************************************************
 * 
 * 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 "asciiopt.hrc"

ModalDialog RID_SCDLG_ASCII
{
    HelpID = "sc:ModalDialog:RID_SCDLG_ASCII";
	OutputSize = TRUE ;
	SVLook = TRUE ;
    Size = MAP_APPFONT ( 320 , 305 ) ;
	Text [ en-US ] = "Text Import" ;
	Moveable = TRUE ;

    OKButton BTN_OK
	{
        Pos = MAP_APPFONT ( 264 , 6 ) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
		TabStop = TRUE ;
        DefButton = TRUE ;
	};
    CancelButton BTN_CANCEL
	{
        Pos = MAP_APPFONT ( 264 , 23 ) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
        TabStop = TRUE ;
	};
    HelpButton BTN_HELP
	{
        Pos = MAP_APPFONT ( 264 , 43 ) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
		TabStop = TRUE ;
	};

    FixedLine FL_FIELDOPT
	{
        Pos = MAP_APPFONT ( 6 , 3 ) ;
        Size = MAP_APPFONT ( 252 , 8 ) ;
        Text [ en-US ] = "Import" ;
	};

	FixedText FT_CHARSET
	{
        Pos = MAP_APPFONT ( 12 , 16 ) ;
        Size = MAP_APPFONT ( 60 , 8 ) ;
		Text [ en-US ] = "Ch~aracter set" ;
	};

	ListBox LB_CHARSET
	{
	    HelpID = "sc:ListBox:RID_SCDLG_ASCII:LB_CHARSET";
        Pos = MAP_APPFONT ( 76 , 14 ) ;
        Size = MAP_APPFONT ( 130 , 61 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		Sort = TRUE;
	};

    FixedText FT_CUSTOMLANG
	{
        Pos = MAP_APPFONT ( 12 , 32 ) ;
        Size = MAP_APPFONT ( 60 , 8 ) ;
        Text [ en-US ] = "Language" ;
	};

    ListBox LB_CUSTOMLANG
	{
        HelpID = "sc:ListBox:RID_SCDLG_ASCII:LB_CUSTOMLANG";
        Pos = MAP_APPFONT ( 76 , 30 ) ;
        Size = MAP_APPFONT ( 130 , 61 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
        Sort = TRUE;
	};

    FixedText FT_AT_ROW
	{
        Pos = MAP_APPFONT ( 12 , 48 ) ;
        Size = MAP_APPFONT ( 60 , 8 ) ;
        Text [ en-US ] = "From ro~w" ;
	};

    NumericField NF_AT_ROW
	{
        HelpID = "sc:NumericField:RID_SCDLG_ASCII:NF_AT_ROW";
        Border = TRUE ;
        SVLook = TRUE ;
        Pos = MAP_APPFONT ( 76 , 46 ) ;
        Size = MAP_APPFONT ( 30 , 12 ) ;
		TabStop = TRUE ;
        Spin = TRUE ;
        Repeat = TRUE ;
        Minimum = 1 ;
	};

    FixedLine FL_SEPOPT
	{
        Pos = MAP_APPFONT ( 6 , 63 ) ;
        Size = MAP_APPFONT ( 252 , 8 ) ;
        Text [ en-US ] = "Separator options" ;
	};
    RadioButton RB_FIXED
	{
        HelpID = "sc:RadioButton:RID_SCDLG_ASCII:RB_FIXED";
        Pos = MAP_APPFONT ( 12 , 75 ) ;
        Size = MAP_APPFONT ( 243 , 10 ) ;
        Text [ en-US ] = "~Fixed width" ;
		TabStop = TRUE ;
	};
    RadioButton RB_SEPARATED
	{
        HelpID = "sc:RadioButton:RID_SCDLG_ASCII:RB_SEPARATED";
        Pos = MAP_APPFONT ( 12 , 89 ) ;
        Size = MAP_APPFONT ( 243 , 10 ) ;
        Text [ en-US ] = "~Separated by" ;
		TabStop = TRUE ;
        Check = TRUE ;
	};

    CheckBox CKB_TAB
	{
        HelpID = "sc:CheckBox:RID_SCDLG_ASCII:CKB_TAB";
        Pos = MAP_APPFONT ( 20 , 102 ) ;
        Size = MAP_APPFONT ( 68 , 10 ) ;
		TabStop = TRUE ;
        Text [ en-US ] = "~Tab" ;
	};
    CheckBox CKB_COMMA
	{
        HelpID = "sc:CheckBox:RID_SCDLG_ASCII:CKB_COMMA";
        Pos = MAP_APPFONT ( 92 , 102 ) ;
        Size = MAP_APPFONT ( 68 , 10 ) ;
		TabStop = TRUE ;
        Text [ en-US ] = "~Comma" ;
	};
	CheckBox CKB_OTHER
	{
	    HelpID = "sc:CheckBox:RID_SCDLG_ASCII:CKB_OTHER";
        Pos = MAP_APPFONT ( 164 , 102 ) ;
        Size = MAP_APPFONT ( 50 , 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "~Other" ;
	};
	Edit ED_OTHER
	{
	    HelpID = "sc:Edit:RID_SCDLG_ASCII:ED_OTHER";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 218 , 100 ) ;
        Size = MAP_APPFONT ( 37 , 12 ) ;
		TabStop = TRUE ;
        MaxTextLength = 10 ;
	};

    CheckBox CKB_SEMICOLON
	{
        HelpID = "sc:CheckBox:RID_SCDLG_ASCII:CKB_SEMICOLON";
        Pos = MAP_APPFONT ( 20 , 115 ) ;
        Size = MAP_APPFONT ( 68 , 10 ) ;
		TabStop = TRUE ;
        Text [ en-US ] = "S~emicolon" ;
	};
    CheckBox CKB_SPACE
	{
        HelpID = "sc:CheckBox:RID_SCDLG_ASCII:CKB_SPACE";
        Pos = MAP_APPFONT ( 92 , 115 ) ;
        Size = MAP_APPFONT ( 68 , 10 ) ;
        TabStop = TRUE ;
        Text [ en-US ] = "S~pace" ;
	};

	CheckBox CB_ASONCE
	{
	    HelpID = "sc:CheckBox:RID_SCDLG_ASCII:CB_ASONCE";
        Pos = MAP_APPFONT ( 20 , 130 ) ;
        Size = MAP_APPFONT ( 130 , 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Merge ~delimiters" ;
	};

    ComboBox CB_TEXTSEP
    {
        HelpID = "sc:ComboBox:RID_SCDLG_ASCII:CB_TEXTSEP";
        Pos = MAP_APPFONT ( 218 , 128 ) ;
        Size = MAP_APPFONT ( 37 , 94 ) ;
        TabStop = TRUE ;
        DropDown = TRUE ;
    };
    FixedText FT_TEXTSEP
    {
        Pos = MAP_APPFONT ( 156 , 130 ) ;
        Size = MAP_APPFONT ( 60 , 8 ) ;
        Text [ en-US ] = "Te~xt delimiter" ;
    };

    FixedLine FL_OTHER_OPTIONS
    {
        Pos = MAP_APPFONT ( 6 , 146 ) ;
        Size = MAP_APPFONT ( 252 , 8 ) ;
        Text [ en-US ] = "Other options" ;
    };

    CheckBox CB_QUOTED_AS_TEXT
    {
        HelpID = "sc:CheckBox:RID_SCDLG_ASCII:CB_QUOTED_AS_TEXT";
        Pos = MAP_APPFONT ( 12 , 158 ) ;
        Size = MAP_APPFONT ( 130 , 10 ) ;
        TabStop = TRUE ;
        Text [ en-US ] = "~Quoted field as text" ;
    };

    CheckBox CB_DETECT_SPECIAL_NUMBER
    {
        HelpID = "sc:CheckBox:RID_SCDLG_ASCII:CB_DETECT_SPECIAL_NUMBER";
        Pos = MAP_APPFONT ( 12 , 171 ) ;
        Size = MAP_APPFONT ( 130 , 10 ) ;
        TabStop = TRUE ;
        Text [ en-US ] = "Detect special numbers" ;
    };

    FixedLine FL_WIDTH
    {
        Pos = MAP_APPFONT ( 6 , 187 ) ;
        Size = MAP_APPFONT ( 252 , 8 ) ;
        Text [ en-US ] = "Fields" ;
    };
    FixedText FT_TYPE
    {
        Pos = MAP_APPFONT ( 12 , 200 ) ;
        Size = MAP_APPFONT ( 60 , 8 ) ;
        Text [ en-US ] = "Column t~ype";
    };
    ListBox LB_TYPE1
    {
        HelpID = "sc:ListBox:RID_SCDLG_ASCII:LB_TYPE1";
        Pos = MAP_APPFONT ( 76 , 198 ) ;
        Size = MAP_APPFONT ( 60 , 68 ) ;
        TabStop = TRUE ;
        DropDown = TRUE ;
    };
    Control CTR_TABLEBOX
    {
        HelpId = HID_SC_ASCII_TABCTR ;
        Border = TRUE ;
        DialogControl = TRUE ;
        Pos = MAP_APPFONT ( 12 , 216 ) ;
        Size = MAP_APPFONT ( 243 , 82 ) ;
    };

    String STR_TEXTTOCOLUMNS
    {
        Text [ en-US ] = "Text to Columns" ;
    };
};













































