/*
 * Copyright 1998 Juergen Schmied
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

MENU_001 MENU DISCARDABLE
BEGIN
	MENUITEM "Lar&ge Icons",	FCIDM_SHVIEW_BIGICON
	MENUITEM "S&mall Icons",	FCIDM_SHVIEW_SMALLICON
	MENUITEM "&List",		FCIDM_SHVIEW_LISTVIEW
	MENUITEM "&Details",		FCIDM_SHVIEW_REPORTVIEW
END

/*
 shellview background menu
*/
MENU_002 MENU DISCARDABLE
BEGIN
	POPUP""
	BEGIN
	  POPUP "&View"
	  BEGIN
	    MENUITEM "Lar&ge Icons",	FCIDM_SHVIEW_BIGICON
	    MENUITEM "S&mall Icons",	FCIDM_SHVIEW_SMALLICON
	    MENUITEM "&List",		FCIDM_SHVIEW_LISTVIEW
	    MENUITEM "&Details",	FCIDM_SHVIEW_REPORTVIEW
	  END
	  MENUITEM SEPARATOR
	  POPUP "Arrange &Icons"
	  BEGIN
	    MENUITEM "By &Name",	0x30	/* column 0 */
	    MENUITEM "By &Type",	0x32	/* column 2 */
	    MENUITEM "By &Size",	0x31	/* ... */
	    MENUITEM "By &Date",	0x33
	    MENUITEM SEPARATOR
	    MENUITEM "&Auto Arrange",	FCIDM_SHVIEW_AUTOARRANGE
	  END
	  MENUITEM "Line up Icons",	FCIDM_SHVIEW_SNAPTOGRID
	  MENUITEM SEPARATOR
	  MENUITEM "Refresh",		FCIDM_SHVIEW_REFRESH
	  MENUITEM SEPARATOR
	  MENUITEM "Paste",		FCIDM_SHVIEW_INSERT
	  MENUITEM "Paste as Link",	FCIDM_SHVIEW_INSERTLINK
	  MENUITEM SEPARATOR
	  POPUP "New"
	  BEGIN
	    MENUITEM "New &Folder",	FCIDM_SHVIEW_NEWFOLDER
	    MENUITEM "New &Link",	FCIDM_SHVIEW_NEWLINK
	    MENUITEM SEPARATOR
	  END
	  MENUITEM SEPARATOR
	  MENUITEM "Properties",	FCIDM_SHVIEW_PROPERTIES
	END
END

/*
 shellview item menu
*/
MENU_SHV_FILE MENU DISCARDABLE
BEGIN
	POPUP""
	BEGIN
	  MENUITEM "E&xplore",		FCIDM_SHVIEW_EXPLORE
	  MENUITEM "&Open",		FCIDM_SHVIEW_OPEN
	  MENUITEM SEPARATOR
	  MENUITEM "C&ut",		FCIDM_SHVIEW_CUT
	  MENUITEM "&Copy",		FCIDM_SHVIEW_COPY
	  MENUITEM SEPARATOR
	  MENUITEM "Create &Link",	FCIDM_SHVIEW_CREATELINK
	  MENUITEM "&Delete",		FCIDM_SHVIEW_DELETE
	  MENUITEM "&Rename",		FCIDM_SHVIEW_RENAME
	  MENUITEM SEPARATOR
	  MENUITEM "&Properties",	FCIDM_SHVIEW_PROPERTIES
	END
END

SHBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFONT | DS_3DLOOK
CAPTION "Browse for Folder"
FONT 8, "Helv"
{
 DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "Cancel", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP
 LTEXT "", IDD_TITLE, 4, 4, 180, 12
 LTEXT "", IDD_STATUS, 4, 25, 180, 12
 CONTROL "", IDD_TREEVIEW, "SysTreeView32",
 	TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT |
	WS_BORDER | WS_TABSTOP,
	4, 40, 180, 120
}

SHELL_ABOUT_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 210, 152
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "About %s"
FONT 10, "Helv"
{
 DEFPUSHBUTTON "OK", IDOK, 153, 130, 50, 12, WS_TABSTOP
 LISTBOX 99, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
 ICON "", 1088, 189, 10, 14, 16
 LTEXT "", 100, 8, 10, 137, 33
 LTEXT "Wine was brought to you by:", 98, 8, 55, 137, 10
}

SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION ""
FONT 8, "Helv"
{
 ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
 LTEXT "Type the name of a program, folder, document, or Internet resource, and Wine will open it for you.", 12289, 36, 11, 182, 18
 LTEXT "&Open:", 12305, 7, 39, 24, 10
 CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
 DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP
 PUSHBUTTON "Cancel", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP
 PUSHBUTTON "&Browse...", 12288, 170, 63, 50, 14, WS_TABSTOP
}

/*
	special folders
*/
STRINGTABLE DISCARDABLE
{
	IDS_DESKTOP		"Desktop"
	IDS_MYCOMPUTER		"My Computer"
}

/*
	context menus
*/
STRINGTABLE DISCARDABLE
{
	IDS_VIEW_LARGE		"Lar&ge Icons"
	IDS_VIEW_SMALL		"S&mall Icons"
	IDS_VIEW_LIST		"&List"
	IDS_VIEW_DETAILS	"&Details"
	IDS_SELECT		"Select"
	IDS_OPEN		"Open"
}

STRINGTABLE DISCARDABLE
{
	IDS_CREATEFOLDER_DENIED "Can not create new Folder: Permission denied."
	IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder"
	IDS_DELETEITEM_CAPTION "Confirm file delete"
	IDS_DELETEFOLDER_CAPTION "Confirm folder delete"
	IDS_DELETEITEM_TEXT "Are you sure you want to delete '%1'?"
	IDS_DELETEMULTIPLE_TEXT "Are you sure you want to delete these %1 items?"
	IDS_OVERWRITEFILE_TEXT "OverWrite File %1?"
	IDS_OVERWRITEFILE_CAPTION "Confirm File OverWrite"
}

/*	columns in the shellview	*/
STRINGTABLE
BEGIN
	IDS_SHV_COLUMN1		"File"
	IDS_SHV_COLUMN2		"Size"
	IDS_SHV_COLUMN3		"Type"
	IDS_SHV_COLUMN4		"Modified"
	IDS_SHV_COLUMN5		"Attributes"
	IDS_SHV_COLUMN6		"Size"
	IDS_SHV_COLUMN7		"Size available"
	IDS_SHV_COLUMN8		"Name"
	IDS_SHV_COLUMN9		"Comments"
END

/* message box strings */
STRINGTABLE DISCARDABLE
{
       IDS_RESTART_TITLE       "Restart"
       IDS_RESTART_PROMPT      "Do you want to simulate a Windows reboot?"
       IDS_SHUTDOWN_TITLE      "Shutdown"
       IDS_SHUTDOWN_PROMPT     "Do you want to shutdown your Wine session?"
}
