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



#ifndef DBAUI_WIZARD_PAGES_HRC
#include "WizardPages.hrc"
#endif
#ifndef _DBU_MISC_HRC_
#include "dbu_misc.hrc"
#endif
#ifndef _DBA_DBACCESS_HELPID_HRC_
#include "dbaccess_helpid.hrc"
#endif

#include "dbaccess_slotid.hrc"

#define WINDOW_SIZE_X	276
#define WINDOW_SIZE_Y	185

#define WINDOW_BORDER_X	12
#define WINDOW_BORDER_Y	14

#define BUTTON_SIZE_X	50
#define BUTTON_SIZE_Y	14

String STR_WIZ_COLUMN_SELECT_TITEL
{
	Text [ en-US ] = "Apply columns" ;
};

String STR_WIZ_TYPE_SELECT_TITEL
{
	Text [ en-US ] = "Type formatting" ;
};

String STR_WIZ_PKEY_ALREADY_DEFINED
{
	Text [ en-US ] = "The following fields have already been set as primary keys:\n" ;
};

String STR_WIZ_NAME_MATCHING_TITEL
{
	Text [ en-US ] = "Assign columns" ;
};

ModalDialog WIZ_RTFCOPYTABLE
{
	HelpID = "dbaccess:ModalDialog:WIZ_RTFCOPYTABLE" ;

	Text [ en-US ] = "Copy RTF Table" ;

	OutputSize = TRUE ;
	SVLook = TRUE ;
	Moveable = TRUE ;
	Closeable = TRUE ;
	Hide = TRUE ;

	HelpButton PB_HELP
	{
		TabStop = TRUE ;
		Size = MAP_APPFONT ( BUTTON_SIZE_X, BUTTON_SIZE_Y ) ;
		Text [ en-US ] = "~Help" ;
	};
	CancelButton PB_CANCEL
	{
		TabStop = TRUE ;
		Size = MAP_APPFONT ( BUTTON_SIZE_X, BUTTON_SIZE_Y ) ;
		Text [ en-US ] = "~Cancel" ;
	};
	PushButton PB_PREV
	{
		HelpID = "dbaccess:PushButton:WIZ_RTFCOPYTABLE:PB_PREV" ;
		TabStop = TRUE ;
		Size = MAP_APPFONT ( BUTTON_SIZE_X, BUTTON_SIZE_Y ) ;
		Text [ en-US ] = "< ~Back" ;
	};
	PushButton PB_NEXT
	{
		HelpID = "dbaccess:PushButton:WIZ_RTFCOPYTABLE:PB_NEXT" ;
		TabStop = TRUE ;
		Size = MAP_APPFONT ( BUTTON_SIZE_X, BUTTON_SIZE_Y ) ;
		Text [ en-US ] = "~Next >" ;
	};
	OKButton PB_OK
	{
		TabStop = TRUE ;
		Size = MAP_APPFONT ( BUTTON_SIZE_X, BUTTON_SIZE_Y ) ;
		Text [ en-US ] = "C~reate" ;
	};

};

//==================================================================
 // TAB_WIZ_COLUMN_SELECT
 //==================================================================
