alder_lake_bios/Insyde/InsydeSetupPkg/Drivers/H2ODisplayEngineLocalMetroDxe/H2OPanels/H2OHelpTextPanel.c

227 lines
7.1 KiB
C

/** @file
UI Common Controls
;******************************************************************************
;* Copyright (c) 2012 - 2020, 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 "H2ODisplayEngineLocalMetro.h"
#include "H2OPanels.h"
#include "MetroUi.h"
STATIC H2O_HELP_TEXT_PANEL_CLASS *mH2OHelpTextPanelClass = NULL;
#define CURRENT_CLASS mH2OHelpTextPanelClass
#if FixedPcdGet32(PcdH2OLmdeMultiLayout) == 0
//CHAR16 *mHelpTextPanelChilds = L""
// L"<VerticalLayout width='match_parent' float='true' height='match_parent'>"
// L"<Control />"
// L"<Texture width='300' height='300' name='HelpBkgImage' background-image-style='stretch|gray'/>"
// L"</VerticalLayout>"
// L"<VerticalLayout padding='40,30,40,30' width='-1' float='true' name='HelpMenu' height='-1'>"
// L"<HorizontalLayout padding='0,0,8,0' min-height='50' height='wrap_content'>"
// L"<Label width='200' textcolor='0xFF268FB0' font-size='29' name='HelpTitle' height='wrap_content'/>"
// L"<Control padding='0,25,0,25' height='50'>"
// L"<Texture width='50' height='50' name='HelpImage' background-image-style='stretch'/>"
// L"</Control>"
// L"</HorizontalLayout>"
// L"<ScrollView taborder='20' name='HelpTextScrollView' vscrollbar='true' scale9grid='1,13,1,13'>"
// L"<Label width='match_parent' height='wrap_content' textcolor='0xFF666666' font-size='19' name='HelpText'/>"
// L"</ScrollView>"
// L"</VerticalLayout>";
CHAR16 *mHelpTextPanelChilds = NULL;
#endif
STATIC
VOID
H2OHelpTextPanelUpdateVfcfOrder (
IN UI_CONTROL *Order,
IN H2O_FORM_BROWSER_Q *CurrentQ
)
{
UINTN Index;
UI_CONTROL *Child;
CHAR16 Str[20];
EFI_IMAGE_INPUT *PageImage;
UINTN NameLen;
if (Order == NULL) {
return;
}
for (Index = 0; Index < Order->ItemCount; Index++) {
Child = Order->Items[Index];
if (Child->Name == NULL) {
continue;
}
NameLen = StrLen(Child->Name);
if (STR_MATCH(Child->Name, NameLen, L"prompt")) {
UiSetAttribute (Child, L"text", (CurrentQ != NULL && CurrentQ->Prompt != NULL) ? CurrentQ->Prompt : L" ");
} else if (STR_MATCH(Child->Name, NameLen, L"help")) {
UiSetAttribute (Child, L"text", (CurrentQ != NULL && CurrentQ->Help != NULL) ? CurrentQ->Help : L" ");
} else if (STR_MATCH(Child->Name, NameLen, L"formset-image") ||
STR_MATCH(Child->Name, NameLen, L"formset-help-image")) {
PageImage = GetCurrentFormSetImage ();
if (PageImage == NULL) {
UiSetAttribute (Child, L"visibility", L"false");
continue;
}
UnicodeSPrint (Str, sizeof (Str), L"0x%p", PageImage);
UiSetAttribute (Child, L"background-image", Str);
} else if (STR_MATCH(Child->Name, NameLen, L"container")) {
Child = CONTROL_CLASS(Child)->FindChildByName (Child, VFCF_PROPERTY_ORDER_CONTROL_NAME, UI_SEARCH_TYPE_ONLY_CHILD);
if (Child == NULL) {
continue;
}
H2OHelpTextPanelUpdateVfcfOrder (Child, CurrentQ);
}
}
}
EFI_STATUS
RefreshHelpMenu (
H2O_HELP_TEXT_PANEL *This
)
{
UI_CONTROL *Control;
UI_MANAGER *Manager;
H2O_FORM_BROWSER_Q *CurrentQ;
CHAR16 Str[20];
EFI_IMAGE_INPUT *PageImage;
Control = (UI_CONTROL *) This;
Manager = Control->Manager;
CurrentQ = gFB->CurrentQ;
if (CurrentQ != NULL && CurrentQ->Prompt != NULL) {
Control = UiFindChildByName (This, L"HelpTitle");
UiSetAttribute (Control, L"text", CurrentQ->Prompt);
} else {
Control = UiFindChildByName (This, L"HelpTitle");
UiSetAttribute (Control, L"text", L" ");
}
PageImage = GetCurrentFormSetImage ();
if (PageImage != NULL) {
Control = UiFindChildByName (This, L"HelpImage");
UnicodeSPrint (Str, sizeof (Str), L"0x%p", PageImage);
UiSetAttribute (Control, L"background-image", Str);
if (PcdGet32(PcdH2OLmdeMultiLayout) == 1) {
AdjustImageToMenuColor (Control);
}
UiSetAttribute (Control, L"visibility", L"true");
Control = UiFindChildByName (This, L"HelpBkgImage");
UiSetAttribute (Control, L"background-image", Str);
UiSetAttribute (Control, L"visibility", L"true");
} else {
Control = UiFindChildByName (This, L"HelpImage");
UiSetAttribute (Control, L"visibility", L"false");
Control = UiFindChildByName (This, L"HelpBkgImage");
UiSetAttribute (Control, L"visibility", L"false");
}
if (CurrentQ != NULL && CurrentQ->Help != NULL) {
Control = UiFindChildByName (This, L"HelpText");
UiSetAttribute (Control, L"text", CurrentQ->Help);
} else {
Control = UiFindChildByName (This, L"HelpText");
UiSetAttribute (Control, L"text", L" ");
}
return EFI_SUCCESS;
}
LRESULT
EFIAPI
H2OHelpTextPanelProc (
HWND Hwnd,
UINT32 Msg,
WPARAM WParam,
LPARAM LParam
)
{
H2O_HELP_TEXT_PANEL *This;
UI_CONTROL *Control;
UI_CONTROL *Child;
This = (H2O_HELP_TEXT_PANEL *) GetWindowLongPtr (Hwnd, 0);
Control = (UI_CONTROL *)This;
if (This == NULL && Msg != WM_CREATE && Msg != WM_NCCALCSIZE) {
ASSERT (FALSE);
return 0;
}
switch (Msg) {
case WM_CREATE:
This = (H2O_HELP_TEXT_PANEL *) AllocateZeroPool (sizeof (H2O_HELP_TEXT_PANEL));
if (This != NULL) {
CONTROL_CLASS (This) = (UI_CONTROL_CLASS *) GetClassLongPtr (Hwnd, 0);
SetWindowLongPtr (Hwnd, 0, (INTN)This);
SendMessage (Hwnd, UI_NOTIFY_CREATE, WParam, LParam);
}
break;
case UI_NOTIFY_CREATE:
PARENT_CLASS_WNDPROC (CURRENT_CLASS, Hwnd, UI_NOTIFY_CREATE, WParam, LParam);
if (mHelpTextPanelChilds != NULL) {
XmlCreateControl (mHelpTextPanelChilds, Control);
}
break;
case FB_NOTIFY_SELECT_Q:
case FB_NOTIFY_REPAINT:
if (mHelpTextPanelChilds != NULL) {
RefreshHelpMenu (This);
} else {
Child = CONTROL_CLASS(Control)->FindChildByName (Control, VFCF_PROPERTY_ORDER_CONTROL_NAME, UI_SEARCH_TYPE_ONLY_CHILD);
if (Child != NULL) {
H2OHelpTextPanelUpdateVfcfOrder (Child, gFB->CurrentQ);
}
}
break;
case WM_NCHITTEST:
return HTCLIENT;
default:
return PARENT_CLASS_WNDPROC (CURRENT_CLASS, Hwnd, Msg, WParam, LParam);
}
return 0;
}
H2O_HELP_TEXT_PANEL_CLASS *
EFIAPI
GetH2OHelpTextPanelClass (
VOID
)
{
if (CURRENT_CLASS != NULL) {
return CURRENT_CLASS;
}
InitUiClass ((UI_CONTROL_CLASS **)&CURRENT_CLASS, sizeof (*CURRENT_CLASS), L"H2OHelpTextPanel", (UI_CONTROL_CLASS *)GetControlClass());
if (CURRENT_CLASS == NULL) {
return NULL;
}
((UI_CONTROL_CLASS *)CURRENT_CLASS)->WndProc = H2OHelpTextPanelProc;
return CURRENT_CLASS;
}