reactos/dll/cpl/input/keysettings.c
Amine Khaldi c424146e2c Create a branch for cmake bringup.
svn path=/branches/cmake-bringup/; revision=48236
2010-07-24 18:52:44 +00:00

170 lines
4.6 KiB
C

/*
*
* PROJECT: input.dll
* FILE: dll/win32/input/keysettings.c
* PURPOSE: input.dll
* PROGRAMMER: Dmitry Chapyshev (dmitry@reactos.org)
* Colin Finck
* UPDATE HISTORY:
* 06-09-2007 Created
*/
#include "resource.h"
#include "input.h"
static HWND hKeySettingsWnd;
static VOID
AddListColumn(HWND hDlg)
{
LV_COLUMN column;
HWND hList = GetDlgItem(hDlg, IDC_KEY_LISTVIEW);
ZeroMemory(&column, sizeof(LV_COLUMN));
column.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
column.fmt = LVCFMT_LEFT;
column.iSubItem = 0;
column.pszText = _T("");
column.cx = 210;
(VOID) ListView_InsertColumn(hList, 0, &column);
column.fmt = LVCFMT_RIGHT;
column.cx = 145;
column.iSubItem = 1;
column.pszText = _T("");
(VOID) ListView_InsertColumn(hList, 1, &column);
}
static DWORD
GetAttributes()
{
DWORD dwValue, dwType, dwSize;
HKEY hKey;
if (RegOpenKeyEx(HKEY_CURRENT_USER, _T("Keyboard Layout"), 0, KEY_QUERY_VALUE, &hKey) != ERROR_SUCCESS)
return 0x0;
dwType = REG_DWORD;
dwSize = sizeof(DWORD);
if (RegQueryValueEx(hKey, _T("Attributes"), NULL, &dwType, (LPBYTE)&dwValue, &dwSize) != ERROR_SUCCESS)
{
RegCloseKey(hKey);
return 0x0;
}
RegCloseKey(hKey);
return dwValue;
}
static VOID
SaveKeySettings(HWND hDlg)
{
HKEY hKey;
DWORD dwValue;
if (SendDlgItemMessage(hDlg, IDC_PRESS_CL_KEY_RB, BM_GETCHECK, 0, 0) == BST_CHECKED)
dwValue = 0x0;
else
dwValue = 0x10000;
if (RegCreateKeyEx(HKEY_CURRENT_USER, _T("Keyboard Layout"), 0, NULL,
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
NULL, &hKey, NULL) == ERROR_SUCCESS)
{
RegSetValueEx(hKey, _T("Attributes"), 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(DWORD));
RegCloseKey(hKey);
}
}
static VOID
InitKeySettingsDlg(HWND hDlg)
{
TCHAR szHotkey[1 + 1], szLangHotkey[1 + 1], szLayoutHotkey[1 + 1],
szTitle[MAX_PATH], szText[MAX_PATH];
LV_ITEM item = {0};
HWND hHotkeyList = GetDlgItem(hDlg, IDC_KEY_LISTVIEW);
INT i;
if (GetAttributes() != 0x0)
SendDlgItemMessage(hDlg, IDC_PRESS_SHIFT_KEY_RB, BM_SETCHECK, 1, 1);
else
SendDlgItemMessage(hDlg, IDC_PRESS_CL_KEY_RB, BM_SETCHECK, 1, 1);
if (!GetHotkeys(szHotkey, szLangHotkey, szLayoutHotkey))
return;
if (!LoadString(hApplet, IDS_SWITCH_BET_INLANG, szTitle, sizeof(szTitle) / sizeof(TCHAR)))
return;
if (_tcscmp(szLangHotkey, _T("2")) == 0)
LoadString(hApplet, IDS_CTRL_SHIFT, szText, sizeof(szText) / sizeof(TCHAR));
else if (_tcscmp(szLangHotkey, _T("1")) == 0)
LoadString(hApplet, IDS_LEFT_ALT_SHIFT, szText, sizeof(szText) / sizeof(TCHAR));
else
LoadString(hApplet, IDS_NONE, szText, sizeof(szText) / sizeof(TCHAR));
item.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE;
item.pszText = szTitle;
item.iItem = 0;
i = ListView_InsertItem(hHotkeyList, &item);
ListView_SetItemText(hHotkeyList, i, 1, szText);
(VOID) ListView_SetHotItem(hHotkeyList, i);
ListView_SetItemState(hHotkeyList, i, LVIS_SELECTED, LVIS_OVERLAYMASK);
}
VOID
UpdateKeySettingsList()
{
(VOID) ListView_DeleteAllItems(GetDlgItem(hKeySettingsWnd, IDC_KEY_LISTVIEW));
InitKeySettingsDlg(hKeySettingsWnd);
}
INT_PTR CALLBACK
KeySettingsDlgProc(HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
hKeySettingsWnd = hDlg;
AddListColumn(hDlg);
(VOID) ListView_SetExtendedListViewStyle(GetDlgItem(hDlg, IDC_KEY_LISTVIEW),
LVS_EX_FULLROWSELECT);
InitKeySettingsDlg(hDlg);
break;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_CHANGE_KEY_SEQ_BTN:
DialogBox(hApplet,
MAKEINTRESOURCE(IDD_CHANGE_KEY_SEQ),
hDlg,
ChangeKeySeqDlgProc);
break;
case IDOK:
SaveKeySettings(hDlg);
EndDialog(hDlg, LOWORD(wParam));
break;
case IDCANCEL:
EndDialog(hDlg, LOWORD(wParam));
break;
}
break;
}
return FALSE;
}
/* EOF */