\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
-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
-http://opensource.org/licenses/bsd-license.php. \r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
#include "CustomizedDisplayLibInternal.h"\r
**/\r
\r
/**\r
- This funtion defines Page Frame and Backgroud. \r
- \r
- Based on the above layout, it will be responsible for HeaderHeight, FooterHeight, \r
- StatusBarHeight and Backgroud. And, it will reserve Screen for Statement. \r
+ This funtion defines Page Frame and Backgroud.\r
+\r
+ Based on the above layout, it will be responsible for HeaderHeight, FooterHeight,\r
+ StatusBarHeight and Backgroud. And, it will reserve Screen for Statement.\r
\r
@param[in] FormData Form Data to be shown in Page.\r
@param[out] ScreenForStatement Screen to be used for Statement. (Prompt, Value and Help)\r
- \r
+\r
@return Status\r
**/\r
EFI_STATUS\r
This function updates customized key panel's help information.\r
The library will prepare those Strings for the basic key, ESC, Enter, Up/Down/Left/Right, +/-.\r
and arrange them in Footer panel.\r
- \r
- @param[in] FormData Form Data to be shown in Page. FormData has the highlighted statement. \r
+\r
+ @param[in] FormData Form Data to be shown in Page. FormData has the highlighted statement.\r
@param[in] Statement The statement current selected.\r
@param[in] Selected Whether or not a tag be selected. TRUE means Enter has hit this question.\r
**/\r
{\r
UINTN SecCol;\r
UINTN ThdCol;\r
- UINTN LeftColumnOfHelp;\r
UINTN RightColumnOfHelp;\r
UINTN TopRowOfHelp;\r
UINTN BottomRowOfHelp;\r
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
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
} else if (Statement->OpCode->OpCode == EFI_IFR_TIME_OP) {\r
TimeOp = (EFI_IFR_TIME *) Statement->OpCode;\r
HexDisplay = (TimeOp->Flags & EFI_IFR_DISPLAY_UINT_HEX) == EFI_IFR_DISPLAY_UINT_HEX;\r
- } \r
+ }\r
switch (Statement->OpCode->OpCode) {\r
case EFI_IFR_ORDERED_LIST_OP:\r
case EFI_IFR_ONE_OF_OP:\r
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
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
//\r
- if ((Statement->OpCode->OpCode == EFI_IFR_NUMERIC_OP) || \r
+ 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
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
default:\r
break;\r
- } \r
+ }\r
}\r
\r
/**\r
Update status bar.\r
\r
- This function updates the status bar on the bottom of menu screen. It just shows StatusBar. \r
+ This function updates the status bar on the bottom of menu screen. It just shows StatusBar.\r
Original logic in this function should be splitted out.\r
\r
- @param[in] MessageType The type of message to be shown. InputError or Configuration Changed. \r
+ @param[in] MessageType The type of message to be shown. InputError or Configuration Changed.\r
@param[in] State Show or Clear Message.\r
**/\r
VOID\r
\r
default:\r
break;\r
- } \r
+ }\r
}\r
\r
/**\r
- Create popup window. It will replace CreateDialog(). \r
+ Create popup window. It will replace CreateDialog().\r
\r
This function draws OEM/Vendor specific pop up windows.\r
\r
@param[out] Key User Input Key\r
@param ... String to be shown in Popup. The variable argument list is terminated by a NULL.\r
- \r
+\r
**/\r
VOID\r
EFIAPI\r
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
VA_START (Marker, Key);\r
while ((String = VA_ARG (Marker, CHAR16 *)) != NULL) {\r
LineNum ++;\r
- \r
+\r
if ((LibGetStringWidth (String) / 2) > LargestString) {\r
LargestString = (LibGetStringWidth (String) / 2);\r
}\r
- } \r
+ }\r
VA_END (Marker);\r
\r
if ((LargestString + 2) > DimensionsWidth) {\r
LargestString = DimensionsWidth - 2;\r
}\r
- \r
- CurrentAttribute = gST->ConOut->Mode->Attribute; \r
+\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
}\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
- Confirm how to handle the changed data. \r
- \r
+ Confirm how to handle the changed data.\r
+\r
@return Action BROWSER_ACTION_SUBMIT, BROWSER_ACTION_DISCARD or other values.\r
**/\r
UINTN\r
EFI_INPUT_KEY Key;\r
\r
gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);\r
- \r
+\r
YesResponse = gYesResponse[0];\r
NoResponse = gNoResponse[0];\r
- \r
+\r
//\r
// If NV flag is up, prompt user\r
//\r
((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) != (NoResponse | UPPER_LOWER_CASE_OFFSET)) &&\r
((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) != (YesResponse | UPPER_LOWER_CASE_OFFSET))\r
);\r
- \r
+\r
if (Key.ScanCode == SCAN_ESC) {\r
return BROWSER_ACTION_NONE;\r
} else if ((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) == (YesResponse | UPPER_LOWER_CASE_OFFSET)) {\r
/**\r
OEM specifies whether Setup exits Page by ESC key.\r
\r
- This function customized the behavior that whether Setup exits Page so that \r
+ This function customized the behavior that whether Setup exits Page so that\r
system able to boot when configuration is not changed.\r
\r
@retval TRUE Exits FrontPage\r
}\r
\r
/**\r
- Set Timeout value for a ceratain Form to get user response. \r
- \r
+ Set Timeout value for a ceratain Form to get user response.\r
+\r
This function allows to set timeout value on a ceratain form if necessary.\r
- If timeout is not zero, the form will exit if user has no response in timeout. \r
- \r
+ If timeout is not zero, the form will exit if user has no response in timeout.\r
+\r
@param[in] FormData Form Data to be shown in Page\r
\r
- @return 0 No timeout for this form. \r
+ @return 0 No timeout for this form.\r
@return > 0 Timeout value in 100 ns units.\r
**/\r
UINT64\r
}\r
\r
/**\r
- Prints a chracter to the default console, at\r
+ Prints a character to the default console, at\r
the supplied cursor position, using L"%c" format.\r
\r
@param Column The cursor position to print the string at. When it is -1, use current Position.\r
Clear Screen to the initial state.\r
**/\r
VOID\r
-EFIAPI \r
+EFIAPI\r
ClearDisplayPage (\r
VOID\r
)\r
)\r
{\r
HiiRemovePackages(mCDLStringPackHandle);\r
- \r
+\r
FreeLibStrings ();\r
\r
return EFI_SUCCESS;\r