TabPage TAB_WIZ_COLUMN_SELECT
{
	SVLook = TRUE ;
	Size = MAP_APPFONT ( WINDOW_SIZE_X, WINDOW_SIZE_Y ) ;

	HelpId = HID_TAB_WIZ_COLUMN_SELECT ;
	Hide = TRUE ;

	FixedLine FL_COLUMN_SELECT
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( WINDOW_SIZE_X - 12, 8 ) ;
		Text [ en-US ] = "Existing columns" ;
	};

	MultiListBox LB_ORG_COLUMN_NAMES
	{
		HelpID = "dbaccess:MultiListBox:TAB_WIZ_COLUMN_SELECT:LB_ORG_COLUMN_NAMES" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( WINDOW_BORDER_X, WINDOW_BORDER_Y ) ;
		Size = MAP_APPFONT ( 95, WINDOW_SIZE_Y - 23 ) ;
		TabStop = TRUE ;
		HScroll = TRUE ;
		VScroll = TRUE ;
		AutoHScroll = TRUE ;
		SimpleMode = TRUE ;
		Sort = FALSE ;
	};
	ImageButton IB_COLUMN_RH
	{
		HelpID = "dbaccess:ImageButton:TAB_WIZ_COLUMN_SELECT:IB_COLUMN_RH" ;
		Pos = MAP_APPFONT ( WINDOW_BORDER_X + 116, WINDOW_BORDER_Y + 25 ) ;
		Size = MAP_APPFONT ( 20, 14 ) ;
		TabStop = TRUE ;
		ButtonImage = Image
		{
			ImageBitmap = Bitmap
			{
				File = "one_right.png" ;
			};
		};
	};
	ImageButton IB_COLUMNS_RH
	{
		HelpID = "dbaccess:ImageButton:TAB_WIZ_COLUMN_SELECT:IB_COLUMNS_RH" ;
		Pos = MAP_APPFONT ( WINDOW_BORDER_X + 116, WINDOW_BORDER_Y + 45 ) ;
		Size = MAP_APPFONT ( 20, 14 ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
		ButtonImage = Image
		{
			ImageBitmap = Bitmap
			{
				File = "all_right.png" ;
			};
		};
	};
	ImageButton IB_COLUMN_LH
	{
		HelpID = "dbaccess:ImageButton:TAB_WIZ_COLUMN_SELECT:IB_COLUMN_LH" ;
		Pos = MAP_APPFONT ( WINDOW_BORDER_X + 116, WINDOW_BORDER_Y + 65) ;
		Size = MAP_APPFONT ( 20, 14 ) ;
		TabStop = TRUE ;
		ButtonImage = Image
		{
			ImageBitmap = Bitmap
			{
				File = "one_left.png" ;
			};
		};
	};
	ImageButton IB_COLUMNS_LH
	{
		HelpID = "dbaccess:ImageButton:TAB_WIZ_COLUMN_SELECT:IB_COLUMNS_LH" ;
		Pos = MAP_APPFONT ( WINDOW_BORDER_X + 116, WINDOW_BORDER_Y + 85) ;
		Size = MAP_APPFONT ( 20, 14 ) ;
		TabStop = TRUE ;
		ButtonImage = Image
		{
			ImageBitmap = Bitmap
			{
				File = "all_left.png" ;
			};
		};
	};

	MultiListBox LB_NEW_COLUMN_NAMES
	{
		HelpID = "dbaccess:MultiListBox:TAB_WIZ_COLUMN_SELECT:LB_NEW_COLUMN_NAMES" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( WINDOW_BORDER_X + 157, WINDOW_BORDER_Y) ;
		Size = MAP_APPFONT ( 95, WINDOW_SIZE_Y - 23 ) ;
		TabStop = TRUE ;
		HScroll = TRUE ;
		VScroll = TRUE ;
		AutoHScroll = TRUE ;
		SimpleMode = TRUE ;
		Sort = FALSE ;
	};
};

//==================================================================
 // TAB_WIZ_TYPE_SELECT
 //==================================================================
