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



#define __RSC

#ifndef UUI_IDS_HRC
#include "ids.hrc"
#endif

#ifndef UUI_NAMECLASHDLG_HRC
#include "nameclashdlg.hrc"
#endif

#define DLG_WIDTH		250
#define DLG_HEIGTH		75
#define BORDER_OFFSET	6
#define EDIT_HEIGTH		12
#define BTN_WIDTH		50
#define BTN_HEIGTH		14

ModalDialog DLG_SIMPLE_NAME_CLASH
{
	HelpId = HID_DLG_SIMPLE_NAME_CLASH ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( DLG_WIDTH, DLG_HEIGTH ) ;
	Moveable = TRUE ;
	Text [ en-US ] = "File Exists" ;

	FixedText FT_FILE_EXISTS_WARNING
	{
		Pos = MAP_APPFONT ( BORDER_OFFSET, BORDER_OFFSET ) ;
		Size = MAP_APPFONT ( DLG_WIDTH - 2*BORDER_OFFSET, DLG_HEIGTH - EDIT_HEIGTH - BTN_HEIGTH - 4 * BORDER_OFFSET ) ;
		WordBreak = TRUE ;
	};

	Edit EDIT_NEW_NAME
	{
		HelpID = "uui:Edit:DLG_SIMPLE_NAME_CLASH:EDIT_NEW_NAME" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( BORDER_OFFSET, DLG_HEIGTH - EDIT_HEIGTH - BTN_HEIGTH - 2 * BORDER_OFFSET ) ;
		Size = MAP_APPFONT ( DLG_WIDTH - 2 * BORDER_OFFSET, EDIT_HEIGTH ) ;
	};

	PushButton BTN_OVERWRITE
	{
		HelpID = "uui:PushButton:DLG_SIMPLE_NAME_CLASH:BTN_OVERWRITE" ;
		Pos = MAP_APPFONT ( DLG_WIDTH - 3 * (BTN_WIDTH + BORDER_OFFSET), DLG_HEIGTH - BTN_HEIGTH - BORDER_OFFSET ) ;
		Size = MAP_APPFONT ( BTN_WIDTH, BTN_HEIGTH ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Replace" ;
	};

	PushButton BTN_RENAME
	{
		HelpID = "uui:PushButton:DLG_SIMPLE_NAME_CLASH:BTN_RENAME" ;
		Pos = MAP_APPFONT ( DLG_WIDTH - 2 * (BTN_WIDTH + BORDER_OFFSET), DLG_HEIGTH - BTN_HEIGTH - BORDER_OFFSET ) ;
		Size = MAP_APPFONT ( BTN_WIDTH, BTN_HEIGTH ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Rename" ;
		DefButton = TRUE ;
	};

	CancelButton BTN_CANCEL
	{
		Pos = MAP_APPFONT ( DLG_WIDTH - BTN_WIDTH - BORDER_OFFSET, DLG_HEIGTH - BTN_HEIGTH - BORDER_OFFSET ) ;
		Size = MAP_APPFONT ( BTN_WIDTH, BTN_HEIGTH ) ;
		TabStop = TRUE ;
	};

	HelpButton BTN_HELP
	{
		Pos = MAP_APPFONT ( BORDER_OFFSET, DLG_HEIGTH - BTN_HEIGTH - BORDER_OFFSET ) ;
		Size = MAP_APPFONT ( BTN_WIDTH, BTN_HEIGTH ) ;
		TabStop = TRUE ;
	};
};

String STR_RENAME_OR_REPLACE
{
	Text = "A file with the name \"%NAME\" already exists in the location \"%FOLDER\".\nChoose Replace to overwrite the existing file or provide a new name." ;
};

String STR_NAME_CLASH_RENAME_ONLY
{
	Text = "A file with the name \"%NAME\" already exists in the location \"%FOLDER\".\nPlease enter a new name." ;
};

String STR_SAME_NAME_USED
{
	Text = "Please provide a different file name!" ;
};

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