/*
 * Top level resource file for shell stuff
 *
 * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#include "shresdef.h"

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

MENU_001 MENU
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
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

/*
 Recycle Bin item menu
*/
MENU_RECYCLEBIN MENU
BEGIN
	POPUP ""
	BEGIN
	  MENUITEM "#msgctxt#recycle bin#&Restore"	IDM_RECYCLEBIN_RESTORE
	  MENUITEM "&Erase"				IDM_RECYCLEBIN_ERASE
	END
END

/*
 shellview item menu
*/
MENU_SHV_FILE MENU
BEGIN
	POPUP ""
	BEGIN
	  MENUITEM "&Select"		FCIDM_SHVIEW_OPEN
	  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

MENU_CPANEL MENU
BEGIN
    POPUP "&File"
    BEGIN
        MENUITEM SEPARATOR
        MENUITEM "E&xit", IDM_CPANEL_EXIT
    END

    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

    POPUP "&Help"
    BEGIN
        MENUITEM "&About Control Panel", IDM_CPANEL_ABOUT
    END
END

STRINGTABLE
{
        /* columns in the shellview */
	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"
	IDS_SHV_COLUMN10	"Owner"
	IDS_SHV_COLUMN11	"Group"
	IDS_SHV_COLUMN_DELFROM	"Original location"
	IDS_SHV_COLUMN_DELDATE	"Date deleted"
	IDS_SHV_COL_DOCS	"Documents"
	IDS_SHV_COL_STATUS	"Status"
	IDS_SHV_COL_LOCATION	"Location"
	IDS_SHV_COL_MODEL	"Model"

        /* special folders */
	IDS_DESKTOP		"#msgctxt#display name#Desktop"
	IDS_MYCOMPUTER		"My Computer"
	IDS_RECYCLEBIN_FOLDER_NAME      "Trash"
	IDS_CONTROLPANEL	"Control Panel"

        /* context menus */
	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"

	IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied."
	IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder"
	IDS_DELETEITEM_CAPTION "Confirm file deletion"
	IDS_DELETEFOLDER_CAPTION "Confirm folder deletion"
	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_DELETESELECTED_TEXT "Are you sure you want to delete the selected item(s)?"
	IDS_TRASHITEM_TEXT "Are you sure that you want to send '%1' to the Trash?"
	IDS_TRASHFOLDER_TEXT "Are you sure that you want to send '%1' and all its content to the Trash?"
	IDS_TRASHMULTIPLE_TEXT "Are you sure that you want to send these %1 items to the Trash?"
	IDS_CANTTRASH_TEXT "The item '%1' can't be sent to Trash. Do you want to delete it instead?"
	IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?"
	IDS_OVERWRITEFILE_CAPTION "Confirm file overwrite"
	IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\
	    "If the files in the destination folder have the same names as files in the\n"\
	    "selected folder they will be replaced. Do you still want to move or copy\n"\
	    "the folder?"

        /* message box strings */
        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?"

        /* Run File dialog */
        IDS_RUNDLG_ERROR           "Unable to display Run File dialog box (internal error)"
        IDS_RUNDLG_BROWSE_ERROR    "Unable to display Browse dialog box (internal error)"
        IDS_RUNDLG_BROWSE_CAPTION  "Browse"
        IDS_RUNDLG_BROWSE_FILTER_EXE "Executable files (*.exe)"
        IDS_RUNDLG_BROWSE_FILTER_ALL "All files (*.*)"

        /* shell folder path default values */
	IDS_PROGRAMS                "Start Menu\\Programs"
	IDS_PERSONAL                "My Documents"
	IDS_FAVORITES               "Favorites"
	IDS_STARTUP                 "Start Menu\\Programs\\StartUp"
	IDS_RECENT                  "Recent"
	IDS_SENDTO                  "SendTo"
	IDS_STARTMENU               "Start Menu"
	IDS_MYMUSIC                 "My Music"
	IDS_MYVIDEO                 "My Videos"
	IDS_DESKTOPDIRECTORY        "#msgctxt#directory#Desktop"
	IDS_NETHOOD                 "NetHood"
	IDS_TEMPLATES               "Templates"
	IDS_APPDATA                 "Application Data"
	IDS_PRINTHOOD               "PrintHood"
	IDS_LOCAL_APPDATA           "Local Settings\\Application Data"
	IDS_INTERNET_CACHE          "Local Settings\\Temporary Internet Files"
	IDS_COOKIES                 "Cookies"
	IDS_HISTORY                 "Local Settings\\History"
	IDS_PROGRAM_FILES           "Program Files"
	IDS_PROGRAM_FILESX86        "Program Files (x86)"
	IDS_MYPICTURES              "My Pictures"
	IDS_PROGRAM_FILES_COMMON    "Program Files\\Common Files"
	IDS_PROGRAM_FILES_COMMONX86 "Program Files (x86)\\Common Files"
	IDS_COMMON_DOCUMENTS        "Documents"
	IDS_ADMINTOOLS              "Start Menu\\Programs\\Administrative Tools"
	IDS_COMMON_MUSIC            "Music"
	IDS_COMMON_PICTURES         "Pictures"
	IDS_COMMON_VIDEO            "Videos"
	IDS_CDBURN_AREA             "Local Settings\\Application Data\\Microsoft\\CD Burning"
	IDS_CONTACTS                "Contacts"
	IDS_LINKS                   "Links"
	IDS_PHOTO_ALBUMS            "Pictures\\Slide Shows"
	IDS_PLAYLISTS               "Music\\Playlists"
	IDS_PUBLIC_DOWNLOADS        "Downloads"
	IDS_PUBLIC_GAME_TASKS       "Microsoft\\Windows\\GameExplorer"
	IDS_PUBLIC_LIBRARIES        "Microsoft\\Windows\\Libraries"
	IDS_PUBLIC_RINGTONES        "Microsoft\\Windows\\Ringtones"
	IDS_SAMPLE_MUSIC            "Music\\Sample Music"
	IDS_SAMPLE_PICTURES         "Pictures\\Sample Pictures"
	IDS_SAMPLE_PLAYLISTS        "Music\\Sample Playlists"
	IDS_SAMPLE_VIDEOS           "Videos\\Sample Videos"
	IDS_SAVED_GAMES             "Saved Games"
	IDS_SAVED_SEARCHES          "Searches"
	IDS_USER_PROFILES           "Users"
	IDS_COMMON_OEM_LINKS        "OEM Links"
	IDS_DOCUMENTS               "Documents"
	IDS_DOWNLOADS               "Downloads"
	IDS_LOCAL_APPDATA_LOW       "AppData\\LocalLow"

	IDS_NEWFOLDER		"New Folder"

	IDS_CPANEL_TITLE            "Wine Control Panel"
	IDS_CPANEL_NAME             "Name"
	IDS_CPANEL_DESCRIPTION      "Description"

        IDS_SHLEXEC_NOASSOC         "There is no Windows program configured to open this type of file."

        IDS_RECYCLEBIN_ERASEITEM       "Are you sure you wish to permanently delete '%1'?"
        IDS_RECYCLEBIN_ERASEMULTIPLE   "Are you sure you wish to permanently delete these %1 items?"
        IDS_RECYCLEBIN_ERASE_CAPTION   "Confirm deletion"
        IDS_RECYCLEBIN_OVERWRITEFILE      "A file already exists at the path %1.\n\nDo you want to replace it?"
        IDS_RECYCLEBIN_OVERWRITEFOLDER      "A folder already exists at the path %1.\n\nDo you want to replace it?"
        IDS_RECYCLEBIN_OVERWRITE_CAPTION    "Confirm overwrite"
}

