/**************************************************************
 *
 * 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 _DBU_DLG_HRC_
#include "dbu_dlg.hrc"
#endif
#ifndef DBAUI_CONNECTIONPAGE_HRC
#include "ConnectionPage.hrc"
#endif
#ifndef _DBAUI_AUTOCONTROLS_HRC_
#include "AutoControls.hrc"
#endif

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

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


	AUTO_BROWSECONTROLGROUP ( 6, UNRELATED_CONTROLS + FIXEDTEXT_HEIGHT + RELATED_CONTROLS, PAGE_X, HID_DSADMIN_URL_GENERAL, HID_DSADMIN_BROWSECONN )


	FixedText FT_NO_ADDITIONAL_SETTINGS
	{
		Hide = TRUE ;
		WordBreak = TRUE ;
		Pos = MAP_APPFONT ( 6, UNRELATED_CONTROLS + FIXEDTEXT_HEIGHT + RELATED_CONTROLS ) ;
		Size = MAP_APPFONT ( PAGE_X - 12, 3 * FIXEDTEXT_HEIGHT ) ;
	};


	FixedText FT_HOSTNAME
	{
		Hide = TRUE ;
		Pos = MAP_APPFONT ( 6, UNRELATED_CONTROLS + FIXEDTEXT_HEIGHT + RELATED_CONTROLS ) ;
		Size = MAP_APPFONT ( PAGE_X - 12, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "~Host name" ;
	};


	FixedLine FL_SEPARATOR2
	{
		Pos = MAP_APPFONT ( 4, 3 * FIXEDTEXT_HEIGHT + 3 * UNRELATED_CONTROLS + RELATED_CONTROLS ) ;
		Size = MAP_APPFONT ( PAGE_X - 8, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "User authentication" ;
	};

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

	FixedLine FL_SEPARATOR3
	{
		Pos = MAP_APPFONT ( 4, 5 * UNRELATED_CONTROLS + 5 * FIXEDTEXT_HEIGHT + 2 * RELATED_CONTROLS + CHECKBOX_HEIGHT ) ;

		Size = MAP_APPFONT ( PAGE_X - 8, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "JDBC properties" ;
	};

	FixedText FT_JDBCDRIVERCLASS
	{
		Pos = MAP_APPFONT ( 6, 5 * UNRELATED_CONTROLS + 6 * FIXEDTEXT_HEIGHT + 3 * RELATED_CONTROLS + CHECKBOX_HEIGHT ) ;

		Size = MAP_APPFONT ( 90 - 12, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "~JDBC driver class" ;
	};
	Edit ET_JDBCDRIVERCLASS
	{
		Border = TRUE ;
		Pos = MAP_APPFONT ( 90, 5 * UNRELATED_CONTROLS + 6 * FIXEDTEXT_HEIGHT + 3 * RELATED_CONTROLS + CHECKBOX_HEIGHT - 1 ) ;
		Size = MAP_APPFONT ( 105, EDIT_HEIGHT ) ;
		TabStop = TRUE ;
		HelpId = HID_DSADMIN_DRIVERCLASS ;
	};

	PushButton PB_TESTDRIVERCLASS
	{
		HelpID = "dbaccess:PushButton:PAGE_CONNECTION:PB_TESTDRIVERCLASS" ;
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( PAGE_X - BUTTON_WIDTH - UNRELATED_CONTROLS, 5 * UNRELATED_CONTROLS + 6 * FIXEDTEXT_HEIGHT + 3 * RELATED_CONTROLS + CHECKBOX_HEIGHT - 2 ) ;
		Size = MAP_APPFONT ( BUTTON_WIDTH, BUTTON_HEIGHT ) ;
		Text [ en-US ] = "Test Class" ;
	};

	PushButton PB_TESTCONNECTION
	{
		HelpID = "dbaccess:PushButton:PAGE_CONNECTION:PB_TESTCONNECTION" ;
		Pos = MAP_APPFONT ( PAGE_X - 75 - UNRELATED_CONTROLS, PAGE_Y - BUTTON_HEIGHT - UNRELATED_CONTROLS ) ;
		Size = MAP_APPFONT ( 75, BUTTON_HEIGHT ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Test Connection" ;
	};

};

String STR_NO_ADABASE_DATASOURCES
{
	Text [ en-US ] = "No Adabas D data sources were found on your system." ;
};

String STR_CONNECTION_TEST
{
	Text [ en-US ] = "Connection Test" ;
};

String STR_CONNECTION_SUCCESS
{
	Text [ en-US ] = "The connection was established successfully." ;
};

String STR_CONNECTION_NO_SUCCESS
{
	Text [ en-US ] = "The connection could not be established." ;
};

String STR_JDBCDRIVER_SUCCESS
{
	Text [ en-US ] = "The JDBC driver was loaded successfully." ;
};

String STR_JDBCDRIVER_NO_SUCCESS
{
	Text [ en-US ] = "The JDBC driver could not be loaded." ;
};

String STR_MSACCESS_FILTERNAME
{
	Text [ en-US ] = "MS Access file" ;
};

String STR_MSACCESS_2007_FILTERNAME
{
	Text [ en-US ] = "MS Access 2007 file" ;
};

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