/*
 * 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 */
	/* FIXME: Some will be unused until desktop.ini support is implemented */
	IDS_PROGRAMS                "Programs"
	IDS_PERSONAL                "My Documents"
	IDS_FAVORITES               "Favorites"
	IDS_STARTUP                 "StartUp"
	IDS_STARTMENU               "Start Menu"
	IDS_MYMUSIC                 "My Music"
	IDS_MYVIDEOS                "My Videos"
	IDS_DESKTOPDIRECTORY        "#msgctxt#directory#Desktop"
	IDS_NETHOOD                 "NetHood"
	IDS_TEMPLATES               "Templates"
	IDS_PRINTHOOD               "PrintHood"
	IDS_HISTORY                 "History"
	IDS_PROGRAM_FILES           "Program Files"
	IDS_PROGRAM_FILESX86        "Program Files (x86)"
	IDS_MYPICTURES              "My Pictures"
	IDS_COMMON_FILES            "Common Files"
	IDS_COMMON_DOCUMENTS        "Documents"
	IDS_ADMINTOOLS              "Administrative Tools"
	IDS_COMMON_MUSIC            "Music"
	IDS_COMMON_PICTURES         "Pictures"
	IDS_COMMON_VIDEOS           "Videos"
	IDS_CONTACTS                "Contacts"
	IDS_LINKS                   "Links"
	IDS_SLIDE_SHOWS             "Slide Shows"
	IDS_PLAYLISTS               "Playlists"
	IDS_SAMPLE_MUSIC            "Sample Music"
	IDS_SAMPLE_PICTURES         "Sample Pictures"
	IDS_SAMPLE_PLAYLISTS        "Sample Playlists"
	IDS_SAMPLE_VIDEOS           "Sample Videos"
	IDS_SAVED_GAMES             "Saved Games"
	IDS_SAVED_SEARCHES          "Searches"
	IDS_USER_PROFILES           "Users"
	IDS_DOCUMENTS               "Documents"
	IDS_DOWNLOADS               "Downloads"

	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."
}

SHBRSFORFOLDER_MSGBOX DIALOG 15, 40, 190, 195
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFONT | DS_3DLOOK
CAPTION "Browse for Folder"
FONT 8, "MS Shell Dlg"
{
 DEFPUSHBUTTON "OK", 1, 80, 176, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "Cancel", 2, 134, 176, 50, 14, WS_GROUP | WS_TABSTOP
 LTEXT "", IDD_TITLE, 5, 4, 180, 12
 LTEXT "", IDD_STATUS, 5, 25, 180, 12
 CONTROL "", IDD_TREEVIEW, "SysTreeView32",
 	TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT |
	WS_BORDER | WS_TABSTOP,
	5, 40, 180, 120
}

SHNEWBRSFORFOLDER_MSGBOX DIALOG 15, 40, 216, 195
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | WS_SIZEBOX | DS_MODALFRAME | DS_SETFONT | DS_3DLOOK
CAPTION "Browse for Folder"
FONT 8, "MS Shell Dlg"
{
 LTEXT "", IDD_TITLE, 5, 8, 198, 24
 LTEXT "", IDD_STATUS, 5, 25, 198, 12
 LTEXT "Folder:", IDD_FOLDER, 5, 156, 40, 12
 CONTROL "", IDD_TREEVIEW, "SysTreeView32",
	TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT |
	WS_BORDER | WS_TABSTOP,
	5, 38, 205, 105
 EDITTEXT IDD_FOLDERTEXT, 46, 154, 164, 14, WS_BORDER | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "&Make New Folder", IDD_MAKENEWFOLDER, 5, 176, 95, 14, WS_GROUP | WS_TABSTOP
 DEFPUSHBUTTON "OK", IDOK, 105, 176, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "Cancel", IDCANCEL, 160, 176, 50, 14, WS_GROUP | WS_TABSTOP
}

SHELL_YESTOALL_MSGBOX DIALOG 200, 100, 280, 90
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Message"
FONT 8, "MS Shell Dlg"
{
    DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP
    PUSHBUTTON "Yes to &all", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP
    PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP
    PUSHBUTTON "Cancel", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP
    ICON "", IDD_ICON, 10, 10, 16, 16
    LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0
}

SHELL_ABOUT_MSGBOX DIALOG 15, 40, 225, 152
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "About %s"
FONT 10, "MS Shell Dlg"
{
 DEFPUSHBUTTON "OK", IDOK, 153, 133, 65, 14, WS_TABSTOP
 PUSHBUTTON "Wine &license", IDC_ABOUT_LICENSE, 153, 113, 65, 14, WS_TABSTOP
 LISTBOX IDC_ABOUT_LISTBOX, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
 ICON "", stc1, 10, 10, 30, 30
 LTEXT "", IDC_ABOUT_STATIC_TEXT1, 42, 10, 180, 10
 LTEXT "", IDC_ABOUT_STATIC_TEXT2, 42, 22, 180, 10
 LTEXT "Running on %s", IDC_ABOUT_STATIC_TEXT3, 42, 34, 180, 10
 LTEXT "Wine was brought to you by:", IDC_ABOUT_WINE_TEXT, 8, 54, 214, 10
}

SHELL_RUN_DLG DIALOG 0, 0, 235, 83
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
{
 ICON "", IDC_RUNDLG_ICON, 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.", IDC_RUNDLG_DESCRIPTION, 36, 11, 182, 18
 LTEXT "&Open:", IDC_RUNDLG_LABEL, 7, 39, 35, 10
 CONTROL "", IDC_RUNDLG_EDITPATH, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 45, 37, 185, 100
 DEFPUSHBUTTON "OK", IDOK, 72, 63, 50, 14, WS_TABSTOP
 PUSHBUTTON "Cancel", IDCANCEL, 126, 63, 50, 14, WS_TABSTOP
 PUSHBUTTON "&Browse...", IDC_RUNDLG_BROWSE, 180, 63, 50, 14, WS_TABSTOP
}

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"
