From 4c94f55c7240222171905d23de2bd8613026065c Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sat, 20 Oct 2007 10:20:05 +0000 Subject: [PATCH] Dmitry Chapyshev - Implement a joy.cpl applet. Works good on Windows XP. svn path=/trunk/; revision=29705 --- reactos/baseaddress.rbuild | 1 + reactos/dll/cpl/cpl.rbuild | 3 + reactos/dll/cpl/joy/joy.c | 302 +++++++++++++++++++++++ reactos/dll/cpl/joy/joy.def | 6 + reactos/dll/cpl/joy/joy.h | 40 +++ reactos/dll/cpl/joy/joy.rbuild | 19 ++ reactos/dll/cpl/joy/joy.rc | 20 ++ reactos/dll/cpl/joy/lang/en-US.rc | 84 +++++++ reactos/dll/cpl/joy/lang/ru-RU.rc | 84 +++++++ reactos/dll/cpl/joy/manifest.xml | 24 ++ reactos/dll/cpl/joy/resource.h | 44 ++++ reactos/dll/cpl/joy/resources/applet.ico | Bin 0 -> 40070 bytes reactos/dll/cpl/joy/rsrc.rc | 5 + 13 files changed, 632 insertions(+) create mode 100644 reactos/dll/cpl/joy/joy.c create mode 100644 reactos/dll/cpl/joy/joy.def create mode 100644 reactos/dll/cpl/joy/joy.h create mode 100644 reactos/dll/cpl/joy/joy.rbuild create mode 100644 reactos/dll/cpl/joy/joy.rc create mode 100644 reactos/dll/cpl/joy/lang/en-US.rc create mode 100644 reactos/dll/cpl/joy/lang/ru-RU.rc create mode 100644 reactos/dll/cpl/joy/manifest.xml create mode 100644 reactos/dll/cpl/joy/resource.h create mode 100644 reactos/dll/cpl/joy/resources/applet.ico create mode 100644 reactos/dll/cpl/joy/rsrc.rc diff --git a/reactos/baseaddress.rbuild b/reactos/baseaddress.rbuild index 7bada9e0b75..a8498f83ca0 100644 --- a/reactos/baseaddress.rbuild +++ b/reactos/baseaddress.rbuild @@ -7,6 +7,7 @@ + diff --git a/reactos/dll/cpl/cpl.rbuild b/reactos/dll/cpl/cpl.rbuild index 8f6dd3d388d..4049431b428 100644 --- a/reactos/dll/cpl/cpl.rbuild +++ b/reactos/dll/cpl/cpl.rbuild @@ -19,6 +19,9 @@ + + + diff --git a/reactos/dll/cpl/joy/joy.c b/reactos/dll/cpl/joy/joy.c new file mode 100644 index 00000000000..70dcb2a5aee --- /dev/null +++ b/reactos/dll/cpl/joy/joy.c @@ -0,0 +1,302 @@ +/* + * ReactOS + * Copyright (C) 2004 ReactOS Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +/* + * + * PROJECT: ReactOS Software Control Panel + * FILE: dll/cpl/joy/joy.c + * PURPOSE: ReactOS Software Control Panel + * PROGRAMMER: Dmitry Chapyshev (lentind@yandex.ru) + * UPDATE HISTORY: + * 10-18-2007 Created + */ + +#include "joy.h" + +#define NUM_APPLETS (1) + +LONG CALLBACK SystemApplet(VOID); +HINSTANCE hApplet = 0; +HWND MainDlg; + +/* Applets */ + +APPLET Applets[NUM_APPLETS] = +{ + {IDI_CPLSYSTEM, IDS_CPLSYSTEMNAME, IDS_CPLSYSTEMDESCRIPTION, SystemApplet} +}; + +VOID AddColumns(HWND hList) +{ + LV_COLUMN dummy; + RECT rect; + int Size; + TCHAR szBuf[256]; + + GetClientRect(hList, &rect); + ZeroMemory(&dummy, sizeof(LV_COLUMN)); + dummy.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM; + dummy.iSubItem = 0; + LoadString(hApplet, IDS_STATUS, szBuf, sizeof(szBuf) / sizeof(TCHAR)); + dummy.pszText = (LPTSTR)szBuf; + Size = rect.right - rect.left - 250; + dummy.cx = Size; + (void)ListView_InsertColumn(hList, 0, &dummy); + + GetClientRect(hList, &rect); + ZeroMemory(&dummy, sizeof(LV_COLUMN)); + dummy.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM; + dummy.iSubItem = 0; + LoadString(hApplet, IDS_CONTROLLER, szBuf, sizeof(szBuf) / sizeof(TCHAR)); + dummy.pszText = (LPTSTR)szBuf; + dummy.cx = rect.right - rect.left - Size; + (void)ListView_InsertColumn(hList, 0, &dummy); +} + +INT_PTR CALLBACK +AdvancedPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + UNREFERENCED_PARAMETER(lParam); + + switch (uMsg) + { + case WM_INITDIALOG: + + break; + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDOK: + EndDialog(hwndDlg,LOWORD(wParam)); + break; + case IDCANCEL: + EndDialog(hwndDlg,LOWORD(wParam)); + break; + } + break; + case WM_NOTIFY: + + break; + case WM_SYSCOMMAND: + switch (LOWORD(wParam)) + { + case SC_CONTEXTHELP: + // not implemented + break; + } + break; + } + return 0; +} + +INT_PTR CALLBACK +CustomPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + UNREFERENCED_PARAMETER(lParam); + + switch (uMsg) + { + case WM_INITDIALOG: + + break; + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDOK: + EndDialog(hwndDlg,LOWORD(wParam)); + break; + case IDCANCEL: + EndDialog(hwndDlg,LOWORD(wParam)); + break; + } + break; + case WM_NOTIFY: + + break; + case WM_SYSCOMMAND: + switch (LOWORD(wParam)) + { + case SC_CONTEXTHELP: + // not implemented + break; + } + break; + } + return 0; +} + +INT_PTR CALLBACK +AddPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + UNREFERENCED_PARAMETER(lParam); + + switch (uMsg) + { + case WM_INITDIALOG: + + break; + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDC_CUSTOM_BUTTON: + DialogBox(hApplet, + MAKEINTRESOURCE(IDD_CUSTOM), + hwndDlg, + CustomPageProc); + break; + case IDOK: + EndDialog(hwndDlg,LOWORD(wParam)); + break; + case IDCANCEL: + EndDialog(hwndDlg,LOWORD(wParam)); + break; + } + break; + case WM_NOTIFY: + + break; + case WM_SYSCOMMAND: + switch (LOWORD(wParam)) + { + case SC_CONTEXTHELP: + // not implemented + break; + } + break; + } + return 0; +} + +/* Property page dialog callback */ +INT_PTR CALLBACK +MainPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + UNREFERENCED_PARAMETER(lParam); + + switch (uMsg) + { + case WM_INITDIALOG: + AddColumns(GetDlgItem(hwndDlg,IDC_CONTROLLER_LIST)); + break; + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDC_ADD_BUTTON: + DialogBox(hApplet, + MAKEINTRESOURCE(IDD_ADD), + hwndDlg, + AddPageProc); + break; + case IDC_ADVANCED_BUTTON: + DialogBox(hApplet, + MAKEINTRESOURCE(IDD_ADVANCED), + hwndDlg, + AdvancedPageProc); + break; + case IDOK: + EndDialog(hwndDlg,LOWORD(wParam)); + break; + } + break; + case WM_NOTIFY: + + break; + case WM_SYSCOMMAND: + switch (LOWORD(wParam)) + { + case SC_CLOSE: + EndDialog(hwndDlg,LOWORD(wParam)); + break; + case SC_CONTEXTHELP: + // not implemented + break; + } + break; + } + return 0; +} + +/* First Applet */ +LONG CALLBACK +SystemApplet(VOID) +{ + DialogBox(hApplet, + MAKEINTRESOURCE(IDD_PROPPAGEMAIN), + MainDlg, + MainPageProc); + + return (LONG)TRUE; +} + +/* Control Panel Callback */ +LONG CALLBACK +CPlApplet(HWND hwndCPl, UINT uMsg, LPARAM lParam1, LPARAM lParam2) +{ + CPLINFO *CPlInfo; + DWORD i; + + UNREFERENCED_PARAMETER(hwndCPl); + + i = (DWORD)lParam1; + switch (uMsg) + { + case CPL_INIT: + return TRUE; + + case CPL_GETCOUNT: + return NUM_APPLETS; + + case CPL_INQUIRE: + CPlInfo = (CPLINFO*)lParam2; + CPlInfo->lData = 0; + CPlInfo->idIcon = Applets[i].idIcon; + CPlInfo->idName = Applets[i].idName; + CPlInfo->idInfo = Applets[i].idDescription; + break; + + case CPL_DBLCLK: + { + MainDlg = hwndCPl; + Applets[i].AppletProc(); + } + break; + } + + return FALSE; +} + +BOOL WINAPI +DllMain(HINSTANCE hinstDLL, DWORD dwReason, LPVOID lpvReserved) +{ + UNREFERENCED_PARAMETER(lpvReserved); + + switch (dwReason) + { + case DLL_PROCESS_ATTACH: + case DLL_THREAD_ATTACH: + CoInitialize(NULL); + hApplet = hinstDLL; + break; + } + + return TRUE; +} diff --git a/reactos/dll/cpl/joy/joy.def b/reactos/dll/cpl/joy/joy.def new file mode 100644 index 00000000000..a8754e417e4 --- /dev/null +++ b/reactos/dll/cpl/joy/joy.def @@ -0,0 +1,6 @@ +LIBRARY joy.cpl + +EXPORTS +CPlApplet + +; EOF diff --git a/reactos/dll/cpl/joy/joy.h b/reactos/dll/cpl/joy/joy.h new file mode 100644 index 00000000000..7983e80f23b --- /dev/null +++ b/reactos/dll/cpl/joy/joy.h @@ -0,0 +1,40 @@ +#ifndef __CPL_JOY_H +#define __CPL_JOY_H + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "resource.h" + +typedef LONG (CALLBACK *CPLAPPLET_PROC)(VOID); + +typedef struct +{ + int idIcon; + int idName; + int idDescription; + CPLAPPLET_PROC AppletProc; +} APPLET, *PAPPLET; + +typedef struct +{ + WCHAR szTarget[MAX_PATH]; + WCHAR szWorkingDirectory[MAX_PATH]; + WCHAR szDescription[MAX_PATH]; + WCHAR szLinkName[MAX_PATH]; +}CREATE_LINK_CONTEXT, *PCREATE_LINK_CONTEXT; + + +extern HINSTANCE hApplet; + +void ShowLastWin32Error(HWND hWndOwner); + +#endif /* __CPL_JOY_H */ + +/* EOF */ diff --git a/reactos/dll/cpl/joy/joy.rbuild b/reactos/dll/cpl/joy/joy.rbuild new file mode 100644 index 00000000000..f277e79a79b --- /dev/null +++ b/reactos/dll/cpl/joy/joy.rbuild @@ -0,0 +1,19 @@ + + + + + . + + 0x600 + 0x501 + kernel32 + advapi32 + user32 + comctl32 + msvcrt + ole32 + uuid + shell32 + joy.c + joy.rc + diff --git a/reactos/dll/cpl/joy/joy.rc b/reactos/dll/cpl/joy/joy.rc new file mode 100644 index 00000000000..32775a52c72 --- /dev/null +++ b/reactos/dll/cpl/joy/joy.rc @@ -0,0 +1,20 @@ +#include "resource.h" +#include + +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL + +#define REACTOS_VERSION_DLL +#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Software Control Panel\0" +#define REACTOS_STR_INTERNAL_NAME "joy\0" +#define REACTOS_STR_ORIGINAL_FILENAME "joy.cpl\0" +#ifdef _MSC_VER +#include <../../../reactos/version.rc> +#else +#include +#endif + +123 24 DISCARDABLE "manifest.xml" + +IDI_CPLSYSTEM ICON "resources/applet.ico" + +#include "rsrc.rc" diff --git a/reactos/dll/cpl/joy/lang/en-US.rc b/reactos/dll/cpl/joy/lang/en-US.rc new file mode 100644 index 00000000000..46b08bc9f39 --- /dev/null +++ b/reactos/dll/cpl/joy/lang/en-US.rc @@ -0,0 +1,84 @@ +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +IDD_PROPPAGEMAIN DIALOGEX 0, 0, 252, 205 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Game Controllers" +FONT 8, "MS Shell Dlg" +{ + ICON IDI_CPLSYSTEM, -1, 7, 7, 20, 20 + LTEXT "These settings help you configure the game controllers installed on your computer.", -1, 33, 7, 214, 20, NOT WS_GROUP + GROUPBOX "I&nstalled game controllers", -1, 7, 34, 238, 117 + CONTROL "List1", IDC_CONTROLLER_LIST, "SysListView32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x0000808D, 14, 44, 224, 80 + PUSHBUTTON "&Add...", IDC_ADD_BUTTON, 35, 129, 65, 14 + PUSHBUTTON "&Remove", IDC_REMOVE_BUTTON, 104, 129, 65, 14, WS_DISABLED + PUSHBUTTON "&Properties", IDC_PROPERTIES_BUTTON, 173, 129, 65, 14, WS_DISABLED + PUSHBUTTON "A&dvanced...", IDC_ADVANCED_BUTTON, 111, 157, 65, 14 + PUSHBUTTON "&Troubleshoot...", IDC_TROUBLESHOOT_BUTTON, 180, 157, 65, 14 + PUSHBUTTON "OK", IDOK, 195, 185, 50, 14 +} + +IDD_ADD DIALOGEX 0, 0, 265, 200 +STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Add Game Controller" +FONT 8, "MS Shell Dlg" +{ + ICON IDI_CPLSYSTEM, -1, 8, 7, 20, 20 + LTEXT "Select a game controller from the list below, and then click OK. If your game controller does not appear in the list, click Custom.", -1, 35, 7, 210, 33 + LTEXT "&Game controllers:", -1, 8, 45, 126, 8 + LISTBOX IDC_GAME_CONTROLLERS_LIST, 7, 55, 251, 57, LBS_STANDARD | LBS_NOINTEGRALHEIGHT | LBS_WANTKEYBOARDINPUT | WS_HSCROLL | WS_TABSTOP + AUTOCHECKBOX "&Enable rudders and pedals", IDC_ENABLE_RUDDERS_CHECKBOX, 7, 114, 100, 10, WS_GROUP + LTEXT "&Game Port:", -1, 7, 134, 38, 8, NOT WS_VISIBLE + COMBOBOX IDC_GAME_PORT_COMBO, 7, 147, 140, 50, CBS_DROPDOWNLIST | CBS_SORT | NOT WS_VISIBLE | WS_VSCROLL + PUSHBUTTON "&Custom...", IDC_CUSTOM_BUTTON, 208, 147, 50, 14 + CONTROL "", -25525, "STATIC", SS_ETCHEDHORZ, 7, 170, 251, 1 + DEFPUSHBUTTON "OK", IDOK, 155, 179, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 208, 179, 50, 14 +} + +IDD_CUSTOM DIALOGEX 0, 0, 265, 183, 0 +STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Custom Game Controller" +FONT 8, "MS Shell Dlg" +{ + GROUPBOX "Special characteristics", -1, 7, 7, 245, 52 + AUTORADIOBUTTON "&Joystick", IDC_JOYSTICK_RADIO, 17, 23, 55, 10 + AUTORADIOBUTTON "&Flight yoke or flight stick", IDC_FLIGHT_YOKE_RADIO, 147, 23, 89, 10 + AUTORADIOBUTTON "&Game pad", IDC_GAME_PAD_RADIO, 17, 40, 65, 10 + AUTORADIOBUTTON "&Race car controller", IDC_RACE_CAR_RADIO, 147, 40, 93, 10 + GROUPBOX "&Axes", -1, 7, 67, 116, 44, WS_GROUP + COMBOBOX IDC_AXES_COMBO, 37, 79, 48, 50, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL + AUTORADIOBUTTON "Rudder/Pedals", IDC_RUDDER_PEDALS_RADIO, 14, 97, 63, 10, NOT WS_VISIBLE + AUTORADIOBUTTON "Z Axis", IDC_Z_AXIS_RADIO, 81, 97, 35, 10, NOT WS_VISIBLE + GROUPBOX "&Buttons", -1, 137, 67, 116, 44 + COMBOBOX IDC_BUTTONS_COMBO, 178, 79, 48, 50, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL, WS_EX_CLIENTEDGE + AUTOCHECKBOX "Includes a &point of view control", IDC_INC_POINT_CHECKBOX, 7, 123, 115, 10 + LTEXT "C&ontroller name:", -1, 7, 139, 200, 9 + EDITTEXT IDC_CONTROLLER_NAME_EDIT, 7, 150, 116, 15, ES_AUTOHSCROLL, WS_EX_CLIENTEDGE | WS_EX_STATICEDGE + DEFPUSHBUTTON "OK", IDOK, 137, 150, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 203, 150, 50, 14 +} + +IDD_ADVANCED DIALOGEX 0, 0, 220, 86 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Advanced Settings" +FONT 8, "MS Shell Dlg" +{ + ICON IDI_CPLSYSTEM, -1, 7, 24, 20, 20 + DEFPUSHBUTTON "OK", IDOK, 106, 65, 50, 14 + PUSHBUTTON "Cancel", IDCANCEL, 163, 65, 50, 14 + LTEXT "Select the device you want to use with older programs.", -1, 7, 7, 208, 10 + LTEXT "&Preferred device:", -1, 34, 24, 70, 10 + COMBOBOX IDC_PREFERRED_DEV_COMBO, 34, 38, 179, 75, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL +} + +STRINGTABLE +BEGIN + IDS_CPLSYSTEMNAME "Game Controllers" + IDS_CPLSYSTEMDESCRIPTION "Add, remove, and configure game controller hardware such as joysticks and gamepads." + IDS_CONTROLLER "Controller" + IDS_STATUS "Status" +END diff --git a/reactos/dll/cpl/joy/lang/ru-RU.rc b/reactos/dll/cpl/joy/lang/ru-RU.rc new file mode 100644 index 00000000000..61a88d94697 --- /dev/null +++ b/reactos/dll/cpl/joy/lang/ru-RU.rc @@ -0,0 +1,84 @@ +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT + +IDD_PROPPAGEMAIN DIALOGEX 0, 0, 252, 205 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Игровые устройства" +FONT 8, "MS Shell Dlg" +{ + ICON IDI_CPLSYSTEM, -1, 7, 7, 20, 20 + LTEXT "Эти параметры позволяют настроить игровые устройства, установленные на компьютере.", -1, 33, 7, 214, 20, NOT WS_GROUP + GROUPBOX "Установленные &игровые устройства", -1, 7, 34, 238, 117 + CONTROL "List1", IDC_CONTROLLER_LIST, "SysListView32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x0000808D, 14, 44, 224, 80 + PUSHBUTTON "До&бавить...", IDC_ADD_BUTTON, 35, 129, 65, 14 + PUSHBUTTON "&Удалить", IDC_REMOVE_BUTTON, 104, 129, 65, 14, WS_DISABLED + PUSHBUTTON "Сво&йства", IDC_PROPERTIES_BUTTON, 173, 129, 65, 14, WS_DISABLED + PUSHBUTTON "Д&ополнительно...", IDC_ADVANCED_BUTTON, 101, 157, 70, 14 + PUSHBUTTON "Диа&гностика...", IDC_TROUBLESHOOT_BUTTON, 175, 157, 70, 14 + PUSHBUTTON "OK", IDOK, 195, 185, 50, 14 +} + +IDD_ADD DIALOGEX 0, 0, 265, 200 +STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Добавление игрового устройства" +FONT 8, "MS Shell Dlg" +{ + ICON IDI_CPLSYSTEM, -1, 8, 7, 20, 20 + LTEXT "Выберите игровой контроллер в расположенном ниже списке и нажмите кнопку ОК. Если ваш игровой контроллер отсутствует в списке, нажмите кнопку ""Другой"".", -1, 35, 7, 210, 33 + LTEXT "&Игровые устройства:", -1, 8, 45, 126, 8 + LISTBOX IDC_GAME_CONTROLLERS_LIST, 7, 55, 251, 57, LBS_STANDARD | LBS_NOINTEGRALHEIGHT | LBS_WANTKEYBOARDINPUT | WS_HSCROLL | WS_TABSTOP + AUTOCHECKBOX "&Подключить руль или педали", IDC_ENABLE_RUDDERS_CHECKBOX, 7, 114, 120, 10, WS_GROUP + LTEXT "&Игровой порт:", -1, 7, 134, 38, 8, NOT WS_VISIBLE + COMBOBOX IDC_GAME_PORT_COMBO, 7, 147, 140, 50, CBS_DROPDOWNLIST | CBS_SORT | NOT WS_VISIBLE | WS_VSCROLL + PUSHBUTTON "&Другой...", IDC_CUSTOM_BUTTON, 208, 147, 50, 14 + CONTROL "", -25525, "STATIC", SS_ETCHEDHORZ, 7, 170, 251, 1 + DEFPUSHBUTTON "OK", IDOK, 155, 179, 50, 14 + PUSHBUTTON "Отмена", IDCANCEL, 208, 179, 50, 14 +} + +IDD_CUSTOM DIALOGEX 0, 0, 265, 183, 0 +STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Особое игровое устройство" +FONT 8, "MS Shell Dlg" +{ + GROUPBOX "Особенности", -1, 7, 7, 245, 52 + AUTORADIOBUTTON "&Джойстик", IDC_JOYSTICK_RADIO, 17, 23, 55, 10 + AUTORADIOBUTTON "&Штурвал или рукоятка управления", IDC_FLIGHT_YOKE_RADIO, 100, 23, 143, 10 + AUTORADIOBUTTON "&Игровой планшет", IDC_GAME_PAD_RADIO, 17, 40, 75, 10 + AUTORADIOBUTTON "Управление гоночной &автомашиной", IDC_RACE_CAR_RADIO, 100, 40, 143, 10 + GROUPBOX "&Степень свободы", -1, 7, 67, 116, 44, WS_GROUP + COMBOBOX IDC_AXES_COMBO, 37, 79, 48, 50, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL + AUTORADIOBUTTON "Руль управления или педали", IDC_RUDDER_PEDALS_RADIO, 14, 97, 63, 10, NOT WS_VISIBLE + AUTORADIOBUTTON "Ось Z", IDC_Z_AXIS_RADIO, 81, 97, 35, 10, NOT WS_VISIBLE + GROUPBOX "К&нопки", -1, 137, 67, 116, 44 + COMBOBOX IDC_BUTTONS_COMBO, 178, 79, 48, 50, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL, WS_EX_CLIENTEDGE + AUTOCHECKBOX "Имеется &переключатель POV", IDC_INC_POINT_CHECKBOX, 7, 123, 115, 10 + LTEXT "&Контролер:", -1, 7, 139, 200, 9 + EDITTEXT IDC_CONTROLLER_NAME_EDIT, 7, 150, 116, 15, ES_AUTOHSCROLL, WS_EX_CLIENTEDGE | WS_EX_STATICEDGE + DEFPUSHBUTTON "OK", IDOK, 137, 150, 50, 14 + PUSHBUTTON "Отмена", IDCANCEL, 203, 150, 50, 14 +} + +IDD_ADVANCED DIALOGEX 0, 0, 220, 86 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Дополнительные параметры" +FONT 8, "MS Shell Dlg" +{ + ICON IDI_CPLSYSTEM, -1, 7, 24, 20, 20 + LTEXT "Выберите устройство, которое следует использовать со старыми программами.", -1, 7, 5, 208, 17 + LTEXT "&Предпочитаемое устройство:", -1, 34, 24, 180, 10 + COMBOBOX IDC_PREFERRED_DEV_COMBO, 34, 38, 179, 75, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL + DEFPUSHBUTTON "OK", IDOK, 106, 65, 50, 14 + PUSHBUTTON "Отмена", IDCANCEL, 163, 65, 50, 14 +} + +STRINGTABLE +BEGIN + IDS_CPLSYSTEMNAME "Игровые устройства" + IDS_CPLSYSTEMDESCRIPTION "Добавление, удаление и настройка параметров игровых устройств, например, джойстиков или игровых планшетов." + IDS_CONTROLLER "Устройство" + IDS_STATUS "Состояние" +END diff --git a/reactos/dll/cpl/joy/manifest.xml b/reactos/dll/cpl/joy/manifest.xml new file mode 100644 index 00000000000..4b535606583 --- /dev/null +++ b/reactos/dll/cpl/joy/manifest.xml @@ -0,0 +1,24 @@ + + + + ReactOS System Control Panel + + + + + + + + diff --git a/reactos/dll/cpl/joy/resource.h b/reactos/dll/cpl/joy/resource.h new file mode 100644 index 00000000000..a2083da057f --- /dev/null +++ b/reactos/dll/cpl/joy/resource.h @@ -0,0 +1,44 @@ +#ifndef __CPL_RESOURCE_H +#define __CPL_RESOURCE_H + +/* icons */ +#define IDI_CPLSYSTEM 102 + +/* dialogs */ +#define IDD_PROPPAGEMAIN 101 +#define IDD_ADD 119 +#define IDD_CUSTOM 4099 +#define IDD_ADVANCED 8188 + +/* strings */ +#define IDS_CPLSYSTEMNAME 1076 +#define IDS_CPLSYSTEMDESCRIPTION 1099 +#define IDS_CONTROLLER 1151 +#define IDS_STATUS 1152 + +/* controls */ +#define IDC_CONTROLLER_LIST 1020 +#define IDC_ADD_BUTTON 1011 +#define IDC_REMOVE_BUTTON 1028 +#define IDC_PROPERTIES_BUTTON 1002 +#define IDC_ADVANCED_BUTTON 1311 +#define IDC_TROUBLESHOOT_BUTTON 1007 +#define IDC_CUSTOM_BUTTON 1169 +#define IDC_GAME_PORT_COMBO 1168 +#define IDC_GAME_CONTROLLERS_LIST 1057 +#define IDC_ENABLE_RUDDERS_CHECKBOX 1000 +#define IDC_JOYSTICK_RADIO 1054 +#define IDC_FLIGHT_YOKE_RADIO 1051 +#define IDC_GAME_PAD_RADIO 1052 +#define IDC_RACE_CAR_RADIO 1053 +#define IDC_AXES_COMBO 1030 +#define IDC_RUDDER_PEDALS_RADIO 1172 +#define IDC_Z_AXIS_RADIO 1174 +#define IDC_BUTTONS_COMBO 1048 +#define IDC_INC_POINT_CHECKBOX 1072 +#define IDC_CONTROLLER_NAME_EDIT 1056 +#define IDC_PREFERRED_DEV_COMBO 8195 + +#endif /* __CPL_RESOURCE_H */ + +/* EOF */ diff --git a/reactos/dll/cpl/joy/resources/applet.ico b/reactos/dll/cpl/joy/resources/applet.ico new file mode 100644 index 0000000000000000000000000000000000000000..f3b952f8dc47f26a0692237db072e7c4ae77e475 GIT binary patch literal 40070 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 G!2drpGMg>{ literal 0 HcmV?d00001 diff --git a/reactos/dll/cpl/joy/rsrc.rc b/reactos/dll/cpl/joy/rsrc.rc new file mode 100644 index 00000000000..2754a25cc68 --- /dev/null +++ b/reactos/dll/cpl/joy/rsrc.rc @@ -0,0 +1,5 @@ +#include "resource.h" +#include + +#include "lang/en-US.rc" +#include "lang/ru-RU.rc"