/*
 * wineconsole (Russian resources)
 *
 * Copyright 2003 Igor Stepin
 * Copyright 2010 Vitaly Lipatov
 *
 * 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"

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

LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT

IDD_OPTION DIALOG 36, 24, 140, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION " Параметры "
FONT 8, "MS Shell Dlg"
{
	GROUPBOX "Размер курсора", -1, 10, 11, 60, 54, BS_GROUPBOX
	AUTORADIOBUTTON "&Маленький", IDC_OPT_CURSOR_SMALL, 14, 23, 52, 10, WS_TABSTOP
	AUTORADIOBUTTON "&Средний", IDC_OPT_CURSOR_MEDIUM, 14, 33, 52, 10, WS_TABSTOP
	AUTORADIOBUTTON "&Большой", IDC_OPT_CURSOR_LARGE, 14, 43, 52, 10, WS_TABSTOP

	GROUPBOX "Управление", -1, 75, 11, 123, 54, BS_GROUPBOX
	LTEXT "Всплывающее меню", -1, 79, 23, 50, 20
	AUTOCHECKBOX "&Сtrl", IDC_OPT_CONF_CTRL, 144, 23, 52, 10, WS_TABSTOP
	AUTOCHECKBOX "S&hift", IDC_OPT_CONF_SHIFT, 144, 33, 52, 10, WS_TABSTOP
	LTEXT "Быстрое редактирование", -1, 79, 43, 60, 20
	AUTOCHECKBOX "&включить", IDC_OPT_QUICK_EDIT, 144, 51, 52, 10, WS_TABSTOP

	GROUPBOX "История команд", -1, 10, 67, 189, 35, BS_GROUPBOX
	LTEXT "&История команд:", -1, 14, 77, 78, 18
	EDITTEXT IDC_OPT_HIST_SIZE, 82, 79, 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 "&Удалять повторяющиеся", IDC_OPT_HIST_NODOUBLE, 120, 77, 70, 18, WS_TABSTOP|BS_MULTILINE
}

IDD_FONT DIALOG 36, 24, 140, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION " Шрифт "
FONT 8, "MS Shell Dlg"
{
	LTEXT "&Шрифт", -1, 5, 5, 24, 8
	LISTBOX IDC_FNT_LIST_FONT, 5, 18, 90, 42, LBS_SORT|WS_VSCROLL
	LTEXT "&Цвет", -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 "&Размер", -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, 71, 80, 25
}

IDD_CONFIG DIALOG 36, 24, 140, 105
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION " Настройка "
FONT 8, "MS Shell Dlg"
{
	GROUPBOX "Зона буфера", -1, 8, 11, 100, 42, BS_GROUPBOX
	LTEXT "&Ширина:", -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 "&Высота:", -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 "Размер окна", -1, 8, 55, 100, 42
	LTEXT "Ш&ирина:", -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 "В&ысота:", -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 "Завершение программы", -1, 112, 11, 90, 43, BS_GROUPBOX
	AUTOCHECKBOX "&Закрывать консоль", IDC_CNF_CLOSE_EXIT, 119, 25, 79, 20, WS_TABSTOP

	GROUPBOX "Редактирование", -1, 112, 55, 90, 42
	COMBOBOX IDC_CNF_EDITION_MODE, 119, 69, 75, 20, CBS_DROPDOWNLIST|WS_VSCROLL|WS_TABSTOP
}

IDD_SAVE_SETTINGS DIALOG 20, 20, 198, 70
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION
CAPTION "Параметры консоли"
FONT 8, "MS Shell Dlg"
{
	GROUPBOX "", -1, 10, 10, 178, 31, BS_GROUPBOX
	AUTORADIOBUTTON "Сохранить эти настройки для будущих сессий", IDC_SAV_SAVE, 14, 27, 170, 10, WS_TABSTOP
	AUTORADIOBUTTON "Изменить только текущую сессию", IDC_SAV_SESSION, 14, 15, 170, 10, WS_TABSTOP

	PUSHBUTTON "OK", IDOK, 40, 50, 50, 14
	PUSHBUTTON "Отмена", IDCANCEL, 110, 50, 50, 14
}
