/*
 * Copyright 2005 Dmitry Timoshkov
 *
 * 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"

#pragma makedep po

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

STRINGTABLE
{
    IDS_FULLFRAMES "Full Frames (Uncompressed)"
}

ICM_CHOOSE_COMPRESSOR DIALOG  36, 24, 210, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Video Compression"
FONT 8, "MS Shell Dlg"
{
    DEFPUSHBUTTON "OK",IDOK,154,2,52,14
    PUSHBUTTON "Cancel",IDCANCEL,154,18,52,14

    LTEXT "&Compressor:",-1,9,6,135,8
    COMBOBOX IDC_COMP_LIST,9,16,135,67,CBS_DROPDOWNLIST|WS_VSCROLL|WS_TABSTOP

    PUSHBUTTON "Con&figure...",IDC_CONFIGURE,154,36,52,14
    PUSHBUTTON "&About",IDC_ABOUT,154,52,52,14

    SCROLLBAR IDC_QUALITY_SCROLL,9,44,135,10,WS_TABSTOP

    LTEXT "Compression &Quality:",IDC_QUALITY_TXT,9,34,135,8

    CONTROL "&Key Frame Every",IDC_KEYFRAME_CHECKBOX,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,9,60,86,12
    EDITTEXT IDC_KEYFRAME,98,60,22,12
    LTEXT "frames",IDC_KEYFRAME_FRAMES,123,62,26,10

    CONTROL "&Data Rate",IDC_DATARATE_CHECKBOX,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,9,76,86,12
    EDITTEXT IDC_DATARATE,98,76,22,12
    LTEXT "kB/s",IDC_DATARATE_KB,123,78,26,10
}
