mirror of
https://github.com/reactos/reactos.git
synced 2025-02-25 09:50:02 +00:00
- Fill combo box with languages and keyboard layouts.
- Store data in structure for preselection of values. - TODO: preselect keyboard layout after language selection / default language svn path=/trunk/; revision=35113
This commit is contained in:
parent
1138fdcb70
commit
7da2062490
1 changed files with 98 additions and 3 deletions
|
@ -26,6 +26,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#include <windowsx.h>
|
||||||
#include <commctrl.h>
|
#include <commctrl.h>
|
||||||
#include <tchar.h>
|
#include <tchar.h>
|
||||||
#include <setupapi.h>
|
#include <setupapi.h>
|
||||||
|
@ -37,19 +38,40 @@
|
||||||
|
|
||||||
HFONT hTitleFont;
|
HFONT hTitleFont;
|
||||||
|
|
||||||
|
typedef struct _LANG
|
||||||
|
{
|
||||||
|
TCHAR LangId[9];
|
||||||
|
TCHAR LangName[128];
|
||||||
|
LONG DefaultKBLayout;
|
||||||
|
} LANG, *PLANG;
|
||||||
|
|
||||||
|
typedef struct _KBLAYOUT
|
||||||
|
{
|
||||||
|
TCHAR LayoutId[9];
|
||||||
|
TCHAR LayoutName[128];
|
||||||
|
TCHAR DllName[128];
|
||||||
|
} KBLAYOUT, *PKBLAYOUT;
|
||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
|
// Settings
|
||||||
LONG DestDiskNumber; // physical disk
|
LONG DestDiskNumber; // physical disk
|
||||||
LONG DestPartNumber; // partition on disk
|
LONG DestPartNumber; // partition on disk
|
||||||
LONG DestPartSize; // if partition doesn't exist, size of partition
|
LONG DestPartSize; // if partition doesn't exist, size of partition
|
||||||
LONG FSType; // file system type on partition
|
LONG FSType; // file system type on partition
|
||||||
LONG MBRInstallType; // install bootloader
|
LONG MBRInstallType; // install bootloader
|
||||||
LONG FormatPart; // type of format the partition
|
LONG FormatPart; // type of format the partition
|
||||||
WCHAR SelectedLangId[4]; // selected language
|
TCHAR SelectedLangId[9]; // selected language
|
||||||
|
TCHAR SelectedKBLayout[9]; // selected kayboard layout
|
||||||
WCHAR InstallationDirectory[MAX_PATH]; // installation directory on hdd
|
WCHAR InstallationDirectory[MAX_PATH]; // installation directory on hdd
|
||||||
WCHAR DefaultLang[20]; // default language
|
|
||||||
WCHAR DefaultKBLayout[20]; // default keyboard layout
|
|
||||||
BOOLEAN RepairUpdateFlag; // flag for update/repair an installed reactos
|
BOOLEAN RepairUpdateFlag; // flag for update/repair an installed reactos
|
||||||
|
// txtsetup.sif data
|
||||||
|
TCHAR DefaultLang[20]; // default language
|
||||||
|
TCHAR DefaultKBLayout[20]; // default keyboard layout
|
||||||
|
PLANG pLanguages;
|
||||||
|
LONG LangCount;
|
||||||
|
PKBLAYOUT pKbLayouts;
|
||||||
|
LONG KbLayoutCount;
|
||||||
} SetupData;
|
} SetupData;
|
||||||
|
|
||||||
typedef struct _IMGINFO
|
typedef struct _IMGINFO
|
||||||
|
@ -202,6 +224,7 @@ LangSelDlgProc(HWND hwndDlg,
|
||||||
LPARAM lParam)
|
LPARAM lParam)
|
||||||
{
|
{
|
||||||
PIMGINFO pImgInfo;
|
PIMGINFO pImgInfo;
|
||||||
|
LONG i;
|
||||||
pImgInfo = (PIMGINFO)GetWindowLongPtr(hwndDlg, DWLP_USER);
|
pImgInfo = (PIMGINFO)GetWindowLongPtr(hwndDlg, DWLP_USER);
|
||||||
switch (uMsg)
|
switch (uMsg)
|
||||||
{
|
{
|
||||||
|
@ -236,6 +259,10 @@ LangSelDlgProc(HWND hwndDlg,
|
||||||
WM_SETFONT,
|
WM_SETFONT,
|
||||||
(WPARAM)hTitleFont,
|
(WPARAM)hTitleFont,
|
||||||
(LPARAM)TRUE);*/
|
(LPARAM)TRUE);*/
|
||||||
|
for (i=0; i< SetupData.LangCount;i++)
|
||||||
|
(void)ComboBox_AddString(GetDlgItem(hwndDlg,IDC_LANGUAGES),SetupData.pLanguages[i].LangName);
|
||||||
|
for (i=0; i< SetupData.KbLayoutCount;i++)
|
||||||
|
(void)ComboBox_AddString(GetDlgItem(hwndDlg,IDC_KEYLAYOUT),SetupData.pKbLayouts[i].LayoutName);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WM_DRAWITEM:
|
case WM_DRAWITEM:
|
||||||
|
@ -566,6 +593,72 @@ RestartDlgProc(HWND hwndDlg,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LoadSetupData()
|
||||||
|
{
|
||||||
|
WCHAR szPath[MAX_PATH];
|
||||||
|
WCHAR *ch;
|
||||||
|
HINF hTxtsetupSif;
|
||||||
|
INFCONTEXT InfContext;
|
||||||
|
//TCHAR szValue[MAX_PATH];
|
||||||
|
DWORD LineLength;
|
||||||
|
LONG Count;
|
||||||
|
//HKEY hKey;
|
||||||
|
|
||||||
|
GetModuleFileNameW(NULL,szPath,MAX_PATH);
|
||||||
|
ch = strrchrW(szPath,L'\\');
|
||||||
|
if (ch != NULL)
|
||||||
|
*ch = L'\0';
|
||||||
|
|
||||||
|
wcscat(szPath, L"\\txtsetup.sif");
|
||||||
|
hTxtsetupSif = SetupOpenInfFileW(szPath, NULL, INF_STYLE_OLDNT, NULL);
|
||||||
|
if (hTxtsetupSif != INVALID_HANDLE_VALUE)
|
||||||
|
{
|
||||||
|
// get language list
|
||||||
|
Count = SetupGetLineCount(hTxtsetupSif, _T("Language"));
|
||||||
|
if (Count > 0)
|
||||||
|
{
|
||||||
|
// TODO: alloc memory for all entries and read entries
|
||||||
|
SetupData.pLanguages = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(LANG) * Count);
|
||||||
|
if (SetupData.pLanguages != NULL)
|
||||||
|
{
|
||||||
|
SetupData.LangCount = Count;
|
||||||
|
Count = 0;
|
||||||
|
if (SetupFindFirstLine(hTxtsetupSif, _T("Language"),
|
||||||
|
NULL,&InfContext))
|
||||||
|
do
|
||||||
|
{
|
||||||
|
SetupGetStringField(&InfContext, 0, SetupData.pLanguages[Count].LangId, sizeof(SetupData.pLanguages[Count].LangId) / sizeof(TCHAR), &LineLength);
|
||||||
|
SetupGetStringField(&InfContext, 1, SetupData.pLanguages[Count].LangName, sizeof(SetupData.pLanguages[Count].LangName) / sizeof(TCHAR), &LineLength);
|
||||||
|
++Count;
|
||||||
|
}
|
||||||
|
while (SetupFindNextLine(&InfContext, &InfContext) && Count < SetupData.LangCount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// get keyboard layout list
|
||||||
|
Count = SetupGetLineCount(hTxtsetupSif, _T("KeyboardLayout"));
|
||||||
|
if (Count > 0)
|
||||||
|
{
|
||||||
|
// TODO: alloc memory for all entries and read entries
|
||||||
|
SetupData.pKbLayouts = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(KBLAYOUT) * Count);
|
||||||
|
if (SetupData.pKbLayouts != NULL)
|
||||||
|
{
|
||||||
|
SetupData.KbLayoutCount = Count;
|
||||||
|
Count = 0;
|
||||||
|
if (SetupFindFirstLine(hTxtsetupSif, _T("KeyboardLayout"),
|
||||||
|
NULL,&InfContext))
|
||||||
|
do
|
||||||
|
{
|
||||||
|
SetupGetStringField(&InfContext, 0, SetupData.pKbLayouts[Count].LayoutId, sizeof(SetupData.pKbLayouts[Count].LayoutId) / sizeof(TCHAR), &LineLength);
|
||||||
|
SetupGetStringField(&InfContext, 1, SetupData.pKbLayouts[Count].LayoutName, sizeof(SetupData.pKbLayouts[Count].LayoutName) / sizeof(TCHAR), &LineLength);
|
||||||
|
++Count;
|
||||||
|
}
|
||||||
|
while (SetupFindNextLine(&InfContext, &InfContext) && Count < SetupData.LangCount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SetupCloseInfFile(hTxtsetupSif);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
BOOL isUnattendSetup()
|
BOOL isUnattendSetup()
|
||||||
{
|
{
|
||||||
WCHAR szPath[MAX_PATH];
|
WCHAR szPath[MAX_PATH];
|
||||||
|
@ -621,6 +714,8 @@ WinMain(HINSTANCE hInst,
|
||||||
LoadString(hInst,IDS_ABORTSETUP, abort_msg, sizeof(abort_msg)/sizeof(TCHAR));
|
LoadString(hInst,IDS_ABORTSETUP, abort_msg, sizeof(abort_msg)/sizeof(TCHAR));
|
||||||
LoadString(hInst,IDS_ABORTSETUP2, abort_title,sizeof(abort_title)/sizeof(TCHAR));
|
LoadString(hInst,IDS_ABORTSETUP2, abort_title,sizeof(abort_title)/sizeof(TCHAR));
|
||||||
|
|
||||||
|
LoadSetupData();
|
||||||
|
|
||||||
/* Create the Start page, until setup is working */
|
/* Create the Start page, until setup is working */
|
||||||
psp.dwSize = sizeof(PROPSHEETPAGE);
|
psp.dwSize = sizeof(PROPSHEETPAGE);
|
||||||
psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER;
|
psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER;
|
||||||
|
|
Loading…
Reference in a new issue