]> git.proxmox.com Git - mirror_edk2.git/commitdiff
1. Code clean up: add IN/OUT modifier for parameters.
authorxdu2 <xdu2@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 26 Oct 2009 03:05:16 +0000 (03:05 +0000)
committerxdu2 <xdu2@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 26 Oct 2009 03:05:16 +0000 (03:05 +0000)
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

MdeModulePkg/Universal/SetupBrowserDxe/Expression.c
MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c
MdeModulePkg/Universal/SetupBrowserDxe/InputHandler.c
MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c
MdeModulePkg/Universal/SetupBrowserDxe/ProcessOptions.c
MdeModulePkg/Universal/SetupBrowserDxe/Setup.c
MdeModulePkg/Universal/SetupBrowserDxe/Setup.h
MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf
MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserStr.uni
MdeModulePkg/Universal/SetupBrowserDxe/Ui.c
MdeModulePkg/Universal/SetupBrowserDxe/Ui.h

index fc687540be37d7e1229b6ec9b7541f679da7b049..3f810323dba9ff6ad7ef69420801a3662e3b5918 100644 (file)
@@ -512,7 +512,7 @@ InitializeUnicodeCollationProtocol (
 **/\r
 VOID\r
 IfrStrToUpper (\r
-  CHAR16                   *String\r
+  IN CHAR16                   *String\r
   )\r
 {\r
   while (*String != 0) {\r
@@ -635,7 +635,7 @@ IfrToUint (
     if (String == NULL) {\r
       return EFI_NOT_FOUND;\r
     }\r
-    \r
+\r
     IfrStrToUpper (String);\r
     StringPtr = StrStr (String, L"0X");\r
     if (StringPtr != NULL) {\r
@@ -724,7 +724,7 @@ Done:
   }\r
   if (String[1] != NULL) {\r
     FreePool (String[1]);\r
-  }  \r
+  }\r
   if (StringPtr != NULL) {\r
     FreePool (StringPtr);\r
   }\r
@@ -788,7 +788,7 @@ Done:
   }\r
   if (String[1] != NULL) {\r
     FreePool (String[1]);\r
-  }  \r
+  }\r
 \r
   return Status;\r
 }\r
@@ -877,7 +877,7 @@ Done:
   }\r
   if (String[1] != NULL) {\r
     FreePool (String[1]);\r
-  }  \r
+  }\r
 \r
   return Status;\r
 }\r
@@ -1051,7 +1051,7 @@ Done:
   }\r
   if (String[1] != NULL) {\r
     FreePool (String[1]);\r
-  }  \r
+  }\r
 \r
   return Status;\r
 }\r
@@ -1159,7 +1159,7 @@ Done:
   }\r
   if (String[1] != NULL) {\r
     FreePool (String[1]);\r
-  }  \r
+  }\r
 \r
   return Status;\r
 }\r
