Restore the whole form set to default value when user enter F9, old logical only for form level.

Signed-off-by:ydong10
Reviewed-by:lgao4






git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11911 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
ydong10 2011-06-28 05:01:49 +00:00
parent 006fecd5a1
commit 4f33c8384d
3 changed files with 48 additions and 49 deletions

View File

@ -2538,56 +2538,65 @@ GetQuestionDefault (
/**
Reset Questions in a Form to their default value.
Reset Questions in a Formset to their default value.
@param FormSet FormSet data structure.
@param Form The Form which to be reset.
@param DefaultId The Class of the default.
@retval EFI_SUCCESS The function completed successfully.
**/
EFI_STATUS
ExtractFormDefault (
ExtractFormSetDefault (
IN FORM_BROWSER_FORMSET *FormSet,
IN FORM_BROWSER_FORM *Form,
IN UINT16 DefaultId
)
{
EFI_STATUS Status;
LIST_ENTRY *Link;
LIST_ENTRY *FormLink;
LIST_ENTRY *StatementLink;
FORM_BROWSER_STATEMENT *Question;
FORM_BROWSER_FORM *Form;
Link = GetFirstNode (&Form->StatementListHead);
while (!IsNull (&Form->StatementListHead, Link)) {
Question = FORM_BROWSER_STATEMENT_FROM_LINK (Link);
Link = GetNextNode (&Form->StatementListHead, Link);
FormLink = GetFirstNode (&FormSet->FormListHead);
while (!IsNull (&FormSet->FormListHead, FormLink)) {
Form = FORM_BROWSER_FORM_FROM_LINK (FormLink);
//
// Extract Form default
//
StatementLink = GetFirstNode (&Form->StatementListHead);
while (!IsNull (&Form->StatementListHead, StatementLink)) {
Question = FORM_BROWSER_STATEMENT_FROM_LINK (StatementLink);
StatementLink = GetNextNode (&Form->StatementListHead, StatementLink);
//
// If Question is disabled, don't reset it to default
//
if (Question->DisableExpression != NULL) {
Status = EvaluateExpression (FormSet, Form, Question->DisableExpression);
if (!EFI_ERROR (Status) && Question->DisableExpression->Result.Value.b) {
//
// If Question is disabled, don't reset it to default
//
if (Question->DisableExpression != NULL) {
Status = EvaluateExpression (FormSet, Form, Question->DisableExpression);
if (!EFI_ERROR (Status) && Question->DisableExpression->Result.Value.b) {
continue;
}
}
//
// Reset Question to its default value
//
Status = GetQuestionDefault (FormSet, Form, Question, DefaultId);
if (EFI_ERROR (Status)) {
continue;
}
}
//
// Reset Question to its default value
//
Status = GetQuestionDefault (FormSet, Form, Question, DefaultId);
if (EFI_ERROR (Status)) {
continue;
}
//
// Synchronize Buffer storage's Edit buffer
//
if ((Question->Storage != NULL) &&
(Question->Storage->Type != EFI_HII_VARSTORE_EFI_VARIABLE)) {
SetQuestionValue (FormSet, Form, Question, TRUE);
//
// Synchronize Buffer storage's Edit buffer
//
if ((Question->Storage != NULL) &&
(Question->Storage->Type != EFI_HII_VARSTORE_EFI_VARIABLE)) {
SetQuestionValue (FormSet, Form, Question, TRUE);
}
}
FormLink = GetNextNode (&FormSet->FormListHead, FormLink);
}
return EFI_SUCCESS;
@ -2848,13 +2857,9 @@ InitializeCurrentSetting (
//
// Extract default from IFR binary
//
Link = GetFirstNode (&FormSet->FormListHead);
while (!IsNull (&FormSet->FormListHead, Link)) {
Form = FORM_BROWSER_FORM_FROM_LINK (Link);
Status = ExtractFormDefault (FormSet, Form, EFI_HII_DEFAULT_CLASS_STANDARD);
Link = GetNextNode (&FormSet->FormListHead, Link);
Status = ExtractFormSetDefault (FormSet, EFI_HII_DEFAULT_CLASS_STANDARD);
if (EFI_ERROR (Status)) {
return Status;
}
//

View File

@ -1014,19 +1014,17 @@ InitializeFormSet (
);
/**
Reset Questions in a Form to their default value.
Reset Questions in a Formset to their default value.
@param FormSet FormSet data structure.
@param Form The Form which to be reset.
@param DefaultId The Class of the default.
@retval EFI_SUCCESS The function completed successfully.
**/
EFI_STATUS
ExtractFormDefault (
ExtractFormSetDefault (
IN FORM_BROWSER_FORMSET *FormSet,
IN FORM_BROWSER_FORM *Form,
IN UINT16 DefaultId
);

View File

@ -3234,14 +3234,10 @@ UiDisplayMenu (
case CfUiDefault:
ControlFlag = CfCheckSelection;
if (!Selection->FormEditable) {
//
// This Form is not editable, ignore the F9 (reset to default)
//
break;
}
Status = ExtractFormDefault (Selection->FormSet, Selection->Form, DefaultId);
//
// Reset to default values for the whole formset
//
Status = ExtractFormSetDefault (Selection->FormSet, DefaultId);
if (!EFI_ERROR (Status)) {
Selection->Action = UI_ACTION_REFRESH_FORM;