From 3f301b683556d142249daea257b93280af7603f7 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Thu, 13 Dec 2007 16:15:43 +0000 Subject: [PATCH] - implement displaying and showing language dialog - rename all translated entries in de-DE.h because gcc doesnt understand the scope of static - add basic language dialog - feel free to improve design, layout etc svn path=/trunk/; revision=31200 --- reactos/base/setup/usetup/interface/usetup.c | 64 +++++++++++++++++- reactos/base/setup/usetup/lang/de-DE.h | 44 ++++++------ reactos/base/setup/usetup/lang/en-US.h | 71 ++++++++++++++------ reactos/base/setup/usetup/mui.c | 61 +++++++++++++---- reactos/base/setup/usetup/mui.h | 8 ++- reactos/base/setup/usetup/usetup.h | 3 +- 6 files changed, 191 insertions(+), 60 deletions(-) diff --git a/reactos/base/setup/usetup/interface/usetup.c b/reactos/base/setup/usetup/interface/usetup.c index 3f0e18e9e11..57a9f3063db 100644 --- a/reactos/base/setup/usetup/interface/usetup.c +++ b/reactos/base/setup/usetup/interface/usetup.c @@ -73,7 +73,7 @@ static PGENERIC_LIST ComputerList = NULL; static PGENERIC_LIST DisplayList = NULL; static PGENERIC_LIST KeyboardList = NULL; static PGENERIC_LIST LayoutList = NULL; - +static PGENERIC_LIST LanguageList = NULL; /* FUNCTIONS ****************************************************************/ @@ -550,6 +550,56 @@ CheckUnattendedSetup(VOID) DPRINT("Running unattended setup\n"); } +static PAGE_NUMBER +LanguagePage(PINPUT_RECORD Ir) +{ + if (LanguageList == NULL) + { + LanguageList = MUICreateLanguageList(); + if (LanguageList == NULL) + { + PopupError("Setup failed to initialize available translations", NULL, NULL, POPUP_WAIT_NONE); + return START_PAGE; + } + } + + DrawGenericList(LanguageList, + 7, + 15, + xScreen - 10, + yScreen - 10); + + MUIDisplayPage(LANGUAGE_PAGE); + + while(TRUE) + { + CONSOLE_ConInKey(Ir); + + if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) && + (Ir->Event.KeyEvent.wVirtualKeyCode == VK_DOWN)) /* DOWN */ + { + ScrollDownGenericList (LanguageList); + } + else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) && + (Ir->Event.KeyEvent.wVirtualKeyCode == VK_UP)) /* UP */ + { + ScrollUpGenericList (LanguageList); + } + else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) && + (Ir->Event.KeyEvent.wVirtualKeyCode == VK_F3)) /* F3 */ + { + if (ConfirmQuit(Ir) == TRUE) + return QUIT_PAGE; + } + else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */ + { + MUISelectLanguage((ULONG)LanguageList->CurrentEntry->UserData); + return START_PAGE; + } + } + return START_PAGE; +} + /* * Start page @@ -3425,6 +3475,12 @@ QuitPage(PINPUT_RECORD Ir) LayoutList = NULL; } + if (LanguageList != NULL) + { + DestroyGenericList(LanguageList, FALSE); + LanguageList = NULL; + } + CONSOLE_SetStatusText(" ENTER = Reboot computer"); while(TRUE) @@ -3509,7 +3565,7 @@ RunUSetup(VOID) /* Hide the cursor */ CONSOLE_SetCursorType(TRUE, FALSE); - Page = START_PAGE; + Page = LANGUAGE_PAGE; while (Page != REBOOT_PAGE) { CONSOLE_ClearScreen(); @@ -3520,6 +3576,10 @@ RunUSetup(VOID) switch (Page) { + /* Language page */ + case LANGUAGE_PAGE: + Page = LanguagePage(&Ir); + break; /* Start page */ case START_PAGE: Page = SetupStartPage(&Ir); diff --git a/reactos/base/setup/usetup/lang/de-DE.h b/reactos/base/setup/usetup/lang/de-DE.h index abac8b80cf4..976bab49750 100644 --- a/reactos/base/setup/usetup/lang/de-DE.h +++ b/reactos/base/setup/usetup/lang/de-DE.h @@ -1,7 +1,7 @@ #ifndef LANG_DE_DE_H__ #define LANG_DE_DE_H__ -static MUI_ENTRY WelcomePageEntries[] = +static MUI_ENTRY deDEWelcomePageEntries[] = { { 6, @@ -71,7 +71,7 @@ static MUI_ENTRY WelcomePageEntries[] = } }; -static MUI_ENTRY IntroPageEntries[] = +static MUI_ENTRY deDEIntroPageEntries[] = { { 4, @@ -165,7 +165,7 @@ static MUI_ENTRY IntroPageEntries[] = } }; -static MUI_ENTRY LicensePageEntries[] = +static MUI_ENTRY deDELicensePageEntries[] = { { 6, @@ -283,7 +283,7 @@ static MUI_ENTRY LicensePageEntries[] = } }; -static MUI_ENTRY DevicePageEntries[] = +static MUI_ENTRY deDEDevicePageEntries[] = { { 6, @@ -370,7 +370,7 @@ static MUI_ENTRY DevicePageEntries[] = } }; -static MUI_ENTRY RepairPageEntries[] = +static MUI_ENTRY deDERepairPageEntries[] = { { 6, @@ -427,7 +427,7 @@ static MUI_ENTRY RepairPageEntries[] = 0 } }; -static MUI_ENTRY ComputerPageEntries[] = +static MUI_ENTRY deDEComputerPageEntries[] = { { 6, @@ -473,7 +473,7 @@ static MUI_ENTRY ComputerPageEntries[] = } }; -static MUI_ENTRY FlushPageEntries[] = +static MUI_ENTRY deDEFlushPageEntries[] = { { 10, @@ -507,7 +507,7 @@ static MUI_ENTRY FlushPageEntries[] = } }; -static MUI_ENTRY QuitPageEntries[] = +static MUI_ENTRY deDEQuitPageEntries[] = { { 10, @@ -547,7 +547,7 @@ static MUI_ENTRY QuitPageEntries[] = } }; -static MUI_ENTRY DisplayPageEntries[] = +static MUI_ENTRY deDEDisplayPageEntries[] = { { 6, @@ -592,7 +592,7 @@ static MUI_ENTRY DisplayPageEntries[] = } }; -static MUI_ENTRY SuccessPageEntries[] = +static MUI_ENTRY deDESuccessPageEntries[] = { { 10, @@ -632,7 +632,7 @@ static MUI_ENTRY SuccessPageEntries[] = } }; -static MUI_ENTRY BootPageEntries[] = +static MUI_ENTRY deDEBootPageEntries[] = { { 6, @@ -677,47 +677,47 @@ MUI_PAGE deDEPages[] = { { START_PAGE, - WelcomePageEntries + deDEWelcomePageEntries }, { INTRO_PAGE, - IntroPageEntries + deDEIntroPageEntries }, { LICENSE_PAGE, - LicensePageEntries + deDELicensePageEntries }, { DEVICE_SETTINGS_PAGE, - DevicePageEntries + deDEDevicePageEntries }, { REPAIR_INTRO_PAGE, - RepairPageEntries + deDERepairPageEntries }, { COMPUTER_SETTINGS_PAGE, - ComputerPageEntries + deDEComputerPageEntries }, { DISPLAY_SETTINGS_PAGE, - DisplayPageEntries + deDEDisplayPageEntries }, { FLUSH_PAGE, - FlushPageEntries + deDEFlushPageEntries }, { QUIT_PAGE, - QuitPageEntries + deDEQuitPageEntries }, { SUCCESS_PAGE, - SuccessPageEntries + deDESuccessPageEntries }, { BOOT_LOADER_FLOPPY_PAGE, - BootPageEntries + deDEBootPageEntries }, { -1, diff --git a/reactos/base/setup/usetup/lang/en-US.h b/reactos/base/setup/usetup/lang/en-US.h index 9e33dc18b80..a9126bcb954 100644 --- a/reactos/base/setup/usetup/lang/en-US.h +++ b/reactos/base/setup/usetup/lang/en-US.h @@ -1,7 +1,30 @@ #ifndef LANG_EN_US_H__ #define LANG_EN_US_H__ -static MUI_ENTRY WelcomePageEntries[] = +// do not translate these +static MUI_ENTRY LanguagePageEntries[] = +{ + { + 6, + 8, + "Select your language:", + TEXT_NORMAL + }, + { + 0, + 0, + " ENTER = Continue F3 = Quit", + TEXT_STATUS + }, + { + 0, + 0, + NULL, + 0 + } +}; + +static MUI_ENTRY enUSWelcomePageEntries[] = { { 6, @@ -71,7 +94,7 @@ static MUI_ENTRY WelcomePageEntries[] = } }; -static MUI_ENTRY IntroPageEntries[] = +static MUI_ENTRY enUSIntroPageEntries[] = { { 4, @@ -165,7 +188,7 @@ static MUI_ENTRY IntroPageEntries[] = } }; -static MUI_ENTRY LicensePageEntries[] = +static MUI_ENTRY enUSLicensePageEntries[] = { { 6, @@ -283,7 +306,7 @@ static MUI_ENTRY LicensePageEntries[] = } }; -static MUI_ENTRY DevicePageEntries[] = +static MUI_ENTRY enUSDevicePageEntries[] = { { 6, @@ -370,7 +393,7 @@ static MUI_ENTRY DevicePageEntries[] = } }; -static MUI_ENTRY RepairPageEntries[] = +static MUI_ENTRY enUSRepairPageEntries[] = { { 6, @@ -427,7 +450,7 @@ static MUI_ENTRY RepairPageEntries[] = 0 } }; -static MUI_ENTRY ComputerPageEntries[] = +static MUI_ENTRY enUSComputerPageEntries[] = { { 6, @@ -473,7 +496,7 @@ static MUI_ENTRY ComputerPageEntries[] = } }; -static MUI_ENTRY FlushPageEntries[] = +static MUI_ENTRY enUSFlushPageEntries[] = { { 10, @@ -507,7 +530,7 @@ static MUI_ENTRY FlushPageEntries[] = } }; -static MUI_ENTRY QuitPageEntries[] = +static MUI_ENTRY enUSQuitPageEntries[] = { { 10, @@ -547,7 +570,7 @@ static MUI_ENTRY QuitPageEntries[] = } }; -static MUI_ENTRY DisplayPageEntries[] = +static MUI_ENTRY enUSDisplayPageEntries[] = { { 6, @@ -592,7 +615,7 @@ static MUI_ENTRY DisplayPageEntries[] = } }; -static MUI_ENTRY SuccessPageEntries[] = +static MUI_ENTRY enUSSuccessPageEntries[] = { { 10, @@ -632,7 +655,7 @@ static MUI_ENTRY SuccessPageEntries[] = } }; -static MUI_ENTRY BootPageEntries[] = +static MUI_ENTRY enUSBootPageEntries[] = { { 6, @@ -675,49 +698,53 @@ static MUI_ENTRY BootPageEntries[] = MUI_PAGE enUSPages[] = { + { + LANGUAGE_PAGE, + LanguagePageEntries + }, { START_PAGE, - WelcomePageEntries + enUSWelcomePageEntries }, { INTRO_PAGE, - IntroPageEntries + enUSIntroPageEntries }, { LICENSE_PAGE, - LicensePageEntries + enUSLicensePageEntries }, { DEVICE_SETTINGS_PAGE, - DevicePageEntries + enUSDevicePageEntries }, { REPAIR_INTRO_PAGE, - RepairPageEntries + enUSRepairPageEntries }, { COMPUTER_SETTINGS_PAGE, - ComputerPageEntries + enUSComputerPageEntries }, { DISPLAY_SETTINGS_PAGE, - DisplayPageEntries + enUSDisplayPageEntries }, { FLUSH_PAGE, - FlushPageEntries + enUSFlushPageEntries }, { QUIT_PAGE, - QuitPageEntries + enUSQuitPageEntries }, { SUCCESS_PAGE, - SuccessPageEntries + enUSSuccessPageEntries }, { BOOT_LOADER_FLOPPY_PAGE, - BootPageEntries + enUSBootPageEntries }, { -1, diff --git a/reactos/base/setup/usetup/mui.c b/reactos/base/setup/usetup/mui.c index 125088a99ed..0d6537c635e 100644 --- a/reactos/base/setup/usetup/mui.c +++ b/reactos/base/setup/usetup/mui.c @@ -2,20 +2,25 @@ #include "mui.h" #include "lang/en-US.h" +#include "lang/de-DE.h" -static MUI_LANGUAGE lang[] = +static MUI_LANGUAGE LanguageList[] = { { "English (USA)", enUSPages }, + { + "German", + deDEPages + }, { NULL, NULL } }; -static unsigned sel_lang = 0; +static ULONG SelectedLanguage = 0; extern VOID @@ -25,29 +30,61 @@ PopupError(PCHAR Text, ULONG WaitEvent); -static -MUI_ENTRY * -findMUIEntriesOfPage(int pg, MUI_PAGE * pages) +PGENERIC_LIST +MUICreateLanguageList() { - int index = 0; + PGENERIC_LIST List; + ULONG Index; + + List = CreateGenericList(); + if (List == NULL) + { + return NULL; + } + + Index = 0; + do { - if (pages[index].Number == pg) + AppendGenericListEntry(List, LanguageList[Index].LanguageDescriptor, (PVOID)Index, (Index == 0 ? TRUE : FALSE)); + Index++; + }while(LanguageList[Index].MuiPages && LanguageList[Index].LanguageDescriptor); + + return List; +} + +BOOLEAN +MUISelectLanguage(ULONG LanguageIndex) +{ + SelectedLanguage = LanguageIndex; + return TRUE; +} + + +static +MUI_ENTRY * +findMUIEntriesOfPage(ULONG PageNumber, MUI_PAGE * Pages) +{ + ULONG Index = 0; + do + { + if (Pages[Index].Number == PageNumber) { - return pages[index].MuiEntry; + return Pages[Index].MuiEntry; } - index++; - }while(pages[index].MuiEntry != NULL); + Index++; + }while(Pages[Index].MuiEntry != NULL); return NULL; } -void MUIDisplayPage(int pg) +VOID +MUIDisplayPage(ULONG pg) { MUI_ENTRY * entry; int index; int flags; - entry = findMUIEntriesOfPage(pg, lang[sel_lang].MuiPages); + entry = findMUIEntriesOfPage(pg, LanguageList[SelectedLanguage].MuiPages); if (!entry) { PopupError("Error: Failed to find translated page", diff --git a/reactos/base/setup/usetup/mui.h b/reactos/base/setup/usetup/mui.h index 2d6acee571c..e53b35b8e41 100644 --- a/reactos/base/setup/usetup/mui.h +++ b/reactos/base/setup/usetup/mui.h @@ -27,8 +27,14 @@ typedef struct #define TEXT_UNDERLINE 2 #define TEXT_STATUS 4 +VOID +MUIDisplayPage(ULONG PageNumber); -void MUIDisplayPage(int pg); +PGENERIC_LIST +MUICreateLanguageList(); + +BOOLEAN +MUISelectLanguage(ULONG LanguageIndex); #endif diff --git a/reactos/base/setup/usetup/usetup.h b/reactos/base/setup/usetup/usetup.h index b186ffd2144..06e1fd68145 100644 --- a/reactos/base/setup/usetup/usetup.h +++ b/reactos/base/setup/usetup/usetup.h @@ -82,7 +82,8 @@ extern BOOLEAN IsUnattendedSetup; typedef enum _PAGE_NUMBER { - START_PAGE = 0, + LANGUAGE_PAGE = 0, + START_PAGE, INTRO_PAGE, LICENSE_PAGE, INSTALL_INTRO_PAGE,