index 3285cfe5aae6acc59c1363219affea71f84066ca..d9193b9bd72f5c0cd5b61eb3cf1ead5a399d6ef0 100644 (file)
@@ -96,15 +96,15 @@ CreateStatement (
   Convert a numeric value to a Unicode String and insert it to String Package.\r
   This string is used as the Unicode Name for the EFI Variable. This is to support\r
   the deprecated vareqval opcode.\r
-  \r
+\r
   @param FormSet        The FormSet.\r
   @param Statement      The numeric question whose VarStoreInfo.VarName is the\r
                         numeric value which is used to produce the Unicode Name\r
                         for the EFI Variable.\r
-                        \r
+\r
   If the Statement is NULL, the ASSERT.\r
   If the opcode is not Numeric, then ASSERT.\r
-  \r
+\r
   @retval EFI_SUCCESS The funtion always succeeds.\r
 **/\r
 EFI_STATUS\r
@@ -118,7 +118,7 @@ UpdateCheckBoxStringToken (
 \r
   ASSERT (Statement != NULL);\r
   ASSERT (Statement->Operand == EFI_IFR_NUMERIC_OP);\r
-  \r
+\r
   UnicodeValueToString (Str, 0, Statement->VarStoreInfo.VarName, MAXIMUM_VALUE_CHARACTERS - 1);\r
 \r
   Id = HiiSetString (FormSet->HiiHandle, 0, Str, NULL);\r
@@ -127,21 +127,21 @@ UpdateCheckBoxStringToken (
   }\r
 \r
   Statement->VarStoreInfo.VarName = Id;\r
-    \r
+\r
   return EFI_SUCCESS;\r
 }\r
 \r
 /**\r
   Check if the next opcode is the EFI_IFR_EXTEND_OP_VAREQNAME.\r
-  \r
+\r
   @param OpCodeData     The current opcode.\r
-                        \r
+\r
   @retval TRUE Yes.\r
   @retval FALSE No.\r
 **/\r
 BOOLEAN\r
 IsNextOpCodeGuidedVarEqName (\r
-  UINT8 *OpCodeData\r
+  IN UINT8 *OpCodeData\r
   )\r
 {\r
   //\r
@@ -151,7 +151,7 @@ IsNextOpCodeGuidedVarEqName (
   if (*OpCodeData == EFI_IFR_GUID_OP) {\r
     if (CompareGuid (&gEfiIfrFrameworkGuid, (EFI_GUID *)(OpCodeData + sizeof (EFI_IFR_OP_HEADER)))) {\r
       //\r
-      // Specific GUIDed opcodes to support IFR generated from Framework HII VFR \r
+      // Specific GUIDed opcodes to support IFR generated from Framework HII VFR\r
       //\r
       if ((((EFI_IFR_GUID_VAREQNAME *) OpCodeData)->ExtendOpCode) == EFI_IFR_EXTEND_OP_VAREQNAME) {\r
         return TRUE;\r
@@ -329,19 +329,19 @@ InitializeConfigHdr (
   )\r
 {\r
   CHAR16      *Name;\r
-  \r
+\r
   if (Storage->Type == EFI_HII_VARSTORE_BUFFER) {\r
     Name = Storage->Name;\r
   } else {\r
     Name = NULL;\r
   }\r
-  \r
+\r
   Storage->ConfigHdr = HiiConstructConfigHdr (\r
                          &Storage->Guid,\r
                          Name,\r
                          FormSet->DriverHandle\r
                          );\r
-  \r
+\r
   if (Storage->ConfigHdr == NULL) {\r
     return EFI_NOT_FOUND;\r
   }\r
@@ -1188,7 +1188,7 @@ ParseOpCodes (
     case EFI_IFR_SUBTITLE_OP:\r
       CurrentStatement = CreateStatement (OpCodeData, FormSet, CurrentForm);\r
       ASSERT (CurrentStatement != NULL);\r
-      \r
+\r
       CurrentStatement->Flags = ((EFI_IFR_SUBTITLE *) OpCodeData)->Flags;\r
 \r
       if (Scope != 0) {\r
@@ -1249,7 +1249,7 @@ ParseOpCodes (
     case EFI_IFR_NUMERIC_OP:\r
       CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm);\r
       ASSERT(CurrentStatement != NULL);\r
-      \r
+\r
       CurrentStatement->Flags = ((EFI_IFR_ONE_OF *) OpCodeData)->Flags;\r
       Value = &CurrentStatement->HiiValue;\r
 \r
@@ -1300,7 +1300,7 @@ ParseOpCodes (
     case EFI_IFR_ORDERED_LIST_OP:\r
       CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm);\r
       ASSERT(CurrentStatement != NULL);\r
-      \r
+\r
       CurrentStatement->Flags = ((EFI_IFR_ORDERED_LIST *) OpCodeData)->Flags;\r
       CurrentStatement->MaxContainers = ((EFI_IFR_ORDERED_LIST *) OpCodeData)->MaxContainers;\r
 \r
@@ -1314,7 +1314,7 @@ ParseOpCodes (
     case EFI_IFR_CHECKBOX_OP:\r
       CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm);\r
       ASSERT(CurrentStatement != NULL);\r
-      \r
+\r
       CurrentStatement->Flags = ((EFI_IFR_CHECKBOX *) OpCodeData)->Flags;\r
       CurrentStatement->StorageWidth = sizeof (BOOLEAN);\r
       CurrentStatement->HiiValue.Type = EFI_IFR_TYPE_BOOLEAN;\r
@@ -1363,7 +1363,7 @@ ParseOpCodes (
     case EFI_IFR_DATE_OP:\r
       CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm);\r
       ASSERT(CurrentStatement != NULL);\r
-      \r
+\r
       CurrentStatement->Flags = ((EFI_IFR_DATE *) OpCodeData)->Flags;\r
       CurrentStatement->HiiValue.Type = EFI_IFR_TYPE_DATE;\r
 \r
@@ -1383,7 +1383,7 @@ ParseOpCodes (
     case EFI_IFR_TIME_OP:\r
       CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm);\r
       ASSERT(CurrentStatement != NULL);\r
-      \r
+\r
       CurrentStatement->Flags = ((EFI_IFR_TIME *) OpCodeData)->Flags;\r
       CurrentStatement->HiiValue.Type = EFI_IFR_TYPE_TIME;\r
 \r
index bef096c0eb5c06ea133524d09d04d62b709916a1..b7c07e8d7ceb0d695fe479c9ad4dde51c16473b7 100644 (file)
@@ -387,7 +387,7 @@ GetNumericInput (
 \r
     InputText[0] = LEFT_NUMERIC_DELIMITER;\r
     SetUnicodeMem (InputText + 1, InputWidth, L' ');\r
-    ASSERT (InputWidth + 2 < MAX_NUMERIC_INPUT_WIDTH); \r
+    ASSERT (InputWidth + 2 < MAX_NUMERIC_INPUT_WIDTH);\r
     InputText[InputWidth + 1] = RIGHT_NUMERIC_DELIMITER;\r
     InputText[InputWidth + 2] = L'\0';\r
 \r
index 5b8fc89de0c758b54815c58a60f790507fdf04c6..93267f0fdeecfce49ad10287fa1769be543eea80 100644 (file)
@@ -31,11 +31,11 @@ UI_MENU_SELECTION  *gCurrentSelection;
 **/\r
 VOID\r
 ClearLines (\r
-  UINTN                                       LeftColumn,\r
-  UINTN                                       RightColumn,\r
-  UINTN                                       TopRow,\r
-  UINTN                                       BottomRow,\r
-  UINTN                                       TextAttribute\r
+  IN UINTN               LeftColumn,\r
+  IN UINTN               RightColumn,\r
+  IN UINTN               TopRow,\r
+  IN UINTN               BottomRow,\r
+  IN UINTN               TextAttribute\r
   )\r
 {\r
   CHAR16  *Buffer;\r
@@ -80,8 +80,8 @@ ClearLines (
 **/\r
 VOID\r
 NewStrCat (\r
-  CHAR16                                      *Destination,\r
-  CHAR16                                      *Source\r
+  IN OUT CHAR16               *Destination,\r
+  IN     CHAR16               *Source\r
   )\r
 {\r
   UINTN Length;\r
@@ -117,7 +117,7 @@ NewStrCat (
 **/\r
 UINTN\r
 GetStringWidth (\r
-  CHAR16                                      *String\r
+  IN CHAR16               *String\r
   )\r
 {\r
   UINTN Index;\r
@@ -460,6 +460,7 @@ DisplayForm (
   FORM_BROWSER_STATEMENT *Statement;\r
   UINT16                 NumberOfLines;\r
   EFI_STATUS             Status;\r
+  UI_MENU_OPTION         *MenuOption;\r
 \r
   Handle        = Selection->Handle;\r
   MenuItemCount = 0;\r
@@ -494,6 +495,7 @@ DisplayForm (
     return Status;\r
   }\r
 \r
+  Selection->FormEditable = FALSE;\r
   Link = GetFirstNode (&Selection->Form->StatementListHead);\r
   while (!IsNull (&Selection->Form->StatementListHead, Link)) {\r
     Statement = FORM_BROWSER_STATEMENT_FROM_LINK (Link);\r
@@ -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\r
       // it in UiFreeMenu.\r
       //\r
-      UiAddMenuOption (StringPtr, Selection->Handle, Statement, NumberOfLines, MenuItemCount);\r
+      MenuOption = UiAddMenuOption (StringPtr, Selection->Handle, Statement, NumberOfLines, MenuItemCount);\r
       MenuItemCount++;\r
+\r
+      if (MenuOption->IsQuestion && !MenuOption->ReadOnly) {\r
+        //\r
+        // At least one item is not readonly, this Form is considered as editable\r
+        //\r
+        Selection->FormEditable = TRUE;\r
+      }\r
     }\r
 \r
     Link = GetNextNode (&Selection->Form->StatementListHead, Link);\r
@@ -553,7 +562,6 @@ InitializeBrowserStrings (
   VOID\r
   )\r
 {\r
-  gFunctionOneString    = GetToken (STRING_TOKEN (FUNCTION_ONE_STRING), gHiiHandle);\r
   gFunctionNineString   = GetToken (STRING_TOKEN (FUNCTION_NINE_STRING), gHiiHandle);\r
   gFunctionTenString    = GetToken (STRING_TOKEN (FUNCTION_TEN_STRING), gHiiHandle);\r
   gEnterString          = GetToken (STRING_TOKEN (ENTER_STRING), gHiiHandle);\r
@@ -596,7 +604,6 @@ FreeBrowserStrings (
   VOID\r
   )\r
 {\r
-  FreePool (gFunctionOneString);\r
   FreePool (gFunctionNineString);\r
   FreePool (gFunctionTenString);\r
   FreePool (gEnterString);\r
@@ -632,12 +639,14 @@ FreeBrowserStrings (
 /**\r
   Update key's help imformation.\r
 \r
+  @param Selection       Tell setup browser the information about the Selection\r
   @param  MenuOption     The Menu option\r
   @param  Selected       Whether or not a tag be selected\r
 \r
 **/\r
 VOID\r
 UpdateKeyHelp (\r
+  IN  UI_MENU_SELECTION           *Selection,\r
   IN  UI_MENU_OPTION              *MenuOption,\r
   IN  BOOLEAN                     Selected\r
   )\r
@@ -676,9 +685,10 @@ UpdateKeyHelp (
 \r
     if (!Selected) {\r
       if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) {\r
-        PrintStringAt (StartColumnOfHelp, TopRowOfHelp, gFunctionOneString);\r
-        PrintStringAt (SecCol, TopRowOfHelp, gFunctionNineString);\r
-        PrintStringAt (ThdCol, TopRowOfHelp, gFunctionTenString);\r
+        if (Selection->FormEditable) {\r
+          PrintStringAt (SecCol, TopRowOfHelp, gFunctionNineString);\r
+          PrintStringAt (ThdCol, TopRowOfHelp, gFunctionTenString);\r
+        }\r
         PrintStringAt (ThdCol, BottomRowOfHelp, gEscapeString);\r
       }\r
 \r
@@ -732,9 +742,10 @@ UpdateKeyHelp (
     ClearLines (LeftColumnOfHelp, RightColumnOfHelp, TopRowOfHelp, BottomRowOfHelp, KEYHELP_TEXT | KEYHELP_BACKGROUND);\r
 \r
     if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) {\r
-      PrintStringAt (StartColumnOfHelp, TopRowOfHelp, gFunctionOneString);\r
-      PrintStringAt (SecCol, TopRowOfHelp, gFunctionNineString);\r
-      PrintStringAt (ThdCol, TopRowOfHelp, gFunctionTenString);\r
+      if (Selection->FormEditable) {\r
+        PrintStringAt (SecCol, TopRowOfHelp, gFunctionNineString);\r
+        PrintStringAt (ThdCol, TopRowOfHelp, gFunctionTenString);\r
+      }\r
       PrintStringAt (ThdCol, BottomRowOfHelp, gEscapeString);\r
     }\r
 \r
@@ -752,9 +763,10 @@ UpdateKeyHelp (
 \r
     if (!Selected) {\r
       if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) {\r
-        PrintStringAt (StartColumnOfHelp, TopRowOfHelp, gFunctionOneString);\r
-        PrintStringAt (SecCol, TopRowOfHelp, gFunctionNineString);\r
-        PrintStringAt (ThdCol, TopRowOfHelp, gFunctionTenString);\r
+        if (Selection->FormEditable) {\r
+          PrintStringAt (SecCol, TopRowOfHelp, gFunctionNineString);\r
+          PrintStringAt (ThdCol, TopRowOfHelp, gFunctionTenString);\r
+        }\r
         PrintStringAt (ThdCol, BottomRowOfHelp, gEscapeString);\r
       }\r
 \r
index 3dfb567c0faa3ed1e27b917279659b0dc717dd56..cebe126970c1ec6aafd22a898e0b353d78f99e93 100644 (file)
@@ -819,7 +819,7 @@ ProcessOptions (
 \r
           TempString = AllocateCopyPool ((Maximum + 1) * sizeof (CHAR16), Question->BufferValue);\r
           ASSERT (TempString != NULL);\r
-          \r
+\r
           TempString[Maximum] = L'\0';\r
 \r
           if (StrCmp (StringPtr, TempString) != 0) {\r
@@ -965,7 +965,7 @@ ProcessHelpString (
   UINTN *OldIndexArray;\r
 \r
   BlockWidth = (UINTN) gHelpBlockWidth - 1;\r
-  \r
+\r
   //\r
   // every three elements of IndexArray form a screen-line of string:[ IndexArray[i*3], IndexArray[i*3+1] )\r
   // IndexArray[i*3+2] stores the initial glyph width of single character. to save this is because we want\r
@@ -992,7 +992,7 @@ ProcessHelpString (
       OldIndexArray  = IndexArray;\r
       IndexArray = AllocatePool (AllocateSize * sizeof (UINTN) * 3);\r
       ASSERT (IndexArray != NULL);\r
-      \r
+\r
       CopyMem (IndexArray, OldIndexArray, LineCount * sizeof (UINTN) * 3);\r
       FreePool (OldIndexArray);\r
     }\r
index 153dbf4aa44c9cd6de6d18f8881451f3a72e3ec9..ae73f09938bd8b6776cb0d27bdfa552b1e9a3593 100644 (file)
@@ -44,7 +44,6 @@ BOOLEAN               gDownArrow;
 //\r
 // Browser Global Strings\r
 //\r
-CHAR16            *gFunctionOneString;\r
 CHAR16            *gFunctionNineString;\r
 CHAR16            *gFunctionTenString;\r
 CHAR16            *gEnterString;\r
@@ -2500,10 +2499,6 @@ InitializeFormSet (
       //\r
       // Function key prompt can not be displayed if the function key has been disabled.\r
       //\r
-      if ((gFunctionKeySetting & FUNCTION_ONE) != FUNCTION_ONE) {\r
-        gFunctionOneString = GetToken (STRING_TOKEN (EMPTY_STRING), gHiiHandle);\r
-      }\r
-\r
       if ((gFunctionKeySetting & FUNCTION_NINE) != FUNCTION_NINE) {\r
         gFunctionNineString = GetToken (STRING_TOKEN (EMPTY_STRING), gHiiHandle);\r
       }\r
index 61e2131f335cc2a61e3fb12b85d60abea2520579..3fc7ed2816b8c765d6548e208548b242161341a4 100644 (file)
@@ -71,9 +71,8 @@ extern UINT8  SetupBrowserStrings[];
 // Definition for function key setting\r
 //\r
 #define NONE_FUNCTION_KEY_SETTING     0\r
-#define DEFAULT_FUNCTION_KEY_SETTING  (FUNCTION_ONE | FUNCTION_NINE | FUNCTION_TEN)\r
+#define DEFAULT_FUNCTION_KEY_SETTING  (FUNCTION_NINE | FUNCTION_TEN)\r
 \r
-#define FUNCTION_ONE                  (1 << 0)\r
 #define FUNCTION_NINE                 (1 << 2)\r
 #define FUNCTION_TEN                  (1 << 3)\r
 \r
@@ -466,7 +465,6 @@ extern FORM_BROWSER_FORMSET  *gOldFormSet;
 //\r
 // Browser Global Strings\r
 //\r
-extern CHAR16            *gFunctionOneString;\r
 extern CHAR16            *gFunctionNineString;\r
 extern CHAR16            *gFunctionTenString;\r
 extern CHAR16            *gEnterString;\r
index cb4ca570eafc9bd58b3574fad50edf623d1df83f..0c3a03d453e3ef789411b13aee270f28aef07c71 100644 (file)
@@ -7,7 +7,7 @@
 #  are licensed and made available under the terms and conditions of the BSD License\r
 #  which accompanies this distribution. The full text of the license may be found at\r
 #  http://opensource.org/licenses/bsd-license.php\r
-#  \r
+#\r
 #  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
 #  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 #\r
index 8339e1fa6f1a1dd16e9c4bf598b35c492408d5f3..4652bf643d1d34da95e9b03f46592e01fcdd6f8c 100644 (file)
Binary files a/MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserStr.uni and b/MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserStr.uni differ
index 66dc208bbee8c33dceb2c63d2b49f1b131d6ade5..62c40e3606e9c1c8066f3e3e330b9853e0844be0 100644 (file)
@@ -558,8 +558,10 @@ UiWaitForSingleEvent (
   @param  NumberOfLines          Display lines for this Menu Option.\r
   @param  MenuItemCount          The index for this Option in the Menu.\r
 \r
+  @retval Pointer                Pointer to the added Menu Option.\r
+\r
 **/\r
-VOID\r
+UI_MENU_OPTION *\r
 UiAddMenuOption (\r
   IN CHAR16                  *String,\r
   IN EFI_HII_HANDLE          Handle,\r
@@ -573,6 +575,7 @@ UiAddMenuOption (
   UINTN           Count;\r
 \r
   Count = 1;\r
+  MenuOption = NULL;\r
 \r
   if (Statement->Operand == EFI_IFR_DATE_OP || Statement->Operand == EFI_IFR_TIME_OP) {\r
     //\r
@@ -617,6 +620,26 @@ UiAddMenuOption (
       MenuOption->GrayOut = Statement->GrayOutExpression->Result.Value.b;\r
     }\r
 \r
+    switch (Statement->Operand) {\r
+    case EFI_IFR_ORDERED_LIST_OP:\r
+    case EFI_IFR_ONE_OF_OP:\r
+    case EFI_IFR_NUMERIC_OP:\r
+    case EFI_IFR_TIME_OP:\r
+    case EFI_IFR_DATE_OP:\r
+    case EFI_IFR_CHECKBOX_OP:\r
+    case EFI_IFR_PASSWORD_OP:\r
+    case EFI_IFR_STRING_OP:\r
+      //\r
+      // User could change the value of these items\r
+      //\r
+      MenuOption->IsQuestion = TRUE;\r
+      break;\r
+\r
+    default:\r
+      MenuOption->IsQuestion = FALSE;\r
+      break;\r
+    }\r
+\r
     if ((Statement->ValueExpression != NULL) ||\r
         ((Statement->QuestionFlags & EFI_IFR_FLAG_READ_ONLY) != 0)) {\r
       MenuOption->ReadOnly = TRUE;\r
@@ -624,6 +647,8 @@ UiAddMenuOption (
 \r
     InsertTailList (&Menu, &MenuOption->Link);\r
   }\r
+\r
+  return MenuOption;\r
 }\r
 \r
 \r
@@ -2245,7 +2270,7 @@ UiDisplayMenu (
           }\r
         }\r
 \r
-        UpdateKeyHelp (MenuOption, FALSE);\r
+        UpdateKeyHelp (Selection, MenuOption, FALSE);\r
 \r
         //\r
         // Clear reverse attribute\r
@@ -2384,8 +2409,7 @@ UiDisplayMenu (
         break;\r
 \r
       case CHAR_NULL:\r
-        if (((Key.ScanCode == SCAN_F1) && ((gFunctionKeySetting & FUNCTION_ONE) != FUNCTION_ONE)) ||\r
-            ((Key.ScanCode == SCAN_F9) && ((gFunctionKeySetting & FUNCTION_NINE) != FUNCTION_NINE)) ||\r
+        if (((Key.ScanCode == SCAN_F9) && ((gFunctionKeySetting & FUNCTION_NINE) != FUNCTION_NINE)) ||\r
             ((Key.ScanCode == SCAN_F10) && ((gFunctionKeySetting & FUNCTION_TEN) != FUNCTION_TEN))\r
             ) {\r
           //\r
@@ -2589,16 +2613,16 @@ UiDisplayMenu (
         //\r
         // Editable Questions: oneof, ordered list, checkbox, numeric, string, password\r
         //\r
-        UpdateKeyHelp (MenuOption, TRUE);\r
+        UpdateKeyHelp (Selection, MenuOption, TRUE);\r
         Status = ProcessOptions (Selection, MenuOption, TRUE, &OptionString);\r
 \r
         if (EFI_ERROR (Status)) {\r
           Repaint = TRUE;\r
           NewLine = TRUE;\r
-            UpdateKeyHelp (MenuOption, FALSE);\r
-          } else {\r
-            Selection->Action = UI_ACTION_REFRESH_FORM;\r
-          }\r
+          UpdateKeyHelp (Selection, MenuOption, FALSE);\r
+        } else {\r
+          Selection->Action = UI_ACTION_REFRESH_FORM;\r
+        }\r
 \r
           if (OptionString != NULL) {\r
             FreePool (OptionString);\r
@@ -3078,6 +3102,12 @@ UiDisplayMenu (
 \r
     case CfUiDefault:\r
       ControlFlag = CfCheckSelection;\r
+      if (!Selection->FormEditable) {\r
+        //\r
+        // This Form is not editable, ignore the F9 (reset to default)\r
+        //\r
+        break;\r
+      }\r
 \r
       Status = ExtractFormDefault (Selection->FormSet, Selection->Form, DefaultId);\r
 \r
index da1ddc4ada88fb2f6cf4e23e5eabb5c06f5e0121..881675881af5048f69ea488eb1bb593308b0735f 100644 (file)
@@ -108,6 +108,11 @@ typedef struct {
   FORM_BROWSER_FORMSET    *FormSet;\r
   FORM_BROWSER_FORM       *Form;\r
   FORM_BROWSER_STATEMENT  *Statement;\r
+\r
+  //\r
+  // Whether the Form is editable\r
+  //\r
+  BOOLEAN                 FormEditable;\r
 } UI_MENU_SELECTION;\r
 \r
 #define UI_MENU_OPTION_SIGNATURE  SIGNATURE_32 ('u', 'i', 'm', 'm')\r
@@ -140,6 +145,11 @@ typedef struct {
 \r
   BOOLEAN                 GrayOut;\r
   BOOLEAN                 ReadOnly;\r
+\r
+  //\r
+  // Whether user could change value of this item\r
+  //\r
+  BOOLEAN                 IsQuestion;\r
 } UI_MENU_OPTION;\r
 \r
 #define MENU_OPTION_FROM_LINK(a)  CR (a, UI_MENU_OPTION, Link, UI_MENU_OPTION_SIGNATURE)\r
@@ -280,8 +290,10 @@ UiFreeRefreshList (
   @param  NumberOfLines          Display lines for this Menu Option.\r
   @param  MenuItemCount          The index for this Option in the Menu.\r
 \r
+  @retval Pointer                Pointer to the added Menu Option.\r
+\r
 **/\r
-VOID\r
+UI_MENU_OPTION *\r
 UiAddMenuOption (\r
   IN CHAR16                  *String,\r
   IN EFI_HII_HANDLE          Handle,\r
@@ -589,12 +601,14 @@ ProcessHelpString (
 /**\r
   Update key's help imformation.\r
 \r
+  @param Selection       Tell setup browser the information about the Selection\r
   @param  MenuOption     The Menu option\r
   @param  Selected       Whether or not a tag be selected\r
 \r
 **/\r
 VOID\r
 UpdateKeyHelp (\r
+  IN  UI_MENU_SELECTION           *Selection,\r
   IN  UI_MENU_OPTION              *MenuOption,\r
   IN  BOOLEAN                     Selected\r
   );\r
@@ -611,11 +625,11 @@ UpdateKeyHelp (
 **/\r
 VOID\r
 ClearLines (\r
-  UINTN                                       LeftColumn,\r
-  UINTN                                       RightColumn,\r
-  UINTN                                       TopRow,\r
-  UINTN                                       BottomRow,\r
-  UINTN                                       TextAttribute\r
+  IN UINTN               LeftColumn,\r
+  IN UINTN               RightColumn,\r
+  IN UINTN               TopRow,\r
+  IN UINTN               BottomRow,\r
+  IN UINTN               TextAttribute\r
   );\r
 \r
 /**\r
@@ -634,7 +648,7 @@ ClearLines (
 **/\r
 UINTN\r
 GetStringWidth (\r
-  CHAR16                                      *String\r
+  IN CHAR16               *String\r
   );\r
 \r
 /**\r
@@ -683,8 +697,8 @@ GetWidth (
 **/\r
 VOID\r
 NewStrCat (\r
-  CHAR16                                      *Destination,\r
-  CHAR16                                      *Source\r
+  IN OUT CHAR16               *Destination,\r
+  IN     CHAR16               *Source\r
   );\r
 \r
 /**\r