\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
/// 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
}\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
EFI_EVENT RefreshIntervalEvent;\r
FORM_BROWSER_REFRESH_EVENT_NODE *EventNode;\r
BOOLEAN FormEditable;\r
+ UINT32 ExtraAttribute;\r
\r
HostDisplayStatement = NULL;\r
MinRefreshInterval = 0;\r
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
//\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