📄 prog_advanced.c
字号:
{
int i = 0;
//draw the prog GUI
osd_draw_rect(PROG_GUI_XSTART, PROG_GUI_YSTART, PROG_GUI_XLEN, PROG_GUI_YLEN, GRAY);
//draw items
for ( i = itemStart; i <= itemEnd; i++)
ShowProgItemSel(i, 0);
//draw "DONE" button
prog_draw_done_button(BUTTON_UNSELECTED);
}
/*
* Description:
* show string of prog selecition
*
* INPUT:
* mode --> 0 read inital value in prog[][].
* if haved items in prog[][], show its string in GUI
* else show "--"
× 1 for new seleciton. show its string in GUI
*
* sel_item --> selected item
*/
void ShowProgItemSel(BYTE sel_item, UINT8 mode)
{
BYTE str[35];
BYTE temp_str[30];
BYTE itemstr_xstart = 0;//unit: words
BYTE itemstr_ystart = 0;//unit: words
UINT16 file_index = 0;
if(sel_item < 1)
return;
printf("### sel :%d, prog:%d---\n",sel_item, prog[(sel_item)][1]);
if(mode == 0)
{
if((prog[(sel_item)][1] == 0) )
psprintf(temp_str, "--");
//psprintf(str,"%d: %s",sel_item,"--");
else//get saved items in prog[][]
{
file_index = prog[(sel_item)][1]-1;
prog_GetSelItemStr(temp_str, file_index);
}
}
else//mode = 1, get string of current selection.
{
file_index = pFsJpeg->file_array_in_page[pFsJpeg->file_current_in_page];
prog_GetSelItemStr(temp_str, file_index);
}
psprintf(str,"%d: %s",sel_item, temp_str);
//format is :
//1-- 2--
//3-- 4--
//5-- 6--ate == BUTTON_SELECTED)
//7-- 8--
//9-- 10--
if(sel_item > 10)
sel_item = sel_item - ((sel_item-1)/10)*10;//1~10
itemstr_xstart = ITEM0_XSTART+((sel_item-1)%2)*ITEM_X_DIFF;
itemstr_ystart = ITEM0_YSTART +(sel_item-1)/2;
ClearString(itemstr_xstart*16, itemstr_ystart*ITEM_Y_DIFF,
9*16+12,GRAY);
osd_DrawRegionString(itemstr_xstart*16, itemstr_ystart*ITEM_Y_DIFF, str, WHITE, GRAY,0);
}
void prog_draw_done_button(BYTE button_state)
{
int bgColor = 0;
if(button_state == BUTTON_SELECTED)
bgColor = BTN_SELECTED_COLOR;
else
bgColor = BLACK;
//draw "DONE" button
osd_draw_rect(DONEBTN_XSTART, DONEBTN_YSTART, DONEBTN_XLEN, BUTTON_Y_DIFF, BLACK);//draw a black rect
osd_draw_root_button(DONEBTN_XSTART+2, DONEBTN_YSTART+2,
DONEBTN_XLEN-4, BUTTON_Y_DIFF-4,
bgColor, BUTTON_SELECTED);
// osd_DrawRegionString(button_xstart+2, button_ystart+15, "Done", WHITE, BLACK,0);
osd_DrawRegionString(DONEBTN_XSTART+16, DONEBTN_YSTART+14, "Done", WHITE, bgColor,0);
}
/*
* Description:
* Get the string of given file_index to show in PROGRAM GUI
*
* INPUT:
* file_index ---> NOTE: it may be FILE or DIR
*
* OUPUT:
* str
*/
void prog_GetSelItemStr(BYTE str[], int file_index)
{
if(file_index == END_FILE)//file_index is invalid
str = "";
else
{
if (file_index >= SUB_FOLDER_BASE)
OSDGUI_GetDirName(str, file_index - SUB_FOLDER_BASE);
else
{
if (cd_type_loaded == CDDVD)
psprintf(str, "Title%d C%d", OSDGUI_GetParentDir(file_index,FILE), (file_index+1));
else
OSDGUI_GetFileName(str, file_index);
}
}
}
/*
* Description:
* when prog mode, "PREV" will excute the following funcrion
*
*/
BYTE prog_func_prev(UINT16 index)
{
UINT16 iSel = 0;
BYTE file_type = 0;
BYTE flag = FALSE;
iSel = prog[index][1] - 1; //get real file index.
if (cd_type_loaded == CDDA)
{
if (iSel == CD_ALL_TRACKS)//item"ALL tracks"
file_type = FOLDER_TYPE;
else
file_type = FILE_TYPE;
}
else
{
if (iSel >= SUB_FOLDER_BASE)//current prog item is folder
{
iSel = iSel - SUB_FOLDER_BASE;//get real dir index in iso9660_dir
file_type = FOLDER_TYPE;
}
else
file_type = FILE_TYPE;
}
if (file_type == FOLDER_TYPE)
{
if (cd_type_loaded == CDROM)
{
UINT16 CurDir = dir_set[dir_set_top];
if (FSGUI_IsFolderEnd(CurDir, PAGE_UP) == FALSE)
pFsJpeg->fsnav_trk_now--;
else
{//according to the OP sample,
//if prog mode, prev in the folder end will appear invalid.
#if 0
if (dir_set_top > 0)
dir_set_top--;
CurDir = dir_set[dir_set_top];
if ((CurDir == (iSel-1))//prev dir is same level as iSel.
|| (CurDir < iSel)//iSel has no same level again. prev dir'level less than iSel.
)
{ //current prog item(Folder,including all subfolders and files) has been played out.
prog_index--;//get prev prog item
flag = TRUE;
}
else
{
pFsJpeg->fsnav_dir_now = CurDir;//get real dir index in iso9660_dir
CalcDirFirstPage(pFsJpeg->fsnav_dir_now);
}
#endif
}
FSGUI_ShowCurrentSelection((pFsJpeg->fsnav_trk_now + pFsJpeg->first_mp3_entry));
}
else if (cd_type_loaded == CDDA)
{
if (cd_trk_now <= cd_trk_lo)
{
prog_index--;
flag = TRUE;
}
else
cd_trk_now--;
}
printf("Prev-- FOLDER ----flag :%d,prog_index :%d--pFsJpeg->fsnav_trk_now:%d,pFsJpeg->fsnav_dir_now:%d\n",flag,prog_index,pFsJpeg->fsnav_trk_now,pFsJpeg->fsnav_dir_now);
}
else//file
{
prog_index--;
flag = TRUE;
printf("Prev --- FILE ----flag :%d,prog_index :%d--\n",flag, prog_index);
}
if ((cd_type_loaded == CDDA) && (flag == TRUE))
cd_trk_now = 1;//when play prev prog_index, reset its value;
if (adv_search_time < 0)
adv_search_time = 0;
if (prog_index < 1)
{
prog_index = prog_cnt;
flag = TRUE;
}
return flag;
}
/*
* Description:
* when prog mode, "NEXT" will excute the following funcrion
*
*/
BYTE prog_func_next(UINT16 index)
{
UINT16 iSel = 0;
BYTE file_type = 0;
BYTE flag = FALSE;
iSel = prog[index][1] - 1; //get real file index.
if (cd_type_loaded == CDDA)
{
if (iSel == CD_ALL_TRACKS)//item"ALL tracks"
file_type = FOLDER_TYPE;
else
file_type = FILE_TYPE;
}
else
{
if (iSel >= SUB_FOLDER_BASE)//current prog item is folder
{
iSel = iSel - SUB_FOLDER_BASE;//get real dir index in iso9660_dir
file_type = FOLDER_TYPE;
}
else
file_type = FILE_TYPE;
}
if (file_type == FOLDER_TYPE)
{
if (cd_type_loaded == CDROM)
{
UINT16 CurDir = 0;
if (FSGUI_IsFolderEnd(pFsJpeg->fsnav_dir_now, PAGE_DOWN) == FALSE)
pFsJpeg->fsnav_trk_now++;
else
{
if (dir_set_top < (pFsJpeg->iso9660_dir_cnt-1))
{
dir_set_top++;
//if((iso9660_dir[dir_set[dir_set_top]].type) & (0x01 << pFsJpeg->gifsFuncBtn))
// break;
}
CurDir = dir_set[dir_set_top];
if ((CurDir == (iSel+1))//next dir is same level as iSel.
|| (CurDir < iSel)//iSel has no same level again. next dir'level less than iSel.
)
{//current prog item(Folder,including all subfolders and files) has been played out.
prog_index++;//get next prog item
flag = TRUE;
}
else
{
pFsJpeg->fsnav_dir_now = CurDir;//get real dir index in iso9660_dir
CalcDirFirstPage(pFsJpeg->fsnav_dir_now);
}
}
FSGUI_ShowCurrentSelection((pFsJpeg->fsnav_trk_now + pFsJpeg->first_mp3_entry));
}
else if (cd_type_loaded == CDDA)
{
if (cd_trk_now >= cd_trk_hi)
{
prog_index++;
flag = TRUE;
}
else
cd_trk_now++;
}
printf("NExt --- FOLDER iSel:%d---dir_set_top:%d, dir_set[dir_set_top]:%d---\n",iSel,dir_set_top, dir_set[dir_set_top]);
printf("Next-- FOLDER ----flag :%d,prog_index :%d--pFsJpeg->fsnav_trk_now:%d,pFsJpeg->fsnav_dir_now:%d\n",flag,prog_index,pFsJpeg->fsnav_trk_now,pFsJpeg->fsnav_dir_now);
}
else//file
{
prog_index++;
flag = TRUE;
printf("Next --- FILE ----flag :%d,prog_index :%d--\n",flag, prog_index);
}
if ((cd_type_loaded == CDDA) && (flag == TRUE))
cd_trk_now = 1;//when play next prog_index, reset its value;
if (adv_search_time < 0)
adv_search_time = 0;
if (prog_index > prog_cnt)
{
prog_index = 1;
flag = TRUE;
}
printf("Next flag :%d--prog_index:%d\n",flag, prog_index);
return flag;
}
int is_clear_pos(void)//2002-4-19 1:53
{}
void prog_func_play(void)
{}
void prog_func_input(UINT8 num)
{}
#endif//end ifdef OP_UI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -