/**************************************************************
 *
 * 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 _DBA_DBACCESS_HELPID_HRC_
#include "dbaccess_helpid.hrc"
#endif
#ifndef _DBAUI_AUTOCONTROLS_HRC_
#include "AutoControls.hrc"
#endif
#ifndef _DBU_DLG_HRC_
#include "dbu_dlg.hrc"
#endif
#ifndef _DBAUI_DBADMIN_HRC_
#include "dbadmin.hrc"
#endif
#ifndef DBACCESS_UI_BROWSER_ID_HXX
#include "browserids.hxx"
#endif
#ifndef DBAUI_ADABASPAGE_HRC
#include "AdabasPage.hrc"
#endif
#include "admincontrols.hrc"

//-------------------------------------------------------------------------

#define AUTO_USECATALOG(AUTO_Y)                                 \
	CheckBox CB_USECATALOG										\
	{															\
		Pos		= MAP_APPFONT ( 6, AUTO_Y) ;					\
		Size	= MAP_APPFONT ( PAGE_X -12, CHECKBOX_HEIGHT ) ;   \
		TabStop = TRUE ;										\
		HelpId = HID_DSADMIN_USECATALOG;						\
		Text [ en-US ] = "Use catalog for file-based databases" ;	\
	};

//-------------------------------------------------------------------------

#define AUTO_FIXEDLINE_CONNSETTINGS(AUTO_Y) \
	FixedLine FL_SEPARATOR1																				\
	{																									\
		Pos = MAP_APPFONT ( 4, AUTO_Y ) ;																\
		Size = MAP_APPFONT ( PAGE_X - 8, FIXEDTEXT_HEIGHT ) ;											\
		Text [ en-US ] = "Connection Settings" ;														    \
	};																									\

#define AUTO_HOST_AND_PORT(AUTO_Y)																		\
	FixedText FT_HOSTNAME																				\
	{																									\
		Pos = MAP_APPFONT ( 6, AUTO_Y + 2 ) ;						                                    \
		Size = MAP_APPFONT ( EDIT_X - 7, FIXEDTEXT_HEIGHT ) ;											\
		Text [ en-US ] = "~Host name" ;																    \
	};																									\
	Edit ET_HOSTNAME																					\
	{																									\
		TabStop = TRUE ;																				\
		Border = TRUE ;																					\
		HelpId = HID_DSADMIN_HOSTNAME;																	\
		Pos = MAP_APPFONT ( EDIT_X, AUTO_Y ) ;				                                            \
		Size = MAP_APPFONT ( 97, EDIT_HEIGHT ) ;														\
	};																									\
																										\
	FixedText FT_PORTNUMBER																				\
	{																									\
		Pos = MAP_APPFONT ( 6, AUTO_Y + UNRELATED_CONTROLS + FIXEDTEXT_HEIGHT + 2 ) ;	                \
		Size = MAP_APPFONT ( EDIT_X - 7, FIXEDTEXT_HEIGHT ) ;											\
		Text [ en-US ] = "~Port number" ;															        \
	};																									\
	NumericField NF_PORTNUMBER																			\
	{																									\
		TabStop = TRUE ;																				\
		Border = TRUE ;																					\
		HelpId = HID_DSADMIN_PORTNUMBER;																\
		NoThousandSep = TRUE ;                                                                           \
		Pos = MAP_APPFONT ( EDIT_X, AUTO_Y +UNRELATED_CONTROLS + FIXEDTEXT_HEIGHT ) ;                  \
		Size = MAP_APPFONT ( 97, EDIT_HEIGHT ) ;														\
	};
//-------------------------------------------------------------------------

TabDialog DLG_DATABASE_ADMINISTRATION
{
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Moveable = TRUE ;
	Closeable = TRUE ;
	Hide = TRUE ;
	HelpId = HID_DSADMIN_DIALOG;

	TabControl 1
	{
		OutputSize = TRUE ;
		HelpId = HID_DSADMIN_TABCONTROL;
	};

	//.........................................................................
	String STR_PAGETITLE_GENERAL
	{
		Text [ en-US ] = "Advanced Properties" ;
	};
	String STR_PAGETITLE_ADVANCED
	{
		Text [ en-US ] = "Additional Settings" ;
	};
	String STR_PAGETITLE_CONNECTION
	{
		Text [ en-US ] = "Connection settings" ;
	};

	Text [ en-US ] = "Database properties" ;
};

// -----------------------------------------------------------------------------

ModalDialog DLG_DATABASE_TYPE_CHANGE
{
	OutputSize = TRUE ;
	Moveable = TRUE ;
	Closeable = TRUE ;
	Hide = TRUE ;
	HelpId = HID_DSADMIN_TYPE_DIALOG;

	TabControl 1
	{
		OutputSize = TRUE ;
		HelpId = HID_DSADMIN_TABCONTROL;
	};
	Text [ en-US ] = "Database properties" ;
};

//-------------------------------------------------------------------------

TabPage PAGE_GENERAL
{
	SVLook = TRUE ;
	Size = MAP_APPFONT ( WIZARD_PAGE_X, WIZARD_PAGE_Y ) ;
	Hide = TRUE ;
	HelpId = HID_DSADMIN_PAGE_GENERAL;


	FixedText FT_GENERALHEADERTEXT
	{
		Pos = MAP_APPFONT ( START_X, 8 ) ;
		Size = MAP_APPFONT ( (WIZARD_PAGE_X - START_X) - 12, 2 * FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Welcome to the %PRODUCTNAME Database Wizard" ;
		WordBreak = TRUE ;
	};

	FixedText FT_GENERALHELPTEXT
	{
		Pos = MAP_APPFONT (START_X, 27 ) ;
		Size = MAP_APPFONT ( WIZARD_PAGE_X - START_X - 6, 5* FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Use the Database Wizard to create a new database, open an existing database file, or connect to a database stored on a server." ;
		WordBreak = TRUE ;
	};

	FixedText FT_DATASOURCEHEADER
	{
		Pos = MAP_APPFONT ( START_X, 73 ) ;
		Size = MAP_APPFONT ( WIZARD_PAGE_X - 12, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "What do you want to do?" ;
	};

	RadioButton RB_CREATEDBDATABASE
	{
		HelpId = HID_PAGE_DBWIZARD_GENERAL_RB_CREATEDBDATABASE ;
		Pos = MAP_APPFONT (START_X + 6, 85 ) ;
		Size = MAP_APPFONT ( 205, 10 ) ;
		Group = TRUE ;
		Text [ en-US ] = "Create a n~ew database" ;
	};

	RadioButton RB_OPENEXISTINGDOC
	{
		HelpID = "dbaccess:RadioButton:PAGE_GENERAL:RB_OPENEXISTINGDOC" ;
		Pos = MAP_APPFONT (START_X + 6, 97 ) ;
		Size = MAP_APPFONT ( 206, 8 ) ;
		Text [ en-US ] = "Open an existing database ~file" ;
	};

	FixedText FT_DOCLISTLABEL
	{
		Pos = MAP_APPFONT ( START_X + INDENTED_X + INDENT_BELOW_RADIO, 110 ) ;
		Size = MAP_APPFONT ( 120, 8 ) ;
		Text [ en-US ] = "Recently used" ;
	};

	ListBox LB_DOCUMENTLIST
	{
		HelpID = "dbaccess:ListBox:PAGE_GENERAL:LB_DOCUMENTLIST" ;
		Pos = MAP_APPFONT ( START_X + INDENTED_X + INDENT_BELOW_RADIO, 121 ) ;
		Size = MAP_APPFONT ( 120, 14 ) ;
		DropDown = TRUE ;
		Border = TRUE ;
	};

	PushButton PB_OPENDOCUMENT
	{
		HelpID = "dbaccess:PushButton:PAGE_GENERAL:PB_OPENDOCUMENT" ;
		Pos = MAP_APPFONT ( START_X + INDENTED_X + INDENT_BELOW_RADIO, 139 ) ;
		Size = MAP_APPFONT ( 50, 16 ) ;
		OutputSize = TRUE ;
		TabStop = TRUE ;
	};

	RadioButton RB_GETEXISTINGDATABASE
	{
		HelpId = HID_PAGE_DBWIZARD_GENERAL_RB_GETEXISTINGDATABASE;
		Pos = MAP_APPFONT (START_X + 6, 159 ) ;
		Size = MAP_APPFONT ( 206, 8 ) ;
		Text [ en-US ] = "Connect to an e~xisting database" ;
	};

	FixedText FT_DATASOURCETYPE_PRE
	{
		Pos = MAP_APPFONT ( 6, UNRELATED_CONTROLS ) ;
		Size = MAP_APPFONT ( WIZARD_PAGE_X - 12, 3*FIXEDTEXT_HEIGHT ) ;
		WordBreak = TRUE ;
		Text [ en-US ] = "Select the type of database to which you want to establish a connection." ;
	};

	FixedText FT_DATATYPE
	{
		Pos = MAP_APPFONT ( 6, 2*UNRELATED_CONTROLS + 3*FIXEDTEXT_HEIGHT + RELATED_CONTROLS) ;
		Size = MAP_APPFONT ( 80, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Database ~type " ;
	};

	ListBox LB_DATATYPE
	{
		HelpId = HID_DSADMIN_DSTYPE;
		Pos = MAP_APPFONT ( 90, 2*UNRELATED_CONTROLS + 3*FIXEDTEXT_HEIGHT + RELATED_CONTROLS -2 ) ;
		Size = MAP_APPFONT ( 120, 120 ) ;
		Border = TRUE ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		Sort = FALSE ;
	};

	FixedText FT_DATATYPEAPPENDIX
	{
		Pos = MAP_APPFONT ( 90, 2*UNRELATED_CONTROLS + 3*FIXEDTEXT_HEIGHT + RELATED_CONTROLS -2 + 72) ;
		Size = MAP_APPFONT ( 60, 8 ) ;
		Text [ en-US ] = "Database" ;
	};

	FixedText FT_DATASOURCETYPE_POST
	{
		Pos = MAP_APPFONT ( 6, 4*UNRELATED_CONTROLS + 4*FIXEDTEXT_HEIGHT + RELATED_CONTROLS ) ;
		Size = MAP_APPFONT ( WIZARD_PAGE_X - 12, 5*FIXEDTEXT_HEIGHT ) ;
		WordBreak = TRUE ;
		Text [ en-US ] = "On the following pages, you can make detailed settings for the connection.\n\nThe new settings you make will overwrite your existing settings." ;
	};

	FixedText FT_SPECIAL_MESSAGE
	{
		Pos = MAP_APPFONT ( 6, 4*UNRELATED_CONTROLS + 9*FIXEDTEXT_HEIGHT + 2*RELATED_CONTROLS ) ;
		Size = MAP_APPFONT ( WIZARD_PAGE_X - 12, 3*FIXEDTEXT_HEIGHT ) ;
		WordBreak = TRUE ;
		HelpId = HID_DSADMIN_SPECIAL_MESSAGE;
	};

	String STR_MYSQLENTRY
	{
		Text [ en-US ] = "MySQL" ;
	};

	String STR_PARENTTITLE
	{
		Text [ en-US ] = "Data Source Properties: #" ;
	};
	String STR_COULDNOTLOAD_ODBCLIB
	{
		Text [ en-US ] = "Could not load the program library #lib# or it is corrupted. The ODBC data source selection is not available." ;
	};
	String STR_UNSUPPORTED_DATASOURCE_TYPE
	{
		Text [ en-US ] = "This kind of data source is not supported on this platform.\nYou are allowed to change the settings, but you probably will not be able to connect to the database." ;
	};
	Text [ en-US ] = "General" ;
};

//.........................................................................

TabPage PAGE_DBASE
{
	SVLook = TRUE ;
	Hide = TRUE ;
	Pos = MAP_APPFONT ( 0, 0 ) ;
	Size = MAP_APPFONT ( PAGE_X, PAGE_Y ) ;
	HelpId = HID_DSADMIN_PAGE_DBASE;

	AUTO_CHARSET(UNRELATED_CONTROLS,PAGE_X)

	FixedLine FL_SEPARATOR1
	{
		Pos = MAP_APPFONT ( 4, 2*UNRELATED_CONTROLS + RELATED_CONTROLS + 2*FIXEDTEXT_HEIGHT) ;
		Size = MAP_APPFONT ( PAGE_X - 8, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Optional settings" ;
	};

	CheckBox CB_SHOWDELETEDROWS
	{
		Pos = MAP_APPFONT ( 6, 2*UNRELATED_CONTROLS + 2*RELATED_CONTROLS + 3*FIXEDTEXT_HEIGHT) ;
		Size = MAP_APPFONT ( 200, CHECKBOX_HEIGHT ) ;
		TabStop = TRUE ;
		HelpId = HID_DSADMIN_SHOWDELETED;
		Text [ en-US ] = "Display deleted records as well" ;
	};

	FixedText FT_SPECIAL_MESSAGE
	{
		Hide = TRUE ;
		WordBreak = TRUE ;
		Pos = MAP_APPFONT ( 6, 3*UNRELATED_CONTROLS + 2*RELATED_CONTROLS + 3*FIXEDTEXT_HEIGHT + CHECKBOX_HEIGHT) ;
		Size = MAP_APPFONT ( PAGE_X - 12, 2*FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Note: When deleted, and thus inactive, records are displayed, you will not be able to delete records from the data source." ;
	};

	PushButton PB_INDICIES
	{
		Pos = MAP_APPFONT ( PAGE_X - BUTTON_WIDTH - UNRELATED_CONTROLS, PAGE_Y - BUTTON_HEIGHT - UNRELATED_CONTROLS) ;
		Size = MAP_APPFONT ( BUTTON_WIDTH, BUTTON_HEIGHT ) ;
		TabStop = TRUE ;
		HelpId = HID_DSADMIN_DBASE_INDICIES;
		Text [ en-US ] = "Indexes..." ;
	};
};

//.........................................................................

TabPage PAGE_ADO
{
	SVLook = TRUE ;
	Pos = MAP_APPFONT ( 0, 0 ) ;
	Size = MAP_APPFONT ( PAGE_X, PAGE_Y ) ;
	Hide = TRUE ;
	HelpId = HID_DSADMIN_PAGE_ADO;
	AUTO_CHARSET(UNRELATED_CONTROLS,PAGE_X)
};

//.........................................................................

TabPage PAGE_ODBC
{
	SVLook = TRUE ;
	Pos = MAP_APPFONT ( 0, 0 ) ;
	Size = MAP_APPFONT ( PAGE_X, PAGE_Y ) ;
	Hide = TRUE ;
	HelpId = HID_DSADMIN_PAGE_ODBC;

	AUTO_CHARSET(UNRELATED_CONTROLS,PAGE_X)
	FixedLine FL_SEPARATOR1
	{
		Pos = MAP_APPFONT ( 4, 2*UNRELATED_CONTROLS + 2*FIXEDTEXT_HEIGHT + RELATED_CONTROLS ) ;
		Size = MAP_APPFONT ( PAGE_X - 8, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Optional Settings" ;
	};

	FixedText FT_OPTIONS
	{
		Pos = MAP_APPFONT ( 6, 2*UNRELATED_CONTROLS + 3*FIXEDTEXT_HEIGHT + 2*RELATED_CONTROLS) ;
		Size = MAP_APPFONT ( EDIT_X - 7, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "ODBC ~options" ;
	};
	Edit ET_OPTIONS
	{
		Border = TRUE ;
		Pos = MAP_APPFONT ( EDIT_X, 2*UNRELATED_CONTROLS + 3*FIXEDTEXT_HEIGHT + 2*RELATED_CONTROLS -1 ) ;
		Size = MAP_APPFONT ( 130, EDIT_HEIGHT ) ;
		TabStop = TRUE ;
		HelpId = HID_DSADMIN_ODBC_OPTIONS;
	};

	AUTO_USECATALOG( 3*UNRELATED_CONTROLS + 4*FIXEDTEXT_HEIGHT + 2*RELATED_CONTROLS )
};

TabPage PAGE_ADABAS
{
	SVLook = TRUE ;
	Pos = MAP_APPFONT ( 0, 0 ) ;
	Size = MAP_APPFONT ( PAGE_X, PAGE_Y ) ;
	Hide = TRUE ;
	HelpId = HID_DSADMIN_PAGE_ADABAS;

	FixedLine FL_SEPARATOR1
	{
		Pos = MAP_APPFONT ( 4, UNRELATED_CONTROLS ) ;
		Size = MAP_APPFONT ( PAGE_X - 8, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Connection Settings" ;
	};

	FixedText FT_HOSTNAME
	{
		Pos = MAP_APPFONT ( 6, UNRELATED_CONTROLS + RELATED_CONTROLS + FIXEDTEXT_HEIGHT) ;
		Size = MAP_APPFONT ( EDIT_X - 7, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "~Host name" ;
	};
	Edit ET_HOSTNAME
	{
		HelpID = "dbaccess:Edit:PAGE_ADABAS:ET_HOSTNAME" ;
		TabStop = TRUE ;
		Border = TRUE ;

		Pos = MAP_APPFONT ( EDIT_X, UNRELATED_CONTROLS + RELATED_CONTROLS + FIXEDTEXT_HEIGHT-1 ) ;
		Size = MAP_APPFONT ( 105, EDIT_HEIGHT ) ;
	};

	FixedText FT_CACHE_SIZE
	{
		Pos = MAP_APPFONT ( 6, 2*UNRELATED_CONTROLS + RELATED_CONTROLS + 2*FIXEDTEXT_HEIGHT ) ;
		Size = MAP_APPFONT ( EDIT_X - 7, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Data ~buffer size (MB)" ;
	};
	NumericField NF_CACHE_SIZE
	{
		HelpID = "dbaccess:NumericField:PAGE_ADABAS:NF_CACHE_SIZE" ;
		Pos = MAP_APPFONT ( EDIT_X, 2*UNRELATED_CONTROLS + RELATED_CONTROLS + 2*FIXEDTEXT_HEIGHT -1 ) ;
		Size = MAP_APPFONT ( 40, EDIT_HEIGHT ) ;
		Border = TRUE ;
		TabStop = TRUE ;
		Spin = TRUE ;
		SpinSize = 1;
		StrictFormat = TRUE ;
	};

	FixedText FT_DATA_INCREMENT
	{
		Pos = MAP_APPFONT ( 6, 3*UNRELATED_CONTROLS + RELATED_CONTROLS + 3*FIXEDTEXT_HEIGHT ) ;
		Size = MAP_APPFONT ( EDIT_X - 7, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "~Data increment (MB)" ;
	};
	NumericField NF_DATA_INCREMENT
	{
		HelpID = "dbaccess:NumericField:PAGE_ADABAS:NF_DATA_INCREMENT" ;
		Pos = MAP_APPFONT ( EDIT_X, 3*UNRELATED_CONTROLS + RELATED_CONTROLS + 3*FIXEDTEXT_HEIGHT -1 ) ;
		Size = MAP_APPFONT ( 40, EDIT_HEIGHT ) ;
		Border = TRUE ;
		TabStop = TRUE ;
		Spin = TRUE ;
		SpinSize = 1;
		StrictFormat = TRUE ;
	};
	FixedLine FL_SEPARATOR2
	{
		Pos = MAP_APPFONT ( 6, 4*UNRELATED_CONTROLS + RELATED_CONTROLS + 4*FIXEDTEXT_HEIGHT ) ;
		Size = MAP_APPFONT ( 248, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Administration" ;
	};
	FixedText FT_CTRLUSERNAME
	{
		Pos = MAP_APPFONT ( 6, 4*UNRELATED_CONTROLS + 2*RELATED_CONTROLS + 5*FIXEDTEXT_HEIGHT ) ;
		Size = MAP_APPFONT ( EDIT_X - 7, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Control ~user name" ;
	};
	Edit ET_CTRLUSERNAME
	{
		HelpID = "dbaccess:Edit:PAGE_ADABAS:ET_CTRLUSERNAME" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( EDIT_X, 4*UNRELATED_CONTROLS + 2*RELATED_CONTROLS + 5*FIXEDTEXT_HEIGHT-1 ) ;
		Size = MAP_APPFONT ( 105, EDIT_HEIGHT ) ;
		TabStop = TRUE ;
	};
	FixedText FT_CTRLPASSWORD
	{
		Pos = MAP_APPFONT ( 6, 5*UNRELATED_CONTROLS + 2*RELATED_CONTROLS + 6*FIXEDTEXT_HEIGHT ) ;
		Size = MAP_APPFONT ( EDIT_X - 7, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Control ~password" ;
	};
	Edit ET_CTRLPASSWORD
	{
		HelpID = "dbaccess:Edit:PAGE_ADABAS:ET_CTRLPASSWORD" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( EDIT_X, 5*UNRELATED_CONTROLS + 2*RELATED_CONTROLS + 6*FIXEDTEXT_HEIGHT-1 ) ;
		Size = MAP_APPFONT ( 105, EDIT_HEIGHT) ;
		TabStop = TRUE ;
		PassWord = TRUE ;
	};

	CheckBox CB_SHUTDB
	{
		HelpID = "dbaccess:CheckBox:PAGE_ADABAS:CB_SHUTDB" ;
		Pos = MAP_APPFONT ( 6, 6*UNRELATED_CONTROLS + 2*RELATED_CONTROLS + 7*FIXEDTEXT_HEIGHT ) ;
		Size = MAP_APPFONT ( 248, CHECKBOX_HEIGHT ) ;
		Text [ en-US ] = "~Shut down service when closing %PRODUCTNAME" ;
	};

	PushButton PB_STAT
	{
		HelpID = "dbaccess:PushButton:PAGE_ADABAS:PB_STAT" ;
		Pos = MAP_APPFONT ( PAGE_X - BUTTON_WIDTH - UNRELATED_CONTROLS, PAGE_Y - BUTTON_HEIGHT - UNRELATED_CONTROLS ) ;
		Size = MAP_APPFONT ( BUTTON_WIDTH, BUTTON_HEIGHT ) ;
		Text [ en-US ] = "E~xtended..." ;
	};

	AUTO_CHARSET( 7*UNRELATED_CONTROLS + 2*RELATED_CONTROLS + 7*FIXEDTEXT_HEIGHT + CHECKBOX_HEIGHT, PAGE_X )
};

//.........................................................................
#define MYSQL_YDIST 53
#define MYSQL_FL_Y 8
#define MYSQL_DRIVERCLASS_Y 8

TabPage PAGE_MYSQL_ODBC
{
	HelpID = "dbaccess:TabPage:PAGE_MYSQL_ODBC" ;
	SVLook = TRUE ;
	Pos = MAP_APPFONT ( 0, 0 ) ;
	Size = MAP_APPFONT ( PAGE_X, PAGE_Y ) ;
	Hide = TRUE ;

	AUTO_CHARSET( UNRELATED_CONTROLS, PAGE_X )
};

TabPage PAGE_MYSQL_JDBC
{
	HelpID = "dbaccess:TabPage:PAGE_MYSQL_JDBC" ;
	SVLook = TRUE ;
	Pos = MAP_APPFONT ( 0, 0 ) ;
	Size = MAP_APPFONT ( PAGE_X, PAGE_Y ) ;
	Hide = TRUE ;

	AUTO_FIXEDLINE_CONNSETTINGS( UNRELATED_CONTROLS )
	AUTO_HOST_AND_PORT( UNRELATED_CONTROLS + RELATED_CONTROLS + FIXEDTEXT_HEIGHT )
	AUTO_SOCKETCONTROLGROUP(3*UNRELATED_CONTROLS + RELATED_CONTROLS + 3*FIXEDTEXT_HEIGHT)

	FixedText FT_JDBCDRIVERCLASS
	{
		Pos = MAP_APPFONT ( 6, 4*UNRELATED_CONTROLS + RELATED_CONTROLS + 3*FIXEDTEXT_HEIGHT + EDIT_HEIGHT) ;
		Size = MAP_APPFONT ( EDIT_X - 7, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "MySQL JDBC d~river class" ;
	};
	Edit ET_JDBCDRIVERCLASS
	{
		HelpID = "dbaccess:Edit:PAGE_MYSQL_JDBC:ET_JDBCDRIVERCLASS" ;
		Pos = MAP_APPFONT ( EDIT_X, 4*UNRELATED_CONTROLS + RELATED_CONTROLS + 3*FIXEDTEXT_HEIGHT -1 + EDIT_HEIGHT) ;
		Size = MAP_APPFONT ( 97, EDIT_HEIGHT ) ;
		TabStop = TRUE ;
		Border = TRUE ;
	};
	PushButton PB_TESTDRIVERCLASS
	{
		HelpID = "dbaccess:PushButton:PAGE_MYSQL_JDBC:PB_TESTDRIVERCLASS" ;
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( PAGE_X - BUTTON_WIDTH - UNRELATED_CONTROLS, 4*UNRELATED_CONTROLS + RELATED_CONTROLS + 3*FIXEDTEXT_HEIGHT -2 + EDIT_HEIGHT) ;
		Size = MAP_APPFONT ( BUTTON_WIDTH, BUTTON_HEIGHT ) ;
		Text [ en-US ] = "Test class" ;
	};

	AUTO_CHARSET( 5*UNRELATED_CONTROLS + RELATED_CONTROLS + 4*FIXEDTEXT_HEIGHT+ EDIT_HEIGHT, PAGE_X )
};

TabPage PAGE_MYSQL_NATIVE
{
	HelpID = "dbaccess:TabPage:PAGE_MYSQL_NATIVE" ;
	SVLook = TRUE ;
	Pos = MAP_APPFONT ( 0, 0 ) ;
	Size = MAP_APPFONT ( PAGE_X, PAGE_Y ) ;
	Hide = TRUE ;

	AUTO_FIXEDLINE_CONNSETTINGS( UNRELATED_CONTROLS )

	FixedLine FL_SEPARATOR2
	{
		Pos = MAP_APPFONT ( 3, 4*UNRELATED_CONTROLS + 3*RELATED_CONTROLS + 3*FIXEDTEXT_HEIGHT + 3*EDIT_HEIGHT ) ;
		Size = MAP_APPFONT ( PAGE_X - 6, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "User authentication" ;
	};
	FixedText FT_USERNAME
	{
		Pos = MAP_APPFONT ( 6, 4*UNRELATED_CONTROLS + 4*RELATED_CONTROLS + 4*FIXEDTEXT_HEIGHT + 3*EDIT_HEIGHT ) ;
		Size = MAP_APPFONT ( EDIT_X - 6 - RELATED_CONTROLS, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "~User name" ;
	};
	Edit ET_USERNAME
	{
		HelpID = "dbaccess:Edit:PAGE_MYSQL_NATIVE:ET_USERNAME" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( EDIT_X, 4*UNRELATED_CONTROLS + 4*RELATED_CONTROLS + 4*FIXEDTEXT_HEIGHT + 3*EDIT_HEIGHT - 1 ) ;
		Size = MAP_APPFONT ( 105, EDIT_HEIGHT ) ;
		TabStop = TRUE ;
	};
	CheckBox CB_PASSWORD_REQUIRED
	{
		HelpID = "dbaccess:CheckBox:PAGE_MYSQL_NATIVE:CB_PASSWORD_REQUIRED" ;
		Pos = MAP_APPFONT ( EDIT_X, 4*UNRELATED_CONTROLS + 5*RELATED_CONTROLS + 4*FIXEDTEXT_HEIGHT + 4*EDIT_HEIGHT ) ;
		Size = MAP_APPFONT ( 105, CHECKBOX_HEIGHT ) ;
		Text [ en-US ] = "Password required" ;
	};

	AUTO_CHARSET( 5*UNRELATED_CONTROLS + 5*RELATED_CONTROLS + 5*FIXEDTEXT_HEIGHT + 4*EDIT_HEIGHT, PAGE_X )
};

TabPage PAGE_ORACLE_JDBC
{
	HelpID = "dbaccess:TabPage:PAGE_ORACLE_JDBC" ;
	SVLook = TRUE ;
	Pos = MAP_APPFONT ( 0, 0 ) ;
	Size = MAP_APPFONT ( PAGE_X, PAGE_Y ) ;
	Hide = TRUE ;

	AUTO_FIXEDLINE_CONNSETTINGS( UNRELATED_CONTROLS )
	AUTO_HOST_AND_PORT( UNRELATED_CONTROLS + RELATED_CONTROLS + FIXEDTEXT_HEIGHT )

	AUTO_SOCKETCONTROLGROUP(3*UNRELATED_CONTROLS + RELATED_CONTROLS + 3*FIXEDTEXT_HEIGHT)

	FixedText FT_JDBCDRIVERCLASS
	{
		Pos = MAP_APPFONT ( 6, 4*UNRELATED_CONTROLS + RELATED_CONTROLS + 3*FIXEDTEXT_HEIGHT + EDIT_HEIGHT) ;
		Size = MAP_APPFONT ( EDIT_X - 7, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Oracle JDBC d~river class" ;
	};
	Edit ET_JDBCDRIVERCLASS
	{
		HelpID = "dbaccess:Edit:PAGE_ORACLE_JDBC:ET_JDBCDRIVERCLASS" ;
		Pos = MAP_APPFONT ( EDIT_X, 4*UNRELATED_CONTROLS + RELATED_CONTROLS + 3*FIXEDTEXT_HEIGHT + EDIT_HEIGHT + ( FIXEDTEXT_HEIGHT - EDIT_HEIGHT ) / 2 ) ;
		Size = MAP_APPFONT ( 97, EDIT_HEIGHT ) ;
		TabStop = TRUE ;
		Border = TRUE ;
	};
	PushButton PB_TESTDRIVERCLASS
	{
		HelpID = "dbaccess:PushButton:PAGE_ORACLE_JDBC:PB_TESTDRIVERCLASS" ;
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( PAGE_X - BUTTON_WIDTH - UNRELATED_CONTROLS, 4*UNRELATED_CONTROLS + RELATED_CONTROLS + 3*FIXEDTEXT_HEIGHT + EDIT_HEIGHT + ( FIXEDTEXT_HEIGHT - BUTTON_HEIGHT ) / 2 ) ;
		Size = MAP_APPFONT ( BUTTON_WIDTH, BUTTON_HEIGHT ) ;
		Text [ en-US ] = "Test class" ;
	};

	AUTO_CHARSET( 5*UNRELATED_CONTROLS + RELATED_CONTROLS + 4*FIXEDTEXT_HEIGHT+ EDIT_HEIGHT, PAGE_X )
};

//.........................................................................

TabPage PAGE_LDAP
{
	SVLook = TRUE ;
	Pos = MAP_APPFONT ( 0, 0 ) ;
	Size = MAP_APPFONT ( PAGE_X, PAGE_Y ) ;
	Hide = TRUE ;
	HelpId = HID_DSADMIN_PAGE_LDAP;

	FixedLine FL_SEPARATOR1
	{
		Pos = MAP_APPFONT ( 4, UNRELATED_CONTROLS ) ;
		Size = MAP_APPFONT ( PAGE_X - 8, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Connection Settings" ;
	};

	FixedText FT_BASEDN
	{
		Pos = MAP_APPFONT ( 6, UNRELATED_CONTROLS + RELATED_CONTROLS + FIXEDTEXT_HEIGHT) ;
		Size = MAP_APPFONT ( EDIT_X - 7, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "~Base DN" ;
	};
	Edit ET_BASEDN
	{
		TabStop = TRUE ;
		Border = TRUE ;
		HelpId = HID_DSADMIN_LDAP_BASEDN;

		Pos = MAP_APPFONT ( EDIT_X, UNRELATED_CONTROLS + RELATED_CONTROLS + FIXEDTEXT_HEIGHT -1 ) ;
		Size = MAP_APPFONT ( 105, EDIT_HEIGHT ) ;
	};
	CheckBox CB_USESSL
	{
		Pos = MAP_APPFONT ( 6, 2*UNRELATED_CONTROLS + RELATED_CONTROLS + 2*FIXEDTEXT_HEIGHT) ;
		Size = MAP_APPFONT ( PAGE_X - 12, CHECKBOX_HEIGHT ) ;
		Text [ en-US ] = "Use secure connection (SSL)" ;
		HelpId = HID_DSADMIN_USESSL_LDAP;
	};

	FixedText FT_PORTNUMBER
	{
		Pos = MAP_APPFONT ( 6, 3*UNRELATED_CONTROLS + RELATED_CONTROLS + 2*FIXEDTEXT_HEIGHT + CHECKBOX_HEIGHT) ;
		Size = MAP_APPFONT ( EDIT_X - 7, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "~Port number" ;
	};
	NumericField NF_PORTNUMBER
	{
		TabStop = TRUE ;
		Border = TRUE ;
		HelpId = HID_DSADMIN_LDAP_PORTNUMBER;
		NoThousandSep = TRUE ;

		Pos = MAP_APPFONT ( EDIT_X, 3*UNRELATED_CONTROLS + RELATED_CONTROLS + 2*FIXEDTEXT_HEIGHT-1 + CHECKBOX_HEIGHT) ;
		Size = MAP_APPFONT ( 105, EDIT_HEIGHT ) ;
	};
	FixedText FT_LDAPROWCOUNT
	{
		Pos = MAP_APPFONT ( 6, 4*UNRELATED_CONTROLS + RELATED_CONTROLS + 3*FIXEDTEXT_HEIGHT + CHECKBOX_HEIGHT ) ;
		Size = MAP_APPFONT ( EDIT_X - 7, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Maximum number of ~records" ;
	};
	NumericField NF_LDAPROWCOUNT
	{
		TabStop = TRUE ;
		Border = TRUE ;
		HelpId = HID_DSADMIN_LDAP_ROWCOUNT;
		NoThousandSep = TRUE ;

		Pos = MAP_APPFONT ( EDIT_X, 4*UNRELATED_CONTROLS + RELATED_CONTROLS + 3*FIXEDTEXT_HEIGHT -1 + CHECKBOX_HEIGHT) ;
		Size = MAP_APPFONT ( 105, EDIT_HEIGHT ) ;
	};
};


//.........................................................................

TabPage PAGE_TEXT
{
	SVLook = TRUE ;
	Hide = TRUE ;
	Pos = MAP_APPFONT ( 0, 0 ) ;
	Size = MAP_APPFONT ( PAGE_X, PAGE_Y ) ;
	HelpId = HID_DSADMIN_PAGE_TEXT ;

	AUTO_SEPARATORCONTROLGROUP(UNRELATED_CONTROLS, PAGE_X)

};
//.........................................................................
TabPage PAGE_USERDRIVER
{
	SVLook = TRUE ;
	Pos = MAP_APPFONT ( 0, 0 ) ;
	Size = MAP_APPFONT ( PAGE_X, PAGE_Y ) ;
	Hide = TRUE ;
	HelpId = HID_DSADMIN_PAGE_USERDRIVER;

	FixedText FT_HOSTNAME
	{
		Pos = MAP_APPFONT ( 6, UNRELATED_CONTROLS ) ;
		Size = MAP_APPFONT ( EDIT_X - 7, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "~Hostname" ;
	};
	Edit ET_HOSTNAME
	{
		HelpID = "dbaccess:Edit:PAGE_USERDRIVER:ET_HOSTNAME" ;
		TabStop = TRUE ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( EDIT_X, UNRELATED_CONTROLS -1 ) ;
		Size = MAP_APPFONT ( 105, EDIT_HEIGHT ) ;
	};

	FixedText FT_PORTNUMBER
	{
		Pos = MAP_APPFONT ( 6, 2*UNRELATED_CONTROLS + FIXEDTEXT_HEIGHT) ;
		Size = MAP_APPFONT ( EDIT_X - 7, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "~Port number" ;
	};

	NumericField NF_PORTNUMBER
	{
		HelpID = "dbaccess:NumericField:PAGE_USERDRIVER:NF_PORTNUMBER" ;
		TabStop = TRUE ;
		Border = TRUE ;
		NoThousandSep = TRUE ;

		Pos = MAP_APPFONT ( EDIT_X, 2*UNRELATED_CONTROLS + FIXEDTEXT_HEIGHT -1 ) ;
		Size = MAP_APPFONT ( 105, EDIT_HEIGHT ) ;
	};

	FixedText FT_OPTIONS
	{
		Pos = MAP_APPFONT ( 6, 3*UNRELATED_CONTROLS + 2*FIXEDTEXT_HEIGHT ) ;
		Size = MAP_APPFONT ( EDIT_X - 7, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "~Driver settings" ;
	};
	Edit ET_OPTIONS
	{
		HelpID = "dbaccess:Edit:PAGE_USERDRIVER:ET_OPTIONS" ;
		Border = TRUE ;
		TabStop = TRUE ;
	};
	AUTO_CHARSET( 4*UNRELATED_CONTROLS+ 3*FIXEDTEXT_HEIGHT + RELATED_CONTROLS, PAGE_X)
};

String STR_ERR_USE_CONNECT_TO
{
	Text [ en-US ] = "Please choose 'Connect to an existing database' to connect to an existing database instead." ;
};

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