/**************************************************************
 * 
 * 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"; }; 
	MaskColor = Color { Red = 0xFFFF; Green = 0x0; Blue = 0xFFFF; };
};
Image IMG_NAVIGATION_BTN_UP_SCH
{
	ImageBitmap = Bitmap { File = "fph010"; };
	MaskColor = Color { Red = 0xFFFF; Green = 0x0; Blue = 0xFFFF; };
};
Image IMG_NAVIGATION_CREATEFOLDER_SC
{
	ImageBitmap = Bitmap { File = "fp015"; };
	MaskColor = Color { Red = 0xFFFF; Green = 0x0; Blue = 0xFFFF; };
};
Image IMG_NAVIGATION_CREATEFOLDER_SCH
{
	ImageBitmap = Bitmap { File = "fph015"; };
	MaskColor = Color { Red = 0xFFFF; Green = 0x0; Blue = 0xFFFF; };
};

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

