/**************************************************************
 * 
 * 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.";
};

