/** @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_FORM_TITLE_PANEL_CLASS *mH2OFormTitlePanelClass = NULL; #define CURRENT_CLASS mH2OFormTitlePanelClass #if FixedPcdGet32(PcdH2OLmdeMultiLayout) == 0 //CHAR16 *mFormTitlePanelChilds = L"" // L"" // L"" // L"" // L"" // L"" // L"" // L"" // L""; CHAR16 *mFormTitlePanelChilds = NULL; #endif STATIC VOID H2OFormTitlePanelUpdateVfcfOrder ( IN UI_CONTROL *Order ) { 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"formset-image")) { PageImage = GetCurrentFormSetImage (); if (PageImage != NULL) { UnicodeSPrint (Str, sizeof (Str), L"0x%p", PageImage); UiSetAttribute (Child, L"background-image", Str); UiSetAttribute (Child, L"visibility", L"true"); } else { UiSetAttribute (Child, L"visibility", L"false"); } } else if (STR_MATCH(Child->Name, NameLen, L"formset-title")) { UiSetAttribute (Child, L"text", (gFB->CurrentQ == NULL) ? L"" : GetCurrentFormSetTitle ()); } else if (STR_MATCH(Child->Name, NameLen, L"form-title")) { // // TODO: VFCF should support to dynamicaly hide form-title and str0. // if (IsRootPage ()) { UiSetAttribute (Child, L"visibility", L"false"); } else { UiSetAttribute (Child, L"visibility", L"true"); UiSetAttribute (Child, L"text", gFB->CurrentP->PageTitle); } } else if (PREFIX_STR_MATCH(Child->Name, NameLen, L"str")) { if (IsRootPage ()) { UiSetAttribute (Child, L"visibility", L"false"); } else { UiSetAttribute (Child, L"visibility", L"true"); } } 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; } H2OFormTitlePanelUpdateVfcfOrder (Child); } } } EFI_STATUS RefreshFormTitleMenu ( H2O_FORM_TITLE_PANEL *This ) { EFI_IMAGE_INPUT *PageImage; UI_CONTROL *Control; UI_MANAGER *Manager; CHAR16 *FormSetTitle; CHAR16 *MenuTitle; CHAR16 Str[20]; Control = (UI_CONTROL *) This; Manager = Control->Manager; PageImage = GetCurrentFormSetImage (); Control = Manager->FindControlByName (Manager, L"TitleImage"); if (PageImage != NULL) { UnicodeSPrint (Str, sizeof (Str), L"0x%p", PageImage); UiSetAttribute (Control, L"background-image", Str); UiSetAttribute (Control, L"visibility", L"true"); if (PcdGet32(PcdH2OLmdeMultiLayout) == 1) { AdjustImageToMenuColor (Control); } } else { UiSetAttribute (Control, L"visibility", L"false"); } Control = Manager->FindControlByName (Manager, L"TitleName"); FormSetTitle = GetCurrentFormSetTitle (); if (gFB->CurrentQ == NULL) { UiSetAttribute (Control, L"text", L""); } else { if (!IsRootPage ()) { MenuTitle = CatSPrint (NULL, L"%s > %s", FormSetTitle, gFB->CurrentP->PageTitle); UiSetAttribute (Control, L"text", MenuTitle); FreePool (MenuTitle); } else { UiSetAttribute (Control, L"text", FormSetTitle); } } return EFI_SUCCESS; } LRESULT EFIAPI H2OFormTitlePanelProc ( HWND Hwnd, UINT32 Msg, WPARAM WParam, LPARAM LParam ) { H2O_FORM_TITLE_PANEL *This; UI_CONTROL *Control; UI_CONTROL *Child; This = (H2O_FORM_TITLE_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_FORM_TITLE_PANEL *) AllocateZeroPool (sizeof (H2O_FORM_TITLE_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 (mFormTitlePanelChilds != NULL) { XmlCreateControl (mFormTitlePanelChilds, Control); } break; case FB_NOTIFY_REPAINT: if (This != NULL) { if (mFormTitlePanelChilds != NULL) { RefreshFormTitleMenu (This); } else { Child = CONTROL_CLASS(Control)->FindChildByName (Control, VFCF_PROPERTY_ORDER_CONTROL_NAME, UI_SEARCH_TYPE_ONLY_CHILD); if (Child != NULL) { H2OFormTitlePanelUpdateVfcfOrder (Child); } } } break; case WM_NCHITTEST: return HTCLIENT; default: return PARENT_CLASS_WNDPROC (CURRENT_CLASS, Hwnd, Msg, WParam, LParam); } return 0; } H2O_FORM_TITLE_PANEL_CLASS * EFIAPI GetH2OFormTitlePanelClass ( VOID ) { if (CURRENT_CLASS != NULL) { return CURRENT_CLASS; } InitUiClass ((UI_CONTROL_CLASS **)&CURRENT_CLASS, sizeof (*CURRENT_CLASS), L"H2OFormTitlePanel", (UI_CONTROL_CLASS *)GetControlClass()); if (CURRENT_CLASS == NULL) { return NULL; } ((UI_CONTROL_CLASS *)CURRENT_CLASS)->WndProc = H2OFormTitlePanelProc; return CURRENT_CLASS; }