/*
 * Joystick testing control panel applet resource file
 *
 * Copyright 2012 Lucas Fialho Zawacki
 *
 * 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 "joy.h"

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

STRINGTABLE
BEGIN
    IDS_CPL_NAME        "Game Controllers"
END

IDD_LIST DIALOG 0, 0, 250, 200
STYLE WS_CAPTION | WS_CHILD | WS_DISABLED
CAPTION "Joysticks"
FONT 8, "Ms Shell Dlg"
{
    PUSHBUTTON      "&Disable", IDC_BUTTONDISABLE, 190, 20, 50, 15
    PUSHBUTTON      "&Enable", IDC_BUTTONENABLE, 190, 95, 50, 15
    LTEXT           "Connected", IDC_STATIC, 10, 10, 100, 10
    LISTBOX         IDC_JOYSTICKLIST, 10, 20, 160, 70, WS_TABSTOP | WS_VSCROLL | LBS_NOTIFY
    LTEXT           "Disabled", IDC_STATIC, 10, 85, 100, 10
    LISTBOX         IDC_DISABLEDLIST, 10, 95, 160, 50, WS_TABSTOP | WS_VSCROLL | LBS_NOTIFY
}

IDD_TEST DIALOG 0, 0, 250, 200
STYLE WS_CAPTION | WS_CHILD | WS_DISABLED
CAPTION "Test Joystick"
FONT 8, "Ms Shell Dlg"
{
    COMBOBOX        IDC_TESTSELECTCOMBO, 5, 5, 100, 30, CBS_DROPDOWNLIST | CBS_HASSTRINGS
    GROUPBOX        "Buttons", IDC_STATIC, 0, 110, 250, 90
    GROUPBOX        "X,Y", IDC_STATIC, 15, 30, 60, 60
    GROUPBOX        "Rx,Ry", IDC_STATIC, 92, 30, 60, 60
    GROUPBOX        "Z, Rz", IDC_STATIC, 169, 30, 60, 60
}

IDD_FORCEFEEDBACK DIALOG 0, 0, 250, 200
STYLE WS_CAPTION | WS_CHILD | WS_DISABLED
CAPTION "Test Force Feedback"
FONT 8, "Ms Shell Dlg"
{
}

#define WINE_FILENAME_STR "joy.cpl"
#define WINE_FILEDESCRIPTION_STR "Game Controllers Configuration Panel"

#include "wine/wine_common_ver.rc"
