]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Library/CustomizedDisplayLib/CustomizedDisplayLib.c
MdeModulePkg: Add UNI files for BootManagerMenuApp application.
[mirror_edk2.git] / MdeModulePkg / Library / CustomizedDisplayLib / CustomizedDisplayLib.c
index aa28146b0255405b8c846870e7d0fd53c4e824d2..622410359c1f45ae5bc76c047a88d10fc0281746 100644 (file)
@@ -2,7 +2,7 @@
 \r
   This library class defines a set of interfaces to customize Display module\r
 \r
-Copyright (c) 2013, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials are licensed and made available under \r
 the terms and conditions of the BSD License that accompanies this distribution.  \r
 The full text of the license may be found at\r
@@ -135,7 +135,6 @@ RefreshKeyHelp (
 {\r
   UINTN                  SecCol;\r
   UINTN                  ThdCol;\r
-  UINTN                  LeftColumnOfHelp;\r
   UINTN                  RightColumnOfHelp;\r
   UINTN                  TopRowOfHelp;\r
   UINTN                  BottomRowOfHelp;\r
@@ -144,6 +143,12 @@ RefreshKeyHelp (
   EFI_IFR_DATE           *DateOp;\r
   EFI_IFR_TIME           *TimeOp;\r
   BOOLEAN                HexDisplay;\r
+  UINTN                  ColumnWidth1;\r
+  UINTN                  ColumnWidth2;\r
+  UINTN                  ColumnWidth3;\r
+  CHAR16                 *ColumnStr1;\r
+  CHAR16                 *ColumnStr2;\r
+  CHAR16                 *ColumnStr3;\r
 \r
   ASSERT (FormData != NULL);\r
   if (FormData == NULL) {\r
@@ -159,19 +164,40 @@ RefreshKeyHelp (
   SecCol            = gScreenDimensions.LeftColumn + (gScreenDimensions.RightColumn - gScreenDimensions.LeftColumn) / 3;\r
   ThdCol            = gScreenDimensions.LeftColumn + (gScreenDimensions.RightColumn - gScreenDimensions.LeftColumn) / 3 * 2;\r
 \r
+  //\r
+  // + 2 means leave 1 space before the first hotkey info.\r
+  //\r
   StartColumnOfHelp = gScreenDimensions.LeftColumn + 2;\r
-  LeftColumnOfHelp  = gScreenDimensions.LeftColumn + 1;\r
-  RightColumnOfHelp = gScreenDimensions.RightColumn - 2;\r
+  RightColumnOfHelp = gScreenDimensions.RightColumn - 1;\r
   TopRowOfHelp      = gScreenDimensions.BottomRow - STATUS_BAR_HEIGHT - gFooterHeight + 1;\r
   BottomRowOfHelp   = gScreenDimensions.BottomRow - STATUS_BAR_HEIGHT - 2;\r
 \r
-  ClearLines (LeftColumnOfHelp, RightColumnOfHelp, TopRowOfHelp, BottomRowOfHelp, KEYHELP_TEXT | KEYHELP_BACKGROUND);\r
+  ColumnWidth1      = SecCol - StartColumnOfHelp;\r
+  ColumnWidth2      = ThdCol - SecCol;\r
+  ColumnWidth3      = RightColumnOfHelp - ThdCol;\r
+  ColumnStr1        = gLibEmptyString;\r
+  ColumnStr2        = gLibEmptyString;\r
+  ColumnStr3        = gLibEmptyString;\r
+\r
+  //\r
+  // Clean the space at gScreenDimensions.LeftColumn + 1.\r
+  //\r
+  PrintStringAtWithWidth (StartColumnOfHelp - 1, BottomRowOfHelp, gLibEmptyString, 1);\r
+  PrintStringAtWithWidth (StartColumnOfHelp - 1, TopRowOfHelp, gLibEmptyString, 1);\r
+\r
   if (Statement == NULL) {\r
     //\r
     // Print Key for Form without showable statement.\r
     //\r
-    PrintHotKeyHelpString (FormData);\r
-    PrintStringAt (ThdCol, BottomRowOfHelp, gEscapeString);\r
+    PrintHotKeyHelpString (FormData, TRUE);\r
+    PrintStringAtWithWidth (StartColumnOfHelp, BottomRowOfHelp, gLibEmptyString, ColumnWidth1);\r
+    PrintStringAtWithWidth (SecCol, BottomRowOfHelp, gLibEmptyString, ColumnWidth2);\r
+    PrintStringAtWithWidth (StartColumnOfHelp, TopRowOfHelp, gLibEmptyString, ColumnWidth1);\r
+    if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) {\r
+      ColumnStr3 = gEscapeString;\r
+    }\r
+    PrintStringAtWithWidth (ThdCol, BottomRowOfHelp, ColumnStr3, ColumnWidth3);\r
+\r
     return;\r
   }\r
 \r
@@ -196,16 +222,17 @@ RefreshKeyHelp (
   case EFI_IFR_TIME_OP:\r
   case EFI_IFR_DATE_OP:\r
     if (!Selected) {\r
-        PrintHotKeyHelpString (FormData);\r
+      PrintHotKeyHelpString (FormData, TRUE);\r
 \r
       if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) {\r
-        PrintStringAt (ThdCol, BottomRowOfHelp, gEscapeString);\r
+        ColumnStr3 = gEscapeString;\r
       }\r
+      PrintStringAtWithWidth (ThdCol, BottomRowOfHelp, ColumnStr3, ColumnWidth3);\r
 \r
       if ((Statement->OpCode->OpCode == EFI_IFR_DATE_OP) ||\r
           (Statement->OpCode->OpCode == EFI_IFR_TIME_OP)) {\r
         PrintAt (\r
-          0\r
+          ColumnWidth1\r
           StartColumnOfHelp,\r
           BottomRowOfHelp,\r
           L"%c%c%c%c%s",\r
@@ -215,17 +242,19 @@ RefreshKeyHelp (
           ARROW_LEFT,\r
           gMoveHighlight\r
           );\r
-        PrintStringAt (SecCol, BottomRowOfHelp, gEnterString);\r
-        PrintStringAt (StartColumnOfHelp, TopRowOfHelp, gAdjustNumber);\r
+        PrintStringAtWithWidth (SecCol, BottomRowOfHelp, gEnterString, ColumnWidth2);\r
+        PrintStringAtWithWidth (StartColumnOfHelp, TopRowOfHelp, gAdjustNumber, ColumnWidth1);\r
       } else {\r
-        PrintAt (0, StartColumnOfHelp, BottomRowOfHelp, L"%c%c%s", ARROW_UP, ARROW_DOWN, gMoveHighlight);\r
+        PrintAt (ColumnWidth1, StartColumnOfHelp, BottomRowOfHelp, L"%c%c%s", ARROW_UP, ARROW_DOWN, gMoveHighlight);\r
         if (Statement->OpCode->OpCode == EFI_IFR_NUMERIC_OP && NumericOp != NULL && LibGetFieldFromNum(Statement->OpCode) != 0) {\r
-          PrintStringAt (StartColumnOfHelp, TopRowOfHelp, gAdjustNumber);\r
-        } \r
-        PrintStringAt (SecCol, BottomRowOfHelp, gEnterString);\r
+          ColumnStr1 = gAdjustNumber;\r
+        }\r
+        PrintStringAtWithWidth (StartColumnOfHelp, TopRowOfHelp, ColumnStr1, ColumnWidth1);\r
+        PrintStringAtWithWidth (SecCol, BottomRowOfHelp, gEnterString, ColumnWidth2);\r
       }\r
     } else {\r
-      PrintStringAt (SecCol, BottomRowOfHelp, gEnterCommitString);\r
+      PrintHotKeyHelpString (FormData, FALSE);\r
+      PrintStringAtWithWidth (SecCol, BottomRowOfHelp, gEnterCommitString, ColumnWidth2);\r
 \r
       //\r
       // If it is a selected numeric with manual input, display different message\r
@@ -233,33 +262,35 @@ RefreshKeyHelp (
       if ((Statement->OpCode->OpCode == EFI_IFR_NUMERIC_OP) || \r
           (Statement->OpCode->OpCode == EFI_IFR_DATE_OP) ||\r
           (Statement->OpCode->OpCode == EFI_IFR_TIME_OP)) {\r
-        PrintStringAt (\r
-          SecCol,\r
-          TopRowOfHelp,\r
-          HexDisplay ? gHexNumericInput : gDecNumericInput\r
-          );\r
-      } else if (Statement->OpCode->OpCode != EFI_IFR_ORDERED_LIST_OP) {\r
-        PrintAt (0, StartColumnOfHelp, BottomRowOfHelp, L"%c%c%s", ARROW_UP, ARROW_DOWN, gMoveHighlight);\r
+        ColumnStr2 = HexDisplay ? gHexNumericInput : gDecNumericInput;\r
+        PrintStringAtWithWidth (StartColumnOfHelp, BottomRowOfHelp, gLibEmptyString, ColumnWidth1);\r
+      } else {\r
+        PrintAt (ColumnWidth1, StartColumnOfHelp, BottomRowOfHelp, L"%c%c%s", ARROW_UP, ARROW_DOWN, gMoveHighlight);\r
       }\r
 \r
       if (Statement->OpCode->OpCode == EFI_IFR_ORDERED_LIST_OP) {\r
-        PrintStringAt (StartColumnOfHelp, TopRowOfHelp, gPlusString);\r
-        PrintStringAt (ThdCol, TopRowOfHelp, gMinusString);\r
+        ColumnStr1 = gPlusString;\r
+        ColumnStr3 = gMinusString;\r
       }\r
+      PrintStringAtWithWidth (StartColumnOfHelp, TopRowOfHelp, ColumnStr1, ColumnWidth1);\r
+      PrintStringAtWithWidth (ThdCol, TopRowOfHelp, ColumnStr3, ColumnWidth3);\r
+      PrintStringAtWithWidth (SecCol, TopRowOfHelp, ColumnStr2, ColumnWidth2);\r
 \r
-      PrintStringAt (ThdCol, BottomRowOfHelp, gEnterEscapeString);\r
+      PrintStringAtWithWidth (ThdCol, BottomRowOfHelp, gEnterEscapeString, ColumnWidth3);\r
     }\r
     break;\r
 \r
   case EFI_IFR_CHECKBOX_OP:\r
-    PrintHotKeyHelpString (FormData);\r
+    PrintHotKeyHelpString (FormData, TRUE);\r
 \r
     if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) {\r
-      PrintStringAt (ThdCol, BottomRowOfHelp, gEscapeString);\r
+      ColumnStr3 = gEscapeString;\r
     }\r
+    PrintStringAtWithWidth (ThdCol, BottomRowOfHelp, ColumnStr3, ColumnWidth3);\r
 \r
-    PrintAt (0, StartColumnOfHelp, BottomRowOfHelp, L"%c%c%s", ARROW_UP, ARROW_DOWN, gMoveHighlight);\r
-    PrintStringAt (SecCol, BottomRowOfHelp, gToggleCheckBox);\r
+    PrintAt (ColumnWidth1, StartColumnOfHelp, BottomRowOfHelp, L"%c%c%s", ARROW_UP, ARROW_DOWN, gMoveHighlight);\r
+    PrintStringAtWithWidth (SecCol, BottomRowOfHelp, gToggleCheckBox, ColumnWidth2);\r
+    PrintStringAtWithWidth (StartColumnOfHelp, TopRowOfHelp, gLibEmptyString, ColumnWidth1);\r
     break;\r
 \r
   case EFI_IFR_REF_OP:\r
@@ -270,25 +301,29 @@ RefreshKeyHelp (
   case EFI_IFR_RESET_BUTTON_OP:\r
   case EFI_IFR_SUBTITLE_OP:\r
      if (!Selected) {\r
-      PrintHotKeyHelpString (FormData);\r
+      PrintHotKeyHelpString (FormData, TRUE);\r
 \r
       if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) {\r
-        PrintStringAt (ThdCol, BottomRowOfHelp, gEscapeString);\r
+        ColumnStr3 = gEscapeString;\r
       }\r
+      PrintStringAtWithWidth (ThdCol, BottomRowOfHelp, ColumnStr3, ColumnWidth3);\r
 \r
-      PrintAt (0, StartColumnOfHelp, BottomRowOfHelp, L"%c%c%s", ARROW_UP, ARROW_DOWN, gMoveHighlight);\r
+      PrintAt (ColumnWidth1, StartColumnOfHelp, BottomRowOfHelp, L"%c%c%s", ARROW_UP, ARROW_DOWN, gMoveHighlight);\r
       if (Statement->OpCode->OpCode != EFI_IFR_TEXT_OP && Statement->OpCode->OpCode != EFI_IFR_SUBTITLE_OP) {\r
-        PrintStringAt (SecCol, BottomRowOfHelp, gEnterString);\r
+        ColumnStr2 = gEnterString;\r
       }\r
+      PrintStringAtWithWidth (SecCol, BottomRowOfHelp, ColumnStr2, ColumnWidth2);\r
+      PrintStringAtWithWidth (StartColumnOfHelp, TopRowOfHelp, ColumnStr1, ColumnWidth1);\r
     } else {\r
-      if (Statement->OpCode->OpCode  != EFI_IFR_REF_OP) {\r
-        PrintStringAt (\r
-          (gScreenDimensions.RightColumn - LibGetStringWidth (gEnterCommitString) / 2) / 2,\r
-          BottomRowOfHelp,\r
-          gEnterCommitString\r
-          );\r
-        PrintStringAt (ThdCol, BottomRowOfHelp, gEnterEscapeString);\r
+      PrintHotKeyHelpString (FormData, FALSE);\r
+      if (Statement->OpCode->OpCode != EFI_IFR_REF_OP) {\r
+        ColumnStr2 = gEnterCommitString;\r
+        ColumnStr3 = gEnterEscapeString;\r
       }\r
+      PrintStringAtWithWidth (StartColumnOfHelp, TopRowOfHelp, ColumnStr1, ColumnWidth1);\r
+      PrintStringAtWithWidth (StartColumnOfHelp, BottomRowOfHelp, ColumnStr1, ColumnWidth1);\r
+      PrintStringAtWithWidth (SecCol, BottomRowOfHelp, ColumnStr2, ColumnWidth2);\r
+      PrintStringAtWithWidth (ThdCol, BottomRowOfHelp, ColumnStr3, ColumnWidth3);\r
     }\r
     break;\r
 \r
@@ -395,6 +430,7 @@ CreateDialog (
   UINTN   DimensionsWidth;\r
   UINTN   DimensionsHeight;\r
   UINTN   CurrentAttribute;\r
+  BOOLEAN CursorVisible;\r
 \r
   //\r
   // If screen dimension info is not ready, get it from console.\r
@@ -428,7 +464,8 @@ CreateDialog (
     LargestString = DimensionsWidth - 2;\r
   }\r
   \r
-  CurrentAttribute  = gST->ConOut->Mode->Attribute;  \r
+  CurrentAttribute  = gST->ConOut->Mode->Attribute;\r
+  CursorVisible     = gST->ConOut->Mode->CursorVisible;\r
   gST->ConOut->EnableCursor (gST->ConOut, FALSE);\r
   gST->ConOut->SetAttribute (gST->ConOut, GetPopupColor ());\r
 \r
@@ -510,7 +547,7 @@ CreateDialog (
   }\r
 \r
   gST->ConOut->SetAttribute (gST->ConOut, CurrentAttribute);\r
-  gST->ConOut->EnableCursor (gST->ConOut, TRUE);\r
+  gST->ConOut->EnableCursor (gST->ConOut, CursorVisible);\r
 }\r
 \r
 /**\r