/*
 * 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, 320, 220
STYLE WS_CAPTION | WS_CHILD | WS_DISABLED
CAPTION "Joysticks"
FONT 8, "Ms Shell Dlg"
{
    PUSHBUTTON      "&Disable", IDC_BUTTONDISABLE, 200, 20, 50, 15
    PUSHBUTTON      "&Enable", IDC_BUTTONENABLE, 200, 105, 50, 15
    LTEXT           "Connected", IDC_STATIC, 10, 10, 100, 10
    LISTBOX         IDC_JOYSTICKLIST, 10, 20, 180, 70, WS_TABSTOP | WS_VSCROLL | LBS_NOTIFY
    LTEXT           "Disabled", IDC_STATIC, 10, 95, 100, 10
    LISTBOX         IDC_DISABLEDLIST, 10, 105, 180, 70, WS_TABSTOP | WS_VSCROLL | LBS_NOTIFY
}

IDD_TEST DIALOG 0, 0, 320, 220
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, 110
    GROUPBOX        "", IDC_TESTGROUPXY, 15, 30, 60, 60
    GROUPBOX        "", IDC_TESTGROUPRXRY, 92, 30, 60, 60
    GROUPBOX        "", IDC_TESTGROUPZRZ, 169, 30, 60, 60
    GROUPBOX        "", IDC_TESTGROUPPOV, 246, 30, 60, 60
}

IDD_FORCEFEEDBACK DIALOG 0, 0, 320, 220
STYLE WS_CAPTION | WS_CHILD | WS_DISABLED
CAPTION "Test Force Feedback"
FONT 8, "Ms Shell Dlg"
{
    COMBOBOX        IDC_FFSELECTCOMBO, 5, 5, 100, 30, CBS_DROPDOWNLIST | CBS_HASSTRINGS
    LTEXT           "Available Effects", IDC_STATIC, 10, 30, 100, 10
    LISTBOX         IDC_FFEFFECTLIST, 10, 40, 180, 70, WS_TABSTOP | WS_VSCROLL | LBS_NOTIFY
    LTEXT           "Press any button in the controller to activate the chosen effect. The effect direction can be changed with the controller axis.",
                    IDC_STATIC, 10, 110, 210, 25
    GROUPBOX        "Direction", IDC_STATIC, 220, 30, 60, 60
}

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

#include "wine/wine_common_ver.rc"