STRINGTABLE
{
IDS_LICENSE_CAPTION,            "Wine License"
IDS_LICENSE,
"Wine 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.\n\n\
Wine 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.\n\n\
You should have received a copy of the GNU Lesser General Public \
License along with Wine; if not, write to the Free Software \
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA."
}

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

/* @makedep: shell32.rgs */
1 WINE_REGISTRY shell32.rgs

shv_accel ACCELERATORS
BEGIN
	VK_F5, FCIDM_SHVIEW_REFRESH, VIRTKEY
END

/* @makedep: document.ico */
IDI_SHELL_DOCUMENT ICON document.ico

/* @makedep: folder.ico */
IDI_SHELL_FOLDER ICON folder.ico

/* @makedep: folder_open.ico */
IDI_SHELL_FOLDER_OPEN ICON folder_open.ico

/* FIXME: Following three resources are not yet added */
/* @makedep: folder_open.ico */
IDI_SHELL_FOLDER_OPEN_SMALL ICON folder_open.ico
/* @makedep: folder_open.ico */
IDI_SHELL_FOLDER_OPEN_LARGE ICON folder_open.ico
/* @makedep: folder_open.ico */
IDI_SHELL_FOLDER_SMALL_XP ICON folder_open.ico

/* @makedep: floppy.ico */
IDI_SHELL_FLOPPY ICON floppy.ico

