diff --git a/reactos/dll/cpl/input/add.c b/reactos/dll/cpl/input/add.c index bf6517d58ee..e6ceb23f0a9 100644 --- a/reactos/dll/cpl/input/add.c +++ b/reactos/dll/cpl/input/add.c @@ -95,36 +95,27 @@ static VOID CreateLanguagesList(HWND hWnd) { - TCHAR LangSel[256]; + //TCHAR LangSel[256]; hLanguageList = hWnd; EnumSystemLocales(LanguagesEnumProc, LCID_INSTALLED); - LoadString(hApplet, - IDS_SELECTED_LANGUAGE, - LangSel, - 256); - - SendMessage(hLanguageList, + /*SendMessage(hLanguageList, CB_SELECTSTRING, (WPARAM) -1, - (LPARAM)LangSel); + (LPARAM)LangSel);*/ } static VOID SelectCurrentLayout(HWND hWnd) { - TCHAR Layout[256]; + //TCHAR Layout[256]; - LoadString(hApplet, - IDS_SELECTED_LAYOUT, - Layout, - 256); - SendMessage(hWnd, + /*SendMessage(hWnd, CB_SELECTSTRING, (WPARAM) -1, - (LPARAM)Layout); + (LPARAM)Layout);*/ } INT_PTR CALLBACK diff --git a/reactos/dll/cpl/input/lang/bg-BG.rc b/reactos/dll/cpl/input/lang/bg-BG.rc index 8803d592ed3..158da44ad1e 100644 --- a/reactos/dll/cpl/input/lang/bg-BG.rc +++ b/reactos/dll/cpl/input/lang/bg-BG.rc @@ -233,14 +233,19 @@ STRINGTABLE BEGIN IDS_CPLSYSTEMNAME "Словесни услуги и езици на въвеждане" IDS_CPLSYSTEMDESCRIPTION "Нагласяване на настройките за езиците на въвеждане." + IDS_KEYBOARD "Keyboard" + IDS_ADV_TEXT_SRV "Advanced Text Services" + IDS_NONE "(None)" + IDS_UNKNOWN "(Unknown)" + IDS_RESTART "Do you want to restart your computer now?" + IDS_SPEECH "Speech" + IDS_HRD_REC "Handwriting Recognition" + IDS_OFF_ADV_TXT_SRV "Do you want to turn off advanced text services?" + IDS_WHATS_THIS "What's This?" END STRINGTABLE BEGIN - //Selected language on "&Добавяне език на въвеждане" - IDS_SELECTED_LANGUAGE "English (United States)" - //Selected keyboard layout on "&Добавяне език на въвеждане" - IDS_SELECTED_LAYOUT, "САЩ- Дворак" IDS_US_LAYOUT, "САЩ" IDS_BELGIAN_LAYOUT, "Белгийска (точка)" IDS_BELGIAN_FRENCH_LAYOUT, "Белгийска за френски" diff --git a/reactos/dll/cpl/input/lang/de-DE.rc b/reactos/dll/cpl/input/lang/de-DE.rc index 6a6a4476f12..f83cc02e86e 100644 --- a/reactos/dll/cpl/input/lang/de-DE.rc +++ b/reactos/dll/cpl/input/lang/de-DE.rc @@ -233,14 +233,19 @@ STRINGTABLE BEGIN IDS_CPLSYSTEMNAME "Textdienste und Eingabesprachen" IDS_CPLSYSTEMDESCRIPTION "Дndert die Einstellungen der Texteingabe einer Sprache." + IDS_KEYBOARD "Keyboard" + IDS_ADV_TEXT_SRV "Advanced Text Services" + IDS_NONE "(None)" + IDS_UNKNOWN "(Unknown)" + IDS_RESTART "Do you want to restart your computer now?" + IDS_SPEECH "Speech" + IDS_HRD_REC "Handwriting Recognition" + IDS_OFF_ADV_TXT_SRV "Do you want to turn off advanced text services?" + IDS_WHATS_THIS "What's This?" END STRINGTABLE BEGIN - //Selected language on "Add Input language" - IDS_SELECTED_LANGUAGE "English (United States)" - //Selected keyboard layout on "Add Input language" - IDS_SELECTED_LAYOUT, "United States-Dvorak" IDS_US_LAYOUT, "US" IDS_BELGIAN_LAYOUT, "Belgisch (Punkt)" IDS_BELGIAN_FRENCH_LAYOUT, "Belgisch (Wallonisch)" diff --git a/reactos/dll/cpl/input/lang/en-US.rc b/reactos/dll/cpl/input/lang/en-US.rc index 5cdb9993cf5..f2b881cf18f 100644 --- a/reactos/dll/cpl/input/lang/en-US.rc +++ b/reactos/dll/cpl/input/lang/en-US.rc @@ -233,14 +233,19 @@ STRINGTABLE BEGIN IDS_CPLSYSTEMNAME "Text Services and Input Languages" IDS_CPLSYSTEMDESCRIPTION "Customizes settings for text input of languages." + IDS_KEYBOARD "Keyboard" + IDS_ADV_TEXT_SRV "Advanced Text Services" + IDS_NONE "(None)" + IDS_UNKNOWN "(Unknown)" + IDS_RESTART "Do you want to restart your computer now?" + IDS_SPEECH "Speech" + IDS_HRD_REC "Handwriting Recognition" + IDS_OFF_ADV_TXT_SRV "Do you want to turn off advanced text services?" + IDS_WHATS_THIS "What's This?" END STRINGTABLE BEGIN - //Selected language on "Add Input language" - IDS_SELECTED_LANGUAGE "English (United States)" - //Selected keyboard layout on "Add Input language" - IDS_SELECTED_LAYOUT, "United States-Dvorak" IDS_US_LAYOUT, "US" IDS_BELGIAN_LAYOUT, "Belgian (Period)" IDS_BELGIAN_FRENCH_LAYOUT, "Belgian French" diff --git a/reactos/dll/cpl/input/lang/fr-FR.rc b/reactos/dll/cpl/input/lang/fr-FR.rc index f3272d90467..699cbc777cb 100644 --- a/reactos/dll/cpl/input/lang/fr-FR.rc +++ b/reactos/dll/cpl/input/lang/fr-FR.rc @@ -233,16 +233,21 @@ STRINGTABLE BEGIN IDS_CPLSYSTEMNAME "Services texte et langue de saisie" IDS_CPLSYSTEMDESCRIPTION "Personnalise les paramиtres pour la langue de saisie de texte." + IDS_KEYBOARD "Keyboard" + IDS_ADV_TEXT_SRV "Advanced Text Services" + IDS_NONE "(None)" + IDS_UNKNOWN "(Unknown)" + IDS_RESTART "Do you want to restart your computer now?" + IDS_SPEECH "Speech" + IDS_HRD_REC "Handwriting Recognition" + IDS_OFF_ADV_TXT_SRV "Do you want to turn off advanced text services?" + IDS_WHATS_THIS "What's This?" END /* FIXME : To improve/complete */ /* FIXME : А amйliorer/complйter */ STRINGTABLE BEGIN - //Selected language on "Add Input language" - IDS_SELECTED_LANGUAGE "Anglais (Йtats-Unis)" - //Selected keyboard layout on "Add Input language" - IDS_SELECTED_LAYOUT, "Йtats-Unis-Dvorak" IDS_US_LAYOUT, "US" IDS_BELGIAN_LAYOUT, "Belge (Period)" IDS_BELGIAN_FRENCH_LAYOUT, "Belge Franзais" diff --git a/reactos/dll/cpl/input/lang/ru-RU.rc b/reactos/dll/cpl/input/lang/ru-RU.rc index 2487da5ef63..6a6a798a8e4 100644 --- a/reactos/dll/cpl/input/lang/ru-RU.rc +++ b/reactos/dll/cpl/input/lang/ru-RU.rc @@ -220,7 +220,7 @@ END IDD_INPUT_LANG_PROP DIALOG 20, 20, 227, 75 STYLE DS_SETFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_3DLOOK | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION -CAPTION "Свойства ввода" +CAPTION "Параметры ввода" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Язык ввода:", -1, 7, 7, 61, 8 @@ -234,15 +234,20 @@ END STRINGTABLE BEGIN IDS_CPLSYSTEMNAME "Текстовые сервисы и ввод языков" - IDS_CPLSYSTEMDESCRIPTION "Дополнительные установки текстового ввода языков." + IDS_CPLSYSTEMDESCRIPTION "Дополнительные параметры текстового ввода языков." + IDS_KEYBOARD "Клавиатура" + IDS_ADV_TEXT_SRV "Advanced Text Services" + IDS_NONE "(None)" + IDS_UNKNOWN "(Unknown)" + IDS_RESTART "Do you want to restart your computer now?" + IDS_SPEECH "Speech" + IDS_HRD_REC "Handwriting Recognition" + IDS_OFF_ADV_TXT_SRV "Do you want to turn off advanced text services?" + IDS_WHATS_THIS "What's This?" END STRINGTABLE BEGIN - //Selected language on "Add Input language" - IDS_SELECTED_LANGUAGE "English (United States)" - //Selected keyboard layout on "Add Input language" - IDS_SELECTED_LAYOUT, "United States-Dvorak" IDS_US_LAYOUT, "US" IDS_BELGIAN_LAYOUT, "Belgian (Period)" IDS_BELGIAN_FRENCH_LAYOUT, "Belgian French" diff --git a/reactos/dll/cpl/input/lang/uk-UA.rc b/reactos/dll/cpl/input/lang/uk-UA.rc index 5e2c067a39c..cac83888b1f 100644 --- a/reactos/dll/cpl/input/lang/uk-UA.rc +++ b/reactos/dll/cpl/input/lang/uk-UA.rc @@ -242,14 +242,19 @@ STRINGTABLE BEGIN IDS_CPLSYSTEMNAME "Мови та служби текстового вводу" IDS_CPLSYSTEMDESCRIPTION "Налаштовує параметри для текстового вводу." + IDS_KEYBOARD "Keyboard" + IDS_ADV_TEXT_SRV "Advanced Text Services" + IDS_NONE "(None)" + IDS_UNKNOWN "(Unknown)" + IDS_RESTART "Do you want to restart your computer now?" + IDS_SPEECH "Speech" + IDS_HRD_REC "Handwriting Recognition" + IDS_OFF_ADV_TXT_SRV "Do you want to turn off advanced text services?" + IDS_WHATS_THIS "What's This?" END STRINGTABLE BEGIN - //Selected language on "Add Input language" ("Додавання мови вводу") - IDS_SELECTED_LANGUAGE "English (United States)" - //Selected keyboard layout on "Add Input language" ("Додавання мови вводу") - IDS_SELECTED_LAYOUT, "United States-Dvorak" IDS_US_LAYOUT, "США" IDS_BELGIAN_LAYOUT, "Бельгійська (із крапкою)" IDS_BELGIAN_FRENCH_LAYOUT, "Французька (Бельгія)" diff --git a/reactos/dll/cpl/input/resource.h b/reactos/dll/cpl/input/resource.h index d2449109366..77d0d00006a 100644 --- a/reactos/dll/cpl/input/resource.h +++ b/reactos/dll/cpl/input/resource.h @@ -79,7 +79,16 @@ /* IDS */ #define IDS_CPLSYSTEMNAME 1 #define IDS_CPLSYSTEMDESCRIPTION 2 - +#define IDS_KEYBOARD 3 +#define IDS_ADV_TEXT_SRV 4 +#define IDS_NONE 5 +#define IDS_UNKNOWN 6 +#define IDS_RESTART 7 +#define IDS_SPEECH 8 +#define IDS_HRD_REC 9 +#define IDS_OFF_ADV_TXT_SRV 10 +#define IDS_WHATS_THIS 11 +/* Layouts */ #define IDS_US_LAYOUT 5000 #define IDS_BELGIAN_LAYOUT 5001 #define IDS_BELGIAN_FRENCH_LAYOUT 5002 @@ -213,9 +222,6 @@ #define IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT 5134 #define IDS_BULGARIAN_PHONETIC_BDS_LAYOUT 5135 -#define IDS_SELECTED_LAYOUT 6000 -#define IDS_SELECTED_LANGUAGE 6001 - #endif /* __CPL_RESOURCE_H */ /* EOF */ diff --git a/reactos/dll/cpl/input/resources/information.ico b/reactos/dll/cpl/input/resources/information.ico index b88b35c2156..e25c125863d 100644 Binary files a/reactos/dll/cpl/input/resources/information.ico and b/reactos/dll/cpl/input/resources/information.ico differ diff --git a/reactos/dll/cpl/input/resources/keyboard.ico b/reactos/dll/cpl/input/resources/keyboard.ico index 082c0049982..b472d667477 100644 Binary files a/reactos/dll/cpl/input/resources/keyboard.ico and b/reactos/dll/cpl/input/resources/keyboard.ico differ diff --git a/reactos/dll/cpl/input/resources/marker.ico b/reactos/dll/cpl/input/resources/marker.ico index 699d159f249..41259d42d62 100644 Binary files a/reactos/dll/cpl/input/resources/marker.ico and b/reactos/dll/cpl/input/resources/marker.ico differ diff --git a/reactos/dll/cpl/input/resources/microphone.ico b/reactos/dll/cpl/input/resources/microphone.ico index 1a562ca6b85..42662cf245d 100644 Binary files a/reactos/dll/cpl/input/resources/microphone.ico and b/reactos/dll/cpl/input/resources/microphone.ico differ diff --git a/reactos/dll/cpl/input/settings.c b/reactos/dll/cpl/input/settings.c index fd259257852..cefbd44e143 100644 --- a/reactos/dll/cpl/input/settings.c +++ b/reactos/dll/cpl/input/settings.c @@ -39,27 +39,120 @@ #include "resource.h" #include "input.h" -#define BUFSIZE 80 +#define BUFSIZE 256 -static -BOOL -CreateDefaultLangList(HWND hWnd) +static BOOL +GetLayoutName(LPCTSTR lcid, LPCTSTR name) { HKEY hKey; - TCHAR szPreload[BUFSIZE]; - TCHAR szCount[BUFSIZE]; - TCHAR Lang[BUFSIZE]; DWORD dwBufLen; - DWORD dwBufCLen; - DWORD cValues; - LONG lRet; + TCHAR szBuf[BUFSIZE]; + + _stprintf(szBuf, L"SYSTEM\\ControlSet001\\Control\\Keyboard Layouts\\%s",lcid); + + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, (LPCTSTR)szBuf, 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) + { + dwBufLen = BUFSIZE; + if (RegQueryValueEx(hKey,L"Layout Text",NULL,NULL,(LPBYTE)name,&dwBufLen) == ERROR_SUCCESS) + { + RegCloseKey(hKey); + return TRUE; + } + } + + return FALSE; +} + +static BOOL +TreeView_GetItemText(HWND hTree, HTREEITEM hItem, LPTSTR name, DWORD buf) +{ + TVITEM tv = {0}; + + tv.mask = TVIF_TEXT | TVIF_HANDLE; + tv.hItem = hItem; + tv.pszText = name; + tv.cchTextMax = (int)buf; + + return TreeView_GetItem(hTree, &tv); +} + +static HTREEITEM +GetRootHandle(HWND hWnd, TCHAR * Name) +{ + HTREEITEM hNext = 0, hRoot; + TCHAR Tmp[256]; + HWND hTree; + DWORD i, count; + HKEY hKey; + + hTree = GetDlgItem(hWnd, IDC_KEYLAYOUT_TREE); + hRoot = TreeView_GetRoot(hTree); + + RegOpenKeyEx(HKEY_CURRENT_USER, L"Keyboard Layout\\Preload", 0, KEY_QUERY_VALUE, &hKey); + RegQueryInfoKey(hKey,NULL,NULL,NULL,NULL,NULL,NULL,&count,NULL,NULL,NULL,NULL); + RegCloseKey(hKey); + + for (i = 0; i < count; i++) + { + if (i == 0) + { + (VOID) TreeView_GetItemText(hTree, hRoot, (LPTSTR)Tmp, 256); + } + else + { + if (i == 1) + { + hNext = TreeView_GetNextItem(hTree, hRoot, TVGN_NEXT); + } + else + { + hNext = TreeView_GetNextItem(hTree, hNext, TVGN_NEXT); + } + (VOID) TreeView_GetItemText(hTree, hNext, (LPTSTR)Tmp, 256); + } + + if (_tcscmp(Name,Tmp) == 0) + { + if (i == 0) return hRoot; + return hNext; + } + } + return 0; +} + +static BOOL +InitDefaultLangList(HWND hWnd) +{ + HKEY hKey, hSubKey; + TCHAR szPreload[BUFSIZE], szCount[BUFSIZE], szSub[BUFSIZE]; + TCHAR szName[BUFSIZE], Lang[BUFSIZE]; + DWORD dwBufLen, dwBufCLen, cValues; INT Count; LCID Lcid; + TV_INSERTSTRUCT inc; + HWND TWwnd; + int Index[3]; + HIMAGELIST hImgList; + HICON hIcon; - if (RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Keyboard Layout\\Preload"), 0, KEY_QUERY_VALUE, &hKey) != ERROR_SUCCESS) - { + ZeroMemory(&inc, sizeof(TV_INSERTSTRUCT)); + inc.hInsertAfter = TVI_LAST; + inc.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_STATE; + inc.hParent = TVI_ROOT; + + hImgList = ImageList_Create(16,16,ILC_COLOR8 | ILC_MASK,5,5); + hIcon = LoadImage(hApplet,MAKEINTRESOURCE(IDI_KEYBOARD_ICO),IMAGE_ICON,16,16,LR_DEFAULTCOLOR); + Index[0] = ImageList_AddIcon(hImgList,hIcon); + hIcon = LoadImage(hApplet,MAKEINTRESOURCE(IDI_MARKER_ICO),IMAGE_ICON,16,16,LR_DEFAULTCOLOR); + Index[1] = ImageList_AddIcon(hImgList,hIcon); + hIcon = LoadImage(hApplet,MAKEINTRESOURCE(IDI_INFO_ICO),IMAGE_ICON,16,16,LR_DEFAULTCOLOR); + Index[2] = ImageList_AddIcon(hImgList,hIcon); + DestroyIcon(hIcon); + + TWwnd = GetDlgItem(hWnd, IDC_KEYLAYOUT_TREE); + + if (RegOpenKeyEx(HKEY_CURRENT_USER, L"Keyboard Layout\\Preload", 0, KEY_QUERY_VALUE, &hKey) != ERROR_SUCCESS) return FALSE; - } RegQueryInfoKey(hKey,NULL,NULL,NULL,NULL,NULL,NULL,&cValues,NULL,NULL,NULL,NULL); @@ -67,32 +160,98 @@ CreateDefaultLangList(HWND hWnd) { for (Count = 0; Count < cValues; Count++) { - szCount[0] = TEXT('\0'); + szCount[0] = L'\0'; dwBufCLen = BUFSIZE; - lRet = RegEnumValue(hKey,Count,(LPTSTR)szCount,&dwBufCLen,NULL,NULL,NULL,NULL); + RegEnumValue(hKey,Count,(LPTSTR)szCount,&dwBufCLen,NULL,NULL,NULL,NULL); - _stprintf(szCount,TEXT("%d"),Count + 1); + _stprintf(szCount,L"%d",Count + 1); dwBufLen = BUFSIZE; RegQueryValueEx(hKey,(LPTSTR)szCount,NULL,NULL,(LPBYTE)szPreload,&dwBufLen); Lcid = _tcstoul(szPreload, NULL, 16); + /* FIXME: If it is established more than one English layouts of the keyboard it is incorrectly determined Lang */ GetLocaleInfo(Lcid, LOCALE_SLANGUAGE, (LPTSTR)Lang, sizeof(Lang)); - SendMessage(hWnd, - CB_ADDSTRING, - 0, - (LPARAM)Lang); + if (RegOpenKeyEx(HKEY_CURRENT_USER, L"Keyboard Layout\\Substitutes", 0, KEY_QUERY_VALUE, &hSubKey) != ERROR_SUCCESS) + return FALSE; + + dwBufLen = BUFSIZE; + TCHAR szLOName[BUFSIZE], szBuf[BUFSIZE]; + LONG Ret; + HTREEITEM hRoot = 0, hKeyBrd = 0, hParent; + + Ret = RegQueryValueEx(hSubKey,(LPCTSTR)szPreload,NULL,NULL,(LPBYTE)szSub,&dwBufLen); + if (Ret == ERROR_SUCCESS) _tcscpy(szPreload, szSub); + + GetLayoutName(szPreload,szLOName); + + hParent = GetRootHandle(hWnd, Lang); + if (hParent == 0) + { + inc.hParent = NULL; + inc.item.pszText = Lang; + inc.item.iImage = Index[2]; + inc.item.iSelectedImage = Index[2]; + if (Count == 0) + { + inc.item.state = TVIS_BOLD; + inc.item.stateMask = TVIS_BOLD; + } + else + { + inc.item.state = !TVIS_BOLD; + inc.item.stateMask = !TVIS_BOLD; + } + hRoot = TreeView_InsertItem(TWwnd, &inc); + if (Count == 0) (VOID) TreeView_SelectItem(TWwnd, hRoot); + + LoadString(hApplet, IDS_KEYBOARD, (LPTSTR)szBuf, BUFSIZE); + inc.hParent = hRoot; + inc.item.pszText = szBuf; + inc.item.iImage = Index[0]; + inc.item.iSelectedImage = Index[0]; + inc.item.state = !TVIS_BOLD; + inc.item.stateMask = !TVIS_BOLD; + hKeyBrd = TreeView_InsertItem(TWwnd, &inc); + inc.hParent = hKeyBrd; + } + else + { + inc.hParent = TreeView_GetChild(TWwnd, hParent); + } + + inc.item.pszText = szLOName; + inc.item.iImage = Index[1]; + inc.item.iSelectedImage = Index[1]; if (Count == 0) { - SendMessage(hWnd, - CB_SELECTSTRING, - (WPARAM)-1, - (LPARAM)Lang); + inc.item.state = TVIS_BOLD; + inc.item.stateMask = TVIS_BOLD; } - } + else + { + inc.item.state = !TVIS_BOLD; + inc.item.stateMask = !TVIS_BOLD; + } + (VOID) TreeView_InsertItem(TWwnd, &inc); + (VOID) TreeView_SetImageList(TWwnd, hImgList, TVSIL_NORMAL); + (VOID) TreeView_Expand(TWwnd, hRoot, TVM_EXPAND); + (VOID) TreeView_Expand(TWwnd, hKeyBrd, TVM_EXPAND); + + _stprintf(szName,L"%s - %s",Lang,szLOName); + + RegCloseKey(hSubKey); + + HWND CBwnd; + CBwnd = GetDlgItem(hWnd, IDC_DEFAULT_INPUT_LANG); + SendMessage(CBwnd,CB_ADDSTRING,0,(LPARAM)szName); + SendMessage(CBwnd,CB_SETITEMDATA,0,(LPARAM)Lcid); + if (Count == 0) + SendMessage(CBwnd,CB_SELECTSTRING,(WPARAM)-1,(LPARAM)szName); + } } RegCloseKey(hKey); @@ -109,7 +268,7 @@ SettingPageProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) switch (uMsg) { case WM_INITDIALOG: - CreateDefaultLangList(GetDlgItem(hwndDlg, IDC_DEFAULT_INPUT_LANG)); + InitDefaultLangList(hwndDlg); break; case WM_COMMAND: