Update Browser to provide the customization possibilities.
Signed-off-by: Eric Dong <eric.dong@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com> Tested-by: Laszlo Ersek <lersek@redhat.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14540 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
580
MdeModulePkg/Universal/DisplayEngineDxe/FormDisplay.h
Normal file
580
MdeModulePkg/Universal/DisplayEngineDxe/FormDisplay.h
Normal file
@ -0,0 +1,580 @@
|
||||
/** @file
|
||||
FormDiplay protocol to show Form
|
||||
|
||||
Copyright (c) 2013, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials are licensed and made available under
|
||||
the terms and conditions of the BSD License that accompanies this distribution.
|
||||
The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php.
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef __FORM_DISPLAY_H__
|
||||
#define __FORM_DISPLAY_H__
|
||||
|
||||
|
||||
#include <Library/UefiBootServicesTableLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/BaseMemoryLib.h>
|
||||
#include <Library/BaseLib.h>
|
||||
#include <Library/HiiLib.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
#include <Library/PrintLib.h>
|
||||
#include <Library/CustomizedDisplayLib.h>
|
||||
|
||||
#include <Protocol/FormBrowserEx2.h>
|
||||
#include <Protocol/SimpleTextIn.h>
|
||||
#include <Protocol/DisplayProtocol.h>
|
||||
|
||||
#include <Guid/MdeModuleHii.h>
|
||||
|
||||
//
|
||||
// This is the generated header file which includes whatever needs to be exported (strings + IFR)
|
||||
//
|
||||
extern UINT8 DisplayEngineStrings[];
|
||||
extern EFI_SCREEN_DESCRIPTOR gStatementDimensions;
|
||||
extern USER_INPUT *gUserInput;
|
||||
extern FORM_DISPLAY_ENGINE_FORM *gFormData;
|
||||
extern EFI_HII_HANDLE gHiiHandle;
|
||||
extern UINT16 gDirection;
|
||||
extern LIST_ENTRY gMenuOption;
|
||||
|
||||
//
|
||||
// Browser Global Strings
|
||||
//
|
||||
extern CHAR16 *gSaveFailed;
|
||||
extern CHAR16 *gPromptForData;
|
||||
extern CHAR16 *gPromptForPassword;
|
||||
extern CHAR16 *gPromptForNewPassword;
|
||||
extern CHAR16 *gConfirmPassword;
|
||||
extern CHAR16 *gConfirmError;
|
||||
extern CHAR16 *gPassowordInvalid;
|
||||
extern CHAR16 *gPressEnter;
|
||||
extern CHAR16 *gEmptyString;
|
||||
extern CHAR16 *gMiniString;
|
||||
extern CHAR16 *gOptionMismatch;
|
||||
extern CHAR16 *gFormSuppress;
|
||||
extern CHAR16 *gProtocolNotFound;
|
||||
|
||||
extern CHAR16 gPromptBlockWidth;
|
||||
extern CHAR16 gOptionBlockWidth;
|
||||
extern CHAR16 gHelpBlockWidth;
|
||||
extern CHAR16 *mUnknownString;
|
||||
|
||||
//
|
||||
// Screen definitions
|
||||
//
|
||||
|
||||
#define LEFT_SKIPPED_COLUMNS 3
|
||||
#define SCROLL_ARROW_HEIGHT 1
|
||||
#define POPUP_PAD_SPACE_COUNT 5
|
||||
#define POPUP_FRAME_WIDTH 2
|
||||
|
||||
//
|
||||
// Display definitions
|
||||
//
|
||||
#define LEFT_ONEOF_DELIMITER L'<'
|
||||
#define RIGHT_ONEOF_DELIMITER L'>'
|
||||
|
||||
#define LEFT_NUMERIC_DELIMITER L'['
|
||||
#define RIGHT_NUMERIC_DELIMITER L']'
|
||||
|
||||
#define LEFT_CHECKBOX_DELIMITER L'['
|
||||
#define RIGHT_CHECKBOX_DELIMITER L']'
|
||||
|
||||
#define CHECK_ON L'X'
|
||||
#define CHECK_OFF L' '
|
||||
|
||||
#define TIME_SEPARATOR L':'
|
||||
#define DATE_SEPARATOR L'/'
|
||||
|
||||
#define SUBTITLE_INDENT 2
|
||||
|
||||
//
|
||||
// This is the Input Error Message
|
||||
//
|
||||
#define INPUT_ERROR 1
|
||||
|
||||
//
|
||||
// This is the NV RAM update required Message
|
||||
//
|
||||
#define NV_UPDATE_REQUIRED 2
|
||||
//
|
||||
// Time definitions
|
||||
//
|
||||
#define ONE_SECOND 10000000
|
||||
|
||||
//
|
||||
// It take 23 characters including the NULL to print a 64 bits number with "[" and "]".
|
||||
// pow(2, 64) = [18446744073709551616]
|
||||
//
|
||||
#define MAX_NUMERIC_INPUT_WIDTH 23
|
||||
|
||||
#define EFI_HII_EXPRESSION_INCONSISTENT_IF 0
|
||||
#define EFI_HII_EXPRESSION_NO_SUBMIT_IF 1
|
||||
#define EFI_HII_EXPRESSION_GRAY_OUT_IF 2
|
||||
#define EFI_HII_EXPRESSION_SUPPRESS_IF 3
|
||||
#define EFI_HII_EXPRESSION_DISABLE_IF 4
|
||||
|
||||
//
|
||||
// Character definitions
|
||||
//
|
||||
#define CHAR_SPACE 0x0020
|
||||
|
||||
#define FORM_DISPLAY_DRIVER_SIGNATURE SIGNATURE_32 ('F', 'D', 'D', 'V')
|
||||
typedef struct {
|
||||
UINT32 Signature;
|
||||
|
||||
EFI_HANDLE Handle;
|
||||
|
||||
//
|
||||
// Produced protocol
|
||||
//
|
||||
EDKII_FORM_DISPLAY_ENGINE_PROTOCOL FromDisplayProt;
|
||||
} FORM_DISPLAY_DRIVER_PRIVATE_DATA;
|
||||
|
||||
|
||||
typedef enum {
|
||||
UiNoOperation,
|
||||
UiSelect,
|
||||
UiUp,
|
||||
UiDown,
|
||||
UiLeft,
|
||||
UiRight,
|
||||
UiReset,
|
||||
UiPrevious,
|
||||
UiPageUp,
|
||||
UiPageDown,
|
||||
UiHotKey,
|
||||
UiMaxOperation
|
||||
} UI_SCREEN_OPERATION;
|
||||
|
||||
typedef enum {
|
||||
CfInitialization,
|
||||
CfCheckSelection,
|
||||
CfRepaint,
|
||||
CfRefreshHighLight,
|
||||
CfUpdateHelpString,
|
||||
CfPrepareToReadKey,
|
||||
CfReadKey,
|
||||
CfScreenOperation,
|
||||
CfUiSelect,
|
||||
CfUiReset,
|
||||
CfUiLeft,
|
||||
CfUiRight,
|
||||
CfUiUp,
|
||||
CfUiPageUp,
|
||||
CfUiPageDown,
|
||||
CfUiDown,
|
||||
CfUiDefault,
|
||||
CfUiNoOperation,
|
||||
CfExit,
|
||||
CfUiHotKey,
|
||||
CfMaxControlFlag
|
||||
} UI_CONTROL_FLAG;
|
||||
|
||||
typedef enum {
|
||||
UIEventNone,
|
||||
UIEventKey,
|
||||
UIEventTimeOut,
|
||||
UIEventDriver
|
||||
} UI_EVENT_TYPE;
|
||||
|
||||
typedef struct {
|
||||
UINT16 ScanCode;
|
||||
UI_SCREEN_OPERATION ScreenOperation;
|
||||
} SCAN_CODE_TO_SCREEN_OPERATION;
|
||||
|
||||
typedef struct {
|
||||
UI_SCREEN_OPERATION ScreenOperation;
|
||||
UI_CONTROL_FLAG ControlFlag;
|
||||
} SCREEN_OPERATION_T0_CONTROL_FLAG;
|
||||
|
||||
typedef struct {
|
||||
EFI_QUESTION_ID QuestionId;
|
||||
UINT16 DisplayRow;
|
||||
} DISPLAY_HIGHLIGHT_MENU_INFO;
|
||||
|
||||
#define UI_MENU_OPTION_SIGNATURE SIGNATURE_32 ('u', 'i', 'm', 'm')
|
||||
|
||||
typedef struct {
|
||||
UINTN Signature;
|
||||
LIST_ENTRY Link;
|
||||
|
||||
EFI_HII_HANDLE Handle;
|
||||
FORM_DISPLAY_ENGINE_STATEMENT *ThisTag;
|
||||
UINT16 EntryNumber;
|
||||
|
||||
UINTN Row;
|
||||
UINTN Col;
|
||||
UINTN OptCol;
|
||||
CHAR16 *Description;
|
||||
UINTN Skip; // Number of lines
|
||||
|
||||
//
|
||||
// Display item sequence for date/time
|
||||
// Date: Month/Day/Year
|
||||
// Sequence: 0 1 2
|
||||
//
|
||||
// Time: Hour : Minute : Second
|
||||
// Sequence: 0 1 2
|
||||
//
|
||||
//
|
||||
UINTN Sequence;
|
||||
|
||||
BOOLEAN GrayOut;
|
||||
BOOLEAN ReadOnly;
|
||||
|
||||
//
|
||||
// Whether user could change value of this item
|
||||
//
|
||||
BOOLEAN IsQuestion;
|
||||
BOOLEAN NestInStatement;
|
||||
} UI_MENU_OPTION;
|
||||
|
||||
#define MENU_OPTION_FROM_LINK(a) CR (a, UI_MENU_OPTION, Link, UI_MENU_OPTION_SIGNATURE)
|
||||
|
||||
/**
|
||||
Print Question Value according to it's storage width and display attributes.
|
||||
|
||||
@param Question The Question to be printed.
|
||||
@param FormattedNumber Buffer for output string.
|
||||
@param BufferSize The FormattedNumber buffer size in bytes.
|
||||
|
||||
@retval EFI_SUCCESS Print success.
|
||||
@retval EFI_BUFFER_TOO_SMALL Buffer size is not enough for formatted number.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
PrintFormattedNumber (
|
||||
IN FORM_DISPLAY_ENGINE_STATEMENT *Question,
|
||||
IN OUT CHAR16 *FormattedNumber,
|
||||
IN UINTN BufferSize
|
||||
);
|
||||
|
||||
/**
|
||||
Set value of a data element in an Array by its Index.
|
||||
|
||||
@param Array The data array.
|
||||
@param Type Type of the data in this array.
|
||||
@param Index Zero based index for data in this array.
|
||||
@param Value The value to be set.
|
||||
|
||||
**/
|
||||
VOID
|
||||
SetArrayData (
|
||||
IN VOID *Array,
|
||||
IN UINT8 Type,
|
||||
IN UINTN Index,
|
||||
IN UINT64 Value
|
||||
);
|
||||
|
||||
/**
|
||||
Return data element in an Array by its Index.
|
||||
|
||||
@param Array The data array.
|
||||
@param Type Type of the data in this array.
|
||||
@param Index Zero based index for data in this array.
|
||||
|
||||
@retval Value The data to be returned
|
||||
|
||||
**/
|
||||
UINT64
|
||||
GetArrayData (
|
||||
IN VOID *Array,
|
||||
IN UINT8 Type,
|
||||
IN UINTN Index
|
||||
);
|
||||
|
||||
/**
|
||||
Search an Option of a Question by its value.
|
||||
|
||||
@param Question The Question
|
||||
@param OptionValue Value for Option to be searched.
|
||||
|
||||
@retval Pointer Pointer to the found Option.
|
||||
@retval NULL Option not found.
|
||||
|
||||
**/
|
||||
DISPLAY_QUESTION_OPTION *
|
||||
ValueToOption (
|
||||
IN FORM_DISPLAY_ENGINE_STATEMENT *Question,
|
||||
IN EFI_HII_VALUE *OptionValue
|
||||
);
|
||||
|
||||
/**
|
||||
Compare two Hii value.
|
||||
|
||||
@param Value1 Expression value to compare on left-hand.
|
||||
@param Value2 Expression value to compare on right-hand.
|
||||
@param Result Return value after compare.
|
||||
retval 0 Two operators equal.
|
||||
return Positive value if Value1 is greater than Value2.
|
||||
retval Negative value if Value1 is less than Value2.
|
||||
@param HiiHandle Only required for string compare.
|
||||
|
||||
@retval other Could not perform compare on two values.
|
||||
@retval EFI_SUCCESS Compare the value success.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
CompareHiiValue (
|
||||
IN EFI_HII_VALUE *Value1,
|
||||
IN EFI_HII_VALUE *Value2,
|
||||
OUT INTN *Result,
|
||||
IN EFI_HII_HANDLE HiiHandle OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Draw a pop up windows based on the dimension, number of lines and
|
||||
strings specified.
|
||||
|
||||
@param RequestedWidth The width of the pop-up.
|
||||
@param NumberOfLines The number of lines.
|
||||
@param ... A series of text strings that displayed in the pop-up.
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
CreateMultiStringPopUp (
|
||||
IN UINTN RequestedWidth,
|
||||
IN UINTN NumberOfLines,
|
||||
...
|
||||
);
|
||||
|
||||
/**
|
||||
Will copy LineWidth amount of a string in the OutputString buffer and return the
|
||||
number of CHAR16 characters that were copied into the OutputString buffer.
|
||||
The output string format is:
|
||||
Glyph Info + String info + '\0'.
|
||||
|
||||
In the code, it deals \r,\n,\r\n same as \n\r, also it not process the \r or \g.
|
||||
|
||||
@param InputString String description for this option.
|
||||
@param LineWidth Width of the desired string to extract in CHAR16
|
||||
characters
|
||||
@param GlyphWidth The glyph width of the begin of the char in the string.
|
||||
@param Index Where in InputString to start the copy process
|
||||
@param OutputString Buffer to copy the string into
|
||||
|
||||
@return Returns the number of CHAR16 characters that were copied into the OutputString
|
||||
buffer, include extra glyph info and '\0' info.
|
||||
|
||||
**/
|
||||
UINT16
|
||||
GetLineByWidth (
|
||||
IN CHAR16 *InputString,
|
||||
IN UINT16 LineWidth,
|
||||
IN OUT UINT16 *GlyphWidth,
|
||||
IN OUT UINTN *Index,
|
||||
OUT CHAR16 **OutputString
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Get the string based on the StringId and HII Package List Handle.
|
||||
|
||||
@param Token The String's ID.
|
||||
@param HiiHandle The Hii handle for this string package.
|
||||
|
||||
@return The output string.
|
||||
|
||||
**/
|
||||
CHAR16 *
|
||||
GetToken (
|
||||
IN EFI_STRING_ID Token,
|
||||
IN EFI_HII_HANDLE HiiHandle
|
||||
);
|
||||
|
||||
/**
|
||||
Count the storage space of a Unicode string.
|
||||
|
||||
This function handles the Unicode string with NARROW_CHAR
|
||||
and WIDE_CHAR control characters. NARROW_HCAR and WIDE_CHAR
|
||||
does not count in the resultant output. If a WIDE_CHAR is
|
||||
hit, then 2 Unicode character will consume an output storage
|
||||
space with size of CHAR16 till a NARROW_CHAR is hit.
|
||||
|
||||
If String is NULL, then ASSERT ().
|
||||
|
||||
@param String The input string to be counted.
|
||||
|
||||
@return Storage space for the input string.
|
||||
|
||||
**/
|
||||
UINTN
|
||||
GetStringWidth (
|
||||
IN CHAR16 *String
|
||||
);
|
||||
|
||||
/**
|
||||
This routine reads a numeric value from the user input.
|
||||
|
||||
@param MenuOption Pointer to the current input menu.
|
||||
|
||||
@retval EFI_SUCCESS If numerical input is read successfully
|
||||
@retval EFI_DEVICE_ERROR If operation fails
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
GetNumericInput (
|
||||
IN UI_MENU_OPTION *MenuOption
|
||||
);
|
||||
|
||||
/**
|
||||
Get string or password input from user.
|
||||
|
||||
@param MenuOption Pointer to the current input menu.
|
||||
@param Prompt The prompt string shown on popup window.
|
||||
@param StringPtr Old user input and destination for use input string.
|
||||
|
||||
@retval EFI_SUCCESS If string input is read successfully
|
||||
@retval EFI_DEVICE_ERROR If operation fails
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
ReadString (
|
||||
IN UI_MENU_OPTION *MenuOption,
|
||||
IN CHAR16 *Prompt,
|
||||
IN OUT CHAR16 *StringPtr
|
||||
);
|
||||
|
||||
/**
|
||||
Draw a pop up windows based on the dimension, number of lines and
|
||||
strings specified.
|
||||
|
||||
@param RequestedWidth The width of the pop-up.
|
||||
@param NumberOfLines The number of lines.
|
||||
@param Marker The variable argument list for the list of string to be printed.
|
||||
|
||||
**/
|
||||
VOID
|
||||
CreateSharedPopUp (
|
||||
IN UINTN RequestedWidth,
|
||||
IN UINTN NumberOfLines,
|
||||
IN VA_LIST Marker
|
||||
);
|
||||
|
||||
/**
|
||||
Wait for a key to be pressed by user.
|
||||
|
||||
@param Key The key which is pressed by user.
|
||||
|
||||
@retval EFI_SUCCESS The function always completed successfully.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
WaitForKeyStroke (
|
||||
OUT EFI_INPUT_KEY *Key
|
||||
);
|
||||
|
||||
/**
|
||||
Get selection for OneOf and OrderedList (Left/Right will be ignored).
|
||||
|
||||
@param MenuOption Pointer to the current input menu.
|
||||
|
||||
@retval EFI_SUCCESS If Option input is processed successfully
|
||||
@retval EFI_DEVICE_ERROR If operation fails
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
GetSelectionInputPopUp (
|
||||
IN UI_MENU_OPTION *MenuOption
|
||||
);
|
||||
|
||||
/**
|
||||
Process the help string: Split StringPtr to several lines of strings stored in
|
||||
FormattedString and the glyph width of each line cannot exceed gHelpBlockWidth.
|
||||
|
||||
@param StringPtr The entire help string.
|
||||
@param FormattedString The oupput formatted string.
|
||||
@param EachLineWidth The max string length of each line in the formatted string.
|
||||
@param RowCount TRUE: if Question is selected.
|
||||
|
||||
**/
|
||||
UINTN
|
||||
ProcessHelpString (
|
||||
IN CHAR16 *StringPtr,
|
||||
OUT CHAR16 **FormattedString,
|
||||
OUT UINT16 *EachLineWidth,
|
||||
IN UINTN RowCount
|
||||
);
|
||||
|
||||
/**
|
||||
Process a Question's Option (whether selected or un-selected).
|
||||
|
||||
@param MenuOption The MenuOption for this Question.
|
||||
@param Selected TRUE: if Question is selected.
|
||||
@param OptionString Pointer of the Option String to be displayed.
|
||||
@param SkipErrorValue Whether need to return when value without option for it.
|
||||
|
||||
@retval EFI_SUCCESS Question Option process success.
|
||||
@retval Other Question Option process fail.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
ProcessOptions (
|
||||
IN UI_MENU_OPTION *MenuOption,
|
||||
IN BOOLEAN Selected,
|
||||
OUT CHAR16 **OptionString,
|
||||
IN BOOLEAN SkipErrorValue
|
||||
);
|
||||
|
||||
/**
|
||||
Set Buffer to Value for Size bytes.
|
||||
|
||||
@param Buffer Memory to set.
|
||||
@param Size Number of bytes to set
|
||||
@param Value Value of the set operation.
|
||||
|
||||
**/
|
||||
VOID
|
||||
SetUnicodeMem (
|
||||
IN VOID *Buffer,
|
||||
IN UINTN Size,
|
||||
IN CHAR16 Value
|
||||
);
|
||||
|
||||
/**
|
||||
Display one form, and return user input.
|
||||
|
||||
@param FormData Form Data to be shown.
|
||||
@param UserInputData User input data.
|
||||
|
||||
@retval EFI_SUCCESS Form Data is shown, and user input is got.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
FormDisplay (
|
||||
IN FORM_DISPLAY_ENGINE_FORM *FormData,
|
||||
OUT USER_INPUT *UserInputData
|
||||
);
|
||||
|
||||
/**
|
||||
Exit Display and Clear Screen to the original state.
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
ExitDisplay (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Process validate for one question.
|
||||
|
||||
@param Question The question which need to validate.
|
||||
|
||||
@retval EFI_SUCCESS Question Option process success.
|
||||
@retval Other Question Option process fail.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
ValidateQuestion (
|
||||
IN FORM_DISPLAY_ENGINE_STATEMENT *Question
|
||||
);
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user