/* @makedep: drive.ico */
IDI_SHELL_DRIVE ICON drive.ico

/* @makedep: netdrive.ico */
IDI_SHELL_NETDRIVE ICON netdrive.ico

/* @makedep: netdrive2.ico */
IDI_SHELL_NETDRIVE2 ICON netdrive2.ico

/* @makedep: cdrom.ico */
IDI_SHELL_CDROM ICON cdrom.ico

/* @makedep: ramdisk.ico */
IDI_SHELL_RAMDISK ICON ramdisk.ico

/* @makedep: mycomputer.ico */
IDI_SHELL_MY_COMPUTER ICON mycomputer.ico

/* @makedep: printer.ico */
IDI_SHELL_PRINTER ICON printer.ico

/* @makedep: shortcut.ico */
IDI_SHELL_SHORTCUT ICON shortcut.ico

/* @makedep: desktop.ico */
IDI_SHELL_DESKTOP ICON desktop.ico

/* @makedep: control.ico */
IDI_SHELL_CONTROL_PANEL ICON control.ico

/* @makedep: trash_file.ico */
IDI_SHELL_FULL_RECYCLE_BIN ICON trash_file.ico

/* @makedep: trash_file.ico */
IDI_SHELL_TRASH_FILE ICON trash_file.ico

/* @makedep: delete.ico */
IDI_SHELL_CONFIRM_DELETE ICON delete.ico

/* @makedep: mydocs.ico */
IDI_SHELL_MY_DOCUMENTS ICON mydocs.ico

/* FIXME: Following resource is not yet added */
/* @makedep: mydocs.ico */
IDI_SHELL_MY_NETWORK_PLACES ICON mydocs.ico

/* FIXME: Following resource is not yet added */
/* @makedep: mydocs.ico */
IDI_SHELL_FAVORITES ICON mydocs.ico

/* @makedep: idb_tb_large.bmp */
IDB_TB_LARGE_LIGHT BITMAP idb_tb_large.bmp

/* @makedep: idb_tb_large.bmp */
IDB_TB_LARGE_DARK BITMAP idb_tb_large.bmp

/* @makedep: idb_tb_small.bmp */
IDB_TB_SMALL_LIGHT BITMAP idb_tb_small.bmp

/* @makedep: idb_tb_small.bmp */
IDB_TB_SMALL_DARK BITMAP idb_tb_small.bmp

/* @makedep: searching.avi */
IDR_AVI_SEARCHING AVI searching.avi

/* @makedep: searching.avi */
IDR_AVI_SEARCH AVI searching.avi

/* @makedep: searching.avi */
IDR_AVI_FILEMOVE AVI searching.avi

/* @makedep: searching.avi */
IDR_AVI_FILECOPY AVI searching.avi

/* @makedep: searching.avi */
IDR_AVI_FINDCOMPUTER AVI searching.avi

/* @makedep: searching.avi */
IDR_AVI_FILENUKE AVI searching.avi

/* @makedep: searching.avi */
IDR_AVI_FILEDELETE AVI searching.avi

/* @makedep: AUTHORS */
AUTHORS RCDATA AUTHORS

#include "version.h"

#define WINE_FILENAME_STR "shell32.dll"
#define WINE_EXTRAVALUES VALUE "OLESelfRegister",""

#include "wine/wine_common_ver.rc"
