summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Universal/SetupBrowserDxe
diff options
context:
space:
mode:
authorxdu2 <xdu2@6f19259b-4bc3-4df7-8a09-765794883524>2009-10-26 03:05:16 +0000
committerxdu2 <xdu2@6f19259b-4bc3-4df7-8a09-765794883524>2009-10-26 03:05:16 +0000
commit8b0fc5c1e1ae65914ef13390d1420462e8cb159b (patch)
treef575124c289b72f5f7d6500971e881f508281997 /MdeModulePkg/Universal/SetupBrowserDxe
parentf4a2af1f4d093fae5beba4872406b85bb07b34bf (diff)
downloadedk2-platforms-8b0fc5c1e1ae65914ef13390d1420462e8cb159b.tar.xz
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
Diffstat (limited to 'MdeModulePkg/Universal/SetupBrowserDxe')
-rw-r--r--MdeModulePkg/Universal/SetupBrowserDxe/Expression.c14
-rw-r--r--MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c36
-rw-r--r--MdeModulePkg/Universal/SetupBrowserDxe/InputHandler.c2
-rw-r--r--MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c52
-rw-r--r--MdeModulePkg/Universal/SetupBrowserDxe/ProcessOptions.c6
-rw-r--r--MdeModulePkg/Universal/SetupBrowserDxe/Setup.c5
-rw-r--r--MdeModulePkg/Universal/SetupBrowserDxe/Setup.h4
-rw-r--r--MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf2
-rw-r--r--MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserStr.unibin12744 -> 11734 bytes
-rw-r--r--MdeModulePkg/Universal/SetupBrowserDxe/Ui.c48
-rw-r--r--MdeModulePkg/Universal/SetupBrowserDxe/Ui.h32
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 8339e1fa6f..4652bf643d 100644
--- a/MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserStr.uni
+++ b/MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserStr.uni
Binary files differ
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
);
/**