/** @file Copyright (c) 2004 - 2007, Intel Corporation All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which 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. Module Name: Ui.h Abstract: Head file UI Revision History **/ #ifndef _UI_H #define _UI_H //@MT:#include "Tiano.h" //@MT:#include "EfiDriverLib.h" #include "Setup.h" //@MT:#include "GraphicsLib.h" //@MT:#include "EfiPrintLib.h" // // Globals // #define REGULAR_NUMERIC 0 #define TIME_NUMERIC 1 #define DATE_NUMERIC 2 #define SUBTITLE_INDENT 2 typedef enum { UiNoOperation, UiDefault, UiSelect, UiUp, UiDown, UiLeft, UiRight, UiReset, UiSave, UiPrevious, UiPageUp, UiPageDown, UiMaxOperation } UI_SCREEN_OPERATION; typedef enum { CfInitialization, CfCheckSelection, CfRepaint, CfRefreshHighLight, CfUpdateHelpString, CfPrepareToReadKey, CfReadKey, CfScreenOperation, CfUiPrevious, CfUiSelect, CfUiReset, CfUiLeft, CfUiRight, CfUiUp, CfUiPageUp, CfUiPageDown, CfUiDown, CfUiSave, CfUiDefault, CfUiNoOperation, CfExit, CfMaxControlFlag } UI_CONTROL_FLAG; #define UI_ACTION_NONE 0 #define UI_ACTION_REFRESH_FORM 1 #define UI_ACTION_REFRESH_FORMSET 2 #define UI_ACTION_EXIT 3 typedef struct { EFI_HII_HANDLE Handle; // // Target formset/form/Question information // EFI_GUID FormSetGuid; UINT16 FormId; UINT16 QuestionId; UINTN TopRow; UINTN BottomRow; UINTN PromptCol; UINTN OptionCol; UINTN CurrentRow; // // Ation for Browser to taken: // UI_ACTION_NONE - navigation inside a form // UI_ACTION_REFRESH_FORM - re-evaluate expressions and repaint form // UI_ACTION_REFRESH_FORMSET - re-parse formset IFR binary // UINTN Action; // // Current selected fomset/form/Question // FORM_BROWSER_FORMSET *FormSet; FORM_BROWSER_FORM *Form; FORM_BROWSER_STATEMENT *Statement; } UI_MENU_SELECTION; #define UI_MENU_OPTION_SIGNATURE EFI_SIGNATURE_32 ('u', 'i', 'm', 'm') #define UI_MENU_LIST_SIGNATURE EFI_SIGNATURE_32 ('u', 'i', 'm', 'l') typedef struct { UINTN Signature; LIST_ENTRY Link; EFI_HII_HANDLE Handle; FORM_BROWSER_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; } UI_MENU_OPTION; #define MENU_OPTION_FROM_LINK(a) CR (a, UI_MENU_OPTION, Link, UI_MENU_OPTION_SIGNATURE) typedef struct { UINTN Signature; LIST_ENTRY MenuLink; UINT16 FormId; UINT16 QuestionId; } UI_MENU_LIST; typedef struct _MENU_REFRESH_ENTRY { struct _MENU_REFRESH_ENTRY *Next; UI_MENU_OPTION *MenuOption; // Describes the entry needing an update UI_MENU_SELECTION *Selection; UINTN CurrentColumn; UINTN CurrentRow; UINTN CurrentAttribute; } MENU_REFRESH_ENTRY; 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; extern LIST_ENTRY gMenuList; extern MENU_REFRESH_ENTRY *gMenuRefreshHead; extern UI_MENU_SELECTION *gCurrentSelection; // // Global Functions // VOID UiInitMenu ( VOID ) ; VOID UiInitMenuList ( VOID ) ; VOID UiRemoveMenuListEntry ( OUT UI_MENU_SELECTION *Selection ) ; VOID UiFreeMenuList ( VOID ) ; VOID UiAddMenuListEntry ( IN UI_MENU_SELECTION *Selection ) ; VOID UiFreeMenu ( VOID ) ; VOID UiAddMenuOption ( IN CHAR16 *String, IN EFI_HII_HANDLE Handle, IN FORM_BROWSER_STATEMENT *Statement, IN UINT16 NumberOfLines, IN UINT16 MenuItemCount ) ; EFI_STATUS UiDisplayMenu ( IN OUT UI_MENU_SELECTION *Selection ) ; VOID FreeBrowserStrings ( VOID ) ; EFI_STATUS SetupBrowser ( IN OUT UI_MENU_SELECTION *Selection ) ; VOID ValueToString ( IN CHAR16 *Buffer, IN BOOLEAN Comma, IN INT64 v ) ; EFI_STATUS UiIntToString ( IN UINTN num, IN OUT CHAR16 *str, IN UINT16 size ) ; VOID SetUnicodeMem ( IN VOID *Buffer, IN UINTN Size, IN CHAR16 Value ) ; EFI_STATUS UiWaitForSingleEvent ( IN EFI_EVENT Event, IN UINT64 Timeout, OPTIONAL IN UINT8 RefreshInterval OPTIONAL ) ; VOID CreatePopUp ( IN UINTN ScreenWidth, IN UINTN NumberOfLines, IN CHAR16 *ArrayOfStrings, ... ) ; EFI_STATUS ReadString ( IN UI_MENU_OPTION *MenuOption, IN CHAR16 *Prompt, OUT CHAR16 *StringPtr ) ; EFI_STATUS GetSelectionInputPopUp ( IN UI_MENU_SELECTION *Selection, IN UI_MENU_OPTION *MenuOption ) ; EFI_STATUS GetNumericInput ( IN UI_MENU_SELECTION *Selection, IN UI_MENU_OPTION *MenuOption ) ; VOID UpdateStatusBar ( IN UINTN MessageType, IN UINT8 Flags, IN BOOLEAN State ) ; EFI_STATUS ProcessQuestionConfig ( IN UI_MENU_SELECTION *Selection, IN FORM_BROWSER_STATEMENT *Question ) ; EFI_STATUS PrintFormattedNumber ( IN FORM_BROWSER_STATEMENT *Question, IN OUT CHAR16 *FormattedNumber, IN UINTN BufferSize ) ; QUESTION_OPTION * ValueToOption ( IN FORM_BROWSER_STATEMENT *Question, IN EFI_HII_VALUE *OptionValue ) ; EFI_STATUS ProcessOptions ( IN UI_MENU_SELECTION *Selection, IN UI_MENU_OPTION *MenuOption, IN BOOLEAN Selected, OUT CHAR16 **OptionString ) ; VOID ProcessHelpString ( IN CHAR16 *StringPtr, OUT CHAR16 **FormattedString, IN UINTN RowCount ) ; VOID UpdateKeyHelp ( IN UI_MENU_OPTION *MenuOption, IN BOOLEAN Selected ) ; VOID ClearLines ( UINTN LeftColumn, UINTN RightColumn, UINTN TopRow, UINTN BottomRow, UINTN TextAttribute ) ; UINTN GetStringWidth ( CHAR16 *String ) ; UINT16 GetLineByWidth ( IN CHAR16 *InputString, IN UINT16 LineWidth, IN OUT UINTN *Index, OUT CHAR16 **OutputString ) ; UINT16 GetWidth ( IN FORM_BROWSER_STATEMENT *Statement, IN EFI_HII_HANDLE Handle ) ; VOID NewStrCat ( CHAR16 *Destination, CHAR16 *Source ) ; EFI_STATUS WaitForKeyStroke ( OUT EFI_INPUT_KEY *Key ) ; VOID ResetScopeStack ( VOID ) ; EFI_STATUS PushScope ( IN UINT8 Operand ) ; EFI_STATUS PopScope ( OUT UINT8 *Operand ) ; FORM_BROWSER_FORM * IdToForm ( IN FORM_BROWSER_FORMSET *FormSet, IN UINT16 FormId ) ; FORM_BROWSER_STATEMENT * IdToQuestion ( IN FORM_BROWSER_FORMSET *FormSet, IN FORM_BROWSER_FORM *Form, IN UINT16 QuestionId ) ; FORM_EXPRESSION * IdToExpression ( IN FORM_BROWSER_FORM *Form, IN UINT8 RuleId ) ; VOID ExtendValueToU64 ( IN EFI_HII_VALUE *Value ) ; INTN CompareHiiValue ( IN EFI_HII_VALUE *Value1, IN EFI_HII_VALUE *Value2, IN EFI_HII_HANDLE HiiHandle OPTIONAL ) ; EFI_STATUS EvaluateExpression ( IN FORM_BROWSER_FORMSET *FormSet, IN FORM_BROWSER_FORM *Form, IN OUT FORM_EXPRESSION *Expression ) ; #endif // _UI_H