/* this function gets called by the gui to update mplayer */ static void guiSetEvent(int event) { if(guiInfo.mpcontext) mixer = mpctx_get_mixer(guiInfo.mpcontext); switch(event) { case evPlay: case evPlaySwitchToPause: case evPauseSwitchToPlay: uiPlay(); break; case evPause: uiPause(); break; #ifdef CONFIG_DVDREAD case evPlayDVD: { static char dvdname[MAX_PATH]; guiInfo.Track = 1; guiInfo.Chapter = 1; guiInfo.Angle = 1; guiInfo.NewPlay = GUI_FILE_SAME; #ifdef __WINE__ // dvd_device is in the Windows style (D:\), which needs to be // converted for MPlayer, so that it will find the device in the // Linux filesystem. dvd_device = unix_device(dvd_device); #endif uiSetFileName(NULL, dvd_device, STREAMTYPE_DVD); dvdname[0] = 0; strcat(dvdname, "DVD Movie"); GetVolumeInformation(dvd_device, dvdname, MAX_PATH, NULL, NULL, NULL, NULL, 0); capitalize(dvdname); mp_msg(MSGT_GPLAYER, MSGL_V, "Opening DVD %s -> %s\n", dvd_device, dvdname); mygui->playlist->clear_playlist(mygui->playlist); mygui->playlist->add_track(mygui->playlist, filename, NULL, dvdname, 0); uiPlay(); break; } #endif #ifdef CONFIG_CDDA case evPlayCD: { int i; char track[10]; char trackname[10]; #ifdef CONFIG_LIBCDIO cdrom_drive_t *cd; #else cdrom_drive *cd; #endif int i_tracks; #ifdef __WINE__ // cdrom_device is in the Windows style (D:\), which needs to be // converted for MPlayer, so that it will find the device in the // Linux filesystem. cdrom_device = unix_device(cdrom_device); #endif cd = cdda_identify(cdrom_device, 0, NULL); if (cd) { if (cdda_open(cd) != 0) { cdda_close(cd); cd = NULL; } } if(!cd) { printf("Couldn't find a driver.\n"); break; } i_tracks = cdda_tracks(cd); mygui->playlist->clear_playlist(mygui->playlist); for(i=0;i<i_tracks;i++) { sprintf(track, "cdda://%d", i+1); sprintf(trackname, "Track %d", i+1); mygui->playlist->add_track(mygui->playlist, track, NULL, trackname, 0); } cdda_close(cd); mygui->startplay(mygui); break; } #endif case evFullScreen: mp_input_queue_cmd(mp_input_parse_cmd("vo_fullscreen")); break; case evExit: { /* We are asking mplayer to exit, later it will ask us after uninit is made this should be the only safe way to quit */ mygui->activewidget = NULL; mp_input_queue_cmd(mp_input_parse_cmd("quit")); break; } case evStop: if(guiInfo.Playing) gui(GUI_SET_STATE, (void *) GUI_STOP); break; case evSetMoviePosition: { rel_seek_secs = guiInfo.Position / 100.0f; abs_seek_pos = 3; break; } case evForward10sec: { rel_seek_secs = 10.0f; abs_seek_pos = 0; break; } case evBackward10sec: { rel_seek_secs = -10.0f; abs_seek_pos = 0; break; } case evSetBalance: case evSetVolume: { float l,r; if (guiInfo.Playing == GUI_STOP) break; if (guiInfo.Balance == 50.0f) mixer_setvolume(mixer, guiInfo.Volume, guiInfo.Volume); l = guiInfo.Volume * ((100.0f - guiInfo.Balance) / 50.0f); r = guiInfo.Volume * ((guiInfo.Balance) / 50.0f); if (l > guiInfo.Volume) l=guiInfo.Volume; if (r > guiInfo.Volume) r=guiInfo.Volume; mixer_setvolume(mixer, l, r); /* Check for balance support on mixer - there is a better way ?? */ if (r != l) { mixer_getvolume(mixer, &l, &r); if (r == l) { mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] Mixer doesn't support balanced audio\n"); mixer_setvolume(mixer, guiInfo.Volume, guiInfo.Volume); guiInfo.Balance = 50.0f; } } break; } case evMute: { mp_cmd_t * cmd = calloc(1, sizeof(*cmd)); cmd->id=MP_CMD_MUTE; cmd->name=strdup("mute"); mp_input_queue_cmd(cmd); break; } case evLoadPlay: { switch(guiInfo.StreamType) { case STREAMTYPE_DVD: { guiInfo.NewPlay = GUI_FILE_SAME; gui(GUI_SET_STATE, (void *) GUI_PLAY); break; } default: { guiInfo.NewPlay = GUI_FILE_NEW; update_playlistwindow(); uiGotoTheNext = guiInfo.Playing? 0 : 1; gui(GUI_SET_STATE, (void *) GUI_STOP); gui(GUI_SET_STATE, (void *) GUI_PLAY); break; } } break; } case evNext: uiNext(); break; case evPrev: uiPrev(); break; } }
static LRESULT CALLBACK OpenUrlWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { static HWND url; HWND wdg; FILE *f; char *history = get_path("gui.url"); gui_t *gui = (gui_t *) GetWindowLongPtr(hwnd, GWLP_USERDATA); switch (iMsg) { case WM_CREATE: wdg = CreateWindow("button", "Ok", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 4, 43, 80, 25, hwnd, (HMENU) ID_OK, ((LPCREATESTRUCT) lParam) -> hInstance, NULL); SendMessage(wdg, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0); wdg = CreateWindow("button", "Cancel", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 90, 43, 80, 25, hwnd, (HMENU) ID_CANCEL, ((LPCREATESTRUCT) lParam) -> hInstance, NULL); SendMessage(wdg, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0); url = wdg = CreateWindowEx(WS_EX_CLIENTEDGE, "edit", NULL, WS_CHILD | WS_VISIBLE | ES_LEFT | ES_AUTOHSCROLL, 4, 10, 300, 25, hwnd, (HMENU) ID_URL, ((LPCREATESTRUCT) lParam) -> hInstance, NULL); SendMessage(wdg, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0); SendMessage(wdg, EM_SETLIMITTEXT, MAX_PATH, 0); /*subclass the edit box to capture the VK_RETURN key*/ OldUrlWndProc = (WNDPROC)SetWindowLongPtr(url, GWLP_WNDPROC, (LONG_PTR)SubUrlWndProc); if((f = fopen(history, "r"))) { char lasturl[MAX_PATH]; fgets(lasturl, MAX_PATH, f); SendMessage(url, WM_SETTEXT, 0, (LPARAM) lasturl); SendMessage(url, EM_SETSEL, 0, -1); fclose(f); } break; case WM_KEYDOWN: switch (LOWORD(wParam)) { case VK_RETURN: SendMessage(hwnd, WM_COMMAND, (WPARAM) ID_OK, 0); break; } case WM_COMMAND: { switch (LOWORD(wParam)) { case ID_CANCEL: DestroyWindow(hwnd); return 0; case ID_OK: { char file[MAX_PATH]; SendMessage(url, WM_GETTEXT, MAX_PATH, (LPARAM) file); mplSetFileName(NULL, file, STREAMTYPE_STREAM); if((f = fopen(history, "wt+"))) { fprintf(f, file); fclose(f); } if(!parse_filename(file, playtree, mconfig, addurl? 0 : 1)) gui->playlist->add_track(gui->playlist, file, NULL, NULL, 0); if(!addurl) gui->startplay(gui); else update_playlistwindow(); DestroyWindow(hwnd); } break; } } return 0; case WM_DESTROY: { addurl = 0; return 0; } } return DefWindowProc(hwnd, iMsg, wParam, lParam); }