/**************************************************************
 *
 * 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 _DBU_DLG_HRC_
#include "dbu_dlg.hrc"
#endif
#include "dbaccess_helpid.hrc"
#include "CollectionView.hrc"

#define WIN_X 200
#define WIN_Y 192

#define CHECKBOX_HEIGHT		8
#define FIXEDTEXT_HEIGHT	8
#define RELATED_CONTROLS	4
#define UNRELATED_CONTROLS	7
#define EDIT_HEIGHT			12
#define BUTTON_HEIGHT		14
#define FIXEDLINE_HEIGHT	1
#define IMG_SIZE			15


ModalDialog DLG_COLLECTION_VIEW
{
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Moveable = TRUE ;
	Closeable = TRUE ;
	//Sizeable = TRUE ;
	HelpId = HID_EXPLORERDLG_COLLECTION ;

	Size = MAP_APPFONT ( WIN_X, WIN_Y ) ;
	Text [ en-US ] = "Save" ;

	FixedText FT_EXPLORERFILE_CURRENTPATH
	{
		Pos = MAP_APPFONT ( UNRELATED_CONTROLS, UNRELATED_CONTROLS ) ;
		Size = MAP_APPFONT ( 100, FIXEDTEXT_HEIGHT ) ;
		NoLabel = TRUE ;
	};
	ImageButton BTN_EXPLORERFILE_NEWFOLDER
	{
		HelpID = "dbaccess:ImageButton:DLG_COLLECTION_VIEW:BTN_EXPLORERFILE_NEWFOLDER" ;
		TabStop = FALSE ;
		Pos = MAP_APPFONT ( WIN_X - UNRELATED_CONTROLS - RELATED_CONTROLS - 2 * IMG_SIZE, UNRELATED_CONTROLS ) ;
		Size = MAP_APPFONT ( IMG_SIZE, IMG_SIZE ) ;
		QuickHelpText [ en-US ] = "Create New Directory" ;
	};
	ImageButton BTN_EXPLORERFILE_UP
	{
		HelpID = "dbaccess:ImageButton:DLG_COLLECTION_VIEW:BTN_EXPLORERFILE_UP" ;
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( WIN_X - UNRELATED_CONTROLS - IMG_SIZE, UNRELATED_CONTROLS ) ;
		Size = MAP_APPFONT ( IMG_SIZE, IMG_SIZE ) ;
		QuickHelpText [ en-US ] = "Up One Level" ;
	};

	Control CTRL_VIEW
	{
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( UNRELATED_CONTROLS, 2*UNRELATED_CONTROLS + IMG_SIZE) ;
		Size = MAP_APPFONT ( WIN_X - 2 * UNRELATED_CONTROLS, WIN_Y - 6 * UNRELATED_CONTROLS - BUTTON_HEIGHT - IMG_SIZE - EDIT_HEIGHT - FIXEDTEXT_HEIGHT) ;
		Border = TRUE ;
	};

	FixedText FT_EXPLORERFILE_FILENAME
	{
		Pos = MAP_APPFONT ( UNRELATED_CONTROLS, WIN_Y - 3 * UNRELATED_CONTROLS - BUTTON_HEIGHT - FIXEDLINE_HEIGHT - EDIT_HEIGHT ) ;
		Size = MAP_APPFONT ( 50, FIXEDTEXT_HEIGHT ) ;
		Text [ en-US ] = "File ~name:" ;
	};
	Edit ED_EXPLORERFILE_FILENAME
	{
		HelpID = "dbaccess:Edit:DLG_COLLECTION_VIEW:ED_EXPLORERFILE_FILENAME" ;
		Pos = MAP_APPFONT ( RELATED_CONTROLS + UNRELATED_CONTROLS + 50, WIN_Y - 3 * UNRELATED_CONTROLS - BUTTON_HEIGHT - FIXEDLINE_HEIGHT - EDIT_HEIGHT) ;
		Size = MAP_APPFONT ( WIN_X - RELATED_CONTROLS - 2 * UNRELATED_CONTROLS - 50, EDIT_HEIGHT ) ;
		Border = TRUE ;
		TabStop = TRUE ;
	};

	FixedLine FL_1
	{
		Pos = MAP_APPFONT ( 0, WIN_Y - 2 * UNRELATED_CONTROLS - BUTTON_HEIGHT - FIXEDLINE_HEIGHT) ;
		Size = MAP_APPFONT ( WIN_X, FIXEDLINE_HEIGHT ) ;
	};

	PushButton BTN_EXPLORERFILE_SAVE
	{
		HelpID = "dbaccess:PushButton:DLG_COLLECTION_VIEW:BTN_EXPLORERFILE_SAVE" ;
		Pos = MAP_APPFONT ( WIN_X - 2 * UNRELATED_CONTROLS - RELATED_CONTROLS - 150, WIN_Y - UNRELATED_CONTROLS - BUTTON_HEIGHT ) ;
		Size = MAP_APPFONT ( 50, BUTTON_HEIGHT ) ;
		DefButton = TRUE ;
		TabStop = TRUE ;
		Text [ en-US ] = "Save" ;
	};

	CancelButton PB_CANCEL
	{
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( WIN_X - 2 * UNRELATED_CONTROLS - 100, WIN_Y - UNRELATED_CONTROLS - BUTTON_HEIGHT ) ;
		Size = MAP_APPFONT ( 50, BUTTON_HEIGHT ) ;
	};

	HelpButton PB_HELP
	{
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( WIN_X - UNRELATED_CONTROLS - 50, WIN_Y - UNRELATED_CONTROLS - BUTTON_HEIGHT ) ;
		Size = MAP_APPFONT ( 50, BUTTON_HEIGHT ) ;
	};


	String STR_PATHNAME
	{
		Text [ en-US ] = "~Path:" ;
	};
};

String STR_NEW_FOLDER
{
	Text [ en-US ] = "Folder" ;
};
Image IMG_NAVIGATION_BTN_UP_SC
{
	ImageBitmap = Bitmap {File = "fp010" ;} ;
};
Image IMG_NAVIGATION_BTN_UP_SCH
{
	ImageBitmap = Bitmap {File = "fph010" ;} ;
};
Image IMG_NAVIGATION_CREATEFOLDER_SC
{
	ImageBitmap = Bitmap {File = "fp015" ;} ;
};
Image IMG_NAVIGATION_CREATEFOLDER_SCH
{
	ImageBitmap = Bitmap {File = "fph015" ;} ;
};

String STR_ALREADYEXISTOVERWRITE
{
	Text [ en-US ] = "The file already exists. Overwrite?" ;
};

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