Update BdsDxe to use new designed HiiLib, remove the referrence to the original IfrSupportLib.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8115 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@ -298,19 +298,21 @@ InitializeFrontPage (
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_HII_UPDATE_DATA UpdateData;
|
||||
IFR_OPTION *OptionList;
|
||||
CHAR8 *LanguageString;
|
||||
CHAR8 *LangCode;
|
||||
CHAR8 *Lang;
|
||||
CHAR8 *CurrentLang;
|
||||
CHAR8 *BestLanguage;
|
||||
UINTN OptionCount;
|
||||
EFI_STRING_ID Token;
|
||||
CHAR16 *StringBuffer;
|
||||
UINTN BufferSize;
|
||||
UINTN Index;
|
||||
EFI_HII_HANDLE HiiHandle;
|
||||
VOID *OptionsOpCodeHandle;
|
||||
VOID *StartOpCodeHandle;
|
||||
VOID *EndOpCodeHandle;
|
||||
EFI_IFR_GUID_LABEL *StartLabel;
|
||||
EFI_IFR_GUID_LABEL *EndLabel;
|
||||
BOOLEAN FirstFlag;
|
||||
|
||||
if (InitializeHiiData) {
|
||||
//
|
||||
@ -378,14 +380,29 @@ InitializeFrontPage (
|
||||
|
||||
|
||||
//
|
||||
// Allocate space for creation of UpdateData Buffer
|
||||
// Init OpCode Handle and Allocate space for creation of UpdateData Buffer
|
||||
//
|
||||
UpdateData.BufferSize = 0x1000;
|
||||
UpdateData.Data = AllocateZeroPool (0x1000);
|
||||
ASSERT (UpdateData.Data != NULL);
|
||||
StartOpCodeHandle = HiiAllocateOpCodeHandle ();
|
||||
ASSERT (StartOpCodeHandle != NULL);
|
||||
|
||||
OptionList = AllocateZeroPool (0x1000);
|
||||
ASSERT (OptionList != NULL);
|
||||
EndOpCodeHandle = HiiAllocateOpCodeHandle ();
|
||||
ASSERT (EndOpCodeHandle != NULL);
|
||||
|
||||
OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();
|
||||
ASSERT (OptionsOpCodeHandle != NULL);
|
||||
//
|
||||
// Create Hii Extend Label OpCode as the start opcode
|
||||
//
|
||||
StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
|
||||
StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
|
||||
StartLabel->Number = LABEL_SELECT_LANGUAGE;
|
||||
|
||||
//
|
||||
// Create Hii Extend Label OpCode as the end opcode
|
||||
//
|
||||
EndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (EndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
|
||||
EndLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
|
||||
EndLabel->Number = LABEL_END;
|
||||
|
||||
//
|
||||
// Collect the languages from what our current Language support is based on our VFR
|
||||
@ -416,12 +433,26 @@ InitializeFrontPage (
|
||||
//
|
||||
ASSERT (BestLanguage != NULL);
|
||||
|
||||
OptionCount = 0;
|
||||
LangCode = LanguageString;
|
||||
FirstFlag = FALSE;
|
||||
|
||||
if (gFrontPagePrivate.LanguageToken == NULL) {
|
||||
while (*LangCode != 0) {
|
||||
HiiLibGetNextLanguage (&LangCode, Lang);
|
||||
OptionCount ++;
|
||||
}
|
||||
gFrontPagePrivate.LanguageToken = AllocatePool (OptionCount * sizeof (EFI_STRING_ID));
|
||||
ASSERT (gFrontPagePrivate.LanguageToken != NULL);
|
||||
FirstFlag = TRUE;
|
||||
}
|
||||
|
||||
OptionCount = 0;
|
||||
LangCode = LanguageString;
|
||||
while (*LangCode != 0) {
|
||||
GetNextLanguage (&LangCode, Lang);
|
||||
|
||||
if (gFrontPagePrivate.LanguageToken == NULL) {
|
||||
if (FirstFlag) {
|
||||
//
|
||||
// Get Language Name from String Package. The StringId of Printable Language
|
||||
// Name is always 1 which is generated by StringGather Tool.
|
||||
@ -452,19 +483,30 @@ InitializeFrontPage (
|
||||
}
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
Token = HiiSetString (HiiHandle, 0, StringBuffer, NULL);
|
||||
//
|
||||
// Save the string Id for each language
|
||||
//
|
||||
gFrontPagePrivate.LanguageToken[OptionCount] = HiiSetString (HiiHandle, 0, StringBuffer, NULL);
|
||||
FreePool (StringBuffer);
|
||||
} else {
|
||||
Token = gFrontPagePrivate.LanguageToken[OptionCount];
|
||||
}
|
||||
|
||||
if (AsciiStrCmp (Lang, BestLanguage) == 0) {
|
||||
OptionList[OptionCount].Flags = EFI_IFR_OPTION_DEFAULT;
|
||||
HiiCreateOneOfOptionOpCode (
|
||||
OptionsOpCodeHandle,
|
||||
gFrontPagePrivate.LanguageToken[OptionCount],
|
||||
EFI_IFR_OPTION_DEFAULT,
|
||||
EFI_IFR_NUMERIC_SIZE_1,
|
||||
(UINT8) OptionCount
|
||||
);
|
||||
} else {
|
||||
OptionList[OptionCount].Flags = 0;
|
||||
HiiCreateOneOfOptionOpCode (
|
||||
OptionsOpCodeHandle,
|
||||
gFrontPagePrivate.LanguageToken[OptionCount],
|
||||
0,
|
||||
EFI_IFR_NUMERIC_SIZE_1,
|
||||
(UINT8) OptionCount
|
||||
);
|
||||
}
|
||||
OptionList[OptionCount].StringToken = Token;
|
||||
OptionList[OptionCount].Value.u8 = (UINT8) OptionCount;
|
||||
|
||||
OptionCount++;
|
||||
}
|
||||
@ -476,8 +518,8 @@ InitializeFrontPage (
|
||||
FreePool (Lang);
|
||||
FreePool (LanguageString);
|
||||
|
||||
UpdateData.Offset = 0;
|
||||
CreateOneOfOpCode (
|
||||
HiiCreateOneOfOpCode (
|
||||
StartOpCodeHandle,
|
||||
FRONT_PAGE_KEY_LANGUAGE,
|
||||
0,
|
||||
0,
|
||||
@ -485,31 +527,21 @@ InitializeFrontPage (
|
||||
STRING_TOKEN (STR_LANGUAGE_SELECT_HELP),
|
||||
EFI_IFR_FLAG_CALLBACK,
|
||||
EFI_IFR_NUMERIC_SIZE_1,
|
||||
OptionList,
|
||||
OptionCount,
|
||||
&UpdateData
|
||||
OptionsOpCodeHandle,
|
||||
NULL
|
||||
);
|
||||
|
||||
Status = IfrLibUpdateForm (
|
||||
Status = HiiUpdateForm (
|
||||
HiiHandle,
|
||||
&mFrontPageGuid,
|
||||
FRONT_PAGE_FORM_ID,
|
||||
LABEL_SELECT_LANGUAGE,
|
||||
FALSE,
|
||||
&UpdateData
|
||||
StartOpCodeHandle, // LABEL_SELECT_LANGUAGE
|
||||
EndOpCodeHandle // LABEL_END
|
||||
);
|
||||
|
||||
//
|
||||
// Save the string Id for each language
|
||||
//
|
||||
gFrontPagePrivate.LanguageToken = AllocatePool (OptionCount * sizeof (EFI_STRING_ID));
|
||||
ASSERT (gFrontPagePrivate.LanguageToken != NULL);
|
||||
for (Index = 0; Index < OptionCount; Index++) {
|
||||
gFrontPagePrivate.LanguageToken[Index] = OptionList[Index].StringToken;
|
||||
}
|
||||
|
||||
FreePool (UpdateData.Data);
|
||||
FreePool (OptionList);
|
||||
HiiFreeOpCodeHandle (StartOpCodeHandle);
|
||||
HiiFreeOpCodeHandle (EndOpCodeHandle);
|
||||
HiiFreeOpCodeHandle (OptionsOpCodeHandle);
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user