/*
 * WineMine (Dutch resources)
 *
 * Copyright 2003 Hans Leidekker
 *
 * 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
 */

LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL

STRINGTABLE {
     IDS_APPNAME, "WineMine"
     IDS_NOBODY,  "Nobody"
}

MENU_WINEMINE MENU DISCARDABLE
{
    POPUP "&Opties" {
        MENUITEM "&Nieuw spel\tF2", IDM_NEW
        MENUITEM SEPARATOR
        MENUITEM "&Markeer vraag",  IDM_MARKQ
        MENUITEM SEPARATOR
        MENUITEM "&Beginner",       IDM_BEGINNER
        MENUITEM "&Gevorderde",     IDM_ADVANCED
        MENUITEM "&Expert",         IDM_EXPERT
        MENUITEM "Aa&ngepast spel", IDM_CUSTOM
        MENUITEM SEPARATOR
        MENUITEM "&Afsluiten\tAlt+X", IDM_EXIT
    }
    POPUP "&Info" {
        MENUITEM "&Snelste tijden", IDM_TIMES
        MENUITEM "&Info",           IDM_ABOUT
    }
}

DLG_TIMES DIALOG DISCARDABLE 0, 0, 160, 80
STYLE  DS_MODALFRAME | DS_3DLOOK |
    WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP
CAPTION "Snelste tijden"
{
    GROUPBOX        "Snelste tijden", IDIGNORE,  10,  10, 140,  45
    LTEXT           "Beginner",       IDIGNORE,  20,  20,  40,   8
    LTEXT           "Gevorderde",     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 "Gefeliciteerd!"
{
    LTEXT           "Voer uw naam in", 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 "Aangepast spel"
{
    LTEXT           "Rijen",    IDIGNORE,   5,   5,  30,  10
    LTEXT           "Kolommen", IDIGNORE,   5,  35,  30,  10
    LTEXT           "Mijnen",   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      "Annuleren", 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                 "dit programma valt onder de LGPL", IDIGNORE,  35,  35, 115,  10
    ICON                                "WINEMINE",      IDIGNORE,  10,  25,  20,  20
    DEFPUSHBUTTON                             "OK",      IDOK,      50,  60,  60,  15
}
