/**************************************************************
 *
 * 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_SQLMESSAGE_HRC_
#include "sqlmessage.hrc"
#endif

//-------------------------------------------------------------------------
Image BMP_EXCEPTION_ERROR
{
	ImageBitmap = Bitmap {File = "exerror.png" ;} ;
};

Image BMP_EXCEPTION_WARNING
{
	ImageBitmap = Bitmap {File = "exwarning.png" ;} ;
};

Image BMP_EXCEPTION_INFO
{
	ImageBitmap = Bitmap {File = "exinfo.png" ;} ;
};
Image BMP_EXCEPTION_ERROR_SCH
{
	ImageBitmap = Bitmap {File = "exerror_sch.png" ;} ;
};

Image BMP_EXCEPTION_WARNING_SCH
{
	ImageBitmap = Bitmap {File = "exwarning_sch.png" ;} ;
};

Image BMP_EXCEPTION_INFO_SCH
{
	ImageBitmap = Bitmap {File = "exinfo_sch.png" ;} ;
};

ModalDialog DLG_SQLEXCEPTIONCHAIN
{
	HelpID = "dbaccess:ModalDialog:DLG_SQLEXCEPTIONCHAIN" ;
	Moveable = TRUE ;
	Closeable = TRUE ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 240, 150 ) ;
	Text [ en-US ] = "%PRODUCTNAME Base" ;

	FixedLine FL_DETAILS
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 228, 8 ) ;
		Text [ en-US ] = "Details" ;
	};
	FixedText FT_ERRORLIST
	{
		Pos = MAP_APPFONT ( 12, 12 ) ;
		Size = MAP_APPFONT ( 85, 10 ) ;
		Text [ en-US ] = "Error ~list:" ;
		Group = TRUE ;
	};
	Control CTL_ERRORLIST
	{
		Pos = MAP_APPFONT ( 12, 25 ) ;
		Size = MAP_APPFONT ( 85, 93 ) ;
		Border = TRUE ;
		TabStop = TRUE ;
		HelpId = HID_SQLERROR_EXCHAIN_ERRORS ;
	};
	FixedText FT_DESCRIPTION
	{
		Pos = MAP_APPFONT ( 103, 12 ) ;
		Size = MAP_APPFONT ( 125, 10 ) ;
		Text [ en-US ] = "~Description:" ;
		Group = TRUE ;
	};
	MultiLineEdit ME_DESCRIPTION
	{
		Border = TRUE ;
		Pos = MAP_APPFONT ( 103, 25 ) ;
		Size = MAP_APPFONT ( 125, 93 ) ;
		TabStop = TRUE ;
		VScroll = TRUE ;
		HelpId = HID_SQLERROR_EXCHAIN_TEXT ;
	};
	OKButton PB_OK
	{
		Pos = MAP_APPFONT ( 95, 130 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
	};

	String STR_EXCEPTION_STATUS
	{
		Text [ en-US ] = "SQL Status" ;
	};
	String STR_EXCEPTION_ERRORCODE
	{
		Text [ en-US ] = "Error code" ;
	};
};

String STR_EXPLAN_STRINGCONVERSION_ERROR
{
	Text [ en-US ] = "A frequent reason for this error is an inappropriate character set setting for the language of your database. Check the setting by choosing Edit - Database - Properties." ;
};

String STR_EXCEPTION_ERROR
{
	Text [ en-US ] = "Error" ;
};

String STR_EXCEPTION_WARNING
{
	Text [ en-US ] = "Warning" ;
};

String STR_EXCEPTION_INFO
{
	Text [ en-US ] = "Information" ;
};

String STR_EXCEPTION_DETAILS
{
	Text [ en-US ] = "Details" ;
};

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