/**************************************************************
 *
 * 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 "fileview.hrc"
#include <svtools/helpid.hrc>

// strings --------------------------------------------------------------------

String STR_SVT_FILEVIEW_COLUMN_TITLE
{
	Text [ en-US ] = "Name" ;
};

String STR_SVT_FILEVIEW_COLUMN_SIZE
{
	Text [ en-US ] = "Size" ;
};

String STR_SVT_FILEVIEW_COLUMN_DATE
{
	Text [ en-US ] = "Date modified" ;
};

String STR_SVT_FILEVIEW_COLUMN_TYPE
{
	Text [ en-US ] = "Type" ;
};

String STR_SVT_FILEVIEW_ERR_MAKEFOLDER
{
	Text [ en-US ] = "Could not create the folder %1." ;
};

String STR_SVT_BYTES
{
	Text [ en-US ] = "Bytes" ;
};

String STR_SVT_KB
{
	Text [ en-US ] = "KB" ;
};

String STR_SVT_MB
{
	Text [ en-US ] = "MB" ;
};


String STR_SVT_GB
{
	Text [ en-US ] = "GB" ;
};

// Images ---------------------------------------------------------------------

Image IMG_SVT_FOLDER
{
	ImageBitmap = Bitmap { File = "folder.png" ; };
};

// Menus -----------------------------------------------------------------

Menu RID_FILEVIEW_CONTEXTMENU
{
	ItemList =
	{
		MenuItem
		{
			Identifier = MID_FILEVIEW_DELETE ;
			HelpId = HID_FILEVIEW_MENU_DELETE ;
			Text [ en-US ] = "~Delete" ;
		};
		MenuItem
		{
			Identifier = MID_FILEVIEW_RENAME ;
			HelpId = HID_FILEVIEW_MENU_RENAME ;
			Text [ en-US ] = "~Rename" ;
		};
	};
};

ModalDialog DLG_SVT_QUERYDELETE
{
	HelpID = "svtools:ModalDialog:DLG_SVT_QUERYDELETE" ;
	SVLook = TRUE ;
	OutputSize = TRUE ;
	Moveable = TRUE ;
	Size = MAP_APPFONT ( 221, 67 ) ;
	Text [ en-US ] = "Confirm Delete" ;

	FixedText TXT_ENTRY
	{
		NoLabel = TRUE ;
		Pos = MAP_APPFONT ( 6, 6 ) ;
		Size = MAP_APPFONT ( 40, 10 ) ;
		Text [ en-US ] = "Entry:" ;
	};

	FixedText TXT_ENTRYNAME
	{
		Pos = MAP_APPFONT ( 52, 6 ) ;
		Size = MAP_APPFONT ( 163, 10 ) ;
		NoLabel = TRUE ;
	};

	FixedText TXT_QUERYMSG
	{
		NoLabel = TRUE ;
		WordBreak = TRUE ;
		Pos = MAP_APPFONT ( 6, 19 ) ;
		Size = MAP_APPFONT ( 209, 22 ) ;
		Text [ en-US ] = "Are you sure you want to delete the selected data?" ;
	};

	PushButton BTN_YES
	{
		HelpID = "svtools:PushButton:DLG_SVT_QUERYDELETE:BTN_YES" ;
		Pos = MAP_APPFONT ( 6, 47 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
		Text [ en-US ] = "~Delete" ;
	};

	PushButton BTN_ALL
	{
		HelpID = "svtools:PushButton:DLG_SVT_QUERYDELETE:BTN_ALL" ;
		Pos = MAP_APPFONT ( 59, 47 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
		Disable = TRUE ;
		Text [ en-US ] = "Delete ~All" ;
	};

	PushButton BTN_NO
	{
		HelpID = "svtools:PushButton:DLG_SVT_QUERYDELETE:BTN_NO" ;
		Pos = MAP_APPFONT ( 112, 47 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Do ~Not Delete" ;
	};

	CancelButton BTN_CANCEL
	{
		Pos = MAP_APPFONT ( 165, 47 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
};

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