- get default language and keyboard layout selection from txtsetup.sif and preselect...
authorMatthias Kupfer <mkupfer@reactos.org>
Mon, 10 Nov 2008 19:46:58 +0000 (19:46 +0000)
committerMatthias Kupfer <mkupfer@reactos.org>
Mon, 10 Nov 2008 19:46:58 +0000 (19:46 +0000)
- set selected language and keyboard layout when selecting next property sheet

svn path=/trunk/; revision=37283

reactos/base/setup/reactos/reactos.c

index ed32279..fe37270 100644 (file)
@@ -61,13 +61,13 @@ struct
        LONG FSType; // file system type on partition 
        LONG MBRInstallType; // install bootloader
        LONG FormatPart; // type of format the partition
-       TCHAR SelectedLangId[9]; // selected language
-       TCHAR SelectedKBLayout[9]; // selected kayboard layout
+       LONG SelectedLangId; // selected language (table index)
+       LONG SelectedKBLayout; // selected keyboard layout (table index)
        WCHAR InstallationDirectory[MAX_PATH]; // installation directory on hdd
        BOOLEAN RepairUpdateFlag; // flag for update/repair an installed reactos
        // txtsetup.sif data
-       TCHAR DefaultLang[20]; // default language
-       TCHAR DefaultKBLayout[20]; // default keyboard layout
+       LONG DefaultLang; // default language (table index)
+       LONG DefaultKBLayout; // default keyboard layout (table index)
        PLANG pLanguages;
        LONG LangCount;
        PKBLAYOUT pKbLayouts;
@@ -225,6 +225,8 @@ LangSelDlgProc(HWND hwndDlg,
 {
   PIMGINFO pImgInfo;
   LONG i;
+  LRESULT tindex;
+  HWND hList;
   pImgInfo = (PIMGINFO)GetWindowLongPtr(hwndDlg, DWLP_USER);
   switch (uMsg)
   {
@@ -259,10 +261,23 @@ LangSelDlgProc(HWND hwndDlg,
                              WM_SETFONT,
                              (WPARAM)hTitleFont,
                              (LPARAM)TRUE);*/
+               hList = GetDlgItem(hwndDlg, IDC_LANGUAGES);
                for (i=0; i< SetupData.LangCount;i++)
-                       (void)ComboBox_AddString(GetDlgItem(hwndDlg,IDC_LANGUAGES),SetupData.pLanguages[i].LangName);
+               {
+                       tindex = SendMessage(hList,CB_ADDSTRING,(WPARAM)0,(LPARAM)SetupData.pLanguages[i].LangName);
+                       SendMessage(hList,CB_SETITEMDATA,tindex,i);
+                       if (SetupData.DefaultLang == i)
+                               SendMessage(hList,CB_SETCURSEL,(WPARAM)tindex,(LPARAM)0);
+
+               }
+               hList = GetDlgItem(hwndDlg, IDC_KEYLAYOUT);
                for (i=0; i< SetupData.KbLayoutCount;i++)
-                       (void)ComboBox_AddString(GetDlgItem(hwndDlg,IDC_KEYLAYOUT),SetupData.pKbLayouts[i].LayoutName);
+               {
+                       tindex = SendMessage(hList,CB_ADDSTRING,(WPARAM)0,(LPARAM)SetupData.pKbLayouts[i].LayoutName);
+                       SendMessage(hList,CB_SETITEMDATA,tindex,i);
+                       if (SetupData.DefaultKBLayout == i)
+                               SendMessage(hList,CB_SETCURSEL,(WPARAM)tindex,(LPARAM)0);
+               }
           }
          break;
           case WM_DRAWITEM:
@@ -307,6 +322,20 @@ LangSelDlgProc(HWND hwndDlg,
                      case PSN_QUERYCANCEL:
                        SetWindowLong(hwndDlg, DWL_MSGRESULT,MessageBox(GetParent(hwndDlg), abort_msg, abort_title, MB_YESNO | MB_ICONQUESTION) != IDYES);
                        return TRUE;
+                     case PSN_WIZNEXT: // set the selected data
+                       hList =GetDlgItem(hwndDlg, IDC_LANGUAGES); 
+                       tindex = SendMessage(hList,CB_GETCURSEL, (WPARAM)0, (LPARAM)0);
+                       if (tindex != CB_ERR)
+                       {
+                               SetupData.SelectedLangId = SendMessage(hList,CB_GETITEMDATA, (WPARAM)tindex, (LPARAM)0);
+                       }
+                       hList =GetDlgItem(hwndDlg, IDC_KEYLAYOUT); 
+                       tindex = SendMessage(hList,CB_GETCURSEL, (WPARAM)0, (LPARAM)0);
+                       if (tindex != CB_ERR)
+                       {
+                               SetupData.SelectedKBLayout = SendMessage(hList,CB_GETITEMDATA, (WPARAM)tindex, (LPARAM)0);
+                       }
+                       return TRUE;
                      default:
                        break;
                  }
@@ -596,6 +625,7 @@ RestartDlgProc(HWND hwndDlg,
 void LoadSetupData()
 {
        WCHAR szPath[MAX_PATH];
+       TCHAR tmp[10];
        WCHAR *ch;
        HINF hTxtsetupSif;
        INFCONTEXT InfContext;
@@ -655,6 +685,29 @@ void LoadSetupData()
                                        while (SetupFindNextLine(&InfContext, &InfContext) && Count < SetupData.LangCount);
                        }
                }
+               // get default for keyboard and language
+               SetupData.DefaultKBLayout = -1;
+               SetupData.DefaultLang = -1;
+               if (SetupFindFirstLine(hTxtsetupSif, _T("NLS"),_T("DefaultLayout"),&InfContext))
+               {
+                       SetupGetStringField(&InfContext, 1, tmp, sizeof(tmp) / sizeof(TCHAR), &LineLength);
+                       for (Count=0;Count<SetupData.KbLayoutCount;Count++)
+                               if (_tcscmp(tmp,SetupData.pKbLayouts[Count].LayoutId)==0)
+                               {
+                                       SetupData.DefaultKBLayout = Count;
+                                       break;
+                               }
+               }
+               if (SetupFindFirstLine(hTxtsetupSif, _T("NLS"),_T("DefaultLanguage"),&InfContext))
+               {
+                       SetupGetStringField(&InfContext, 1, tmp, sizeof(tmp) / sizeof(TCHAR), &LineLength);
+                       for (Count=0;Count<SetupData.LangCount;Count++)
+                               if (_tcscmp(tmp,SetupData.pLanguages[Count].LangId)==0)
+                               {
+                                       SetupData.DefaultLang = Count;
+                                       break;
+                               }
+               }
                SetupCloseInfFile(hTxtsetupSif);
        }
 }