/*
 * 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"

#pragma makedep po

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
