Process the user input data.\r
\r
@param UserInput The user input data.\r
- @param ChangeHighlight Whether need to change the highlight statement. \r
\r
@retval EFI_SUCESSS This function always return successfully for now.\r
\r
**/\r
EFI_STATUS\r
ProcessUserInput (\r
- IN USER_INPUT *UserInput,\r
- IN BOOLEAN ChangeHighlight\r
+ IN USER_INPUT *UserInput\r
)\r
{\r
EFI_STATUS Status;\r
FORM_BROWSER_STATEMENT *Statement;\r
\r
- Status = EFI_SUCCESS;\r
+ Status = EFI_SUCCESS;\r
+ Statement = NULL;\r
\r
//\r
// When Exit from FormDisplay function, one of the below two cases must be true.\r
// Remove the last highligh question id, this id will update when show next form.\r
//\r
gCurrentSelection->QuestionId = 0;\r
+ if (UserInput->SelectedStatement != NULL){\r
+ Statement = GetBrowserStatement(UserInput->SelectedStatement);\r
+ ASSERT (Statement != NULL);\r
+\r
+ //\r
+ // This question is the current user select one,record it and later\r
+ // show it as the highlight question.\r
+ //\r
+ gCurrentSelection->CurrentMenu->QuestionId = Statement->QuestionId;\r
+ //\r
+ // For statement like text, actio, it not has question id.\r
+ // So use FakeQuestionId to save the question.\r
+ //\r
+ if (gCurrentSelection->CurrentMenu->QuestionId == 0) {\r
+ mCurFakeQestId = Statement->FakeQuestionId;\r
+ } else {\r
+ mCurFakeQestId = 0;\r
+ }\r
+ }\r
\r
//\r
// First process the Action field in USER_INPUT.\r
//\r
if (UserInput->Action != 0) {\r
Status = ProcessAction (UserInput->Action, UserInput->DefaultId);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
-\r
- //\r
- // Clear the highlight info.\r
- //\r
gCurrentSelection->Statement = NULL;\r
-\r
- if (UserInput->SelectedStatement != NULL) {\r
- Statement = GetBrowserStatement(UserInput->SelectedStatement);\r
- ASSERT (Statement != NULL);\r
- //\r
- // Save the current highlight menu in the menu history data.\r
- // which will be used when later browse back to this form.\r
- //\r
- gCurrentSelection->CurrentMenu->QuestionId = Statement->QuestionId;\r
- //\r
- // For statement like text, actio, it not has question id.\r
- // So use FakeQuestionId to save the question.\r
- //\r
- if (gCurrentSelection->CurrentMenu->QuestionId == 0) {\r
- mCurFakeQestId = Statement->FakeQuestionId;\r
- } else {\r
- mCurFakeQestId = 0;\r
- }\r
- }\r
} else {\r
- Statement = GetBrowserStatement(UserInput->SelectedStatement);\r
ASSERT (Statement != NULL);\r
-\r
gCurrentSelection->Statement = Statement;\r
-\r
- if (ChangeHighlight) {\r
- //\r
- // This question is the current user select one,record it and later\r
- // show it as the highlight question.\r
- //\r
- gCurrentSelection->CurrentMenu->QuestionId = Statement->QuestionId;\r
- //\r
- // For statement like text, actio, it not has question id.\r
- // So use FakeQuestionId to save the question.\r
- //\r
- if (gCurrentSelection->CurrentMenu->QuestionId == 0) {\r
- mCurFakeQestId = Statement->FakeQuestionId;\r
- } else {\r
- mCurFakeQestId = 0;\r
- }\r
- }\r
-\r
switch (Statement->Operand) {\r
case EFI_IFR_REF_OP:\r
Status = ProcessGotoOpCode(Statement, gCurrentSelection);\r
EFI_STATUS Status;\r
USER_INPUT UserInput;\r
FORM_ENTRY_INFO *CurrentMenu;\r
- BOOLEAN ChangeHighlight;\r
\r
ZeroMem (&UserInput, sizeof (USER_INPUT));\r
\r
\r
gCurrentSelection->CurrentMenu = CurrentMenu;\r
\r
- //\r
- // Find currrent highlight statement.\r
- //\r
if (gCurrentSelection->QuestionId == 0) {\r
//\r
// Highlight not specified, fetch it from cached menu\r
gCurrentSelection->QuestionId = CurrentMenu->QuestionId;\r
}\r
\r
- //\r
- // Evaluate all the Expressions in this Form\r
- //\r
Status = EvaluateFormExpressions (gCurrentSelection->FormSet, gCurrentSelection->Form);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
\r
UpdateDisplayFormData ();\r
\r
- //\r
- // Three possible status maybe return.\r
- //\r
- // EFI_INVALID_PARAMETER: The input dimension info is not valid.\r
- // EFI_NOT_FOUND: The input value for oneof/orderedlist opcode is not valid\r
- // and an valid value has return.\r
- // EFI_SUCCESS: Success shows form and get user input in UserInput paramenter.\r
- //\r
ASSERT (gDisplayFormData.BrowserStatus == BROWSER_SUCCESS);\r
Status = mFormDisplay->FormDisplay (&gDisplayFormData, &UserInput);\r
- if (EFI_ERROR (Status) && Status != EFI_NOT_FOUND) {\r
+ if (EFI_ERROR (Status)) {\r
FreeDisplayFormData();\r
return Status;\r
}\r
\r
- //\r
- // If status is EFI_SUCCESS, means user has change the highlight menu and new user input return.\r
- // in this case, browser need to change the highlight menu.\r
- // If status is EFI_NOT_FOUND, means the input DisplayFormData has error for oneof/orderedlist \r
- // opcode and new valid value has return, browser core need to adjust\r
- // value for this opcode and shows this form again.\r
- //\r
- ChangeHighlight = (Status == EFI_SUCCESS ? TRUE :FALSE);\r
-\r
- Status = ProcessUserInput (&UserInput, ChangeHighlight);\r
-\r
+ Status = ProcessUserInput (&UserInput);\r
FreeDisplayFormData();\r
-\r
return Status;\r
}\r
\r