⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prog_advanced.c

📁 Sunplus 8202S source code.
💻 C
📖 第 1 页 / 共 2 页
字号:
{
    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 + -