mirror of https://github.com/acidanthera/audk.git
Export one interface to support 3rd party to change question attribute, such as hide/gray out.
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
This commit is contained in:
parent
b7dbd9c27a
commit
184f3a02d6
|
@ -137,10 +137,12 @@ EFI_STATUS
|
|||
//
|
||||
// Attribute for Statement and Form
|
||||
//
|
||||
#define HII_DISPLAY_NONE 0
|
||||
#define HII_DISPLAY_GRAYOUT BIT0
|
||||
#define HII_DISPLAY_LOCK BIT1
|
||||
#define HII_DISPLAY_READONLY BIT2
|
||||
#define HII_DISPLAY_MODAL BIT3
|
||||
#define HII_DISPLAY_SUPPRESS BIT4
|
||||
|
||||
struct _FORM_DISPLAY_ENGINE_STATEMENT{
|
||||
UINTN Signature;
|
||||
|
|
|
@ -68,6 +68,21 @@ typedef struct {
|
|||
|
||||
#define FORM_ENTRY_INFO_FROM_LINK(a) CR (a, FORM_ENTRY_INFO, Link, FORM_ENTRY_INFO_SIGNATURE)
|
||||
|
||||
#define FORM_QUESTION_ATTRIBUTE_OVERRIDE_SIGNATURE SIGNATURE_32 ('f', 'q', 'o', 's')
|
||||
|
||||
typedef struct {
|
||||
UINTN Signature;
|
||||
LIST_ENTRY Link;
|
||||
|
||||
EFI_QUESTION_ID QuestionId; // Find the question
|
||||
EFI_FORM_ID FormId; // Find the form
|
||||
EFI_GUID FormSetGuid; // Find the formset.
|
||||
EFI_HII_HANDLE HiiHandle; // Find the HII handle
|
||||
UINT32 Attribute; // Hide or grayout ...
|
||||
} QUESTION_ATTRIBUTE_OVERRIDE;
|
||||
|
||||
#define FORM_QUESTION_ATTRIBUTE_OVERRIDE_FROM_LINK(a) CR (a, QUESTION_ATTRIBUTE_OVERRIDE, Link, FORM_QUESTION_ATTRIBUTE_OVERRIDE_SIGNATURE)
|
||||
|
||||
struct _EDKII_FORM_BROWSER_EXTENSION2_PROTOCOL {
|
||||
///
|
||||
/// Version for protocol future extension.
|
||||
|
@ -82,6 +97,10 @@ struct _EDKII_FORM_BROWSER_EXTENSION2_PROTOCOL {
|
|||
/// A list of type FORMID_INFO is Browser View Form History List.
|
||||
///
|
||||
LIST_ENTRY FormViewHistoryHead;
|
||||
///
|
||||
/// A list of type QUESTION_ATTRIBUTE_OVERRIDE.
|
||||
///
|
||||
LIST_ENTRY OverrideQestListHead;
|
||||
};
|
||||
|
||||
extern EFI_GUID gEdkiiFormBrowserEx2ProtocolGuid;
|
||||
|
|
|
@ -569,6 +569,47 @@ UpdateHotkeyList (
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Get the extra question attribute from override question list.
|
||||
|
||||
@param QuestionId The question id for this request question.
|
||||
|
||||
@retval The attribute for this question or NULL if not found this
|
||||
question in the list.
|
||||
|
||||
**/
|
||||
UINT32
|
||||
ProcessQuestionExtraAttr (
|
||||
IN EFI_QUESTION_ID QuestionId
|
||||
)
|
||||
{
|
||||
LIST_ENTRY *Link;
|
||||
QUESTION_ATTRIBUTE_OVERRIDE *QuestionDesc;
|
||||
|
||||
//
|
||||
// Return HII_DISPLAY_NONE if input a invalid question id.
|
||||
//
|
||||
if (QuestionId == 0) {
|
||||
return HII_DISPLAY_NONE;
|
||||
}
|
||||
|
||||
Link = GetFirstNode (&mPrivateData.FormBrowserEx2.OverrideQestListHead);
|
||||
while (!IsNull (&mPrivateData.FormBrowserEx2.OverrideQestListHead, Link)) {
|
||||
QuestionDesc = FORM_QUESTION_ATTRIBUTE_OVERRIDE_FROM_LINK (Link);
|
||||
Link = GetNextNode (&mPrivateData.FormBrowserEx2.OverrideQestListHead, Link);
|
||||
|
||||
if ((QuestionDesc->QuestionId == QuestionId) &&
|
||||
(QuestionDesc->FormId == gCurrentSelection->FormId) &&
|
||||
(QuestionDesc->HiiHandle == gCurrentSelection->Handle) &&
|
||||
CompareGuid (&QuestionDesc->FormSetGuid, &gCurrentSelection->FormSetGuid)) {
|
||||
return QuestionDesc->Attribute;
|
||||
}
|
||||
}
|
||||
|
||||
return HII_DISPLAY_NONE;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Enum all statement in current form, find all the statement can be display and
|
||||
|
@ -589,6 +630,7 @@ AddStatementToDisplayForm (
|
|||
EFI_EVENT RefreshIntervalEvent;
|
||||
FORM_BROWSER_REFRESH_EVENT_NODE *EventNode;
|
||||
BOOLEAN FormEditable;
|
||||
UINT32 ExtraAttribute;
|
||||
|
||||
HostDisplayStatement = NULL;
|
||||
MinRefreshInterval = 0;
|
||||
|
@ -630,6 +672,14 @@ AddStatementToDisplayForm (
|
|||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
// Check the extra attribute.
|
||||
//
|
||||
ExtraAttribute = ProcessQuestionExtraAttr (Statement->QuestionId);
|
||||
if ((ExtraAttribute & HII_DISPLAY_SUPPRESS) != 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
DisplayStatement = AllocateZeroPool (sizeof (FORM_DISPLAY_ENGINE_STATEMENT));
|
||||
ASSERT (DisplayStatement != NULL);
|
||||
|
||||
|
@ -638,6 +688,11 @@ AddStatementToDisplayForm (
|
|||
//
|
||||
InitializeDisplayStatement(DisplayStatement, Statement, HostDisplayStatement);
|
||||
|
||||
//
|
||||
// Set the extra attribute.
|
||||
//
|
||||
DisplayStatement->Attribute |= ExtraAttribute;
|
||||
|
||||
//
|
||||
// Save the Host statement info.
|
||||
// Host statement may has nest statement follow it.
|
||||
|
|
|
@ -767,6 +767,7 @@ InitializeSetup (
|
|||
// Install FormBrowserEx2 protocol
|
||||
//
|
||||
InitializeListHead (&mPrivateData.FormBrowserEx2.FormViewHistoryHead);
|
||||
InitializeListHead (&mPrivateData.FormBrowserEx2.OverrideQestListHead);
|
||||
mPrivateData.Handle = NULL;
|
||||
Status = gBS->InstallProtocolInterface (
|
||||
&mPrivateData.Handle,
|
||||
|
|
|
@ -548,6 +548,7 @@ extern LIST_ENTRY gBrowserHotKeyList;
|
|||
extern BROWSER_SETTING_SCOPE gBrowserSettingScope;
|
||||
extern EXIT_HANDLER ExitHandlerFunction;
|
||||
extern EFI_HII_HANDLE mCurrentHiiHandle;
|
||||
extern SETUP_DRIVER_PRIVATE_DATA mPrivateData;
|
||||
//
|
||||
// Browser Global Strings
|
||||
//
|
||||
|
|
Loading…
Reference in New Issue