**/\r
VOID\r
IfrStrToUpper (\r
- CHAR16 *String\r
+ IN CHAR16 *String\r
)\r
{\r
while (*String != 0) {\r
if (String == NULL) {\r
return EFI_NOT_FOUND;\r
}\r
- \r
+\r
IfrStrToUpper (String);\r
StringPtr = StrStr (String, L"0X");\r
if (StringPtr != NULL) {\r
}\r
if (String[1] != NULL) {\r
FreePool (String[1]);\r
- } \r
+ }\r
if (StringPtr != NULL) {\r
FreePool (StringPtr);\r
}\r
}\r
if (String[1] != NULL) {\r
FreePool (String[1]);\r
- } \r
+ }\r
\r
return Status;\r
}\r
}\r
if (String[1] != NULL) {\r
FreePool (String[1]);\r
- } \r
+ }\r
\r
return Status;\r
}\r
}\r
if (String[1] != NULL) {\r
FreePool (String[1]);\r
- } \r
+ }\r
\r
return Status;\r
}\r
}\r
if (String[1] != NULL) {\r
FreePool (String[1]);\r
- } \r
+ }\r
\r
return Status;\r
}\r
Convert a numeric value to a Unicode String and insert it to String Package.\r
This string is used as the Unicode Name for the EFI Variable. This is to support\r
the deprecated vareqval opcode.\r
- \r
+\r
@param FormSet The FormSet.\r
@param Statement The numeric question whose VarStoreInfo.VarName is the\r
numeric value which is used to produce the Unicode Name\r
for the EFI Variable.\r
- \r
+\r
If the Statement is NULL, the ASSERT.\r
If the opcode is not Numeric, then ASSERT.\r
- \r
+\r
@retval EFI_SUCCESS The funtion always succeeds.\r
**/\r
EFI_STATUS\r
\r
ASSERT (Statement != NULL);\r
ASSERT (Statement->Operand == EFI_IFR_NUMERIC_OP);\r
- \r
+\r
UnicodeValueToString (Str, 0, Statement->VarStoreInfo.VarName, MAXIMUM_VALUE_CHARACTERS - 1);\r
\r
Id = HiiSetString (FormSet->HiiHandle, 0, Str, NULL);\r
}\r
\r
Statement->VarStoreInfo.VarName = Id;\r
- \r
+\r
return EFI_SUCCESS;\r
}\r
\r
/**\r
Check if the next opcode is the EFI_IFR_EXTEND_OP_VAREQNAME.\r
- \r
+\r
@param OpCodeData The current opcode.\r
- \r
+\r
@retval TRUE Yes.\r
@retval FALSE No.\r
**/\r
BOOLEAN\r
IsNextOpCodeGuidedVarEqName (\r
- UINT8 *OpCodeData\r
+ IN UINT8 *OpCodeData\r
)\r
{\r
//\r
if (*OpCodeData == EFI_IFR_GUID_OP) {\r
if (CompareGuid (&gEfiIfrFrameworkGuid, (EFI_GUID *)(OpCodeData + sizeof (EFI_IFR_OP_HEADER)))) {\r
//\r
- // Specific GUIDed opcodes to support IFR generated from Framework HII VFR \r
+ // Specific GUIDed opcodes to support IFR generated from Framework HII VFR\r
//\r
if ((((EFI_IFR_GUID_VAREQNAME *) OpCodeData)->ExtendOpCode) == EFI_IFR_EXTEND_OP_VAREQNAME) {\r
return TRUE;\r
)\r
{\r
CHAR16 *Name;\r
- \r
+\r
if (Storage->Type == EFI_HII_VARSTORE_BUFFER) {\r
Name = Storage->Name;\r
} else {\r
Name = NULL;\r
}\r
- \r
+\r
Storage->ConfigHdr = HiiConstructConfigHdr (\r
&Storage->Guid,\r
Name,\r
FormSet->DriverHandle\r
);\r
- \r
+\r
if (Storage->ConfigHdr == NULL) {\r
return EFI_NOT_FOUND;\r
}\r
case EFI_IFR_SUBTITLE_OP:\r
CurrentStatement = CreateStatement (OpCodeData, FormSet, CurrentForm);\r
ASSERT (CurrentStatement != NULL);\r
- \r
+\r
CurrentStatement->Flags = ((EFI_IFR_SUBTITLE *) OpCodeData)->Flags;\r
\r
if (Scope != 0) {\r
case EFI_IFR_NUMERIC_OP:\r
CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm);\r
ASSERT(CurrentStatement != NULL);\r
- \r
+\r
CurrentStatement->Flags = ((EFI_IFR_ONE_OF *) OpCodeData)->Flags;\r
Value = &CurrentStatement->HiiValue;\r
\r
case EFI_IFR_ORDERED_LIST_OP:\r
CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm);\r
ASSERT(CurrentStatement != NULL);\r
- \r
+\r
CurrentStatement->Flags = ((EFI_IFR_ORDERED_LIST *) OpCodeData)->Flags;\r
CurrentStatement->MaxContainers = ((EFI_IFR_ORDERED_LIST *) OpCodeData)->MaxContainers;\r
\r
case EFI_IFR_CHECKBOX_OP:\r
CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm);\r
ASSERT(CurrentStatement != NULL);\r
- \r
+\r
CurrentStatement->Flags = ((EFI_IFR_CHECKBOX *) OpCodeData)->Flags;\r
CurrentStatement->StorageWidth = sizeof (BOOLEAN);\r
CurrentStatement->HiiValue.Type = EFI_IFR_TYPE_BOOLEAN;\r
case EFI_IFR_DATE_OP:\r
CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm);\r
ASSERT(CurrentStatement != NULL);\r
- \r
+\r
CurrentStatement->Flags = ((EFI_IFR_DATE *) OpCodeData)->Flags;\r
CurrentStatement->HiiValue.Type = EFI_IFR_TYPE_DATE;\r
\r
case EFI_IFR_TIME_OP:\r
CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm);\r
ASSERT(CurrentStatement != NULL);\r
- \r
+\r
CurrentStatement->Flags = ((EFI_IFR_TIME *) OpCodeData)->Flags;\r
CurrentStatement->HiiValue.Type = EFI_IFR_TYPE_TIME;\r
\r
\r
InputText[0] = LEFT_NUMERIC_DELIMITER;\r
SetUnicodeMem (InputText + 1, InputWidth, L' ');\r
- ASSERT (InputWidth + 2 < MAX_NUMERIC_INPUT_WIDTH); \r
+ ASSERT (InputWidth + 2 < MAX_NUMERIC_INPUT_WIDTH);\r
InputText[InputWidth + 1] = RIGHT_NUMERIC_DELIMITER;\r
InputText[InputWidth + 2] = L'\0';\r
\r
**/\r
VOID\r
ClearLines (\r
- UINTN LeftColumn,\r
- UINTN RightColumn,\r
- UINTN TopRow,\r
- UINTN BottomRow,\r
- UINTN TextAttribute\r
+ IN UINTN LeftColumn,\r
+ IN UINTN RightColumn,\r
+ IN UINTN TopRow,\r
+ IN UINTN BottomRow,\r
+ IN UINTN TextAttribute\r
)\r
{\r
CHAR16 *Buffer;\r
**/\r
VOID\r
NewStrCat (\r
- CHAR16 *Destination,\r
- CHAR16 *Source\r
+ IN OUT CHAR16 *Destination,\r
+ IN CHAR16 *Source\r
)\r
{\r
UINTN Length;\r
**/\r
UINTN\r
GetStringWidth (\r
- CHAR16 *String\r
+ IN CHAR16 *String\r
)\r
{\r
UINTN Index;\r
FORM_BROWSER_STATEMENT *Statement;\r
UINT16 NumberOfLines;\r
EFI_STATUS Status;\r
+ UI_MENU_OPTION *MenuOption;\r
\r
Handle = Selection->Handle;\r
MenuItemCount = 0;\r
return Status;\r
}\r
\r
+ Selection->FormEditable = FALSE;\r
Link = GetFirstNode (&Selection->Form->StatementListHead);\r
while (!IsNull (&Selection->Form->StatementListHead, Link)) {\r
Statement = FORM_BROWSER_STATEMENT_FROM_LINK (Link);\r
// We are NOT!! removing this StringPtr buffer via FreePool since it is being used in the menuoptions, we will do\r
// it in UiFreeMenu.\r
//\r
- UiAddMenuOption (StringPtr, Selection->Handle, Statement, NumberOfLines, MenuItemCount);\r
+ MenuOption = UiAddMenuOption (StringPtr, Selection->Handle, Statement, NumberOfLines, MenuItemCount);\r
MenuItemCount++;\r
+\r
+ if (MenuOption->IsQuestion && !MenuOption->ReadOnly) {\r
+ //\r
+ // At least one item is not readonly, this Form is considered as editable\r
+ //\r
+ Selection->FormEditable = TRUE;\r
+ }\r
}\r
\r
Link = GetNextNode (&Selection->Form->StatementListHead, Link);\r
VOID\r
)\r
{\r
- gFunctionOneString = GetToken (STRING_TOKEN (FUNCTION_ONE_STRING), gHiiHandle);\r
gFunctionNineString = GetToken (STRING_TOKEN (FUNCTION_NINE_STRING), gHiiHandle);\r
gFunctionTenString = GetToken (STRING_TOKEN (FUNCTION_TEN_STRING), gHiiHandle);\r
gEnterString = GetToken (STRING_TOKEN (ENTER_STRING), gHiiHandle);\r
VOID\r
)\r
{\r
- FreePool (gFunctionOneString);\r
FreePool (gFunctionNineString);\r
FreePool (gFunctionTenString);\r
FreePool (gEnterString);\r
/**\r
Update key's help imformation.\r
\r
+ @param Selection Tell setup browser the information about the Selection\r
@param MenuOption The Menu option\r
@param Selected Whether or not a tag be selected\r
\r
**/\r
VOID\r
UpdateKeyHelp (\r
+ IN UI_MENU_SELECTION *Selection,\r
IN UI_MENU_OPTION *MenuOption,\r
IN BOOLEAN Selected\r
)\r
\r
if (!Selected) {\r
if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) {\r
- PrintStringAt (StartColumnOfHelp, TopRowOfHelp, gFunctionOneString);\r
- PrintStringAt (SecCol, TopRowOfHelp, gFunctionNineString);\r
- PrintStringAt (ThdCol, TopRowOfHelp, gFunctionTenString);\r
+ if (Selection->FormEditable) {\r
+ PrintStringAt (SecCol, TopRowOfHelp, gFunctionNineString);\r
+ PrintStringAt (ThdCol, TopRowOfHelp, gFunctionTenString);\r
+ }\r
PrintStringAt (ThdCol, BottomRowOfHelp, gEscapeString);\r
}\r
\r
ClearLines (LeftColumnOfHelp, RightColumnOfHelp, TopRowOfHelp, BottomRowOfHelp, KEYHELP_TEXT | KEYHELP_BACKGROUND);\r
\r
if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) {\r
- PrintStringAt (StartColumnOfHelp, TopRowOfHelp, gFunctionOneString);\r
- PrintStringAt (SecCol, TopRowOfHelp, gFunctionNineString);\r
- PrintStringAt (ThdCol, TopRowOfHelp, gFunctionTenString);\r
+ if (Selection->FormEditable) {\r
+ PrintStringAt (SecCol, TopRowOfHelp, gFunctionNineString);\r
+ PrintStringAt (ThdCol, TopRowOfHelp, gFunctionTenString);\r
+ }\r
PrintStringAt (ThdCol, BottomRowOfHelp, gEscapeString);\r
}\r
\r
\r
if (!Selected) {\r
if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) {\r
- PrintStringAt (StartColumnOfHelp, TopRowOfHelp, gFunctionOneString);\r
- PrintStringAt (SecCol, TopRowOfHelp, gFunctionNineString);\r
- PrintStringAt (ThdCol, TopRowOfHelp, gFunctionTenString);\r
+ if (Selection->FormEditable) {\r
+ PrintStringAt (SecCol, TopRowOfHelp, gFunctionNineString);\r
+ PrintStringAt (ThdCol, TopRowOfHelp, gFunctionTenString);\r
+ }\r
PrintStringAt (ThdCol, BottomRowOfHelp, gEscapeString);\r
}\r
\r
\r
TempString = AllocateCopyPool ((Maximum + 1) * sizeof (CHAR16), Question->BufferValue);\r
ASSERT (TempString != NULL);\r
- \r
+\r
TempString[Maximum] = L'\0';\r
\r
if (StrCmp (StringPtr, TempString) != 0) {\r
UINTN *OldIndexArray;\r
\r
BlockWidth = (UINTN) gHelpBlockWidth - 1;\r
- \r
+\r
//\r
// every three elements of IndexArray form a screen-line of string:[ IndexArray[i*3], IndexArray[i*3+1] )\r
// IndexArray[i*3+2] stores the initial glyph width of single character. to save this is because we want\r
OldIndexArray = IndexArray;\r
IndexArray = AllocatePool (AllocateSize * sizeof (UINTN) * 3);\r
ASSERT (IndexArray != NULL);\r
- \r
+\r
CopyMem (IndexArray, OldIndexArray, LineCount * sizeof (UINTN) * 3);\r
FreePool (OldIndexArray);\r
}\r
//\r
// Browser Global Strings\r
//\r
-CHAR16 *gFunctionOneString;\r
CHAR16 *gFunctionNineString;\r
CHAR16 *gFunctionTenString;\r
CHAR16 *gEnterString;\r
//\r
// Function key prompt can not be displayed if the function key has been disabled.\r
//\r
- if ((gFunctionKeySetting & FUNCTION_ONE) != FUNCTION_ONE) {\r
- gFunctionOneString = GetToken (STRING_TOKEN (EMPTY_STRING), gHiiHandle);\r
- }\r
-\r
if ((gFunctionKeySetting & FUNCTION_NINE) != FUNCTION_NINE) {\r
gFunctionNineString = GetToken (STRING_TOKEN (EMPTY_STRING), gHiiHandle);\r
}\r
// Definition for function key setting\r
//\r
#define NONE_FUNCTION_KEY_SETTING 0\r
-#define DEFAULT_FUNCTION_KEY_SETTING (FUNCTION_ONE | FUNCTION_NINE | FUNCTION_TEN)\r
+#define DEFAULT_FUNCTION_KEY_SETTING (FUNCTION_NINE | FUNCTION_TEN)\r
\r
-#define FUNCTION_ONE (1 << 0)\r
#define FUNCTION_NINE (1 << 2)\r
#define FUNCTION_TEN (1 << 3)\r
\r
//\r
// Browser Global Strings\r
//\r
-extern CHAR16 *gFunctionOneString;\r
extern CHAR16 *gFunctionNineString;\r
extern CHAR16 *gFunctionTenString;\r
extern CHAR16 *gEnterString;\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
+#\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
#\r
@param NumberOfLines Display lines for this Menu Option.\r
@param MenuItemCount The index for this Option in the Menu.\r
\r
+ @retval Pointer Pointer to the added Menu Option.\r
+\r
**/\r
-VOID\r
+UI_MENU_OPTION *\r
UiAddMenuOption (\r
IN CHAR16 *String,\r
IN EFI_HII_HANDLE Handle,\r
UINTN Count;\r
\r
Count = 1;\r
+ MenuOption = NULL;\r
\r
if (Statement->Operand == EFI_IFR_DATE_OP || Statement->Operand == EFI_IFR_TIME_OP) {\r
//\r
MenuOption->GrayOut = Statement->GrayOutExpression->Result.Value.b;\r
}\r
\r
+ switch (Statement->Operand) {\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
+\r
+ default:\r
+ MenuOption->IsQuestion = FALSE;\r
+ break;\r
+ }\r
+\r
if ((Statement->ValueExpression != NULL) ||\r
((Statement->QuestionFlags & EFI_IFR_FLAG_READ_ONLY) != 0)) {\r
MenuOption->ReadOnly = TRUE;\r
\r
InsertTailList (&Menu, &MenuOption->Link);\r
}\r
+\r
+ return MenuOption;\r
}\r
\r
\r
}\r
}\r
\r
- UpdateKeyHelp (MenuOption, FALSE);\r
+ UpdateKeyHelp (Selection, MenuOption, FALSE);\r
\r
//\r
// Clear reverse attribute\r
break;\r
\r
case CHAR_NULL:\r
- if (((Key.ScanCode == SCAN_F1) && ((gFunctionKeySetting & FUNCTION_ONE) != FUNCTION_ONE)) ||\r
- ((Key.ScanCode == SCAN_F9) && ((gFunctionKeySetting & FUNCTION_NINE) != FUNCTION_NINE)) ||\r
+ if (((Key.ScanCode == SCAN_F9) && ((gFunctionKeySetting & FUNCTION_NINE) != FUNCTION_NINE)) ||\r
((Key.ScanCode == SCAN_F10) && ((gFunctionKeySetting & FUNCTION_TEN) != FUNCTION_TEN))\r
) {\r
//\r
//\r
// Editable Questions: oneof, ordered list, checkbox, numeric, string, password\r
//\r
- UpdateKeyHelp (MenuOption, TRUE);\r
+ UpdateKeyHelp (Selection, MenuOption, TRUE);\r
Status = ProcessOptions (Selection, MenuOption, TRUE, &OptionString);\r
\r
if (EFI_ERROR (Status)) {\r
Repaint = TRUE;\r
NewLine = TRUE;\r
- UpdateKeyHelp (MenuOption, FALSE);\r
- } else {\r
- Selection->Action = UI_ACTION_REFRESH_FORM;\r
- }\r
+ UpdateKeyHelp (Selection, MenuOption, FALSE);\r
+ } else {\r
+ Selection->Action = UI_ACTION_REFRESH_FORM;\r
+ }\r
\r
if (OptionString != NULL) {\r
FreePool (OptionString);\r
\r
case CfUiDefault:\r
ControlFlag = CfCheckSelection;\r
+ if (!Selection->FormEditable) {\r
+ //\r
+ // This Form is not editable, ignore the F9 (reset to default)\r
+ //\r
+ break;\r
+ }\r
\r
Status = ExtractFormDefault (Selection->FormSet, Selection->Form, DefaultId);\r
\r
FORM_BROWSER_FORMSET *FormSet;\r
FORM_BROWSER_FORM *Form;\r
FORM_BROWSER_STATEMENT *Statement;\r
+\r
+ //\r
+ // Whether the Form is editable\r
+ //\r
+ BOOLEAN FormEditable;\r
} UI_MENU_SELECTION;\r
\r
#define UI_MENU_OPTION_SIGNATURE SIGNATURE_32 ('u', 'i', 'm', 'm')\r
\r
BOOLEAN GrayOut;\r
BOOLEAN ReadOnly;\r
+\r
+ //\r
+ // Whether user could change value of this item\r
+ //\r
+ BOOLEAN IsQuestion;\r
} UI_MENU_OPTION;\r
\r
#define MENU_OPTION_FROM_LINK(a) CR (a, UI_MENU_OPTION, Link, UI_MENU_OPTION_SIGNATURE)\r
@param NumberOfLines Display lines for this Menu Option.\r
@param MenuItemCount The index for this Option in the Menu.\r
\r
+ @retval Pointer Pointer to the added Menu Option.\r
+\r
**/\r
-VOID\r
+UI_MENU_OPTION *\r
UiAddMenuOption (\r
IN CHAR16 *String,\r
IN EFI_HII_HANDLE Handle,\r
/**\r
Update key's help imformation.\r
\r
+ @param Selection Tell setup browser the information about the Selection\r
@param MenuOption The Menu option\r
@param Selected Whether or not a tag be selected\r
\r
**/\r
VOID\r
UpdateKeyHelp (\r
+ IN UI_MENU_SELECTION *Selection,\r
IN UI_MENU_OPTION *MenuOption,\r
IN BOOLEAN Selected\r
);\r
**/\r
VOID\r
ClearLines (\r
- UINTN LeftColumn,\r
- UINTN RightColumn,\r
- UINTN TopRow,\r
- UINTN BottomRow,\r
- UINTN TextAttribute\r
+ IN UINTN LeftColumn,\r
+ IN UINTN RightColumn,\r
+ IN UINTN TopRow,\r
+ IN UINTN BottomRow,\r
+ IN UINTN TextAttribute\r
);\r
\r
/**\r
**/\r
UINTN\r
GetStringWidth (\r
- CHAR16 *String\r
+ IN CHAR16 *String\r
);\r
\r
/**\r
**/\r
VOID\r
NewStrCat (\r
- CHAR16 *Destination,\r
- CHAR16 *Source\r
+ IN OUT CHAR16 *Destination,\r
+ IN CHAR16 *Source\r
);\r
\r
/**\r