/**************************************************************
 *
 * 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 <cuires.hrc>
#ifndef _SVX_DOCLINKDIALOG_HRC_
#include "doclinkdialog.hrc"
#endif

#define DIALOG_SIZE_X		200
#define DIALOG_SIZE_Y		94
#define BUTTON_SIZE_X		50
#define BUTTON_SIZE_Y		14

#define LABEL_WIDTH			50

#define HEIGHT_LABEL		 8
#define HEIGHT_EDIT			12

#define LINE_1_Y			6
#define LINE_2_Y			LINE_1_Y + HEIGHT_EDIT + 4
#define OFFSET_Y			6

ModalDialog DLG_DOCUMENTLINK
{
	HelpID = "cui:ModalDialog:DLG_DOCUMENTLINK" ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( DIALOG_SIZE_X, DIALOG_SIZE_Y ) ;

	Moveable = TRUE ;
	Closeable = TRUE ;

	FixedText FT_URL
	{

		Pos = MAP_APPFONT ( 6, LINE_1_Y ) ;
		Size = MAP_APPFONT ( DIALOG_SIZE_X - 6, HEIGHT_LABEL ) ;
		Group = TRUE ;

		Text [ en-US ] = "~Database file" ;
	};
	ComboBox CMB_URL
	{
		HelpID = "cui:ComboBox:DLG_DOCUMENTLINK:CMB_URL" ;
		Pos = MAP_APPFONT ( 6, LINE_1_Y + OFFSET_Y + HEIGHT_LABEL - 3) ;
		Size = MAP_APPFONT ( DIALOG_SIZE_X - 3*LINE_1_Y - BUTTON_SIZE_X, HEIGHT_EDIT ) ;

		SVLook = TRUE ;
		Border = TRUE ;
		DropDown = TRUE ;
		AutoHScroll = TRUE ;
		TabStop = TRUE ;
	};
	PushButton PB_BROWSEFILE
	{
		HelpID = "cui:PushButton:DLG_DOCUMENTLINK:PB_BROWSEFILE" ;
		Pos = MAP_APPFONT ( DIALOG_SIZE_X - BUTTON_SIZE_X - 6, LINE_1_Y + OFFSET_Y + HEIGHT_LABEL - 4) ;
		Size = MAP_APPFONT ( BUTTON_SIZE_X, BUTTON_SIZE_Y ) ;
		Text [ en-US ] = "~Browse..." ;
	};

	FixedText FT_NAME
	{
		Pos = MAP_APPFONT ( 6, LINE_1_Y + 2*OFFSET_Y + HEIGHT_LABEL + BUTTON_SIZE_Y - 3) ;
		Size = MAP_APPFONT ( DIALOG_SIZE_X - 6, HEIGHT_LABEL ) ;
		Group = TRUE ;

		Text [ en-US ] = "Registered ~name" ;
	};
	Edit ET_NAME
	{
		HelpID = "cui:Edit:DLG_DOCUMENTLINK:ET_NAME" ;
		Pos = MAP_APPFONT ( 6, LINE_1_Y + 3*OFFSET_Y + 2*HEIGHT_LABEL + BUTTON_SIZE_Y - 6) ;
		Size = MAP_APPFONT ( DIALOG_SIZE_X - 3*LINE_1_Y - BUTTON_SIZE_X, HEIGHT_EDIT ) ;
		TabStop = TRUE ;
		Border = TRUE ;
	};

	FixedLine FL_BOTTOM
	{
		Pos = MAP_APPFONT ( 4, LINE_1_Y + 4*OFFSET_Y + 2*HEIGHT_LABEL + BUTTON_SIZE_Y + HEIGHT_EDIT - 6) ;
		Size = MAP_APPFONT ( DIALOG_SIZE_X - 8, 8 ) ;
	};

	OKButton BTN_OK
	{
		Pos = MAP_APPFONT ( DIALOG_SIZE_X - 3 * ( BUTTON_SIZE_X + 3 ) - 6, DIALOG_SIZE_Y - 6 - BUTTON_SIZE_Y ) ;
		Size = MAP_APPFONT ( BUTTON_SIZE_X, BUTTON_SIZE_Y ) ;
		DefButton = TRUE ;
	};
	CancelButton BTN_CANCEL
	{
		Pos = MAP_APPFONT ( DIALOG_SIZE_X - 2 * ( BUTTON_SIZE_X + 3 ) - 6, DIALOG_SIZE_Y - 6 - BUTTON_SIZE_Y ) ;
		Size = MAP_APPFONT ( BUTTON_SIZE_X, BUTTON_SIZE_Y ) ;
	};
	HelpButton BTN_HELP
	{
		Pos = MAP_APPFONT ( DIALOG_SIZE_X - 1 * ( BUTTON_SIZE_X + 3 ) - 3, DIALOG_SIZE_Y - 6 - BUTTON_SIZE_Y ) ;
		Size = MAP_APPFONT ( BUTTON_SIZE_X, BUTTON_SIZE_Y ) ;
	};

	String STR_EDIT_LINK
	{
		Text [ en-US ] = "Edit Database Link" ;
	};
	String STR_NEW_LINK
	{
		Text [ en-US ] = "Create Database Link" ;
	};
};

String STR_LINKEDDOC_DOESNOTEXIST
{
	Text [ en-US ] = "The file\n$file$\ndoes not exist." ;
};

String STR_LINKEDDOC_NO_SYSTEM_FILE
{
	Text [ en-US ] = "The file\n$file$\ndoes not exist in the local file system." ;
};

String STR_NAME_CONFLICT
{
	Text [ en-US ] = "The name '$file$' is already used for another database.\nPlease choose a different name." ;
};

QueryBox QUERY_DELETE_CONFIRM
{
	Buttons = WB_YES_NO ;
	Message [ en-US ] = "Do you want to delete the entry?" ;
};

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