?? mso_item_access.c
字號:
/* **************************************************************************************
* Copyright (c) 2006 ZORAN Corporation, All Rights Reserved
* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF ZORAN CORPORATION
*
* File: $Workfile: mso_item_access.c $
*
* Description:
* ============
* Project definition of the MSO_ITEM_ACCESS functions
*
****************************************************************************************/
#include "Config.h" // Global Configuration - do not remove!
#ifdef DEBUG_UI_TRACE
#undef IFTRACE
#define IFTRACE if (gTraceUI)
#include "Debug\DbgMain.h"
#endif //DEBUG_UI_TRACE
#include "Include\SysDefs.h"
/////////////////////////////////////////////////////////////////////////////
// Include files
#include <stdio.h>
#include <string.h>
#include "GUI\Menu_system\ms_object.h"
#include "gui\menu_system\osd_rendering.h"
#include "gui\menu_system\ms_display.h"
#include "GUI\Menu_system\ms_screen.h"
#include "gui\menu_system\ms_send_op.h"
#include "GUI\Object_class\ItemAccess\mso_item_access.h"
#include "GUI\Resource\Bitmap\bitmap.h"
#include "Menu\menu_operation_def.h"
#include "Font\fonts.h"
#include "Library\String_generate.h"
#include "Library\Container_misc.h"
#ifndef DEBUG_UI_TRACE
#undef dbg_printf(sMsg)
#define dbg_printf(sMsg)
#undef dbgm_printf(sMsg, mode)
#define dbgm_printf(sMsg, mode)
#endif
// TODO: Replace ((MSO_ITEM_ACCESS __NEAR*)pThis) with pObjectItemAccess
#define pObjectItemAccess ((MSO_ITEM_ACCESS __NEAR*)pThis)
#define pDescriptorItemAccess ((MS_DESCRIPTOR_ITEM_ACCESS*)(pThis->mpDescriptor))
#pragma argsused
MS_OP OITEMACCESS_Operation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam)
{
switch(MsOp)
{
case MS_OP_DEFROST:
case MS_OP_INIT:
{
MS_DESCRIPTOR_ITEM_ACCESS* pItemAccessDescriptor = (MS_DESCRIPTOR_ITEM_ACCESS*)pThis->mpDescriptor;
UINT16 Item;
UINT16 ItemType;
UINT16 TotalItems;
pItemAccessDescriptor->mpfGetDisplayItem(&Item, &TotalItems, &ItemType);
//Init total items for runtime
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemTotal = TotalItems;
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mMsOpUser = MS_OP_NONE;
#ifdef D_10P_KEY
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mw10PFlag= 0;
#endif
}
break;
case MS_OP_ITEM_ACCESS_GET_EDIT_ITEM:
{
if (MS_IsFocused(pThis)) //Edit item just focused have edit item
{
if (((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent <
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemTotal)
(*(UINT16 *)lParam) = ((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent;
else
(*(UINT16 *)lParam) = NULL_INDEX;
}
else
(*(UINT16 *)lParam) = NULL_INDEX;
}
return MS_OP_NONE;
case MS_OP_TICK:
{
UINT16 Item;
UINT16 ItemType;
UINT16 TotalItems;
MS_DESCRIPTOR_ITEM_ACCESS* pItemAccessDescriptor = (MS_DESCRIPTOR_ITEM_ACCESS*)pThis->mpDescriptor;
if (MS_IsFocused(pThis))
{
if (NULL_INDEX == ((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent
#ifdef D_10P_KEY
&& (((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mw10PFlag==0)
#endif
)
break;
if (0 != ((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwTimeout)
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwTimeout--;
if (0 == ((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwTimeout)
{
#ifdef D_10P_KEY
if(((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mw10PFlag)
{
//MSO_OBJECT __NEAR* pList ;
//pList = MS_FindDescendant((MSO_CONTAINER __NEAR*)gpScreen, pItemAccessDescriptor->mpDescriptorList);
//if (NULL != pList)
//MS_ScreenSetFocusObject(MS_ScreenGetPrevFocusObjectInMenu(pThis));
//MS_ScreenSetFocusObject(MS_ContainerGetPrevFocusObject((MSO_CONTAINER __NEAR*) pList));
//modified by Tranmin D_10P_TIMEOUT_CANCEL
#if 1
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent = NULL_INDEX;
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mMsOpUser = MS_OP_MENU_ITEM_ACCESS_TIMEOUT;
#else
if (((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent >=
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemTotal)
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent = NULL_INDEX;
#endif
//modified by Tranmin D_10P_TIMEOUT_CANCEL
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mw10PFlag= 0;
break;
}
#endif
if (((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent >=
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemTotal)
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent = NULL_INDEX;
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mMsOpUser = MS_OP_MENU_ITEM_ACCESS_TIMEOUT;
}
}
else
{
pItemAccessDescriptor->mpfGetDisplayItem(&Item, &TotalItems, &ItemType);
if (Item != ((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent
||TotalItems != ((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemTotal
||ItemType != ((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemType)
{
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent = Item;
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemTotal = TotalItems;
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemType = ItemType;
MS_DisplayAddObject(pThis);
}
}
}
break;
#ifdef D_10P_KEY
case MS_OP_10P:
{
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwTimeout = ITEM_ACCESS_TIMEOUT; //ITEM_ACCESS_TIMEOUT;
if(0!=((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent %10)
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent = 0;
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent += 10;
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mw10PFlag= 1;
if(((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent >((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemTotal )
{
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent = 10;
}
MS_DisplayAddObject(pThis);
}
return MS_OP_NONE;
#endif
case MS_OP_0: // Fall Through
case MS_OP_1: // Fall Through
case MS_OP_2: // Fall Through
case MS_OP_3: // Fall Through
case MS_OP_4: // Fall Through
case MS_OP_5: // Fall Through
case MS_OP_6: // Fall Through
case MS_OP_7: // Fall Through
case MS_OP_8: // Fall Through
case MS_OP_9:
{
UINT8 cValue = MS_OperationDigitKeyToValue(MsOp);
#ifdef D_10P_KEY
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwTimeout = 0; //directly for number key
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mw10PFlag= 0;
#else
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwTimeout = ITEM_ACCESS_TIMEOUT;
#endif
if (PARAM_ITEM_ACCESS_START_NEW_EDITION == lParam
|| NULL_INDEX == ((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent)
{
if (0 == cValue)
{
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent = NULL_INDEX;
}
else
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent =_ItemNumUserToSystem(cValue);
//add by Tranmin D_PROHIBIT_0_INPUT
if(!(((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mw10PFlag) && (0 == cValue))
{
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent = NULL_INDEX;
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mMsOpUser = MS_OP_MENU_ITEM_ACCESS_INVALID_DIGITAL_INPUT;
}
//add by Tranmin D_PROHIBIT_0_INPUT
}
else
{
#ifdef D_10P_KEY
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent =((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent+ _ItemNumUserToSystem(cValue);
#else
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent = (_ItemNumSystemToUser(((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent ) * 10) + _ItemNumUserToSystem(cValue);
#endif
if (((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemTotal < 10)
{
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent %= 10;
if (9 == ((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent )
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent = NULL_INDEX;
}
else if (((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemTotal < 100)
{
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent %= 100;
if (99 == ((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent)
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent = NULL_INDEX;
}
else
{
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent %= 1000;
if (999 == ((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent)
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent = NULL_INDEX;
}
}
MS_DisplayAddObject(pThis);
}
return MS_OP_NONE;
case MS_OP_CLEAR:
if (NULL_INDEX != ((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent)
{
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent = NULL_INDEX;
MS_DisplayAddObject(pThis);
}
return MS_OP_NONE;
case MS_OP_FOCUS_CHANGE:
{
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mMsOpUser = MS_OP_NONE;
MS_DisplayAddObject(pThis);
}
break;
case MS_OP_PLAY:
case MS_OP_ENTER:
{
if (((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent >=
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemTotal)
{
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent = NULL_INDEX;
//((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mMsOpUser = MS_OP_NONE;
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mMsOpUser = MsOp;
MS_DisplayAddObject(pThis);
}
else
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mMsOpUser = MsOp;
}
return MS_OP_NONE;
case MS_OP_ITEM_ACCESS_GET_MS_OP:
(*(MS_OP *)lParam) = ((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mMsOpUser;
return MS_OP_NONE;
default:
break;
}
return MsOp;
}
BOOL OITEMACCESS_FillOSDSeg(MSO_OBJECT __NEAR* pThis, MS_AREA __NEAR* pAbsArea)
{
FORMATED_UNICODE_STRING oFormUniStr;
UINT16 szBuffer[12]; // If one day support 12345/23245
UINT16 wColor = (!MS_IsFocused(pThis) && (ITEM_ACCESS_TYPE_PLAY ==((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemType)) ? CIDX_ITEM_ACCESS_PLAY : CIDX_ITEM_ACCESS_FOCUS;
oFormUniStr.mtFontIndex = pDescriptorItemAccess->mtFontIndex;
// display bitmap underneath text
OSDR_FillOsdSegBitmapFitArea(OTEXT_GetBitmapFromSet(pThis, pDescriptorItemAccess->mpBmpSetBg), pAbsArea);
if(MS_IsFocused(pThis) && (NULL != pDescriptorItemAccess->mpBmpSetBg))
OSDR_FillOsdSegBitmapFitArea(pDescriptorItemAccess->mpBmpSetBg->mpFocused, pAbsArea);
if (NULL_INDEX == ((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent)
{
STR_GeneratItemAccessNumeric(L'-', 0, ((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemTotal,
szBuffer, 0, sizeof(szBuffer));
}
else
{
#ifdef D_10P_KEY
if(((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mw10PFlag) //Process 10P key
{
UINT16 wItem10P = ((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent;
wItem10P=wItem10P/10;
wItem10P|=0x8000;
if (MS_IsFocused(pThis))
STR_GeneratItemAccessNumeric(L'-', wItem10P,
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemTotal,szBuffer, 0, sizeof(szBuffer));
else
STR_GeneratItemAccessNumeric(L'0', wItem10P,
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemTotal, szBuffer, 0, sizeof(szBuffer));
}
else
#endif
{
UINT16 wItemCurrent = ((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemCurrent + 1;
if (MS_IsFocused(pThis))
STR_GeneratItemAccessNumeric(L'-', wItemCurrent,
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemTotal,szBuffer, 0, sizeof(szBuffer));
else
STR_GeneratItemAccessNumeric(L'0', wItemCurrent,
((MSO_ITEM_ACCESS __NEAR* )pThis) ->moParam.mwItemTotal, szBuffer, 0, sizeof(szBuffer));
}
}
OSDR_GetFormUniStr_Ram((FORMATED_UNICODE_STRING __NEAR*)&oFormUniStr, (UINT32)szBuffer);
OSDR_FillOsdSegUniString((FORMATED_UNICODE_STRING __NEAR*)&oFormUniStr,
pAbsArea,
TEXT_GetAlignXPosition(pDescriptorItemAccess->mpXYAlignText, oFormUniStr.mwPixelWidth, pAbsArea->mwW),
TEXT_GetAlignYPosition(pDescriptorItemAccess->mpXYAlignText, oFormUniStr.mcPixelHeight,pAbsArea->mwH),
TEXT_GetAlignHorizontal(pDescriptorItemAccess->mpXYAlignText),
TEXT_GetAlignVertical(pDescriptorItemAccess->mpXYAlignText),
wColor
);
return FALSE;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -