197 lines
6.1 KiB
C
197 lines
6.1 KiB
C
/** @file
|
|
Initialization and display related functions for title panel.
|
|
|
|
;******************************************************************************
|
|
;* Copyright (c) 2015, 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.
|
|
;*
|
|
;******************************************************************************
|
|
*/
|
|
|
|
#include "LTDEPanels.h"
|
|
|
|
/**
|
|
Initialize control list in content item
|
|
|
|
@param[in] TitlePanel Pointer to title panel
|
|
@param[in, out] ContentItem Pointer to content item
|
|
|
|
@retval EFI_SUCCESS Initialize control list successful.
|
|
@retval EFI_INVALID_PARAMETER TitlePanel or ContentItem is NULL
|
|
@retval EFI_OUT_OF_RESOURCES Allocate pool fail
|
|
|
|
**/
|
|
STATIC
|
|
EFI_STATUS
|
|
InitTitlePanelContentItemControlList (
|
|
IN H2O_LTDE_PANEL *TitlePanel,
|
|
IN OUT H2O_LTDE_PANEL_ITEM *ContentItem
|
|
)
|
|
{
|
|
EFI_STATUS Status;
|
|
H2O_FORM_BROWSER_SM *SetupMenuData;
|
|
UINT32 ControlCount;
|
|
H2O_LTDE_CONTROL *ControlList;
|
|
H2O_LTDE_CONTROL *Control;
|
|
INT32 ItemFieldWidth;
|
|
INT32 DisplayWidth;
|
|
INT32 StartX;
|
|
|
|
if (TitlePanel == NULL || ContentItem == NULL) {
|
|
return EFI_INVALID_PARAMETER;
|
|
}
|
|
|
|
ContentItem->ControlCount = 0;
|
|
ContentItem->ControlList = NULL;
|
|
|
|
Status = mDEPrivate->FBProtocol->GetSMInfo (mDEPrivate->FBProtocol, &SetupMenuData);
|
|
if (EFI_ERROR (Status)) {
|
|
return EFI_SUCCESS;
|
|
}
|
|
|
|
ControlCount = 0;
|
|
ControlCount += (SetupMenuData->TitleString != NULL) ? 1 : 0;
|
|
ControlCount += (SetupMenuData->CoreVersionString != NULL) ? 1 : 0;
|
|
if (ControlCount == 0) {
|
|
FreeSetupMenuData (SetupMenuData);
|
|
return EFI_SUCCESS;
|
|
}
|
|
|
|
ControlList = AllocateZeroPool (ControlCount * sizeof (H2O_LTDE_CONTROL));
|
|
if (ControlList == NULL) {
|
|
FreeSetupMenuData (SetupMenuData);
|
|
return EFI_OUT_OF_RESOURCES;
|
|
}
|
|
|
|
ItemFieldWidth = H2O_LTDE_FIELD_WIDTH (&ContentItem->ItemField);
|
|
ControlCount = 0;
|
|
if (SetupMenuData->TitleString != NULL) {
|
|
Control = &ControlList[ControlCount];
|
|
Control->Sequence = (UINT8) ControlCount;
|
|
Control->Text.String = AllocateCopyPool (StrSize (SetupMenuData->TitleString), SetupMenuData->TitleString);
|
|
Control->ControlStyle.PseudoClass = H2O_STYLE_PSEUDO_CLASS_NORMAL;
|
|
|
|
DisplayWidth = (INT32) GetStringDisplayWidth (SetupMenuData->TitleString);
|
|
StartX = (ItemFieldWidth - DisplayWidth) / 2;
|
|
SetRect (&Control->ControlField, StartX, 0, StartX + DisplayWidth - 1, 0);
|
|
ControlCount++;
|
|
}
|
|
if (SetupMenuData->CoreVersionString != NULL) {
|
|
Control = &ControlList[ControlCount];
|
|
Control->Sequence = (UINT8) ControlCount;
|
|
Control->Text.String = AllocateCopyPool (StrSize (SetupMenuData->CoreVersionString), SetupMenuData->CoreVersionString);
|
|
Control->ControlStyle.PseudoClass = H2O_STYLE_PSEUDO_CLASS_NORMAL;
|
|
|
|
DisplayWidth = (INT32) GetStringDisplayWidth (SetupMenuData->CoreVersionString);
|
|
StartX = ItemFieldWidth - DisplayWidth;
|
|
SetRect (&Control->ControlField, StartX, 0, StartX + DisplayWidth - 1, 0);
|
|
ControlCount++;
|
|
}
|
|
|
|
ContentItem->Vertical = FALSE;
|
|
ContentItem->ControlCount = ControlCount;
|
|
ContentItem->ControlList = ControlList;
|
|
|
|
FreeSetupMenuData (SetupMenuData);
|
|
|
|
return EFI_SUCCESS;
|
|
}
|
|
|
|
/**
|
|
Initialize content item
|
|
|
|
@param[in] TitlePanel Pointer to title panel
|
|
@param[in, out] ContentItem Pointer to content item
|
|
|
|
@retval EFI_SUCCESS Initialize content item successful.
|
|
@retval EFI_INVALID_PARAMETER TitlePanel or ContentItem is NULL
|
|
|
|
**/
|
|
STATIC
|
|
EFI_STATUS
|
|
InitTitlePanelContentItem (
|
|
IN H2O_LTDE_PANEL *TitlePanel,
|
|
IN OUT H2O_LTDE_PANEL_ITEM *ContentItem
|
|
)
|
|
{
|
|
if (TitlePanel == NULL || ContentItem == NULL) {
|
|
return EFI_INVALID_PARAMETER;
|
|
}
|
|
|
|
ContentItem->ItemId = LTDE_PANEL_ITEM_ID_CONTENT;
|
|
ContentItem->Hidden = FALSE;
|
|
|
|
CopyRect (&ContentItem->ItemField, &TitlePanel->PanelField);
|
|
InflateRect (&ContentItem->ItemField, -TitlePanel->BorderLineWidth, -TitlePanel->BorderLineWidth);
|
|
|
|
InitTitlePanelContentItemControlList (TitlePanel, ContentItem);
|
|
|
|
return EFI_SUCCESS;
|
|
}
|
|
|
|
/**
|
|
Initialize title panel
|
|
|
|
@retval EFI_SUCCESS Initialize title panel successful.
|
|
@retval EFI_NOT_FOUND Title panel is not found
|
|
@retval EFI_OUT_OF_RESOURCES Allocate pool fail
|
|
|
|
**/
|
|
EFI_STATUS
|
|
InitTitlePanel (
|
|
VOID
|
|
)
|
|
{
|
|
H2O_LTDE_PANEL *TitlePanel;
|
|
H2O_LTDE_PANEL_ITEM *ContentItem;
|
|
|
|
TitlePanel = GetPanel (TITLE_PANEL_ID);
|
|
if (TitlePanel == NULL) {
|
|
return EFI_NOT_FOUND;
|
|
}
|
|
|
|
ContentItem = AllocateZeroPool (sizeof (H2O_LTDE_PANEL_ITEM));
|
|
if (ContentItem == NULL) {
|
|
return EFI_OUT_OF_RESOURCES;
|
|
}
|
|
|
|
InitTitlePanelContentItem (TitlePanel, ContentItem);
|
|
|
|
FreePanelItemList (TitlePanel->ItemList, TitlePanel->ItemCount);
|
|
TitlePanel->ItemCount = 1;
|
|
TitlePanel->ItemList = ContentItem;
|
|
|
|
return EFI_SUCCESS;
|
|
}
|
|
|
|
/**
|
|
Display title panel
|
|
|
|
@retval EFI_SUCCESS Display title panel successfully
|
|
**/
|
|
EFI_STATUS
|
|
DisplayTitlePanel (
|
|
VOID
|
|
)
|
|
{
|
|
H2O_LTDE_PANEL *TitlePanel;
|
|
H2O_LTDE_PANEL_ITEM *ContentItem;
|
|
|
|
TitlePanel = GetPanel (TITLE_PANEL_ID);
|
|
if (TitlePanel == NULL || !TitlePanel->Visible) {
|
|
return EFI_SUCCESS;
|
|
}
|
|
|
|
ContentItem = GetPanelItem (TitlePanel, LTDE_PANEL_ITEM_ID_CONTENT);
|
|
if (ContentItem != NULL) {
|
|
DisplayPanelItem (TitlePanel, ContentItem);
|
|
}
|
|
|
|
return EFI_SUCCESS;
|
|
}
|
|
|