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

📄 prog_advanced.c

📁 Sunplus 8202S source code.
💻 C
📖 第 1 页 / 共 2 页
字号:
/**************************************************************
** FILE
** prog_advanced.c
**
** DESCRIPTION
**  prog play for MP3/CD/DVD
**  1)build a more beautiful GUI  for PROGRAM
**  2)opration mode like PC
** 
**  NOTE:
**     prog[0][0]
**     prog[0][1] is not use.
**     the same as primary file(prog_unmp3dir.c / prog_mp3dir.c)
**     
**   Creator:  zhaoyanhua
** 	 Date:     2004-4-9 9:00
****************************************************************/

#ifdef OP_UI
#include "fsGUI_osd_func.h"
#include "fsGUI_osd_def.h"
#include "menu_def.h"
#include "menu_page.h"
#include "fsNAV.h"
#include "fs96602.h"
#include "osdGUI_def.h"
#include "osdGUI_func.h"
//extern functions and variables
extern int	menu_page;
extern int	menu_level;
extern int HL_menu;
extern BYTE index_y1;
extern UINT16 dir_set_top;
extern void ShowMenuPage(UINT8 page, UINT8 level, UINT8 HL_y);
extern void osd_draw_root_button(UINT32 xStart, UINT32 yStart, UINT32 xLen, UINT32 yLen,BYTE color,BYTE flag);

//GUI position unit:pixels
#define PROG_GUI_XSTART     (MENU_XSTART+MENU_BTN_XLEN)*16+4
#define PROG_GUI_YSTART     (MENU_YSTART-1)*BUTTON_Y_DIFF
#define PROG_GUI_YLEN       8*BUTTON_Y_DIFF//5 button lenth
#define PROG_GUI_XLEN       22*16
#define ITEM0_XSTART        MENU_XSTART+MENU_BTN_XLEN+2
#define ITEM0_YSTART        MENU_YSTART
#define ITEM_Y_DIFF         BUTTON_Y_DIFF
#define ITEM_X_DIFF         10
//for button"Done" unit: pixels
#define DONEBTN_XSTART      (ITEM0_XSTART+ITEM_X_DIFF/2)*16   
#define DONEBTN_YSTART      (ITEM0_YSTART+5)*ITEM_Y_DIFF
#define DONEBTN_XLEN        (ITEM_X_DIFF/2)*16

//for cdda "All tracks "item
#define CD_ALL_TRACKS   0
/*
 * Descirption:
 *
 *   because its mode looks like fsGUI,so use some funcitons of FSGUI
 */
void prog_init(void)
{
    int i = 0;
    
    full_scrn = PROGRAM;
    OSDGUI_Init();
    OSDGUI_ShowDirInitPara();
    
    if (cd_type_loaded == CDROM)
    {
#ifdef SURRORT_MP3_PREPLAY
        FS_ClearPreplayFlag();
#endif//#ifdef SURRORT_MP3_PREPLAY    
    }
    //NOTE:
    // I use index_x to show HL
    // index_x = 0,            HL in items
    // index_x = SHOW_PROG_NO*2, HL in "DONE" BUTTON
    index_x = 0;//now HL in items
               
    if(prog_cnt == 0)
    {     
        for (i = 0; i <= SHOW_PROG_NO; i++)
        {    
            prog[i][0] = 0;
            prog[i][1] = 0;
        }          
    }
}

void ShowProgPage(void)
{
    UINT16 current_dir = 0;
    
    //printf("###### ------SHow PROGPAGE---\n");
    current_dir = FSGUI_GetRootDir();  
    if ((cd_type_loaded == CDROM) )//only mp3
    {
        pFsJpeg->fsnav_dir_now = current_dir;
    }
    else if(cd_type_loaded == CDDVD)
    {
        dvd_title = 0; 
    }    
    OSDGUI_ShowOneDirContent(current_dir);       
    
    
    if(prog_cnt >10)
        prog_ShowOnePage(11,20);
    else
        prog_ShowOnePage(1,10);
    
    ShowOperationMsg(STR_OS_PROG_UI_MSG1, 1);
}

/*
 * Function : prog_func_clear()
 *
 * Descirption:
 *  clear item from the last item
 *
 */
void prog_func_clear(void)
{
    if(prog_cnt <= 0 )
        return; 
    
    if(prog_cnt == 10)
        prog_ShowOnePage(1, 10); 
        
   
    //index_x is  the index of item
    //prog[index_x][0]: folder
    //prog[index_x][1]: file
    prog[prog_cnt][0] = 0;
    prog[prog_cnt][1] = 0;
    ShowProgItemSel(prog_cnt, 0);
   // printf("### ---CLeAR index:%d--\n",prog_cnt);
    prog_cnt--;
       
}

void prog_func_down(void)
{
    if(index_x == SHOW_PROG_NO*2)//HL in DOWN
        return;
        
    if (cd_type_loaded == CDROM)
        FSGUI_OsdCmdDown();
    else
        OSDGUI_CmdDown();
}


void prog_func_left(void)
{
    if(index_x == SHOW_PROG_NO*2)//HL in DOWN
    {
        index_x = 0;
        SetOsdCol(0, 0, BTN_SELECTED_COLOR, 0xa40050ff); //restore the color
        prog_draw_done_button(BUTTON_UNSELECTED);
    }  
    else
    {
        if (cd_type_loaded == CDROM)
            FSGUI_OsdCmdLeft();
        else
            OSDGUI_CmdLeft();    
    }    
}

