/*
 * Copyright 2001 Eric Pouech
 * Copyright 2010 Claudia Cotună
 *                Michael Stefaniuc
 *
 * 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 "wineconsole_res.h"

LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL

#pragma code_page(65001)

IDD_OPTION DIALOG 36, 24, 140, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION " Opțiuni "
FONT 8, "MS Shell Dlg"
{
        GROUPBOX "Dimensiune cursor", -1, 10, 11, 60, 44, BS_GROUPBOX
        AUTORADIOBUTTON "M&ic", IDC_OPT_CURSOR_SMALL, 14, 23, 44, 10, WS_TABSTOP
        AUTORADIOBUTTON "&Mediu", IDC_OPT_CURSOR_MEDIUM, 14, 33, 44, 10, WS_TABSTOP
        AUTORADIOBUTTON "M&are", IDC_OPT_CURSOR_LARGE, 14, 43, 44, 10, WS_TABSTOP

        GROUPBOX "Control", -1, 75, 11, 125, 44, BS_GROUPBOX
        LTEXT "Meniu popup", -1, 79, 23, 40, 10
        AUTOCHECKBOX "&Control", IDC_OPT_CONF_CTRL, 129, 23, 60, 10, WS_TABSTOP
        AUTOCHECKBOX "S&hift", IDC_OPT_CONF_SHIFT, 129, 33, 60, 10, WS_TABSTOP
        LTEXT "Editare rapidă", -1, 79, 43, 50, 10
        AUTOCHECKBOX "activ&ează", IDC_OPT_QUICK_EDIT, 129, 43, 60, 10, WS_TABSTOP

        GROUPBOX "Istoric comenzi", -1, 10, 57, 190, 35, BS_GROUPBOX
        LTEXT "&Număr de comenzi reapelate :", -1, 14, 67, 78, 18
        EDITTEXT IDC_OPT_HIST_SIZE, 92, 69, 31, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
        CONTROL "", IDC_OPT_HIST_SIZE_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0
        AUTOCHECKBOX "Elimină dublu&rile", IDC_OPT_HIST_NODOUBLE, 130, 67, 50, 18, WS_TABSTOP|BS_MULTILINE
}

IDD_FONT DIALOG 36, 24, 140, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION " Font "
FONT 8, "MS Shell Dlg"
{
        LTEXT "&Font", -1, 5, 5, 24, 8
        LISTBOX IDC_FNT_LIST_FONT, 5, 18, 90, 42, LBS_SORT|WS_VSCROLL
        LTEXT "&Culoare", -1, 100, 5, 50, 8
        CONTROL "", IDC_FNT_COLOR_FG, "WineConColorPreview", 0L, 100, 18, 48, 16
        CONTROL "", IDC_FNT_COLOR_BK, "WineConColorPreview", 0L, 100, 40, 48, 16
        LTEXT "Dimen&siune", -1, 158, 5, 40, 8
        LISTBOX IDC_FNT_LIST_SIZE, 158, 18, 40, 60, WS_VSCROLL
        CONTROL "", IDC_FNT_PREVIEW, "WineConFontPreview", 0L, 5, 60, 109, 40
        LTEXT "", IDC_FNT_FONT_INFO, 128, 76, 80, 26
}

IDD_CONFIG DIALOG 36, 24, 140, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION " Configurație "
FONT 8, "MS Shell Dlg"
{
        GROUPBOX "Zonă tampon", -1, 10, 11, 100, 42, BS_GROUPBOX
        LTEXT "Lăți&me :", -1, 14, 25, 54, 9
        EDITTEXT IDC_CNF_SB_WIDTH, 68, 23, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
        CONTROL "", IDC_CNF_SB_WIDTH_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0
        LTEXT "Î&nălțime :", -1, 14, 39, 54, 9
        EDITTEXT IDC_CNF_SB_HEIGHT, 68, 37, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
        CONTROL "", IDC_CNF_SB_HEIGHT_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0

        GROUPBOX "Dimensiune fereastră", -1, 10, 55, 100, 42
        LTEXT "Lăț&ime :", -1, 14, 69, 54, 9
        EDITTEXT IDC_CNF_WIN_WIDTH, 68, 67, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
        CONTROL "", IDC_CNF_WIN_WIDTH_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0
        LTEXT "Înălțim&e :", -1, 14, 83, 54, 9
        EDITTEXT IDC_CNF_WIN_HEIGHT, 68, 81, 36, 12, WS_TABSTOP|WS_BORDER|ES_NUMBER
        CONTROL "", IDC_CNF_WIN_HEIGHT_UD, "msctls_updown32", UDS_SETBUDDYINT|UDS_ALIGNRIGHT|UDS_AUTOBUDDY|UDS_ARROWKEYS|UDS_NOTHOUSANDS, 0, 0, 0, 0

        GROUPBOX "Sfârșitul programului", -1, 115, 11, 80, 42, BS_GROUPBOX
        AUTOCHECKBOX "În&chide consola", IDC_CNF_CLOSE_EXIT, 119, 25, 72, 20, WS_TABSTOP

        GROUPBOX "Ediție", -1, 115, 55, 80, 42
        COMBOBOX IDC_CNF_EDITION_MODE, 119, 69, 72, 20, CBS_DROPDOWNLIST|WS_VSCROLL|WS_TABSTOP
}

IDD_SAVE_SETTINGS DIALOG 20, 20, 230, 60
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION
CAPTION "Parametrii consolei"
FONT 8, "MS Shell Dlg"
{
        GROUPBOX "", -1, 10, 10, 210, 31, BS_GROUPBOX
        AUTORADIOBUTTON "Păstrează această configurație pentru sesiunile ulterioare", IDC_SAV_SAVE, 14, 15, 200, 10, WS_TABSTOP
        AUTORADIOBUTTON "Modifică numai sesiunea curentă", IDC_SAV_SESSION, 14, 27, 140, 10, WS_TABSTOP

        PUSHBUTTON "OK", IDOK, 65, 45, 35, 12
        PUSHBUTTON "Anulează", IDCANCEL, 110, 45, 35, 12
}
