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