/**************************************************************
 *
 * 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 "changedb.hrc"
#include "fldui.hrc"

ModalDialog DLG_CHANGE_DB
{
	HelpID = "sw:ModalDialog:DLG_CHANGE_DB" ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 286, 175 ) ;

	Text [ en-US ] = "Exchange Databases" ;
	Moveable = TRUE ;
	FixedLine FL_DBLIST
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 218, 8 ) ;

		Text [ en-US ] = "Exchange databases" ;
	};
	FixedText FT_USEDDB
	{
		Pos = MAP_APPFONT ( 12, 14 ) ;
		Size = MAP_APPFONT ( 90, 8 ) ;
		Left = TRUE ;
		Text [ en-US ] = "Databases in Use" ;
	};
	FixedText FT_AVAILDB
	{
		Pos = MAP_APPFONT ( 118, 14 ) ;
		Size = MAP_APPFONT ( 90, 8 ) ;
		Left = TRUE ;
		Text [ en-US ] = "Available Databases" ;
	};
	Control TLB_USEDDB
	{
		Border = TRUE ;
		Pos = MAP_APPFONT ( 12, 25 ) ;
		Size = MAP_APPFONT ( 100, 62 ) ;
		TabStop = TRUE ;
	};
	Control TLB_AVAILDB
	{
		Border = TRUE ;
		Pos = MAP_APPFONT ( 118, 25 ) ;
		Size = MAP_APPFONT ( 100, 62 ) ;
		TabStop = TRUE ;
	};
	PushButton PB_ADDDB
	{
		HelpID = "sw:PushButton:DLG_CHANGE_DB:PB_ADDDB" ;
		Pos = MAP_APPFONT ( 118, 90 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		Text [ en-US ] = "Browse..." ;
	};
	FixedText FT_DESC
	{
		Pos = MAP_APPFONT ( 12, 110 ) ;
		Size = MAP_APPFONT ( 210, 45 ) ;
		WordBreak = TRUE ;
		Left = TRUE ;
		Text [ en-US ] = "Use this dialog to replace the databases you access in your document via database fields, with other databases. You can only make one change at a time. Multiple selection is possible in the list on the left.\nUse the browse button to select a database file." ;
	};
	FixedLine FL_APPLDB
	{
		Pos = MAP_APPFONT ( 6, 154 ) ;
		Size = MAP_APPFONT ( 274, 8 ) ;
	};
	FixedText FT_DOCDBTEXT
	{
		Pos = MAP_APPFONT ( 6, 162 ) ;
		Size = MAP_APPFONT ( 106, 8 ) ;
		Left = TRUE ;
		Text [ en-US ] = "Database applied to document:" ;
	};
	FixedText FT_DOCDBNAME
	{
		Pos = MAP_APPFONT ( 118, 162 ) ;
		Size = MAP_APPFONT ( 162, 8 ) ;
		Left = TRUE ;
		Text [ en-US ] = "Addresses.Addresses" ;
	};
	OKButton BT_OK
	{
		Pos = MAP_APPFONT ( 230, 6 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
		Disable = TRUE ;
		TabStop = TRUE ;
		Text [ en-US ] = "Define" ;
	};
	CancelButton BT_CANCEL
	{
		Pos = MAP_APPFONT ( 230, 23 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "~Close" ;
	};
	HelpButton BT_HELP
	{
		Pos = MAP_APPFONT ( 230, 43 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
};

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