263 lines
8.5 KiB
C
263 lines
8.5 KiB
C
/** @file
|
|
|
|
;******************************************************************************
|
|
;* Copyright (c) 2013 - 2021, Insyde Software Corp. All Rights Reserved.
|
|
;*
|
|
;* You may not reproduce, distribute, publish, display, perform, modify, adapt,
|
|
;* transmit, broadcast, present, recite, release, license or otherwise exploit
|
|
;* any part of this publication in any form, by any means, without the prior
|
|
;* written permission of Insyde Software Corporation.
|
|
;*
|
|
;******************************************************************************
|
|
*/
|
|
|
|
#ifndef _LTDE_CONTROL_H_
|
|
#define _LTDE_CONTROL_H_
|
|
|
|
#include "H2ODisplayEngineLocalText.h"
|
|
|
|
typedef struct _H2O_LTDE_PANEL H2O_LTDE_PANEL;
|
|
typedef struct _H2O_LTDE_PANEL_ITEM H2O_LTDE_PANEL_ITEM;
|
|
typedef struct _H2O_LTDE_CONTROL H2O_LTDE_CONTROL;
|
|
|
|
#define H2O_LTDE_FIELD_WIDTH(Field) (((RECT *) (Field))->right - ((RECT *) (Field))->left + 1)
|
|
#define H2O_LTDE_FIELD_HEIGHT(Field) (((RECT *) (Field))->bottom - ((RECT *) (Field))->top + 1)
|
|
#define IS_DISPLAYED_IN_HEX(Control) ((BOOLEAN) ((Control->Flags & EFI_IFR_DISPLAY_UINT_HEX) != 0))
|
|
|
|
typedef enum {
|
|
LTDE_CONTROL_ID_DIALOG_TITLE,
|
|
LTDE_CONTROL_ID_DIALOG_BODY,
|
|
LTDE_CONTROL_ID_DIALOG_BODY_INPUT,
|
|
LTDE_CONTROL_ID_DIALOG_BUTTON,
|
|
LTDE_CONTROL_ID_DIALOG_HOT_KEY_PAGE_UP,
|
|
LTDE_CONTROL_ID_DIALOG_HOT_KEY_PAGE_DOWN,
|
|
LTDE_CONTROL_ID_DIALOG_HOT_KEY_SCROLL_UP,
|
|
LTDE_CONTROL_ID_DIALOG_HOT_KEY_SCROLL_DOWN,
|
|
LTDE_CONTROL_ID_MAX
|
|
} LTDE_CONTROL_ID;
|
|
|
|
typedef enum {
|
|
LTDE_PANEL_ITEM_ID_TITLE,
|
|
LTDE_PANEL_ITEM_ID_CONTENT,
|
|
LTDE_PANEL_ITEM_ID_CONTENT_PAGE_UP,
|
|
LTDE_PANEL_ITEM_ID_CONTENT_PAGE_DOWN,
|
|
LTDE_PANEL_ITEM_ID_CONTENT_SCROLL_UP,
|
|
LTDE_PANEL_ITEM_ID_CONTENT_SCROLL_DOWN,
|
|
LTDE_PANEL_ITEM_ID_BUTTON,
|
|
LTDE_PANEL_ITEM_ID_MAX
|
|
} LTDE_PANEL_ITEM_ID;
|
|
|
|
typedef struct _H2O_LTDE_CONTROL {
|
|
UINT32 ControlId;
|
|
H2O_STYLE_INFO ControlStyle;
|
|
RECT ControlField;
|
|
H2O_STRING_INFO Text;
|
|
H2O_STRING_INFO ValueStrInfo;
|
|
EFI_HII_VALUE HiiValue;
|
|
|
|
//
|
|
// Statement
|
|
//
|
|
H2O_PAGE_ID PageId;
|
|
H2O_STATEMENT_ID StatementId;
|
|
EFI_QUESTION_ID QuestionId;
|
|
UINT8 Operand;
|
|
EFI_IFR_OP_HEADER *IfrOpCode;
|
|
BOOLEAN Selectable;
|
|
|
|
UINT64 Minimum;
|
|
UINT64 Maximum;
|
|
UINT64 Step;
|
|
UINT8 Flags; ///< Flag to determine display format for EFI_IFR_NUMERIC
|
|
|
|
//
|
|
// Display item sequence for date/time
|
|
// Date: Month/Day/Year
|
|
// Sequence: 0 1 2
|
|
//
|
|
// Time: Hour : Minute : Second
|
|
// Sequence: 0 1 2
|
|
//
|
|
UINT8 Sequence;
|
|
} H2O_LTDE_CONTROL;
|
|
|
|
typedef struct _H2O_LTDE_PANEL_ITEM {
|
|
UINT32 ItemId;
|
|
RECT ItemField;
|
|
INT32 CurrentPos;
|
|
INT32 MaxPos;
|
|
BOOLEAN Vertical;
|
|
BOOLEAN Hidden;
|
|
BOOLEAN Selectable;
|
|
UINT32 ControlCount;
|
|
H2O_LTDE_CONTROL *ControlList;
|
|
} H2O_LTDE_PANEL_ITEM;
|
|
|
|
#define H2O_LTDE_PANEL_SIGNATURE SIGNATURE_32 ('H', 'L', 'T', 'P')
|
|
|
|
typedef struct _H2O_LTDE_PANEL {
|
|
UINT32 Signature;
|
|
LIST_ENTRY Link;
|
|
H2O_PANEL_INFO *VfcfPanelInfo;
|
|
//
|
|
// Panel related data
|
|
//
|
|
RECT PanelField;
|
|
INT32 BorderLineWidth;
|
|
BOOLEAN Visible;
|
|
BOOLEAN Vertical;
|
|
UINT32 ColorAttribute;
|
|
UINT32 ItemCount;
|
|
H2O_LTDE_PANEL_ITEM *ItemList;
|
|
H2O_LTDE_CONTROL *SelectedControl;
|
|
UINT32 BorderColorAttribute;
|
|
VOID *Data;
|
|
} H2O_LTDE_PANEL;
|
|
|
|
#define H2O_LTDE_PANEL_FROM_LINK(a) CR (a, H2O_LTDE_PANEL, Link, H2O_LTDE_PANEL_SIGNATURE)
|
|
|
|
H2O_LTDE_CONTROL *
|
|
GetControlById (
|
|
IN H2O_LTDE_PANEL *Panel,
|
|
IN UINT32 ItemId,
|
|
IN UINT32 ControlId
|
|
);
|
|
|
|
H2O_LTDE_CONTROL *
|
|
FindControlByControlId (
|
|
IN H2O_LTDE_CONTROL *ControlArray,
|
|
IN UINT32 ControlArrayCount,
|
|
IN UINT32 ControlId,
|
|
IN UINT32 SequenceIndex
|
|
);
|
|
|
|
H2O_LTDE_CONTROL *
|
|
GetControlByQuestionId (
|
|
IN H2O_LTDE_CONTROL *ControlList,
|
|
IN UINT32 ControlCount,
|
|
IN EFI_QUESTION_ID QuestionId,
|
|
IN EFI_IFR_OP_HEADER *IfrOpCode
|
|
);
|
|
|
|
EFI_STATUS
|
|
DisplaySetupPageControls (
|
|
IN H2O_LTDE_PANEL *SetupPagePanel
|
|
);
|
|
|
|
EFI_STATUS
|
|
ClearField (
|
|
IN CONST UINT32 Attribute,
|
|
IN RECT *Field
|
|
);
|
|
|
|
EFI_STATUS
|
|
CalculateRequireSize (
|
|
IN CHAR16 *DisplayString,
|
|
IN UINT32 LimitLineWidth,
|
|
OUT UINT32 *RequireWidth,
|
|
OUT UINT32 *RequireHeight
|
|
);
|
|
|
|
EFI_STATUS
|
|
DisplayString (
|
|
IN UINT32 StartX,
|
|
IN UINT32 StartY,
|
|
IN CHAR16 *String
|
|
);
|
|
|
|
UINT32
|
|
GetStringHeight (
|
|
IN CHAR16 *String,
|
|
IN UINT32 LineWidth
|
|
);
|
|
|
|
EFI_STATUS
|
|
GetStringArrayByWidth (
|
|
IN CHAR16 *String,
|
|
IN UINT32 LineWidth,
|
|
OUT UINT32 *StringArrayNum,
|
|
OUT CHAR16 ***StringArray
|
|
);
|
|
|
|
CHAR16 *
|
|
GetAlignmentString (
|
|
IN CHAR16 *String,
|
|
IN UINT32 LineWidth,
|
|
IN UINT32 AlignmentAction
|
|
);
|
|
|
|
VOID
|
|
FreeControlInfo (
|
|
IN H2O_LTDE_CONTROL *Control
|
|
);
|
|
|
|
VOID
|
|
FreePanelItemList (
|
|
IN H2O_LTDE_PANEL_ITEM *ItemList,
|
|
IN UINT32 ItemCount
|
|
);
|
|
|
|
H2O_LTDE_PANEL *
|
|
CreatePanel (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
FreePanel (
|
|
IN H2O_LTDE_PANEL *Panel
|
|
);
|
|
|
|
H2O_LTDE_PANEL *
|
|
GetPanel (
|
|
IN UINT32 PanelId
|
|
);
|
|
|
|
H2O_LTDE_PANEL_ITEM *
|
|
GetPanelItem (
|
|
IN H2O_LTDE_PANEL *Panel,
|
|
IN UINT32 ItemId
|
|
);
|
|
|
|
H2O_LTDE_PANEL_ITEM *
|
|
GetPanelItemByControl (
|
|
IN H2O_LTDE_PANEL *Panel,
|
|
IN H2O_LTDE_CONTROL *Control
|
|
);
|
|
|
|
EFI_STATUS
|
|
GetControlByMouse (
|
|
IN H2O_LTDE_PANEL *Panel,
|
|
IN INT32 MouseX,
|
|
IN INT32 MouseY,
|
|
OUT H2O_LTDE_PANEL_ITEM **SelectedPanelItem,
|
|
OUT H2O_LTDE_CONTROL **SelectedControl
|
|
);
|
|
|
|
H2O_LTDE_PANEL_ITEM *
|
|
GetNextSelectablePanelItem (
|
|
IN H2O_LTDE_PANEL *Panel,
|
|
IN H2O_LTDE_PANEL_ITEM *CurrentPanelItem,
|
|
IN BOOLEAN IsLoop
|
|
);
|
|
|
|
H2O_LTDE_CONTROL *
|
|
GetNextSelectableControl (
|
|
IN H2O_LTDE_PANEL_ITEM *PanelItem,
|
|
IN H2O_LTDE_CONTROL *CurrentControl,
|
|
IN BOOLEAN IsLoop
|
|
);
|
|
|
|
H2O_LTDE_CONTROL *
|
|
GetPreviousSelectableControl (
|
|
IN H2O_LTDE_PANEL_ITEM *PanelItem,
|
|
IN H2O_LTDE_CONTROL *CurrentControl,
|
|
IN BOOLEAN IsLoop
|
|
);
|
|
|
|
BOOLEAN
|
|
UpdatePanelContentItemPos (
|
|
IN H2O_LTDE_PANEL *Panel
|
|
);
|
|
|
|
#endif
|