TabPage TAB_WIZ_TYPE_SELECT
{
	SVLook = TRUE ;
	Size = MAP_APPFONT ( WINDOW_SIZE_X, WINDOW_SIZE_Y ) ;

	HelpId = HID_TAB_WIZ_TYPE_SELECT ;
	Hide = TRUE ;

	MultiListBox LB_NEW_COLUMN_NAMES
	{
		HelpID = "dbaccess:MultiListBox:TAB_WIZ_TYPE_SELECT:LB_NEW_COLUMN_NAMES" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 6, 6 ) ;
		Size = MAP_APPFONT ( 87, WINDOW_SIZE_Y - 12 ) ;
		TabStop = TRUE ;
		HScroll = TRUE ;
		VScroll = TRUE ;
		AutoHScroll = TRUE ;
		SimpleMode = TRUE ;
	};

	FixedLine FL_COLUMN_NAME
	{
		Pos = MAP_APPFONT ( 99, 3 ) ;
		Size = MAP_APPFONT ( WINDOW_SIZE_X - 105, 8 ) ;
		Text [ en-US ] = "Column information" ;
	};

	TabPage CONTROL_CONTAINER
	{
		HelpID = "dbaccess:TabPage:CONTROL_CONTAINER" ;
		Pos = MAP_APPFONT ( 102, WINDOW_BORDER_Y ) ;
		Size = MAP_APPFONT ( WINDOW_SIZE_X - 111, WINDOW_SIZE_Y - WINDOW_BORDER_Y - 67 ) ;
		SVLook = TRUE ;
		DialogControl = TRUE ;
	};

	FixedLine FL_AUTO_TYPE
	{
		Pos = MAP_APPFONT ( 99, WINDOW_SIZE_Y - WINDOW_BORDER_Y - 41 ) ;
		Size = MAP_APPFONT ( WINDOW_SIZE_X - 105, 8 ) ;
		Text [ en-US ] = "Automatic type recognition" ;
	};

	FixedText FT_AUTO
	{
		Pos = MAP_APPFONT ( 105, WINDOW_SIZE_Y - WINDOW_BORDER_Y - 28 ) ;
		Size = MAP_APPFONT ( 40, 8 ) ;
		Text [ en-US ] = "Lines (ma~x)" ;
	};

	NumericField ET_AUTO
	{
		HelpID = "dbaccess:NumericField:TAB_WIZ_TYPE_SELECT:ET_AUTO" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 151, WINDOW_SIZE_Y - WINDOW_BORDER_Y - 29) ;
		Size = MAP_APPFONT ( 40, 12 ) ;
		TabStop = TRUE ;
	};

	PushButton PB_AUTO
	{
		HelpID = "dbaccess:PushButton:TAB_WIZ_TYPE_SELECT:PB_AUTO" ;
		Pos = MAP_APPFONT ( WINDOW_SIZE_X - 62, WINDOW_SIZE_Y - WINDOW_BORDER_Y - 30 ) ;
		Size = MAP_APPFONT ( BUTTON_SIZE_X, BUTTON_SIZE_Y ) ;
		TabStop = TRUE ;
		Text = "~Auto" ;
	};
};

Menu RID_SBA_RTF_PKEYPOPUP
{
	ItemList =
	{
		MenuItem
		{
			Identifier = SID_TABLEDESIGN_TABED_PRIMARYKEY ;
			HelpID = HID_TABLEDESIGN_TABED_PRIMARYKEY ;
			Checkable = TRUE ;
			Text [ en-US ] = "Primary Key" ;
		};
	};
};
//==================================================================
 // TAB_WIZ_NAME_MATCHING
 //==================================================================
