]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/DisplayEngineDxe/ProcessOptions.c
Update question validation logic, move the check pointer from after user input to...
[mirror_edk2.git] / MdeModulePkg / Universal / DisplayEngineDxe / ProcessOptions.c
index 8da563ba700cc7ee3a5ffbe7a20ccdf53b498c4f..1ab38b1df2e5fd8fbabfcba8874ebb8a97149f3b 100644 (file)
@@ -15,12 +15,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 #include "FormDisplay.h"\r
 \r
-typedef struct {\r
-  EFI_EVENT   SyncEvent;\r
-  UINT8       *TimeOut;\r
-  CHAR16      *ErrorInfo;\r
-} WARNING_IF_CONTEXT;\r
-\r
 #define MAX_TIME_OUT_LEN  0x10\r
 \r
 /**\r
@@ -667,143 +661,6 @@ RefreshTimeOutProcess (
   *(EventInfo->TimeOut) -= 1;\r
 }\r
 \r
-/**\r
-  Show the warning message.\r
-\r
-  @param   RetInfo    The input warning string and timeout info.\r
-\r
-**/\r
-VOID\r
-WarningIfCheck (\r
-  IN STATEMENT_ERROR_INFO  *RetInfo\r
-  )\r
-{\r
-  CHAR16             *ErrorInfo;\r
-  EFI_EVENT          WaitList[2];\r
-  EFI_EVENT          RefreshIntervalEvent;\r
-  EFI_EVENT          TimeOutEvent;\r
-  UINT8              TimeOut;\r
-  EFI_STATUS         Status;\r
-  UINTN              Index;\r
-  WARNING_IF_CONTEXT EventContext;\r
-  EFI_INPUT_KEY      Key;\r
-\r
-  TimeOutEvent         = NULL;\r
-  RefreshIntervalEvent = NULL;\r
-\r
-  ASSERT (RetInfo->StringId != 0);\r
-  ErrorInfo = GetToken (RetInfo->StringId, gFormData->HiiHandle);\r
-  TimeOut   = RetInfo->TimeOut;\r
-  if (RetInfo->TimeOut == 0) {\r
-    do {\r
-      CreateDialog (&Key, gEmptyString, ErrorInfo, gPressEnter, gEmptyString, NULL);\r
-    } while (Key.UnicodeChar != CHAR_CARRIAGE_RETURN);\r
-  } else {\r
-    Status = gBS->CreateEvent (EVT_NOTIFY_WAIT, TPL_CALLBACK, EmptyEventProcess, NULL, &TimeOutEvent);\r
-    ASSERT_EFI_ERROR (Status);\r
-\r
-    EventContext.SyncEvent = TimeOutEvent;\r
-    EventContext.TimeOut   = &TimeOut;\r
-    EventContext.ErrorInfo = ErrorInfo;\r
-\r
-    Status = gBS->CreateEvent (EVT_TIMER | EVT_NOTIFY_SIGNAL, TPL_CALLBACK, RefreshTimeOutProcess, &EventContext, &RefreshIntervalEvent);\r
-    ASSERT_EFI_ERROR (Status);\r
-\r
-    //\r
-    // Show the dialog first to avoid long time not reaction.\r
-    //\r
-    gBS->SignalEvent (RefreshIntervalEvent);\r
-\r
-    Status = gBS->SetTimer (RefreshIntervalEvent, TimerPeriodic, ONE_SECOND);\r
-    ASSERT_EFI_ERROR (Status);\r
-\r
-    while (TRUE) {\r
-      Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);\r
-      if (!EFI_ERROR (Status) && Key.UnicodeChar == CHAR_CARRIAGE_RETURN) {\r
-        break;\r
-      }\r
-\r
-      if (Status != EFI_NOT_READY) {\r
-        continue;\r
-      }\r
-\r
-      WaitList[0] = TimeOutEvent;\r
-      WaitList[1] = gST->ConIn->WaitForKey;\r
-\r
-      Status = gBS->WaitForEvent (2, WaitList, &Index);\r
-      ASSERT_EFI_ERROR (Status);\r
-\r
-      if (Index == 0) {\r
-        //\r
-        // Timeout occur, close the hoot time out event.\r
-        //\r
-        break;\r
-      }\r
-    }\r
-  }\r
-\r
-  gBS->CloseEvent (TimeOutEvent);\r
-  gBS->CloseEvent (RefreshIntervalEvent);\r
-\r
-  FreePool (ErrorInfo);\r
-}\r
-\r
-/**\r
-  Process validate for one question.\r
-\r
-  @param  Question               The question need to be validate.\r
-\r
-  @retval EFI_SUCCESS            Question Option process success.\r
-  @retval EFI_INVALID_PARAMETER  Question Option process fail.\r
-\r
-**/\r
-EFI_STATUS \r
-ValidateQuestion (\r
-  IN FORM_DISPLAY_ENGINE_STATEMENT   *Question\r
-  )\r
-{\r
-  CHAR16                          *ErrorInfo;\r
-  EFI_INPUT_KEY                   Key;\r
-  EFI_STATUS                      Status;\r
-  STATEMENT_ERROR_INFO            RetInfo;\r
-  UINT32                          RetVal;\r
-\r
-  if (Question->ValidateQuestion == NULL) {\r
-    return EFI_SUCCESS;\r
-  }\r
-\r
-  Status = EFI_SUCCESS; \r
-  RetVal = Question->ValidateQuestion(gFormData, Question, &gUserInput->InputValue, &RetInfo);\r
\r
-  switch (RetVal) {\r
-  case INCOSISTENT_IF_TRUE:\r
-    //\r
-    // Condition meet, show up error message\r
-    //\r
-    ASSERT (RetInfo.StringId != 0);\r
-    ErrorInfo = GetToken (RetInfo.StringId, gFormData->HiiHandle);\r
-    do {\r
-      CreateDialog (&Key, gEmptyString, ErrorInfo, gPressEnter, gEmptyString, NULL);\r
-    } while (Key.UnicodeChar != CHAR_CARRIAGE_RETURN);\r
-    FreePool (ErrorInfo);\r
-\r
-    Status = EFI_INVALID_PARAMETER;\r
-    break;\r
-\r
-  case WARNING_IF_TRUE:\r
-    //\r
-    // Condition meet, show up warning message\r
-    //\r
-    WarningIfCheck (&RetInfo);\r
-    break;\r
-\r
-  default:\r
-    break;\r
-  }\r
-\r
-  return Status;\r
-}\r
-\r
 /**\r
   Display error message for invalid password.\r
 \r
@@ -935,7 +792,7 @@ PasswordProcess (
     gUserInput->InputValue.Value.string = HiiSetString(gFormData->HiiHandle, gUserInput->InputValue.Value.string, StringPtr, NULL);\r
     FreePool (StringPtr); \r
 \r
-    Status = ValidateQuestion (Question);\r
+    Status = EFI_SUCCESS;\r
 \r
     if (EFI_ERROR (Status)) {\r
       //\r
@@ -1277,7 +1134,7 @@ ProcessOptions (
       //\r
       // Perform inconsistent check\r
       //\r
-      return ValidateQuestion (Question);\r
+      return EFI_SUCCESS;\r
     } else {    \r
       *OptionString = AllocateZeroPool (BufferSize);\r
       ASSERT (*OptionString);\r
@@ -1397,7 +1254,7 @@ ProcessOptions (
       gUserInput->InputValue.Type = Question->CurrentValue.Type;\r
       gUserInput->InputValue.Value.string = HiiSetString(gFormData->HiiHandle, gUserInput->InputValue.Value.string, StringPtr, NULL);\r
       FreePool (StringPtr);\r
-      return ValidateQuestion (Question);\r
+      return EFI_SUCCESS;\r
     } else {\r
       *OptionString = AllocateZeroPool (BufferSize);\r
       ASSERT (*OptionString);\r