/*
 * Top level resource file for MS ACM
 *
 * Copyright 2000 Eric Pouech
 *
 * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

#include "windef.h"
#include "winuser.h"
#include "wineacm.h"

LANGUAGE 0,0

DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE  10, 20, 225, 100
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Sound Selection"
FONT 8, "MS Shell Dlg"
BEGIN

    LTEXT           "&Name:", -1, 5, 5, 115, 8, NOT WS_GROUP

    COMBOBOX        IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60,
                    CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP

    PUSHBUTTON      "&Save As...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14
    PUSHBUTTON      "&Remove", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14

    LTEXT           "&Format:", -1, 5, 41, 44, 8, NOT WS_GROUP

    COMBOBOX        IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60,
                    CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP

    LTEXT           "&Attributes:", -1, 5, 59, 44, 8, NOT WS_GROUP

#if 0
    COMBOBOX        IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
                    CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP |
                    CBS_OWNERDRAWFIXED | CBS_HASSTRINGS
#else
    COMBOBOX        IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60,
                    CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
#endif
    DEFPUSHBUTTON   "OK", IDOK, 48, 80, 40, 14
    PUSHBUTTON      "Cancel", IDCANCEL, 92, 80, 40, 14
    PUSHBUTTON      "&Help", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14

END
