/*
 * WineMine
 * English Language Support
 *
 * Copyright 2000 Joshua Thielen
 * Copyright 2003 Marcelo Duarte
 *
 * 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_ENGLISH_US

STRINGTABLE {
     IDS_APPNAME, "WineMine"

}

MENU_WINEMINE MENU DISCARDABLE
{
    POPUP "&Options" {
        MENUITEM "&New\tF2",       IDM_NEW
        MENUITEM SEPARATOR
        MENUITEM "&Mark Question", IDM_MARKQ
        MENUITEM SEPARATOR
        MENUITEM "&Beginner",      IDM_BEGINNER
        MENUITEM "&Advanced",      IDM_ADVANCED
        MENUITEM "&Expert",        IDM_EXPERT
        MENUITEM "&Custom",        IDM_CUSTOM
        MENUITEM SEPARATOR
        MENUITEM "E&xit\tAlt+X",   IDM_EXIT
    }
    POPUP "&Info" {
        MENUITEM "&Fastest Times",    IDM_TIMES
        MENUITEM "&About",         IDM_ABOUT
    }
}

DLG_TIMES DIALOG DISCARDABLE 0, 0, 160, 80
STYLE  DS_MODALFRAME | DS_3DLOOK |
    WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP
CAPTION "Fastest Times"
{
    GROUPBOX        "Fastest Times", IDIGNORE,  10,  10, 140,  45
    LTEXT           "Beginner",      IDIGNORE,  20,  20,  40,   8
    LTEXT           "Advanced",      IDIGNORE,  20,  30,  40,   8
    LTEXT           "Expert",        IDIGNORE,  20,  40,  40,   8
    LTEXT           "999",          IDC_TIME1,  70,  20,  15,   8
    LTEXT           "999",          IDC_TIME2,  70,  30,  15,   8
    LTEXT           "999",          IDC_TIME3,  70,  40,  15,   8
    LTEXT           "",             IDC_NAME1,  90,  20,  55,   8
    LTEXT           "",             IDC_NAME2,  90,  30,  55,   8
    LTEXT           "",             IDC_NAME3,  90,  40,  55,   8
    DEFPUSHBUTTON   "OK",                IDOK,  55,  60,  50,  15
}

DLG_CONGRATS DIALOG DISCARDABLE  0, 0, 160, 60
STYLE  DS_MODALFRAME | DS_3DLOOK |
    WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP
CAPTION "Congratulations!"
{
    LTEXT           "Please enter your name", IDIGNORE,  10,  10, 150,  10
    EDITTEXT                              IDC_EDITNAME,  25,  20, 110,  12
    DEFPUSHBUTTON   "OK",                         IDOK,  60,  40,  40,  15
}

DLG_CUSTOM DIALOG DISCARDABLE  0, 0, 100, 100
STYLE  DS_MODALFRAME | DS_3DLOOK |
    WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP
CAPTION "Custom Game"
{
    LTEXT           "Rows",   IDIGNORE,   5,   5,  30,  10
    LTEXT           "Cols",   IDIGNORE,   5,  35,  30,  10
    LTEXT           "Mines",  IDIGNORE,   5,  65,  30,  10
    EDITTEXT              IDC_EDITROWS,   5,  15,  20,  12, ES_NUMBER
    EDITTEXT              IDC_EDITCOLS,   5,  45,  20,  12, ES_NUMBER
    EDITTEXT             IDC_EDITMINES,   5,  75,  20,  12, ES_NUMBER
    DEFPUSHBUTTON   "OK",     IDOK,      40,  30,  50,  15
    PUSHBUTTON      "Cancel", IDCANCEL,  40,  50,  50,  15
}

DLG_ABOUT DIALOG DISCARDABLE  0, 0, 160, 80
STYLE  DS_MODALFRAME | DS_3DLOOK |
    WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP
CAPTION "About"
{
    LTEXT                               "Winemine", IDIGNORE,  10,  10,  50,  10
    LTEXT         "Copyright 2000, Joshua Thielen", IDIGNORE,  35,  25, 115,  10
    LTEXT                 "Licensed under the terms of the LGPL", IDIGNORE,  35,  35, 115,  10
    ICON                                "WINEMINE", IDIGNORE,  10,  25,  20,  20
    DEFPUSHBUTTON                             "OK", IDOK,      50,  60,  60,  15
}
