/** @file\r
Entry and initialization module for the browser.\r
\r
-Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2007 - 2018, 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
-which accompanies this distribution. 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
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
//\r
// Search table for UiDisplayMenu()\r
//\r
-SCAN_CODE_TO_SCREEN_OPERATION gScanCodeToOperation[] = {\r
+SCAN_CODE_TO_SCREEN_OPERATION gScanCodeToOperation[] = {\r
{\r
SCAN_UP,\r
UiUp,\r
}\r
};\r
\r
-UINTN mScanCodeNumber = sizeof (gScanCodeToOperation) / sizeof (gScanCodeToOperation[0]);\r
+UINTN mScanCodeNumber = ARRAY_SIZE (gScanCodeToOperation);\r
\r
SCREEN_OPERATION_T0_CONTROL_FLAG gScreenOperationToControlFlag[] = {\r
{\r
{\r
UiPageDown,\r
CfUiPageDown\r
- }, \r
+ },\r
{\r
UiHotKey,\r
CfUiHotKey\r
};\r
\r
EFI_GUID gDisplayEngineGuid = {\r
- 0xE38C1029, 0xE38F, 0x45b9, {0x8F, 0x0D, 0xE2, 0xE6, 0x0B, 0xC9, 0xB2, 0x62}\r
+ 0xE38C1029, 0xE38F, 0x45b9, { 0x8F, 0x0D, 0xE2, 0xE6, 0x0B, 0xC9, 0xB2, 0x62 }\r
};\r
\r
-BOOLEAN gMisMatch;\r
-EFI_SCREEN_DESCRIPTOR gStatementDimensions;\r
-BOOLEAN mStatementLayoutIsChanged = TRUE;\r
-USER_INPUT *gUserInput;\r
-FORM_DISPLAY_ENGINE_FORM *gFormData;\r
-EFI_HII_HANDLE gHiiHandle;\r
-UINT16 gDirection;\r
-LIST_ENTRY gMenuOption;\r
-DISPLAY_HIGHLIGHT_MENU_INFO gHighligthMenuInfo = {0};\r
-BOOLEAN mIsFirstForm = TRUE;\r
-FORM_ENTRY_INFO gOldFormEntry = {0};\r
+BOOLEAN gMisMatch;\r
+EFI_SCREEN_DESCRIPTOR gStatementDimensions;\r
+BOOLEAN mStatementLayoutIsChanged = TRUE;\r
+USER_INPUT *gUserInput;\r
+FORM_DISPLAY_ENGINE_FORM *gFormData;\r
+EFI_HII_HANDLE gHiiHandle;\r
+UINT16 gDirection;\r
+LIST_ENTRY gMenuOption;\r
+DISPLAY_HIGHLIGHT_MENU_INFO gHighligthMenuInfo = { 0 };\r
+BOOLEAN mIsFirstForm = TRUE;\r
+FORM_ENTRY_INFO gOldFormEntry = { 0 };\r
\r
//\r
// Browser Global Strings\r
//\r
-CHAR16 *gReconnectConfirmChanges;\r
-CHAR16 *gReconnectFail;\r
-CHAR16 *gReconnectRequired;\r
-CHAR16 *gChangesOpt;\r
-CHAR16 *gFormNotFound;\r
-CHAR16 *gNoSubmitIf;\r
-CHAR16 *gBrowserError;\r
-CHAR16 *gSaveFailed;\r
-CHAR16 *gNoSubmitIfFailed;\r
-CHAR16 *gSaveProcess;\r
-CHAR16 *gSaveNoSubmitProcess;\r
-CHAR16 *gDiscardChange;\r
-CHAR16 *gJumpToFormSet;\r
-CHAR16 *gCheckError;\r
-CHAR16 *gPromptForData;\r
-CHAR16 *gPromptForPassword;\r
-CHAR16 *gPromptForNewPassword;\r
-CHAR16 *gConfirmPassword;\r
-CHAR16 *gConfirmError;\r
-CHAR16 *gPassowordInvalid;\r
-CHAR16 *gPressEnter;\r
-CHAR16 *gEmptyString;\r
-CHAR16 *gMiniString;\r
-CHAR16 *gOptionMismatch;\r
-CHAR16 *gFormSuppress;\r
-CHAR16 *gProtocolNotFound;\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
-CHAR16 gHelpBlockWidth;\r
-CHAR16 *mUnknownString;\r
+CHAR16 *gReconnectConfirmChanges;\r
+CHAR16 *gReconnectFail;\r
+CHAR16 *gReconnectRequired;\r
+CHAR16 *gChangesOpt;\r
+CHAR16 *gFormNotFound;\r
+CHAR16 *gNoSubmitIf;\r
+CHAR16 *gBrowserError;\r
+CHAR16 *gSaveFailed;\r
+CHAR16 *gNoSubmitIfFailed;\r
+CHAR16 *gSaveProcess;\r
+CHAR16 *gSaveNoSubmitProcess;\r
+CHAR16 *gDiscardChange;\r
+CHAR16 *gJumpToFormSet;\r
+CHAR16 *gCheckError;\r
+CHAR16 *gPromptForData;\r
+CHAR16 *gPromptForPassword;\r
+CHAR16 *gPromptForNewPassword;\r
+CHAR16 *gConfirmPassword;\r
+CHAR16 *gConfirmError;\r
+CHAR16 *gPassowordInvalid;\r
+CHAR16 *gPressEnter;\r
+CHAR16 *gEmptyString;\r
+CHAR16 *gMiniString;\r
+CHAR16 *gOptionMismatch;\r
+CHAR16 *gFormSuppress;\r
+CHAR16 *gProtocolNotFound;\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 *gConfirmOptOk;\r
+CHAR16 *gConfirmOptCancel;\r
+CHAR16 *gYesOption;\r
+CHAR16 *gNoOption;\r
+CHAR16 *gOkOption;\r
+CHAR16 *gCancelOption;\r
+CHAR16 *gErrorPopup;\r
+CHAR16 *gWarningPopup;\r
+CHAR16 *gInfoPopup;\r
+CHAR16 *gConfirmMsgConnect;\r
+CHAR16 *gConfirmMsgEnd;\r
+CHAR16 *gPasswordUnsupported;\r
+CHAR16 gModalSkipColumn;\r
+CHAR16 gPromptBlockWidth;\r
+CHAR16 gOptionBlockWidth;\r
+CHAR16 gHelpBlockWidth;\r
+CHAR16 *mUnknownString;\r
\r
FORM_DISPLAY_DRIVER_PRIVATE_DATA mPrivateData = {\r
FORM_DISPLAY_DRIVER_SIGNATURE,\r
FormDisplay,\r
DriverClearDisplayPage,\r
ConfirmDataChange\r
+ },\r
+ {\r
+ EFI_HII_POPUP_PROTOCOL_REVISION,\r
+ CreatePopup\r
}\r
};\r
\r
-\r
/**\r
Get the string based on the StringId and HII Package List Handle.\r
\r
**/\r
CHAR16 *\r
GetToken (\r
- IN EFI_STRING_ID Token,\r
- IN EFI_HII_HANDLE HiiHandle\r
+ IN EFI_STRING_ID Token,\r
+ IN EFI_HII_HANDLE HiiHandle\r
)\r
{\r
EFI_STRING String;\r
ASSERT (String != NULL);\r
}\r
\r
- return (CHAR16 *) String;\r
+ return (CHAR16 *)String;\r
}\r
\r
-\r
/**\r
Initialize the HII String Token to the correct values.\r
\r
)\r
{\r
gReconnectConfirmChanges = GetToken (STRING_TOKEN (RECONNECT_CONFIRM_CHANGES), gHiiHandle);\r
- mUnknownString = GetToken (STRING_TOKEN (UNKNOWN_STRING), gHiiHandle);\r
- gSaveFailed = GetToken (STRING_TOKEN (SAVE_FAILED), gHiiHandle);\r
- gNoSubmitIfFailed = GetToken (STRING_TOKEN (NO_SUBMIT_IF_CHECK_FAILED), gHiiHandle);\r
- gReconnectFail = GetToken (STRING_TOKEN (RECONNECT_FAILED), gHiiHandle);\r
- gReconnectRequired = GetToken (STRING_TOKEN (RECONNECT_REQUIRED), gHiiHandle);\r
- gChangesOpt = GetToken (STRING_TOKEN (RECONNECT_CHANGES_OPTIONS), gHiiHandle);\r
- gSaveProcess = GetToken (STRING_TOKEN (DISCARD_OR_JUMP), gHiiHandle);\r
- gSaveNoSubmitProcess = GetToken (STRING_TOKEN (DISCARD_OR_CHECK), gHiiHandle);\r
- gDiscardChange = GetToken (STRING_TOKEN (DISCARD_OR_JUMP_DISCARD), gHiiHandle);\r
- gJumpToFormSet = GetToken (STRING_TOKEN (DISCARD_OR_JUMP_JUMP), gHiiHandle);\r
- gCheckError = GetToken (STRING_TOKEN (DISCARD_OR_CHECK_CHECK), gHiiHandle);\r
- gPromptForData = GetToken (STRING_TOKEN (PROMPT_FOR_DATA), gHiiHandle);\r
- gPromptForPassword = GetToken (STRING_TOKEN (PROMPT_FOR_PASSWORD), gHiiHandle);\r
- gPromptForNewPassword = GetToken (STRING_TOKEN (PROMPT_FOR_NEW_PASSWORD), gHiiHandle);\r
- gConfirmPassword = GetToken (STRING_TOKEN (CONFIRM_PASSWORD), gHiiHandle);\r
- gConfirmError = GetToken (STRING_TOKEN (CONFIRM_ERROR), gHiiHandle);\r
- gPassowordInvalid = GetToken (STRING_TOKEN (PASSWORD_INVALID), gHiiHandle);\r
- gPressEnter = GetToken (STRING_TOKEN (PRESS_ENTER), gHiiHandle);\r
- gEmptyString = GetToken (STRING_TOKEN (EMPTY_STRING), gHiiHandle);\r
- gMiniString = GetToken (STRING_TOKEN (MINI_STRING), gHiiHandle);\r
- gOptionMismatch = GetToken (STRING_TOKEN (OPTION_MISMATCH), gHiiHandle);\r
- gFormSuppress = GetToken (STRING_TOKEN (FORM_SUPPRESSED), gHiiHandle);\r
- gProtocolNotFound = GetToken (STRING_TOKEN (PROTOCOL_NOT_FOUND), gHiiHandle);\r
- gFormNotFound = GetToken (STRING_TOKEN (STATUS_BROWSER_FORM_NOT_FOUND), gHiiHandle);\r
- gNoSubmitIf = GetToken (STRING_TOKEN (STATUS_BROWSER_NO_SUBMIT_IF), gHiiHandle);\r
- gBrowserError = 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
+ mUnknownString = GetToken (STRING_TOKEN (UNKNOWN_STRING), gHiiHandle);\r
+ gSaveFailed = GetToken (STRING_TOKEN (SAVE_FAILED), gHiiHandle);\r
+ gNoSubmitIfFailed = GetToken (STRING_TOKEN (NO_SUBMIT_IF_CHECK_FAILED), gHiiHandle);\r
+ gReconnectFail = GetToken (STRING_TOKEN (RECONNECT_FAILED), gHiiHandle);\r
+ gReconnectRequired = GetToken (STRING_TOKEN (RECONNECT_REQUIRED), gHiiHandle);\r
+ gChangesOpt = GetToken (STRING_TOKEN (RECONNECT_CHANGES_OPTIONS), gHiiHandle);\r
+ gSaveProcess = GetToken (STRING_TOKEN (DISCARD_OR_JUMP), gHiiHandle);\r
+ gSaveNoSubmitProcess = GetToken (STRING_TOKEN (DISCARD_OR_CHECK), gHiiHandle);\r
+ gDiscardChange = GetToken (STRING_TOKEN (DISCARD_OR_JUMP_DISCARD), gHiiHandle);\r
+ gJumpToFormSet = GetToken (STRING_TOKEN (DISCARD_OR_JUMP_JUMP), gHiiHandle);\r
+ gCheckError = GetToken (STRING_TOKEN (DISCARD_OR_CHECK_CHECK), gHiiHandle);\r
+ gPromptForData = GetToken (STRING_TOKEN (PROMPT_FOR_DATA), gHiiHandle);\r
+ gPromptForPassword = GetToken (STRING_TOKEN (PROMPT_FOR_PASSWORD), gHiiHandle);\r
+ gPromptForNewPassword = GetToken (STRING_TOKEN (PROMPT_FOR_NEW_PASSWORD), gHiiHandle);\r
+ gConfirmPassword = GetToken (STRING_TOKEN (CONFIRM_PASSWORD), gHiiHandle);\r
+ gConfirmError = GetToken (STRING_TOKEN (CONFIRM_ERROR), gHiiHandle);\r
+ gPassowordInvalid = GetToken (STRING_TOKEN (PASSWORD_INVALID), gHiiHandle);\r
+ gPressEnter = GetToken (STRING_TOKEN (PRESS_ENTER), gHiiHandle);\r
+ gEmptyString = GetToken (STRING_TOKEN (EMPTY_STRING), gHiiHandle);\r
+ gMiniString = GetToken (STRING_TOKEN (MINI_STRING), gHiiHandle);\r
+ gOptionMismatch = GetToken (STRING_TOKEN (OPTION_MISMATCH), gHiiHandle);\r
+ gFormSuppress = GetToken (STRING_TOKEN (FORM_SUPPRESSED), gHiiHandle);\r
+ gProtocolNotFound = GetToken (STRING_TOKEN (PROTOCOL_NOT_FOUND), gHiiHandle);\r
+ gFormNotFound = GetToken (STRING_TOKEN (STATUS_BROWSER_FORM_NOT_FOUND), gHiiHandle);\r
+ gNoSubmitIf = GetToken (STRING_TOKEN (STATUS_BROWSER_NO_SUBMIT_IF), gHiiHandle);\r
+ gBrowserError = 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
+ gConfirmOptOk = GetToken (STRING_TOKEN (CONFIRM_OPTION_OK), gHiiHandle);\r
+ gConfirmOptCancel = GetToken (STRING_TOKEN (CONFIRM_OPTION_CANCEL), gHiiHandle);\r
+ gYesOption = GetToken (STRING_TOKEN (YES_SELECTABLE_OPTION), gHiiHandle);\r
+ gNoOption = GetToken (STRING_TOKEN (NO_SELECTABLE_OPTION), gHiiHandle);\r
+ gOkOption = GetToken (STRING_TOKEN (OK_SELECTABLE_OPTION), gHiiHandle);\r
+ gCancelOption = GetToken (STRING_TOKEN (CANCEL_SELECTABLE_OPTION), gHiiHandle);\r
+ gErrorPopup = GetToken (STRING_TOKEN (ERROR_POPUP_STRING), gHiiHandle);\r
+ gWarningPopup = GetToken (STRING_TOKEN (WARNING_POPUP_STRING), gHiiHandle);\r
+ gInfoPopup = GetToken (STRING_TOKEN (INFO_POPUP_STRING), gHiiHandle);\r
+ gConfirmMsgConnect = GetToken (STRING_TOKEN (CONFIRM_OPTION_CONNECT), gHiiHandle);\r
+ gConfirmMsgEnd = GetToken (STRING_TOKEN (CONFIRM_OPTION_END), gHiiHandle);\r
+ gPasswordUnsupported = GetToken (STRING_TOKEN (PASSWORD_NOT_SUPPORTED), gHiiHandle);\r
}\r
\r
/**\r
FreePool (gConfirmOpt);\r
FreePool (gConfirmOptYes);\r
FreePool (gConfirmOptNo);\r
+ FreePool (gConfirmOptOk);\r
+ FreePool (gConfirmOptCancel);\r
+ FreePool (gYesOption);\r
+ FreePool (gNoOption);\r
+ FreePool (gOkOption);\r
+ FreePool (gCancelOption);\r
+ FreePool (gErrorPopup);\r
+ FreePool (gWarningPopup);\r
+ FreePool (gInfoPopup);\r
FreePool (gConfirmMsgConnect);\r
FreePool (gConfirmMsgEnd);\r
+ FreePool (gPasswordUnsupported);\r
}\r
\r
/**\r
**/\r
EFI_STRING_ID\r
GetPrompt (\r
- IN EFI_IFR_OP_HEADER *OpCode\r
+ IN EFI_IFR_OP_HEADER *OpCode\r
)\r
{\r
EFI_IFR_STATEMENT_HEADER *Header;\r
return 0;\r
}\r
\r
- Header = (EFI_IFR_STATEMENT_HEADER *) (OpCode + 1);\r
+ Header = (EFI_IFR_STATEMENT_HEADER *)(OpCode + 1);\r
\r
return Header->Prompt;\r
}\r
**/\r
UINT16\r
GetWidth (\r
- IN UI_MENU_OPTION *MenuOption,\r
- OUT UINT16 *AdjustWidth\r
+ IN UI_MENU_OPTION *MenuOption,\r
+ OUT UINT16 *AdjustWidth\r
)\r
{\r
- CHAR16 *String;\r
- UINTN Size;\r
- EFI_IFR_TEXT *TestOp;\r
- UINT16 ReturnWidth;\r
- FORM_DISPLAY_ENGINE_STATEMENT *Statement;\r
+ CHAR16 *String;\r
+ UINTN Size;\r
+ EFI_IFR_TEXT *TextOp;\r
+ UINT16 ReturnWidth;\r
+ FORM_DISPLAY_ENGINE_STATEMENT *Statement;\r
\r
Statement = MenuOption->ThisTag;\r
\r
if (AdjustWidth != NULL) {\r
*AdjustWidth = LEFT_SKIPPED_COLUMNS;\r
}\r
+\r
return (UINT16)(gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn - 2 * (gModalSkipColumn + LEFT_SKIPPED_COLUMNS));\r
}\r
\r
// See if the second text parameter is really NULL\r
//\r
if (Statement->OpCode->OpCode == EFI_IFR_TEXT_OP) {\r
- TestOp = (EFI_IFR_TEXT *) Statement->OpCode;\r
- if (TestOp->TextTwo != 0) {\r
- String = GetToken (TestOp->TextTwo, gFormData->HiiHandle);\r
+ TextOp = (EFI_IFR_TEXT *)Statement->OpCode;\r
+ if (TextOp->TextTwo != 0) {\r
+ String = GetToken (TextOp->TextTwo, gFormData->HiiHandle);\r
Size = StrLen (String);\r
FreePool (String);\r
}\r
// Allow a wide display if text op-code and no secondary text op-code\r
//\r
((Statement->OpCode->OpCode == EFI_IFR_TEXT_OP) && (Size == 0))\r
- ) {\r
- \r
+ )\r
+ {\r
//\r
// Return the space width.\r
- // \r
+ //\r
if (AdjustWidth != NULL) {\r
*AdjustWidth = 2;\r
}\r
+\r
//\r
// Keep consistent with current behavior.\r
//\r
- ReturnWidth = (UINT16) (gPromptBlockWidth + gOptionBlockWidth - 2);\r
+ ReturnWidth = (UINT16)(gPromptBlockWidth + gOptionBlockWidth - 2);\r
} else {\r
if (AdjustWidth != NULL) {\r
*AdjustWidth = 1;\r
}\r
\r
- ReturnWidth = (UINT16) (gPromptBlockWidth - 1);\r
+ ReturnWidth = (UINT16)(gPromptBlockWidth - 1);\r
}\r
\r
//\r
@param Index Where in InputString to start the copy process\r
@param OutputString Buffer to copy the string into\r
\r
- @return Returns the number of CHAR16 characters that were copied into the OutputString \r
+ @return Returns the number of CHAR16 characters that were copied into the OutputString\r
buffer, include extra glyph info and '\0' info.\r
\r
**/\r
UINT16\r
GetLineByWidth (\r
- IN CHAR16 *InputString,\r
- IN UINT16 LineWidth,\r
- IN OUT UINT16 *GlyphWidth,\r
- IN OUT UINTN *Index,\r
- OUT CHAR16 **OutputString\r
+ IN CHAR16 *InputString,\r
+ IN UINT16 LineWidth,\r
+ IN OUT UINT16 *GlyphWidth,\r
+ IN OUT UINTN *Index,\r
+ OUT CHAR16 **OutputString\r
)\r
{\r
- UINT16 StrOffset;\r
- UINT16 GlyphOffset;\r
- UINT16 OriginalGlyphWidth;\r
- BOOLEAN ReturnFlag;\r
- UINT16 LastSpaceOffset;\r
- UINT16 LastGlyphWidth;\r
-\r
- if (InputString == NULL || Index == NULL || OutputString == NULL) {\r
+ UINT16 StrOffset;\r
+ UINT16 GlyphOffset;\r
+ UINT16 OriginalGlyphWidth;\r
+ BOOLEAN ReturnFlag;\r
+ UINT16 LastSpaceOffset;\r
+ UINT16 LastGlyphWidth;\r
+\r
+ if ((InputString == NULL) || (Index == NULL) || (OutputString == NULL)) {\r
return 0;\r
}\r
\r
- if (LineWidth == 0 || *GlyphWidth == 0) {\r
+ if ((LineWidth == 0) || (*GlyphWidth == 0)) {\r
return 0;\r
}\r
\r
LastSpaceOffset = StrOffset;\r
LastGlyphWidth = *GlyphWidth;\r
}\r
+\r
break;\r
}\r
\r
if (ReturnFlag) {\r
break;\r
}\r
- } \r
+ }\r
\r
//\r
// Rewind the string from the maximum size until we see a space to break the line\r
//\r
// The CHAR_NULL has process last time, this time just return 0 to stand for the end.\r
//\r
- if (StrOffset == 0 && (InputString[*Index + StrOffset] == CHAR_NULL)) {\r
+ if ((StrOffset == 0) && (InputString[*Index + StrOffset] == CHAR_NULL)) {\r
return 0;\r
}\r
\r
//\r
// Need extra glyph info and '\0' info, so +2.\r
//\r
- *OutputString = AllocateZeroPool (((UINTN) (StrOffset + 2) * sizeof(CHAR16)));\r
+ *OutputString = AllocateZeroPool ((StrOffset + 2) * sizeof (CHAR16));\r
if (*OutputString == NULL) {\r
return 0;\r
}\r
//\r
if (OriginalGlyphWidth == 1) {\r
*(*OutputString) = NARROW_CHAR;\r
- } else {\r
+ } else {\r
*(*OutputString) = WIDE_CHAR;\r
}\r
\r
- CopyMem ((*OutputString) + 1, &InputString[*Index], StrOffset * sizeof(CHAR16));\r
+ CopyMem ((*OutputString) + 1, &InputString[*Index], StrOffset * sizeof (CHAR16));\r
\r
if (InputString[*Index + StrOffset] == CHAR_SPACE) {\r
//\r
// Skip the space info at the begin of next line.\r
- // \r
- *Index = (UINT16) (*Index + StrOffset + 1);\r
+ //\r
+ *Index = (UINT16)(*Index + StrOffset + 1);\r
} else if (InputString[*Index + StrOffset] == CHAR_LINEFEED) {\r
//\r
// Skip the /n or /n/r info.\r
//\r
if (InputString[*Index + StrOffset + 1] == CHAR_CARRIAGE_RETURN) {\r
- *Index = (UINT16) (*Index + StrOffset + 2);\r
+ *Index = (UINT16)(*Index + StrOffset + 2);\r
} else {\r
- *Index = (UINT16) (*Index + StrOffset + 1);\r
+ *Index = (UINT16)(*Index + StrOffset + 1);\r
}\r
} else if (InputString[*Index + StrOffset] == CHAR_CARRIAGE_RETURN) {\r
//\r
// Skip the /r or /r/n info.\r
- // \r
+ //\r
if (InputString[*Index + StrOffset + 1] == CHAR_LINEFEED) {\r
- *Index = (UINT16) (*Index + StrOffset + 2);\r
+ *Index = (UINT16)(*Index + StrOffset + 2);\r
} else {\r
- *Index = (UINT16) (*Index + StrOffset + 1);\r
+ *Index = (UINT16)(*Index + StrOffset + 1);\r
}\r
} else {\r
- *Index = (UINT16) (*Index + StrOffset);\r
+ *Index = (UINT16)(*Index + StrOffset);\r
}\r
\r
//\r
**/\r
VOID\r
UiAddMenuOption (\r
- IN FORM_DISPLAY_ENGINE_STATEMENT *Statement,\r
- IN UINT16 *MenuItemCount,\r
- IN BOOLEAN NestIn\r
+ IN FORM_DISPLAY_ENGINE_STATEMENT *Statement,\r
+ IN UINT16 *MenuItemCount,\r
+ IN BOOLEAN NestIn\r
)\r
{\r
- UI_MENU_OPTION *MenuOption;\r
- UINTN Index;\r
- UINTN Count;\r
- UINT16 NumberOfLines;\r
- UINT16 GlyphWidth;\r
- UINT16 Width;\r
- UINTN ArrayEntry;\r
- CHAR16 *OutputString;\r
- EFI_STRING_ID PromptId;\r
+ UI_MENU_OPTION *MenuOption;\r
+ UINTN Index;\r
+ UINTN Count;\r
+ UINT16 NumberOfLines;\r
+ UINT16 GlyphWidth;\r
+ UINT16 Width;\r
+ UINTN ArrayEntry;\r
+ CHAR16 *OutputString;\r
+ EFI_STRING_ID PromptId;\r
\r
NumberOfLines = 1;\r
ArrayEntry = 0;\r
PromptId = GetPrompt (Statement->OpCode);\r
ASSERT (PromptId != 0);\r
\r
- if (Statement->OpCode->OpCode == EFI_IFR_DATE_OP || Statement->OpCode->OpCode == EFI_IFR_TIME_OP) {\r
+ if ((Statement->OpCode->OpCode == EFI_IFR_DATE_OP) || (Statement->OpCode->OpCode == EFI_IFR_TIME_OP)) {\r
Count = 3;\r
}\r
\r
MenuOption = AllocateZeroPool (sizeof (UI_MENU_OPTION));\r
ASSERT (MenuOption);\r
\r
- MenuOption->Signature = UI_MENU_OPTION_SIGNATURE;\r
- MenuOption->Description = GetToken (PromptId, gFormData->HiiHandle);\r
- MenuOption->Handle = gFormData->HiiHandle;\r
- MenuOption->ThisTag = Statement;\r
+ MenuOption->Signature = UI_MENU_OPTION_SIGNATURE;\r
+ MenuOption->Description = GetToken (PromptId, gFormData->HiiHandle);\r
+ MenuOption->Handle = gFormData->HiiHandle;\r
+ MenuOption->ThisTag = Statement;\r
MenuOption->NestInStatement = NestIn;\r
- MenuOption->EntryNumber = *MenuItemCount;\r
+ MenuOption->EntryNumber = *MenuItemCount;\r
\r
MenuOption->Sequence = Index;\r
\r
MenuOption->GrayOut = FALSE;\r
}\r
\r
- if ((Statement->Attribute & HII_DISPLAY_LOCK) != 0 || (gFormData->Attribute & HII_DISPLAY_LOCK) != 0) {\r
+ if (((Statement->Attribute & HII_DISPLAY_LOCK) != 0) || ((gFormData->Attribute & HII_DISPLAY_LOCK) != 0)) {\r
MenuOption->GrayOut = TRUE;\r
}\r
\r
//\r
// If the form or the question has the lock attribute, deal same as grayout.\r
//\r
- if ((gFormData->Attribute & HII_DISPLAY_LOCK) != 0 || (Statement->Attribute & HII_DISPLAY_LOCK) != 0) {\r
+ if (((gFormData->Attribute & HII_DISPLAY_LOCK) != 0) || ((Statement->Attribute & HII_DISPLAY_LOCK) != 0)) {\r
MenuOption->GrayOut = TRUE;\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_NUMERIC_OP:\r
- case EFI_IFR_TIME_OP:\r
- case EFI_IFR_DATE_OP:\r
- case EFI_IFR_CHECKBOX_OP:\r
- case EFI_IFR_PASSWORD_OP:\r
- case EFI_IFR_STRING_OP:\r
- //\r
- // User could change the value of these items\r
- //\r
- MenuOption->IsQuestion = TRUE;\r
- break;\r
- case EFI_IFR_TEXT_OP:\r
- if (FeaturePcdGet (PcdBrowserGrayOutTextStatement)) {\r
+ case EFI_IFR_ORDERED_LIST_OP:\r
+ case EFI_IFR_ONE_OF_OP:\r
+ case EFI_IFR_NUMERIC_OP:\r
+ case EFI_IFR_TIME_OP:\r
+ case EFI_IFR_DATE_OP:\r
+ case EFI_IFR_CHECKBOX_OP:\r
+ case EFI_IFR_PASSWORD_OP:\r
+ case EFI_IFR_STRING_OP:\r
//\r
- // Initializing GrayOut option as TRUE for Text setup options \r
- // so that those options will be Gray in colour and un selectable.\r
+ // User could change the value of these items\r
//\r
- MenuOption->GrayOut = TRUE;\r
- }\r
- break;\r
- default:\r
- MenuOption->IsQuestion = FALSE;\r
- break;\r
+ MenuOption->IsQuestion = TRUE;\r
+ break;\r
+ case EFI_IFR_TEXT_OP:\r
+ if (FeaturePcdGet (PcdBrowserGrayOutTextStatement)) {\r
+ //\r
+ // Initializing GrayOut option as TRUE for Text setup options\r
+ // so that those options will be Gray in colour and un selectable.\r
+ //\r
+ MenuOption->GrayOut = TRUE;\r
+ }\r
+\r
+ break;\r
+ default:\r
+ MenuOption->IsQuestion = FALSE;\r
+ break;\r
}\r
\r
if ((Statement->Attribute & HII_DISPLAY_READONLY) != 0) {\r
}\r
}\r
\r
- if (Index == 0 && \r
- (Statement->OpCode->OpCode != EFI_IFR_DATE_OP) && \r
- (Statement->OpCode->OpCode != EFI_IFR_TIME_OP)) {\r
- Width = GetWidth (MenuOption, NULL);\r
- for (; GetLineByWidth (MenuOption->Description, Width, &GlyphWidth,&ArrayEntry, &OutputString) != 0x0000;) {\r
+ if ((Index == 0) &&\r
+ (Statement->OpCode->OpCode != EFI_IFR_DATE_OP) &&\r
+ (Statement->OpCode->OpCode != EFI_IFR_TIME_OP))\r
+ {\r
+ Width = GetWidth (MenuOption, NULL);\r
+ for ( ; GetLineByWidth (MenuOption->Description, Width, &GlyphWidth, &ArrayEntry, &OutputString) != 0x0000;) {\r
//\r
// If there is more string to process print on the next row and increment the Skip value\r
//\r
if (StrLen (&MenuOption->Description[ArrayEntry]) != 0) {\r
NumberOfLines++;\r
}\r
+\r
FreePool (OutputString);\r
}\r
} else {\r
// Add three MenuOptions for Date/Time\r
// Data format : [01/02/2004] [11:22:33]\r
// Line number : 0 0 1 0 0 1\r
- // \r
+ //\r
NumberOfLines = 0;\r
}\r
\r
VOID\r
)\r
{\r
- UINT16 MenuItemCount;\r
- LIST_ENTRY *Link;\r
- LIST_ENTRY *NestLink;\r
- FORM_DISPLAY_ENGINE_STATEMENT *Statement;\r
- FORM_DISPLAY_ENGINE_STATEMENT *NestStatement;\r
+ UINT16 MenuItemCount;\r
+ LIST_ENTRY *Link;\r
+ LIST_ENTRY *NestLink;\r
+ FORM_DISPLAY_ENGINE_STATEMENT *Statement;\r
+ FORM_DISPLAY_ENGINE_STATEMENT *NestStatement;\r
\r
MenuItemCount = 0;\r
InitializeListHead (&gMenuOption);\r
Link = GetFirstNode (&gFormData->StatementListHead);\r
while (!IsNull (&gFormData->StatementListHead, Link)) {\r
Statement = FORM_DISPLAY_ENGINE_STATEMENT_FROM_LINK (Link);\r
- Link = GetNextNode (&gFormData->StatementListHead, Link);\r
+ Link = GetNextNode (&gFormData->StatementListHead, Link);\r
\r
//\r
// Skip the opcode not recognized by Display core.\r
NestLink = GetFirstNode (&Statement->NestStatementList);\r
while (!IsNull (&Statement->NestStatementList, NestLink)) {\r
NestStatement = FORM_DISPLAY_ENGINE_STATEMENT_FROM_LINK (NestLink);\r
- NestLink = GetNextNode (&Statement->NestStatementList, NestLink);\r
+ NestLink = GetNextNode (&Statement->NestStatementList, NestLink);\r
\r
//\r
// Skip the opcode not recognized by Display core.\r
**/\r
UINTN\r
GetStringWidth (\r
- IN CHAR16 *String\r
+ IN CHAR16 *String\r
)\r
{\r
- UINTN Index;\r
- UINTN Count;\r
- UINTN IncrementValue;\r
+ UINTN Index;\r
+ UINTN Count;\r
+ UINTN IncrementValue;\r
\r
ASSERT (String != NULL);\r
if (String == NULL) {\r
return 0;\r
}\r
\r
- Index = 0;\r
- Count = 0;\r
- IncrementValue = 1;\r
+ Index = 0;\r
+ Count = 0;\r
+ IncrementValue = 1;\r
\r
do {\r
//\r
// Advance to the null-terminator or to the first width directive\r
//\r
- for (;\r
- (String[Index] != NARROW_CHAR) && (String[Index] != WIDE_CHAR) && (String[Index] != 0);\r
- Index++, Count = Count + IncrementValue\r
- )\r
- ;\r
+ for ( ;\r
+ (String[Index] != NARROW_CHAR) && (String[Index] != WIDE_CHAR) && (String[Index] != 0);\r
+ Index++, Count = Count + IncrementValue\r
+ )\r
+ {\r
+ }\r
\r
//\r
// We hit the null-terminator, we now have a count\r
if (String[Index] == 0) {\r
break;\r
}\r
+\r
//\r
// We encountered a narrow directive - strip it from the size calculation since it doesn't get printed\r
// and also set the flag that determines what we increment by.(if narrow, increment by 1, if wide increment by 2)\r
**/\r
VOID\r
UpdateSkipInfoForMenu (\r
- IN UI_MENU_OPTION *MenuOption,\r
- IN CHAR16 *OptionString\r
+ IN UI_MENU_OPTION *MenuOption,\r
+ IN CHAR16 *OptionString\r
)\r
{\r
UINTN Index;\r
CHAR16 *OutputString;\r
UINT16 GlyphWidth;\r
\r
- Width = (UINT16) gOptionBlockWidth;\r
- GlyphWidth = 1;\r
- Row = 1;\r
+ Width = (UINT16)gOptionBlockWidth - 1;\r
+ GlyphWidth = 1;\r
+ Row = 1;\r
\r
for (Index = 0; GetLineByWidth (OptionString, Width, &GlyphWidth, &Index, &OutputString) != 0x0000;) {\r
if (StrLen (&OptionString[Index]) != 0) {\r
FreePool (OutputString);\r
}\r
\r
- if ((Row > MenuOption->Skip) && \r
- (MenuOption->ThisTag->OpCode->OpCode != EFI_IFR_DATE_OP) && \r
- (MenuOption->ThisTag->OpCode->OpCode != EFI_IFR_TIME_OP)) {\r
+ if ((Row > MenuOption->Skip) &&\r
+ (MenuOption->ThisTag->OpCode->OpCode != EFI_IFR_DATE_OP) &&\r
+ (MenuOption->ThisTag->OpCode->OpCode != EFI_IFR_TIME_OP))\r
+ {\r
MenuOption->Skip = Row;\r
}\r
}\r
**/\r
VOID\r
UpdateOptionSkipLines (\r
- IN UI_MENU_OPTION *MenuOption\r
+ IN UI_MENU_OPTION *MenuOption\r
)\r
{\r
CHAR16 *OptionString;\r
\r
- OptionString = NULL;\r
+ OptionString = NULL;\r
\r
ProcessOptions (MenuOption, FALSE, &OptionString, TRUE);\r
if (OptionString != NULL) {\r
FreePool (OptionString);\r
}\r
\r
- if ((MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_TEXT_OP) && (((EFI_IFR_TEXT*)MenuOption->ThisTag->OpCode)->TextTwo != 0)) {\r
- OptionString = GetToken (((EFI_IFR_TEXT*)MenuOption->ThisTag->OpCode)->TextTwo, gFormData->HiiHandle);\r
+ if ((MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_TEXT_OP) && (((EFI_IFR_TEXT *)MenuOption->ThisTag->OpCode)->TextTwo != 0)) {\r
+ OptionString = GetToken (((EFI_IFR_TEXT *)MenuOption->ThisTag->OpCode)->TextTwo, gFormData->HiiHandle);\r
\r
if (OptionString != NULL) {\r
UpdateSkipInfoForMenu (MenuOption, OptionString);\r
**/\r
BOOLEAN\r
PrintableMenu (\r
- UI_MENU_OPTION *MenuOption\r
+ UI_MENU_OPTION *MenuOption\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_STRING OptionString;\r
+ EFI_STATUS Status;\r
+ EFI_STRING OptionString;\r
\r
OptionString = NULL;\r
\r
if (EFI_ERROR (Status)) {\r
return FALSE;\r
}\r
- if (OptionString != NULL && OptionString[0] != '\0') {\r
+\r
+ if ((OptionString != NULL) && (OptionString[0] != '\0')) {\r
FreePool (OptionString);\r
return TRUE;\r
}\r
\r
- if ((MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_TEXT_OP) && (((EFI_IFR_TEXT*)MenuOption->ThisTag->OpCode)->TextTwo != 0)) {\r
- OptionString = GetToken (((EFI_IFR_TEXT*)MenuOption->ThisTag->OpCode)->TextTwo, gFormData->HiiHandle);\r
+ if ((MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_TEXT_OP) && (((EFI_IFR_TEXT *)MenuOption->ThisTag->OpCode)->TextTwo != 0)) {\r
+ OptionString = GetToken (((EFI_IFR_TEXT *)MenuOption->ThisTag->OpCode)->TextTwo, gFormData->HiiHandle);\r
ASSERT (OptionString != NULL);\r
- if (OptionString[0] != '\0'){\r
+ if (OptionString[0] != '\0') {\r
FreePool (OptionString);\r
return TRUE;\r
}\r
**/\r
BOOLEAN\r
IsSelectable (\r
- UI_MENU_OPTION *MenuOption\r
+ UI_MENU_OPTION *MenuOption\r
)\r
{\r
if ((MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_SUBTITLE_OP) ||\r
- MenuOption->GrayOut || MenuOption->ReadOnly || !PrintableMenu (MenuOption)) {\r
+ MenuOption->GrayOut || MenuOption->ReadOnly || !PrintableMenu (MenuOption))\r
+ {\r
return FALSE;\r
} else {\r
return TRUE;\r
@return The row distance from current MenuOption to next selectable MenuOption.\r
\r
@retval -1 Reach the begin of the menu, still can't find the selectable menu.\r
- @retval Value Find the selectable menu, maybe the truly selectable, maybe the \r
- first menu showing beyond current form or last menu showing in \r
+ @retval Value Find the selectable menu, maybe the truly selectable, maybe the\r
+ first menu showing beyond current form or last menu showing in\r
current form.\r
The value is the line number between the new selected menu and the\r
current select menu, not include the new selected menu.\r
**/\r
INTN\r
MoveToNextStatement (\r
- IN BOOLEAN GoUp,\r
- IN OUT LIST_ENTRY **CurrentPosition,\r
- IN UINTN GapToTop,\r
- IN BOOLEAN FindInForm\r
+ IN BOOLEAN GoUp,\r
+ IN OUT LIST_ENTRY **CurrentPosition,\r
+ IN UINTN GapToTop,\r
+ IN BOOLEAN FindInForm\r
)\r
{\r
- INTN Distance;\r
- LIST_ENTRY *Pos;\r
- UI_MENU_OPTION *NextMenuOption;\r
- UI_MENU_OPTION *PreMenuOption;\r
+ INTN Distance;\r
+ LIST_ENTRY *Pos;\r
+ UI_MENU_OPTION *NextMenuOption;\r
+ UI_MENU_OPTION *PreMenuOption;\r
\r
- Distance = 0;\r
- Pos = *CurrentPosition;\r
+ Distance = 0;\r
+ Pos = *CurrentPosition;\r
\r
if (Pos == &gMenuOption) {\r
return -1;\r
UpdateOptionSkipLines (NextMenuOption);\r
}\r
\r
- if (IsSelectable (NextMenuOption)) {\r
- break;\r
- }\r
-\r
//\r
- // In this case, still can't find the selectable menu,\r
+ // Check whether the menu is beyond current showing form,\r
// return the first one beyond the showing form.\r
//\r
- if ((UINTN) Distance + NextMenuOption->Skip > GapToTop) {\r
+ if ((UINTN)Distance + NextMenuOption->Skip > GapToTop) {\r
if (FindInForm) {\r
NextMenuOption = PreMenuOption;\r
}\r
+\r
+ break;\r
+ }\r
+\r
+ //\r
+ // return the selectable menu in the showing form.\r
+ //\r
+ if (IsSelectable (NextMenuOption)) {\r
break;\r
}\r
\r
break;\r
}\r
\r
- Pos = (GoUp ? Pos->BackLink : Pos->ForwardLink);\r
+ Pos = (GoUp ? Pos->BackLink : Pos->ForwardLink);\r
PreMenuOption = NextMenuOption;\r
}\r
\r
return Distance;\r
}\r
\r
-\r
/**\r
Process option string for date/time opcode.\r
\r
@param MenuOption Menu option point to date/time.\r
@param OptionString Option string input for process.\r
- @param AddOptCol Whether need to update MenuOption->OptCol. \r
+ @param AddOptCol Whether need to update MenuOption->OptCol.\r
\r
**/\r
-VOID \r
+VOID\r
ProcessStringForDateTime (\r
- UI_MENU_OPTION *MenuOption,\r
- CHAR16 *OptionString,\r
- BOOLEAN AddOptCol\r
+ UI_MENU_OPTION *MenuOption,\r
+ CHAR16 *OptionString,\r
+ BOOLEAN AddOptCol\r
)\r
{\r
- UINTN Index;\r
- UINTN Count;\r
- FORM_DISPLAY_ENGINE_STATEMENT *Statement;\r
- EFI_IFR_DATE *Date;\r
- EFI_IFR_TIME *Time;\r
+ UINTN Index;\r
+ UINTN Count;\r
+ FORM_DISPLAY_ENGINE_STATEMENT *Statement;\r
+ EFI_IFR_DATE *Date;\r
+ EFI_IFR_TIME *Time;\r
\r
ASSERT (MenuOption != NULL && OptionString != NULL);\r
- \r
+\r
Statement = MenuOption->ThisTag;\r
Date = NULL;\r
Time = NULL;\r
if (Statement->OpCode->OpCode == EFI_IFR_DATE_OP) {\r
- Date = (EFI_IFR_DATE *) Statement->OpCode;\r
+ Date = (EFI_IFR_DATE *)Statement->OpCode;\r
} else if (Statement->OpCode->OpCode == EFI_IFR_TIME_OP) {\r
- Time = (EFI_IFR_TIME *) Statement->OpCode;\r
+ Time = (EFI_IFR_TIME *)Statement->OpCode;\r
}\r
- \r
+\r
//\r
// If leading spaces on OptionString - remove the spaces\r
//\r
MenuOption->OptCol++;\r
}\r
}\r
- \r
+\r
for (Count = 0; OptionString[Index] != CHAR_NULL; Index++) {\r
OptionString[Count] = OptionString[Index];\r
Count++;\r
}\r
+\r
OptionString[Count] = CHAR_NULL;\r
- \r
+\r
//\r
// Enable to suppress field in the opcode base on the flag.\r
//\r
//\r
if ((Date->Flags & EFI_QF_DATE_MONTH_SUPPRESS) && (MenuOption->Sequence == 0)) {\r
//\r
- // At this point, only "<**:" in the optionstring. \r
+ // At this point, only "<**:" in the optionstring.\r
// Clean the day's ** field, after clean, the format is "< :"\r
//\r
SetUnicodeMem (&OptionString[1], 2, L' ');\r
} else if ((Date->Flags & EFI_QF_DATE_DAY_SUPPRESS) && (MenuOption->Sequence == 1)) {\r
//\r
- // At this point, only "**:" in the optionstring. \r
+ // At this point, only "**:" in the optionstring.\r
// Clean the month's "**" field, after clean, the format is " :"\r
- // \r
+ //\r
SetUnicodeMem (&OptionString[0], 2, L' ');\r
} else if ((Date->Flags & EFI_QF_DATE_YEAR_SUPPRESS) && (MenuOption->Sequence == 2)) {\r
//\r
- // At this point, only "****>" in the optionstring. \r
+ // At this point, only "****>" in the optionstring.\r
// Clean the year's "****" field, after clean, the format is " >"\r
- // \r
+ //\r
SetUnicodeMem (&OptionString[0], 4, L' ');\r
}\r
} else if (Statement->OpCode->OpCode == EFI_IFR_TIME_OP) {\r
//\r
if ((Time->Flags & QF_TIME_HOUR_SUPPRESS) && (MenuOption->Sequence == 0)) {\r
//\r
- // At this point, only "<**:" in the optionstring. \r
+ // At this point, only "<**:" in the optionstring.\r
// Clean the hour's ** field, after clean, the format is "< :"\r
//\r
SetUnicodeMem (&OptionString[1], 2, L' ');\r
} else if ((Time->Flags & QF_TIME_MINUTE_SUPPRESS) && (MenuOption->Sequence == 1)) {\r
//\r
- // At this point, only "**:" in the optionstring. \r
+ // At this point, only "**:" in the optionstring.\r
// Clean the minute's "**" field, after clean, the format is " :"\r
- // \r
+ //\r
SetUnicodeMem (&OptionString[0], 2, L' ');\r
} else if ((Time->Flags & QF_TIME_SECOND_SUPPRESS) && (MenuOption->Sequence == 2)) {\r
//\r
- // At this point, only "**>" in the optionstring. \r
+ // At this point, only "**>" in the optionstring.\r
// Clean the second's "**" field, after clean, the format is " >"\r
- // \r
+ //\r
SetUnicodeMem (&OptionString[0], 2, L' ');\r
}\r
}\r
}\r
\r
-\r
/**\r
Adjust Data and Time position accordingly.\r
Data format : [01/02/2004] [11:22:33]\r
**/\r
UINTN\r
AdjustDateAndTimePosition (\r
- IN BOOLEAN DirectionUp,\r
- IN OUT LIST_ENTRY **CurrentPosition\r
+ IN BOOLEAN DirectionUp,\r
+ IN OUT LIST_ENTRY **CurrentPosition\r
)\r
{\r
UINTN Count;\r
MenuOption = MENU_OPTION_FROM_LINK (NewPosition);\r
\r
if ((MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_DATE_OP) ||\r
- (MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_TIME_OP)) {\r
+ (MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_TIME_OP))\r
+ {\r
//\r
// Calculate the distance from current position to the last Date/Time MenuOption\r
//\r
\r
/**\r
Get step info from numeric opcode.\r
- \r
+\r
@param[in] OpCode The input numeric op code.\r
\r
@return step info for this opcode.\r
**/\r
UINT64\r
GetFieldFromNum (\r
- IN EFI_IFR_OP_HEADER *OpCode\r
+ IN EFI_IFR_OP_HEADER *OpCode\r
)\r
{\r
- EFI_IFR_NUMERIC *NumericOp;\r
- UINT64 Step;\r
+ EFI_IFR_NUMERIC *NumericOp;\r
+ UINT64 Step;\r
+\r
+ NumericOp = (EFI_IFR_NUMERIC *)OpCode;\r
\r
- NumericOp = (EFI_IFR_NUMERIC *) OpCode;\r
- \r
switch (NumericOp->Flags & EFI_IFR_NUMERIC_SIZE) {\r
- case EFI_IFR_NUMERIC_SIZE_1:\r
- Step = NumericOp->data.u8.Step;\r
- break;\r
- \r
- case EFI_IFR_NUMERIC_SIZE_2:\r
- Step = NumericOp->data.u16.Step;\r
- break;\r
- \r
- case EFI_IFR_NUMERIC_SIZE_4:\r
- Step = NumericOp->data.u32.Step;\r
- break;\r
- \r
- case EFI_IFR_NUMERIC_SIZE_8:\r
- Step = NumericOp->data.u64.Step;\r
- break;\r
- \r
- default:\r
- Step = 0;\r
- break;\r
+ case EFI_IFR_NUMERIC_SIZE_1:\r
+ Step = NumericOp->data.u8.Step;\r
+ break;\r
+\r
+ case EFI_IFR_NUMERIC_SIZE_2:\r
+ Step = NumericOp->data.u16.Step;\r
+ break;\r
+\r
+ case EFI_IFR_NUMERIC_SIZE_4:\r
+ Step = NumericOp->data.u32.Step;\r
+ break;\r
+\r
+ case EFI_IFR_NUMERIC_SIZE_8:\r
+ Step = NumericOp->data.u64.Step;\r
+ break;\r
+\r
+ default:\r
+ Step = 0;\r
+ break;\r
}\r
\r
return Step;\r
\r
/**\r
Find the registered HotKey based on KeyData.\r
- \r
+\r
@param[in] KeyData A pointer to a buffer that describes the keystroke\r
information for the hot key.\r
\r
**/\r
BROWSER_HOT_KEY *\r
GetHotKeyFromRegisterList (\r
- IN EFI_INPUT_KEY *KeyData\r
+ IN EFI_INPUT_KEY *KeyData\r
)\r
{\r
LIST_ENTRY *Link;\r
Link = GetFirstNode (&gFormData->HotKeyListHead);\r
while (!IsNull (&gFormData->HotKeyListHead, Link)) {\r
HotKey = BROWSER_HOT_KEY_FROM_LINK (Link);\r
- \r
+\r
if (HotKey->KeyData->ScanCode == KeyData->ScanCode) {\r
return HotKey;\r
}\r
\r
Link = GetNextNode (&gFormData->HotKeyListHead, Link);\r
}\r
- \r
+\r
return NULL;\r
}\r
\r
-\r
/**\r
Determine if the menu is the last menu that can be selected.\r
\r
**/\r
BOOLEAN\r
ValueIsScroll (\r
- IN BOOLEAN Direction,\r
- IN LIST_ENTRY *CurrentPos\r
+ IN BOOLEAN Direction,\r
+ IN LIST_ENTRY *CurrentPos\r
)\r
{\r
- LIST_ENTRY *Temp;\r
+ LIST_ENTRY *Temp;\r
\r
Temp = Direction ? CurrentPos->BackLink : CurrentPos->ForwardLink;\r
\r
**/\r
UI_EVENT_TYPE\r
UiWaitForEvent (\r
- IN EFI_EVENT Event\r
+ IN EFI_EVENT Event\r
)\r
{\r
- EFI_STATUS Status;\r
- UINTN Index;\r
- UINTN EventNum;\r
- UINT64 Timeout;\r
- EFI_EVENT TimerEvent;\r
- EFI_EVENT WaitList[3];\r
+ EFI_STATUS Status;\r
+ UINTN Index;\r
+ UINTN EventNum;\r
+ UINT64 Timeout;\r
+ EFI_EVENT TimerEvent;\r
+ EFI_EVENT WaitList[3];\r
UI_EVENT_TYPE EventType;\r
\r
TimerEvent = NULL;\r
- Timeout = FormExitTimeout(gFormData);\r
+ Timeout = FormExitTimeout (gFormData);\r
\r
if (Timeout != 0) {\r
Status = gBS->CreateEvent (EVT_TIMER, 0, NULL, NULL, &TimerEvent);\r
// Set the timer event\r
//\r
gBS->SetTimer (\r
- TimerEvent,\r
- TimerRelative,\r
- Timeout\r
- );\r
+ TimerEvent,\r
+ TimerRelative,\r
+ Timeout\r
+ );\r
}\r
- \r
+\r
WaitList[0] = Event;\r
EventNum = 1;\r
if (gFormData->FormRefreshEvent != NULL) {\r
WaitList[EventNum] = gFormData->FormRefreshEvent;\r
- EventNum ++;\r
- } \r
+ EventNum++;\r
+ }\r
\r
if (Timeout != 0) {\r
WaitList[EventNum] = TimerEvent;\r
- EventNum ++;\r
+ EventNum++;\r
}\r
\r
Status = gBS->WaitForEvent (EventNum, WaitList, &Index);\r
ASSERT_EFI_ERROR (Status);\r
\r
switch (Index) {\r
- case 0:\r
- EventType = UIEventKey;\r
- break;\r
+ case 0:\r
+ EventType = UIEventKey;\r
+ break;\r
\r
- case 1:\r
- if (gFormData->FormRefreshEvent != NULL) {\r
- EventType = UIEventDriver;\r
- } else {\r
- ASSERT (Timeout != 0 && EventNum == 2);\r
- EventType = UIEventTimeOut;\r
- }\r
- break;\r
+ case 1:\r
+ if (gFormData->FormRefreshEvent != NULL) {\r
+ EventType = UIEventDriver;\r
+ } else {\r
+ ASSERT (Timeout != 0 && EventNum == 2);\r
+ EventType = UIEventTimeOut;\r
+ }\r
+\r
+ break;\r
\r
- default:\r
- ASSERT (Index == 2 && EventNum == 3);\r
- EventType = UIEventTimeOut;\r
- break;\r
+ default:\r
+ ASSERT (Index == 2 && EventNum == 3);\r
+ EventType = UIEventTimeOut;\r
+ break;\r
}\r
\r
if (Timeout != 0) {\r
gBS->CloseEvent (TimerEvent);\r
}\r
- \r
+\r
return EventType;\r
}\r
\r
**/\r
EFI_QUESTION_ID\r
GetQuestionIdInfo (\r
- IN EFI_IFR_OP_HEADER *OpCode\r
+ IN EFI_IFR_OP_HEADER *OpCode\r
)\r
{\r
- EFI_IFR_QUESTION_HEADER *QuestionHeader;\r
+ EFI_IFR_QUESTION_HEADER *QuestionHeader;\r
\r
if (OpCode->Length < sizeof (EFI_IFR_OP_HEADER) + sizeof (EFI_IFR_QUESTION_HEADER)) {\r
return 0;\r
}\r
\r
- QuestionHeader = (EFI_IFR_QUESTION_HEADER *)((UINT8 *) OpCode + sizeof(EFI_IFR_OP_HEADER));\r
+ QuestionHeader = (EFI_IFR_QUESTION_HEADER *)((UINT8 *)OpCode + sizeof (EFI_IFR_OP_HEADER));\r
\r
return QuestionHeader->QuestionId;\r
}\r
\r
-\r
/**\r
Find the top of screen menu base on the current menu.\r
\r
**/\r
LIST_ENTRY *\r
FindTopOfScreenMenu (\r
- IN LIST_ENTRY *CurPos,\r
- IN UINTN Rows,\r
- OUT UINTN *SkipValue\r
+ IN LIST_ENTRY *CurPos,\r
+ IN UINTN Rows,\r
+ OUT UINTN *SkipValue\r
)\r
{\r
- LIST_ENTRY *Link;\r
- LIST_ENTRY *TopOfScreen;\r
- UI_MENU_OPTION *PreviousMenuOption;\r
+ LIST_ENTRY *Link;\r
+ LIST_ENTRY *TopOfScreen;\r
+ UI_MENU_OPTION *PreviousMenuOption;\r
\r
- Link = CurPos;\r
+ Link = CurPos;\r
PreviousMenuOption = NULL;\r
\r
while (Link->BackLink != &gMenuOption) {\r
- Link = Link->BackLink;\r
+ Link = Link->BackLink;\r
PreviousMenuOption = MENU_OPTION_FROM_LINK (Link);\r
if (PreviousMenuOption->Row == 0) {\r
UpdateOptionSkipLines (PreviousMenuOption);\r
}\r
+\r
if (Rows <= PreviousMenuOption->Skip) {\r
break;\r
}\r
+\r
Rows = Rows - PreviousMenuOption->Skip;\r
}\r
\r
if (Link->BackLink == &gMenuOption) {\r
TopOfScreen = gMenuOption.ForwardLink;\r
- if (PreviousMenuOption != NULL && Rows < PreviousMenuOption->Skip) {\r
+ if ((PreviousMenuOption != NULL) && (Rows < PreviousMenuOption->Skip)) {\r
*SkipValue = PreviousMenuOption->Skip - Rows;\r
} else {\r
*SkipValue = 0;\r
}\r
} else {\r
TopOfScreen = Link;\r
- *SkipValue = PreviousMenuOption->Skip - Rows;\r
+ *SkipValue = PreviousMenuOption->Skip - Rows;\r
}\r
\r
return TopOfScreen;\r
IN EFI_IFR_OP_HEADER *OpCode\r
)\r
{\r
- LIST_ENTRY *NewPos;\r
- UI_MENU_OPTION *MenuOption;\r
- UINTN Index;\r
+ LIST_ENTRY *NewPos;\r
+ UI_MENU_OPTION *MenuOption;\r
+ UINTN Index;\r
\r
NewPos = gMenuOption.ForwardLink;\r
Index = 0;\r
\r
- for (NewPos = gMenuOption.ForwardLink; NewPos != &gMenuOption; NewPos = NewPos->ForwardLink){\r
+ for (NewPos = gMenuOption.ForwardLink; NewPos != &gMenuOption; NewPos = NewPos->ForwardLink) {\r
MenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
\r
if (CompareMem (MenuOption->ThisTag->OpCode, OpCode, OpCode->Length) == 0) {\r
return Index;\r
}\r
\r
- Index ++;\r
+ Index++;\r
}\r
}\r
\r
@retval FALSE This is not the highlight statement.\r
\r
**/\r
-BOOLEAN \r
+BOOLEAN\r
IsSavedHighlightStatement (\r
IN FORM_DISPLAY_ENGINE_STATEMENT *HighLightedStatement\r
)\r
{\r
if ((gFormData->HiiHandle == gHighligthMenuInfo.HiiHandle) &&\r
- (gFormData->FormId == gHighligthMenuInfo.FormId)) {\r
+ (gFormData->FormId == gHighligthMenuInfo.FormId))\r
+ {\r
if (gHighligthMenuInfo.HLTQuestionId != 0) {\r
- return (BOOLEAN) (gHighligthMenuInfo.HLTQuestionId == GetQuestionIdInfo (HighLightedStatement->OpCode));\r
+ return (BOOLEAN)(gHighligthMenuInfo.HLTQuestionId == GetQuestionIdInfo (HighLightedStatement->OpCode));\r
} else {\r
if (CompareMem (gHighligthMenuInfo.HLTOpCode, HighLightedStatement->OpCode, gHighligthMenuInfo.HLTOpCode->Length) == 0) {\r
- if (gHighligthMenuInfo.HLTIndex == 0 || gHighligthMenuInfo.HLTIndex == GetIndexInfoForOpcode(HighLightedStatement->OpCode)) {\r
+ if ((gHighligthMenuInfo.HLTIndex == 0) || (gHighligthMenuInfo.HLTIndex == GetIndexInfoForOpcode (HighLightedStatement->OpCode))) {\r
return TRUE;\r
} else {\r
return FALSE;\r
**/\r
BOOLEAN\r
IsHighLightMenuOption (\r
- IN UI_MENU_OPTION *MenuOption\r
+ IN UI_MENU_OPTION *MenuOption\r
)\r
{\r
if (gHighligthMenuInfo.HLTQuestionId != 0) {\r
- if (GetQuestionIdInfo(MenuOption->ThisTag->OpCode) == gHighligthMenuInfo.HLTQuestionId) {\r
- return (BOOLEAN) (MenuOption->Sequence == gHighligthMenuInfo.HLTSequence);\r
+ if (GetQuestionIdInfo (MenuOption->ThisTag->OpCode) == gHighligthMenuInfo.HLTQuestionId) {\r
+ return (BOOLEAN)(MenuOption->Sequence == gHighligthMenuInfo.HLTSequence);\r
}\r
} else {\r
- if(CompareMem (gHighligthMenuInfo.HLTOpCode, MenuOption->ThisTag->OpCode, gHighligthMenuInfo.HLTOpCode->Length) == 0) {\r
- if (gHighligthMenuInfo.HLTIndex == 0 || gHighligthMenuInfo.HLTIndex == GetIndexInfoForOpcode(MenuOption->ThisTag->OpCode)) {\r
- return (BOOLEAN) (MenuOption->Sequence == gHighligthMenuInfo.HLTSequence);\r
+ if (CompareMem (gHighligthMenuInfo.HLTOpCode, MenuOption->ThisTag->OpCode, gHighligthMenuInfo.HLTOpCode->Length) == 0) {\r
+ if ((gHighligthMenuInfo.HLTIndex == 0) || (gHighligthMenuInfo.HLTIndex == GetIndexInfoForOpcode (MenuOption->ThisTag->OpCode))) {\r
+ return (BOOLEAN)(MenuOption->Sequence == gHighligthMenuInfo.HLTSequence);\r
} else {\r
return FALSE;\r
}\r
**/\r
LIST_ENTRY *\r
FindHighLightMenuOption (\r
- IN FORM_DISPLAY_ENGINE_STATEMENT *HighLightedStatement\r
- )\r
+ IN FORM_DISPLAY_ENGINE_STATEMENT *HighLightedStatement\r
+ )\r
{\r
- LIST_ENTRY *NewPos;\r
- UI_MENU_OPTION *MenuOption;\r
+ LIST_ENTRY *NewPos;\r
+ UI_MENU_OPTION *MenuOption;\r
\r
- NewPos = gMenuOption.ForwardLink;\r
+ NewPos = gMenuOption.ForwardLink;\r
MenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
\r
if (HighLightedStatement != NULL) {\r
while (MenuOption->ThisTag != HighLightedStatement) {\r
- NewPos = NewPos->ForwardLink;\r
+ NewPos = NewPos->ForwardLink;\r
if (NewPos == &gMenuOption) {\r
//\r
// Not Found it, break\r
//\r
break;\r
}\r
+\r
MenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
}\r
\r
// Must find the highlight statement.\r
//\r
ASSERT (NewPos != &gMenuOption);\r
-\r
} else {\r
while (!IsHighLightMenuOption (MenuOption)) {\r
- NewPos = NewPos->ForwardLink;\r
+ NewPos = NewPos->ForwardLink;\r
if (NewPos == &gMenuOption) {\r
//\r
// Not Found it, break\r
//\r
break;\r
}\r
+\r
MenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
}\r
\r
**/\r
BOOLEAN\r
IsTopOfScreeMenuOption (\r
- IN UI_MENU_OPTION *MenuOption\r
+ IN UI_MENU_OPTION *MenuOption\r
)\r
{\r
if (gHighligthMenuInfo.TOSQuestionId != 0) {\r
- return (BOOLEAN) (GetQuestionIdInfo(MenuOption->ThisTag->OpCode) == gHighligthMenuInfo.TOSQuestionId);\r
- } \r
+ return (BOOLEAN)(GetQuestionIdInfo (MenuOption->ThisTag->OpCode) == gHighligthMenuInfo.TOSQuestionId);\r
+ }\r
\r
- if(CompareMem (gHighligthMenuInfo.TOSOpCode, MenuOption->ThisTag->OpCode, gHighligthMenuInfo.TOSOpCode->Length) == 0) {\r
- if (gHighligthMenuInfo.TOSIndex == 0 || gHighligthMenuInfo.TOSIndex == GetIndexInfoForOpcode(MenuOption->ThisTag->OpCode)) {\r
+ if (CompareMem (gHighligthMenuInfo.TOSOpCode, MenuOption->ThisTag->OpCode, gHighligthMenuInfo.TOSOpCode->Length) == 0) {\r
+ if ((gHighligthMenuInfo.TOSIndex == 0) || (gHighligthMenuInfo.TOSIndex == GetIndexInfoForOpcode (MenuOption->ThisTag->OpCode))) {\r
return TRUE;\r
} else {\r
return FALSE;\r
}\r
\r
/**\r
- Find the Top of screen menu.\r
+ Calculate the distance between two menus and include the skip value of StartMenu.\r
\r
- If the input is NULL, base on the record highlight info in\r
- gHighligthMenuInfo to find the last highlight menu.\r
+ @param StartMenu The link_entry pointer to start menu.\r
+ @param EndMenu The link_entry pointer to end menu.\r
\r
- @param HighLightedStatement The input highlight statement.\r
+**/\r
+UINTN\r
+GetDistanceBetweenMenus (\r
+ IN LIST_ENTRY *StartMenu,\r
+ IN LIST_ENTRY *EndMenu\r
+ )\r
+{\r
+ LIST_ENTRY *Link;\r
+ UI_MENU_OPTION *MenuOption;\r
+ UINTN Distance;\r
\r
- @retval The highlight menu index.\r
+ Distance = 0;\r
+\r
+ Link = StartMenu;\r
+ while (Link != EndMenu) {\r
+ MenuOption = MENU_OPTION_FROM_LINK (Link);\r
+ if (MenuOption->Row == 0) {\r
+ UpdateOptionSkipLines (MenuOption);\r
+ }\r
+\r
+ Distance += MenuOption->Skip;\r
+ Link = Link->BackLink;\r
+ }\r
+\r
+ return Distance;\r
+}\r
+\r
+/**\r
+ Find the top of screen menu base on the previous record menu info.\r
+\r
+ @param HighLightMenu The link_entry pointer to highlight menu.\r
+\r
+ @retval Return the the link_entry pointer top of screen menu.\r
\r
**/\r
LIST_ENTRY *\r
FindTopOfScreenMenuOption (\r
- VOID\r
- )\r
+ IN LIST_ENTRY *HighLightMenu\r
+ )\r
{\r
- LIST_ENTRY *NewPos;\r
- UI_MENU_OPTION *MenuOption;\r
+ LIST_ENTRY *NewPos;\r
+ UI_MENU_OPTION *MenuOption;\r
+ UINTN TopRow;\r
+ UINTN BottomRow;\r
\r
- NewPos = gMenuOption.ForwardLink;\r
+ TopRow = gStatementDimensions.TopRow + SCROLL_ARROW_HEIGHT;\r
+ BottomRow = gStatementDimensions.BottomRow - SCROLL_ARROW_HEIGHT;\r
+\r
+ NewPos = gMenuOption.ForwardLink;\r
MenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
\r
- while (!IsTopOfScreeMenuOption(MenuOption)) {\r
- NewPos = NewPos->ForwardLink;\r
+ while (!IsTopOfScreeMenuOption (MenuOption)) {\r
+ NewPos = NewPos->ForwardLink;\r
if (NewPos == &gMenuOption) {\r
//\r
// Not Found it, break\r
//\r
break;\r
}\r
+\r
MenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
}\r
\r
// Last time top of screen menu has disappeared.\r
//\r
if (NewPos == &gMenuOption) {\r
- NewPos = NULL;\r
+ return NULL;\r
+ }\r
+\r
+ //\r
+ // Check whether highlight menu and top of screen menu can be shown within one page,\r
+ // if can't, return NULL to re-calcaulate the top of scrren menu. Because some new menus\r
+ // may be dynamically inserted between highlightmenu and previous top of screen menu,\r
+ // So previous record top of screen menu is not appropriate for current display.\r
+ //\r
+ if (GetDistanceBetweenMenus (HighLightMenu, NewPos) + 1 > BottomRow - TopRow) {\r
+ return NULL;\r
}\r
\r
return NewPos;\r
OUT UINTN *SkipValue\r
)\r
{\r
- UINTN TopRow;\r
- UINTN BottomRow;\r
- UI_MENU_OPTION *MenuOption;\r
- UINTN TmpValue;\r
+ UINTN TopRow;\r
+ UINTN BottomRow;\r
+ UI_MENU_OPTION *MenuOption;\r
+ UINTN TmpValue;\r
\r
TopRow = gStatementDimensions.TopRow + SCROLL_ARROW_HEIGHT;\r
BottomRow = gStatementDimensions.BottomRow - SCROLL_ARROW_HEIGHT;\r
// When option mismatch happens,there exist two cases,one is reenter the form, just like the if case below,\r
// and the other is exit current form and enter last form, it can be covered by the else case.\r
//\r
- if (gMisMatch && gFormData->HiiHandle == gHighligthMenuInfo.HiiHandle && gFormData->FormId == gHighligthMenuInfo.FormId) {\r
+ if (gMisMatch && (gFormData->HiiHandle == gHighligthMenuInfo.HiiHandle) && (gFormData->FormId == gHighligthMenuInfo.FormId)) {\r
//\r
- // Reenter caused by option mismatch or auto exit caused by refresh form(refresh interval/guid), \r
+ // Reenter caused by option mismatch or auto exit caused by refresh form(refresh interval/guid),\r
// base on the record highlight info to find the highlight menu.\r
//\r
\r
- *HighlightMenu = FindHighLightMenuOption(NULL);\r
+ *HighlightMenu = FindHighLightMenuOption (NULL);\r
if (*HighlightMenu != NULL) {\r
//\r
// Update skip info for this highlight menu.\r
//\r
// Found the last time highlight menu.\r
//\r
- *TopOfScreen = FindTopOfScreenMenuOption();\r
+ *TopOfScreen = FindTopOfScreenMenuOption (*HighlightMenu);\r
if (*TopOfScreen != NULL) {\r
//\r
// Found the last time selectable top of screen menu.\r
//\r
- AdjustDateAndTimePosition(TRUE, TopOfScreen);\r
+ AdjustDateAndTimePosition (TRUE, TopOfScreen);\r
MenuOption = MENU_OPTION_FROM_LINK (*TopOfScreen);\r
UpdateOptionSkipLines (MenuOption);\r
\r
*TopOfScreen = *HighlightMenu;\r
TmpValue = 0;\r
} else {\r
- *TopOfScreen = FindTopOfScreenMenu(*HighlightMenu, BottomRow - TopRow - MenuOption->Skip, &TmpValue);\r
+ *TopOfScreen = FindTopOfScreenMenu (*HighlightMenu, BottomRow - TopRow - MenuOption->Skip, &TmpValue);\r
}\r
\r
- *SkipValue = TmpValue;\r
+ *SkipValue = TmpValue;\r
}\r
} else {\r
//\r
- // Last time highlight menu has disappear, find the first highlightable menu as the defalut one.\r
+ // Last time highlight menu has disappear, find the first highlightable menu as the default one.\r
//\r
*HighlightMenu = gMenuOption.ForwardLink;\r
if (!IsListEmpty (&gMenuOption)) {\r
MoveToNextStatement (FALSE, HighlightMenu, BottomRow - TopRow, TRUE);\r
}\r
- *TopOfScreen = gMenuOption.ForwardLink;\r
- *SkipValue = 0;\r
- }\r
\r
+ *TopOfScreen = gMenuOption.ForwardLink;\r
+ *SkipValue = 0;\r
+ }\r
} else if (FormData->HighLightedStatement != NULL) {\r
if (IsSavedHighlightStatement (FormData->HighLightedStatement)) {\r
//\r
// Input highlight menu is same as last time highlight menu.\r
// Base on last time highlight menu to set the top of screen menu and highlight menu.\r
//\r
- *HighlightMenu = FindHighLightMenuOption(NULL);\r
+ *HighlightMenu = FindHighLightMenuOption (NULL);\r
ASSERT (*HighlightMenu != NULL);\r
\r
//\r
//\r
MenuOption = MENU_OPTION_FROM_LINK (*HighlightMenu);\r
UpdateOptionSkipLines (MenuOption);\r
- \r
- *TopOfScreen = FindTopOfScreenMenuOption();\r
+\r
+ *TopOfScreen = FindTopOfScreenMenuOption (*HighlightMenu);\r
if (*TopOfScreen == NULL) {\r
//\r
// Not found last time top of screen menu, so base on current highlight menu\r
*TopOfScreen = *HighlightMenu;\r
TmpValue = 0;\r
} else {\r
- *TopOfScreen = FindTopOfScreenMenu(*HighlightMenu, BottomRow - TopRow - MenuOption->Skip, &TmpValue);\r
+ *TopOfScreen = FindTopOfScreenMenu (*HighlightMenu, BottomRow - TopRow - MenuOption->Skip, &TmpValue);\r
}\r
\r
- *SkipValue = TmpValue;\r
+ *SkipValue = TmpValue;\r
} else {\r
- AdjustDateAndTimePosition(TRUE, TopOfScreen);\r
+ AdjustDateAndTimePosition (TRUE, TopOfScreen);\r
MenuOption = MENU_OPTION_FROM_LINK (*TopOfScreen);\r
UpdateOptionSkipLines (MenuOption);\r
\r
*SkipValue = gHighligthMenuInfo.SkipValue;\r
}\r
- AdjustDateAndTimePosition(TRUE, TopOfScreen);\r
+\r
+ AdjustDateAndTimePosition (TRUE, TopOfScreen);\r
} else {\r
//\r
// Input highlight menu is not save as last time highlight menu.\r
//\r
- *HighlightMenu = FindHighLightMenuOption(FormData->HighLightedStatement);\r
- MenuOption = MENU_OPTION_FROM_LINK (*HighlightMenu);\r
+ *HighlightMenu = FindHighLightMenuOption (FormData->HighLightedStatement);\r
+ MenuOption = MENU_OPTION_FROM_LINK (*HighlightMenu);\r
UpdateOptionSkipLines (MenuOption);\r
\r
//\r
*TopOfScreen = *HighlightMenu;\r
TmpValue = 0;\r
} else {\r
- *TopOfScreen = FindTopOfScreenMenu(*HighlightMenu, BottomRow - TopRow - MenuOption->Skip, &TmpValue);\r
+ *TopOfScreen = FindTopOfScreenMenu (*HighlightMenu, BottomRow - TopRow - MenuOption->Skip, &TmpValue);\r
}\r
\r
- *SkipValue = TmpValue;\r
+ *SkipValue = TmpValue;\r
}\r
- AdjustDateAndTimePosition(TRUE, TopOfScreen);\r
+\r
+ AdjustDateAndTimePosition (TRUE, TopOfScreen);\r
} else {\r
//\r
// If not has input highlight statement, just return the first one in this form.\r
if (!IsListEmpty (&gMenuOption)) {\r
MoveToNextStatement (FALSE, HighlightMenu, BottomRow - TopRow, TRUE);\r
}\r
- *SkipValue = 0;\r
+\r
+ *SkipValue = 0;\r
}\r
\r
gMisMatch = FALSE;\r
**/\r
VOID\r
UpdateHighlightMenuInfo (\r
- IN LIST_ENTRY *Highlight,\r
- IN LIST_ENTRY *TopOfScreen,\r
- IN UINTN SkipValue\r
+ IN LIST_ENTRY *Highlight,\r
+ IN LIST_ENTRY *TopOfScreen,\r
+ IN UINTN SkipValue\r
)\r
{\r
- UI_MENU_OPTION *MenuOption;\r
- FORM_DISPLAY_ENGINE_STATEMENT *Statement;\r
+ UI_MENU_OPTION *MenuOption;\r
+ FORM_DISPLAY_ENGINE_STATEMENT *Statement;\r
\r
- gHighligthMenuInfo.HiiHandle = gFormData->HiiHandle;\r
- gHighligthMenuInfo.FormId = gFormData->FormId;\r
- gHighligthMenuInfo.SkipValue = (UINT16)SkipValue;\r
+ gHighligthMenuInfo.HiiHandle = gFormData->HiiHandle;\r
+ gHighligthMenuInfo.FormId = gFormData->FormId;\r
+ gHighligthMenuInfo.SkipValue = (UINT16)SkipValue;\r
\r
if (!IsListEmpty (&gMenuOption)) {\r
MenuOption = MENU_OPTION_FROM_LINK (Highlight);\r
gUserInput->SelectedStatement = Statement;\r
\r
gHighligthMenuInfo.HLTSequence = MenuOption->Sequence;\r
- gHighligthMenuInfo.HLTQuestionId = GetQuestionIdInfo(Statement->OpCode);\r
+ gHighligthMenuInfo.HLTQuestionId = GetQuestionIdInfo (Statement->OpCode);\r
if (gHighligthMenuInfo.HLTQuestionId == 0) {\r
//\r
// if question id == 0, save the opcode buffer..\r
if (gHighligthMenuInfo.HLTOpCode != NULL) {\r
FreePool (gHighligthMenuInfo.HLTOpCode);\r
}\r
+\r
gHighligthMenuInfo.HLTOpCode = AllocateCopyPool (Statement->OpCode->Length, Statement->OpCode);\r
ASSERT (gHighligthMenuInfo.HLTOpCode != NULL);\r
\r
- gHighligthMenuInfo.HLTIndex = GetIndexInfoForOpcode(Statement->OpCode);\r
+ gHighligthMenuInfo.HLTIndex = GetIndexInfoForOpcode (Statement->OpCode);\r
}\r
\r
MenuOption = MENU_OPTION_FROM_LINK (TopOfScreen);\r
Statement = MenuOption->ThisTag;\r
\r
- gHighligthMenuInfo.TOSQuestionId = GetQuestionIdInfo(Statement->OpCode);\r
+ gHighligthMenuInfo.TOSQuestionId = GetQuestionIdInfo (Statement->OpCode);\r
if (gHighligthMenuInfo.TOSQuestionId == 0) {\r
//\r
// if question id == 0, save the opcode buffer..\r
if (gHighligthMenuInfo.TOSOpCode != NULL) {\r
FreePool (gHighligthMenuInfo.TOSOpCode);\r
}\r
+\r
gHighligthMenuInfo.TOSOpCode = AllocateCopyPool (Statement->OpCode->Length, Statement->OpCode);\r
ASSERT (gHighligthMenuInfo.TOSOpCode != NULL);\r
\r
- gHighligthMenuInfo.TOSIndex = GetIndexInfoForOpcode(Statement->OpCode);\r
+ gHighligthMenuInfo.TOSIndex = GetIndexInfoForOpcode (Statement->OpCode);\r
}\r
} else {\r
- gUserInput->SelectedStatement = NULL;\r
+ gUserInput->SelectedStatement = NULL;\r
\r
gHighligthMenuInfo.HLTSequence = 0;\r
gHighligthMenuInfo.HLTQuestionId = 0;\r
if (gHighligthMenuInfo.HLTOpCode != NULL) {\r
FreePool (gHighligthMenuInfo.HLTOpCode);\r
}\r
- gHighligthMenuInfo.HLTOpCode = NULL;\r
- gHighligthMenuInfo.HLTIndex = 0;\r
+\r
+ gHighligthMenuInfo.HLTOpCode = NULL;\r
+ gHighligthMenuInfo.HLTIndex = 0;\r
\r
gHighligthMenuInfo.TOSQuestionId = 0;\r
if (gHighligthMenuInfo.TOSOpCode != NULL) {\r
FreePool (gHighligthMenuInfo.TOSOpCode);\r
}\r
- gHighligthMenuInfo.TOSOpCode = NULL;\r
- gHighligthMenuInfo.TOSIndex = 0;\r
+\r
+ gHighligthMenuInfo.TOSOpCode = NULL;\r
+ gHighligthMenuInfo.TOSIndex = 0;\r
}\r
}\r
\r
**/\r
VOID\r
SetDisplayAttribute (\r
- IN UI_MENU_OPTION *MenuOption,\r
- IN BOOLEAN Highlight\r
+ IN UI_MENU_OPTION *MenuOption,\r
+ IN BOOLEAN Highlight\r
)\r
{\r
- FORM_DISPLAY_ENGINE_STATEMENT *Statement;\r
- \r
+ FORM_DISPLAY_ENGINE_STATEMENT *Statement;\r
+\r
Statement = MenuOption->ThisTag;\r
\r
if (Highlight) {\r
**/\r
VOID\r
DisplayMenuString (\r
- IN UI_MENU_OPTION *MenuOption,\r
- IN UINTN Col,\r
- IN UINTN Row,\r
- IN CHAR16 *String,\r
- IN UINTN Width,\r
- IN BOOLEAN Highlight\r
+ IN UI_MENU_OPTION *MenuOption,\r
+ IN UINTN Col,\r
+ IN UINTN Row,\r
+ IN CHAR16 *String,\r
+ IN UINTN Width,\r
+ IN BOOLEAN Highlight\r
)\r
{\r
- UINTN Length;\r
+ UINTN Length;\r
\r
//\r
// Print string with normal color.\r
PrintStringAtWithWidth (Col, Row, String, Width);\r
return;\r
}\r
- \r
+\r
//\r
// Print the highlight menu string.\r
// First print the highlight string.\r
- // \r
- SetDisplayAttribute(MenuOption, TRUE);\r
+ //\r
+ SetDisplayAttribute (MenuOption, TRUE);\r
Length = PrintStringAt (Col, Row, String);\r
\r
//\r
// Second, clean the empty after the string.\r
//\r
- SetDisplayAttribute(MenuOption, FALSE);\r
+ SetDisplayAttribute (MenuOption, FALSE);\r
PrintStringAtWithWidth (Col + Length, Row, L"", Width - Length);\r
}\r
\r
@retval FALSE This menu option can't have option string.\r
\r
**/\r
-BOOLEAN \r
+BOOLEAN\r
HasOptionString (\r
- IN UI_MENU_OPTION *MenuOption\r
+ IN UI_MENU_OPTION *MenuOption\r
)\r
{\r
- FORM_DISPLAY_ENGINE_STATEMENT *Statement;\r
- CHAR16 *String;\r
- UINTN Size;\r
- EFI_IFR_TEXT *TestOp;\r
+ FORM_DISPLAY_ENGINE_STATEMENT *Statement;\r
+ CHAR16 *String;\r
+ UINTN Size;\r
+ EFI_IFR_TEXT *TextOp;\r
\r
- Size = 0;\r
+ Size = 0;\r
Statement = MenuOption->ThisTag;\r
\r
//\r
// See if the second text parameter is really NULL\r
//\r
if (Statement->OpCode->OpCode == EFI_IFR_TEXT_OP) {\r
- TestOp = (EFI_IFR_TEXT *) Statement->OpCode;\r
- if (TestOp->TextTwo != 0) {\r
- String = GetToken (TestOp->TextTwo, gFormData->HiiHandle);\r
+ TextOp = (EFI_IFR_TEXT *)Statement->OpCode;\r
+ if (TextOp->TextTwo != 0) {\r
+ String = GetToken (TextOp->TextTwo, gFormData->HiiHandle);\r
Size = StrLen (String);\r
FreePool (String);\r
}\r
}\r
\r
if ((Statement->OpCode->OpCode == EFI_IFR_SUBTITLE_OP) ||\r
- (Statement->OpCode->OpCode == EFI_IFR_REF_OP) ||\r
- (Statement->OpCode->OpCode == EFI_IFR_PASSWORD_OP) ||\r
- (Statement->OpCode->OpCode == EFI_IFR_ACTION_OP) ||\r
- (Statement->OpCode->OpCode == EFI_IFR_RESET_BUTTON_OP) ||\r
- //\r
- // Allow a wide display if text op-code and no secondary text op-code\r
- //\r
- ((Statement->OpCode->OpCode == EFI_IFR_TEXT_OP) && (Size == 0))\r
- ) {\r
-\r
+ (Statement->OpCode->OpCode == EFI_IFR_REF_OP) ||\r
+ (Statement->OpCode->OpCode == EFI_IFR_PASSWORD_OP) ||\r
+ (Statement->OpCode->OpCode == EFI_IFR_ACTION_OP) ||\r
+ (Statement->OpCode->OpCode == EFI_IFR_RESET_BUTTON_OP) ||\r
+ //\r
+ // Allow a wide display if text op-code and no secondary text op-code\r
+ //\r
+ ((Statement->OpCode->OpCode == EFI_IFR_TEXT_OP) && (Size == 0))\r
+ )\r
+ {\r
return FALSE;\r
}\r
\r
**/\r
BOOLEAN\r
FxConfirmPopup (\r
- IN UINT32 Action\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
- UINTN MaxLen;\r
+ EFI_INPUT_KEY Key;\r
+ CHAR16 *CfmStr;\r
+ UINTN CfmStrLen;\r
+ UINT32 CheckFlags;\r
+ BOOLEAN RetVal;\r
+ UINTN CatLen;\r
+ UINTN MaxLen;\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
+ //\r
+ CheckFlags = BROWSER_ACTION_DISCARD |\r
BROWSER_ACTION_DEFAULT |\r
BROWSER_ACTION_SUBMIT |\r
BROWSER_ACTION_RESET |\r
\r
if ((Action & BROWSER_ACTION_DISCARD) == BROWSER_ACTION_DISCARD) {\r
CfmStrLen += StrLen (gConfirmDiscardMsg);\r
- } \r
+ }\r
\r
if ((Action & BROWSER_ACTION_DEFAULT) == BROWSER_ACTION_DEFAULT) {\r
if (CfmStrLen != 0) {\r
CfmStrLen += CatLen;\r
- } \r
+ }\r
\r
CfmStrLen += StrLen (gConfirmDefaultMsg);\r
}\r
if ((Action & BROWSER_ACTION_SUBMIT) == BROWSER_ACTION_SUBMIT) {\r
if (CfmStrLen != 0) {\r
CfmStrLen += CatLen;\r
- } \r
+ }\r
\r
CfmStrLen += StrLen (gConfirmSubmitMsg);\r
}\r
if ((Action & BROWSER_ACTION_RESET) == BROWSER_ACTION_RESET) {\r
if (CfmStrLen != 0) {\r
CfmStrLen += CatLen;\r
- } \r
+ }\r
\r
CfmStrLen += StrLen (gConfirmResetMsg);\r
}\r
if ((Action & BROWSER_ACTION_EXIT) == BROWSER_ACTION_EXIT) {\r
if (CfmStrLen != 0) {\r
CfmStrLen += CatLen;\r
- } \r
+ }\r
\r
CfmStrLen += StrLen (gConfirmExitMsg);\r
}\r
@param MenuOption The menu opton which this attribut used to.\r
@param SkipWidth The skip width between the left to the start of the prompt.\r
@param BeginCol The begin column for one menu.\r
- @param SkipLine The skip line for this menu. \r
+ @param SkipLine The skip line for this menu.\r
@param BottomRow The bottom row for this form.\r
@param Highlight Whether this menu will be highlight.\r
@param UpdateCol Whether need to update the column info for Date/Time.\r
**/\r
EFI_STATUS\r
DisplayOneMenu (\r
- IN UI_MENU_OPTION *MenuOption,\r
- IN UINTN SkipWidth,\r
- IN UINTN BeginCol,\r
- IN UINTN SkipLine,\r
- IN UINTN BottomRow,\r
- IN BOOLEAN Highlight,\r
- IN BOOLEAN UpdateCol\r
+ IN UI_MENU_OPTION *MenuOption,\r
+ IN UINTN SkipWidth,\r
+ IN UINTN BeginCol,\r
+ IN UINTN SkipLine,\r
+ IN UINTN BottomRow,\r
+ IN BOOLEAN Highlight,\r
+ IN BOOLEAN UpdateCol\r
)\r
{\r
- FORM_DISPLAY_ENGINE_STATEMENT *Statement;\r
- UINTN Index;\r
- UINT16 Width;\r
- UINT16 PromptWidth;\r
- CHAR16 *StringPtr;\r
- CHAR16 *OptionString;\r
- CHAR16 *OutputString;\r
- UINT16 GlyphWidth;\r
- UINTN Temp;\r
- UINTN Temp2;\r
- UINTN Temp3;\r
- EFI_STATUS Status;\r
- UINTN Row;\r
- BOOLEAN IsProcessingFirstRow;\r
- UINTN Col;\r
- UINTN PromptLineNum;\r
- UINTN OptionLineNum;\r
- CHAR16 AdjustValue;\r
- UINTN MaxRow;\r
-\r
- Statement = MenuOption->ThisTag;\r
- Temp = SkipLine;\r
- Temp2 = SkipLine;\r
- Temp3 = SkipLine;\r
- AdjustValue = 0;\r
- PromptLineNum = 0;\r
- OptionLineNum = 0;\r
- MaxRow = 0;\r
+ FORM_DISPLAY_ENGINE_STATEMENT *Statement;\r
+ UINTN Index;\r
+ UINT16 Width;\r
+ UINT16 PromptWidth;\r
+ CHAR16 *StringPtr;\r
+ CHAR16 *OptionString;\r
+ CHAR16 *OutputString;\r
+ UINT16 GlyphWidth;\r
+ UINTN Temp;\r
+ UINTN Temp2;\r
+ UINTN Temp3;\r
+ EFI_STATUS Status;\r
+ UINTN Row;\r
+ BOOLEAN IsProcessingFirstRow;\r
+ UINTN Col;\r
+ UINTN PromptLineNum;\r
+ UINTN OptionLineNum;\r
+ CHAR16 AdjustValue;\r
+ UINTN MaxRow;\r
+\r
+ Statement = MenuOption->ThisTag;\r
+ Temp = SkipLine;\r
+ Temp2 = SkipLine;\r
+ Temp3 = SkipLine;\r
+ AdjustValue = 0;\r
+ PromptLineNum = 0;\r
+ OptionLineNum = 0;\r
+ MaxRow = 0;\r
IsProcessingFirstRow = TRUE;\r
\r
//\r
}\r
\r
if (OptionString != NULL) {\r
- if (Statement->OpCode->OpCode == EFI_IFR_DATE_OP || Statement->OpCode->OpCode == EFI_IFR_TIME_OP) {\r
+ if ((Statement->OpCode->OpCode == EFI_IFR_DATE_OP) || (Statement->OpCode->OpCode == EFI_IFR_TIME_OP)) {\r
//\r
// Adjust option string for date/time opcode.\r
//\r
- ProcessStringForDateTime(MenuOption, OptionString, UpdateCol);\r
+ ProcessStringForDateTime (MenuOption, OptionString, UpdateCol);\r
}\r
- \r
- Width = (UINT16) gOptionBlockWidth - 1;\r
- Row = MenuOption->Row;\r
- GlyphWidth = 1;\r
+\r
+ Width = (UINT16)gOptionBlockWidth - 1;\r
+ Row = MenuOption->Row;\r
+ GlyphWidth = 1;\r
OptionLineNum = 0;\r
- \r
+\r
for (Index = 0; GetLineByWidth (OptionString, Width, &GlyphWidth, &Index, &OutputString) != 0x0000;) {\r
if (((Temp2 == 0)) && (Row <= BottomRow)) {\r
- if (Statement->OpCode->OpCode == EFI_IFR_DATE_OP || Statement->OpCode->OpCode == EFI_IFR_TIME_OP) {\r
+ if ((Statement->OpCode->OpCode == EFI_IFR_DATE_OP) || (Statement->OpCode->OpCode == EFI_IFR_TIME_OP)) {\r
//\r
// For date/time question, it has three menu options for this qustion.\r
// The first/second menu options with the skip value is 0. the last one\r
// For date/ time, print the last past (year for date and second for time)\r
// - 7 means skip [##/##/ for date and [##:##: for time.\r
//\r
- DisplayMenuString (MenuOption,MenuOption->OptCol, Row, OutputString, Width + 1 - 7, Highlight);\r
+ DisplayMenuString (MenuOption, MenuOption->OptCol, Row, OutputString, Width + 1 - 7, Highlight);\r
} else {\r
//\r
// For date/ time, print the first and second past (year for date and second for time)\r
- // The OutputString has a NARROW_CHAR or WIDE_CHAR at the begin of the string, \r
+ // The OutputString has a NARROW_CHAR or WIDE_CHAR at the begin of the string,\r
// so need to - 1 to remove it, otherwise, it will clean 1 extr char follow it.\r
DisplayMenuString (MenuOption, MenuOption->OptCol, Row, OutputString, StrLen (OutputString) - 1, Highlight);\r
}\r
} else {\r
DisplayMenuString (MenuOption, MenuOption->OptCol, Row, OutputString, Width + 1, Highlight);\r
}\r
+\r
OptionLineNum++;\r
}\r
- \r
+\r
//\r
// If there is more string to process print on the next row and increment the Skip value\r
//\r
}\r
}\r
}\r
- \r
+\r
FreePool (OutputString);\r
if (Temp2 != 0) {\r
Temp2--;\r
}\r
}\r
- \r
+\r
Highlight = FALSE;\r
\r
FreePool (OptionString);\r
GlyphWidth = 1;\r
PromptLineNum = 0;\r
\r
- if (MenuOption->Description == NULL || MenuOption->Description[0] == '\0') {\r
+ if ((MenuOption->Description == NULL) || (MenuOption->Description[0] == '\0')) {\r
PrintStringAtWithWidth (BeginCol, Row, L"", PromptWidth + AdjustValue + SkipWidth);\r
PromptLineNum++;\r
} else {\r
- for (Index = 0; GetLineByWidth (MenuOption->Description, PromptWidth, &GlyphWidth, &Index, &OutputString) != 0x0000;) { \r
- if ((Temp == 0) && (Row <= BottomRow)) { \r
+ for (Index = 0; GetLineByWidth (MenuOption->Description, PromptWidth, &GlyphWidth, &Index, &OutputString) != 0x0000;) {\r
+ if ((Temp == 0) && (Row <= BottomRow)) {\r
//\r
- // 1.Clean the start LEFT_SKIPPED_COLUMNS \r
+ // 1.Clean the start LEFT_SKIPPED_COLUMNS\r
//\r
PrintStringAtWithWidth (BeginCol, Row, L"", SkipWidth);\r
- \r
- if (Statement->OpCode->OpCode == EFI_IFR_REF_OP && MenuOption->Col >= 2 && IsProcessingFirstRow) {\r
+\r
+ if ((Statement->OpCode->OpCode == EFI_IFR_REF_OP) && (MenuOption->Col >= 2) && IsProcessingFirstRow) {\r
//\r
// Print Arrow for Goto button.\r
//\r
);\r
IsProcessingFirstRow = FALSE;\r
}\r
+\r
DisplayMenuString (MenuOption, MenuOption->Col, Row, OutputString, PromptWidth + AdjustValue, Highlight);\r
- PromptLineNum ++;\r
+ PromptLineNum++;\r
}\r
+\r
//\r
// If there is more string to process print on the next row and increment the Skip value\r
//\r
Highlight = FALSE;\r
}\r
\r
-\r
//\r
// 3. If this is a text op with secondary text information\r
//\r
- if ((Statement->OpCode->OpCode == EFI_IFR_TEXT_OP) && (((EFI_IFR_TEXT*)Statement->OpCode)->TextTwo != 0)) {\r
- StringPtr = GetToken (((EFI_IFR_TEXT*)Statement->OpCode)->TextTwo, gFormData->HiiHandle);\r
- \r
- Width = (UINT16) gOptionBlockWidth - 1;\r
- Row = MenuOption->Row;\r
- GlyphWidth = 1;\r
+ if ((Statement->OpCode->OpCode == EFI_IFR_TEXT_OP) && (((EFI_IFR_TEXT *)Statement->OpCode)->TextTwo != 0)) {\r
+ StringPtr = GetToken (((EFI_IFR_TEXT *)Statement->OpCode)->TextTwo, gFormData->HiiHandle);\r
+\r
+ Width = (UINT16)gOptionBlockWidth - 1;\r
+ Row = MenuOption->Row;\r
+ GlyphWidth = 1;\r
OptionLineNum = 0;\r
\r
- for (Index = 0; GetLineByWidth (StringPtr, Width, &GlyphWidth, &Index, &OutputString) != 0x0000;) { \r
+ for (Index = 0; GetLineByWidth (StringPtr, Width, &GlyphWidth, &Index, &OutputString) != 0x0000;) {\r
if ((Temp3 == 0) && (Row <= BottomRow)) {\r
DisplayMenuString (MenuOption, MenuOption->OptCol, Row, OutputString, Width + 1, Highlight);\r
OptionLineNum++;\r
}\r
+\r
//\r
// If there is more string to process print on the next row and increment the Skip value\r
//\r
}\r
}\r
}\r
- \r
+\r
FreePool (OutputString);\r
if (Temp3 != 0) {\r
Temp3--;\r
// 4.Line number for Option string and prompt string are not equal.\r
// Clean the column whose line number is less.\r
//\r
- if (HasOptionString(MenuOption) && (OptionLineNum != PromptLineNum)) {\r
+ if (HasOptionString (MenuOption) && (OptionLineNum != PromptLineNum)) {\r
Col = OptionLineNum < PromptLineNum ? MenuOption->OptCol : BeginCol;\r
Row = (OptionLineNum < PromptLineNum ? OptionLineNum : PromptLineNum) + MenuOption->Row;\r
- Width = (UINT16) (OptionLineNum < PromptLineNum ? gOptionBlockWidth : PromptWidth + AdjustValue + SkipWidth);\r
+ Width = (UINT16)(OptionLineNum < PromptLineNum ? gOptionBlockWidth : PromptWidth + AdjustValue + SkipWidth);\r
MaxRow = (OptionLineNum < PromptLineNum ? PromptLineNum : OptionLineNum) + MenuOption->Row - 1;\r
- \r
+\r
while (Row <= MaxRow) {\r
DisplayMenuString (MenuOption, Col, Row++, L"", Width, FALSE);\r
}\r
IN FORM_DISPLAY_ENGINE_FORM *FormData\r
)\r
{\r
- UINTN SkipValue;\r
- INTN Difference;\r
- UINTN DistanceValue;\r
- UINTN Row;\r
- UINTN Col;\r
- UINTN Temp;\r
- UINTN Temp2;\r
- UINTN TopRow;\r
- UINTN BottomRow;\r
- UINTN Index;\r
- CHAR16 *StringPtr;\r
- CHAR16 *StringRightPtr;\r
- CHAR16 *StringErrorPtr;\r
- CHAR16 *OptionString;\r
- CHAR16 *HelpString;\r
- CHAR16 *HelpHeaderString;\r
- CHAR16 *HelpBottomString;\r
- BOOLEAN NewLine;\r
- BOOLEAN Repaint;\r
- BOOLEAN UpArrow;\r
- BOOLEAN DownArrow;\r
- EFI_STATUS Status;\r
- EFI_INPUT_KEY Key;\r
- LIST_ENTRY *Link;\r
- LIST_ENTRY *NewPos;\r
- LIST_ENTRY *TopOfScreen;\r
- LIST_ENTRY *SavedListEntry;\r
- UI_MENU_OPTION *MenuOption;\r
- UI_MENU_OPTION *NextMenuOption;\r
- UI_MENU_OPTION *SavedMenuOption;\r
- UI_CONTROL_FLAG ControlFlag;\r
- UI_SCREEN_OPERATION ScreenOperation;\r
- FORM_DISPLAY_ENGINE_STATEMENT *Statement;\r
- BROWSER_HOT_KEY *HotKey;\r
- UINTN HelpPageIndex;\r
- UINTN HelpPageCount;\r
- UINTN RowCount;\r
- UINTN HelpLine;\r
- UINTN HelpHeaderLine;\r
- UINTN HelpBottomLine;\r
- BOOLEAN MultiHelpPage;\r
- UINT16 EachLineWidth;\r
- UINT16 HeaderLineWidth;\r
- UINT16 BottomLineWidth;\r
- EFI_STRING_ID HelpInfo;\r
- UI_EVENT_TYPE EventType;\r
- BOOLEAN SkipHighLight;\r
- EFI_HII_VALUE *StatementValue;\r
-\r
- EventType = UIEventNone;\r
- Status = EFI_SUCCESS;\r
- HelpString = NULL;\r
- HelpHeaderString = NULL;\r
- HelpBottomString = NULL;\r
- OptionString = NULL;\r
- ScreenOperation = UiNoOperation;\r
- NewLine = TRUE;\r
- HelpPageCount = 0;\r
- HelpLine = 0;\r
- RowCount = 0;\r
- HelpBottomLine = 0;\r
- HelpHeaderLine = 0;\r
- HelpPageIndex = 0;\r
- MultiHelpPage = FALSE;\r
- EachLineWidth = 0;\r
- HeaderLineWidth = 0;\r
- BottomLineWidth = 0;\r
- UpArrow = FALSE;\r
- DownArrow = FALSE;\r
- SkipValue = 0;\r
- SkipHighLight = FALSE;\r
-\r
- NextMenuOption = NULL;\r
- SavedMenuOption = NULL;\r
- HotKey = NULL;\r
- Repaint = TRUE;\r
- MenuOption = NULL;\r
- gModalSkipColumn = (CHAR16) (gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn) / 6;\r
+ UINTN SkipValue;\r
+ INTN Difference;\r
+ UINTN DistanceValue;\r
+ UINTN Row;\r
+ UINTN Col;\r
+ UINTN Temp;\r
+ UINTN Temp2;\r
+ UINTN TopRow;\r
+ UINTN BottomRow;\r
+ UINTN Index;\r
+ CHAR16 *StringPtr;\r
+ CHAR16 *StringRightPtr;\r
+ CHAR16 *StringErrorPtr;\r
+ CHAR16 *OptionString;\r
+ CHAR16 *HelpString;\r
+ CHAR16 *HelpHeaderString;\r
+ CHAR16 *HelpBottomString;\r
+ BOOLEAN NewLine;\r
+ BOOLEAN Repaint;\r
+ BOOLEAN UpArrow;\r
+ BOOLEAN DownArrow;\r
+ EFI_STATUS Status;\r
+ EFI_INPUT_KEY Key;\r
+ LIST_ENTRY *Link;\r
+ LIST_ENTRY *NewPos;\r
+ LIST_ENTRY *TopOfScreen;\r
+ LIST_ENTRY *SavedListEntry;\r
+ UI_MENU_OPTION *MenuOption;\r
+ UI_MENU_OPTION *NextMenuOption;\r
+ UI_MENU_OPTION *SavedMenuOption;\r
+ UI_CONTROL_FLAG ControlFlag;\r
+ UI_SCREEN_OPERATION ScreenOperation;\r
+ FORM_DISPLAY_ENGINE_STATEMENT *Statement;\r
+ BROWSER_HOT_KEY *HotKey;\r
+ UINTN HelpPageIndex;\r
+ UINTN HelpPageCount;\r
+ UINTN RowCount;\r
+ UINTN HelpLine;\r
+ UINTN HelpHeaderLine;\r
+ UINTN HelpBottomLine;\r
+ BOOLEAN MultiHelpPage;\r
+ UINT16 EachLineWidth;\r
+ UINT16 HeaderLineWidth;\r
+ UINT16 BottomLineWidth;\r
+ EFI_STRING_ID HelpInfo;\r
+ UI_EVENT_TYPE EventType;\r
+ BOOLEAN SkipHighLight;\r
+ EFI_HII_VALUE *StatementValue;\r
+\r
+ EventType = UIEventNone;\r
+ Status = EFI_SUCCESS;\r
+ HelpString = NULL;\r
+ HelpHeaderString = NULL;\r
+ HelpBottomString = NULL;\r
+ OptionString = NULL;\r
+ ScreenOperation = UiNoOperation;\r
+ NewLine = TRUE;\r
+ HelpPageCount = 0;\r
+ HelpLine = 0;\r
+ RowCount = 0;\r
+ HelpBottomLine = 0;\r
+ HelpHeaderLine = 0;\r
+ HelpPageIndex = 0;\r
+ MultiHelpPage = FALSE;\r
+ EachLineWidth = 0;\r
+ HeaderLineWidth = 0;\r
+ BottomLineWidth = 0;\r
+ UpArrow = FALSE;\r
+ DownArrow = FALSE;\r
+ SkipValue = 0;\r
+ SkipHighLight = FALSE;\r
+\r
+ NextMenuOption = NULL;\r
+ SavedMenuOption = NULL;\r
+ HotKey = NULL;\r
+ Repaint = TRUE;\r
+ MenuOption = NULL;\r
+ gModalSkipColumn = (CHAR16)(gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn) / 6;\r
\r
ZeroMem (&Key, sizeof (EFI_INPUT_KEY));\r
\r
Col = gStatementDimensions.LeftColumn + LEFT_SKIPPED_COLUMNS;\r
}\r
\r
- FindTopMenu(FormData, &TopOfScreen, &NewPos, &SkipValue);\r
+ FindTopMenu (FormData, &TopOfScreen, &NewPos, &SkipValue);\r
if (!IsListEmpty (&gMenuOption)) {\r
- NextMenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
+ NextMenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
gUserInput->SelectedStatement = NextMenuOption->ThisTag;\r
}\r
\r
ControlFlag = CfInitialization;\r
while (TRUE) {\r
switch (ControlFlag) {\r
- case CfInitialization:\r
- if ((gOldFormEntry.HiiHandle != FormData->HiiHandle) || \r
- (!CompareGuid (&gOldFormEntry.FormSetGuid, &FormData->FormSetGuid))) {\r
- //\r
- // Clear Statement range if different formset is painted.\r
- //\r
- ClearLines (\r
- gStatementDimensions.LeftColumn,\r
- gStatementDimensions.RightColumn,\r
- TopRow - SCROLL_ARROW_HEIGHT,\r
- BottomRow + SCROLL_ARROW_HEIGHT,\r
- GetFieldTextColor ()\r
- );\r
-\r
- }\r
- ControlFlag = CfRepaint;\r
- break;\r
-\r
- case CfRepaint:\r
- ControlFlag = CfRefreshHighLight;\r
-\r
- if (Repaint) {\r
- //\r
- // Display menu\r
- //\r
- DownArrow = FALSE;\r
- UpArrow = FALSE;\r
- Row = TopRow;\r
-\r
- gST->ConOut->SetAttribute (gST->ConOut, GetFieldTextColor ());\r
- \r
- //\r
- // 1. Check whether need to print the arrow up.\r
- //\r
- if (!ValueIsScroll (TRUE, TopOfScreen)) {\r
- UpArrow = TRUE;\r
- }\r
-\r
- if ((FormData->Attribute & HII_DISPLAY_MODAL) != 0) {\r
- PrintStringAtWithWidth(gStatementDimensions.LeftColumn + gModalSkipColumn, TopRow - 1, L"", gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn - 2 * gModalSkipColumn);\r
- } else {\r
- PrintStringAtWithWidth(gStatementDimensions.LeftColumn, TopRow - 1, L"", gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn);\r
- }\r
- if (UpArrow) {\r
- gST->ConOut->SetAttribute (gST->ConOut, GetArrowColor ());\r
- PrintCharAt (\r
- gStatementDimensions.LeftColumn + gPromptBlockWidth + gOptionBlockWidth + 1,\r
+ case CfInitialization:\r
+ if ((gOldFormEntry.HiiHandle != FormData->HiiHandle) ||\r
+ (!CompareGuid (&gOldFormEntry.FormSetGuid, &FormData->FormSetGuid)))\r
+ {\r
+ //\r
+ // Clear Statement range if different formset is painted.\r
+ //\r
+ ClearLines (\r
+ gStatementDimensions.LeftColumn,\r
+ gStatementDimensions.RightColumn,\r
TopRow - SCROLL_ARROW_HEIGHT,\r
- ARROW_UP\r
+ BottomRow + SCROLL_ARROW_HEIGHT,\r
+ GetFieldTextColor ()\r
);\r
- gST->ConOut->SetAttribute (gST->ConOut, GetFieldTextColor ());\r
}\r
\r
- //\r
- // 2.Paint the menu.\r
- //\r
- for (Link = TopOfScreen; Link != &gMenuOption; Link = Link->ForwardLink) {\r
- MenuOption = MENU_OPTION_FROM_LINK (Link);\r
- MenuOption->Row = Row;\r
- MenuOption->Col = Col;\r
- if ((FormData->Attribute & HII_DISPLAY_MODAL) != 0) {\r
- MenuOption->OptCol = gStatementDimensions.LeftColumn + LEFT_SKIPPED_COLUMNS + gPromptBlockWidth + gModalSkipColumn;\r
- } else {\r
- MenuOption->OptCol = gStatementDimensions.LeftColumn + LEFT_SKIPPED_COLUMNS + gPromptBlockWidth;\r
- }\r
+ ControlFlag = CfRepaint;\r
+ break;\r
\r
- if (MenuOption->NestInStatement) {\r
- MenuOption->Col += SUBTITLE_INDENT;\r
- }\r
+ case CfRepaint:\r
+ ControlFlag = CfRefreshHighLight;\r
+\r
+ if (Repaint) {\r
+ //\r
+ // Display menu\r
+ //\r
+ DownArrow = FALSE;\r
+ UpArrow = FALSE;\r
+ Row = TopRow;\r
+\r
+ gST->ConOut->SetAttribute (gST->ConOut, GetFieldTextColor ());\r
\r
//\r
- // Save the highlight menu, will be used in CfRefreshHighLight case.\r
+ // 1. Check whether need to print the arrow up.\r
//\r
- if (Link == NewPos) {\r
- SavedMenuOption = MenuOption;\r
- SkipHighLight = TRUE;\r
+ if (!ValueIsScroll (TRUE, TopOfScreen)) {\r
+ UpArrow = TRUE;\r
}\r
\r
if ((FormData->Attribute & HII_DISPLAY_MODAL) != 0) {\r
- Status = DisplayOneMenu (MenuOption, \r
- MenuOption->Col - gStatementDimensions.LeftColumn,\r
- gStatementDimensions.LeftColumn + gModalSkipColumn, \r
- Link == TopOfScreen ? SkipValue : 0, \r
- BottomRow,\r
- (BOOLEAN) ((Link == NewPos) && IsSelectable(MenuOption)),\r
- TRUE\r
- );\r
+ PrintStringAtWithWidth (gStatementDimensions.LeftColumn + gModalSkipColumn, TopRow - 1, L"", gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn - 2 * gModalSkipColumn);\r
} else {\r
- Status = DisplayOneMenu (MenuOption, \r
- MenuOption->Col - gStatementDimensions.LeftColumn,\r
- gStatementDimensions.LeftColumn, \r
- Link == TopOfScreen ? SkipValue : 0, \r
- BottomRow,\r
- (BOOLEAN) ((Link == NewPos) && IsSelectable(MenuOption)),\r
- TRUE\r
- );\r
+ PrintStringAtWithWidth (gStatementDimensions.LeftColumn, TopRow - 1, L"", gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn);\r
}\r
\r
- if (EFI_ERROR (Status)) {\r
- if (gMisMatch) {\r
- return EFI_SUCCESS;\r
- } else {\r
- return Status;\r
- }\r
+ if (UpArrow) {\r
+ gST->ConOut->SetAttribute (gST->ConOut, GetArrowColor ());\r
+ PrintCharAt (\r
+ gStatementDimensions.LeftColumn + gPromptBlockWidth + gOptionBlockWidth + 1,\r
+ TopRow - SCROLL_ARROW_HEIGHT,\r
+ ARROW_UP\r
+ );\r
+ gST->ConOut->SetAttribute (gST->ConOut, GetFieldTextColor ());\r
}\r
+\r
//\r
- // 3. Update the row info which will be used by next menu.\r
+ // 2.Paint the menu.\r
//\r
- if (Link == TopOfScreen) {\r
- Row += MenuOption->Skip - SkipValue;\r
- } else {\r
- Row += MenuOption->Skip;\r
- }\r
+ for (Link = TopOfScreen; Link != &gMenuOption; Link = Link->ForwardLink) {\r
+ MenuOption = MENU_OPTION_FROM_LINK (Link);\r
+ MenuOption->Row = Row;\r
+ MenuOption->Col = Col;\r
+ if ((FormData->Attribute & HII_DISPLAY_MODAL) != 0) {\r
+ MenuOption->OptCol = gStatementDimensions.LeftColumn + LEFT_SKIPPED_COLUMNS + gPromptBlockWidth + gModalSkipColumn;\r
+ } else {\r
+ MenuOption->OptCol = gStatementDimensions.LeftColumn + LEFT_SKIPPED_COLUMNS + gPromptBlockWidth;\r
+ }\r
\r
- if (Row > BottomRow) {\r
- if (!ValueIsScroll (FALSE, Link)) {\r
- DownArrow = TRUE;\r
+ if (MenuOption->NestInStatement) {\r
+ MenuOption->Col += SUBTITLE_INDENT;\r
}\r
\r
- Row = BottomRow + 1;\r
- break;\r
- }\r
- }\r
+ //\r
+ // Save the highlight menu, will be used in CfRefreshHighLight case.\r
+ //\r
+ if (Link == NewPos) {\r
+ SavedMenuOption = MenuOption;\r
+ SkipHighLight = TRUE;\r
+ }\r
\r
- //\r
- // 3. Menus in this form may not cover all form, clean the remain field.\r
- //\r
- while (Row <= BottomRow) {\r
- if ((FormData->Attribute & HII_DISPLAY_MODAL) != 0) {\r
- PrintStringAtWithWidth(gStatementDimensions.LeftColumn + gModalSkipColumn, Row++, L"", gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn - 2 * gModalSkipColumn);\r
- } else {\r
- PrintStringAtWithWidth(gStatementDimensions.LeftColumn, Row++, L"", gStatementDimensions.RightColumn - gHelpBlockWidth - gStatementDimensions.LeftColumn);\r
- }\r
- }\r
-\r
- //\r
- // 4. Print the down arrow row.\r
- //\r
- if ((FormData->Attribute & HII_DISPLAY_MODAL) != 0) {\r
- PrintStringAtWithWidth(gStatementDimensions.LeftColumn + gModalSkipColumn, BottomRow + 1, L"", gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn - 2 * + gModalSkipColumn);\r
- } else {\r
- PrintStringAtWithWidth(gStatementDimensions.LeftColumn, BottomRow + 1, L"", gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn);\r
- }\r
- if (DownArrow) {\r
- gST->ConOut->SetAttribute (gST->ConOut, GetArrowColor ());\r
- PrintCharAt (\r
- gStatementDimensions.LeftColumn + gPromptBlockWidth + gOptionBlockWidth + 1,\r
- BottomRow + SCROLL_ARROW_HEIGHT,\r
- ARROW_DOWN\r
- );\r
- gST->ConOut->SetAttribute (gST->ConOut, GetFieldTextColor ());\r
- }\r
-\r
- MenuOption = NULL;\r
- }\r
- break;\r
-\r
- case CfRefreshHighLight:\r
+ if ((FormData->Attribute & HII_DISPLAY_MODAL) != 0) {\r
+ Status = DisplayOneMenu (\r
+ MenuOption,\r
+ MenuOption->Col - gStatementDimensions.LeftColumn,\r
+ gStatementDimensions.LeftColumn + gModalSkipColumn,\r
+ Link == TopOfScreen ? SkipValue : 0,\r
+ BottomRow,\r
+ (BOOLEAN)((Link == NewPos) && IsSelectable (MenuOption)),\r
+ TRUE\r
+ );\r
+ } else {\r
+ Status = DisplayOneMenu (\r
+ MenuOption,\r
+ MenuOption->Col - gStatementDimensions.LeftColumn,\r
+ gStatementDimensions.LeftColumn,\r
+ Link == TopOfScreen ? SkipValue : 0,\r
+ BottomRow,\r
+ (BOOLEAN)((Link == NewPos) && IsSelectable (MenuOption)),\r
+ TRUE\r
+ );\r
+ }\r
\r
- //\r
- // MenuOption: Last menu option that need to remove hilight\r
- // MenuOption is set to NULL in Repaint\r
- // NewPos: Current menu option that need to hilight\r
- //\r
- ControlFlag = CfUpdateHelpString;\r
+ if (EFI_ERROR (Status)) {\r
+ if (gMisMatch) {\r
+ return EFI_SUCCESS;\r
+ } else {\r
+ return Status;\r
+ }\r
+ }\r
\r
- UpdateHighlightMenuInfo(NewPos, TopOfScreen, SkipValue);\r
+ //\r
+ // 3. Update the row info which will be used by next menu.\r
+ //\r
+ if (Link == TopOfScreen) {\r
+ Row += MenuOption->Skip - SkipValue;\r
+ } else {\r
+ Row += MenuOption->Skip;\r
+ }\r
\r
- if (SkipHighLight) {\r
- SkipHighLight = FALSE;\r
- MenuOption = SavedMenuOption;\r
- RefreshKeyHelp(gFormData, SavedMenuOption->ThisTag, FALSE);\r
- break;\r
- }\r
+ if (Row > BottomRow) {\r
+ if (!ValueIsScroll (FALSE, Link)) {\r
+ DownArrow = TRUE;\r
+ }\r
\r
- if (IsListEmpty (&gMenuOption)) {\r
- //\r
- // No menu option, just update the hotkey filed.\r
- //\r
- RefreshKeyHelp(gFormData, NULL, FALSE);\r
- break;\r
- }\r
+ Row = BottomRow + 1;\r
+ break;\r
+ }\r
+ }\r
\r
- if (MenuOption != NULL && TopOfScreen == &MenuOption->Link) {\r
- Temp = SkipValue;\r
- } else {\r
- Temp = 0;\r
- }\r
- if (NewPos == TopOfScreen) {\r
- Temp2 = SkipValue;\r
- } else {\r
- Temp2 = 0;\r
- }\r
+ //\r
+ // 3. Menus in this form may not cover all form, clean the remain field.\r
+ //\r
+ while (Row <= BottomRow) {\r
+ if ((FormData->Attribute & HII_DISPLAY_MODAL) != 0) {\r
+ PrintStringAtWithWidth (gStatementDimensions.LeftColumn + gModalSkipColumn, Row++, L"", gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn - 2 * gModalSkipColumn);\r
+ } else {\r
+ PrintStringAtWithWidth (gStatementDimensions.LeftColumn, Row++, L"", gStatementDimensions.RightColumn - gHelpBlockWidth - gStatementDimensions.LeftColumn);\r
+ }\r
+ }\r
\r
- if (NewPos != NULL && (MenuOption == NULL || NewPos != &MenuOption->Link)) {\r
- if (MenuOption != NULL) {\r
//\r
- // Remove the old highlight menu.\r
+ // 4. Print the down arrow row.\r
//\r
- Status = DisplayOneMenu (MenuOption, \r
- MenuOption->Col - gStatementDimensions.LeftColumn,\r
- gStatementDimensions.LeftColumn, \r
- Temp, \r
- BottomRow,\r
- FALSE,\r
- FALSE\r
- );\r
+ if ((FormData->Attribute & HII_DISPLAY_MODAL) != 0) {\r
+ PrintStringAtWithWidth (gStatementDimensions.LeftColumn + gModalSkipColumn, BottomRow + 1, L"", gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn - 2 * +gModalSkipColumn);\r
+ } else {\r
+ PrintStringAtWithWidth (gStatementDimensions.LeftColumn, BottomRow + 1, L"", gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn);\r
+ }\r
+\r
+ if (DownArrow) {\r
+ gST->ConOut->SetAttribute (gST->ConOut, GetArrowColor ());\r
+ PrintCharAt (\r
+ gStatementDimensions.LeftColumn + gPromptBlockWidth + gOptionBlockWidth + 1,\r
+ BottomRow + SCROLL_ARROW_HEIGHT,\r
+ ARROW_DOWN\r
+ );\r
+ gST->ConOut->SetAttribute (gST->ConOut, GetFieldTextColor ());\r
+ }\r
+\r
+ MenuOption = NULL;\r
}\r
\r
+ break;\r
+\r
+ case CfRefreshHighLight:\r
+\r
//\r
- // This is the current selected statement\r
+ // MenuOption: Last menu option that need to remove hilight\r
+ // MenuOption is set to NULL in Repaint\r
+ // NewPos: Current menu option that need to hilight\r
//\r
- MenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
- RefreshKeyHelp(gFormData, MenuOption->ThisTag, FALSE);\r
+ ControlFlag = CfUpdateHelpString;\r
+\r
+ ASSERT (NewPos != NULL);\r
+ UpdateHighlightMenuInfo (NewPos, TopOfScreen, SkipValue);\r
\r
- if (!IsSelectable (MenuOption)) {\r
+ if (SkipHighLight) {\r
+ SkipHighLight = FALSE;\r
+ MenuOption = SavedMenuOption;\r
+ RefreshKeyHelp (gFormData, SavedMenuOption->ThisTag, FALSE);\r
break;\r
}\r
\r
- Status = DisplayOneMenu (MenuOption, \r
- MenuOption->Col - gStatementDimensions.LeftColumn,\r
- gStatementDimensions.LeftColumn, \r
- Temp2, \r
- BottomRow,\r
- TRUE,\r
- FALSE\r
- );\r
- }\r
- break;\r
-\r
- case CfUpdateHelpString:\r
- ControlFlag = CfPrepareToReadKey;\r
- if ((FormData->Attribute & HII_DISPLAY_MODAL) != 0) {\r
- break;\r
- }\r
-\r
- //\r
- // NewLine means only update highlight menu (remove old highlight and highlith\r
- // the new one), not need to full repain the form.\r
- //\r
- if (Repaint || NewLine) {\r
if (IsListEmpty (&gMenuOption)) {\r
//\r
- // Don't print anything if no mwnu option.\r
+ // No menu option, just update the hotkey filed.\r
//\r
- StringPtr = GetToken (STRING_TOKEN (EMPTY_STRING), gHiiHandle);\r
+ RefreshKeyHelp (gFormData, NULL, FALSE);\r
+ break;\r
+ }\r
+\r
+ if ((MenuOption != NULL) && (TopOfScreen == &MenuOption->Link)) {\r
+ Temp = SkipValue;\r
+ } else {\r
+ Temp = 0;\r
+ }\r
+\r
+ if (NewPos == TopOfScreen) {\r
+ Temp2 = SkipValue;\r
} else {\r
+ Temp2 = 0;\r
+ }\r
+\r
+ if ((MenuOption == NULL) || (NewPos != &MenuOption->Link)) {\r
+ if (MenuOption != NULL) {\r
+ //\r
+ // Remove the old highlight menu.\r
+ //\r
+ Status = DisplayOneMenu (\r
+ MenuOption,\r
+ MenuOption->Col - gStatementDimensions.LeftColumn,\r
+ gStatementDimensions.LeftColumn,\r
+ Temp,\r
+ BottomRow,\r
+ FALSE,\r
+ FALSE\r
+ );\r
+ }\r
+\r
//\r
- // Don't print anything if it is a NULL help token\r
+ // This is the current selected statement\r
//\r
- ASSERT(MenuOption != NULL);\r
- HelpInfo = ((EFI_IFR_STATEMENT_HEADER *) ((CHAR8 *)MenuOption->ThisTag->OpCode + sizeof (EFI_IFR_OP_HEADER)))->Help;\r
- Statement = MenuOption->ThisTag;\r
- StatementValue = &Statement->CurrentValue;\r
- if (HelpInfo == 0 || !IsSelectable (MenuOption)) {\r
- if ((Statement->OpCode->OpCode == EFI_IFR_DATE_OP && StatementValue->Value.date.Month== 0xff)||(Statement->OpCode->OpCode == EFI_IFR_TIME_OP && StatementValue->Value.time.Hour == 0xff)){\r
- StringPtr = GetToken (STRING_TOKEN (GET_TIME_FAIL), gHiiHandle);\r
- } else {\r
- StringPtr = GetToken (STRING_TOKEN (EMPTY_STRING), gHiiHandle);\r
- }\r
- } else {\r
- if ((Statement->OpCode->OpCode == EFI_IFR_DATE_OP && StatementValue->Value.date.Month== 0xff)||(Statement->OpCode->OpCode == EFI_IFR_TIME_OP && StatementValue->Value.time.Hour == 0xff)){\r
- StringRightPtr = GetToken (HelpInfo, gFormData->HiiHandle);\r
- StringErrorPtr = GetToken (STRING_TOKEN (GET_TIME_FAIL), gHiiHandle);\r
- StringPtr = AllocateZeroPool ((StrLen (StringRightPtr) + StrLen (StringErrorPtr)+ 1 ) * sizeof (CHAR16));\r
- StrCpyS (StringPtr, StrLen (StringRightPtr) + StrLen (StringErrorPtr) + 1, StringRightPtr);\r
- StrCatS (StringPtr, StrLen (StringRightPtr) + StrLen (StringErrorPtr) + 1, StringErrorPtr);\r
- FreePool (StringRightPtr);\r
- FreePool (StringErrorPtr);\r
- } else {\r
- StringPtr = GetToken (HelpInfo, gFormData->HiiHandle);\r
- }\r
+ MenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
+ RefreshKeyHelp (gFormData, MenuOption->ThisTag, FALSE);\r
+\r
+ if (!IsSelectable (MenuOption)) {\r
+ break;\r
}\r
+\r
+ Status = DisplayOneMenu (\r
+ MenuOption,\r
+ MenuOption->Col - gStatementDimensions.LeftColumn,\r
+ gStatementDimensions.LeftColumn,\r
+ Temp2,\r
+ BottomRow,\r
+ TRUE,\r
+ FALSE\r
+ );\r
+ }\r
+\r
+ break;\r
+\r
+ case CfUpdateHelpString:\r
+ ControlFlag = CfPrepareToReadKey;\r
+ if ((FormData->Attribute & HII_DISPLAY_MODAL) != 0) {\r
+ break;\r
}\r
\r
- RowCount = BottomRow - TopRow + 1;\r
- HelpPageIndex = 0;\r
//\r
- // 1.Calculate how many line the help string need to print.\r
+ // NewLine means only update highlight menu (remove old highlight and highlith\r
+ // the new one), not need to full repain the form.\r
//\r
- if (HelpString != NULL) {\r
- FreePool (HelpString);\r
- HelpString = NULL;\r
- }\r
- HelpLine = ProcessHelpString (StringPtr, &HelpString, &EachLineWidth, RowCount);\r
- FreePool (StringPtr);\r
-\r
- if (HelpLine > RowCount) {\r
- MultiHelpPage = TRUE;\r
- StringPtr = GetToken (STRING_TOKEN(ADJUST_HELP_PAGE_UP), gHiiHandle);\r
- if (HelpHeaderString != NULL) {\r
- FreePool (HelpHeaderString);\r
- HelpHeaderString = NULL;\r
- }\r
- HelpHeaderLine = ProcessHelpString (StringPtr, &HelpHeaderString, &HeaderLineWidth, 0);\r
- FreePool (StringPtr);\r
- StringPtr = GetToken (STRING_TOKEN(ADJUST_HELP_PAGE_DOWN), gHiiHandle);\r
- if (HelpBottomString != NULL) {\r
- FreePool (HelpBottomString);\r
- HelpBottomString = NULL;\r
+ if (Repaint || NewLine) {\r
+ if (IsListEmpty (&gMenuOption)) {\r
+ //\r
+ // Don't print anything if no mwnu option.\r
+ //\r
+ StringPtr = GetToken (STRING_TOKEN (EMPTY_STRING), gHiiHandle);\r
+ } else {\r
+ //\r
+ // Don't print anything if it is a NULL help token\r
+ //\r
+ ASSERT (MenuOption != NULL);\r
+ HelpInfo = ((EFI_IFR_STATEMENT_HEADER *)((CHAR8 *)MenuOption->ThisTag->OpCode + sizeof (EFI_IFR_OP_HEADER)))->Help;\r
+ Statement = MenuOption->ThisTag;\r
+ StatementValue = &Statement->CurrentValue;\r
+ if ((HelpInfo == 0) || !IsSelectable (MenuOption)) {\r
+ if (((Statement->OpCode->OpCode == EFI_IFR_DATE_OP) && (StatementValue->Value.date.Month == 0xff)) || ((Statement->OpCode->OpCode == EFI_IFR_TIME_OP) && (StatementValue->Value.time.Hour == 0xff))) {\r
+ StringPtr = GetToken (STRING_TOKEN (GET_TIME_FAIL), gHiiHandle);\r
+ } else {\r
+ StringPtr = GetToken (STRING_TOKEN (EMPTY_STRING), gHiiHandle);\r
+ }\r
+ } else {\r
+ if (((Statement->OpCode->OpCode == EFI_IFR_DATE_OP) && (StatementValue->Value.date.Month == 0xff)) || ((Statement->OpCode->OpCode == EFI_IFR_TIME_OP) && (StatementValue->Value.time.Hour == 0xff))) {\r
+ StringRightPtr = GetToken (HelpInfo, gFormData->HiiHandle);\r
+ StringErrorPtr = GetToken (STRING_TOKEN (GET_TIME_FAIL), gHiiHandle);\r
+ StringPtr = AllocateZeroPool ((StrLen (StringRightPtr) + StrLen (StringErrorPtr)+ 1) * sizeof (CHAR16));\r
+ StrCpyS (StringPtr, StrLen (StringRightPtr) + StrLen (StringErrorPtr) + 1, StringRightPtr);\r
+ StrCatS (StringPtr, StrLen (StringRightPtr) + StrLen (StringErrorPtr) + 1, StringErrorPtr);\r
+ FreePool (StringRightPtr);\r
+ FreePool (StringErrorPtr);\r
+ } else {\r
+ StringPtr = GetToken (HelpInfo, gFormData->HiiHandle);\r
+ }\r
+ }\r
}\r
- HelpBottomLine = ProcessHelpString (StringPtr, &HelpBottomString, &BottomLineWidth, 0);\r
- FreePool (StringPtr);\r
+\r
+ RowCount = BottomRow - TopRow + 1;\r
+ HelpPageIndex = 0;\r
//\r
- // Calculate the help page count.\r
+ // 1.Calculate how many line the help string need to print.\r
//\r
- if (HelpLine > 2 * RowCount - 2) {\r
- HelpPageCount = (HelpLine - RowCount + 1) / (RowCount - 2) + 1;\r
- if ((HelpLine - RowCount + 1) % (RowCount - 2) != 0) {\r
- HelpPageCount += 1;\r
+ if (HelpString != NULL) {\r
+ FreePool (HelpString);\r
+ HelpString = NULL;\r
+ }\r
+\r
+ HelpLine = ProcessHelpString (StringPtr, &HelpString, &EachLineWidth, RowCount);\r
+ FreePool (StringPtr);\r
+\r
+ if (HelpLine > RowCount) {\r
+ MultiHelpPage = TRUE;\r
+ StringPtr = GetToken (STRING_TOKEN (ADJUST_HELP_PAGE_UP), gHiiHandle);\r
+ if (HelpHeaderString != NULL) {\r
+ FreePool (HelpHeaderString);\r
+ HelpHeaderString = NULL;\r
+ }\r
+\r
+ HelpHeaderLine = ProcessHelpString (StringPtr, &HelpHeaderString, &HeaderLineWidth, 0);\r
+ FreePool (StringPtr);\r
+ StringPtr = GetToken (STRING_TOKEN (ADJUST_HELP_PAGE_DOWN), gHiiHandle);\r
+ if (HelpBottomString != NULL) {\r
+ FreePool (HelpBottomString);\r
+ HelpBottomString = NULL;\r
+ }\r
+\r
+ HelpBottomLine = ProcessHelpString (StringPtr, &HelpBottomString, &BottomLineWidth, 0);\r
+ FreePool (StringPtr);\r
+ //\r
+ // Calculate the help page count.\r
+ //\r
+ if (HelpLine > 2 * RowCount - 2) {\r
+ HelpPageCount = (HelpLine - RowCount + 1) / (RowCount - 2) + 1;\r
+ if ((HelpLine - RowCount + 1) % (RowCount - 2) != 0) {\r
+ HelpPageCount += 1;\r
+ }\r
+ } else {\r
+ HelpPageCount = 2;\r
}\r
} else {\r
- HelpPageCount = 2;\r
+ MultiHelpPage = FALSE;\r
}\r
- } else {\r
- MultiHelpPage = FALSE;\r
}\r
- }\r
\r
- //\r
- // Check whether need to show the 'More(U/u)' at the begin.\r
- // Base on current direct info, here shows aligned to the right side of the column.\r
- // If the direction is multi line and aligned to right side may have problem, so \r
- // add ASSERT code here.\r
- //\r
- if (HelpPageIndex > 0) {\r
- gST->ConOut->SetAttribute (gST->ConOut, GetInfoTextColor ());\r
- for (Index = 0; Index < HelpHeaderLine; Index++) {\r
- ASSERT (HelpHeaderLine == 1);\r
- ASSERT (GetStringWidth (HelpHeaderString) / 2 < (UINTN) (gHelpBlockWidth - 1));\r
- PrintStringAtWithWidth (\r
- gStatementDimensions.RightColumn - gHelpBlockWidth,\r
- Index + TopRow,\r
- gEmptyString,\r
- gHelpBlockWidth\r
- );\r
- PrintStringAt (\r
- gStatementDimensions.RightColumn - GetStringWidth (HelpHeaderString) / 2 - 1,\r
- Index + TopRow,\r
- &HelpHeaderString[Index * HeaderLineWidth]\r
- );\r
+ //\r
+ // Check whether need to show the 'More(U/u)' at the begin.\r
+ // Base on current direct info, here shows aligned to the right side of the column.\r
+ // If the direction is multi line and aligned to right side may have problem, so\r
+ // add ASSERT code here.\r
+ //\r
+ if (HelpPageIndex > 0) {\r
+ gST->ConOut->SetAttribute (gST->ConOut, GetInfoTextColor ());\r
+ for (Index = 0; Index < HelpHeaderLine; Index++) {\r
+ ASSERT (HelpHeaderLine == 1);\r
+ ASSERT (GetStringWidth (HelpHeaderString) / 2 < ((UINT32)gHelpBlockWidth - 1));\r
+ PrintStringAtWithWidth (\r
+ gStatementDimensions.RightColumn - gHelpBlockWidth,\r
+ Index + TopRow,\r
+ gEmptyString,\r
+ gHelpBlockWidth\r
+ );\r
+ PrintStringAt (\r
+ gStatementDimensions.RightColumn - GetStringWidth (HelpHeaderString) / 2 - 1,\r
+ Index + TopRow,\r
+ &HelpHeaderString[Index * HeaderLineWidth]\r
+ );\r
+ }\r
}\r
- }\r
\r
- gST->ConOut->SetAttribute (gST->ConOut, GetHelpTextColor ());\r
- //\r
- // Print the help string info.\r
- //\r
- if (!MultiHelpPage) {\r
- for (Index = 0; Index < HelpLine; Index++) {\r
- PrintStringAtWithWidth (\r
- gStatementDimensions.RightColumn - gHelpBlockWidth,\r
- Index + TopRow,\r
- &HelpString[Index * EachLineWidth],\r
- gHelpBlockWidth\r
- );\r
- }\r
- for (; Index < RowCount; Index ++) {\r
- PrintStringAtWithWidth (\r
- gStatementDimensions.RightColumn - gHelpBlockWidth,\r
- Index + TopRow,\r
- gEmptyString,\r
- gHelpBlockWidth\r
- );\r
- }\r
- gST->ConOut->SetCursorPosition(gST->ConOut, gStatementDimensions.RightColumn-1, BottomRow);\r
- } else {\r
- if (HelpPageIndex == 0) {\r
- for (Index = 0; Index < RowCount - HelpBottomLine; Index++) {\r
+ gST->ConOut->SetAttribute (gST->ConOut, GetHelpTextColor ());\r
+ //\r
+ // Print the help string info.\r
+ //\r
+ if (!MultiHelpPage) {\r
+ for (Index = 0; Index < HelpLine; Index++) {\r
PrintStringAtWithWidth (\r
gStatementDimensions.RightColumn - gHelpBlockWidth,\r
Index + TopRow,\r
gHelpBlockWidth\r
);\r
}\r
- } else {\r
- for (Index = 0; (Index < RowCount - HelpBottomLine - HelpHeaderLine) && \r
- (Index + HelpPageIndex * (RowCount - 2) + 1 < HelpLine); Index++) {\r
+\r
+ for ( ; Index < RowCount; Index++) {\r
PrintStringAtWithWidth (\r
gStatementDimensions.RightColumn - gHelpBlockWidth,\r
- Index + TopRow + HelpHeaderLine,\r
- &HelpString[(Index + HelpPageIndex * (RowCount - 2) + 1)* EachLineWidth],\r
+ Index + TopRow,\r
+ gEmptyString,\r
gHelpBlockWidth\r
);\r
}\r
- if (HelpPageIndex == HelpPageCount - 1) {\r
- for (; Index < RowCount - HelpHeaderLine; Index ++) {\r
+\r
+ gST->ConOut->SetCursorPosition (gST->ConOut, gStatementDimensions.RightColumn-1, BottomRow);\r
+ } else {\r
+ if (HelpPageIndex == 0) {\r
+ for (Index = 0; Index < RowCount - HelpBottomLine; Index++) {\r
+ PrintStringAtWithWidth (\r
+ gStatementDimensions.RightColumn - gHelpBlockWidth,\r
+ Index + TopRow,\r
+ &HelpString[Index * EachLineWidth],\r
+ gHelpBlockWidth\r
+ );\r
+ }\r
+ } else {\r
+ for (Index = 0; (Index < RowCount - HelpBottomLine - HelpHeaderLine) &&\r
+ (Index + HelpPageIndex * (RowCount - 2) + 1 < HelpLine); Index++)\r
+ {\r
PrintStringAtWithWidth (\r
gStatementDimensions.RightColumn - gHelpBlockWidth,\r
Index + TopRow + HelpHeaderLine,\r
- gEmptyString,\r
+ &HelpString[(Index + HelpPageIndex * (RowCount - 2) + 1)* EachLineWidth],\r
gHelpBlockWidth\r
);\r
}\r
- gST->ConOut->SetCursorPosition(gST->ConOut, gStatementDimensions.RightColumn-1, BottomRow);\r
- }\r
- } \r
- }\r
-\r
- //\r
- // Check whether need to print the 'More(D/d)' at the bottom.\r
- // Base on current direct info, here shows aligned to the right side of the column.\r
- // If the direction is multi line and aligned to right side may have problem, so \r
- // add ASSERT code here.\r
- //\r
- if (HelpPageIndex < HelpPageCount - 1 && MultiHelpPage) {\r
- gST->ConOut->SetAttribute (gST->ConOut, GetInfoTextColor ());\r
- for (Index = 0; Index < HelpBottomLine; Index++) {\r
- ASSERT (HelpBottomLine == 1);\r
- ASSERT (GetStringWidth (HelpBottomString) / 2 < (UINTN) (gHelpBlockWidth - 1)); \r
- PrintStringAtWithWidth (\r
- gStatementDimensions.RightColumn - gHelpBlockWidth,\r
- BottomRow + Index - HelpBottomLine + 1,\r
- gEmptyString,\r
- gHelpBlockWidth\r
- );\r
- PrintStringAt (\r
- gStatementDimensions.RightColumn - GetStringWidth (HelpBottomString) / 2 - 1,\r
- BottomRow + Index - HelpBottomLine + 1,\r
- &HelpBottomString[Index * BottomLineWidth]\r
- );\r
- }\r
- }\r
- //\r
- // Reset this flag every time we finish using it.\r
- //\r
- Repaint = FALSE;\r
- NewLine = FALSE;\r
- break;\r
-\r
- case CfPrepareToReadKey:\r
- ControlFlag = CfReadKey;\r
- ScreenOperation = UiNoOperation;\r
- break;\r
\r
- case CfReadKey:\r
- ControlFlag = CfScreenOperation;\r
+ if (HelpPageIndex == HelpPageCount - 1) {\r
+ for ( ; Index < RowCount - HelpHeaderLine; Index++) {\r
+ PrintStringAtWithWidth (\r
+ gStatementDimensions.RightColumn - gHelpBlockWidth,\r
+ Index + TopRow + HelpHeaderLine,\r
+ gEmptyString,\r
+ gHelpBlockWidth\r
+ );\r
+ }\r
\r
- //\r
- // Wait for user's selection\r
- //\r
- while (TRUE) {\r
- Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);\r
- if (!EFI_ERROR (Status)) {\r
- EventType = UIEventKey;\r
- break;\r
+ gST->ConOut->SetCursorPosition (gST->ConOut, gStatementDimensions.RightColumn-1, BottomRow);\r
+ }\r
+ }\r
}\r
\r
//\r
- // If we encounter error, continue to read another key in.\r
+ // Check whether need to print the 'More(D/d)' at the bottom.\r
+ // Base on current direct info, here shows aligned to the right side of the column.\r
+ // If the direction is multi line and aligned to right side may have problem, so\r
+ // add ASSERT code here.\r
//\r
- if (Status != EFI_NOT_READY) {\r
- continue;\r
- }\r
- \r
- EventType = UiWaitForEvent(gST->ConIn->WaitForKey);\r
- if (EventType == UIEventKey) {\r
- gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);\r
+ if ((HelpPageIndex < HelpPageCount - 1) && MultiHelpPage) {\r
+ gST->ConOut->SetAttribute (gST->ConOut, GetInfoTextColor ());\r
+ for (Index = 0; Index < HelpBottomLine; Index++) {\r
+ ASSERT (HelpBottomLine == 1);\r
+ ASSERT (GetStringWidth (HelpBottomString) / 2 < ((UINT32)gHelpBlockWidth - 1));\r
+ PrintStringAtWithWidth (\r
+ gStatementDimensions.RightColumn - gHelpBlockWidth,\r
+ BottomRow + Index - HelpBottomLine + 1,\r
+ gEmptyString,\r
+ gHelpBlockWidth\r
+ );\r
+ PrintStringAt (\r
+ gStatementDimensions.RightColumn - GetStringWidth (HelpBottomString) / 2 - 1,\r
+ BottomRow + Index - HelpBottomLine + 1,\r
+ &HelpBottomString[Index * BottomLineWidth]\r
+ );\r
+ }\r
}\r
- break;\r
- }\r
\r
- if (EventType == UIEventDriver) {\r
- gMisMatch = TRUE;\r
- gUserInput->Action = BROWSER_ACTION_NONE;\r
- ControlFlag = CfExit;\r
- break;\r
- }\r
- \r
- if (EventType == UIEventTimeOut) {\r
- gUserInput->Action = BROWSER_ACTION_FORM_EXIT;\r
- ControlFlag = CfExit;\r
+ //\r
+ // Reset this flag every time we finish using it.\r
+ //\r
+ Repaint = FALSE;\r
+ NewLine = FALSE;\r
break;\r
- }\r
\r
- switch (Key.UnicodeChar) {\r
- case CHAR_CARRIAGE_RETURN:\r
- if(MenuOption == NULL || MenuOption->GrayOut || MenuOption->ReadOnly) {\r
- ControlFlag = CfReadKey;\r
- break;\r
- }\r
-\r
- ScreenOperation = UiSelect;\r
- gDirection = 0;\r
+ case CfPrepareToReadKey:\r
+ ControlFlag = CfReadKey;\r
+ ScreenOperation = UiNoOperation;\r
break;\r
\r
- //\r
- // We will push the adjustment of these numeric values directly to the input handler\r
- // NOTE: we won't handle manual input numeric\r
- //\r
- case '+':\r
- case '-':\r
+ case CfReadKey:\r
+ ControlFlag = CfScreenOperation;\r
+\r
//\r
- // If the screen has no menu items, and the user didn't select UiReset\r
- // ignore the selection and go back to reading keys.\r
+ // Wait for user's selection\r
//\r
- ASSERT(MenuOption != NULL);\r
- if(IsListEmpty (&gMenuOption) || MenuOption->GrayOut || MenuOption->ReadOnly) {\r
- ControlFlag = CfReadKey;\r
- break;\r
- }\r
-\r
- Statement = MenuOption->ThisTag;\r
- if ((Statement->OpCode->OpCode == EFI_IFR_DATE_OP)\r
- || (Statement->OpCode->OpCode == EFI_IFR_TIME_OP)\r
- || ((Statement->OpCode->OpCode == EFI_IFR_NUMERIC_OP) && (GetFieldFromNum(Statement->OpCode) != 0))\r
- ){\r
- if (Key.UnicodeChar == '+') {\r
- gDirection = SCAN_RIGHT;\r
- } else {\r
- gDirection = SCAN_LEFT;\r
- }\r
- \r
- Status = ProcessOptions (MenuOption, TRUE, &OptionString, TRUE);\r
- if (OptionString != NULL) {\r
- FreePool (OptionString);\r
- }\r
- if (EFI_ERROR (Status)) {\r
- //\r
- // Repaint to clear possible error prompt pop-up\r
- //\r
- Repaint = TRUE;\r
- NewLine = TRUE;\r
- } else {\r
- ControlFlag = CfExit;\r
+ while (TRUE) {\r
+ Status = gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);\r
+ if (!EFI_ERROR (Status)) {\r
+ EventType = UIEventKey;\r
+ break;\r
}\r
- }\r
- break;\r
\r
- case '^':\r
- ScreenOperation = UiUp;\r
- break;\r
+ //\r
+ // If we encounter error, continue to read another key in.\r
+ //\r
+ if (Status != EFI_NOT_READY) {\r
+ continue;\r
+ }\r
\r
- case 'V':\r
- case 'v':\r
- ScreenOperation = UiDown;\r
- break;\r
+ EventType = UiWaitForEvent (gST->ConIn->WaitForKey);\r
+ if (EventType == UIEventKey) {\r
+ gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);\r
+ }\r
\r
- case ' ':\r
- if(IsListEmpty (&gMenuOption)) {\r
- ControlFlag = CfReadKey;\r
break;\r
}\r
- \r
- ASSERT(MenuOption != NULL);\r
- if (MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_CHECKBOX_OP && !MenuOption->GrayOut && !MenuOption->ReadOnly) {\r
- ScreenOperation = UiSelect;\r
- }\r
- break;\r
\r
- case 'D':\r
- case 'd':\r
- if (!MultiHelpPage) {\r
- ControlFlag = CfReadKey;\r
+ if (EventType == UIEventDriver) {\r
+ gMisMatch = TRUE;\r
+ gUserInput->Action = BROWSER_ACTION_NONE;\r
+ ControlFlag = CfExit;\r
break;\r
}\r
- ControlFlag = CfUpdateHelpString;\r
- HelpPageIndex = HelpPageIndex < HelpPageCount - 1 ? HelpPageIndex + 1 : HelpPageCount - 1;\r
- break;\r
\r
- case 'U':\r
- case 'u':\r
- if (!MultiHelpPage) {\r
- ControlFlag = CfReadKey;\r
+ if (EventType == UIEventTimeOut) {\r
+ gUserInput->Action = BROWSER_ACTION_FORM_EXIT;\r
+ ControlFlag = CfExit;\r
break;\r
}\r
- ControlFlag = CfUpdateHelpString;\r
- HelpPageIndex = HelpPageIndex > 0 ? HelpPageIndex - 1 : 0;\r
- break;\r
\r
- case CHAR_NULL:\r
- for (Index = 0; Index < mScanCodeNumber; Index++) {\r
- if (Key.ScanCode == gScanCodeToOperation[Index].ScanCode) {\r
- ScreenOperation = gScanCodeToOperation[Index].ScreenOperation;\r
+ switch (Key.UnicodeChar) {\r
+ case CHAR_CARRIAGE_RETURN:\r
+ if ((MenuOption == NULL) || MenuOption->GrayOut || MenuOption->ReadOnly) {\r
+ ControlFlag = CfReadKey;\r
+ break;\r
+ }\r
+\r
+ ScreenOperation = UiSelect;\r
+ gDirection = 0;\r
break;\r
- }\r
- }\r
- \r
- if (((FormData->Attribute & HII_DISPLAY_MODAL) != 0) && (Key.ScanCode == SCAN_ESC || Index == mScanCodeNumber)) {\r
+\r
//\r
- // ModalForm has no ESC key and Hot Key.\r
+ // We will push the adjustment of these numeric values directly to the input handler\r
+ // NOTE: we won't handle manual input numeric\r
//\r
- ControlFlag = CfReadKey;\r
- } else if (Index == mScanCodeNumber) {\r
+ case '+':\r
+ case '-':\r
+ //\r
+ // If the screen has no menu items, and the user didn't select UiReset\r
+ // ignore the selection and go back to reading keys.\r
+ //\r
+ ASSERT (MenuOption != NULL);\r
+ if (IsListEmpty (&gMenuOption) || MenuOption->GrayOut || MenuOption->ReadOnly) {\r
+ ControlFlag = CfReadKey;\r
+ break;\r
+ }\r
+\r
+ Statement = MenuOption->ThisTag;\r
+ if ( (Statement->OpCode->OpCode == EFI_IFR_DATE_OP)\r
+ || (Statement->OpCode->OpCode == EFI_IFR_TIME_OP)\r
+ || ((Statement->OpCode->OpCode == EFI_IFR_NUMERIC_OP) && (GetFieldFromNum (Statement->OpCode) != 0))\r
+ )\r
+ {\r
+ if (Key.UnicodeChar == '+') {\r
+ gDirection = SCAN_RIGHT;\r
+ } else {\r
+ gDirection = SCAN_LEFT;\r
+ }\r
+\r
+ Status = ProcessOptions (MenuOption, TRUE, &OptionString, TRUE);\r
+ if (OptionString != NULL) {\r
+ FreePool (OptionString);\r
+ }\r
+\r
+ if (EFI_ERROR (Status)) {\r
+ //\r
+ // Repaint to clear possible error prompt pop-up\r
+ //\r
+ Repaint = TRUE;\r
+ NewLine = TRUE;\r
+ } else {\r
+ ControlFlag = CfExit;\r
+ }\r
+ }\r
+\r
+ break;\r
+\r
+ case '^':\r
+ ScreenOperation = UiUp;\r
+ break;\r
+\r
+ case 'V':\r
+ case 'v':\r
+ ScreenOperation = UiDown;\r
+ break;\r
+\r
+ case ' ':\r
+ if (IsListEmpty (&gMenuOption)) {\r
+ ControlFlag = CfReadKey;\r
+ break;\r
+ }\r
+\r
+ ASSERT (MenuOption != NULL);\r
+ if ((MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_CHECKBOX_OP) && !MenuOption->GrayOut && !MenuOption->ReadOnly) {\r
+ ScreenOperation = UiSelect;\r
+ }\r
+\r
+ break;\r
+\r
+ case 'D':\r
+ case 'd':\r
+ if (!MultiHelpPage) {\r
+ ControlFlag = CfReadKey;\r
+ break;\r
+ }\r
+\r
+ ControlFlag = CfUpdateHelpString;\r
+ HelpPageIndex = HelpPageIndex < HelpPageCount - 1 ? HelpPageIndex + 1 : HelpPageCount - 1;\r
+ break;\r
+\r
+ case 'U':\r
+ case 'u':\r
+ if (!MultiHelpPage) {\r
+ ControlFlag = CfReadKey;\r
+ break;\r
+ }\r
+\r
+ ControlFlag = CfUpdateHelpString;\r
+ HelpPageIndex = HelpPageIndex > 0 ? HelpPageIndex - 1 : 0;\r
+ break;\r
+\r
+ case CHAR_NULL:\r
+ for (Index = 0; Index < mScanCodeNumber; Index++) {\r
+ if (Key.ScanCode == gScanCodeToOperation[Index].ScanCode) {\r
+ ScreenOperation = gScanCodeToOperation[Index].ScreenOperation;\r
+ break;\r
+ }\r
+ }\r
+\r
+ if (((FormData->Attribute & HII_DISPLAY_MODAL) != 0) && ((Key.ScanCode == SCAN_ESC) || (Index == mScanCodeNumber))) {\r
+ //\r
+ // ModalForm has no ESC key and Hot Key.\r
+ //\r
+ ControlFlag = CfReadKey;\r
+ } else if (Index == mScanCodeNumber) {\r
+ //\r
+ // Check whether Key matches the registered hot key.\r
+ //\r
+ HotKey = NULL;\r
+ HotKey = GetHotKeyFromRegisterList (&Key);\r
+ if (HotKey != NULL) {\r
+ ScreenOperation = UiHotKey;\r
+ }\r
+ }\r
+\r
+ break;\r
+ }\r
+\r
+ break;\r
+\r
+ case CfScreenOperation:\r
+ if ((ScreenOperation != UiReset) && (ScreenOperation != UiHotKey)) {\r
//\r
- // Check whether Key matches the registered hot key.\r
+ // If the screen has no menu items, and the user didn't select UiReset or UiHotKey\r
+ // ignore the selection and go back to reading keys.\r
//\r
- HotKey = NULL;\r
- HotKey = GetHotKeyFromRegisterList (&Key);\r
- if (HotKey != NULL) {\r
- ScreenOperation = UiHotKey;\r
+ if (IsListEmpty (&gMenuOption)) {\r
+ ControlFlag = CfReadKey;\r
+ break;\r
}\r
}\r
- break;\r
- }\r
- break;\r
\r
- case CfScreenOperation:\r
- if ((ScreenOperation != UiReset) && (ScreenOperation != UiHotKey)) {\r
- //\r
- // If the screen has no menu items, and the user didn't select UiReset or UiHotKey\r
- // ignore the selection and go back to reading keys.\r
- //\r
- if (IsListEmpty (&gMenuOption)) {\r
- ControlFlag = CfReadKey;\r
- break;\r
+ for (Index = 0;\r
+ Index < ARRAY_SIZE (gScreenOperationToControlFlag);\r
+ Index++\r
+ )\r
+ {\r
+ if (ScreenOperation == gScreenOperationToControlFlag[Index].ScreenOperation) {\r
+ ControlFlag = gScreenOperationToControlFlag[Index].ControlFlag;\r
+ break;\r
+ }\r
}\r
- }\r
\r
- for (Index = 0;\r
- Index < sizeof (gScreenOperationToControlFlag) / sizeof (gScreenOperationToControlFlag[0]);\r
- Index++\r
- ) {\r
- if (ScreenOperation == gScreenOperationToControlFlag[Index].ScreenOperation) {\r
- ControlFlag = gScreenOperationToControlFlag[Index].ControlFlag;\r
+ break;\r
+\r
+ case CfUiSelect:\r
+ ControlFlag = CfRepaint;\r
+\r
+ ASSERT (MenuOption != NULL);\r
+ Statement = MenuOption->ThisTag;\r
+ if (Statement->OpCode->OpCode == EFI_IFR_TEXT_OP) {\r
break;\r
}\r
- }\r
- break;\r
\r
- case CfUiSelect:\r
- ControlFlag = CfRepaint;\r
+ switch (Statement->OpCode->OpCode) {\r
+ case EFI_IFR_REF_OP:\r
+ case EFI_IFR_ACTION_OP:\r
+ case EFI_IFR_RESET_BUTTON_OP:\r
+ ControlFlag = CfExit;\r
+ break;\r
\r
- ASSERT(MenuOption != NULL);\r
- Statement = MenuOption->ThisTag;\r
- if (Statement->OpCode->OpCode == EFI_IFR_TEXT_OP) {\r
- break;\r
- }\r
+ default:\r
+ //\r
+ // Editable Questions: oneof, ordered list, checkbox, numeric, string, password\r
+ //\r
+ RefreshKeyHelp (gFormData, Statement, TRUE);\r
+ Status = ProcessOptions (MenuOption, TRUE, &OptionString, TRUE);\r
+\r
+ if (OptionString != NULL) {\r
+ FreePool (OptionString);\r
+ }\r
+\r
+ if (EFI_ERROR (Status)) {\r
+ Repaint = TRUE;\r
+ NewLine = TRUE;\r
+ RefreshKeyHelp (gFormData, Statement, FALSE);\r
+ break;\r
+ } else {\r
+ ControlFlag = CfExit;\r
+ break;\r
+ }\r
+ }\r
\r
- switch (Statement->OpCode->OpCode) {\r
- case EFI_IFR_REF_OP:\r
- case EFI_IFR_ACTION_OP:\r
- case EFI_IFR_RESET_BUTTON_OP:\r
- ControlFlag = CfExit;\r
break;\r
\r
- default:\r
+ case CfUiReset:\r
//\r
- // Editable Questions: oneof, ordered list, checkbox, numeric, string, password\r
+ // We come here when someone press ESC\r
+ // If the policy is not exit front page when user press ESC, process here.\r
//\r
- RefreshKeyHelp (gFormData, Statement, TRUE);\r
- Status = ProcessOptions (MenuOption, TRUE, &OptionString, TRUE);\r
- \r
- if (OptionString != NULL) {\r
- FreePool (OptionString);\r
- }\r
- \r
- if (EFI_ERROR (Status)) {\r
- Repaint = TRUE;\r
- NewLine = TRUE;\r
- RefreshKeyHelp (gFormData, Statement, FALSE);\r
- break;\r
- } else {\r
- ControlFlag = CfExit;\r
+ if (!FormExitPolicy ()) {\r
+ Repaint = TRUE;\r
+ NewLine = TRUE;\r
+ ControlFlag = CfRepaint;\r
break;\r
}\r
- }\r
- break;\r
\r
- case CfUiReset:\r
- //\r
- // We come here when someone press ESC\r
- // If the policy is not exit front page when user press ESC, process here.\r
- //\r
- if (!FormExitPolicy()) {\r
- Repaint = TRUE;\r
- NewLine = TRUE;\r
- ControlFlag = CfRepaint;\r
+ gUserInput->Action = BROWSER_ACTION_FORM_EXIT;\r
+ ControlFlag = CfExit;\r
break;\r
- }\r
\r
- gUserInput->Action = BROWSER_ACTION_FORM_EXIT;\r
- ControlFlag = CfExit;\r
- break;\r
+ case CfUiHotKey:\r
+ ControlFlag = CfRepaint;\r
\r
- case CfUiHotKey:\r
- ControlFlag = CfRepaint;\r
+ ASSERT (HotKey != NULL);\r
\r
- ASSERT (HotKey != NULL);\r
+ if (FxConfirmPopup (HotKey->Action)) {\r
+ gUserInput->Action = HotKey->Action;\r
+ if ((HotKey->Action & BROWSER_ACTION_DEFAULT) == BROWSER_ACTION_DEFAULT) {\r
+ gUserInput->DefaultId = HotKey->DefaultId;\r
+ }\r
\r
- if (FxConfirmPopup(HotKey->Action)) {\r
- gUserInput->Action = HotKey->Action;\r
- if ((HotKey->Action & BROWSER_ACTION_DEFAULT) == BROWSER_ACTION_DEFAULT) {\r
- gUserInput->DefaultId = HotKey->DefaultId;\r
+ ControlFlag = CfExit;\r
+ } else {\r
+ Repaint = TRUE;\r
+ NewLine = TRUE;\r
+ ControlFlag = CfRepaint;\r
}\r
- ControlFlag = CfExit;\r
- } else {\r
- Repaint = TRUE;\r
- NewLine = TRUE;\r
- ControlFlag = CfRepaint;\r
- }\r
\r
- break;\r
+ break;\r
\r
- case CfUiLeft:\r
- ControlFlag = CfRepaint;\r
- ASSERT(MenuOption != NULL);\r
- if ((MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_DATE_OP) || (MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_TIME_OP)) {\r
- if (MenuOption->Sequence != 0) {\r
- //\r
- // In the middle or tail of the Date/Time op-code set, go left.\r
- //\r
- ASSERT(NewPos != NULL);\r
- NewPos = NewPos->BackLink;\r
+ case CfUiLeft:\r
+ ControlFlag = CfRepaint;\r
+ ASSERT (MenuOption != NULL);\r
+ if ((MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_DATE_OP) || (MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_TIME_OP)) {\r
+ if (MenuOption->Sequence != 0) {\r
+ //\r
+ // In the middle or tail of the Date/Time op-code set, go left.\r
+ //\r
+ ASSERT (NewPos != NULL);\r
+ NewPos = NewPos->BackLink;\r
+ }\r
}\r
- }\r
- break;\r
\r
- case CfUiRight:\r
- ControlFlag = CfRepaint;\r
- ASSERT(MenuOption != NULL);\r
- if ((MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_DATE_OP) || (MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_TIME_OP)) {\r
- if (MenuOption->Sequence != 2) {\r
- //\r
- // In the middle or tail of the Date/Time op-code set, go left.\r
- //\r
- ASSERT(NewPos != NULL);\r
- NewPos = NewPos->ForwardLink;\r
+ break;\r
+\r
+ case CfUiRight:\r
+ ControlFlag = CfRepaint;\r
+ ASSERT (MenuOption != NULL);\r
+ if ((MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_DATE_OP) || (MenuOption->ThisTag->OpCode->OpCode == EFI_IFR_TIME_OP)) {\r
+ if (MenuOption->Sequence != 2) {\r
+ //\r
+ // In the middle or tail of the Date/Time op-code set, go left.\r
+ //\r
+ ASSERT (NewPos != NULL);\r
+ NewPos = NewPos->ForwardLink;\r
+ }\r
}\r
- }\r
- break;\r
\r
- case CfUiUp:\r
- ControlFlag = CfRepaint;\r
- NewLine = TRUE;\r
+ break;\r
\r
- SavedListEntry = NewPos;\r
- ASSERT(NewPos != NULL);\r
+ case CfUiUp:\r
+ ControlFlag = CfRepaint;\r
+ NewLine = TRUE;\r
\r
- MenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
- ASSERT (MenuOption != NULL);\r
+ SavedListEntry = NewPos;\r
+ ASSERT (NewPos != NULL);\r
\r
- //\r
- // Adjust Date/Time position before we advance forward.\r
- //\r
- AdjustDateAndTimePosition (TRUE, &NewPos);\r
+ MenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
+ ASSERT (MenuOption != NULL);\r
\r
- NewPos = NewPos->BackLink;\r
- //\r
- // Find next selectable menu or the first menu beyond current form.\r
- //\r
- Difference = MoveToNextStatement (TRUE, &NewPos, MenuOption->Row - TopRow, FALSE);\r
- if (Difference < 0) {\r
//\r
- // We hit the begining MenuOption that can be focused\r
- // so we simply scroll to the top.\r
+ // Adjust Date/Time position before we advance forward.\r
//\r
- Repaint = TRUE;\r
- if (TopOfScreen != gMenuOption.ForwardLink || SkipValue != 0) {\r
- TopOfScreen = gMenuOption.ForwardLink;\r
- NewPos = SavedListEntry;\r
- SkipValue = 0;\r
- } else {\r
+ AdjustDateAndTimePosition (TRUE, &NewPos);\r
+\r
+ NewPos = NewPos->BackLink;\r
+ //\r
+ // Find next selectable menu or the first menu beyond current form.\r
+ //\r
+ Difference = MoveToNextStatement (TRUE, &NewPos, MenuOption->Row - TopRow, FALSE);\r
+ if (Difference < 0) {\r
//\r
- // Scroll up to the last page when we have arrived at top page.\r
+ // We hit the begining MenuOption that can be focused\r
+ // so we simply scroll to the top.\r
//\r
- TopOfScreen = FindTopOfScreenMenu (gMenuOption.BackLink, BottomRow - TopRow, &SkipValue);\r
- NewPos = gMenuOption.BackLink;\r
- MoveToNextStatement (TRUE, &NewPos, BottomRow - TopRow, TRUE);\r
- }\r
- } else {\r
- NextMenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
+ Repaint = TRUE;\r
+ if ((TopOfScreen != gMenuOption.ForwardLink) || (SkipValue != 0)) {\r
+ TopOfScreen = gMenuOption.ForwardLink;\r
+ NewPos = SavedListEntry;\r
+ SkipValue = 0;\r
+ } else {\r
+ //\r
+ // Scroll up to the last page when we have arrived at top page.\r
+ //\r
+ TopOfScreen = FindTopOfScreenMenu (gMenuOption.BackLink, BottomRow - TopRow, &SkipValue);\r
+ NewPos = gMenuOption.BackLink;\r
+ MoveToNextStatement (TRUE, &NewPos, BottomRow - TopRow, TRUE);\r
+ }\r
+ } else {\r
+ NextMenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
+\r
+ if (MenuOption->Row < TopRow + Difference + NextMenuOption->Skip) {\r
+ //\r
+ // Previous focus MenuOption is above the TopOfScreen, so we need to scroll\r
+ //\r
+ TopOfScreen = NewPos;\r
+ Repaint = TRUE;\r
+ SkipValue = 0;\r
+ }\r
\r
- if (MenuOption->Row < TopRow + Difference + NextMenuOption->Skip) {\r
//\r
- // Previous focus MenuOption is above the TopOfScreen, so we need to scroll\r
+ // Check whether new highlight menu is selectable, if not, keep highlight on the old one.\r
//\r
- TopOfScreen = NewPos;\r
- Repaint = TRUE;\r
- SkipValue = 0;\r
+ // BottomRow - TopRow + 1 means the total rows current forms supported.\r
+ // Difference + NextMenuOption->Skip + 1 means the distance between last highlight menu\r
+ // and new top menu. New top menu will all shows in next form, but last highlight menu\r
+ // may only shows 1 line. + 1 at right part means at least need to keep 1 line for the\r
+ // last highlight menu.\r
+ //\r
+ if (!IsSelectable (NextMenuOption) && IsSelectable (MenuOption) &&\r
+ (BottomRow - TopRow + 1 >= Difference + NextMenuOption->Skip + 1))\r
+ {\r
+ NewPos = SavedListEntry;\r
+ }\r
}\r
\r
+ UpdateStatusBar (INPUT_ERROR, FALSE);\r
+\r
//\r
- // Check whether new highlight menu is selectable, if not, keep highlight on the old one.\r
+ // If we encounter a Date/Time op-code set, rewind to the first op-code of the set.\r
//\r
- // BottomRow - TopRow + 1 means the total rows current forms supported.\r
- // Difference + NextMenuOption->Skip + 1 means the distance between last highlight menu \r
- // and new top menu. New top menu will all shows in next form, but last highlight menu \r
- // may only shows 1 line. + 1 at right part means at least need to keep 1 line for the \r
- // last highlight menu.\r
- // \r
- if (!IsSelectable(NextMenuOption) && IsSelectable(MenuOption) && \r
- (BottomRow - TopRow + 1 >= Difference + NextMenuOption->Skip + 1)) {\r
- NewPos = SavedListEntry;\r
- }\r
- }\r
-\r
- UpdateStatusBar (INPUT_ERROR, FALSE);\r
-\r
- //\r
- // If we encounter a Date/Time op-code set, rewind to the first op-code of the set.\r
- //\r
- AdjustDateAndTimePosition (TRUE, &TopOfScreen);\r
- AdjustDateAndTimePosition (TRUE, &NewPos);\r
+ AdjustDateAndTimePosition (TRUE, &TopOfScreen);\r
+ AdjustDateAndTimePosition (TRUE, &NewPos);\r
\r
- UpdateHighlightMenuInfo(NewPos, TopOfScreen, SkipValue);\r
- break;\r
+ UpdateHighlightMenuInfo (NewPos, TopOfScreen, SkipValue);\r
+ break;\r
\r
- case CfUiPageUp:\r
- //\r
- // SkipValue means lines is skipped when show the top menu option.\r
- //\r
- ControlFlag = CfRepaint;\r
- NewLine = TRUE;\r
- Repaint = TRUE;\r
+ case CfUiPageUp:\r
+ //\r
+ // SkipValue means lines is skipped when show the top menu option.\r
+ //\r
+ ControlFlag = CfRepaint;\r
+ NewLine = TRUE;\r
+ Repaint = TRUE;\r
\r
- Link = TopOfScreen;\r
- //\r
- // First minus the menu of the top screen, it's value is SkipValue.\r
- //\r
- if (SkipValue >= BottomRow - TopRow + 1) {\r
+ Link = TopOfScreen;\r
//\r
- // SkipValue > (BottomRow - TopRow + 1) means current menu has more than one\r
- // form of options to be show, so just update the SkipValue to show the next\r
- // parts of options.\r
+ // First minus the menu of the top screen, it's value is SkipValue.\r
//\r
- SkipValue -= BottomRow - TopRow + 1;\r
- NewPos = TopOfScreen;\r
- break;\r
- } else {\r
- Index = (BottomRow + 1) - SkipValue - TopRow;\r
- }\r
- \r
- TopOfScreen = FindTopOfScreenMenu(TopOfScreen, Index, &SkipValue);\r
- NewPos = TopOfScreen;\r
- MoveToNextStatement (FALSE, &NewPos, BottomRow - TopRow, FALSE);\r
- \r
- UpdateStatusBar (INPUT_ERROR, FALSE);\r
+ if (SkipValue >= BottomRow - TopRow + 1) {\r
+ //\r
+ // SkipValue > (BottomRow - TopRow + 1) means current menu has more than one\r
+ // form of options to be show, so just update the SkipValue to show the next\r
+ // parts of options.\r
+ //\r
+ SkipValue -= BottomRow - TopRow + 1;\r
+ NewPos = TopOfScreen;\r
+ break;\r
+ } else {\r
+ Index = (BottomRow + 1) - SkipValue - TopRow;\r
+ }\r
\r
- //\r
- // If we encounter a Date/Time op-code set, rewind to the first op-code of the set.\r
- // Don't do this when we are already in the first page.\r
- //\r
- AdjustDateAndTimePosition (TRUE, &TopOfScreen);\r
- AdjustDateAndTimePosition (TRUE, &NewPos);\r
+ TopOfScreen = FindTopOfScreenMenu (TopOfScreen, Index, &SkipValue);\r
+ NewPos = TopOfScreen;\r
+ MoveToNextStatement (FALSE, &NewPos, BottomRow - TopRow, FALSE);\r
\r
- UpdateHighlightMenuInfo(NewPos, TopOfScreen, SkipValue);\r
- break;\r
+ UpdateStatusBar (INPUT_ERROR, FALSE);\r
\r
- case CfUiPageDown:\r
- //\r
- // SkipValue means lines is skipped when show the top menu option.\r
- //\r
- ControlFlag = CfRepaint;\r
- NewLine = TRUE;\r
- Repaint = TRUE;\r
+ //\r
+ // If we encounter a Date/Time op-code set, rewind to the first op-code of the set.\r
+ // Don't do this when we are already in the first page.\r
+ //\r
+ AdjustDateAndTimePosition (TRUE, &TopOfScreen);\r
+ AdjustDateAndTimePosition (TRUE, &NewPos);\r
\r
- Link = TopOfScreen;\r
- NextMenuOption = MENU_OPTION_FROM_LINK (Link);\r
- Index = TopRow + NextMenuOption->Skip - SkipValue;\r
- //\r
- // Count to the menu option which will show at the top of the next form.\r
- //\r
- while ((Index <= BottomRow + 1) && (Link->ForwardLink != &gMenuOption)) {\r
- Link = Link->ForwardLink;\r
- NextMenuOption = MENU_OPTION_FROM_LINK (Link);\r
- Index = Index + NextMenuOption->Skip;\r
- }\r
+ UpdateHighlightMenuInfo (NewPos, TopOfScreen, SkipValue);\r
+ break;\r
\r
- if ((Link->ForwardLink == &gMenuOption) && (Index <= BottomRow + 1)) {\r
+ case CfUiPageDown:\r
//\r
- // Highlight on the last menu which can be highlight.\r
+ // SkipValue means lines is skipped when show the top menu option.\r
//\r
- Repaint = FALSE;\r
- MoveToNextStatement (TRUE, &Link, Index - TopRow, TRUE);\r
- } else {\r
+ ControlFlag = CfRepaint;\r
+ NewLine = TRUE;\r
+ Repaint = TRUE;\r
+\r
+ Link = TopOfScreen;\r
+ NextMenuOption = MENU_OPTION_FROM_LINK (Link);\r
+ Index = TopRow + NextMenuOption->Skip - SkipValue;\r
//\r
- // Calculate the skip line for top of screen menu.\r
+ // Count to the menu option which will show at the top of the next form.\r
//\r
- if (Link == TopOfScreen) {\r
+ while ((Index <= BottomRow + 1) && (Link->ForwardLink != &gMenuOption)) {\r
+ Link = Link->ForwardLink;\r
+ NextMenuOption = MENU_OPTION_FROM_LINK (Link);\r
+ Index = Index + NextMenuOption->Skip;\r
+ }\r
+\r
+ if ((Link->ForwardLink == &gMenuOption) && (Index <= BottomRow + 1)) {\r
//\r
- // The top of screen menu option occupies the entire form.\r
+ // Highlight on the last menu which can be highlight.\r
//\r
- SkipValue += BottomRow - TopRow + 1;\r
+ Repaint = FALSE;\r
+ MoveToNextStatement (TRUE, &Link, Index - TopRow, TRUE);\r
} else {\r
- SkipValue = NextMenuOption->Skip - (Index - (BottomRow + 1));\r
+ //\r
+ // Calculate the skip line for top of screen menu.\r
+ //\r
+ if (Link == TopOfScreen) {\r
+ //\r
+ // The top of screen menu option occupies the entire form.\r
+ //\r
+ SkipValue += BottomRow - TopRow + 1;\r
+ } else {\r
+ SkipValue = NextMenuOption->Skip - (Index - (BottomRow + 1));\r
+ }\r
+\r
+ TopOfScreen = Link;\r
+ MenuOption = NULL;\r
+ //\r
+ // Move to the Next selectable menu.\r
+ //\r
+ MoveToNextStatement (FALSE, &Link, BottomRow - TopRow, TRUE);\r
}\r
- TopOfScreen = Link;\r
- MenuOption = NULL;\r
+\r
//\r
- // Move to the Next selectable menu.\r
+ // Save the menu as the next highlight menu.\r
//\r
- MoveToNextStatement (FALSE, &Link, BottomRow - TopRow, TRUE);\r
- }\r
-\r
- //\r
- // Save the menu as the next highlight menu.\r
- //\r
- NewPos = Link;\r
-\r
- UpdateStatusBar (INPUT_ERROR, FALSE);\r
-\r
- //\r
- // If we encounter a Date/Time op-code set, rewind to the first op-code of the set.\r
- // Don't do this when we are already in the last page.\r
- //\r
- AdjustDateAndTimePosition (TRUE, &TopOfScreen);\r
- AdjustDateAndTimePosition (TRUE, &NewPos);\r
+ NewPos = Link;\r
\r
- UpdateHighlightMenuInfo(NewPos, TopOfScreen, SkipValue);\r
- break;\r
+ UpdateStatusBar (INPUT_ERROR, FALSE);\r
\r
- case CfUiDown:\r
- //\r
- // SkipValue means lines is skipped when show the top menu option.\r
- // NewPos points to the menu which is highlighted now.\r
- //\r
- ControlFlag = CfRepaint;\r
- NewLine = TRUE;\r
+ //\r
+ // If we encounter a Date/Time op-code set, rewind to the first op-code of the set.\r
+ // Don't do this when we are already in the last page.\r
+ //\r
+ AdjustDateAndTimePosition (TRUE, &TopOfScreen);\r
+ AdjustDateAndTimePosition (TRUE, &NewPos);\r
\r
- if (NewPos == TopOfScreen) {\r
- Temp2 = SkipValue;\r
- } else {\r
- Temp2 = 0;\r
- }\r
+ UpdateHighlightMenuInfo (NewPos, TopOfScreen, SkipValue);\r
+ break;\r
\r
- SavedListEntry = NewPos;\r
- //\r
- // Since the behavior of hitting the down arrow on a Date/Time op-code is intended\r
- // to be one that progresses to the next set of op-codes, we need to advance to the last\r
- // Date/Time op-code and leave the remaining logic in UiDown intact so the appropriate\r
- // checking can be done. The only other logic we need to introduce is that if a Date/Time\r
- // op-code is the last entry in the menu, we need to rewind back to the first op-code of\r
- // the Date/Time op-code.\r
- //\r
- AdjustDateAndTimePosition (FALSE, &NewPos);\r
+ case CfUiDown:\r
+ //\r
+ // SkipValue means lines is skipped when show the top menu option.\r
+ // NewPos points to the menu which is highlighted now.\r
+ //\r
+ ControlFlag = CfRepaint;\r
+ NewLine = TRUE;\r
\r
- MenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
- NewPos = NewPos->ForwardLink;\r
- //\r
- // Find the next selectable menu.\r
- //\r
- if (MenuOption->Row + MenuOption->Skip - Temp2 > BottomRow + 1) {\r
- if (gMenuOption.ForwardLink == NewPos || &gMenuOption == NewPos) {\r
- Difference = -1;\r
+ if (NewPos == TopOfScreen) {\r
+ Temp2 = SkipValue;\r
} else {\r
- Difference = 0;\r
+ Temp2 = 0;\r
}\r
- } else {\r
- Difference = MoveToNextStatement (FALSE, &NewPos, BottomRow + 1 - (MenuOption->Row + MenuOption->Skip - Temp2), FALSE);\r
- }\r
- if (Difference < 0) {\r
+\r
+ SavedListEntry = NewPos;\r
//\r
- // Scroll to the first page.\r
+ // Since the behavior of hitting the down arrow on a Date/Time op-code is intended\r
+ // to be one that progresses to the next set of op-codes, we need to advance to the last\r
+ // Date/Time op-code and leave the remaining logic in UiDown intact so the appropriate\r
+ // checking can be done. The only other logic we need to introduce is that if a Date/Time\r
+ // op-code is the last entry in the menu, we need to rewind back to the first op-code of\r
+ // the Date/Time op-code.\r
//\r
- if (TopOfScreen != gMenuOption.ForwardLink || SkipValue != 0) { \r
- TopOfScreen = gMenuOption.ForwardLink;\r
- Repaint = TRUE;\r
- MenuOption = NULL;\r
- } else {\r
- MenuOption = MENU_OPTION_FROM_LINK (SavedListEntry);\r
- }\r
- NewPos = gMenuOption.ForwardLink;\r
- MoveToNextStatement (FALSE, &NewPos, BottomRow - TopRow, TRUE);\r
+ AdjustDateAndTimePosition (FALSE, &NewPos);\r
\r
- SkipValue = 0;\r
+ MenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
+ NewPos = NewPos->ForwardLink;\r
//\r
- // If we are at the end of the list and sitting on a Date/Time op, rewind to the head.\r
+ // Find the next selectable menu.\r
//\r
- AdjustDateAndTimePosition (TRUE, &TopOfScreen);\r
- AdjustDateAndTimePosition (TRUE, &NewPos);\r
+ if (MenuOption->Row + MenuOption->Skip - Temp2 > BottomRow + 1) {\r
+ if ((gMenuOption.ForwardLink == NewPos) || (&gMenuOption == NewPos)) {\r
+ Difference = -1;\r
+ } else {\r
+ Difference = 0;\r
+ }\r
+ } else {\r
+ Difference = MoveToNextStatement (FALSE, &NewPos, BottomRow + 1 - (MenuOption->Row + MenuOption->Skip - Temp2), FALSE);\r
+ }\r
\r
- UpdateHighlightMenuInfo(NewPos, TopOfScreen, SkipValue);\r
- break;\r
- } \r
+ if (Difference < 0) {\r
+ //\r
+ // Scroll to the first page.\r
+ //\r
+ if ((TopOfScreen != gMenuOption.ForwardLink) || (SkipValue != 0)) {\r
+ TopOfScreen = gMenuOption.ForwardLink;\r
+ Repaint = TRUE;\r
+ MenuOption = NULL;\r
+ } else {\r
+ MenuOption = MENU_OPTION_FROM_LINK (SavedListEntry);\r
+ }\r
\r
- //\r
- // Get next selected menu info.\r
- //\r
- AdjustDateAndTimePosition (FALSE, &NewPos);\r
- NextMenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
- if (NextMenuOption->Row == 0) {\r
- UpdateOptionSkipLines (NextMenuOption);\r
- }\r
+ NewPos = gMenuOption.ForwardLink;\r
+ MoveToNextStatement (FALSE, &NewPos, BottomRow - TopRow, TRUE);\r
+\r
+ SkipValue = 0;\r
+ //\r
+ // If we are at the end of the list and sitting on a Date/Time op, rewind to the head.\r
+ //\r
+ AdjustDateAndTimePosition (TRUE, &TopOfScreen);\r
+ AdjustDateAndTimePosition (TRUE, &NewPos);\r
+\r
+ UpdateHighlightMenuInfo (NewPos, TopOfScreen, SkipValue);\r
+ break;\r
+ }\r
\r
- //\r
- // Calculate new highlight menu end row.\r
- //\r
- Temp = (MenuOption->Row + MenuOption->Skip - Temp2) + Difference + NextMenuOption->Skip - 1;\r
- if (Temp > BottomRow) {\r
//\r
- // Get the top screen menu info.\r
+ // Get next selected menu info.\r
//\r
- AdjustDateAndTimePosition (FALSE, &TopOfScreen);\r
- SavedMenuOption = MENU_OPTION_FROM_LINK (TopOfScreen);\r
+ AdjustDateAndTimePosition (FALSE, &NewPos);\r
+ NextMenuOption = MENU_OPTION_FROM_LINK (NewPos);\r
+ if (NextMenuOption->Row == 0) {\r
+ UpdateOptionSkipLines (NextMenuOption);\r
+ }\r
\r
//\r
- // Current Top screen menu occupy (SavedMenuOption->Skip - SkipValue) rows.\r
- // Full shows the new selected menu need to skip (Temp - BottomRow - 1) rows.\r
+ // Calculate new highlight menu end row.\r
//\r
- if ((Temp - BottomRow) >= (SavedMenuOption->Skip - SkipValue)) {\r
+ Temp = (MenuOption->Row + MenuOption->Skip - Temp2) + Difference + NextMenuOption->Skip - 1;\r
+ if (Temp > BottomRow) {\r
//\r
- // Skip the top op-code\r
+ // Get the top screen menu info.\r
//\r
- TopOfScreen = TopOfScreen->ForwardLink;\r
- DistanceValue = (Temp - BottomRow) - (SavedMenuOption->Skip - SkipValue);\r
-\r
+ AdjustDateAndTimePosition (FALSE, &TopOfScreen);\r
SavedMenuOption = MENU_OPTION_FROM_LINK (TopOfScreen);\r
\r
//\r
- // If we have a remainder, skip that many more op-codes until we drain the remainder\r
- // Special case is the selected highlight menu has more than one form of menus.\r
+ // Current Top screen menu occupy (SavedMenuOption->Skip - SkipValue) rows.\r
+ // Full shows the new selected menu need to skip (Temp - BottomRow - 1) rows.\r
//\r
- while (DistanceValue >= SavedMenuOption->Skip && TopOfScreen != NewPos) {\r
+ if ((Temp - BottomRow) >= (SavedMenuOption->Skip - SkipValue)) {\r
//\r
- // Since the Difference is greater than or equal to this op-code's skip value, skip it\r
+ // Skip the top op-code\r
//\r
- DistanceValue = DistanceValue - (INTN) SavedMenuOption->Skip;\r
- TopOfScreen = TopOfScreen->ForwardLink;\r
+ TopOfScreen = TopOfScreen->ForwardLink;\r
+ DistanceValue = (Temp - BottomRow) - (SavedMenuOption->Skip - SkipValue);\r
+\r
SavedMenuOption = MENU_OPTION_FROM_LINK (TopOfScreen);\r
- }\r
- //\r
- // Since we will act on this op-code in the next routine, and increment the\r
- // SkipValue, set the skips to one less than what is required.\r
- //\r
- if (TopOfScreen != NewPos) {\r
- SkipValue = DistanceValue;\r
+\r
+ //\r
+ // If we have a remainder, skip that many more op-codes until we drain the remainder\r
+ // Special case is the selected highlight menu has more than one form of menus.\r
+ //\r
+ while (DistanceValue >= SavedMenuOption->Skip && TopOfScreen != NewPos) {\r
+ //\r
+ // Since the Difference is greater than or equal to this op-code's skip value, skip it\r
+ //\r
+ DistanceValue = DistanceValue - (INTN)SavedMenuOption->Skip;\r
+ TopOfScreen = TopOfScreen->ForwardLink;\r
+ SavedMenuOption = MENU_OPTION_FROM_LINK (TopOfScreen);\r
+ }\r
+\r
+ //\r
+ // Since we will act on this op-code in the next routine, and increment the\r
+ // SkipValue, set the skips to one less than what is required.\r
+ //\r
+ if (TopOfScreen != NewPos) {\r
+ SkipValue = DistanceValue;\r
+ } else {\r
+ SkipValue = 0;\r
+ }\r
} else {\r
- SkipValue = 0;\r
+ //\r
+ // Since we will act on this op-code in the next routine, and increment the\r
+ // SkipValue, set the skips to one less than what is required.\r
+ //\r
+ SkipValue += Temp - BottomRow;\r
}\r
- } else {\r
+\r
+ Repaint = TRUE;\r
+ } else if (!IsSelectable (NextMenuOption)) {\r
//\r
- // Since we will act on this op-code in the next routine, and increment the\r
- // SkipValue, set the skips to one less than what is required.\r
+ // Continue to go down until scroll to next page or the selectable option is found.\r
//\r
- SkipValue += Temp - BottomRow;\r
+ ScreenOperation = UiDown;\r
+ ControlFlag = CfScreenOperation;\r
+ break;\r
}\r
- Repaint = TRUE;\r
- } else if (!IsSelectable (NextMenuOption)) {\r
+\r
+ MenuOption = MENU_OPTION_FROM_LINK (SavedListEntry);\r
+\r
//\r
- // Continue to go down until scroll to next page or the selectable option is found.\r
+ // Check whether new highlight menu is selectable, if not, keep highlight on the old one.\r
//\r
- ScreenOperation = UiDown;\r
- ControlFlag = CfScreenOperation;\r
- break;\r
- }\r
+ // BottomRow - TopRow + 1 means the total rows current forms supported.\r
+ // Difference + NextMenuOption->Skip + 1 means the distance between last highlight menu\r
+ // and new top menu. New top menu will all shows in next form, but last highlight menu\r
+ // may only shows 1 line. + 1 at right part means at least need to keep 1 line for the\r
+ // last highlight menu.\r
+ //\r
+ if (!IsSelectable (NextMenuOption) && IsSelectable (MenuOption) &&\r
+ (BottomRow - TopRow + 1 >= Difference + NextMenuOption->Skip + 1))\r
+ {\r
+ NewPos = SavedListEntry;\r
+ }\r
\r
- MenuOption = MENU_OPTION_FROM_LINK (SavedListEntry);\r
+ UpdateStatusBar (INPUT_ERROR, FALSE);\r
\r
- //\r
- // Check whether new highlight menu is selectable, if not, keep highlight on the old one.\r
- //\r
- // BottomRow - TopRow + 1 means the total rows current forms supported.\r
- // Difference + NextMenuOption->Skip + 1 means the distance between last highlight menu \r
- // and new top menu. New top menu will all shows in next form, but last highlight menu \r
- // may only shows 1 line. + 1 at right part means at least need to keep 1 line for the \r
- // last highlight menu.\r
- // \r
- if (!IsSelectable (NextMenuOption) && IsSelectable (MenuOption) && \r
- (BottomRow - TopRow + 1 >= Difference + NextMenuOption->Skip + 1)) {\r
- NewPos = SavedListEntry;\r
- }\r
+ //\r
+ // If we are at the end of the list and sitting on a Date/Time op, rewind to the head.\r
+ //\r
+ AdjustDateAndTimePosition (TRUE, &TopOfScreen);\r
+ AdjustDateAndTimePosition (TRUE, &NewPos);\r
\r
- UpdateStatusBar (INPUT_ERROR, FALSE);\r
+ UpdateHighlightMenuInfo (NewPos, TopOfScreen, SkipValue);\r
+ break;\r
\r
- //\r
- // If we are at the end of the list and sitting on a Date/Time op, rewind to the head.\r
- //\r
- AdjustDateAndTimePosition (TRUE, &TopOfScreen);\r
- AdjustDateAndTimePosition (TRUE, &NewPos);\r
+ case CfUiNoOperation:\r
+ ControlFlag = CfRepaint;\r
+ break;\r
\r
- UpdateHighlightMenuInfo(NewPos, TopOfScreen, SkipValue);\r
- break;\r
+ case CfExit:\r
+ gST->ConOut->SetAttribute (gST->ConOut, EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK));\r
+ if (HelpString != NULL) {\r
+ FreePool (HelpString);\r
+ }\r
\r
- case CfUiNoOperation:\r
- ControlFlag = CfRepaint;\r
- break;\r
+ if (HelpHeaderString != NULL) {\r
+ FreePool (HelpHeaderString);\r
+ }\r
\r
- case CfExit:\r
- gST->ConOut->SetAttribute (gST->ConOut, EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK));\r
- if (HelpString != NULL) {\r
- FreePool (HelpString);\r
- }\r
- if (HelpHeaderString != NULL) {\r
- FreePool (HelpHeaderString);\r
- }\r
- if (HelpBottomString != NULL) {\r
- FreePool (HelpBottomString);\r
- }\r
- return EFI_SUCCESS;\r
+ if (HelpBottomString != NULL) {\r
+ FreePool (HelpBottomString);\r
+ }\r
\r
- default:\r
- break;\r
+ return EFI_SUCCESS;\r
+\r
+ default:\r
+ break;\r
}\r
}\r
}\r
\r
**/\r
VOID\r
-FreeMenuOptionData(\r
- LIST_ENTRY *MenuOptionList\r
+FreeMenuOptionData (\r
+ LIST_ENTRY *MenuOptionList\r
)\r
{\r
- LIST_ENTRY *Link;\r
- UI_MENU_OPTION *Option;\r
+ LIST_ENTRY *Link;\r
+ UI_MENU_OPTION *Option;\r
\r
//\r
// Free menu option list\r
//\r
while (!IsListEmpty (MenuOptionList)) {\r
- Link = GetFirstNode (MenuOptionList);\r
+ Link = GetFirstNode (MenuOptionList);\r
Option = MENU_OPTION_FROM_LINK (Link);\r
- if (Option->Description != NULL){\r
- FreePool(Option->Description);\r
+ if (Option->Description != NULL) {\r
+ FreePool (Option->Description);\r
}\r
+\r
RemoveEntryList (&Option->Link);\r
FreePool (Option);\r
}\r
VOID\r
)\r
{\r
- CHAR16 *ErrorInfo;\r
- EFI_INPUT_KEY Key;\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_IFR_OP_HEADER *OpCodeBuf;\r
- EFI_STRING_ID StringToken;\r
- CHAR16 DiscardChange;\r
- CHAR16 JumpToFormSet;\r
- CHAR16 *PrintString;\r
+ CHAR16 *ErrorInfo;\r
+ EFI_INPUT_KEY Key;\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_IFR_OP_HEADER *OpCodeBuf;\r
+ EFI_STRING_ID StringToken;\r
+ CHAR16 DiscardChange;\r
+ CHAR16 JumpToFormSet;\r
+ CHAR16 *PrintString;\r
\r
if (gFormData->BrowserStatus == BROWSER_SUCCESS) {\r
return;\r
if (gFormData->BrowserStatus == (BROWSER_WARNING_IF)) {\r
ASSERT (OpCodeBuf != NULL && OpCodeBuf->OpCode == EFI_IFR_WARNING_IF_OP);\r
\r
- TimeOut = ((EFI_IFR_WARNING_IF *) OpCodeBuf)->TimeOut;\r
- StringToken = ((EFI_IFR_WARNING_IF *) OpCodeBuf)->Warning;\r
+ TimeOut = ((EFI_IFR_WARNING_IF *)OpCodeBuf)->TimeOut;\r
+ StringToken = ((EFI_IFR_WARNING_IF *)OpCodeBuf)->Warning;\r
} else {\r
TimeOut = 0;\r
if ((gFormData->BrowserStatus == (BROWSER_NO_SUBMIT_IF)) &&\r
- (OpCodeBuf != NULL && OpCodeBuf->OpCode == EFI_IFR_NO_SUBMIT_IF_OP)) {\r
- StringToken = ((EFI_IFR_NO_SUBMIT_IF *) OpCodeBuf)->Error;\r
+ ((OpCodeBuf != NULL) && (OpCodeBuf->OpCode == EFI_IFR_NO_SUBMIT_IF_OP)))\r
+ {\r
+ StringToken = ((EFI_IFR_NO_SUBMIT_IF *)OpCodeBuf)->Error;\r
} else if ((gFormData->BrowserStatus == (BROWSER_INCONSISTENT_IF)) &&\r
- (OpCodeBuf != NULL && OpCodeBuf->OpCode == EFI_IFR_INCONSISTENT_IF_OP)) {\r
- StringToken = ((EFI_IFR_INCONSISTENT_IF *) OpCodeBuf)->Error;\r
+ ((OpCodeBuf != NULL) && (OpCodeBuf->OpCode == EFI_IFR_INCONSISTENT_IF_OP)))\r
+ {\r
+ StringToken = ((EFI_IFR_INCONSISTENT_IF *)OpCodeBuf)->Error;\r
}\r
}\r
\r
ErrorInfo = gFormData->ErrorString;\r
} else {\r
switch (gFormData->BrowserStatus) {\r
- case BROWSER_SUBMIT_FAIL:\r
- ErrorInfo = gSaveFailed;\r
- break;\r
+ case BROWSER_SUBMIT_FAIL:\r
+ ErrorInfo = gSaveFailed;\r
+ break;\r
\r
- case BROWSER_FORM_NOT_FOUND:\r
- ErrorInfo = gFormNotFound;\r
- break;\r
+ case BROWSER_FORM_NOT_FOUND:\r
+ ErrorInfo = gFormNotFound;\r
+ break;\r
\r
- case BROWSER_FORM_SUPPRESS:\r
- ErrorInfo = gFormSuppress;\r
- break;\r
+ case BROWSER_FORM_SUPPRESS:\r
+ ErrorInfo = gFormSuppress;\r
+ break;\r
\r
- case BROWSER_PROTOCOL_NOT_FOUND:\r
- ErrorInfo = gProtocolNotFound;\r
- break;\r
+ case BROWSER_PROTOCOL_NOT_FOUND:\r
+ ErrorInfo = gProtocolNotFound;\r
+ break;\r
\r
- case BROWSER_SUBMIT_FAIL_NO_SUBMIT_IF:\r
- ErrorInfo = gNoSubmitIfFailed;\r
- break;\r
+ case BROWSER_SUBMIT_FAIL_NO_SUBMIT_IF:\r
+ ErrorInfo = gNoSubmitIfFailed;\r
+ break;\r
\r
- case BROWSER_RECONNECT_FAIL:\r
- ErrorInfo = gReconnectFail;\r
- break;\r
+ case BROWSER_RECONNECT_FAIL:\r
+ ErrorInfo = gReconnectFail;\r
+ break;\r
\r
- case BROWSER_RECONNECT_SAVE_CHANGES:\r
- ErrorInfo = gReconnectConfirmChanges;\r
- break;\r
+ case BROWSER_RECONNECT_SAVE_CHANGES:\r
+ ErrorInfo = gReconnectConfirmChanges;\r
+ break;\r
\r
- case BROWSER_RECONNECT_REQUIRED:\r
- ErrorInfo = gReconnectRequired;\r
- break;\r
+ case BROWSER_RECONNECT_REQUIRED:\r
+ ErrorInfo = gReconnectRequired;\r
+ break;\r
\r
- default:\r
- ErrorInfo = gBrowserError;\r
- break;\r
+ default:\r
+ ErrorInfo = gBrowserError;\r
+ break;\r
}\r
}\r
\r
switch (gFormData->BrowserStatus) {\r
- case BROWSER_SUBMIT_FAIL:\r
- case BROWSER_SUBMIT_FAIL_NO_SUBMIT_IF:\r
- case BROWSER_RECONNECT_SAVE_CHANGES:\r
- ASSERT (gUserInput != NULL);\r
- if (gFormData->BrowserStatus == (BROWSER_SUBMIT_FAIL)) {\r
- PrintString = gSaveProcess;\r
- JumpToFormSet = gJumpToFormSet[0];\r
- DiscardChange = gDiscardChange[0];\r
- } else if (gFormData->BrowserStatus == (BROWSER_RECONNECT_SAVE_CHANGES)){\r
- PrintString = gChangesOpt;\r
- JumpToFormSet = gConfirmOptYes[0];\r
- DiscardChange = gConfirmOptNo[0];\r
- } else {\r
- PrintString = gSaveNoSubmitProcess;\r
- JumpToFormSet = gCheckError[0];\r
- DiscardChange = gDiscardChange[0];\r
- }\r
-\r
- do {\r
- CreateDialog (&Key, gEmptyString, ErrorInfo, PrintString, gEmptyString, NULL);\r
- } while (((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) != (DiscardChange | UPPER_LOWER_CASE_OFFSET)) &&\r
- ((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) != (JumpToFormSet | UPPER_LOWER_CASE_OFFSET)));\r
-\r
- if ((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) == (DiscardChange | UPPER_LOWER_CASE_OFFSET)) {\r
- gUserInput->Action = BROWSER_ACTION_DISCARD;\r
- } else {\r
- gUserInput->Action = BROWSER_ACTION_GOTO;\r
- }\r
- break;\r
+ case BROWSER_SUBMIT_FAIL:\r
+ case BROWSER_SUBMIT_FAIL_NO_SUBMIT_IF:\r
+ case BROWSER_RECONNECT_SAVE_CHANGES:\r
+ ASSERT (gUserInput != NULL);\r
+ if (gFormData->BrowserStatus == (BROWSER_SUBMIT_FAIL)) {\r
+ PrintString = gSaveProcess;\r
+ JumpToFormSet = gJumpToFormSet[0];\r
+ DiscardChange = gDiscardChange[0];\r
+ } else if (gFormData->BrowserStatus == (BROWSER_RECONNECT_SAVE_CHANGES)) {\r
+ PrintString = gChangesOpt;\r
+ JumpToFormSet = gConfirmOptYes[0];\r
+ DiscardChange = gConfirmOptNo[0];\r
+ } else {\r
+ PrintString = gSaveNoSubmitProcess;\r
+ JumpToFormSet = gCheckError[0];\r
+ DiscardChange = gDiscardChange[0];\r
+ }\r
\r
- default:\r
- if (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
+ CreateDialog (&Key, gEmptyString, ErrorInfo, PrintString, gEmptyString, NULL);\r
+ } while (((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) != (DiscardChange | UPPER_LOWER_CASE_OFFSET)) &&\r
+ ((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) != (JumpToFormSet | UPPER_LOWER_CASE_OFFSET)));\r
\r
- EventContext.SyncEvent = TimeOutEvent;\r
- EventContext.TimeOut = &TimeOut;\r
- EventContext.ErrorInfo = ErrorInfo;\r
+ if ((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) == (DiscardChange | UPPER_LOWER_CASE_OFFSET)) {\r
+ gUserInput->Action = BROWSER_ACTION_DISCARD;\r
+ } else {\r
+ gUserInput->Action = BROWSER_ACTION_GOTO;\r
+ }\r
\r
- Status = gBS->CreateEvent (EVT_TIMER | EVT_NOTIFY_SIGNAL, TPL_CALLBACK, RefreshTimeOutProcess, &EventContext, &RefreshIntervalEvent);\r
- ASSERT_EFI_ERROR (Status);\r
+ break;\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
+ default:\r
+ if (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
- if (Status != EFI_NOT_READY) {\r
- continue;\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
- WaitList[0] = TimeOutEvent;\r
- WaitList[1] = gST->ConIn->WaitForKey;\r
+ //\r
+ // Show the dialog first to avoid long time not reaction.\r
+ //\r
+ gBS->SignalEvent (RefreshIntervalEvent);\r
\r
- Status = gBS->WaitForEvent (2, WaitList, &Index);\r
+ Status = gBS->SetTimer (RefreshIntervalEvent, TimerPeriodic, ONE_SECOND);\r
ASSERT_EFI_ERROR (Status);\r
\r
- if (Index == 0) {\r
- //\r
- // Timeout occur, close the hoot time out event.\r
- //\r
- break;\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
+ gBS->CloseEvent (TimeOutEvent);\r
+ gBS->CloseEvent (RefreshIntervalEvent);\r
}\r
\r
- gBS->CloseEvent (TimeOutEvent);\r
- gBS->CloseEvent (RefreshIntervalEvent);\r
- }\r
- break;\r
+ break;\r
}\r
\r
if (StringToken != 0) {\r
\r
/**\r
Display one form, and return user input.\r
- \r
+\r
@param FormData Form Data to be shown.\r
@param UserInputData User input data.\r
- \r
+\r
@retval EFI_SUCCESS 1.Form Data is shown, and user input is got.\r
2.Error info has show and return.\r
@retval EFI_INVALID_PARAMETER The input screen dimension is not valid\r
@retval EFI_NOT_FOUND New form data has some error.\r
**/\r
EFI_STATUS\r
-EFIAPI \r
+EFIAPI\r
FormDisplay (\r
IN FORM_DISPLAY_ENGINE_FORM *FormData,\r
OUT USER_INPUT *UserInputData\r
//\r
// Process the status info first.\r
//\r
- BrowserStatusProcess();\r
+ BrowserStatusProcess ();\r
if (gFormData->BrowserStatus != BROWSER_SUCCESS) {\r
//\r
// gFormData->BrowserStatus != BROWSER_SUCCESS, means only need to print the error info, return here.\r
//\r
// Left right\r
// |<-.->|<-.........->|<- .........->|<-...........->|\r
- // Skip Prompt Option Help \r
+ // Skip Prompt Option Help\r
//\r
- gOptionBlockWidth = (CHAR16) ((gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn) / 3) + 1;\r
- gHelpBlockWidth = (CHAR16) (gOptionBlockWidth - 1 - LEFT_SKIPPED_COLUMNS);\r
- gPromptBlockWidth = (CHAR16) (gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn - 2 * (gOptionBlockWidth - 1) - 1);\r
+ gOptionBlockWidth = (CHAR16)((gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn) / 3) + 1;\r
+ gHelpBlockWidth = (CHAR16)(gOptionBlockWidth - 1 - LEFT_SKIPPED_COLUMNS);\r
+ gPromptBlockWidth = (CHAR16)(gStatementDimensions.RightColumn - gStatementDimensions.LeftColumn - 2 * (gOptionBlockWidth - 1) - 1);\r
\r
- ConvertStatementToMenu();\r
+ ConvertStatementToMenu ();\r
\r
//\r
// Check whether layout is changed.\r
//\r
- if (mIsFirstForm \r
- || (gOldFormEntry.HiiHandle != FormData->HiiHandle)\r
- || (!CompareGuid (&gOldFormEntry.FormSetGuid, &FormData->FormSetGuid))\r
- || (gOldFormEntry.FormId != FormData->FormId)) {\r
+ if ( mIsFirstForm\r
+ || (gOldFormEntry.HiiHandle != FormData->HiiHandle)\r
+ || (!CompareGuid (&gOldFormEntry.FormSetGuid, &FormData->FormSetGuid))\r
+ || (gOldFormEntry.FormId != FormData->FormId))\r
+ {\r
mStatementLayoutIsChanged = TRUE;\r
} else {\r
mStatementLayoutIsChanged = FALSE;\r
}\r
\r
- Status = UiDisplayMenu(FormData);\r
- \r
+ Status = UiDisplayMenu (FormData);\r
+\r
//\r
// Backup last form info.\r
//\r
mIsFirstForm = FALSE;\r
gOldFormEntry.HiiHandle = FormData->HiiHandle;\r
CopyGuid (&gOldFormEntry.FormSetGuid, &FormData->FormSetGuid);\r
- gOldFormEntry.FormId = FormData->FormId;\r
+ gOldFormEntry.FormId = FormData->FormId;\r
\r
//\r
- //Free the Ui menu option list.\r
+ // Free the Ui menu option list.\r
//\r
- FreeMenuOptionData(&gMenuOption);\r
+ FreeMenuOptionData (&gMenuOption);\r
\r
return Status;\r
}\r
Clear Screen to the initial state.\r
**/\r
VOID\r
-EFIAPI \r
+EFIAPI\r
DriverClearDisplayPage (\r
VOID\r
)\r
**/\r
VOID\r
SetUnicodeMem (\r
- IN VOID *Buffer,\r
- IN UINTN Size,\r
- IN CHAR16 Value\r
+ IN VOID *Buffer,\r
+ IN UINTN Size,\r
+ IN CHAR16 Value\r
)\r
{\r
CHAR16 *Ptr;\r
EFI_STATUS\r
EFIAPI\r
InitializeDisplayEngine (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_INPUT_KEY HotKey;\r
- EFI_STRING NewString;\r
- EDKII_FORM_BROWSER_EXTENSION2_PROTOCOL *FormBrowserEx2;\r
+ EFI_STATUS Status;\r
+ EFI_INPUT_KEY HotKey;\r
+ EFI_STRING NewString;\r
+ EDKII_FORM_BROWSER_EXTENSION2_PROTOCOL *FormBrowserEx2;\r
\r
//\r
// Publish our HII data\r
);\r
ASSERT_EFI_ERROR (Status);\r
\r
- InitializeDisplayStrings();\r
- \r
+ //\r
+ // Install HII Popup Protocol.\r
+ //\r
+ Status = gBS->InstallProtocolInterface (\r
+ &mPrivateData.Handle,\r
+ &gEfiHiiPopupProtocolGuid,\r
+ EFI_NATIVE_INTERFACE,\r
+ &mPrivateData.HiiPopup\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ InitializeDisplayStrings ();\r
+\r
ZeroMem (&gHighligthMenuInfo, sizeof (gHighligthMenuInfo));\r
ZeroMem (&gOldFormEntry, sizeof (gOldFormEntry));\r
\r
//\r
// Use BrowserEx2 protocol to register HotKey.\r
- // \r
- Status = gBS->LocateProtocol (&gEdkiiFormBrowserEx2ProtocolGuid, NULL, (VOID **) &FormBrowserEx2);\r
+ //\r
+ Status = gBS->LocateProtocol (&gEdkiiFormBrowserEx2ProtocolGuid, NULL, (VOID **)&FormBrowserEx2);\r
if (!EFI_ERROR (Status)) {\r
//\r
// Register the default HotKey F9 and F10 again.\r
//\r
HotKey.UnicodeChar = CHAR_NULL;\r
- HotKey.ScanCode = SCAN_F10;\r
- NewString = HiiGetString (gHiiHandle, STRING_TOKEN (FUNCTION_TEN_STRING), NULL);\r
+ HotKey.ScanCode = SCAN_F10;\r
+ NewString = HiiGetString (gHiiHandle, STRING_TOKEN (FUNCTION_TEN_STRING), NULL);\r
ASSERT (NewString != NULL);\r
FormBrowserEx2->RegisterHotKey (&HotKey, BROWSER_ACTION_SUBMIT, 0, NewString);\r
+ FreePool (NewString);\r
\r
- HotKey.ScanCode = SCAN_F9;\r
- NewString = HiiGetString (gHiiHandle, STRING_TOKEN (FUNCTION_NINE_STRING), NULL);\r
+ HotKey.ScanCode = SCAN_F9;\r
+ NewString = HiiGetString (gHiiHandle, STRING_TOKEN (FUNCTION_NINE_STRING), NULL);\r
ASSERT (NewString != NULL);\r
FormBrowserEx2->RegisterHotKey (&HotKey, BROWSER_ACTION_DEFAULT, EFI_HII_DEFAULT_CLASS_STANDARD, NewString);\r
+ FreePool (NewString);\r
}\r
\r
return EFI_SUCCESS;\r
EFI_STATUS\r
EFIAPI\r
UnloadDisplayEngine (\r
- IN EFI_HANDLE ImageHandle\r
+ IN EFI_HANDLE ImageHandle\r
)\r
{\r
- HiiRemovePackages(gHiiHandle);\r
+ HiiRemovePackages (gHiiHandle);\r
\r
FreeDisplayStrings ();\r
\r