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



 // includes ******************************************************************
#include "svtools/svtools.hrc"
#include "svtools/helpid.hrc"
#include "iodlg.hrc"

#define FILEPICKER_IL_IDLIST \
	IdList = \
	{ \
		IMG_FILEDLG_BTN_UP; \
		IMG_FILEDLG_BTN_STD; \
		IMG_FILEDLG_CREATEFOLDER; \
    }; \
	IdCount = \
	{ \
        3; \
	};

#define MASKCOLOR MaskColor = Color { Red = 0xFFFF; Green = 0x0000; Blue = 0xFFFF; };

 // image lists ***************************************************************

ImageList RID_FILEPICKER_IMAGES
{
    Prefix = "fp";
	MASKCOLOR
	FILEPICKER_IL_IDLIST
};

ImageList RID_FILEPICKER_IMAGES_HC
{
    Prefix = "fph";
	MASKCOLOR
	FILEPICKER_IL_IDLIST
};

 // dialogs *******************************************************************

ModalDialog DLG_SVT_EXPLORERFILE
{
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Moveable = TRUE ;
	Closeable = TRUE ;
	Sizeable = TRUE;
	HelpId = HID_EXPLORERDLG_FILE ;
	Size = MAP_APPFONT ( 280 , 174 ) ;
	FixedText FT_EXPLORERFILE_CURRENTPATH
	{
		Pos = MAP_APPFONT ( 6 , 6 ) ;
		Size = MAP_APPFONT ( 100 , 10 ) ;
		NoLabel = TRUE ;
	};
	ImageButton BTN_EXPLORERFILE_NEWFOLDER
	{
	    HelpID = "fpicker:ImageButton:DLG_SVT_EXPLORERFILE:BTN_EXPLORERFILE_NEWFOLDER";
		TabStop = FALSE ;
		Pos = MAP_APPFONT ( 59 , 6 ) ;
		QuickHelpText [ en-US ] = "Create New Directory" ;
	};
	ImageButton BTN_EXPLORERFILE_LISTVIEW
	{
	    HelpID = "fpicker:ImageButton:DLG_SVT_EXPLORERFILE:BTN_EXPLORERFILE_LISTVIEW";
		TabStop = FALSE ;
		Pos = MAP_APPFONT ( 109 , 6 ) ;
		ButtonImage = Image
		{
			ImageBitmap = Bitmap
			{
				File = "list.bmp" ;
			};
			MASKCOLOR
		};
		QuickHelpText [ en-US ] = "List";
	};
	ImageButton BTN_EXPLORERFILE_DETAILSVIEW
	{
	    HelpID = "fpicker:ImageButton:DLG_SVT_EXPLORERFILE:BTN_EXPLORERFILE_DETAILSVIEW";
		TabStop = FALSE ;
		Pos = MAP_APPFONT ( 109 , 6 ) ;
		ButtonImage = Image
		{
			ImageBitmap = Bitmap
			{
				File = "sc06356.bmp" ;
			};
			MASKCOLOR
		};
		QuickHelpText [ en-US ] = "Details";
	};
	MenuButton BTN_EXPLORERFILE_UP
	{
	    HelpID = "fpicker:MenuButton:DLG_SVT_EXPLORERFILE:BTN_EXPLORERFILE_UP";
		TabStop = FALSE ;
		Pos = MAP_APPFONT ( 109 , 6 ) ;
		QuickHelpText [ en-US ] = "Up One Level" ;
	};

	MenuButton BTN_EXPLORERFILE_STANDARD
	{
	    HelpID = "fpicker:MenuButton:DLG_SVT_EXPLORERFILE:BTN_EXPLORERFILE_STANDARD";
		TabStop = FALSE ;
		Pos = MAP_APPFONT ( 59 , 6 ) ;
		QuickHelpText [ en-US ] = "Default Directory" ;
	};
	Control CTL_EXPLORERFILE_FILELIST
	{
		TabStop = TRUE ;
		Pos = MAP_APPFONT ( 6 , 26 ) ;
		Size = MAP_APPFONT ( 268 , 85 ) ;
		Border = TRUE ;
	};
	FixedText FT_EXPLORERFILE_FILENAME
	{
		Pos = MAP_APPFONT ( 6 , 118 ) ;
		Size = MAP_APPFONT ( 50 , 10 ) ;
		Text [ en-US ] = "File ~name:" ;
	};
	Edit ED_EXPLORERFILE_FILENAME
	{
	    HelpID = "fpicker:Edit:DLG_SVT_EXPLORERFILE:ED_EXPLORERFILE_FILENAME";
		Pos = MAP_APPFONT ( 59 , 117 ) ;
		Size = MAP_APPFONT ( 159 , 12 ) ;
		Border = TRUE ;
	};
	FixedText FT_EXPLORERFILE_SHARED_LISTBOX
	{
		Pos = MAP_APPFONT ( 6 , 133 ) ;
		Size = MAP_APPFONT ( 50 , 10 ) ;
		// Note: this control does not have a text. The text is filled at runtime from the STR_SVT_FILEPICKER_VERSION,
		// STR_SVT_FILEPICKER_TEMPLATES, or STR_SVT_FILEPICKER_IMAGE_TEMPLATE resource
	};
	ListBox LB_EXPLORERFILE_SHARED_LISTBOX
	{
	    HelpID = "fpicker:ListBox:DLG_SVT_EXPLORERFILE:LB_EXPLORERFILE_SHARED_LISTBOX";
		Pos = MAP_APPFONT ( 59 , 132 ) ;
		Size = MAP_APPFONT ( 159 , 40 ) ;
		DropDown = TRUE ;
		AutoSize = TRUE ;
		AutoHScroll = TRUE ;
	};
	FixedText FT_EXPLORERFILE_FILETYPE
	{
		Pos = MAP_APPFONT ( 6 , 148 ) ;
		Size = MAP_APPFONT ( 50 , 10 ) ;
		Text [ en-US ] = "File ~type:" ;
	};
	ListBox LB_EXPLORERFILE_FILETYPE
	{
	    HelpID = "fpicker:ListBox:DLG_SVT_EXPLORERFILE:LB_EXPLORERFILE_FILETYPE";
		Pos = MAP_APPFONT ( 59 , 147 ) ;
		Size = MAP_APPFONT ( 159 , 80 ) ;
		DropDown = TRUE ;
		AutoSize = TRUE ;
		AutoHScroll = TRUE ;
		Sort = FALSE ;
	};
	CheckBox CB_EXPLORERFILE_READONLY
	{
	    HelpID = "fpicker:CheckBox:DLG_SVT_EXPLORERFILE:CB_EXPLORERFILE_READONLY";
		Size = MAP_APPFONT ( 80 , 10 ) ;
		Text [ en-US ] = "~Read-only" ;
	};
	CheckBox CB_EXPLORERFILE_PASSWORD
	{
	    HelpID = "fpicker:CheckBox:DLG_SVT_EXPLORERFILE:CB_EXPLORERFILE_PASSWORD";
		Size = MAP_APPFONT ( 100, 10 ) ;
		Text [ en-US ] = "Save with password" ;
	};
	CheckBox CB_AUTO_EXTENSION
	{
	    HelpID = "fpicker:CheckBox:DLG_SVT_EXPLORERFILE:CB_AUTO_EXTENSION";
		Size = MAP_APPFONT ( 160 , 10 ) ;
		Text [ en-US ] = "~Automatic file name extension" ;
	};
	CheckBox CB_OPTIONS
	{
	    HelpID = "fpicker:CheckBox:DLG_SVT_EXPLORERFILE:CB_OPTIONS";
		Size = MAP_APPFONT ( 120 , 10 ) ;
		Text [ en-US ] = "Edit ~filter settings";
	};
	PushButton BTN_EXPLORERFILE_OPEN
	{
	    HelpID = "fpicker:PushButton:DLG_SVT_EXPLORERFILE:BTN_EXPLORERFILE_OPEN";
		Pos = MAP_APPFONT ( 224 , 117 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		DefButton = TRUE ;
		Text [ en-US ] = "~Open" ;
	};
	CancelButton BTN_EXPLORERFILE_CANCEL
	{
		Pos = MAP_APPFONT ( 224 , 134 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
	};
	HelpButton BTN_EXPLORERFILE_HELP
	{
		Pos = MAP_APPFONT ( 224 , 151 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
	};
	String STR_EXPLORERFILE_OPEN
	{
		Text [ en-US ] = "Open" ;
	};
	String STR_EXPLORERFILE_SAVE
	{
		Text [ en-US ] = "Save as" ;
	};
	String STR_EXPLORERFILE_BUTTONSAVE
	{
		Text [ en-US ] = "~Save" ;
	};
	String STR_PATHNAME
	{
		Text [ en-US ] = "~Path:" ;
	};
	String STR_PATHSELECT
	{
		Text [ en-US ] = "Select path" ;
	};
	String STR_BUTTONSELECT
	{
		Text [ en-US ] = "~Select";
	};
	String STR_ACTUALVERSION
	{
		Text [ en-US ] = "Current version";
	};
	String STR_PREVIEW
	{
		Text [ en-US ] = "File Preview";
	};
};

// QueryFolderNameDialog ----------------------------------------------------------
ModalDialog DLG_SVT_QUERYFOLDERNAME
{
    HelpID = "fpicker:ModalDialog:DLG_SVT_QUERYFOLDERNAME";
	Border = TRUE ;
	Moveable = TRUE ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Text = "Ordner" ;
	Size = MAP_APPFONT ( 218 , 45 ) ;
	FixedText FT_SVT_QUERYFOLDERNAME_DLG_NAME
	{
		Pos = MAP_APPFONT ( 12 , 14 ) ;
		Size = MAP_APPFONT ( 138 , 10 ) ;
		Text [ en-US ] = "Na~me" ;
	};
	Edit ED_SVT_QUERYFOLDERNAME_DLG_NAME
	{
	    HelpID = "fpicker:Edit:DLG_SVT_QUERYFOLDERNAME:ED_SVT_QUERYFOLDERNAME_DLG_NAME";
		Pos = MAP_APPFONT ( 12 , 27 ) ;
		Size = MAP_APPFONT ( 138 , 12 ) ;
		Border = TRUE ;
		Left = TRUE ;
	};
	FixedLine FL_SVT_QUERYFOLDERNAME_DLG_NAME
	{
		Group = TRUE ;
		Pos = MAP_APPFONT ( 6 , 3 ) ;
		Size = MAP_APPFONT ( 150 , 8 ) ;
		Text [ en-US ] = "Create new folder" ;
	};
	OKButton BT_SVT_QUERYFOLDERNAME_DLG_OK
	{
		Pos = MAP_APPFONT ( 162 , 6 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		DefButton = TRUE ;
	};
	CancelButton BT_SVT_QUERYFOLDERNAME_DLG_CANCEL
	{
		Pos = MAP_APPFONT ( 162 , 23 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
	};
};

// strings *******************************************************************

String RID_FILEOPEN_INVALIDFOLDER
{
	Text [ en-US ] = "$name$ does not exist.";
};

String RID_FILEOPEN_NOTEXISTENTFILE
{
	Text [ en-US ] = "The file $name$ does not exist.\nMake sure you have entered the correct file name.";
};

String STR_FILTERNAME_ALL
{
	Text [ en-US ] = "All files (*.*)" ;
};

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

String STR_SVT_NEW_FOLDER
{
	Text [ en-US ] = "Folder" ;
};

String STR_SVT_NOREMOVABLEDEVICE
{
    Text [ en-US ] = "No removable storage device detected.\nMake sure it is plugged in properly and try again." ;
};

String STR_SVT_ALLFORMATS
{
	Text [ en-US ] = "All Formats" ;
};

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

