📄 utilhandler.c
字号:
GrText(wid,gc1,POPUP_HEADER_X,POPUP_HEADER_Y,"VCD Search",-1,GR_TFASCII); GrText(wid,gc1,POPUP_TEXT_X,POPUP_CHAPTER_Y,"Track:",-1,GR_TFASCII); break; case TIME_SEARCH: GrText(wid,gc1,POPUP_HEADER_X,POPUP_HEADER_Y,"Time Search",-1,GR_TFASCII); break; } GrText(wid,gc1,POPUP_TEXT_X,POPUP_TIME_Y,"Time:",-1,GR_TFASCII); GrText(wid,gc1,POPUP_DATA_X,POPUP_TIME_Y,HMSStr,-1,GR_TFASCII); GrText(wid,gc_pal244,POPUP_DATA_X,POPUP_TIME_Y,&HMSStr[7],1,GR_TFASCII); if (t == DVD_SEARCH) GrText(wid,gc1,POPUP_DATA_X,POPUP_CHAPTER_Y,TitleChapterStr,-1,GR_TFASCII); else if (t == VCD_SEARCH) GrText(wid,gc1,POPUP_DATA_X,POPUP_CHAPTER_Y,TrackStr,-1,GR_TFASCII); return;}//-------------------------// Special menu stuff//#define SPMENU_TEXT_X (POPUP_TEXT_X)#define SPMENU_DATA_X (POPUP_X+240)#define SPMENU_HEADER_Y (POPUP_Y+30)#define SPMENU_LINE1_Y (POPUP_Y+75)#define SPMENU_LINE2_Y (POPUP_Y+100)#define SPMENU_LINE3_Y (POPUP_Y+135)#define SPMENU_LINE4_Y (POPUP_Y+160)#define SPMENU_LINE5_Y (POPUP_Y+190)static char regionChar;int mcrovision, regionCode;voidSpecialMenuKeydownHandler(OSD_WINDOW *wPtr,DATA_POINTER ptr){ GR_EVENT *event = wPtr->lastevent; GR_GC_ID gc_pal64 = GrNewGC(); // png background is index 64 GrSetGCForeground(gc_pal64, MWPALINDEX(64)); GrSetGCBackground(gc_pal64, MWPALINDEX(0)); GrSetGCFont(gc_pal64, OSD_DEFAULT_FONT_NO); GrSetGCUseBackground(gc_pal64,GR_FALSE); switch (event->keystroke.ch) { case SHOW_LEFT_KEYDOWN: if (curY == SPMENU_LINE2_Y) { curX = POPUP_TEXT_X+(regionChar-'0')*30; GrText(wid,gc1,curX,curY,®ionChar,1,GR_TFASCII); GrText(wid,gc_pal64,POPUP_TEXT_X+240,SPMENU_LINE1_Y,®ionChar,1,GR_TFASCII); if (regionChar == '0') regionChar = '6'; else regionChar--; curX = POPUP_TEXT_X+(regionChar-'0')*30; GrText(wid,gc_pal244,curX,curY,®ionChar,1,GR_TFASCII); GrText(wid,gc1,POPUP_TEXT_X+240,SPMENU_LINE1_Y,®ionChar,1,GR_TFASCII); } else { DrawMcvision: if (mcrovision) { mcrovision = GR_FALSE; GrText(wid,gc1,POPUP_TEXT_X,curY,"Yes",3,GR_TFASCII); GrText(wid,gc_pal244,POPUP_TEXT_X+60,curY,"No",2,GR_TFASCII); GrText(wid,gc_pal64,POPUP_TEXT_X+240,SPMENU_LINE3_Y,"Yes",3,GR_TFASCII); GrText(wid,gc1,POPUP_TEXT_X+240,SPMENU_LINE3_Y,"No",2,GR_TFASCII); } else { mcrovision = GR_TRUE; GrText(wid,gc1,POPUP_TEXT_X+60,curY,"No",2,GR_TFASCII); GrText(wid,gc_pal244,POPUP_TEXT_X,curY,"Yes",3,GR_TFASCII); GrText(wid,gc_pal64,POPUP_TEXT_X+240,SPMENU_LINE3_Y,"No",2,GR_TFASCII); GrText(wid,gc1,POPUP_TEXT_X+240,SPMENU_LINE3_Y,"Yes",3,GR_TFASCII); } } break; case SHOW_RIGHT_KEYDOWN: if (curY == SPMENU_LINE2_Y) { curX = POPUP_TEXT_X+(regionChar-'0')*30; GrText(wid,gc1,curX,curY,®ionChar,1,GR_TFASCII); GrText(wid,gc_pal64,POPUP_TEXT_X+240,SPMENU_LINE1_Y,®ionChar,1,GR_TFASCII); if (regionChar == '6') regionChar = '0'; else regionChar++; curX = POPUP_TEXT_X+(regionChar-'0')*30; GrText(wid,gc_pal244,curX,curY,®ionChar,1,GR_TFASCII); GrText(wid,gc1,POPUP_TEXT_X+240,SPMENU_LINE1_Y,®ionChar,1,GR_TFASCII); } else goto DrawMcvision; break; case SHOW_UP_KEYDOWN: case SHOW_DOWN_KEYDOWN: if (curY == SPMENU_LINE2_Y) { curX = POPUP_TEXT_X+(regionChar-'0')*30; GrText(wid,gc1,curX,curY,®ionChar,1,GR_TFASCII); curY = SPMENU_LINE4_Y; if (mcrovision) GrText(wid,gc_pal244,POPUP_TEXT_X,curY,"Yes",3,GR_TFASCII); else GrText(wid,gc_pal244,POPUP_TEXT_X+60,curY,"No",2,GR_TFASCII); } else { if (mcrovision) GrText(wid,gc1,POPUP_TEXT_X,curY,"Yes",3,GR_TFASCII); else GrText(wid,gc1,POPUP_TEXT_X+60,curY,"No",2,GR_TFASCII); curY = SPMENU_LINE2_Y; curX = POPUP_TEXT_X+(regionChar-'0')*30; GrText(wid,gc_pal244,curX,curY,®ionChar,1,GR_TFASCII); } break; case SHOW_ENTER_KEYDOWN: case SHOW_RETURN_KEYDOWN: regionCode = regionChar - 0x30; SaveSettings(wPtr); //printf("...region=%d, mcvision=%d\n",regionCode,mcrovision); //break; case SHOW_SPECIAL_MENU_KEYDOWN: case SHOW_POWER_KEYDOWN: case SHOW_OPEN_KEYDOWN: RestorePopupRect(wPtr); MapMainWindow(wPtr, (DATA_POINTER)GR_TRUE); break; } GrDestroyGC(gc_pal64); return;}void MapSpecialMenuHandler(OSD_WINDOW *wPtr, DATA_POINTER ptr){ gc1 = wPtr->gc; gc_pal0 = wPtr->gc_pal0; gc_pal6 = wPtr->gc_pal6; gc_pal244 = wPtr->gc_pal244; wid = wPtr->wid; wPtr->KbdHandler = SpecialMenuKeydownHandler; wPtr->KbdHandler_dptr = ptr; // region and macrovision values set at boot time regionChar = regionCode + 0x30; curY = SPMENU_LINE2_Y; SavePopupRect(wPtr); OsdDrawPictureEx(wPtr, POPUP_X, POPUP_Y, POPUP_W, POPUP_H,"img/popup.png"); GrText(wid,gc1,POPUP_TEXT_X,SPMENU_HEADER_Y,"Special Menu",-1,GR_TFASCII); GrText(wid,gc1,POPUP_TEXT_X,SPMENU_LINE1_Y,"Region Setting:",-1,GR_TFASCII); GrText(wid,gc1,POPUP_TEXT_X,SPMENU_LINE3_Y,"Macrovision Enabled:",-1,GR_TFASCII); GrText(wid,gc1,POPUP_TEXT_X,SPMENU_LINE5_Y,"~~ Press Enter to set",-1,GR_TFASCII); GrText(wid,gc1,POPUP_TEXT_X,SPMENU_LINE2_Y,"0",1,GR_TFASCII); GrText(wid,gc1,POPUP_TEXT_X+30,SPMENU_LINE2_Y,"1",1,GR_TFASCII); GrText(wid,gc1,POPUP_TEXT_X+60,SPMENU_LINE2_Y,"2",1,GR_TFASCII); GrText(wid,gc1,POPUP_TEXT_X+90,SPMENU_LINE2_Y,"3",1,GR_TFASCII); GrText(wid,gc1,POPUP_TEXT_X+120,SPMENU_LINE2_Y,"4",1,GR_TFASCII); GrText(wid,gc1,POPUP_TEXT_X+150,SPMENU_LINE2_Y,"5",1,GR_TFASCII); GrText(wid,gc1,POPUP_TEXT_X+180,SPMENU_LINE2_Y,"6",1,GR_TFASCII); GrText(wid,gc1,POPUP_TEXT_X,SPMENU_LINE4_Y,"Yes",3,GR_TFASCII); GrText(wid,gc1,POPUP_TEXT_X+60,SPMENU_LINE4_Y,"No",2,GR_TFASCII); GrText(wid,gc_pal244,POPUP_TEXT_X+(regionCode*30),SPMENU_LINE2_Y,®ionChar,1,GR_TFASCII); GrText(wid,gc1,POPUP_TEXT_X+240,SPMENU_LINE1_Y,®ionChar,1,GR_TFASCII); if (mcrovision) GrText(wid,gc1,POPUP_TEXT_X+240,SPMENU_LINE3_Y,"Yes",3,GR_TFASCII); else GrText(wid,gc1,POPUP_TEXT_X+240,SPMENU_LINE3_Y,"No",2,GR_TFASCII);}//-------------------// Password stuff//#define PSWD_INDEX 3 // see iniSub1[]#define POPUP_DATA_X_PWD (POPUP_DATA_X+20)voidOkCancelKeydownHandler(OSD_WINDOW *wPtr,DATA_POINTER ptr){ GR_EVENT *event; int scrn = (int)ptr; //GrSetFontSize(OSD_DEFAULT_FONT_NO, 18); event = wPtr->lastevent; switch (event->keystroke.ch) { case SHOW_POWER_KEYDOWN: case SHOW_OPEN_KEYDOWN: case SHOW_RETURN_KEYDOWN: case SHOW_ENTER_KEYDOWN: if (scrn == 1) { // In Player Setup screen? RestorePopupRect(wPtr); MapSub1Handler(wPtr, NULL, 0); } else { MapMainWindow(wPtr, (DATA_POINTER) GR_TRUE); CheckPassword(0); } break; case SHOW_SETUP_KEYDOWN: if (scrn == 1) { SaveSettings(wPtr); RestorePopupRect(wPtr); MapMainWindow(wPtr, (DATA_POINTER) GR_TRUE); } //else { // MapMainWindow(wPtr, (DATA_POINTER) GR_TRUE); //} break; } return;}static void DrawPwdMasks(char key){ GR_GC_ID gc_pal64 = GrNewGC(); // png background is index 64 GrSetGCForeground(gc_pal64, MWPALINDEX(64)); GrSetGCBackground(gc_pal64, MWPALINDEX(0)); GrSetGCFont(gc_pal64, OSD_DEFAULT_FONT_NO); GrSetGCUseBackground(gc_pal64,GR_FALSE); GrText(wid,gc_pal64,POPUP_DATA_X_PWD+(curId*PWD_DIGIT_WIDTH),curY,&pwdStr.mask[curRow][curId],1,GR_TFASCII); pwdStr.mask[curRow][curId] = '*'; pwdStr.pwd[curRow][curId] = key; GrText(wid,gc1,POPUP_DATA_X_PWD+(curId*PWD_DIGIT_WIDTH),curY,&pwdStr.mask[curRow][curId],1,GR_TFASCII); if (curId < curIdMax) curId++; GrText(wid,gc_pal244,POPUP_DATA_X_PWD+(curId*PWD_DIGIT_WIDTH),curY,&pwdStr.mask[curRow][curId],1,GR_TFASCII); GrDestroyGC(gc_pal64); return;}voidPwdChkKeydownHandler(OSD_WINDOW *wPtr,DATA_POINTER ptr){ GR_EVENT *event; int pwdEnter; event=wPtr->lastevent; switch (event->keystroke.ch) { case SHOW_CANCEL_KEYDOWN: { int i; GR_GC_ID gc_pal64 = GrNewGC(); GrSetGCForeground(gc_pal64, MWPALINDEX(64)); GrSetGCBackground(gc_pal64, MWPALINDEX(0)); GrSetGCFont(gc_pal64, OSD_DEFAULT_FONT_NO); GrSetGCUseBackground(gc_pal64,GR_FALSE); //Clear current text string to background for (i=0; i<4; i++) GrText(wid,gc_pal64,POPUP_DATA_X_PWD+(i*PWD_DIGIT_WIDTH),curY,&pwdStr.mask[0][i],1,GR_TFASCII); curId = 0; curIdMax = 3; pwdStr.mask[0][0] = pwdStr.mask[0][1] = pwdStr.mask[0][2] = pwdStr.mask[0][3] = '#'; GrText(wid,gc_pal244,POPUP_DATA_X_PWD,curY,&pwdStr.mask[0][0],1,GR_TFASCII); for (i=1; i<4; i++) GrText(wid,gc1,POPUP_DATA_X_PWD+(i*PWD_DIGIT_WIDTH),curY,&pwdStr.mask[0][i],1,GR_TFASCII); GrDestroyGC(gc_pal64); } break; case SHOW_RETURN_KEYDOWN: RestorePopupRect(wPtr); if (ptr) { MapSub1Handler(wPtr, NULL, 0); } break; case SHOW_ZERO_KEYDOWN: DrawPwdMasks(0x30); break; case SHOW_ONE_KEYDOWN: DrawPwdMasks(0x31); break; case SHOW_TWO_KEYDOWN: DrawPwdMasks(0x32); break; case SHOW_THREE_KEYDOWN: DrawPwdMasks(0x33); break; case SHOW_FOUR_KEYDOWN: DrawPwdMasks(0x34); break; case SHOW_FIVE_KEYDOWN: DrawPwdMasks(0x35); break; case SHOW_SIX_KEYDOWN: DrawPwdMasks(0x36); break; case SHOW_SEVEN_KEYDOWN: DrawPwdMasks(0x37); break; case SHOW_EIGHT_KEYDOWN: DrawPwdMasks(0x38); break; case SHOW_NINE_KEYDOWN: DrawPwdMasks(0x39); break; case SHOW_ENTER_KEYDOWN: //GrSetFontSize(OSD_DEFAULT_FONT_NO, 18); if (pwdStr.pwd[0][0] == '@' || pwdStr.pwd[0][1] == '@' || pwdStr.pwd[0][2] == '@' || pwdStr.pwd[0][3] == '@') goto PwdChk_Incorrect; pwdEnter = (pwdStr.pwd[0][0] - 0x30)*1000 + (pwdStr.pwd[0][1] - 0x30)*100 + (pwdStr.pwd[0][2] - 0x30)*10 + (pwdStr.pwd[0][3] - 0x30); //printf("Password entered:%d, Stored pwd=%d\n", pwdEnter,pwd); if (ptr == NULL) { if (pwdEnter == pwd) { //GrSetFontSize(OSD_DEFAULT_FONT_NO, 18); MapMainWindow(wPtr, (DATA_POINTER)GR_TRUE); CheckPassword(1); return; } } else { selTagPtr pa = ptr; if (pwdEnter == pwd) { *pa->selected = pa->sub2Sel; RestorePopupRect(wPtr); MapSub1Handler(wPtr, NULL, 0); return; } } PwdChk_Incorrect: OsdDrawPictureEx(wPtr, POPUP_X, POPUP_Y, POPUP_W, POPUP_H, "img/popup.png"); GrText(wid,gc1,POPUP_HEADER_X,POPUP_HEADER_Y,"Password Entry",-1,GR_TFASCII); GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE3_Y,"Password is incorrect!",-1,GR_TFASCII); wPtr->KbdHandler = OkCancelKeydownHandler; if (ptr == NULL) wPtr->KbdHandler_dptr = (DATA_POINTER) 2; else wPtr->KbdHandler_dptr = (DATA_POINTER) 1; break; case SHOW_POWER_KEYDOWN: case SHOW_OPEN_KEYDOWN: case SHOW_SETUP_KEYDOWN: RestorePopupRect(wPtr); if (ptr) { //Save all parameters SaveSettings(wPtr); //GrSetFontSize(OSD_DEFAULT_FONT_NO, 18); MapMainWindow(wPtr, (DATA_POINTER)GR_TRUE); } break; } return;}//-----------------------------------------------// Check password during setup and DVD playback//void MapPwdChkHandler(OSD_WINDOW *wPtr, DATA_POINTER ptr){ int i; static selTag a; selTagPtr pa; gc1 = wPtr->gc; gc_pal0 = wPtr->gc_pal0; gc_pal6 = wPtr->gc_pal6; gc_pal244 = wPtr->gc_pal244; wid = wPtr->wid; wPtr->KbdHandler = PwdChkKeydownHandler; wPtr->KbdHandler_dptr = ptr; //Retrieve pswd pwd = iniSub1[PSWD_INDEX].selected; //Init strings pwdStr.mask[0][0] = pwdStr.mask[0][1] = pwdStr.mask[0][2] = pwdStr.mask[0][3] = '#'; pwdStr.pwd[0][0] = pwdStr.pwd[0][1] = pwdStr.pwd[0][2] = pwdStr.pwd[0][3] = '@'; curId = curRow = 0; curIdMax = 3; curY = POPUP_LINE2_Y; SavePopupRect(wPtr); wPtr->KbdHandler_dptr = ptr; if (ptr) { pa = (selTagPtr) ptr; a.selected = pa->selected; a.sub2Sel = pa->sub2Sel; wPtr->KbdHandler_dptr = (DATA_POINTER) &a; } OsdDrawPictureEx(wPtr, POPUP_X, POPUP_Y, POPUP_W, POPUP_H, "img/popup.png"); GrText(wid,gc1,POPUP_HEADER_X,POPUP_HEADER_Y,"Password Entry",-1,GR_TFASCII); GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE2_Y,"Password:",-1,GR_TFASCII); GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE4_Y+10,"Press Enter to set, Return to quit",-1,GR_TFASCII); GrText(wid,gc1,POPUP_TEXT_X,POPUP_LINE5_Y+10,"or Cancel to re-enter.",-1,GR_TFASCII); //GrSetFontSize(OSD_DEFAULT_FONT_NO, 25); GrText(wid,gc_pal244,POPUP_DATA_X_PWD,curY,&pwdStr.mask[0][0],1,GR_TFASCII); for (i=1; i<4; i++) GrText(wid,gc1,POPUP_DATA_X_PWD+(i*PWD_DIGIT_WIDTH),POPUP_LINE2_Y,&pwdStr.mask[0][i],1,GR_TFASCII); return;}voidPwdSetKeydownHandler(OSD_WINDOW *wPtr,DATA_POINTER ptr){ GR_EVENT *event; event=wPtr->lastevent; switch (event->keystroke.ch) { case SHOW_UP_KEYDOWN: if (curY != POPUP_LINE1_Y) { GrText(wid,gc1,POPUP_DATA_X_PWD+(curId*PWD_DIGIT_WIDTH),curY,&pwdStr.mask[curRow][curId],1,GR_TFASCII); curY -= POPUP_LINE_Y_INC; curId = 0; curRow--; GrText(wid,gc_pal244,POPUP_DATA_X_PWD,curY,&pwdStr.mask[curRow][0],1,GR_TFASCII); } break; case SHOW_DOWN_KEYDOWN: if (curY != curYMax) { GrText(wid,gc1,POPUP_DATA_X_PWD+(curId*PWD_DIGIT_WIDTH),curY,&pwdStr.mask[curRow][curId],1,GR_TFASCII); curY += POPUP_LINE_Y_INC; curId = 0; curRow++; GrText(wid,gc_pal244,POPUP_DATA_X_PWD,curY,&pwdStr.mask[curRow][0],1,GR_TFASCII); } break; case SHOW_CANCEL_KEYDOWN: { int i; GR_GC_ID gc_pal64 = GrNewGC(); GrSetGCForeground(gc_pal64, MWPALINDEX(64)); GrSetGCBackground(gc_pal64, MWPALINDEX(0)); GrSetGCFont(gc_pal64, OSD_DEFAULT_FONT_NO); GrSetGCUseBackground(gc_pal64,GR_FALSE); //Clear current text string to background for (i=0; i<4; i++) GrText(wid,gc_pal64,POPUP_DATA_X_PWD+(i*PWD_DIGIT_WIDTH),curY,&pwdStr.mask[curRow][i],1,GR_TFASCII); curId = 0; curIdMax = 3; pwdStr.mask[curRow][0] = pwdStr.mask[curRow][1] = pwdStr.mask[curRow][2] = pwdStr.mask[curRow][3] = '#'; GrText(wid,gc_pal244,POPUP_DATA_X_PWD,curY,&pwdStr.mask[curRow][0],1,GR_TFASCII); for (i=1; i<4; i++) GrText(wid,gc1,POPUP_DATA_X_PWD+(i*PWD_DIGIT_WIDTH),curY,&pwdStr.mask[curRow][i],1,GR_TFASCII);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -