mirror of https://github.com/acidanthera/audk.git
MdeModluePkg: Enable refresh opcode to refresh the entire form.
Contributed-under: TianoCore Contribution Agreement 1.0 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@17334 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
e2a5feb9d6
commit
790447b2a5
|
@ -2479,8 +2479,24 @@ ParseOpCodes (
|
||||||
// Refresh guid.
|
// Refresh guid.
|
||||||
//
|
//
|
||||||
case EFI_IFR_REFRESH_ID_OP:
|
case EFI_IFR_REFRESH_ID_OP:
|
||||||
ASSERT (ParentStatement != NULL);
|
//
|
||||||
CopyMem (&ParentStatement->RefreshGuid, &((EFI_IFR_REFRESH_ID *) OpCodeData)->RefreshEventGroupId, sizeof (EFI_GUID));
|
// Get ScopeOpcode from top of stack
|
||||||
|
//
|
||||||
|
PopScope (&ScopeOpCode);
|
||||||
|
PushScope (ScopeOpCode);
|
||||||
|
|
||||||
|
switch (ScopeOpCode) {
|
||||||
|
case EFI_IFR_FORM_OP:
|
||||||
|
case EFI_IFR_FORM_MAP_OP:
|
||||||
|
ASSERT (CurrentForm != NULL);
|
||||||
|
CopyMem (&CurrentForm->RefreshGuid, &((EFI_IFR_REFRESH_ID *) OpCodeData)->RefreshEventGroupId, sizeof (EFI_GUID));
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
ASSERT (ParentStatement != NULL);
|
||||||
|
CopyMem (&ParentStatement->RefreshGuid, &((EFI_IFR_REFRESH_ID *) OpCodeData)->RefreshEventGroupId, sizeof (EFI_GUID));
|
||||||
|
break;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -178,7 +178,7 @@ UpdateStatement (
|
||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
RefreshEventNotify(
|
RefreshEventNotifyForStatement(
|
||||||
IN EFI_EVENT Event,
|
IN EFI_EVENT Event,
|
||||||
IN VOID *Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
|
@ -190,6 +190,23 @@ RefreshEventNotify(
|
||||||
gBS->SignalEvent (mValueChangedEvent);
|
gBS->SignalEvent (mValueChangedEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Refresh the questions within this form.
|
||||||
|
|
||||||
|
@param Event The event which has this function related.
|
||||||
|
@param Context The input context info related to this event or the status code return to the caller.
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
RefreshEventNotifyForForm(
|
||||||
|
IN EFI_EVENT Event,
|
||||||
|
IN VOID *Context
|
||||||
|
)
|
||||||
|
{
|
||||||
|
gCurrentSelection->Action = UI_ACTION_REFRESH_FORMSET;
|
||||||
|
|
||||||
|
gBS->SignalEvent (mValueChangedEvent);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Create refresh hook event for statement which has refresh event or interval.
|
Create refresh hook event for statement which has refresh event or interval.
|
||||||
|
@ -198,7 +215,7 @@ RefreshEventNotify(
|
||||||
|
|
||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
CreateRefreshEvent (
|
CreateRefreshEventForStatement (
|
||||||
IN FORM_BROWSER_STATEMENT *Statement
|
IN FORM_BROWSER_STATEMENT *Statement
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -212,7 +229,7 @@ CreateRefreshEvent (
|
||||||
Status = gBS->CreateEventEx (
|
Status = gBS->CreateEventEx (
|
||||||
EVT_NOTIFY_SIGNAL,
|
EVT_NOTIFY_SIGNAL,
|
||||||
TPL_CALLBACK,
|
TPL_CALLBACK,
|
||||||
RefreshEventNotify,
|
RefreshEventNotifyForStatement,
|
||||||
Statement,
|
Statement,
|
||||||
&Statement->RefreshGuid,
|
&Statement->RefreshGuid,
|
||||||
&RefreshEvent);
|
&RefreshEvent);
|
||||||
|
@ -224,6 +241,39 @@ CreateRefreshEvent (
|
||||||
InsertTailList(&mRefreshEventList, &EventNode->Link);
|
InsertTailList(&mRefreshEventList, &EventNode->Link);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Create refresh hook event for statement which has refresh event or interval.
|
||||||
|
|
||||||
|
@param Statement The statement need to check.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
CreateRefreshEventForForm (
|
||||||
|
IN FORM_BROWSER_FORM *Form
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
EFI_EVENT RefreshEvent;
|
||||||
|
FORM_BROWSER_REFRESH_EVENT_NODE *EventNode;
|
||||||
|
|
||||||
|
//
|
||||||
|
// If question has refresh guid, create the notify function.
|
||||||
|
//
|
||||||
|
Status = gBS->CreateEventEx (
|
||||||
|
EVT_NOTIFY_SIGNAL,
|
||||||
|
TPL_CALLBACK,
|
||||||
|
RefreshEventNotifyForForm,
|
||||||
|
Form,
|
||||||
|
&Form->RefreshGuid,
|
||||||
|
&RefreshEvent);
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
|
EventNode = AllocateZeroPool (sizeof (FORM_BROWSER_REFRESH_EVENT_NODE));
|
||||||
|
ASSERT (EventNode != NULL);
|
||||||
|
EventNode->RefreshEvent = RefreshEvent;
|
||||||
|
InsertTailList(&mRefreshEventList, &EventNode->Link);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
||||||
Initialize the Display statement structure data.
|
Initialize the Display statement structure data.
|
||||||
|
@ -308,7 +358,7 @@ InitializeDisplayStatement (
|
||||||
// Create the refresh event process function.
|
// Create the refresh event process function.
|
||||||
//
|
//
|
||||||
if (!CompareGuid (&Statement->RefreshGuid, &gZeroGuid)) {
|
if (!CompareGuid (&Statement->RefreshGuid, &gZeroGuid)) {
|
||||||
CreateRefreshEvent (Statement);
|
CreateRefreshEventForStatement (Statement);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -559,6 +609,16 @@ AddStatementToDisplayForm (
|
||||||
InsertTailList(&mRefreshEventList, &EventNode->Link);
|
InsertTailList(&mRefreshEventList, &EventNode->Link);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Create the refresh event process function for Form.
|
||||||
|
//
|
||||||
|
if (!CompareGuid (&gCurrentSelection->Form->RefreshGuid, &gZeroGuid)) {
|
||||||
|
CreateRefreshEventForForm (gCurrentSelection->Form);
|
||||||
|
if (gDisplayFormData.FormRefreshEvent == NULL) {
|
||||||
|
gDisplayFormData.FormRefreshEvent = mValueChangedEvent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Update hotkey list field.
|
// Update hotkey list field.
|
||||||
//
|
//
|
||||||
|
|
|
@ -406,6 +406,7 @@ typedef struct {
|
||||||
|
|
||||||
BOOLEAN ModalForm; // Whether this is a modal form.
|
BOOLEAN ModalForm; // Whether this is a modal form.
|
||||||
BOOLEAN Locked; // Whether this form is locked.
|
BOOLEAN Locked; // Whether this form is locked.
|
||||||
|
EFI_GUID RefreshGuid; // Form refresh event guid.
|
||||||
|
|
||||||
LIST_ENTRY FormViewListHead; // List of type FORMID_INFO is Browser View Form History List.
|
LIST_ENTRY FormViewListHead; // List of type FORMID_INFO is Browser View Form History List.
|
||||||
LIST_ENTRY ExpressionListHead; // List of Expressions (FORM_EXPRESSION)
|
LIST_ENTRY ExpressionListHead; // List of Expressions (FORM_EXPRESSION)
|
||||||
|
|
Loading…
Reference in New Issue