/*
 * WineMine
 * Lithuanian Language Support
 *
 * Copyright 2009 Aurimas Fišeras <aurimas@gmail.com>
 *
 * 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"

/* UTF-8 */
#pragma code_page(65001)

LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL

STRINGTABLE {
     IDS_APPNAME, "WineMine"
     IDS_NOBODY,  "Niekas"
     IDS_ABOUT,   "Autoriaus teisės 2000 Joshua Thielen"
}

MENU_WINEMINE MENU DISCARDABLE
{
    POPUP "&Parinktys" {
        MENUITEM "&Naujas\tF2",       IDM_NEW
        MENUITEM SEPARATOR
        MENUITEM "&Žymėti klaustuku", IDM_MARKQ
        MENUITEM SEPARATOR
        MENUITEM "P&radedantis",      IDM_BEGINNER
        MENUITEM "&Pažengęs",         IDM_ADVANCED
        MENUITEM "Ek&spertas",        IDM_EXPERT
        MENUITEM "Pasirin&ktas",      IDM_CUSTOM
        MENUITEM SEPARATOR
        MENUITEM "Iš&eiti\tAlt+X",    IDM_EXIT
    }
    POPUP "&Informacija" {
        MENUITEM "&Geriausi laikai",  IDM_TIMES
        MENUITEM "&Apie",             IDM_ABOUT
    }
}

DLG_TIMES DIALOG DISCARDABLE 0, 0, 160, 80
STYLE  DS_MODALFRAME | DS_3DLOOK |
    WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP
CAPTION "Geriausi laikai"
{
    GROUPBOX        "Geriausi laikai", -1,  10,  10, 140,  45
    LTEXT           "Pradedantis",     -1,  20,  20,  40,   8
    LTEXT           "Pažengęs",        -1,  20,  30,  40,   8
    LTEXT           "Ekspertas",       -1,  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   "Gerai",             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 "Sveikiname!"
{
    LTEXT           "Įveskite savo vardą", -1,  10,  10, 150,  10
    EDITTEXT                              IDC_EDITNAME,  25,  20, 110,  12
    DEFPUSHBUTTON   "Gerai",                      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 "Pasirinktas žaidimas"
{
    LTEXT           "Eilutės",    -1,   5,   5,  30,  10
    LTEXT           "Stulpeliai", -1,   5,  35,  30,  10
    LTEXT           "Minos",      -1,   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   "Gerai",      IDOK,      40,  30,  50,  15
    PUSHBUTTON      "Atsisakyti", IDCANCEL,  40,  50,  50,  15
}
