]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Export one interface to support 3rd party to change question attribute, such as hide...
authorEric Dong <eric.dong@intel.com>
Mon, 16 Sep 2013 09:50:32 +0000 (09:50 +0000)
committerydong10 <ydong10@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 16 Sep 2013 09:50:32 +0000 (09:50 +0000)
Signed-off-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14678 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Include/Protocol/DisplayProtocol.h
MdeModulePkg/Include/Protocol/FormBrowserEx2.h
MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c
MdeModulePkg/Universal/SetupBrowserDxe/Setup.c
MdeModulePkg/Universal/SetupBrowserDxe/Setup.h

index d4f0debf9c1f969f9e81aa16ea0b50cd533afffb..f8b80f5e4afa2c00553b7235e644620f1a82fbfb 100644 (file)
@@ -137,10 +137,12 @@ EFI_STATUS
 //\r
 // Attribute for Statement and Form\r
 //\r
+#define HII_DISPLAY_NONE             0\r
 #define HII_DISPLAY_GRAYOUT          BIT0\r
 #define HII_DISPLAY_LOCK             BIT1\r
 #define HII_DISPLAY_READONLY         BIT2\r
 #define HII_DISPLAY_MODAL            BIT3\r
+#define HII_DISPLAY_SUPPRESS         BIT4\r
 \r
 struct _FORM_DISPLAY_ENGINE_STATEMENT{\r
   UINTN                 Signature;\r
index 105ac0308fa3fff6d3514ac348a2fa04393bc1a4..df583ef86017e8243b12a3ed58173dacabc836b1 100644 (file)
@@ -68,6 +68,21 @@ typedef struct {
 \r
 #define FORM_ENTRY_INFO_FROM_LINK(a)  CR (a, FORM_ENTRY_INFO, Link, FORM_ENTRY_INFO_SIGNATURE)\r
 \r
+#define FORM_QUESTION_ATTRIBUTE_OVERRIDE_SIGNATURE    SIGNATURE_32 ('f', 'q', 'o', 's')\r
+\r
+typedef struct {\r
+  UINTN            Signature;\r
+  LIST_ENTRY       Link;\r
+\r
+  EFI_QUESTION_ID  QuestionId;           // Find the question\r
+  EFI_FORM_ID      FormId;               // Find the form\r
+  EFI_GUID         FormSetGuid;          // Find the formset.\r
+  EFI_HII_HANDLE   HiiHandle;            // Find the HII handle\r
+  UINT32           Attribute;            // Hide or grayout ... \r
+} QUESTION_ATTRIBUTE_OVERRIDE;\r
+\r
+#define FORM_QUESTION_ATTRIBUTE_OVERRIDE_FROM_LINK(a)  CR (a, QUESTION_ATTRIBUTE_OVERRIDE, Link, FORM_QUESTION_ATTRIBUTE_OVERRIDE_SIGNATURE)\r
+\r
 struct _EDKII_FORM_BROWSER_EXTENSION2_PROTOCOL {\r
   ///\r
   /// Version for protocol future extension.\r
@@ -82,6 +97,10 @@ struct _EDKII_FORM_BROWSER_EXTENSION2_PROTOCOL {
   /// A list of type FORMID_INFO is Browser View Form History List.\r
   ///\r
   LIST_ENTRY                FormViewHistoryHead;\r
+  ///\r
+  /// A list of type QUESTION_ATTRIBUTE_OVERRIDE.\r
+  ///\r
+  LIST_ENTRY                OverrideQestListHead;\r
 };\r
 \r
 extern EFI_GUID gEdkiiFormBrowserEx2ProtocolGuid;\r
index 4f8d4ee61bbb3eebb66500f15dd6198c35f23ac4..531829014433d4cec4f94edfc4a7348cccc720a1 100644 (file)
@@ -569,6 +569,47 @@ UpdateHotkeyList (
   }\r
 }\r
 \r
+/**\r
+\r
+  Get the extra question attribute from override question list.\r
+\r
+  @param    QuestionId    The question id for this request question.\r
+\r
+  @retval   The attribute for this question or NULL if not found this \r
+            question in the list.\r
+\r
+**/\r
+UINT32 \r
+ProcessQuestionExtraAttr (\r
+  IN   EFI_QUESTION_ID  QuestionId\r
+  )\r
+{\r
+  LIST_ENTRY                   *Link;\r
+  QUESTION_ATTRIBUTE_OVERRIDE  *QuestionDesc;\r
+\r
+  //\r
+  // Return HII_DISPLAY_NONE if input a invalid question id.\r
+  //\r
+  if (QuestionId == 0) {\r
+    return HII_DISPLAY_NONE;\r
+  }\r
+\r
+  Link = GetFirstNode (&mPrivateData.FormBrowserEx2.OverrideQestListHead);\r
+  while (!IsNull (&mPrivateData.FormBrowserEx2.OverrideQestListHead, Link)) {\r
+    QuestionDesc = FORM_QUESTION_ATTRIBUTE_OVERRIDE_FROM_LINK (Link);\r
+    Link = GetNextNode (&mPrivateData.FormBrowserEx2.OverrideQestListHead, Link);\r
+\r
+    if ((QuestionDesc->QuestionId == QuestionId) &&\r
+        (QuestionDesc->FormId     == gCurrentSelection->FormId) &&\r
+        (QuestionDesc->HiiHandle  == gCurrentSelection->Handle) &&\r
+        CompareGuid (&QuestionDesc->FormSetGuid, &gCurrentSelection->FormSetGuid)) {\r
+      return QuestionDesc->Attribute;\r
+    }\r
+  }\r
+\r
+  return HII_DISPLAY_NONE;\r
+}\r
+\r
 /**\r
 \r
   Enum all statement in current form, find all the statement can be display and\r
@@ -589,6 +630,7 @@ AddStatementToDisplayForm (
   EFI_EVENT                     RefreshIntervalEvent;\r
   FORM_BROWSER_REFRESH_EVENT_NODE *EventNode;\r
   BOOLEAN                       FormEditable;\r
+  UINT32                        ExtraAttribute;\r
 \r
   HostDisplayStatement = NULL;\r
   MinRefreshInterval   = 0;\r
@@ -630,6 +672,14 @@ AddStatementToDisplayForm (
       continue;\r
     }\r
 \r
+    //\r
+    // Check the extra attribute.\r
+    //\r
+    ExtraAttribute = ProcessQuestionExtraAttr (Statement->QuestionId);\r
+    if ((ExtraAttribute & HII_DISPLAY_SUPPRESS) != 0) {\r
+      continue;\r
+    }\r
+\r
     DisplayStatement = AllocateZeroPool (sizeof (FORM_DISPLAY_ENGINE_STATEMENT));\r
     ASSERT (DisplayStatement != NULL);\r
 \r
@@ -638,6 +688,11 @@ AddStatementToDisplayForm (
     //\r
     InitializeDisplayStatement(DisplayStatement, Statement, HostDisplayStatement);\r
 \r
+    //\r
+    // Set the extra attribute.\r
+    //\r
+    DisplayStatement->Attribute |= ExtraAttribute;\r
+\r
     //\r
     // Save the Host statement info.\r
     // Host statement may has nest statement follow it.\r
index 6dcb4aa77e515a69bfae52c8c995a2c9bba53794..63f86809faf5d8677f86c394335c269aaa79f69c 100644 (file)
@@ -766,7 +766,8 @@ InitializeSetup (
   //\r
   // Install FormBrowserEx2 protocol\r
   //\r
-  InitializeListHead (&mPrivateData.FormBrowserEx2.FormViewHistoryHead);  \r
+  InitializeListHead (&mPrivateData.FormBrowserEx2.FormViewHistoryHead);\r
+  InitializeListHead (&mPrivateData.FormBrowserEx2.OverrideQestListHead);\r
   mPrivateData.Handle = NULL;\r
   Status = gBS->InstallProtocolInterface (\r
                   &mPrivateData.Handle,\r
index 99418543dfb581ad6ec52803cae455620edb5eef..bd19ae6cb73c77bfd7b805bcfd3ac1c0f3a5a383 100644 (file)
@@ -548,6 +548,7 @@ extern LIST_ENTRY            gBrowserHotKeyList;
 extern BROWSER_SETTING_SCOPE gBrowserSettingScope;\r
 extern EXIT_HANDLER          ExitHandlerFunction;\r
 extern EFI_HII_HANDLE        mCurrentHiiHandle;\r
+extern SETUP_DRIVER_PRIVATE_DATA mPrivateData;\r
 //\r
 // Browser Global Strings\r
 //\r