]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Enable popup dialog when user press the hotkey.
authorEric Dong <eric.dong@intel.com>
Fri, 23 Jan 2015 05:51:07 +0000 (05:51 +0000)
committerydong10 <ydong10@Edk2>
Fri, 23 Jan 2015 05:51:07 +0000 (05:51 +0000)
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@16645 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Universal/DisplayEngineDxe/FormDisplay.c
MdeModulePkg/Universal/DisplayEngineDxe/FormDisplayStr.uni

index cdfd383a476353a9bf54b3d9698a8ff50c425a7c..b9090d370265474a844c0c3b3a50fd61a2a859cd 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
 Entry and initialization module for the browser.\r
 \r
-Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>\r
 Copyright (c) 2014, Hewlett-Packard Development Company, L.P.<BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
@@ -135,7 +135,20 @@ CHAR16            *gMiniString;
 CHAR16            *gOptionMismatch;\r
 CHAR16            *gFormSuppress;\r
 CHAR16            *gProtocolNotFound;\r
-\r
+CHAR16            *gConfirmDefaultMsg;\r
+CHAR16            *gConfirmSubmitMsg;\r
+CHAR16            *gConfirmDiscardMsg;\r
+CHAR16            *gConfirmResetMsg;\r
+CHAR16            *gConfirmExitMsg;\r
+CHAR16            *gConfirmSubmitMsg2nd;\r
+CHAR16            *gConfirmDefaultMsg2nd;\r
+CHAR16            *gConfirmResetMsg2nd;\r
+CHAR16            *gConfirmExitMsg2nd;\r
+CHAR16            *gConfirmOpt;\r
+CHAR16            *gConfirmOptYes;\r
+CHAR16            *gConfirmOptNo;\r
+CHAR16            *gConfirmMsgConnect;\r
+CHAR16            *gConfirmMsgEnd;\r
 CHAR16            gModalSkipColumn;\r
 CHAR16            gPromptBlockWidth;\r
 CHAR16            gOptionBlockWidth;\r
