/*
 * Copyright 2000 Martin Fuchs
 *
 * 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 "resource.h"

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

IDM_WINEFILE MENU
{
    POPUP "&File"  {
        MENUITEM "&Open\tEnter",                ID_ACTIVATE
        MENUITEM "&Move...\tF7",                ID_FILE_MOVE
        MENUITEM "&Copy...\tF8",                ID_FILE_COPY
        MENUITEM "&Delete\tDel",                ID_FILE_DELETE
        MENUITEM "Re&name...",                  109
        MENUITEM "Propert&ies\tAlt+Enter",   ID_EDIT_PROPERTIES
        MENUITEM SEPARATOR
        MENUITEM "&Run...",                     ID_RUN
        MENUITEM SEPARATOR
        MENUITEM "Cr&eate Directory...",        111
        MENUITEM SEPARATOR
        MENUITEM "E&xit",                       ID_FILE_EXIT
    }

    POPUP "&Disk"  {
        MENUITEM "Connect &Network Drive...",      ID_CONNECT_NETWORK_DRIVE
        MENUITEM "&Disconnect Network Drive",   ID_DISCONNECT_NETWORK_DRIVE
    }

    POPUP "&View"  {
        MENUITEM "Sp&lit",                      ID_VIEW_SPLIT
        MENUITEM SEPARATOR
        MENUITEM "&Name",                       ID_VIEW_NAME
        MENUITEM "&All File Details",           ID_VIEW_ALL_ATTRIBUTES, CHECKED
        MENUITEM SEPARATOR
        MENUITEM "&Sort by Name",               ID_VIEW_SORT_NAME
        MENUITEM "Sort &by Type",               ID_VIEW_SORT_TYPE
        MENUITEM "Sort by Si&ze",               ID_VIEW_SORT_SIZE
        MENUITEM "Sort by &Date",               ID_VIEW_SORT_DATE
        MENUITEM SEPARATOR
        MENUITEM "Filter by&...",               ID_VIEW_FILTER
    }

    POPUP "&Options"  {
        MENUITEM "&Font...",                    ID_SELECT_FONT
        MENUITEM SEPARATOR
        MENUITEM "&Toolbar",                    ID_VIEW_TOOL_BAR, CHECKED
        MENUITEM "&Drive Bar",                  ID_VIEW_DRIVE_BAR, CHECKED
        MENUITEM "&Status Bar",                 ID_VIEW_STATUSBAR, CHECKED
        MENUITEM "F&ull Screen\tCtrl+Shift+S",  ID_VIEW_FULLSCREEN
        MENUITEM SEPARATOR
        MENUITEM "&Save settings on exit",      ID_VIEW_SAVESETTINGS
    }

    POPUP "&Window"  {
        MENUITEM "New &Window",                 ID_WINDOW_NEW
        MENUITEM "Cascading\tCtrl+F5",          ID_WINDOW_CASCADE
        MENUITEM "Tile &Horizontally",          ID_WINDOW_TILE_HORZ
        MENUITEM "Tile &Vertically\tCtrl+F4",   ID_WINDOW_TILE_VERT
        MENUITEM "Arrange &Icons",              ID_WINDOW_ARRANGE
        MENUITEM "&Refresh\tF5",                ID_REFRESH
    }

    POPUP "&Help"  {
        MENUITEM "&Contents\tF1",               ID_HELP
        MENUITEM "&About Wine File Manager",    ID_ABOUT
    }
}

STRINGTABLE
{
    IDS_FONT_SEL_DLG_NAME   "Applying font settings"
    IDS_FONT_SEL_ERROR      "Error while selecting new font."
}

STRINGTABLE
{
    IDS_WINEFILE            "Wine File Manager"
    IDS_ERROR               "Error"
    IDS_ROOT_FS             "root fs"
    IDS_UNIXFS              "unixfs"
    IDS_DESKTOP             "#msgctxt#display name#Desktop"
    IDS_SHELL               "Shell"
    IDS_NO_IMPL             "Not yet implemented"
}

STRINGTABLE
{
    IDS_COL_NAME            "Name"
    IDS_COL_SIZE            "Size"
    IDS_COL_CDATE           "Creation date"
    IDS_COL_ADATE           "Access date"
    IDS_COL_MDATE           "Modification date"
    IDS_COL_IDX             "Index/Inode"
    IDS_COL_LINKS           "Links"
    IDS_COL_ATTR            "Attributes"
    IDS_COL_SEC             "Security"

    IDS_FREE_SPACE_FMT      "%1 of %2 free"
    IDS_UNIT_KB             "#msgctxt#unit kilobyte#kB"
    IDS_UNIT_MB             "#msgctxt#unit megabyte#MB"
    IDS_UNIT_GB             "#msgctxt#unit gigabyte#GB"
}

IDD_SELECT_DESTINATION DIALOG 15, 13, 210, 63
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Select destination"
FONT 8, "MS Shell Dlg"
{
    CONTROL         "", 101, "Static", SS_SIMPLE|SS_NOPREFIX, 3, 6, 162, 10
    CONTROL         "&Path:", -1, "Static", SS_LEFTNOWORDWRAP|WS_GROUP, 3, 18, 60, 10
    EDITTEXT        201, 3, 29, 134, 12, ES_AUTOHSCROLL
    DEFPUSHBUTTON   "OK", 1, 145, 6, 60, 14
    PUSHBUTTON      "Cancel", 2, 145, 23, 60, 14
    PUSHBUTTON      "&Browse...", 254, 145, 43, 60, 14
}

IDD_DIALOG_VIEW_TYPE DIALOG 15, 13, 161, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "By File Type"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT           "&Name:",-1,7,8,22,10
    EDITTEXT        IDC_VIEW_PATTERN,31,7,63,12,ES_AUTOHSCROLL
    GROUPBOX        "File type",-1,7,23,87,63
    CONTROL         "&Directories",IDC_VIEW_TYPE_DIRECTORIES,"Button",
                    BS_AUTOCHECKBOX | WS_TABSTOP,13,34,70,10
    CONTROL         "&Programs",IDC_VIEW_TYPE_PROGRAMS,"Button",
                    BS_AUTOCHECKBOX | WS_TABSTOP,13,46,70,10
    CONTROL         "Docu&ments",IDC_VIEW_TYPE_DOCUMENTS,"Button",
                    BS_AUTOCHECKBOX | WS_TABSTOP,13,58,70,10
    CONTROL         "&Other files",IDC_VIEW_TYPE_OTHERS,"Button",
                    BS_AUTOCHECKBOX | WS_TABSTOP,13,70,70,10
    CONTROL         "Show Hidden/&System Files",IDC_VIEW_TYPE_HIDDEN,
                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,90,140,9
    DEFPUSHBUTTON   "OK",IDOK,104,7,50,14
    PUSHBUTTON      "Cancel",IDCANCEL,104,24,50,14
END

IDD_DIALOG_PROPERTIES DIALOG  0, 0, 248, 215
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Properties for %s"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT           "&File Name:",-1,7,7,59,9
    EDITTEXT        IDC_STATIC_PROP_FILENAME,71,7,170,9,ES_READONLY | NOT WS_BORDER | WS_TABSTOP
    LTEXT           "Full &Path:",-1,7,18,59,9
    EDITTEXT        IDC_STATIC_PROP_PATH,71,18,170,9, ES_READONLY | NOT WS_BORDER | WS_TABSTOP
    LTEXT           "Last Change:",-1,7,29,59,9
    EDITTEXT        IDC_STATIC_PROP_LASTCHANGE,71,29,170,9,ES_READONLY | NOT WS_BORDER | WS_TABSTOP
    LTEXT           "Version:",-1,7,40,59,9
    EDITTEXT        IDC_STATIC_PROP_VERSION,71,40,170,9,ES_READONLY | NOT WS_BORDER | WS_TABSTOP
    LTEXT           "Cop&yright:",-1,7,51,59,9
    EDITTEXT        IDC_STATIC_PROP_COPYRIGHT,71,51,170,9,ES_READONLY | NOT WS_BORDER | WS_TABSTOP
    LTEXT           "Size:",-1,7,62,59,9
    EDITTEXT        IDC_STATIC_PROP_SIZE,71,62,170,9,ES_READONLY | NOT WS_BORDER | WS_TABSTOP
    GROUPBOX        "Attributes",-1,7,79,158,46
    CONTROL         "&Read Only",IDC_CHECK_READONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,91,68,9
    CONTROL         "H&idden",IDC_CHECK_HIDDEN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,92,91,68,9
    CONTROL         "&Archive",IDC_CHECK_ARCHIVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,101,68,9
    CONTROL         "&System",IDC_CHECK_SYSTEM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,92,101,68,9
    CONTROL         "&Compressed",IDC_CHECK_COMPRESSED,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,17,111,68,9
    GROUPBOX        "Version information",-1,7,129,234,79
    LISTBOX         IDC_LIST_PROP_VERSION_TYPES,13,139,107,63,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
    EDITTEXT        IDC_LIST_PROP_VERSION_VALUES,123,139,111,63,ES_MULTILINE | ES_READONLY | WS_VSCROLL
    DEFPUSHBUTTON   "OK",IDOK,191,91,50,14
    PUSHBUTTON      "Cancel",IDCANCEL,191,110,50,14
END

IDA_WINEFILE ACCELERATORS
{
	VK_F1, ID_HELP, VIRTKEY
	VK_F5, ID_REFRESH, VIRTKEY
	VK_F7, ID_FILE_MOVE, VIRTKEY
	VK_F8, ID_FILE_COPY, VIRTKEY
	VK_DELETE, ID_FILE_DELETE, VIRTKEY
	VK_RETURN, ID_ACTIVATE, VIRTKEY
	VK_RETURN, ID_EDIT_PROPERTIES, VIRTKEY, ALT
	"#msgctxt#accelerator Fullscreen#S", ID_VIEW_FULLSCREEN, VIRTKEY, SHIFT, CONTROL
	VK_ADD, ID_PREFERRED_SIZES, VIRTKEY, CONTROL
}

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

/* @makedep: winefile.ico */
IDI_WINEFILE ICON winefile.ico

/* @makedep: toolbar.bmp */
IDB_TOOLBAR BITMAP toolbar.bmp

/* @makedep: drivebar.bmp */
IDB_DRIVEBAR BITMAP drivebar.bmp

/* @makedep: images.bmp */
IDB_IMAGES BITMAP images.bmp