void prog_func_right(void)
{
    BYTE button_type = 0;
    UINT16 index = 0;
    
    button_type = OSDGUI_GetSelButtonType(pFsJpeg->file_current_in_page);
    index = pFsJpeg->file_array_in_page[pFsJpeg->file_current_in_page];
    
    if(   (button_type == SUB_BUTTON)//file in subdir 
       || ((button_type == BLANK_BUTTON) && (index != END_FILE)))//file in root_dir
    {//only when HL in file, can select DONE
        
        if (prog_cnt)
        {
            index_x = SHOW_PROG_NO*2;//only a flag show current HL in button"Done"
            //draw "done" button
            SetOsdCol(0, 0, BTN_SELECTED_COLOR, 0x831b24ff); 
            prog_draw_done_button(BUTTON_SELECTED);
        }
    }   
    else
    {
        if (cd_type_loaded == CDROM)
            FSGUI_OsdCmdRight();
        else
            OSDGUI_CmdRight();
        
    }    
}

void prog_func_up(void)
{
    if(index_x == SHOW_PROG_NO*2)//HL in DOWN
        return;
    
    if (cd_type_loaded == CDROM)
        FSGUI_OsdCmdUp();
    else
        OSDGUI_CmdUp();
}


void prog_func_select(void)
{
    //printf("##### ---select prog_cnt:%d--\n",prog_cnt);
    //HL in DONE button
    if((index_x == SHOW_PROG_NO*2))
    {    
        prog_func_off(); 
        return;
    }
    
    if(prog_cnt >= 20)
        return;
    
    if ((cd_type_loaded == CDDVD) && (dvd_title == 0))
    {//if HL item is title, open this title.
        prog_func_right();        
        return;
    }
    
    
    if(prog_cnt == 10)
        prog_ShowOnePage(11,20);
            
    prog_cnt++;
    
    
    //index_x is  the index of item
    //prog[index_x][0]: parent dir
    //prog[index_x][1]: file
    prog[prog_cnt][0] = OSDGUI_GetCurrentDir();
    //"+1": if not "+1", when we record the file:0, 
    //                   can not read it correctly.
    prog[prog_cnt][1] = pFsJpeg->file_array_in_page[ pFsJpeg->file_current_in_page ] + 1;
    
    ShowProgItemSel(prog_cnt, 1);
    //printf("### ---SELECT index:%d--\n",prog_cnt);
}

void prog_func_off()
{
    
    index_x = 0;
    AVD_ResetMediaStatus();
    osd_init_mainmenu();
    printf("#### prog_func_off--prog_cnt:%d------\n",prog_cnt);
	if (full_scrn & SETUP)
	{    
	    menu_level = 1;
	    menu_page = PLAYMODEPAGE;
	    HL_menu = SUB_MENU;
	    index_y1 = PROGRAMITEM;
	    //printf("#### heheheheheheh ----SHOWMENUPAGE");
	    ShowMenuPage(PLAYMODEPAGE, menu_level-1, PROGRAMITEM);
    }
    else
    {
        full_scrn = 0;
        prog_index = 1;
        
        if (!prog_cnt)
        {    
            ircmd_play();
            return;
        }
        
        if(cd_type_loaded == CDROM)
        {       
            FSGUI_Return2Menu();
            //pFsJpeg->gifsState = FS_STATE_MP3;
            //pFsJpeg->fsnav_dir_now = prog[prog_index][0]; 
            play_state = VCD_STATE_MP3_FILELIST;
                
            //only for test
            int i = 0;
            for(i = 0; i<= prog_cnt; i++) 
            {
                printf("prog_item[%d][0]:%d--\n",i, prog[i][0]);    
                printf("prog_item[%d][1]:%d--\n",i, prog[i][1]);    
            }
            ircmd_post_func(CMD_FUNC | CMD_FUNC_PRG); 
            printf("Before exit pFsJpeg->fsnav_dir_now-%d-222,prog_index:%d,pFsJpeg->gifsFuncBtn :%d\n",pFsJpeg->fsnav_dir_now,prog_index,pFsJpeg->gifsFuncBtn );  
            
        }
        else if (cd_type_loaded == CDDVD)
        {
            dvd_title = 0;
            if (prog_cnt)
                ircmd_post_func(CMD_FUNC|CMD_FUNC_PRG);
            
             
        }
        else if (cd_type_loaded == CDDA)
        {
            //because in v11.c use prog[prog_index][0]record prog item
            //while I use prog[prog_index][1],so must copy prog[prog_index][1] --> prog[prog_index][0]
            //zhaoyanhua 2004-5-25 10:29
            if (prog_cnt)
            {    
                int i = 0;
            
                for (i = 1; i <= prog_cnt; i++)
                    prog[i][0] = prog[i][1] - 1;//because in select(), prog[prog_cnt][1] = pFsJpeg->file_array_in_page[ pFsJpeg->file_current_in_page ] + 1;
                
                cd_trk_now = 1;
                ircmd_post_func(CMD_FUNC|CMD_FUNC_PRG);
            }
            
            
        }
    }
}

/*
 * Function name: prog_ShowOnePage()
 *    
 * Description:
 *    Show one page for prog GUI 
 * 
 * INPUT:
 *  itemStart itemEnd
 *   1      ~  10      first page 
 *  11      ~  20     second page
 *
 */
void prog_ShowOnePage(int itemStart, int itemEnd)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -