/**************************************************************
 *
 * 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 _DBACCESS_UI_DIRECTSQL_HRC_
#include "directsql.hrc"
#endif
#ifndef _DBU_DLG_HRC_
#include "dbu_dlg.hrc"
#endif

#define BUTTON_SIZE_X		50
#define BUTTON_SIZE_Y		14

#define WINDOW_SIZE_X		200
#define WINDOW_SIZE_Y		210 + BUTTON_SIZE_Y + BUTTON_SIZE_Y

ModalDialog DLG_DIRECTSQL
{
	HelpID = "dbaccess:ModalDialog:DLG_DIRECTSQL" ;
	OutputSize	= TRUE ;
	Moveable	= TRUE ;
	Closeable	= TRUE ;
	SVLook		= TRUE ;
	Size		= MAP_APPFONT ( WINDOW_SIZE_X, WINDOW_SIZE_Y ) ;

	FixedLine FL_SQL
	{
		Pos = MAP_APPFONT ( 4, 3 ) ;
		Size = MAP_APPFONT ( WINDOW_SIZE_X - 8, 8 ) ;
		Text [ en-US ] = "SQL command" ;
	};
	FixedText FT_SQL
	{
		Pos = MAP_APPFONT ( 7, 15 ) ;
		Size = MAP_APPFONT ( WINDOW_SIZE_X - 14, 8 ) ;
		Text [ en-US ] = "Command to execute" ;
	};
	MultiLineEdit ME_SQL
	{
		HelpID = "dbaccess:MultiLineEdit:DLG_DIRECTSQL:ME_SQL" ;
		Pos = MAP_APPFONT ( 7, 26 ) ;
		Size = MAP_APPFONT ( WINDOW_SIZE_X - 14, 80 ) ;
		SVLook = TRUE ;
		Border = TRUE ;
		TabStop = TRUE ;
		IgnoreTab = TRUE ;
	};
	PushButton PB_EXECUTE
	{
		HelpID = "dbaccess:PushButton:DLG_DIRECTSQL:PB_EXECUTE" ;
		Pos = MAP_APPFONT ( WINDOW_SIZE_X - BUTTON_SIZE_X - 7, 109 ) ;
		Size = MAP_APPFONT ( BUTTON_SIZE_X, BUTTON_SIZE_Y ) ;
		Text [ en-US ] = "Execute" ;
		DefButton = TRUE ;
	};
	FixedText FT_HISTORY
	{
		Pos = MAP_APPFONT ( 7, 110 + BUTTON_SIZE_Y + 3 ) ;
		Size = MAP_APPFONT ( WINDOW_SIZE_X - 14, 8 ) ;
		Text [ en-US ] = "Previous commands" ;
	};
	ListBox LB_HISTORY
	{
		HelpID = "dbaccess:ListBox:DLG_DIRECTSQL:LB_HISTORY" ;
		Pos = MAP_APPFONT ( 7, 121 + BUTTON_SIZE_Y + 3 ) ;
		Size = MAP_APPFONT ( WINDOW_SIZE_X - 14, 14 ) ;
		SvLook = TRUE ;
		DropDown = TRUE ;
		Border = TRUE ;
	};
	FixedLine FL_STATUS
	{
		Pos = MAP_APPFONT ( 4, 138 + BUTTON_SIZE_Y + 4 ) ;
		Size = MAP_APPFONT ( WINDOW_SIZE_X - 8, 8 ) ;
		Text [ en-US ] = "Status" ;
	};
	MultiLineEdit ME_STATUS
	{
		HelpID = "dbaccess:MultiLineEdit:DLG_DIRECTSQL:ME_STATUS" ;
		Pos = MAP_APPFONT ( 7, 153 + BUTTON_SIZE_Y ) ;
		Size = MAP_APPFONT ( WINDOW_SIZE_X - 14, 41 ) ;
		Border = TRUE ;
		ReadOnly = TRUE ;
		VScroll = TRUE ;
	};
	FixedLine FL_BUTTONS
	{
		Pos = MAP_APPFONT ( 4, 193 + BUTTON_SIZE_Y + 4 ) ;
		Size = MAP_APPFONT ( WINDOW_SIZE_X - 8, 8 ) ;
	};
	HelpButton PB_HELP
	{
		Pos = MAP_APPFONT ( WINDOW_SIZE_X - 7 - BUTTON_SIZE_X - 3 - BUTTON_SIZE_X, 207 + BUTTON_SIZE_Y ) ;
		Size = MAP_APPFONT ( BUTTON_SIZE_X, BUTTON_SIZE_Y ) ;
	};
	PushButton PB_CLOSE
	{
		HelpID = "dbaccess:PushButton:DLG_DIRECTSQL:PB_CLOSE" ;
		Pos = MAP_APPFONT ( WINDOW_SIZE_X - 7 - BUTTON_SIZE_X, 207 + BUTTON_SIZE_Y ) ;
		Size = MAP_APPFONT ( BUTTON_SIZE_X, BUTTON_SIZE_Y ) ;
		Text [ en-US ] = "Close" ;
	};

	Text [ en-US ]	= "Execute SQL Statement" ;
};

String STR_COMMAND_EXECUTED_SUCCESSFULLY
{
	Text [ en-US ] = "Command successfully executed." ;
};

String STR_DIRECTSQL_CONNECTIONLOST
{
	Text [ en-US ] = "The connection to the database has been lost. This dialog will be closed." ;
};

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