📄 libhandler.c
字号:
/* * C Source file for the library setup * Copyright (c) Sigma Designs 2002. All Rights Reserved. */#include "OsdWindow.h"#include "libhandler.h"void DrawLibText(OSD_WINDOW *wPtr){ //ShowJpeg("img/lib/libbackground.jpg"); OsdDrawPictureEx(wPtr,20,5,320,70,libItem[curSel].imgText); }////void EmptyListKeydownHandler(OSD_WINDOW *wPtr,DATA_POINTER data){ GR_EVENT *event; FileList_Info fli; event=wPtr->lastevent; switch(event->keystroke.ch) { // Up case SHOW_RIGHT_KEYDOWN: case SHOW_LEFT_KEYDOWN: if (createYN == 0) { createYN = 1; OsdDrawPictureEx(wPtr,DIR_MSG_XPOS,DIR_MSG_YPOS+40,87,23,"img/lib/yesoff.png"); OsdDrawPictureEx(wPtr,DIR_MSG_XPOS+100,DIR_MSG_YPOS+40,87,23,"img/lib/noon.png"); } else { createYN = 0; OsdDrawPictureEx(wPtr,DIR_MSG_XPOS,DIR_MSG_YPOS+40,87,23,"img/lib/yeson.png"); OsdDrawPictureEx(wPtr,DIR_MSG_XPOS+100,DIR_MSG_YPOS+40,87,23,"img/lib/nooff.png"); } break; case SHOW_ENTER_KEYDOWN: if (createYN == 1) //Don't want to create playlist MapLibHandler(wPtr, NULL); else { //create playlist fli.type = RAW_PLAYLIST_LIB; fli.n_files = n_mfiles; fli.fl = NULL; MapAVPHandler(wPtr, (DATA_POINTER)&fli); } break; case SHOW_POWER_KEYDOWN: case SHOW_OPEN_KEYDOWN: QuitMediaLib(wPtr); MapMainWindow(wPtr, (DATA_POINTER)GR_FALSE); OsdKbHandler(wPtr, NULL); break; }}//-----------------------------------// No media files found, wait for eject//voidNoMediaFilesKeydownHandler(OSD_WINDOW *wPtr,DATA_POINTER data){ GR_EVENT *event = wPtr->lastevent; switch(event->keystroke.ch) { case SHOW_POWER_KEYDOWN: case SHOW_OPEN_KEYDOWN: QuitMediaLib(wPtr); MapMainWindow(wPtr, (DATA_POINTER)GR_FALSE); OsdKbHandler(wPtr, NULL); break; } }void ViewPlaylist(OSD_WINDOW *wPtr){ int i; if (plfl) { free(plfl); plfl = NULL; } for (i=0, plcnt=0; i < n_mfiles; i++) { if (mfl[i]->selected) { plfl = (int *) realloc(plfl, (plcnt+1)*sizeof(int)); plfl[plcnt++] = i; } } if (plcnt == 0) { //display empty list GrClearWindow(wPtr->wid, GR_TRUE); DrawLibText(wPtr); CancelOsd(wPtr); GrText(wPtr->wid,wPtr->gc,DIR_MSG_XPOS,DIR_MSG_YPOS,"Playlist is empty!",-1,GR_TFASCII); GrText(wPtr->wid,wPtr->gc,DIR_MSG_XPOS,DIR_MSG_YPOS+24,"Do you want to create a new playlist?",-1,GR_TFASCII); //draw create image OsdDrawPictureEx(wPtr,DIR_MSG_XPOS,DIR_MSG_YPOS+40,87,23,"img/lib/yeson.png"); OsdDrawPictureEx(wPtr,DIR_MSG_XPOS+100,DIR_MSG_YPOS+40,87,23,"img/lib/nooff.png"); createYN = 0; wPtr->KbdHandler = EmptyListKeydownHandler; wPtr->KbdHandler_dptr = NULL; } else { FileList_Info fli; fli.type = PLAYLIST_LIB; fli.n_files = plcnt; fli.fl = plfl; MapAVPHandler(wPtr, (DATA_POINTER)&fli); }}void LibKeydownHandler(OSD_WINDOW *wPtr,DATA_POINTER ptr){ GR_EVENT *event; GR_KEY key; FileList_Info fli; unsigned int i, rk; event = wPtr->lastevent; key = event->keystroke.ch; if (key == SHOW_VOLUP_KEYDOWN || key == SHOW_VOLDOWN_KEYDOWN) { DrawVolBar(wPtr); return; } CancelVolume(wPtr); switch(key) { // Up case SHOW_UP_KEYDOWN: //OsdDrawPictureEx(wPtr,XOFF,libItem[curSel].y,IWIDTH,IHEIGHT,libItem[curSel].imgOff); GrDrawImageToFit(wPtr->wid,wPtr->gc,XOFF,libItem[curSel].y,IWIDTH,IHEIGHT,libItem[curSel].imgOffId); if (curSel == AUDIO_LIB) curSel = PLAYLIST_LIB; else curSel--; //OsdDrawPictureEx(wPtr,XOFF,libItem[curSel].y,IWIDTH,IHEIGHT,libItem[curSel].imgOn); GrDrawImageToFit(wPtr->wid,wPtr->gc,XOFF,libItem[curSel].y,IWIDTH,IHEIGHT,libItem[curSel].imgOnId); break; // Down case SHOW_DOWN_KEYDOWN: //OsdDrawPictureEx(wPtr,XOFF,libItem[curSel].y,IWIDTH,IHEIGHT,libItem[curSel].imgOff); GrDrawImageToFit(wPtr->wid,wPtr->gc,XOFF,libItem[curSel].y,IWIDTH,IHEIGHT,libItem[curSel].imgOffId); if (curSel == PLAYLIST_LIB) curSel = AUDIO_LIB; else curSel++; //OsdDrawPictureEx(wPtr,XOFF,libItem[curSel].y,IWIDTH,IHEIGHT,libItem[curSel].imgOn); GrDrawImageToFit(wPtr->wid,wPtr->gc,XOFF,libItem[curSel].y,IWIDTH,IHEIGHT,libItem[curSel].imgOnId); break; case SHOW_ENTER_KEYDOWN: switch (curSel) { case AUDIO_LIB: if (afl == NULL) { for (i=0; i<(unsigned int)n_mfiles; i++) { //GetExt(mfl[i]->name, ext); //if (!strcmp(ext, "MP3")) { if (mfl[i]->ftype == AUDIO_LIB) { afl = (int *) realloc(afl, (acnt+1)*sizeof(int)); afl[acnt++] = i; } } } fli.n_files = acnt; fli.fl = afl; goto MapAVPHandler_Label; case VIDEO_LIB: if (vfl == NULL) { for (i=0; i<(unsigned int)n_mfiles; i++) { //GetExt(mfl[i]->name, ext); //if (!strcmp(ext,"AVI") || !strcmp(ext,"MPG") || !strcmp(ext,"VOB")) { if (mfl[i]->ftype == VIDEO_LIB) { vfl = (int *) realloc(vfl, (vcnt+1)*sizeof(int)); vfl[vcnt++] = i; } } } fli.n_files = vcnt; fli.fl = vfl; goto MapAVPHandler_Label; case PHOTO_LIB: if (pfl == NULL) { for (i=0; i<(unsigned int)n_mfiles; i++) { //GetExt(mfl[i]->name, ext); //if (!strcmp(ext,"JPG")) { if (mfl[i]->ftype == PHOTO_LIB) { pfl = (int *) realloc(pfl, (pcnt+1)*sizeof(int)); pfl[pcnt++] = i; } } } fli.n_files = pcnt; fli.fl = pfl; MapAVPHandler_Label: fli.type = curSel; MapAVPHandler(wPtr, (DATA_POINTER)&fli); break; case PLAYLIST_LIB: ViewPlaylist(wPtr); break; } break; case SHOW_POWER_KEYDOWN: case SHOW_OPEN_KEYDOWN: QuitMediaLib(wPtr); MapMainWindow(wPtr, (DATA_POINTER)GR_TRUE); OsdKbHandler(wPtr, NULL); break; case SHOW_MUTE_KEYDOWN: DrawStickyOsd(wPtr, "img/mute.png"); return; case SHOW_MUTE_OFF: CancelStickyOsd(wPtr); return; default: rk = event->keystroke.ch; if (rk >= SHOW_MODE_480P_KEYDOWN && rk <= SHOW_SCART_PAL_KEYDOWN) DrawOsd(wPtr,osdTOImg[rk & 0xFF], OSD_RES_TIMEOUT); break; }}void MapLibHandler(OSD_WINDOW *wPtr, DATA_POINTER ptr){ int i; // Clear osd stuff CancelOsd(wPtr); CancelVolume(wPtr); GrClearWindow(wPtr->wid, GR_FALSE); OsdDrawPictureEx(wPtr,20,5,320,70,"img/lib/mediatext.png"); if (ptr != NULL) { GrText(wPtr->wid,wPtr->gc,DIR_MSG_XPOS,DIR_MSG_YPOS,"Reading CD. Please wait...",-1,GR_TFASCII); mfl = GetFiles("/cdrom",PLAYLIST_LIB,&n_mfiles); if (n_mfiles == 0) { GrFillRect(wPtr->wid,wPtr->gc_pal0,DIR_MSG_XPOS-10,DIR_MSG_YPOS-20,DIR_WIDTH,DIR_YOFF); GrText(wPtr->wid,wPtr->gc,DIR_MSG_XPOS,DIR_MSG_YPOS,"No media files found.",-1,GR_TFASCII); GrText(wPtr->wid,wPtr->gc,DIR_MSG_XPOS,DIR_MSG_YPOS+YOFF,"Please insert another disc.",-1,GR_TFASCII); //Wait for eject wPtr->KbdHandler = NoMediaFilesKeydownHandler; return; } qsort(mfl, n_mfiles, sizeof(FileRec *), (int (*)(const void *, const void *))comp); afl = vfl = pfl = plfl = NULL; acnt = vcnt = pcnt = plcnt = 0; for (i=0; i < 4; i++) { libItem[i].imgOffId = GrLoadImageFromFile(libItem[i].imgOff,0); libItem[i].imgOnId = GrLoadImageFromFile(libItem[i].imgOn,0); GrDrawImageToFit(wPtr->wid,wPtr->gc,XOFF,libItem[i].y,IWIDTH,IHEIGHT,libItem[i].imgOffId); } GrDrawImageToFit(wPtr->wid,wPtr->gc,XOFF,libItem[0].y,IWIDTH,IHEIGHT,libItem[0].imgOnId); } curSel = 0; GrDrawImageToFit(wPtr->wid,wPtr->gc,XOFF,libItem[0].y,IWIDTH,IHEIGHT,libItem[0].imgOnId); for (i=1; i < 4; i++) { GrDrawImageToFit(wPtr->wid,wPtr->gc,XOFF,libItem[i].y,IWIDTH,IHEIGHT,libItem[i].imgOffId); } wPtr->KbdHandler = LibKeydownHandler; wPtr->KbdHandler_dptr = NULL; return;}voidQuitMediaLib(OSD_WINDOW *wPtr){ int i; //printf("free mfl, afl, vfl, pfl, plfl\n"); if (afl) free(afl); if (vfl) free(vfl); if (pfl) free(pfl); if (plfl) free(plfl); freeflist(mfl, n_mfiles); mfl = NULL; afl = vfl = pfl = plfl = NULL; n_mfiles = acnt = vcnt = pcnt = plcnt = 0; for (i=0; i<4; i++) { GrFreeImage(libItem[i].imgOnId); GrFreeImage(libItem[i].imgOffId); } return;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -