diff options
-rw-r--r-- | MdeModulePkg/Universal/SetupBrowserDxe/Expression.c | 14 | ||||
-rw-r--r-- | MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c | 36 | ||||
-rw-r--r-- | MdeModulePkg/Universal/SetupBrowserDxe/InputHandler.c | 2 | ||||
-rw-r--r-- | MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c | 52 | ||||
-rw-r--r-- | MdeModulePkg/Universal/SetupBrowserDxe/ProcessOptions.c | 6 | ||||
-rw-r--r-- | MdeModulePkg/Universal/SetupBrowserDxe/Setup.c | 5 | ||||
-rw-r--r-- | MdeModulePkg/Universal/SetupBrowserDxe/Setup.h | 4 | ||||
-rw-r--r-- | MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf | 2 | ||||
-rw-r--r-- | MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserStr.uni | bin | 12744 -> 11734 bytes | |||
-rw-r--r-- | MdeModulePkg/Universal/SetupBrowserDxe/Ui.c | 48 | ||||
-rw-r--r-- | 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 fc68754..3f81032 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 3285cfe..d9193b9 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 bef096c..b7c07e8 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 5b8fc89..93267f0 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 3dfb567..cebe126 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 153dbf4..ae73f09 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 61e2131..3fc7ed2 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 cb4ca57..0c3a03d 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 Binary files differindex 8339e1f..4652bf6 100644 --- a/MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserStr.uni +++ b/MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserStr.uni diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Ui.c b/MdeModulePkg/Universal/SetupBrowserDxe/Ui.c index 66dc208..62c40e3 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 da1ddc4..8816758 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
);
/**
|