/*
 * WineMine resources
 *
 * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#include "resource.h"

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

STRINGTABLE {
     IDS_APPNAME, "WineMine"
     IDS_NOBODY,  "Nobody"
     IDS_ABOUT,   "Copyright 2000 Joshua Thielen"
}

IDM_WINEMINE MENU
{
    POPUP "&Game" {
        MENUITEM "&New\tF2",       IDM_NEW
        MENUITEM SEPARATOR
        MENUITEM "Question &Marks",IDM_MARKQ
        MENUITEM SEPARATOR
        MENUITEM "&Beginner",      IDM_BEGINNER
        MENUITEM "&Advanced",      IDM_ADVANCED
        MENUITEM "&Expert",        IDM_EXPERT
        MENUITEM "&Custom...",     IDM_CUSTOM
        MENUITEM SEPARATOR
        MENUITEM "&Fastest Times", IDM_TIMES
        MENUITEM SEPARATOR
        MENUITEM "E&xit",          IDM_EXIT
    }
    POPUP "&Help" {
        MENUITEM "&About WineMine",   IDM_ABOUT
    }
}

DLG_TIMES DIALOG 0, 0, 170, 80
STYLE DS_MODALFRAME | DS_3DLOOK | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP
FONT 8, "MS Shell Dlg"
CAPTION "Fastest Times"
{
    GROUPBOX        "Fastest times", -1,  10,  10, 150,  45
    LTEXT           "Beginner",      -1,  20,  20,  50,   8
    LTEXT           "Advanced",      -1,  20,  30,  50,   8
    LTEXT           "Expert",        -1,  20,  40,  50,   8
    LTEXT           "",       IDC_TIME1,  80,  20,  15,   8
    LTEXT           "",       IDC_TIME2,  80,  30,  15,   8
    LTEXT           "",       IDC_TIME3,  80,  40,  15,   8
    LTEXT           "",       IDC_NAME1, 100,  20,  55,   8
    LTEXT           "",       IDC_NAME2, 100,  30,  55,   8
    LTEXT           "",       IDC_NAME3, 100,  40,  55,   8
    DEFPUSHBUTTON   "OK",          IDOK,  60,  60,  50,  15
}

DLG_CONGRATS DIALOG  0, 0, 160, 60
STYLE DS_MODALFRAME | DS_3DLOOK | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP
FONT 8, "MS Shell Dlg"
CAPTION "Congratulations!"
{
    LTEXT           "Please enter your name", -1,  10,  10, 150,  10
    EDITTEXT                              IDC_EDITNAME,  10,  20, 110,  12
    DEFPUSHBUTTON   "OK",                         IDOK,  60,  40,  40,  15
}

DLG_CUSTOM DIALOG  0, 0, 140, 100
STYLE DS_MODALFRAME | DS_3DLOOK | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP
FONT 8, "MS Shell Dlg"
CAPTION "Custom Game"
{
    LTEXT           "Rows",   -1,         5,   5,  70,  10
    LTEXT           "Columns",-1,         5,  35,  70,  10
    LTEXT           "Mines",  -1,         5,  65,  70,  10
    EDITTEXT              IDC_EDITROWS,   5,  15,  35,  12, ES_NUMBER
    EDITTEXT              IDC_EDITCOLS,   5,  45,  35,  12, ES_NUMBER
    EDITTEXT             IDC_EDITMINES,   5,  75,  35,  12, ES_NUMBER
    DEFPUSHBUTTON   "OK",     IDOK,      80,  30,  50,  15
    PUSHBUTTON      "Cancel", IDCANCEL,  80,  50,  50,  15
}

IDA_WINEMINE ACCELERATORS
{
    VK_F2, IDM_NEW, VIRTKEY
}

LANGUAGE LANG_NEUTRAL,SUBLANG_NEUTRAL

/* @makedep: winemine.ico */
IDI_WINEMINE ICON winemine.ico

/* @makedep: faces.bmp */
IDI_FACES BITMAP faces.bmp

/* @makedep: leds.bmp */
IDI_LEDS BITMAP leds.bmp

/* @makedep: mines.bmp */
IDI_MINES BITMAP mines.bmp