@@ -213,6 +226,20 @@ InitializeDisplayStrings (
   gFormNotFound         = GetToken (STRING_TOKEN (STATUS_BROWSER_FORM_NOT_FOUND), gHiiHandle);\r
   gNoSubmitIf           = GetToken (STRING_TOKEN (STATUS_BROWSER_NO_SUBMIT_IF), gHiiHandle);\r
   gBrwoserError         = GetToken (STRING_TOKEN (STATUS_BROWSER_ERROR), gHiiHandle);\r
+  gConfirmDefaultMsg    = GetToken (STRING_TOKEN (CONFIRM_DEFAULT_MESSAGE), gHiiHandle);\r
+  gConfirmDiscardMsg    = GetToken (STRING_TOKEN (CONFIRM_DISCARD_MESSAGE), gHiiHandle);\r
+  gConfirmSubmitMsg     = GetToken (STRING_TOKEN (CONFIRM_SUBMIT_MESSAGE), gHiiHandle);\r
+  gConfirmResetMsg      = GetToken (STRING_TOKEN (CONFIRM_RESET_MESSAGE), gHiiHandle);\r
+  gConfirmExitMsg       = GetToken (STRING_TOKEN (CONFIRM_EXIT_MESSAGE), gHiiHandle);\r
+  gConfirmDefaultMsg2nd = GetToken (STRING_TOKEN (CONFIRM_DEFAULT_MESSAGE_2ND), gHiiHandle);\r
+  gConfirmSubmitMsg2nd  = GetToken (STRING_TOKEN (CONFIRM_SUBMIT_MESSAGE_2ND), gHiiHandle);\r
+  gConfirmResetMsg2nd   = GetToken (STRING_TOKEN (CONFIRM_RESET_MESSAGE_2ND), gHiiHandle);\r
+  gConfirmExitMsg2nd    = GetToken (STRING_TOKEN (CONFIRM_EXIT_MESSAGE_2ND), gHiiHandle);\r
+  gConfirmOpt           = GetToken (STRING_TOKEN (CONFIRM_OPTION), gHiiHandle);\r
+  gConfirmOptYes        = GetToken (STRING_TOKEN (CONFIRM_OPTION_YES), gHiiHandle);\r
+  gConfirmOptNo         = GetToken (STRING_TOKEN (CONFIRM_OPTION_NO), gHiiHandle);\r
+  gConfirmMsgConnect    = GetToken (STRING_TOKEN (CONFIRM_OPTION_CONNECT), gHiiHandle);\r
+  gConfirmMsgEnd        = GetToken (STRING_TOKEN (CONFIRM_OPTION_END), gHiiHandle);\r
 }\r
 \r
 /**\r
@@ -248,6 +275,20 @@ FreeDisplayStrings (
   FreePool (gBrwoserError);\r
   FreePool (gNoSubmitIf);\r
   FreePool (gFormNotFound);\r
+  FreePool (gConfirmDefaultMsg);\r
+  FreePool (gConfirmSubmitMsg);\r
+  FreePool (gConfirmDiscardMsg);\r
+  FreePool (gConfirmResetMsg);\r
+  FreePool (gConfirmExitMsg);\r
+  FreePool (gConfirmDefaultMsg2nd);\r
+  FreePool (gConfirmSubmitMsg2nd);\r
+  FreePool (gConfirmResetMsg2nd);\r
+  FreePool (gConfirmExitMsg2nd);\r
+  FreePool (gConfirmOpt);\r
+  FreePool (gConfirmOptYes);\r
+  FreePool (gConfirmOptNo);\r
+  FreePool (gConfirmMsgConnect);\r
+  FreePool (gConfirmMsgEnd);\r
 }\r
 \r
 /**\r
@@ -2071,6 +2112,146 @@ HasOptionString (
   return TRUE;\r
 }\r
 \r
+/**\r
+  Double confirm with user about the action.\r
+\r
+  @param  Action               The user input action.\r
+\r
+  @retval TRUE                 User confirm with the input or not need user confirm.\r
+  @retval FALSE                User want ignore this input.\r
+\r
+**/\r
+BOOLEAN\r
+FxConfirmPopup (\r
+  IN UINT32   Action\r
+  )\r
+{\r
+  EFI_INPUT_KEY                   Key;\r
+  CHAR16                          *CfmStr;\r
+  UINTN                           CfmStrLen;\r
+  UINT32                          CheckFlags;\r
+  BOOLEAN                         RetVal;\r
+  UINTN                           CatLen;\r
+\r
+  CfmStrLen = 0;\r
+  CatLen    = StrLen (gConfirmMsgConnect);\r
+\r
+  //\r
+  // Below action need extra popup dialog to confirm.\r
+  // \r
+  CheckFlags = BROWSER_ACTION_DISCARD | \r
+               BROWSER_ACTION_DEFAULT |\r
+               BROWSER_ACTION_SUBMIT |\r
+               BROWSER_ACTION_RESET |\r
+               BROWSER_ACTION_EXIT;\r
+\r
+  //\r
+  // Not need to confirm with user, just return TRUE.\r
+  //\r
+  if ((Action & CheckFlags) == 0) {\r
+    return TRUE;\r
+  }\r
+\r
+  if ((Action & BROWSER_ACTION_DISCARD) == BROWSER_ACTION_DISCARD) {\r
+    CfmStrLen += StrLen (gConfirmDiscardMsg);\r
+  } \r
+\r
+  if ((Action & BROWSER_ACTION_DEFAULT) == BROWSER_ACTION_DEFAULT) {\r
+    if (CfmStrLen != 0) {\r
+      CfmStrLen += CatLen;\r
+    } \r
+\r
+    CfmStrLen += StrLen (gConfirmDefaultMsg);\r
+  }\r
+\r
+  if ((Action & BROWSER_ACTION_SUBMIT)  == BROWSER_ACTION_SUBMIT) {\r
+    if (CfmStrLen != 0) {\r
+      CfmStrLen += CatLen;\r
+    } \r
+\r
+    CfmStrLen += StrLen (gConfirmSubmitMsg);\r
+  }\r
+\r
+  if ((Action & BROWSER_ACTION_RESET)  == BROWSER_ACTION_RESET) {\r
+    if (CfmStrLen != 0) {\r
+      CfmStrLen += CatLen;\r
+    } \r
+\r
+    CfmStrLen += StrLen (gConfirmResetMsg);\r
+  }\r
+\r
+  if ((Action & BROWSER_ACTION_EXIT)  == BROWSER_ACTION_EXIT) {\r
+    if (CfmStrLen != 0) {\r
+      CfmStrLen += CatLen;\r
+    } \r
+\r
+    CfmStrLen += StrLen (gConfirmExitMsg);\r
+  }\r
+\r
+  //\r
+  // Allocate buffer to save the string.\r
+  // String + "?" + "\0"\r
+  //\r
+  CfmStr = AllocateZeroPool ((CfmStrLen + 1 + 1) * sizeof (CHAR16));\r
+  ASSERT (CfmStr != NULL);\r
+\r
+  if ((Action & BROWSER_ACTION_DISCARD) == BROWSER_ACTION_DISCARD) {\r
+    StrCpy (CfmStr, gConfirmDiscardMsg);\r
+  }\r
+\r
+  if ((Action & BROWSER_ACTION_DEFAULT) == BROWSER_ACTION_DEFAULT) {\r
+    if (CfmStr[0] != 0) {\r
+      StrCat (CfmStr, gConfirmMsgConnect);\r
+      StrCat (CfmStr, gConfirmDefaultMsg2nd);\r
+    } else {\r
+      StrCpy (CfmStr, gConfirmDefaultMsg);\r
+    }\r
+  }\r
+\r
+  if ((Action & BROWSER_ACTION_SUBMIT)  == BROWSER_ACTION_SUBMIT) {\r
+    if (CfmStr[0] != 0) {\r
+      StrCat (CfmStr, gConfirmMsgConnect);\r
+      StrCat (CfmStr, gConfirmSubmitMsg2nd);\r
+    } else {\r
+      StrCpy (CfmStr, gConfirmSubmitMsg);\r
+    }\r
+  }\r
+\r
+  if ((Action & BROWSER_ACTION_RESET)  == BROWSER_ACTION_RESET) {\r
+    if (CfmStr[0] != 0) {\r
+      StrCat (CfmStr, gConfirmMsgConnect);\r
+      StrCat (CfmStr, gConfirmResetMsg2nd);\r
+    } else {\r
+      StrCpy (CfmStr, gConfirmResetMsg);\r
+    }\r
+  }\r
+\r
+  if ((Action & BROWSER_ACTION_EXIT)  == BROWSER_ACTION_EXIT) {\r
+    if (CfmStr[0] != 0) {\r
+      StrCat (CfmStr, gConfirmMsgConnect);\r
+      StrCat (CfmStr, gConfirmExitMsg2nd);\r
+    } else {\r
+      StrCpy (CfmStr, gConfirmExitMsg);\r
+    }\r
+  }\r
+\r
+  StrCat (CfmStr, gConfirmMsgEnd);\r
+\r
+  do {\r
+    CreateDialog (&Key, gEmptyString, CfmStr, gConfirmOpt, gEmptyString, NULL);\r
+  } while (((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) != (gConfirmOptYes[0] | UPPER_LOWER_CASE_OFFSET)) &&\r
+           ((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) != (gConfirmOptNo[0] | UPPER_LOWER_CASE_OFFSET)));\r
+\r
+  if ((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) == (gConfirmOptYes[0] | UPPER_LOWER_CASE_OFFSET)) {\r
+    RetVal = TRUE;\r
+  } else {\r
+    RetVal = FALSE;\r
+  }\r
+\r
+  FreePool (CfmStr);\r
+\r
+  return RetVal;\r
+}\r
 \r
 /**\r
   Print string for this menu option.\r
@@ -3096,8 +3277,16 @@ UiDisplayMenu (
       ControlFlag = CfRepaint;\r
 \r
       ASSERT (HotKey != NULL);\r
-      gUserInput->Action = HotKey->Action;\r
-      ControlFlag = CfExit;\r
+\r
+      if (FxConfirmPopup(HotKey->Action)) {\r
+        gUserInput->Action = HotKey->Action;\r
+        ControlFlag = CfExit;\r
+      } else {\r
+        Repaint     = TRUE;\r
+        NewLine     = TRUE;\r
+        ControlFlag = CfRepaint;\r
+      }\r
+\r
       break;\r
 \r
     case CfUiLeft:\r
index 654dbe3569b86f398ffd9a25cecf453d2e6d82b5..cf6ed3f4f474759388be90fd370fb876457cd329 100644 (file)
Binary files a/MdeModulePkg/Universal/DisplayEngineDxe/FormDisplayStr.uni and b/MdeModulePkg/Universal/DisplayEngineDxe/FormDisplayStr.uni differ