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

📄 libhandler.c

📁 神龙卡开发原代码
💻 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 + -