From 79c2227121dfae06266c67f7e753698d3f3fa168 Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Sun, 16 Dec 2007 20:02:17 +0000 Subject: [PATCH] - Add some functionality - Small fixes and updates svn path=/trunk/; revision=31284 --- reactos/dll/cpl/input/add.c | 21 +- reactos/dll/cpl/input/lang/bg-BG.rc | 13 +- reactos/dll/cpl/input/lang/de-DE.rc | 13 +- reactos/dll/cpl/input/lang/en-US.rc | 13 +- reactos/dll/cpl/input/lang/fr-FR.rc | 13 +- reactos/dll/cpl/input/lang/ru-RU.rc | 17 +- reactos/dll/cpl/input/lang/uk-UA.rc | 13 +- reactos/dll/cpl/input/resource.h | 14 +- .../dll/cpl/input/resources/information.ico | Bin 3438 -> 1406 bytes reactos/dll/cpl/input/resources/keyboard.ico | Bin 3438 -> 1406 bytes reactos/dll/cpl/input/resources/marker.ico | Bin 318 -> 318 bytes .../dll/cpl/input/resources/microphone.ico | Bin 3438 -> 1406 bytes reactos/dll/cpl/input/settings.c | 211 +++++++++++++++--- 13 files changed, 257 insertions(+), 71 deletions(-) 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 b88b35c2156300eb51cccc85d05f85962ae0079b..e25c125863d300a4272bd0e4767c362f2d1d9b69 100644 GIT binary patch delta 43 vcmaDS^^Z%0fq@YS1q47e2SWxc1A`dDMw2!cMuy3|S$0gm&M7jvomCtFr}7C3 delta 1509 zcmZA1e@vT27{KvkfGCZd2nh;A39#W{q9JrGumvf5iUCD*?9-t*jhZ}0Qe z8#?va^FjoOK(TqV`o34B1q-oTh`Zx(krpJxS?=AL*NC)0A?^vS3d;=&IA$sestpJ+ zB?a$#RI5_x;q(CCrw}ngriX%dh3!jCP1qe3WsZ%Fos5WxxS+;NJfkLL{m7uVZNVvj zv0A)p%*4}MLe$ma>}>gEMY%loO`g0vqt)zBNqImGnj91I`r^F2*w?!{xikFZ505^Q z^FeZN&LN$r@KUKPtSpm-RTpJ;TB?(|?X3N{_LJl{6SEJ#wp3emO4>V`r*Z)ycC@1YVy1E-mO)9s$!TfD|`H2&CCl6&-8+6${O%=AP z0)xyslGL>>SqP&rB)vN47`C&^zbePNTFb_3N8o%|AZvm1wtt}u#=36n2 zxoL--pB}s9b~(?jc-+OV+mk=fj`o#I^mddCbvBu=7N_U+ceY65yRi%Yx#BrS#}oIS zzEW8t-HY=!mvj0j-sarG%*6TGvA$A={YJ%*rMYa_+G45wF<Ic1#Sy!; zLnT?~rpGFr{|%H(4fd2z^jWGM1KmBgt93H#z{@iPYqa{f$Q|hkdj`}~)K*tK9=W{a zlGCFDvcdd=%y?tpIJWkZjSYIO=->b$1vg}j$Q6H2C)xl`zg9xWCC=05BYwqn(_oxU8f_m_~ zM@DG3VgCF~(Z#AMA@qouW+|dqptV4a>PwpEKjCjD~ox?^u*s%_E zq;H7FIK&YSaDw5DZg688+Q;^1eiT5?5`otHh#QUr?qG*H Y&|wa88=l~ONeBzi2ZYJM000xd5uE@4 literal 3438 zcmb`}&r2g`7{Kvoqi!|3wl+yyyDe5)4`TP^p(jx(Me+wI^x~nXDkT4b$hIX=dJ1^( zU{h9h*@Iq_D4sT9y<|J__peZ-Pzd+~nxjzY)9*Xu46_pxP1`3v^DCeCoyqvV&y2`D zX_KBFVcjV+9U@Zc!N z|KLE*&d%ig{9G$8vOZB!`EGvcJDCdwYAbySpnpJ3F$vx@z~exw&Z{J3T$M&v$io zCAGg)o?)gKa3y2 zPvEEUNqh>Q!RPQ6eh5E?pTy7N=kW{p6?`6F#Fz0Ed=)>6pT^JOm+%|-6MPNNeTjhVNsv4Kmt>8Eqqswh2bt6h4Vh z;WPLg-og*z$MBQ*S^PYH0l$LJ~@Duncd=j6+XYe_^W#&sDLcw_dgWg!| z!$*%k>i)R9vojQWE9wigAB)C_uJ@vmNYw0ixenEmdzosT(e_Ra3Qe7YhLd*Ay$ z{EqF7dq9RCh94T==|oqUV85-sy`#Ou#C;+pf$QbxgaSW_Bcb|Z*T_uKR^kcxPug6O zrtO<`w%_h*oSOW92le@TQvYQ>GwrC!N=;U3vQnq*q&6$H*-q-SQrndpZLg{QYSKL? z&jY2#x0J#5=Dem4_x$dfXN>aPu)pJ3q9%ewemAqt#sp&u{h{rRm$W^QXT( z?+1VLexN3KNAT8W+n>BUs6VgA&sXj^YO?;d!FMzM`Ghg!`D^ksjyo?mesIe+?Rv;B z$)CyZ$ZyGU@^dmubKau+H?_S2E7K z-hU0QvDH7y2vvk4!rUdOAQTXS^1o5Mx%}kf5pgEknshGq04{J_V&F%Dg-uJ%OmwN^Os572>&Uv37=bVT0 z{XR#^&?x2Ph<>c&T3f!@qW1Q7EnW7Sj`VbE*REaa;CwrF?9isqH)-ovUuyN5ceJv8l@1>{ ztg~m&YD2?Dy|VOG)xY&-D49ct>zKZc6i4FM6yHWwh*Tj#%U72-+%qAri`$}VO7ww# zxZZ5D^|7bEx;-kBi`;>~y35qaxG~$Qo8JEG%MiN@Q<0|c%J`LXdwjd@iN0MG-|~>A zR$o6Wp+8WW;l)|To=rYtjntOG?Xvc66Z;RH&Av4pYZMVq6Vj?^GQ3+G@3ww43y zZ`91jaxh+>NEQ$IgU)hb`>-7RPCrr(%+7LPcGt^+=?`!|)2|@D$;Qyua@ph*q;ssF zxA2~~Vrx=|eLji|nYC03K2uwe!{B=+gVb+SaNj95Ds$VFckvX?yOwBw`ABoS-%bQaE{G5tP&oeT+xcJ$;l9H0=N+V@v zKP47>YG$mUpy26Q&lE9#X!^sCJUSyc@3F_HJ@KTk&%PgZ!2^ZU9%O#&#M|zkl$AF* z|DJoN-j~qd8H>ekxy##^=_lQun>%^(9sWEk7R$~t{RDqLHj|b$Zv0I*`}0xJ(X`CW zF%fUB7C5Pe?=9i)sbkZ#PMRIO^*1_q1L;LSfWK!K#5Nze(7}Zc9(8c9qfR(@(ZQ#V zdg0(l2S1wM;Pw3BSqBe0xZe|Mf`fM*yzAgy2k$y~*ISo!rmb(jwzdg8?!~aR1A)^W zobLI->uLVB9<|F8>V%_Cc;k3H?gF81IO>L@ZaC`3PoeXFNDXq-AV&>y)F4L<^725P z^Y%h5a?~P6&2rQuM?Jb4@^|6&sh^Homs~ekpStHPcNT-X_fN>bfg0!{D(+SFM`J$2MmM?H1aQ%61B9`a9HpL(3khvkJ@?x@d0@)q(Rvc9cNjdyl-6Ix7Q&5c7EOuY3uWr7}lTnh4a*oL#`drCA| zgpVWqh3zqeH6RTz3uTaL2m`#5YS;p@NQuuBmH_B*1P#PM5by)^06Rbq7=(Ar6k~$Z zpafh9?l;%~GQa>T;MY$A17dOsX;1(RzyR#|4e*0~pl>fmuVD}B0X>)p@*tj5aNk)7 zv;%f<3e@f88Q3S|bHzb;5ZijdO>%It7j0kDGsz!5Y8 i#&mm72nfMoviZJT35-+hIfegmxL^O6{_lUS=l=rmoIel% 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: