/*
 * Copyright 2005 Dmitry Timoshkov
 * Copyright 2010 Igor Paliychuk
 *
 * 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 "msvideo_private.h"

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

LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT

ICM_CHOOSE_COMPRESSOR DIALOG  36, 24, 187, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Стиснення Відео"
FONT 8, "MS Shell Dlg"
{
    DEFPUSHBUTTON "OK",IDOK,129,2,49,14
    PUSHBUTTON "Скасувати",IDCANCEL,129,18,49,14

    LTEXT "&Алгоритм стиснення:",-1,9,6,105,8
    COMBOBOX 880,9,16,111,67,CBS_DROPDOWNLIST|WS_VSCROLL|WS_TABSTOP

    PUSHBUTTON "Налаштува&ти...",882,129,36,49,14
    PUSHBUTTON "&Інформація...",883,129,52,49,14

    SCROLLBAR 884,9,44,111,9,WS_TABSTOP

    LTEXT "&Якість Стиснення:",886,9,34,80,8

    CONTROL "&Ключовий кадр кожні",887,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,9,60,66,12
    EDITTEXT 888,78,60,22,12
    LTEXT "кадрів",889,103,62,26,10

    CONTROL "&Потік даних",894,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,9,76,66,12
    EDITTEXT 895,78,76,22,12
    LTEXT "KB/sec",896,102,78,26,10
}

STRINGTABLE
{
    IDS_FULLFRAMES "Кадри повністю (Без стиснення)"
}
