/**************************************************************
 *
 * 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_DBADMIN_HRC_
#include "dbadmin.hrc"
#endif
#ifndef DBACCESS_UI_BROWSER_ID_HXX
#include "browserids.hxx"
#endif
#ifndef DBAUI_TOOLBOX_HXX
#include "toolbox.hrc"
#endif
#ifndef _DBAUI_AUTOCONTROLS_HRC_
#include "AutoControls.hrc"
#endif

//.........................................................................

String STR_ENTER_CONNECTION_PASSWORD
{
	Text [ en-US ] = "A password is needed to connect to the data source \"$name$\"." ;
};

String STR_ASK_FOR_DIRECTORY_CREATION
{
	Text [ en-US ] = "The directory\n\n$path$\n\ndoes not exist. Should it be created?" ;
};

String STR_COULD_NOT_CREATE_DIRECTORY
{
	Text [ en-US ] = "The directory $name$ could not be created." ;
};

#define EDIT_SIZE_X		50
#define FT_SIZE_X		90
#define WIN_X			220
#define WIN_Y			72

ModalDialog DLG_DOMAINPASSWORD
{
	HelpID = "dbaccess:ModalDialog:DLG_DOMAINPASSWORD" ;
	Border = TRUE ;
	Moveable = TRUE ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( WIN_X, WIN_Y ) ;
	Text [ en-US ] = "Convert Database" ;

	FixedLine FT_PASSWORD
	{
		Pos = MAP_APPFONT ( 3, 3 ) ;
		Size = MAP_APPFONT ( WIN_X - 3 - 6 - 6 - 50, 8 ) ;
		Text [ en-US ] = "Please enter the ~password for the user 'DOMAIN'." ;
	};

	Edit ET_PASSWORD
	{
		HelpID = "dbaccess:Edit:DLG_DOMAINPASSWORD:ET_PASSWORD" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 12 + FT_SIZE_X, 16 ) ;
		Size = MAP_APPFONT ( EDIT_SIZE_X, 12 ) ;
		PassWord = TRUE ;
	};
	OKButton BTN_PASSWORD_OK
	{
		Pos = MAP_APPFONT ( WIN_X - 56, 6 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		DefButton = TRUE ;
	};
	CancelButton BTN_PASSWORD_CANCEL
	{
		Pos = MAP_APPFONT ( WIN_X - 56, 23 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
	};
	HelpButton BTN_PASSWORD_HELP
	{
		Pos = MAP_APPFONT ( WIN_X - 56, 43 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
	};
};

#define PAGE_X_T (PAGE_X -80)
#define PAGE_Y_T (PAGE_Y -50)

TabPage PAGE_TABLESUBSCRIPTION
{
	SVLook = TRUE ;
	Hide = TRUE ;
	Pos = MAP_APPFONT ( 0, 0 ) ;
	Size = MAP_APPFONT ( PAGE_X_T, PAGE_Y_T) ;
	HelpId = HID_DSADMIN_TABLE_SUBSCRIPTION ;

	Text [ en-US ] = "Tables Filter" ;

	FixedLine FL_SEPARATOR1
	{
		Pos = MAP_APPFONT ( RELATED_CONTROLS, UNRELATED_CONTROLS ) ;
		Size = MAP_APPFONT ( PAGE_X_T - 2* RELATED_CONTROLS, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "Tables and table filter" ;
	};
	Control CTL_TABLESUBSCRIPTION
	{
		Pos = MAP_APPFONT ( UNRELATED_CONTROLS, UNRELATED_CONTROLS + FIXEDTEXT_HEIGHT + RELATED_CONTROLS) ;
		Size = MAP_APPFONT ( PAGE_X_T - 2 * UNRELATED_CONTROLS, 81 ) ;
		Group = TRUE ;
		Border = TRUE ;
		TabStop = TRUE ;
		HelpId = HID_DSADMIN_TABLE_SELECTOR ;
	};
	FixedText FT_FILTER_EXPLANATION
	{
		Pos = MAP_APPFONT ( UNRELATED_CONTROLS, 2 * UNRELATED_CONTROLS + FIXEDTEXT_HEIGHT + RELATED_CONTROLS + 81 ) ;
		Size = MAP_APPFONT ( PAGE_X_T - 2 * UNRELATED_CONTROLS, 16 ) ;
		HelpId = HID_DSADMIN_FILTER_EXPLANATION ;
		WordBreak = TRUE ;
		Text [ en-US ] = "Mark the tables that should be visible for the applications." ;
	};
};

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