/**************************************************************
 *
 * 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.
 *
 *************************************************************/



#include "connpooloptions.hrc"
#include <cuires.hrc>

#define PAGE_SIZE_X		260
#define PAGE_SIZE_Y		185

#define LIST_SIZE_Y		100

TabPage RID_OFAPAGE_CONNPOOLOPTIONS
{
	HelpID = "cui:TabPage:RID_OFAPAGE_CONNPOOLOPTIONS" ;
	OutputSize = TRUE ;
	Size = MAP_APPFONT ( PAGE_SIZE_X, PAGE_SIZE_Y ) ;
	SVLook = TRUE ;
	Hide = TRUE ;

	FixedLine FL_POOLING
	{
		Pos = MAP_APPFONT ( 4, 3 ) ;
		Size = MAP_APPFONT ( PAGE_SIZE_X - 8, 8 ) ;
		Text [ en-US ] = "Connection pool" ;
	};
	CheckBox CB_POOL_CONNS
	{
		HelpID = "cui:CheckBox:RID_OFAPAGE_CONNPOOLOPTIONS:CB_POOL_CONNS" ;
		Pos = MAP_APPFONT ( 7, 15 ) ;
		Size = MAP_APPFONT ( PAGE_SIZE_X - 14, 10 ) ;
		Text [ en-US ] = "Connection pooling enabled" ;
	};
	FixedText FT_DRIVERS
	{
		Pos = MAP_APPFONT ( 17, 28 ) ;
		Size = MAP_APPFONT ( PAGE_SIZE_X - 14 - 8, 8 ) ;
		Text [ en-US ] = "Drivers known in %PRODUCTNAME" ;
	};
	Control CTRL_DRIVER_LIST
	{
		Pos = MAP_APPFONT ( 17, 39 ) ;
		Size = MAP_APPFONT ( PAGE_SIZE_X - 14 - 8, LIST_SIZE_Y ) ;
		TabStop = TRUE ;
		Border = TRUE ;
		SVLook = TRUE ;
	};
	FixedText FT_DRIVERLABEL
	{
		Pos = MAP_APPFONT ( 17, 39 + LIST_SIZE_Y + 4 ) ;
		Size = MAP_APPFONT ( 70, 8 ) ;
		Text [ en-US ] = "Current driver:" ;
	};
	FixedText FT_DRIVER
	{
		Pos = MAP_APPFONT ( 17 + 70 + 3, 39 + LIST_SIZE_Y + 4 ) ;
		Size = MAP_APPFONT ( PAGE_SIZE_X - ( 15 + 70 + 3 ) - 7, 8 ) ;
	};
	CheckBox CB_DRIVERPOOLING
	{
		HelpID = "cui:CheckBox:RID_OFAPAGE_CONNPOOLOPTIONS:CB_DRIVERPOOLING" ;
		Pos = MAP_APPFONT ( 17, 39 + LIST_SIZE_Y + 4 + 8 + 3 ) ;
		Size = MAP_APPFONT ( PAGE_SIZE_X - 23, 10 ) ;
		Text [ en-US ] = "Enable pooling for this driver" ;
	};
	FixedText FT_TIMEOUT
	{
		Pos = MAP_APPFONT ( 27, 39 + LIST_SIZE_Y + 4 + 8 + 3 + 10 + 3 + 2 ) ;
		Size = MAP_APPFONT ( 100, 8 ) ;
		Text [ en-US ] = "Timeout (seconds)" ;
	};
	NumericField NF_TIMEOUT
	{
		HelpID = "cui:NumericField:RID_OFAPAGE_CONNPOOLOPTIONS:NF_TIMEOUT" ;
		Pos = MAP_APPFONT ( 27 + 100 + 3, 39 + LIST_SIZE_Y + 4 + 8 + 3 + 10 + 3 ) ;
		Size = MAP_APPFONT ( 40, 12 ) ;
		SvLook = TRUE ;
		Border = TRUE ;
		Right = TRUE ;
		Spin = TRUE ;
		Repeat = TRUE ;
		Minimum = 30 ;
		Maximum = 600 ;
		StrictFormat = TRUE ;
		DecimalDigits = 0 ;
		SpinSize = 1 ;
	};

	String STR_DRIVER_NAME
	{
		Text [ en-US ] = "Driver name" ;
	};
	String STR_POOLED_FLAG
	{
		Text [ en-US ] = "Pool" ;
	};
	String STR_POOL_TIMEOUT
	{
		Text [ en-US ] = "Timeout" ;
	};
	String STR_YES
	{
		Text [ en-US ] = "Yes" ;
	};
	String STR_NO
	{
		Text [ en-US ] = "No" ;
	};
};

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