//\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 *gBrwoserError;\r
+CHAR16 *gBrowserError;\r
CHAR16 *gSaveFailed;\r
CHAR16 *gNoSubmitIfFailed;\r
CHAR16 *gSaveProcess;\r
VOID\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
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
- gBrwoserError = GetToken (STRING_TOKEN (STATUS_BROWSER_ERROR), 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
FreePool (gEmptyString);\r
FreePool (gSaveFailed);\r
FreePool (gNoSubmitIfFailed);\r
+ FreePool (gReconnectFail);\r
+ FreePool (gReconnectRequired);\r
+ FreePool (gChangesOpt);\r
+ FreePool (gReconnectConfirmChanges);\r
FreePool (gSaveProcess);\r
FreePool (gSaveNoSubmitProcess);\r
FreePool (gDiscardChange);\r
FreePool (gOptionMismatch);\r
FreePool (gFormSuppress);\r
FreePool (gProtocolNotFound);\r
- FreePool (gBrwoserError);\r
+ FreePool (gBrowserError);\r
FreePool (gNoSubmitIf);\r
FreePool (gFormNotFound);\r
FreePool (gConfirmDefaultMsg);\r
\r
TopRow = gStatementDimensions.TopRow + SCROLL_ARROW_HEIGHT;\r
BottomRow = gStatementDimensions.BottomRow - SCROLL_ARROW_HEIGHT;\r
-\r
- if (gMisMatch) {\r
+ //\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
//\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
- ASSERT (gFormData->HiiHandle == gHighligthMenuInfo.HiiHandle &&\r
- gFormData->FormId == gHighligthMenuInfo.FormId);\r
\r
*HighlightMenu = FindHighLightMenuOption(NULL);\r
if (*HighlightMenu != NULL) {\r
*SkipValue = 0;\r
}\r
\r
- gMisMatch = FALSE;\r
} else if (FormData->HighLightedStatement != NULL) {\r
if (IsSavedHighlightStatement (FormData->HighLightedStatement)) {\r
//\r
*SkipValue = 0;\r
}\r
\r
+ gMisMatch = FALSE;\r
+\r
//\r
// First enter to show the menu, update highlight info.\r
//\r
UINT32 CheckFlags;\r
BOOLEAN RetVal;\r
UINTN CatLen;\r
+ UINTN MaxLen;\r
\r
CfmStrLen = 0;\r
CatLen = StrLen (gConfirmMsgConnect);\r
// Allocate buffer to save the string.\r
// String + "?" + "\0"\r
//\r
- CfmStr = AllocateZeroPool ((CfmStrLen + 1 + 1) * sizeof (CHAR16));\r
+ MaxLen = CfmStrLen + 1 + 1;\r
+ CfmStr = AllocateZeroPool (MaxLen * sizeof (CHAR16));\r
ASSERT (CfmStr != NULL);\r
\r
if ((Action & BROWSER_ACTION_DISCARD) == BROWSER_ACTION_DISCARD) {\r
- StrCpy (CfmStr, gConfirmDiscardMsg);\r
+ StrCpyS (CfmStr, MaxLen, gConfirmDiscardMsg);\r
}\r
\r
if ((Action & BROWSER_ACTION_DEFAULT) == BROWSER_ACTION_DEFAULT) {\r
if (CfmStr[0] != 0) {\r
- StrCat (CfmStr, gConfirmMsgConnect);\r
- StrCat (CfmStr, gConfirmDefaultMsg2nd);\r
+ StrCatS (CfmStr, MaxLen, gConfirmMsgConnect);\r
+ StrCatS (CfmStr, MaxLen, gConfirmDefaultMsg2nd);\r
} else {\r
- StrCpy (CfmStr, gConfirmDefaultMsg);\r
+ StrCpyS (CfmStr, MaxLen, gConfirmDefaultMsg);\r
}\r
}\r
\r
if ((Action & BROWSER_ACTION_SUBMIT) == BROWSER_ACTION_SUBMIT) {\r
if (CfmStr[0] != 0) {\r
- StrCat (CfmStr, gConfirmMsgConnect);\r
- StrCat (CfmStr, gConfirmSubmitMsg2nd);\r
+ StrCatS (CfmStr, MaxLen, gConfirmMsgConnect);\r
+ StrCatS (CfmStr, MaxLen, gConfirmSubmitMsg2nd);\r
} else {\r
- StrCpy (CfmStr, gConfirmSubmitMsg);\r
+ StrCpyS (CfmStr, MaxLen, gConfirmSubmitMsg);\r
}\r
}\r
\r
if ((Action & BROWSER_ACTION_RESET) == BROWSER_ACTION_RESET) {\r
if (CfmStr[0] != 0) {\r
- StrCat (CfmStr, gConfirmMsgConnect);\r
- StrCat (CfmStr, gConfirmResetMsg2nd);\r
+ StrCatS (CfmStr, MaxLen, gConfirmMsgConnect);\r
+ StrCatS (CfmStr, MaxLen, gConfirmResetMsg2nd);\r
} else {\r
- StrCpy (CfmStr, gConfirmResetMsg);\r
+ StrCpyS (CfmStr, MaxLen, gConfirmResetMsg);\r
}\r
}\r
\r
if ((Action & BROWSER_ACTION_EXIT) == BROWSER_ACTION_EXIT) {\r
if (CfmStr[0] != 0) {\r
- StrCat (CfmStr, gConfirmMsgConnect);\r
- StrCat (CfmStr, gConfirmExitMsg2nd);\r
+ StrCatS (CfmStr, MaxLen, gConfirmMsgConnect);\r
+ StrCatS (CfmStr, MaxLen, gConfirmExitMsg2nd);\r
} else {\r
- StrCpy (CfmStr, gConfirmExitMsg);\r
+ StrCpyS (CfmStr, MaxLen, gConfirmExitMsg);\r
}\r
}\r
\r
- StrCat (CfmStr, gConfirmMsgEnd);\r
+ StrCatS (CfmStr, MaxLen, gConfirmMsgEnd);\r
\r
do {\r
CreateDialog (&Key, gEmptyString, CfmStr, gConfirmOpt, gEmptyString, NULL);\r
} while (((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) != (gConfirmOptYes[0] | UPPER_LOWER_CASE_OFFSET)) &&\r
- ((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) != (gConfirmOptNo[0] | UPPER_LOWER_CASE_OFFSET)));\r
+ ((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) != (gConfirmOptNo[0] | UPPER_LOWER_CASE_OFFSET)) &&\r
+ (Key.ScanCode != SCAN_ESC));\r
\r
if ((Key.UnicodeChar | UPPER_LOWER_CASE_OFFSET) == (gConfirmOptYes[0] | UPPER_LOWER_CASE_OFFSET)) {\r
RetVal = TRUE;\r
UINTN Temp3;\r
EFI_STATUS Status;\r
UINTN Row;\r
+ BOOLEAN IsProcessingFirstRow;\r
UINTN Col;\r
UINTN PromptLineNum;\r
UINTN OptionLineNum;\r
PromptLineNum = 0;\r
OptionLineNum = 0;\r
MaxRow = 0;\r
+ IsProcessingFirstRow = TRUE;\r
\r
//\r
// Set default color.\r
//\r
PrintStringAtWithWidth (BeginCol, Row, L"", SkipWidth);\r
\r
- if (Statement->OpCode->OpCode == EFI_IFR_REF_OP && MenuOption->Col >= 2) {\r
+ if (Statement->OpCode->OpCode == EFI_IFR_REF_OP && MenuOption->Col >= 2 && IsProcessingFirstRow) {\r
//\r
// Print Arrow for Goto button.\r
//\r
Row,\r
GEOMETRICSHAPE_RIGHT_TRIANGLE\r
);\r
+ IsProcessingFirstRow = FALSE;\r
}\r
DisplayMenuString (MenuOption, MenuOption->Col, Row, OutputString, PromptWidth + AdjustValue, Highlight);\r
PromptLineNum ++;\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
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
//\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
- StringPtr = GetToken (STRING_TOKEN (EMPTY_STRING), gHiiHandle);\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
- StringPtr = GetToken (HelpInfo, gFormData->HiiHandle);\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
\r
//\r
if (HelpLine > 2 * RowCount - 2) {\r
HelpPageCount = (HelpLine - RowCount + 1) / (RowCount - 2) + 1;\r
- if ((HelpLine - RowCount + 1) % (RowCount - 2) > 1) {\r
+ if ((HelpLine - RowCount + 1) % (RowCount - 2) != 0) {\r
HelpPageCount += 1;\r
}\r
} else {\r
ErrorInfo = gNoSubmitIfFailed;\r
break;\r
\r
+ case BROWSER_RECONNECT_FAIL:\r
+ ErrorInfo = gReconnectFail;\r
+ break;\r
+\r
+ case BROWSER_RECONNECT_SAVE_CHANGES:\r
+ ErrorInfo = gReconnectConfirmChanges;\r
+ break;\r
+\r
+ case BROWSER_RECONNECT_REQUIRED:\r
+ ErrorInfo = gReconnectRequired;\r
+ break;\r
+\r
default:\r
- ErrorInfo = gBrwoserError;\r
+ ErrorInfo = gBrowserError;\r
break;\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
- DiscardChange = gDiscardChange[0];\r
\r
do {\r
CreateDialog (&Key, gEmptyString, ErrorInfo, PrintString, gEmptyString, NULL);\r