📄 fljview.c
字号:
}
vRectangle(WB_DGST_HILI, 0, 0, 1, FLJVDGTMN_OBJ_COLOR); // while color.
#else
// - display the hilit
vSetHLRng(FLDGTMN_HILIT, 0xFF);
vShowHL(FLDGTMN_HILIT);
#endif
return;
}
/**
* Demo how to read the exe list index of image item on digest menu.
*/
WORD wFlJvGetDgtItemIdx(BYTE bItemIdx) large
{
WORD wIdx;
if (bItemIdx >= (bSharedInfo(SI_THUMBNAIL_16_IDX_HI) + 1))
return 0xFFFF;
bLoByte(wIdx) = bSharedInfo(SI_JPG_THUMBNAIL_START + 2*bItemIdx);
bHiByte(wIdx) = bSharedInfo(SI_JPG_THUMBNAIL_START + (2*bItemIdx+1));
return wIdx;
}
/**
* Init Obj JVIEW.
*/
BOOL fgFlJvInit(void) large
{
// - init UI component
#ifndef WB_ALLOC_MIN
vCreateWB(FL_DGTMN_WB, TRUE);
vSetWBTcColor(FL_DGTMN_WB);
vDisableWB(FL_DGTMN_WB);
vSetTransEn(FL_DGTMN_WB, 0);
// - draw the buttons on digest menu
vFlJvDrawDgtBtns(bEepromReadByte(OSD_LANG_POSITION));
#endif
// - control flags
_bFlJvOn = FLJV_OBJ_MV;
_bFlJvTransEff = 0;
vSetSharedInfo(SI_JPG_TRANSITION_EFFECT, _rFlJvTransEff[_bFlJvTransEff].bCode);
return TRUE;
}
/**
* Leave the object (called when we try to move the focus away).
*/
WORD wFlJvLeave(BOOL bSuicide) large
{
WORD wItem;
if (_wCurrItem != 0xFFFF)
wItem = _wCurrItem;
else
wItem = (WORD)bSharedInfo(SI_JPG_ITEM_IDX_HI) * 256 + bSharedInfo(SI_JPG_ITEM_IDX_LO);
// - 1. stop the decoding if the decoder is going
#if 0
if (bSuicide)
{
// vSendUopCmd(UOP_STOP, SV_JPG_STOP_ALL_STATE, 0x0, 0x0);
// vFlMnSetUopRetJob(UOP_STOP, UOP_RET_CHG_CMDTGT);
vFlSendUopCmd(UOP_STOP, SV_JPG_STOP_ALL_STATE, UOP_RET_CHG_CMDTGT);
}
#endif
if (bSuicide)
{
vSendUopCmd(UOP_STOP, SV_JPG_STOP_ALL_STATE, 0x0, 0x0);
}
// - 2. hide the hilit for digest menu
#ifdef HILI_USE_OSD
vDisableWB(WB_DGST_HILI);
#else
vHideHL(FLDGTMN_HILIT);
#endif
// - TOFIX: the index may be ambigous to reflect the current item
return (wItem);
}
/**
* Enter the object (called when we try to move the focus in).
*/
void vFlJvEnter(WORD wItem) large
{
#ifdef WB_ALLOC_MIN
/*
Add by Bright_liu 2005/08/31/, for CQ(PL00101097, PL0010109)
The first time to enter PCD/JPG, some OSD can not be showed.
*/
vOsdShowWb(OSD_WB_DISABLE);
vOsdShowWb(OSD_WB_RESET);
/*
Add it by Bright_liu 2005/11/15, for CQ(PL00205010)
when loading PCD disc, it not show the disc type.
*/
if(bSharedInfo(SI_DISC_TYPE) == SV_PCD)
{
vOsdPosShow(OSD_POS_DISC_TYPE, OSD_MSG_PICTURE_CD, OSD_TIMEOUT);
}
vCreateWBEx(FL_DGTMN_WB);
vSetTransEn(FL_DGTMN_WB, 0);
// - draw the buttons on digest menu
vFlJvDrawDgtBtns(bEepromReadByte(OSD_LANG_POSITION));
#endif
_rOsdStateCtx.bTimeType = OSD_SHOW_DISABLE;
//vEnableWB(WB_OVERLAY_MSG2);
// - set hilit color
#ifndef HILI_USE_OSD
vSetHLCol(FLDGTMN_HILIT, FLDGTMN_HILIT_COL);
#endif
#ifdef SUPPORT_DRM
if ((!fgIsInSetupMenu())&&(!fgIsInDRMShow()))
#else
if (!fgIsInSetupMenu()
#ifdef SUPPORT_MODE_SWITCH_MENU //yan 070409
|| (!fgIsInSmsMenuShow())
#endif
)
#endif
{
vEnableWB(WB_NORMAL_HEAD1);
vEnableWB(WB_NORMAL_HEAD2);
}
if (bSharedInfo(SI_JPG_MODE) == JPEGMOD_DIGEST)
{
vDisableWB(WB_NORMAL_VOL);
//vDeleteWB(WB_NORMAL_VOL);
// 20050526, redraw the digest menu, or OSD hilight can't be shown.
#ifdef HILI_USE_OSD
vFlJvShowDgtMn ();
#else
vEnableWB(FL_DGTMN_WB);
vFlJvDgtMnHil();
#endif
}
// - set shared info to config RISC
vSetSharedInfo(SI_PREVIEW_MODE, FALSE);
vSetSharedInfo(SI_JPG_ROTATE_AUTO_SLIDE, (0x80|FL_JPEG_SLIDESHOW_INTERVAL));
//vSetSharedInfo(SI_JPG_DIGEST_BG, 0x1);
// - set the foreground module as JPEG DECODER
vFlCtrlSetFg(FLMD_JPEG_DECODER);
while(bSharedInfo(SI_DDISC_PB_MODULE) != SV_DDISC_MODULE_JPG);
if (bSharedInfo(SI_DISC_TYPE) == SV_PCD)
{
if (bSharedInfo(SI_JPG_MODE) != JPEGMOD_DIGEST)
{
vSetSharedInfo(SI_PREVIEW_MODE, FALSE);
vSendUopCmd(UOP_PLAY, 0x0, 0x0, 0x0);
}
if (fgIsInSetupMenu())
{
// - pause jpg decoding
vSendUopCmd(UOP_PAUSE, 0x01, 0x01, 0x00);
//vFsMenuFreezeDec(TRUE);
}
}
_bFlVdoPbcStt = SV_PLAY;
if (_rFlCmdLock.bPath != FL_CMDPATH_SEL_1)
{
vFlClRls();
}
return;
}
/**
* We send a click item command from object "jpeg viewer" and handle the
* return here.
*/
static void vFlJvRetClickItem(void) large
{
vFlCmdDone();
vFlClRls();
return;
}
#ifdef SUPPORT_EMD
static void vFlJvRetAddItem(void) large
{
WORD wBlkPtr, wItem;
BYTE bRCode;
wBlkPtr = FL_CMD_BLK_SA + 1;
bRCode = bSharedInfo(wBlkPtr ++);
vFlCmdDone();
if (bRCode == FLRET_S_OK)
{
switch (bFlClPath())
{
case FL_CMDPATH_MV:
if (_fgFlSrcSet)
{
_fgFlFmving = TRUE;
}
_fgFlSrcSet = !_fgFlSrcSet;
break;
}
}
else
{
_fgFlSrcSet = FALSE;
_fgFlFmving = FALSE;
}
vFlClRls();
}
static void vFlJvRetDelItem(void) large
{
WORD wBlkPtr, wItem;
BYTE bRCode;
wBlkPtr = FL_CMD_BLK_SA + 1;
bRCode = bSharedInfo(wBlkPtr ++);
vFlCmdDone();
if (bRCode == FLRET_S_OK)
{
switch (bFlClPath())
{
case FL_CMDPATH_MV:
vFlClRls();
break;
}
}
else
{
_fgFlSrcSet = FALSE;
_fgFlFmving = FALSE;
}
vFlClRls();
}
#endif // SUPPORT_EMD
/**
* Handle the JPEG state change notification.
*/
static void vFlJvChgJpgState(BYTE bStt) large
{
WORD wIdx;
BYTE bMode;
// - get the index of the current item of JPEG module and
// the operation mode
bLoByte(wIdx) = bSharedInfo(SI_JPG_ITEM_IDX_LO);
bHiByte(wIdx) = bSharedInfo(SI_JPG_ITEM_IDX_HI);
bMode = bSharedInfo(SI_JPG_MODE);
switch (bStt)
{
case JPEGSTT_DEC_STRT:
if ((bMode == JPEGMOD_NORMAL) || (bMode == JPEGMOD_SLIDESHOW))
{
#ifdef FLJV_SHOW_DEC_STATUS
vOsdPosShow(OSD_POS_PBC_2, OSD_MSG_JPG_DECODING, OSD_NO_DISAPPEAR);
#endif
vFlUpdateVfd(FALSE);
}
else if (bMode == JPEGMOD_DIGEST)
{
if (_bFlJvDgtItemIdx == 0)
{
vFlJvDgtMnMnHil();
}
}
break;
case JPEGSTT_DEC_FSH:
case JPEGSTT_DEC_ABT:
if (bMode == JPEGMOD_NORMAL)
{
#ifdef FLJV_SHOW_DEC_STATUS
vOsdPosShow(OSD_POS_PBC_2, OSD_MSG_JPG_DECODING, 1);
#endif
}
else if (bMode == JPEGMOD_DIGEST)
{
// - TODO: do nothing here
}
break;
case JPEGSTT_DEC_ERR:
break;
default:
// - wrong case
break;
}
return;
}
/**
* IR_CMD_DONE handler of "JVIEW MAIN VIDEO".
*/
BOOL fgFlJvMvIrCmdDoneHdr(void) large
{
BYTE bTemp;
if (FL_ACK(_dwIrDoneParm) == FL_CMD_ASSERT)
{
// - get file list command assertion here
switch(bSharedInfo(FL_CMD_BLK_SA))
{
case FLCMD_CLICK_ITEM:
vFlJvRetClickItem();
break;
#ifdef SUPPORT_EMD
case FLCMD_ADD_ITEM:
vFlJvRetAddItem();
break;
case FLCMD_DEL_ITEM:
vFlJvRetDelItem();
break;
#endif
default:
// - TODO: other case
break;
}
}
else
{
// - notification
switch (FL_ACK(_dwIrDoneParm))
{
case SI_MP3_STT:
_fgFlMdChg = TRUE;
break;
case SI_JPG_STT:
vFlJvChgJpgState(FL_PARM1(_dwIrDoneParm));
break;
case SI_JPG_MODE:
if (FL_PARM1(_dwIrDoneParm) == JPEGMOD_DIGEST)
{
vFlJvShowDgtMn();
}
break;
case SI_JPG_SLIDE_SHOW_DONE:
if (bSharedInfo(SI_DISC_TYPE) == SV_PCD)
{
// - for PCD, turn on digest mode
fgFlJvDgtOn();
}
else
{
// - for DATA disc, stop the module totally and change command target
// back to file menu
vSendUopCmd(UOP_STOP, SV_JPG_STOP_ALL_STATE, 0x0, 0x0);
vFlSetCmdTarget(FL_CMD_TARGET_MENU);
}
break;
case SI_DDISC_PB_MODULE:
break;
#ifdef FLJV_SHOW_ROTATE_PAN_MSG
case SI_JPG_ROTATE_PAN_ACK:
bTemp = bSharedInfo(SI_JPG_ROTATE_PAN_ACK);
if ((bTemp &0xF0) == 0x10) // JPG_ACK_ROTATING
{
vFlShowError(OSD_POS_ERROR, OSD_MSG_ROTATING, 4);
}
else
{
switch (bTemp & 0x0F)
{
case SV_UP:
vFlShowError(OSD_POS_ERROR, OSD_MSG_PAN_UP, 4);
break;
case SV_DOWN:
vFlShowError(OSD_POS_ERROR, OSD_MSG_PAN_DOWN, 4);
break;
case SV_LEFT:
vFlShowError(OSD_POS_ERROR, OSD_MSG_PAN_LEFT, 4);
break;
case SV_RIGHT:
vFlShowError(OSD_POS_ERROR, OSD_MSG_PAN_RIGHT, 4);
break;
}
}
break;
#endif
case FL_CMD_ASSERT:
// - "FS LIST" command ack, this should not happen here
default:
// - other notification and command ack.
return FALSE;
}
}
return TRUE;
}
static BOOL fgFlJvOnIrSelDone(void) large
{
WORD wIdx;
WORD wFldrNs;
wIdx = (WORD) _rNumInStateCtx.bDig[0] * 100 + _rNumInStateCtx.bDig[1] * 10 + _rNumInStateCtx.bDig[2];
if (_wFlMnListLen >= 1000)
{
wIdx = wIdx * 10 + _rNumInStateCtx.bDig[3];
}
if ((wIdx != 0) && (wIdx <= _wFlMnListLen))
{
#if 0
if (fgIsPcdPlay())
{
vFlCmdClickItem(_bFlMnListId, wIdx);
}
else
#endif
{
wIdx--;
if (bSharedInfo(SI_JPG_MODE) == JPEGMOD_DIGEST)
{
if (wIdx > (bSharedInfo(SI_THUMBNAIL_16_IDX_HI)))
return TRUE;
wIdx = wFlJvGetDgtItemIdx(wIdx);
}
_wCurrItem = wIdx;
_bFlMnCurItemIdx = wIdx % FLMN_ITEM_N;
if (fgFlClLock(FL_CMDPATH_SEL_0))
{
fgFlCmdGetItems(_bFlMnListId, wIdx - _bFlMnCurItemIdx);//, FLCMD_RET_OP_SEL);
}
}
// vSendUopCmd(UOP_STOP, SV_JPG_STOP_ALL_STATE, 0x0, 0x0);
//vFlCmdClickItem(_bFlMnListId, wIdx, FLCMD_RET_OP_CMDACK);
}
return TRUE;
}
/**
* IR_CMD_DONE handler of object "JVIEWER DIGEST MENU".
*
* RETURN: the return value indicates if we grabbed this IR.
*/
BOOL fgFlJvDgtMnIrCmdDoneHdr(void) large
{
BYTE bItemNs;
if (FL_ACK(_dwIrDoneParm) == FL_CMD_ASSERT)
{
// - get file list command assertion here
switch(bSharedInfo(FL_CMD_BLK_SA))
{
case FLCMD_CLICK_ITEM:
vFlJvRetClickItem();
break;
#ifdef SUPPORT_EMD
case FLCMD_ADD_ITEM:
vFlJvRetAddItem();
break;
case FLCMD_DEL_ITEM:
vFlJvRetDelItem();
break;
#endif
default:
// - TODO: other case
break;
}
}
else
{
switch (FL_ACK(_dwIrDoneParm))
{
case SI_JPG_STT:
// - state of the JPEG module changed
if (FL_PARM1(_dwIrDoneParm) == JPEGSTT_DEC_STRT)
{
bItemNs = bSharedInfo(SI_THUMBNAIL_16_IDX_HI) + 1;
/*
Modify it By Bright_liu /2005/10/20/, for CQ(PL00205060)
Modify it again by Bright_liu 2005/12/15, for CQ(PL00001634)
1.when fresh the digest JPG, move the hilight to the first one, otherwise it maybe on a invalid item
2.when finish more than one jpg but not all, it is enable to move the hilight to valid item.
*/
if ( _bFlJvDgtItemIdx >= bItemNs)
{
_bFlJvDgtItemIdx = 0;
_bFlJvDgtMnOn = FLJVDGTMN_OBJ_MN;
vFlJvDgtMnMnHil(); // - first time to hilit the item
/*
add it by Bright_liu 2005/09/12/, for CQ(PL00001222):
*/
#ifdef HILI_USE_OSD
// - Clean the OSD Highlight of SS/HELP MENU/PREV/NEXT.
_wStartX = DGT_BTN_SS_L;
_wEndX = DGT_BTN_SS_L + DGT_BTN_SS_W + DGT_BTN_HP_W + DGT_BTN_PV_W
+ DGT_BTN_NT_W + 3*DGT_BTN_H_GAP + DGT_BTN_HL_RB;
_wStartY = DGT_BTN_T;
_wEndY = _wStartY + DGT_BTN_PV_H;
vChgColRep(FL_DGTMN_WB, FLJVDGTMN_BTN_COLOR, 0);
#endif
}
// - read in the list index of the thumbnail item
//wFlJvGetDgtItemIdx(bItemNs - 1);
#if 0
// - when JPEG decoding starts under digest mode, increase the item
// number counter
_bFlJvDgtItemNs ++;
//if (_bFlJvDgtItemNs == 1)
if ((_bFlJvDgtItemNs % DGT_MN_NS) == 1)
vFlJvDgtMnMnHil(); // - first tme to hilit the item
// - read in the list index of the thumbnail item
vFlJvDgtRdIdx(_bFlJvDgtItemNs - 1);
#endif
}
break;
case SI_JPG_MODE:
// - the module back from digest mode
if (FL_PARM1(_dwIrDoneParm) != JPEGMOD_DIGEST)
{
// - bury the menu
vFlJvBuryDgtMn();
vEnableWB(WB_NORMAL_VOL);
}
break;
case SI_JPG_SLIDE_SHOW_DONE:
// - slide show done
//vOsdShowError(SV_ERR_GENERAL, FL_MSG_TIMEOUT);
break;
case FL_CMD_ASSERT:
// - "FS LIST" command ack, this should not happen here
default:
// - other notification and command ack.
return FALSE;
}
}
return TRUE;
}
#if 0 // - JACOB: for backup
BOOL fgFlJvDgtMnIrCmdDoneHdr(void) large
{
switch (FL_ACK(_dwIrDoneParm))
{
case SI_JPG_STT:
// - state of the JPEG module changed
if (FL_PARM1(_dwIrDoneParm) == JPEGSTT_DEC_STRT)
{
// - when JPEG decoding starts under digest mode, increase the item
// number counter
_bFlJvDgtItemNs ++;
if (_bFlJvDgtItemNs == 1)
vFlJvDgtMnMnHil(); // - first tme to hilit the item
// - read in the list index of the thumbnail item
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -