summaryrefslogtreecommitdiff
path: root/EDK/MiniSetup/TseLite/ResetButton.c
diff options
context:
space:
mode:
Diffstat (limited to 'EDK/MiniSetup/TseLite/ResetButton.c')
-rw-r--r--EDK/MiniSetup/TseLite/ResetButton.c297
1 files changed, 297 insertions, 0 deletions
diff --git a/EDK/MiniSetup/TseLite/ResetButton.c b/EDK/MiniSetup/TseLite/ResetButton.c
new file mode 100644
index 0000000..4849c48
--- /dev/null
+++ b/EDK/MiniSetup/TseLite/ResetButton.c
@@ -0,0 +1,297 @@
+//*****************************************************************//
+//*****************************************************************//
+//*****************************************************************//
+//** **//
+//** (C)Copyright 2011, American Megatrends, Inc. **//
+//** **//
+//** All Rights Reserved. **//
+//** **//
+//** 5555 Oakbrook Pkwy, Building 200,Norcross, Georgia 30093 **//
+//** **//
+//** Phone (770)-246-8600 **//
+//** **//
+//*****************************************************************//
+//*****************************************************************//
+//*****************************************************************//
+// $Archive: /Alaska/SOURCE/Modules/AMITSE2_0/AMITSE/TseLite/ResetButton.c $
+//
+// $Author: Arunsb $
+//
+// $Revision: 5 $
+//
+// $Date: 10/18/12 6:03a $
+//
+//*****************************************************************//
+//*****************************************************************//
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/AMITSE2_0/AMITSE/TseLite/ResetButton.c $
+//
+// 5 10/18/12 6:03a Arunsb
+// Updated for 2.16.1235 QA submission
+//
+// 2 10/10/12 12:38p Arunsb
+// Synched the source for v2.16.1232, backup with Aptio
+//
+// 4 11/21/11 11:06a Premkumara
+// [TAG] EIP72610
+// [Category] Improvement
+// [Description] Moving TSE_MULTILINE_CONTROLS to Binary
+// [Files] AMITSE-CommonHelper.c, AMITSE.sdl,
+// TSELITE-UefiAction.c, TseLite.sdl, Time.h, Text.c,
+// SubMenu.c, ResetButton.c, PopupString.c, PopupSel.h, PopupSel.c,
+// PopupPassword.c, OrderListBox.c, Numeric.c, Label.c, Frame.c, Edit.c,
+// Date.h, Date.c,
+// LEGACY-Legacy.c,
+// BOOTONLY- Minisetup.h
+//
+// 3 11/14/11 6:55p Blaines
+// [TAG] - EIP 75486
+// [Category]- Function Request
+// [Synopsis]- Support grayout condition for readonly controls.
+// [Description] - Display readonly controls as grayout, non-selectable.
+// [Files]
+// AMITSE.sdl, CommonHelper.c, Minisetupext.h, stylecommon.c, Legacy.c,
+// date.c, edit.c, label.c, memo.c, menu.c,, numeric.c, ordlistbox.c,
+// PopupPassword.c,
+// PopupSel.c, PopupString.c, ResetButton.c, SubMenu.c, Text.c, Time.c,
+// UefiAction.c, ctrlcond.c,
+//
+// 2 5/18/11 11:58a Madhans
+// To Avoid Build issue when Multiline support is enabled.
+//
+// 1 3/28/11 4:02p Rajashakerg
+// Added to support reset opcode.
+//
+//*****************************************************************//
+//*****************************************************************//
+
+//<AMI_FHDR_START>
+//----------------------------------------------------------------------------
+//
+// Name: ResetButton.c
+//
+// Description: This file contains code to handle the uefi actions
+//
+//----------------------------------------------------------------------------
+//<AMI_FHDR_END>
+
+#include "Minisetup.h"
+
+RESET_BUTTON_METHODS gResetButton =
+{
+ ResetButtonCreate,
+ LabelDestroy,
+ ResetButtonInitialize,
+ ResetButtonDraw,
+ ResetButtonHandleAction,
+ LabelSetCallback,
+ LabelSetFocus,
+ LabelSetPosition,
+ LabelSetDimensions,
+ LabelSetAttributes,
+ LabelGetControlHeight
+};
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Procedure: ResetButtonCreate
+//
+// Description: Function to create an ResetButton Control.
+//
+// Input: VOID **object
+//
+// Output: EFI_STATUS
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS ResetButtonCreate( VOID **object )
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+
+ if ( *object == NULL )
+ {
+ *object = EfiLibAllocateZeroPool( sizeof(RESET_BUTTON_DATA) );
+
+ if ( *object == NULL )
+ {
+ Status = EFI_OUT_OF_RESOURCES;
+ goto DONE;
+ }
+ }
+
+ Status = gControl.Create( object );
+ if ( ! EFI_ERROR(Status) )
+ ((RESET_BUTTON_DATA*)(*object))->Methods = &gResetButton;
+
+DONE:
+ return Status;
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Procedure: ResetButtonInitialize
+//
+// Description: Function to Initialize an Action Control.
+//
+// Input: VOID *object, VOID *data
+//
+// Output: EFI_STATUS
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS ResetButtonInitialize( VOID *object, VOID *data )
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+ RESET_BUTTON_DATA *ResetButton = (RESET_BUTTON_DATA*) object;
+
+ Status = gControl.Initialize( ResetButton, data );
+ if (EFI_ERROR(Status))
+ {
+ goto DONE;
+ }
+
+ // add extra initialization here...
+ ResetButton->ControlData.ControlHelp = ResetButton->ControlData.ControlHelp? ResetButton->ControlData.ControlHelp :
+ UefiGetHelpField(ResetButton->ControlData.ControlPtr);
+
+ SetControlColorsHook(NULL, NULL, NULL, NULL, &(ResetButton->SelBGColor), &(ResetButton->SelFGColor),
+ &(ResetButton->BGColor), &(ResetButton->FGColor), NULL, NULL, NULL, NULL, NULL, NULL, NULL );
+
+DONE:
+ return Status;
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Procedure: ResetButtonDraw
+//
+// Description: Function to draw ResetButton.
+//
+// Input: VOID *object
+//
+// Output: EFI_STATUS
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS ResetButtonDraw( VOID *object )
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+ RESET_BUTTON_DATA *ResetButton = (RESET_BUTTON_DATA*) object;
+
+ CHAR16 *text;
+ UINT16 token = 0;
+ UINT8 ColorLabel = ResetButton->FGColor;
+
+ // check conditional ptr if necessary
+ //EIP 75486 Support grayout condition for readonly controls
+ //if( ResetButton->ControlData.ControlConditionalPtr != 0x0)
+ //{
+ switch( CheckControlCondition( &ResetButton->ControlData ) )
+ {
+ case COND_NONE:
+ break;
+ case COND_GRAYOUT:
+ Status = EFI_WARN_WRITE_FAILURE;
+ ColorLabel = CONTROL_GRAYOUT_COLOR;
+ break;
+ default:
+ Status = EFI_UNSUPPORTED;
+ goto DONE;
+ break;
+ }
+ //}
+
+ token = UefiGetPromptField(ResetButton->ControlData.ControlPtr);
+ text = HiiGetString( ResetButton->ControlData.ControlHandle, token);
+
+ //EIP-72610 TSE_MULTILINE_CONTROLS moved to binary
+ if(ResetButton->Height>1 && IsTSEMultilineControlSupported())
+ {
+ DrawMultiLineStringWithAttribute( ResetButton->Left , ResetButton->Top,
+ (UINTN)(ResetButton->Width),(UINTN) ResetButton->Height,
+ text,(UINT8)( (ResetButton->ControlFocus) ?
+ ResetButton->SelBGColor | ResetButton->SelFGColor :
+ ResetButton->BGColor | ColorLabel ));
+
+
+ }
+ else
+ {
+ // use frame width minus margins as available space
+ // boundary overflow check
+ if ( (TestPrintLength( text) / (NG_SIZE)) > (UINTN)(ResetButton->Width))
+ text[HiiFindStrPrintBoundary(text,(UINTN)(ResetButton->Width))] = L'\0';
+
+ DrawStringWithAttribute( ResetButton->Left , ResetButton->Top, text,
+ (UINT8)( (ResetButton->ControlFocus) ?
+ ResetButton->SelBGColor | ResetButton->SelFGColor :
+ ResetButton->BGColor | ColorLabel /*Action->FGColor*/ ));
+ }
+
+ MemFreePointer( (VOID **)&text );
+ FlushLines( ResetButton->Top , ResetButton->Top );
+
+DONE:
+ return Status;
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Procedure: ResetButtonHandleAction
+//
+// Description: Function to handle the ResetButton.
+//
+// Input: VOID *object, ACTION_DATA *data
+//
+// Output: EFI_STATUS
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS ResetButtonHandleAction(VOID *object, ACTION_DATA *data)
+{
+ EFI_STATUS Status = EFI_UNSUPPORTED;
+ RESET_BUTTON_DATA *ResetButton = (RESET_BUTTON_DATA*) object;
+ CONTROL_ACTION CtrlAction;
+ UINT16 DefaultId = 0;
+
+ if (( data->Input.Type == ACTION_TYPE_KEY )|| (data->Input.Type == ACTION_TYPE_MOUSE))
+ {
+ if( data->Input.Type == ACTION_TYPE_KEY )
+ CtrlAction = MapControlKeysHook(data->Input.Data.AmiKey);
+ else
+ {
+ CtrlAction = MapControlMouseActionHook(&data->Input.Data.MouseInfo);
+ }
+ switch(CtrlAction)
+ {
+ case ControlActionSelect:
+ //call a wapper function to update the Default vaule
+ DefaultId = UefiGetResetButtonDefaultid( ResetButton->ControlData.ControlPtr );
+
+ if(0xFFFF == DefaultId)
+ return EFI_UNSUPPORTED;
+
+ Status = UefiupdateResetButtonDefault(ResetButton->ControlData,DefaultId);
+ break;
+
+ default:
+ break;
+ }
+ }
+ return Status;
+}
+
+//**********************************************************************
+//**********************************************************************
+//** **
+//** (C)Copyright 2011, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Pkwy, Building 200,Norcross, Georgia 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//**********************************************************************
+//**********************************************************************