From 8b0fc5c1e1ae65914ef13390d1420462e8cb159b Mon Sep 17 00:00:00 2001 From: xdu2 Date: Mon, 26 Oct 2009 03:05:16 +0000 Subject: [PATCH] 1. Code clean up: add IN/OUT modifier for parameters. 2. UI enchancement: if there is no editable item in a Form, the F9/F10 will not be displayed in the footer. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9363 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Universal/SetupBrowserDxe/Expression.c | 14 ++--- .../Universal/SetupBrowserDxe/IfrParse.c | 36 ++++++------ .../Universal/SetupBrowserDxe/InputHandler.c | 2 +- .../Universal/SetupBrowserDxe/Presentation.c | 52 +++++++++++------- .../SetupBrowserDxe/ProcessOptions.c | 6 +- .../Universal/SetupBrowserDxe/Setup.c | 5 -- .../Universal/SetupBrowserDxe/Setup.h | 4 +- .../SetupBrowserDxe/SetupBrowserDxe.inf | 2 +- .../SetupBrowserDxe/SetupBrowserStr.uni | Bin 12744 -> 11734 bytes MdeModulePkg/Universal/SetupBrowserDxe/Ui.c | 48 +++++++++++++--- MdeModulePkg/Universal/SetupBrowserDxe/Ui.h | 32 ++++++++--- 11 files changed, 125 insertions(+), 76 deletions(-) diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Expression.c b/MdeModulePkg/Universal/SetupBrowserDxe/Expression.c index fc687540be..3f810323db 100644 --- a/MdeModulePkg/Universal/SetupBrowserDxe/Expression.c +++ b/MdeModulePkg/Universal/SetupBrowserDxe/Expression.c @@ -512,7 +512,7 @@ InitializeUnicodeCollationProtocol ( **/ VOID IfrStrToUpper ( - CHAR16 *String + IN CHAR16 *String ) { while (*String != 0) { @@ -635,7 +635,7 @@ IfrToUint ( if (String == NULL) { return EFI_NOT_FOUND; } - + IfrStrToUpper (String); StringPtr = StrStr (String, L"0X"); if (StringPtr != NULL) { @@ -724,7 +724,7 @@ Done: } if (String[1] != NULL) { FreePool (String[1]); - } + } if (StringPtr != NULL) { FreePool (StringPtr); } @@ -788,7 +788,7 @@ Done: } if (String[1] != NULL) { FreePool (String[1]); - } + } return Status; } @@ -877,7 +877,7 @@ Done: } if (String[1] != NULL) { FreePool (String[1]); - } + } return Status; } @@ -1051,7 +1051,7 @@ Done: } if (String[1] != NULL) { FreePool (String[1]); - } + } return Status; } @@ -1159,7 +1159,7 @@ Done: } if (String[1] != NULL) { FreePool (String[1]); - } + } return Status; } diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c b/MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c index 3285cfe5aa..d9193b9bd7 100644 --- a/MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c +++ b/MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c @@ -96,15 +96,15 @@ CreateStatement ( Convert a numeric value to a Unicode String and insert it to String Package. This string is used as the Unicode Name for the EFI Variable. This is to support the deprecated vareqval opcode. - + @param FormSet The FormSet. @param Statement The numeric question whose VarStoreInfo.VarName is the numeric value which is used to produce the Unicode Name for the EFI Variable. - + If the Statement is NULL, the ASSERT. If the opcode is not Numeric, then ASSERT. - + @retval EFI_SUCCESS The funtion always succeeds. **/ EFI_STATUS @@ -118,7 +118,7 @@ UpdateCheckBoxStringToken ( ASSERT (Statement != NULL); ASSERT (Statement->Operand == EFI_IFR_NUMERIC_OP); - + UnicodeValueToString (Str, 0, Statement->VarStoreInfo.VarName, MAXIMUM_VALUE_CHARACTERS - 1); Id = HiiSetString (FormSet->HiiHandle, 0, Str, NULL); @@ -127,21 +127,21 @@ UpdateCheckBoxStringToken ( } Statement->VarStoreInfo.VarName = Id; - + return EFI_SUCCESS; } /** Check if the next opcode is the EFI_IFR_EXTEND_OP_VAREQNAME. - + @param OpCodeData The current opcode. - + @retval TRUE Yes. @retval FALSE No. **/ BOOLEAN IsNextOpCodeGuidedVarEqName ( - UINT8 *OpCodeData + IN UINT8 *OpCodeData ) { // @@ -151,7 +151,7 @@ IsNextOpCodeGuidedVarEqName ( if (*OpCodeData == EFI_IFR_GUID_OP) { if (CompareGuid (&gEfiIfrFrameworkGuid, (EFI_GUID *)(OpCodeData + sizeof (EFI_IFR_OP_HEADER)))) { // - // Specific GUIDed opcodes to support IFR generated from Framework HII VFR + // Specific GUIDed opcodes to support IFR generated from Framework HII VFR // if ((((EFI_IFR_GUID_VAREQNAME *) OpCodeData)->ExtendOpCode) == EFI_IFR_EXTEND_OP_VAREQNAME) { return TRUE; @@ -329,19 +329,19 @@ InitializeConfigHdr ( ) { CHAR16 *Name; - + if (Storage->Type == EFI_HII_VARSTORE_BUFFER) { Name = Storage->Name; } else { Name = NULL; } - + Storage->ConfigHdr = HiiConstructConfigHdr ( &Storage->Guid, Name, FormSet->DriverHandle ); - + if (Storage->ConfigHdr == NULL) { return EFI_NOT_FOUND; } @@ -1188,7 +1188,7 @@ ParseOpCodes ( case EFI_IFR_SUBTITLE_OP: CurrentStatement = CreateStatement (OpCodeData, FormSet, CurrentForm); ASSERT (CurrentStatement != NULL); - + CurrentStatement->Flags = ((EFI_IFR_SUBTITLE *) OpCodeData)->Flags; if (Scope != 0) { @@ -1249,7 +1249,7 @@ ParseOpCodes ( case EFI_IFR_NUMERIC_OP: CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm); ASSERT(CurrentStatement != NULL); - + CurrentStatement->Flags = ((EFI_IFR_ONE_OF *) OpCodeData)->Flags; Value = &CurrentStatement->HiiValue; @@ -1300,7 +1300,7 @@ ParseOpCodes ( case EFI_IFR_ORDERED_LIST_OP: CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm); ASSERT(CurrentStatement != NULL); - + CurrentStatement->Flags = ((EFI_IFR_ORDERED_LIST *) OpCodeData)->Flags; CurrentStatement->MaxContainers = ((EFI_IFR_ORDERED_LIST *) OpCodeData)->MaxContainers; @@ -1314,7 +1314,7 @@ ParseOpCodes ( case EFI_IFR_CHECKBOX_OP: CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm); ASSERT(CurrentStatement != NULL); - + CurrentStatement->Flags = ((EFI_IFR_CHECKBOX *) OpCodeData)->Flags; CurrentStatement->StorageWidth = sizeof (BOOLEAN); CurrentStatement->HiiValue.Type = EFI_IFR_TYPE_BOOLEAN; @@ -1363,7 +1363,7 @@ ParseOpCodes ( case EFI_IFR_DATE_OP: CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm); ASSERT(CurrentStatement != NULL); - + CurrentStatement->Flags = ((EFI_IFR_DATE *) OpCodeData)->Flags; CurrentStatement->HiiValue.Type = EFI_IFR_TYPE_DATE; @@ -1383,7 +1383,7 @@ ParseOpCodes ( case EFI_IFR_TIME_OP: CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm); ASSERT(CurrentStatement != NULL); - + CurrentStatement->Flags = ((EFI_IFR_TIME *) OpCodeData)->Flags; CurrentStatement->HiiValue.Type = EFI_IFR_TYPE_TIME; diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/InputHandler.c b/MdeModulePkg/Universal/SetupBrowserDxe/InputHandler.c index bef096c0eb..b7c07e8d7c 100644 --- a/MdeModulePkg/Universal/SetupBrowserDxe/InputHandler.c +++ b/MdeModulePkg/Universal/SetupBrowserDxe/InputHandler.c @@ -387,7 +387,7 @@ GetNumericInput ( InputText[0] = LEFT_NUMERIC_DELIMITER; SetUnicodeMem (InputText + 1, InputWidth, L' '); - ASSERT (InputWidth + 2 < MAX_NUMERIC_INPUT_WIDTH); + ASSERT (InputWidth + 2 < MAX_NUMERIC_INPUT_WIDTH); InputText[InputWidth + 1] = RIGHT_NUMERIC_DELIMITER; InputText[InputWidth + 2] = L'\0'; diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c b/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c index 5b8fc89de0..93267f0fde 100644 --- a/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c +++ b/MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c @@ -31,11 +31,11 @@ UI_MENU_SELECTION *gCurrentSelection; **/ VOID ClearLines ( - UINTN LeftColumn, - UINTN RightColumn, - UINTN TopRow, - UINTN BottomRow, - UINTN TextAttribute + IN UINTN LeftColumn, + IN UINTN RightColumn, + IN UINTN TopRow, + IN UINTN BottomRow, + IN UINTN TextAttribute ) { CHAR16 *Buffer; @@ -80,8 +80,8 @@ ClearLines ( **/ VOID NewStrCat ( - CHAR16 *Destination, - CHAR16 *Source + IN OUT CHAR16 *Destination, + IN CHAR16 *Source ) { UINTN Length; @@ -117,7 +117,7 @@ NewStrCat ( **/ UINTN GetStringWidth ( - CHAR16 *String + IN CHAR16 *String ) { UINTN Index; @@ -460,6 +460,7 @@ DisplayForm ( FORM_BROWSER_STATEMENT *Statement; UINT16 NumberOfLines; EFI_STATUS Status; + UI_MENU_OPTION *MenuOption; Handle = Selection->Handle; MenuItemCount = 0; @@ -494,6 +495,7 @@ DisplayForm ( return Status; } + Selection->FormEditable = FALSE; Link = GetFirstNode (&Selection->Form->StatementListHead); while (!IsNull (&Selection->Form->StatementListHead, Link)) { Statement = FORM_BROWSER_STATEMENT_FROM_LINK (Link); @@ -530,8 +532,15 @@ DisplayForm ( // We are NOT!! removing this StringPtr buffer via FreePool since it is being used in the menuoptions, we will do // it in UiFreeMenu. // - UiAddMenuOption (StringPtr, Selection->Handle, Statement, NumberOfLines, MenuItemCount); + MenuOption = UiAddMenuOption (StringPtr, Selection->Handle, Statement, NumberOfLines, MenuItemCount); MenuItemCount++; + + if (MenuOption->IsQuestion && !MenuOption->ReadOnly) { + // + // At least one item is not readonly, this Form is considered as editable + // + Selection->FormEditable = TRUE; + } } Link = GetNextNode (&Selection->Form->StatementListHead, Link); @@ -553,7 +562,6 @@ InitializeBrowserStrings ( VOID ) { - gFunctionOneString = GetToken (STRING_TOKEN (FUNCTION_ONE_STRING), gHiiHandle); gFunctionNineString = GetToken (STRING_TOKEN (FUNCTION_NINE_STRING), gHiiHandle); gFunctionTenString = GetToken (STRING_TOKEN (FUNCTION_TEN_STRING), gHiiHandle); gEnterString = GetToken (STRING_TOKEN (ENTER_STRING), gHiiHandle); @@ -596,7 +604,6 @@ FreeBrowserStrings ( VOID ) { - FreePool (gFunctionOneString); FreePool (gFunctionNineString); FreePool (gFunctionTenString); FreePool (gEnterString); @@ -632,12 +639,14 @@ FreeBrowserStrings ( /** Update key's help imformation. + @param Selection Tell setup browser the information about the Selection @param MenuOption The Menu option @param Selected Whether or not a tag be selected **/ VOID UpdateKeyHelp ( + IN UI_MENU_SELECTION *Selection, IN UI_MENU_OPTION *MenuOption, IN BOOLEAN Selected ) @@ -676,9 +685,10 @@ UpdateKeyHelp ( if (!Selected) { if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) { - PrintStringAt (StartColumnOfHelp, TopRowOfHelp, gFunctionOneString); - PrintStringAt (SecCol, TopRowOfHelp, gFunctionNineString); - PrintStringAt (ThdCol, TopRowOfHelp, gFunctionTenString); + if (Selection->FormEditable) { + PrintStringAt (SecCol, TopRowOfHelp, gFunctionNineString); + PrintStringAt (ThdCol, TopRowOfHelp, gFunctionTenString); + } PrintStringAt (ThdCol, BottomRowOfHelp, gEscapeString); } @@ -732,9 +742,10 @@ UpdateKeyHelp ( ClearLines (LeftColumnOfHelp, RightColumnOfHelp, TopRowOfHelp, BottomRowOfHelp, KEYHELP_TEXT | KEYHELP_BACKGROUND); if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) { - PrintStringAt (StartColumnOfHelp, TopRowOfHelp, gFunctionOneString); - PrintStringAt (SecCol, TopRowOfHelp, gFunctionNineString); - PrintStringAt (ThdCol, TopRowOfHelp, gFunctionTenString); + if (Selection->FormEditable) { + PrintStringAt (SecCol, TopRowOfHelp, gFunctionNineString); + PrintStringAt (ThdCol, TopRowOfHelp, gFunctionTenString); + } PrintStringAt (ThdCol, BottomRowOfHelp, gEscapeString); } @@ -752,9 +763,10 @@ UpdateKeyHelp ( if (!Selected) { if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) { - PrintStringAt (StartColumnOfHelp, TopRowOfHelp, gFunctionOneString); - PrintStringAt (SecCol, TopRowOfHelp, gFunctionNineString); - PrintStringAt (ThdCol, TopRowOfHelp, gFunctionTenString); + if (Selection->FormEditable) { + PrintStringAt (SecCol, TopRowOfHelp, gFunctionNineString); + PrintStringAt (ThdCol, TopRowOfHelp, gFunctionTenString); + } PrintStringAt (ThdCol, BottomRowOfHelp, gEscapeString); } diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/ProcessOptions.c b/MdeModulePkg/Universal/SetupBrowserDxe/ProcessOptions.c index 3dfb567c0f..cebe126970 100644 --- a/MdeModulePkg/Universal/SetupBrowserDxe/ProcessOptions.c +++ b/MdeModulePkg/Universal/SetupBrowserDxe/ProcessOptions.c @@ -819,7 +819,7 @@ ProcessOptions ( TempString = AllocateCopyPool ((Maximum + 1) * sizeof (CHAR16), Question->BufferValue); ASSERT (TempString != NULL); - + TempString[Maximum] = L'\0'; if (StrCmp (StringPtr, TempString) != 0) { @@ -965,7 +965,7 @@ ProcessHelpString ( UINTN *OldIndexArray; BlockWidth = (UINTN) gHelpBlockWidth - 1; - + // // every three elements of IndexArray form a screen-line of string:[ IndexArray[i*3], IndexArray[i*3+1] ) // IndexArray[i*3+2] stores the initial glyph width of single character. to save this is because we want @@ -992,7 +992,7 @@ ProcessHelpString ( OldIndexArray = IndexArray; IndexArray = AllocatePool (AllocateSize * sizeof (UINTN) * 3); ASSERT (IndexArray != NULL); - + CopyMem (IndexArray, OldIndexArray, LineCount * sizeof (UINTN) * 3); FreePool (OldIndexArray); } diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c index 153dbf4aa4..ae73f09938 100644 --- a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c +++ b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c @@ -44,7 +44,6 @@ BOOLEAN gDownArrow; // // Browser Global Strings // -CHAR16 *gFunctionOneString; CHAR16 *gFunctionNineString; CHAR16 *gFunctionTenString; CHAR16 *gEnterString; @@ -2500,10 +2499,6 @@ InitializeFormSet ( // // Function key prompt can not be displayed if the function key has been disabled. // - if ((gFunctionKeySetting & FUNCTION_ONE) != FUNCTION_ONE) { - gFunctionOneString = GetToken (STRING_TOKEN (EMPTY_STRING), gHiiHandle); - } - if ((gFunctionKeySetting & FUNCTION_NINE) != FUNCTION_NINE) { gFunctionNineString = GetToken (STRING_TOKEN (EMPTY_STRING), gHiiHandle); } diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h index 61e2131f33..3fc7ed2816 100644 --- a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h +++ b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h @@ -71,9 +71,8 @@ extern UINT8 SetupBrowserStrings[]; // Definition for function key setting // #define NONE_FUNCTION_KEY_SETTING 0 -#define DEFAULT_FUNCTION_KEY_SETTING (FUNCTION_ONE | FUNCTION_NINE | FUNCTION_TEN) +#define DEFAULT_FUNCTION_KEY_SETTING (FUNCTION_NINE | FUNCTION_TEN) -#define FUNCTION_ONE (1 << 0) #define FUNCTION_NINE (1 << 2) #define FUNCTION_TEN (1 << 3) @@ -466,7 +465,6 @@ extern FORM_BROWSER_FORMSET *gOldFormSet; // // Browser Global Strings // -extern CHAR16 *gFunctionOneString; extern CHAR16 *gFunctionNineString; extern CHAR16 *gFunctionTenString; extern CHAR16 *gEnterString; diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf b/MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf index cb4ca570ea..0c3a03d453 100644 --- a/MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf +++ b/MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf @@ -7,7 +7,7 @@ # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at # http://opensource.org/licenses/bsd-license.php -# +# # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. # diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserStr.uni b/MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserStr.uni index 8339e1fa6f1a1dd16e9c4bf598b35c492408d5f3..4652bf643d1d34da95e9b03f46592e01fcdd6f8c 100644 GIT binary patch delta 25 hcmX?+d@XvzB-YJdoKx5)7YS8NHsBZ8yhK1n5de*~31t8P delta 349 zcmcZ>eIj|oBvxq;27d-$23Ll7h5!af26r$kgu#;`gu!QWqq6km4RSh)!3?PkB@Cqu z1q=#6nLHpnm7xg8D*}rH*^?K_RvMzpya20GU`Sz5XUGStOlL?0>da&)2GS)!I-enL z@neC^LRMKbAV=Iv2C)nj`rkpY(lL541Nr*lO6fh zCtqMy6E|eAWe8?S2D%}iAqNN*7(9UP&Y66WzgpUj0aMly=(-e!RFLaHrfpur+Qi1M tz)%hpE@8+38dAzoGTEB98R!%dP6e=s@)(LIpXb$`yg-9%^Ccb@MF22?Q_=tc diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Ui.c b/MdeModulePkg/Universal/SetupBrowserDxe/Ui.c index 66dc208bbe..62c40e3606 100644 --- a/MdeModulePkg/Universal/SetupBrowserDxe/Ui.c +++ b/MdeModulePkg/Universal/SetupBrowserDxe/Ui.c @@ -558,8 +558,10 @@ UiWaitForSingleEvent ( @param NumberOfLines Display lines for this Menu Option. @param MenuItemCount The index for this Option in the Menu. + @retval Pointer Pointer to the added Menu Option. + **/ -VOID +UI_MENU_OPTION * UiAddMenuOption ( IN CHAR16 *String, IN EFI_HII_HANDLE Handle, @@ -573,6 +575,7 @@ UiAddMenuOption ( UINTN Count; Count = 1; + MenuOption = NULL; if (Statement->Operand == EFI_IFR_DATE_OP || Statement->Operand == EFI_IFR_TIME_OP) { // @@ -617,6 +620,26 @@ UiAddMenuOption ( MenuOption->GrayOut = Statement->GrayOutExpression->Result.Value.b; } + switch (Statement->Operand) { + case EFI_IFR_ORDERED_LIST_OP: + case EFI_IFR_ONE_OF_OP: + case EFI_IFR_NUMERIC_OP: + case EFI_IFR_TIME_OP: + case EFI_IFR_DATE_OP: + case EFI_IFR_CHECKBOX_OP: + case EFI_IFR_PASSWORD_OP: + case EFI_IFR_STRING_OP: + // + // User could change the value of these items + // + MenuOption->IsQuestion = TRUE; + break; + + default: + MenuOption->IsQuestion = FALSE; + break; + } + if ((Statement->ValueExpression != NULL) || ((Statement->QuestionFlags & EFI_IFR_FLAG_READ_ONLY) != 0)) { MenuOption->ReadOnly = TRUE; @@ -624,6 +647,8 @@ UiAddMenuOption ( InsertTailList (&Menu, &MenuOption->Link); } + + return MenuOption; } @@ -2245,7 +2270,7 @@ UiDisplayMenu ( } } - UpdateKeyHelp (MenuOption, FALSE); + UpdateKeyHelp (Selection, MenuOption, FALSE); // // Clear reverse attribute @@ -2384,8 +2409,7 @@ UiDisplayMenu ( break; case CHAR_NULL: - if (((Key.ScanCode == SCAN_F1) && ((gFunctionKeySetting & FUNCTION_ONE) != FUNCTION_ONE)) || - ((Key.ScanCode == SCAN_F9) && ((gFunctionKeySetting & FUNCTION_NINE) != FUNCTION_NINE)) || + if (((Key.ScanCode == SCAN_F9) && ((gFunctionKeySetting & FUNCTION_NINE) != FUNCTION_NINE)) || ((Key.ScanCode == SCAN_F10) && ((gFunctionKeySetting & FUNCTION_TEN) != FUNCTION_TEN)) ) { // @@ -2589,16 +2613,16 @@ UiDisplayMenu ( // // Editable Questions: oneof, ordered list, checkbox, numeric, string, password // - UpdateKeyHelp (MenuOption, TRUE); + UpdateKeyHelp (Selection, MenuOption, TRUE); Status = ProcessOptions (Selection, MenuOption, TRUE, &OptionString); if (EFI_ERROR (Status)) { Repaint = TRUE; NewLine = TRUE; - UpdateKeyHelp (MenuOption, FALSE); - } else { - Selection->Action = UI_ACTION_REFRESH_FORM; - } + UpdateKeyHelp (Selection, MenuOption, FALSE); + } else { + Selection->Action = UI_ACTION_REFRESH_FORM; + } if (OptionString != NULL) { FreePool (OptionString); @@ -3078,6 +3102,12 @@ UiDisplayMenu ( case CfUiDefault: ControlFlag = CfCheckSelection; + if (!Selection->FormEditable) { + // + // This Form is not editable, ignore the F9 (reset to default) + // + break; + } Status = ExtractFormDefault (Selection->FormSet, Selection->Form, DefaultId); diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Ui.h b/MdeModulePkg/Universal/SetupBrowserDxe/Ui.h index da1ddc4ada..881675881a 100644 --- a/MdeModulePkg/Universal/SetupBrowserDxe/Ui.h +++ b/MdeModulePkg/Universal/SetupBrowserDxe/Ui.h @@ -108,6 +108,11 @@ typedef struct { FORM_BROWSER_FORMSET *FormSet; FORM_BROWSER_FORM *Form; FORM_BROWSER_STATEMENT *Statement; + + // + // Whether the Form is editable + // + BOOLEAN FormEditable; } UI_MENU_SELECTION; #define UI_MENU_OPTION_SIGNATURE SIGNATURE_32 ('u', 'i', 'm', 'm') @@ -140,6 +145,11 @@ typedef struct { BOOLEAN GrayOut; BOOLEAN ReadOnly; + + // + // Whether user could change value of this item + // + BOOLEAN IsQuestion; } UI_MENU_OPTION; #define MENU_OPTION_FROM_LINK(a) CR (a, UI_MENU_OPTION, Link, UI_MENU_OPTION_SIGNATURE) @@ -280,8 +290,10 @@ UiFreeRefreshList ( @param NumberOfLines Display lines for this Menu Option. @param MenuItemCount The index for this Option in the Menu. + @retval Pointer Pointer to the added Menu Option. + **/ -VOID +UI_MENU_OPTION * UiAddMenuOption ( IN CHAR16 *String, IN EFI_HII_HANDLE Handle, @@ -589,12 +601,14 @@ ProcessHelpString ( /** Update key's help imformation. + @param Selection Tell setup browser the information about the Selection @param MenuOption The Menu option @param Selected Whether or not a tag be selected **/ VOID UpdateKeyHelp ( + IN UI_MENU_SELECTION *Selection, IN UI_MENU_OPTION *MenuOption, IN BOOLEAN Selected ); @@ -611,11 +625,11 @@ UpdateKeyHelp ( **/ VOID ClearLines ( - UINTN LeftColumn, - UINTN RightColumn, - UINTN TopRow, - UINTN BottomRow, - UINTN TextAttribute + IN UINTN LeftColumn, + IN UINTN RightColumn, + IN UINTN TopRow, + IN UINTN BottomRow, + IN UINTN TextAttribute ); /** @@ -634,7 +648,7 @@ ClearLines ( **/ UINTN GetStringWidth ( - CHAR16 *String + IN CHAR16 *String ); /** @@ -683,8 +697,8 @@ GetWidth ( **/ VOID NewStrCat ( - CHAR16 *Destination, - CHAR16 *Source + IN OUT CHAR16 *Destination, + IN CHAR16 *Source ); /** -- 2.39.2