/*
 * WineMine
 * Swedish Language Support
 *
 * Copyright 2000 Joshua Thielen
 * Copyright 2003 Marcelo Duarte
 * Copyright 2008 Daniel Nylander <po@danielnylander.se>
 *
 * 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_SWEDISH, SUBLANG_NEUTRAL

STRINGTABLE {
     IDS_APPNAME, "Minor"
     IDS_NOBODY,  "Ingen"
     IDS_ABOUT,   "Copyright 2000 Joshua Thielen"
}

MENU_WINEMINE MENU DISCARDABLE
{
    POPUP "A&lternativ" {
        MENUITEM "&Nytt\tF2",       IDM_NEW
        MENUITEM SEPARATOR
        MENUITEM "&Markera fråga",  IDM_MARKQ
        MENUITEM SEPARATOR
        MENUITEM "Ny&börjare",      IDM_BEGINNER
        MENUITEM "&Avancerad",      IDM_ADVANCED
        MENUITEM "&Expert",         IDM_EXPERT
        MENUITEM "An&passad...",    IDM_CUSTOM
        MENUITEM SEPARATOR
        MENUITEM "A&vsluta\tAlt+X", IDM_EXIT
    }
    POPUP "&Info" {
        MENUITEM "&Snabbaste tider...", IDM_TIMES
        MENUITEM "&Om",         IDM_ABOUT
    }
}

DLG_TIMES DIALOG DISCARDABLE 0, 0, 160, 80
STYLE  DS_MODALFRAME | DS_3DLOOK |
    WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP
CAPTION "Snabbaste tider"
{
    GROUPBOX        "Snabbaste tider", -1,  10,  10, 140,  45
    LTEXT           "Nybörjare",      -1,  20,  20,  40,   8
    LTEXT           "Avancerad",      -1,  20,  30,  40,   8
    LTEXT           "Expert",        -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   "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 "Gratulerar!"
{
    LTEXT           "Ange ditt namn", -1,  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 "Anpassat spel"
{
    LTEXT           "Rader",   -1,   5,   5,  30,  10
    LTEXT           "Kolumner",   -1,   5,  35,  35,  10
    LTEXT           "Minor",  -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   "OK",     IDOK,      40,  30,  50,  15
    PUSHBUTTON      "Avbryt", IDCANCEL,  40,  50,  50,  15
}