TabPage TAB_WIZ_NAME_MATCHING
{
	HelpID = "dbaccess:TabPage:TAB_WIZ_NAME_MATCHING" ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( WINDOW_SIZE_X, WINDOW_SIZE_Y ) ;

	Hide = TRUE ;

	FixedText FT_TABLE_LEFT
	{
		Pos = MAP_APPFONT ( 52, 6 ) ;
		Size = MAP_APPFONT ( 75, 20) ;
		Text [ en-US ] = "Source table: \n" ;
	};

	FixedText FT_TABLE_RIGHT
	{
		Pos = MAP_APPFONT ( 144, 6 ) ;
		Size = MAP_APPFONT ( 75, 20) ;
		Text [ en-US ] = "Destination table: \n" ;
	};

	Control CTRL_LEFT
	{
		Border = TRUE ;
		Pos = MAP_APPFONT ( 52, 28) ;
		Size = MAP_APPFONT ( 82, WINDOW_SIZE_Y - 34 ) ;
		TabStop = TRUE ;
		HelpId = HID_TAB_NAMEMATCHING_COLS_AVAIL ;
		/*DialogControl = TRUE ;*/
	};

	Control CTRL_RIGHT
	{
		Border = TRUE ;
		Pos = MAP_APPFONT ( 144, 28) ;
		Size = MAP_APPFONT ( 82, WINDOW_SIZE_Y - 34 ) ;
		TabStop = TRUE ;
		HelpId = HID_TAB_NAMEMATCHING_COLS_ASSIGN ;
		/*DialogControl = TRUE ;*/
	};

	ImageButton IB_COLUMN_UP
	{
		HelpID = "dbaccess:ImageButton:TAB_WIZ_NAME_MATCHING:IB_COLUMN_UP" ;
		Pos = MAP_APPFONT ( 19, 45 ) ;
		Size = MAP_APPFONT ( 14, 14 ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
		ButtonImage = Image
		{
			ImageBitmap = Bitmap
			{
				File = "sortup.png" ;
			};
		};
	};
	ImageButton IB_COLUMN_DOWN
	{
		HelpID = "dbaccess:ImageButton:TAB_WIZ_NAME_MATCHING:IB_COLUMN_DOWN" ;
		Pos = MAP_APPFONT ( 19, 63 ) ;
		Size = MAP_APPFONT ( 14, 14 ) ;
		TabStop = TRUE ;
		ButtonImage = Image
		{
			ImageBitmap = Bitmap
			{
				File = "sortdown.png" ;
			};
		};
	};
	ImageButton IB_COLUMN_UP_RIGHT
	{
		HelpID = "dbaccess:ImageButton:TAB_WIZ_NAME_MATCHING:IB_COLUMN_UP_RIGHT" ;
		Pos = MAP_APPFONT ( WINDOW_SIZE_X - 33, 45 ) ;
		Size = MAP_APPFONT ( 14, 14 ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
		ButtonImage = Image
		{
			ImageBitmap = Bitmap
			{
				File = "sortup.png" ;
			};
		};
	};
	ImageButton IB_COLUMN_DOWN_RIGHT
	{
		HelpID = "dbaccess:ImageButton:TAB_WIZ_NAME_MATCHING:IB_COLUMN_DOWN_RIGHT" ;
		Pos = MAP_APPFONT ( WINDOW_SIZE_X - 33, 63) ;
		Size = MAP_APPFONT ( 14, 14 ) ;
		TabStop = TRUE ;
		ButtonImage = Image
		{
			ImageBitmap = Bitmap
			{
				File = "sortdown.png" ;
			};
		};
	};

	PushButton PB_ALL
	{
		HelpID = "dbaccess:PushButton:TAB_WIZ_NAME_MATCHING:PB_ALL" ;
		Pos = MAP_APPFONT ( 6, 83) ;
		Size = MAP_APPFONT ( 40, 14 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "~All" ;
	};

	PushButton PB_NONE
	{
		HelpID = "dbaccess:PushButton:TAB_WIZ_NAME_MATCHING:PB_NONE" ;
		Pos = MAP_APPFONT ( 6, 103) ;
		Size = MAP_APPFONT ( 40, 14 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Non~e" ;
	};
};
TabPage TAB_WIZ_COPYTABLE
{
	SVLook = TRUE ;
	Size = MAP_APPFONT ( WINDOW_SIZE_X, WINDOW_SIZE_Y ) ;

	HelpId = HID_TAB_WIZ_COPYTABLE ;
	Hide = TRUE ;

	FixedText FT_TABLENAME
	{
		Pos = MAP_APPFONT ( 12, 11) ;
		Size = MAP_APPFONT ( 60, 8 ) ;
		Text [ en-US ] = "Ta~ble name" ;
	};

	Edit ET_TABLENAME
	{
		HelpId = HID_TAB_WIZ_TABLENAME_EDIT ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 80, 9) ;
		Size = MAP_APPFONT ( WINDOW_SIZE_X - 92, 12 ) ;
		TabStop = TRUE ;
	};

	FixedLine FL_OPTIONS
	{
		Pos = MAP_APPFONT ( 6, 24 ) ;
		Size = MAP_APPFONT ( WINDOW_SIZE_X - 12, 8 ) ;
		Text [ en-US ] = "Options" ;
	};
	RadioButton RB_DEFDATA
	{
		HelpID = "dbaccess:RadioButton:TAB_WIZ_COPYTABLE:RB_DEFDATA" ;
		Pos = MAP_APPFONT ( 12, 35 ) ;
		Size = MAP_APPFONT ( 73, 10 ) ;
		Text [ en-US ] = "De~finition and data" ;
	};
	RadioButton RB_DEF
	{
		HelpID = "dbaccess:RadioButton:TAB_WIZ_COPYTABLE:RB_DEF" ;
		Pos = MAP_APPFONT ( 12, 49 ) ;
		Size = MAP_APPFONT ( 73, 10 ) ;
		Text [ en-US ] = "Def~inition" ;
	};

	RadioButton RB_VIEW
	{
		HelpID = "dbaccess:RadioButton:TAB_WIZ_COPYTABLE:RB_VIEW" ;
		Pos = MAP_APPFONT ( 12, 63 ) ;
		Size = MAP_APPFONT ( 73, 10 ) ;
		Text [ en-US ] = "A~s table view" ;
	};

	RadioButton RB_APPENDDATA
	{
		HelpID = "dbaccess:RadioButton:TAB_WIZ_COPYTABLE:RB_APPENDDATA" ;
		Pos = MAP_APPFONT ( 12, 77 ) ;
		Size = MAP_APPFONT ( 73, 10 ) ;
		Text [ en-US ] = "Append ~data" ;
	};

	CheckBox CB_USEHEADERLINE
	{
		HelpID = "dbaccess:CheckBox:TAB_WIZ_COPYTABLE:CB_USEHEADERLINE" ;
		Pos = MAP_APPFONT ( 12, 93 ) ;
		Size = MAP_APPFONT ( WINDOW_SIZE_X - 18, 10 ) ;
		Text [ en-US ] = "Use first ~line as column names" ;
	};

	CheckBox CB_PRIMARY_COLUMN
	{
		HelpID = "dbaccess:CheckBox:TAB_WIZ_COPYTABLE:CB_PRIMARY_COLUMN" ;
		Pos = MAP_APPFONT ( 12, 107 ) ;
		Size = MAP_APPFONT ( 90, 10 ) ;
		Text [ en-US ] = "Crea~te primary key" ;
	};
	FixedText FT_KEYNAME
	{
		Pos = MAP_APPFONT ( 21, 122 ) ;
		Size = MAP_APPFONT ( 39, 8 ) ;
		Text [ en-US ] = "Name" ;
	};

	Edit ET_KEYNAME
	{
		HelpID = "dbaccess:Edit:TAB_WIZ_COPYTABLE:ET_KEYNAME" ;
		Pos = MAP_APPFONT ( 80, 120 ) ;
		Size = MAP_APPFONT ( 65, 12 ) ;
		TabStop = TRUE ;
		Border = TRUE ;
	};
};

String STR_WIZ_TABLE_COPY
{
	Text [ en-US ] = "Copy table" ;
};

String STR_COPYTABLE_TITLE_COPY
{
	Text [ en-US ] = "Copy table" ;
};

String STR_INVALID_TABLE_NAME
{
	Text [ en-US ] = "This table name is not valid in the current database." ;
};
String STR_SUGGEST_APPEND_TABLE_DATA
{
	Text [ en-US ] = "Choose the option 'Append data' on the first page to append data to an existing table." ;
};

String STR_INVALID_TABLE_NAME_LENGTH
{
	Text [ en-US ] = "Please change the table name. It is too long." ;
};

Image IMG_SORTUP_H
{
	ImageBitmap = Bitmap
	{
		File = "sortup_h.png" ;
	};
};

Image IMG_SORTDOWN_H
{
	ImageBitmap = Bitmap
	{
		File = "sortdown_h.png" ;
	};
};

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