?? mso_confirm.c
字號:
/****************************************************************************************************
* Copyright (c) 2005 ZORAN Corporation, All Rights Reserved
* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF ZORAN CORPORATION
*
* File: o_confirm.c
*
* Description: Project definition of the MSO_CONFIRM
* =========
*
****************************************************************************************************/
#include "Config.h" // Global Configuration - do not remove!
#include "include\sysdefs.h" // Global definition - do not remove!
/****************************************************************************************************
* INCLUDE FILES
****************************************************************************************************/
// Include project specific
#include "gui\menu_system\ms_display.h"
#include "GUI\Menu_system\ms_screen.h"
#include "GUI\Menu_system\ms_component.h"
#include "GUI\Menu_system\osd_rendering.h"
#include "GUI\Menu_system\ms_send_op.h"
#include "GUI\Menu_system\ms_menu.h"
#include "GUI\Menu_system\ms_object.h"
#include "GUI\Menu_system\ms_container.h"
#include "Font\fonts.h"
#include "GUI\Object_class\Button\mso_button.h"
#include "GUI\Object_class\Confirm\mso_confirm.h"
#include "Menu\menu_operation_def.h"
// TODO: Shouldn't include a file from Customer folder to Gui\Object_class
#include "Menu_config\menu_config_common.h"
/****************************************************************************************************
* DEFINITION: Private named constants
****************************************************************************************************/
#define OSD_MESSAGE_FONT FONT_0
#define AREA_OSD_MESSAGE_X 12
#define AREA_OSD_MESSAGE_Y 38
#define AREA_OSD_MESSAGE_H ((pFonts[OSD_MESSAGE_FONT])->m_cMaxPixelHeight)
#define AREA_BUTTON_Y (AREA_OSD_MESSAGE_Y)
#define AREA_BUTTON_W 100
#define AREA_BUTTON_H 32
#define AREA_MESSAGE_WND_X 20
#define AREA_MESSAGE_WND_Y 20
#define AREA_MESSAGE_WND_W 340
#define AREA_MESSAGE_WND_H (AREA_BUTTON_Y + AREA_BUTTON_H + AREA_OSD_MESSAGE_H)
#define OFFSET_1 1
/****************************************************************************************************
* DECLARATION: Private (static) functions
****************************************************************************************************/
/**************************************************************************
* Display functions
***************************************************************************/
//
// PARAMETER DECLARATIONS
//
/**************************************************************************
* DESCRIPTORS
***************************************************************************/
static CONST OSD_TEXT oYesText =
{ OSDR_GetFormUniStr_OsdMessage, (UINT32)S_YES };
// The descriptor for Confirm Yes Button
STATIC CONST MS_DESCRIPTOR_BUTTON oConfirmYesButtonDescriptor =
{// MS_DESCRIPTOR
{
{
sizeof(MSO_BUTTON),
MS_NAV_TO_ALGINED_Y,
MS_ATTR_FOCUSABLE | MS_ATTR_OSD_LAYER_0 | MS_ATTR_RADIO_BUTTON,
{
0,
0,
AREA_BUTTON_W,
AREA_BUTTON_H
},
OBUTTON_Operation,
OBUTTON_FillOSDSeg,
mpParamNull
},
(MS_X_Y_ALIGN *)&oButtonTextXYAlign,
(MS_COLOR_SET *)&oButtonTextColorSet,
(MS_BITMAP_SET *)&oButtonBitmapSet,
(OSD_TEXT *)&oYesText,
FONT_0,
NULL,
NULL
},
MS_OP_BUTTON_YES
};
/**************************************************************************/
// The descriptor for Confirm No Button
static CONST OSD_TEXT oNoText =
{ OSDR_GetFormUniStr_OsdMessage, (UINT32)S_NO };
STATIC CONST MS_DESCRIPTOR_BUTTON oConfirmNoButtonDescriptor =
{// MS_DESCRIPTOR
{
{
sizeof(MSO_BUTTON),
MS_NAV_TO_ALGINED_Y,
MS_ATTR_FOCUSABLE | MS_ATTR_OSD_LAYER_0 | MS_ATTR_RADIO_BUTTON,
{
0,
0,
AREA_BUTTON_W,
AREA_BUTTON_H
},
OBUTTON_Operation,
OBUTTON_FillOSDSeg,
mpParamNull
},
(MS_X_Y_ALIGN *)&oButtonTextXYAlign,
(MS_COLOR_SET *)&oButtonTextColorSet,
(MS_BITMAP_SET *)&oButtonBitmapSet,
(OSD_TEXT *)&oNoText,
FONT_0,
NULL,
NULL
},
MS_OP_BUTTON_NO
};
/**************************************************************************/
// The descriptor for Confirm OK Button
static CONST OSD_TEXT oOkText =
{ OSDR_GetFormUniStr_OsdMessage, (UINT32)S_OK };
STATIC CONST MS_DESCRIPTOR_BUTTON oConfirmOKButtonDescriptor =
{// MS_DESCRIPTOR
{
{
sizeof(MSO_BUTTON),
MS_NAV_TO_ALGINED_Y,
MS_ATTR_FOCUSABLE | MS_ATTR_OSD_LAYER_0 | MS_ATTR_RADIO_BUTTON,
{
0,
0,
AREA_BUTTON_W,
AREA_BUTTON_H
},
OBUTTON_Operation,
OBUTTON_FillOSDSeg,
mpParamNull
},
(MS_X_Y_ALIGN *)&oButtonTextXYAlign,
(MS_COLOR_SET *)&oButtonTextColorSet,
(MS_BITMAP_SET *)&oButtonBitmapSet,
(OSD_TEXT *)&oOkText,
FONT_0,
NULL,
NULL
},
MS_OP_BUTTON_YES
};
/**************************************************************************
* Utility functions
***************************************************************************/
/**************************************************************************
* Operation functions
***************************************************************************/
/**************************************************************************
* Function : OCONFIRM_Operation
*
* In :
*
* Out :
*
* Desc :
***************************************************************************/
MS_OP OCONFIRM_Operation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam)
{
if (MS_IS_USER_OP(MsOp))
{
switch(MsOp)
{
case MS_OP_EJECT:
case MS_OP_POWER:
case MS_OP_SETUP:
return MsOp;
case MS_OP_RIGHT:
case MS_OP_LEFT:
case MS_OP_ENTER:
break;
default:
return MS_OP_NONE;
}
}
switch(MsOp)
{
// TODO: Use table to add buttons, make CANCEL invisible is MS_IsConfirmOKButtonOnly, let the container set the focus using attributes
case MS_OP_INIT:
{
MSO_OBJECT __NEAR *pObject;
MS_DESCRIPTOR_CONFIRM* pDescriptor = (MS_DESCRIPTOR_CONFIRM*)pThis->mpDescriptor;
UINT8 cNbrMessages = pDescriptor->mcNbrMessages;
UINT16 wWidth = ((MS_DESCRIPTOR*)pDescriptor)->moArea.mwW;
if (AREA_MESSAGE_WND_W > wWidth)
wWidth = AREA_MESSAGE_WND_W;
if (MS_IsConfirmOKButtonOnly(pThis))
{
pObject = MS_FindObjectFromDescriptor((MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&oConfirmOKButtonDescriptor);
if (pObject == NULL)
{
pObject = MS_CreateAndAddObject((MS_DESCRIPTOR*)&oConfirmOKButtonDescriptor, (MSO_CONTAINER __NEAR*)pThis);
MS_ObjectMove(pObject, (wWidth - AREA_BUTTON_W)/2, AREA_BUTTON_Y + (cNbrMessages * AREA_OSD_MESSAGE_H));
}
}
else
{
pObject = MS_FindObjectFromDescriptor((MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&oConfirmYesButtonDescriptor);
if (pObject == NULL)
{
pObject = MS_CreateAndAddObject((MS_DESCRIPTOR*)&oConfirmYesButtonDescriptor, (MSO_CONTAINER __NEAR*)pThis);
MS_ObjectMove(pObject, (wWidth - 2 * AREA_BUTTON_W)/3, AREA_BUTTON_Y + (cNbrMessages * AREA_OSD_MESSAGE_H));
}
pObject = MS_FindObjectFromDescriptor((MSO_CONTAINER __NEAR*)pThis, (MS_DESCRIPTOR*)&oConfirmNoButtonDescriptor);
if (pObject == NULL)
{
pObject = MS_CreateAndAddObject((MS_DESCRIPTOR*)&oConfirmNoButtonDescriptor, (MSO_CONTAINER __NEAR*)pThis);
MS_ObjectMove(pObject, (2 * wWidth - AREA_BUTTON_W)/3, AREA_BUTTON_Y + (cNbrMessages * AREA_OSD_MESSAGE_H));
}
}
MS_ObjectMove(pThis, AREA_MESSAGE_WND_X, AREA_MESSAGE_WND_Y);
MS_ObjectResize(pThis, wWidth, AREA_MESSAGE_WND_H + (cNbrMessages * AREA_OSD_MESSAGE_H));
// Set the focus:
MS_ScreenSetFocusObject(pObject);
}
break;
default:
break;
}
MsOp = MS_ComponentBasicOperation(pThis, MsOp, lParam);
if (MsOp == MS_OP_BUTTON_YES || MsOp == MS_OP_BUTTON_NO)
{
MSO_OBJECT __NEAR *pObject;
if ((((MS_DESCRIPTOR_CONFIRM*)(pThis->mpDescriptor))->mConfirmAction) != NULL)
(((MS_DESCRIPTOR_CONFIRM*)(pThis->mpDescriptor))->mConfirmAction)((MsOp == MS_OP_BUTTON_YES));
//find previously focused object in pThis->mpParent and set focus to it
pObject = MS_ContainerGetPrevFocusObject((MSO_CONTAINER __NEAR*)pThis->mpParent);
if (pObject != NULL)
MS_ScreenSetFocusObject(pObject);
MS_SetToBeRemoved(pThis);
MS_DisplayAddObject(pThis);
}
return MsOp;
}
/**************************************************************************
* Display functions
***************************************************************************/
/**************************************************************************
* Function : OCONFIRM_FillOSDSeg
*
* In :
*
* Out :
*
* Desc :
***************************************************************************/
BOOL OCONFIRM_FillOSDSeg(MSO_OBJECT __NEAR* pThis, MS_AREA __NEAR* pAbsArea)
{
MS_DESCRIPTOR_CONFIRM* pDescriptor = (MS_DESCRIPTOR_CONFIRM*)pThis->mpDescriptor;
UINT16 wStartY;
UINT8 cMessageIndex;
// Search for the index of the subtitle line to display
for (cMessageIndex = 0; cMessageIndex < pDescriptor->mcNbrMessages; cMessageIndex++)
{
wStartY = pAbsArea->msY + AREA_OSD_MESSAGE_Y + (AREA_OSD_MESSAGE_H * cMessageIndex) - AREA_OSD_MESSAGE_H - OFFSET_1;
if (((goOsdSeg.msAbsY >= wStartY) && (goOsdSeg.msAbsY < (wStartY + AREA_OSD_MESSAGE_H))))
break;
}
OSDR_FillOsdSegBitmapFitArea(pDescriptor->mpBgBmp, pAbsArea);
if (cMessageIndex < pDescriptor->mcNbrMessages)
{
if ((pDescriptor->mpOSDMessages)[cMessageIndex] != NULL && (pDescriptor->mpOSDMessages)[cMessageIndex]->mGetStr != NULL)
{
FORMATED_UNICODE_STRING oFormUniStr;
oFormUniStr.mtFontIndex = FONT_0;
((pDescriptor->mpOSDMessages)[cMessageIndex]->mGetStr)((FORMATED_UNICODE_STRING __NEAR*)&oFormUniStr,
(pDescriptor->mpOSDMessages)[cMessageIndex]->mParam);
OSDR_FillOsdSegUniString((FORMATED_UNICODE_STRING __NEAR*)&oFormUniStr,
pAbsArea,
AREA_OSD_MESSAGE_X,
AREA_OSD_MESSAGE_Y + (cMessageIndex * AREA_OSD_MESSAGE_H),
ALIGN_H_LEFT,
ALIGN_V_BOTTOM,
pDescriptor->mwTextColor);
}
}
return FALSE;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -