Mercurial > mplayer.hg
annotate gui/win32/interface.c @ 34064:54becc464788
Set MPlayer filename in uiSetFileName().
This ensures that filename always points to guiInfo.Filename (the GUI
filename).
If guiInit() is called without filename being set, leave it that way.
(This applies if the GUI should not start playing immediately.)
author | ib |
---|---|
date | Thu, 29 Sep 2011 13:26:32 +0000 |
parents | 19e2b5682587 |
children | 8a7056729022 |
rev | line source |
---|---|
23077 | 1 /* |
23079 | 2 * MPlayer GUI for Win32 |
3 * Copyright (C) 2003 Sascha Sommer <saschasommer@freenet.de> | |
4 * Copyright (C) 2006 Erik Augustson <erik_27can@yahoo.com> | |
5 * Copyright (C) 2006 Gianluigi Tiesi <sherpya@netfarm.it> | |
6 * | |
7 * This file is part of MPlayer. | |
8 * | |
9 * MPlayer is free software; you can redistribute it and/or modify | |
10 * it under the terms of the GNU General Public License as published by | |
11 * the Free Software Foundation; either version 2 of the License, or | |
12 * (at your option) any later version. | |
13 * | |
14 * MPlayer is distributed in the hope that it will be useful, | |
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 * GNU General Public License for more details. | |
18 * | |
26457 | 19 * You should have received a copy of the GNU General Public License along |
20 * with MPlayer; if not, write to the Free Software Foundation, Inc., | |
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
23079 | 22 */ |
23077 | 23 |
24 #include <windows.h> | |
33358 | 25 |
26 #if defined(__CYGWIN__) | |
27 #define _beginthreadex CreateThread | |
28 #else | |
29 #include <process.h> | |
30 #endif | |
31 | |
30901 | 32 #include "path.h" |
26372
76413880bfad
Update include paths to account for build system changes.
diego
parents:
26193
diff
changeset
|
33 #include "gui/interface.h" |
23091
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
34 #include "m_option.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
35 #include "mixer.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
36 #include "mp_msg.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
37 #include "help_mp.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
38 #include "codec-cfg.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
39 #include "stream/stream.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
40 #include "libmpdemux/demuxer.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
41 #include "libmpdemux/stheader.h" |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26457
diff
changeset
|
42 #ifdef CONFIG_DVDREAD |
23091
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
43 #include "stream/stream_dvd.h" |
23077 | 44 #endif |
23091
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
45 #include "input/input.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
46 #include "libvo/video_out.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
47 #include "libao2/audio_out.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
48 #include "access_mpcontext.h" |
30558 | 49 #include "libmpcodecs/vd.h" |
31425
2392ad3cec9c
Move af_cfg extern variable declaration to dec_audio.h.
diego
parents:
31312
diff
changeset
|
50 #include "libmpcodecs/dec_audio.h" |
33761 | 51 #include "gui/ui/actions.h" |
33557 | 52 #include "gui/ui/gmplayer.h" |
33770 | 53 #include "gui/util/mem.h" |
33761 | 54 #include "gui/util/list.h" |
55 #include "gui/util/string.h" | |
30558 | 56 #include "mp_core.h" |
32093 | 57 #include "mpcommon.h" |
23077 | 58 #include "gui.h" |
59 #include "dialogs.h" | |
27391
1d2faa1020fb
Rename a bunch of miscellaneous preprocessor directives.
diego
parents:
27341
diff
changeset
|
60 #ifdef CONFIG_LIBCDIO |
23077 | 61 #include <cdio/cdio.h> |
62 #endif | |
63 | |
64 int guiWinID = 0; | |
65 | |
66 char *skinName = NULL; | |
67 char *codecname = NULL; | |
33555 | 68 int uiGotoTheNext = 1; |
23077 | 69 static gui_t *mygui = NULL; |
70 static int update_subwindow(void); | |
71 static RECT old_rect; | |
72 static DWORD style; | |
24992 | 73 static HANDLE hThread; |
74 static unsigned threadId; | |
25765
304fc0bbefe1
audio_out / video_out structs should be treated as const
reimar
parents:
24992
diff
changeset
|
75 const ao_functions_t *audio_out = NULL; |
304fc0bbefe1
audio_out / video_out structs should be treated as const
reimar
parents:
24992
diff
changeset
|
76 const vo_functions_t *video_out = NULL; |
23077 | 77 mixer_t *mixer = NULL; |
78 | |
79 /* test for playlist files, no need to specify -playlist on the commandline. | |
80 * add any conceivable playlist extensions here. | |
81 * - Erik | |
82 */ | |
83 int parse_filename(char *file, play_tree_t *playtree, m_config_t *mconfig, int clear) | |
84 { | |
85 if(clear) | |
86 mygui->playlist->clear_playlist(mygui->playlist); | |
87 | |
88 if(strstr(file, ".m3u") || strstr(file, ".pls")) | |
89 { | |
90 playtree = parse_playlist_file(file); | |
33752 | 91 guiPlaylistAdd(playtree, mconfig); |
23077 | 92 return 1; |
93 } | |
94 return 0; | |
95 } | |
96 | |
97 /* this function gets called by the gui to update mplayer */ | |
98 static void guiSetEvent(int event) | |
99 { | |
33555 | 100 if(guiInfo.mpcontext) |
101 mixer = mpctx_get_mixer(guiInfo.mpcontext); | |
23077 | 102 |
103 switch(event) | |
104 { | |
105 case evPlay: | |
106 case evPlaySwitchToPause: | |
23148
71efd1fc20c8
add missing case value, fixes functionality when using some skins.
vayne
parents:
23147
diff
changeset
|
107 case evPauseSwitchToPlay: |
33555 | 108 uiPlay(); |
23077 | 109 break; |
110 case evPause: | |
33555 | 111 uiPause(); |
23077 | 112 break; |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26457
diff
changeset
|
113 #ifdef CONFIG_DVDREAD |
23077 | 114 case evPlayDVD: |
115 { | |
116 static char dvdname[MAX_PATH]; | |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
117 guiInfo.Track = dvd_title; |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
118 guiInfo.Chapter = dvd_chapter; |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
119 guiInfo.Angle = dvd_angle; |
33890 | 120 guiInfo.NewPlay = GUI_FILE_SAME; |
23077 | 121 |
33555 | 122 uiSetFileName(NULL, dvd_device, STREAMTYPE_DVD); |
23077 | 123 dvdname[0] = 0; |
124 strcat(dvdname, "DVD Movie"); | |
125 GetVolumeInformation(dvd_device, dvdname, MAX_PATH, NULL, NULL, NULL, NULL, 0); | |
126 capitalize(dvdname); | |
127 mp_msg(MSGT_GPLAYER, MSGL_V, "Opening DVD %s -> %s\n", dvd_device, dvdname); | |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
128 gui(GUI_PREPARE, (void *) STREAMTYPE_DVD); |
23077 | 129 mygui->playlist->clear_playlist(mygui->playlist); |
130 mygui->playlist->add_track(mygui->playlist, filename, NULL, dvdname, 0); | |
131 mygui->startplay(mygui); | |
132 break; | |
133 } | |
134 #endif | |
27391
1d2faa1020fb
Rename a bunch of miscellaneous preprocessor directives.
diego
parents:
27341
diff
changeset
|
135 #ifdef CONFIG_LIBCDIO |
23077 | 136 case evPlayCD: |
137 { | |
138 int i; | |
139 char track[10]; | |
140 char trackname[10]; | |
141 CdIo_t *p_cdio = cdio_open(NULL, DRIVER_UNKNOWN); | |
142 track_t i_tracks; | |
143 | |
144 if(p_cdio == NULL) printf("Couldn't find a driver.\n"); | |
145 i_tracks = cdio_get_num_tracks(p_cdio); | |
146 | |
147 mygui->playlist->clear_playlist(mygui->playlist); | |
148 for(i=0;i<i_tracks;i++) | |
149 { | |
150 sprintf(track, "cdda://%d", i+1); | |
151 sprintf(trackname, "Track %d", i+1); | |
152 mygui->playlist->add_track(mygui->playlist, track, NULL, trackname, 0); | |
153 } | |
154 cdio_destroy(p_cdio); | |
155 mygui->startplay(mygui); | |
156 break; | |
157 } | |
158 #endif | |
159 case evFullScreen: | |
160 mp_input_queue_cmd(mp_input_parse_cmd("vo_fullscreen")); | |
161 break; | |
162 case evExit: | |
163 { | |
164 /* We are asking mplayer to exit, later it will ask us after uninit is made | |
165 this should be the only safe way to quit */ | |
166 mygui->activewidget = NULL; | |
167 mp_input_queue_cmd(mp_input_parse_cmd("quit")); | |
168 break; | |
169 } | |
170 case evStop: | |
33555 | 171 if(guiInfo.Playing) |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
172 gui(GUI_SET_STATE, (void *) GUI_STOP); |
23077 | 173 break; |
174 case evSetMoviePosition: | |
175 { | |
33555 | 176 rel_seek_secs = guiInfo.Position / 100.0f; |
23077 | 177 abs_seek_pos = 3; |
178 break; | |
179 } | |
180 case evForward10sec: | |
181 { | |
182 rel_seek_secs = 10.0f; | |
183 abs_seek_pos = 0; | |
184 break; | |
185 } | |
186 case evBackward10sec: | |
187 { | |
188 rel_seek_secs = -10.0f; | |
189 abs_seek_pos = 0; | |
190 break; | |
191 } | |
192 case evSetBalance: | |
193 case evSetVolume: | |
194 { | |
195 float l,r; | |
196 | |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
197 if (guiInfo.Playing == GUI_STOP) |
23077 | 198 break; |
199 | |
33555 | 200 if (guiInfo.Balance == 50.0f) |
201 mixer_setvolume(mixer, guiInfo.Volume, guiInfo.Volume); | |
23077 | 202 |
33555 | 203 l = guiInfo.Volume * ((100.0f - guiInfo.Balance) / 50.0f); |
204 r = guiInfo.Volume * ((guiInfo.Balance) / 50.0f); | |
23077 | 205 |
33555 | 206 if (l > guiInfo.Volume) l=guiInfo.Volume; |
207 if (r > guiInfo.Volume) r=guiInfo.Volume; | |
23077 | 208 mixer_setvolume(mixer, l, r); |
209 /* Check for balance support on mixer - there is a better way ?? */ | |
210 if (r != l) | |
211 { | |
212 mixer_getvolume(mixer, &l, &r); | |
213 if (r == l) | |
214 { | |
215 mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] Mixer doesn't support balanced audio\n"); | |
33555 | 216 mixer_setvolume(mixer, guiInfo.Volume, guiInfo.Volume); |
217 guiInfo.Balance = 50.0f; | |
23077 | 218 } |
219 } | |
220 break; | |
221 } | |
222 case evMute: | |
223 { | |
224 mp_cmd_t * cmd = calloc(1, sizeof(*cmd)); | |
225 cmd->id=MP_CMD_MUTE; | |
226 cmd->name=strdup("mute"); | |
227 mp_input_queue_cmd(cmd); | |
228 break; | |
229 } | |
230 case evDropFile: | |
231 case evLoadPlay: | |
232 { | |
33555 | 233 switch(guiInfo.StreamType) |
23077 | 234 { |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26457
diff
changeset
|
235 #ifdef CONFIG_DVDREAD |
23077 | 236 case STREAMTYPE_DVD: |
237 { | |
33890 | 238 guiInfo.NewPlay = GUI_FILE_SAME; |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
239 gui(GUI_SET_STATE, (void *) GUI_PLAY); |
23077 | 240 break; |
241 } | |
23147
21c35763b178
compilation fix for disabling dvd functionality, patch by <bangbangbear at gmail dot com>, slightly modified by me.
vayne
parents:
23123
diff
changeset
|
242 #endif |
23077 | 243 default: |
244 { | |
33890 | 245 guiInfo.NewPlay = GUI_FILE_NEW; |
23077 | 246 update_playlistwindow(); |
33555 | 247 uiGotoTheNext = guiInfo.Playing? 0 : 1; |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
248 gui(GUI_SET_STATE, (void *) GUI_STOP); |
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
249 gui(GUI_SET_STATE, (void *) GUI_PLAY); |
23077 | 250 break; |
251 } | |
252 } | |
253 break; | |
254 } | |
255 case evNext: | |
33555 | 256 uiNext(); |
23077 | 257 break; |
258 case evPrev: | |
33555 | 259 uiPrev(); |
23077 | 260 break; |
261 } | |
262 } | |
263 | |
33555 | 264 void uiPlay( void ) |
23077 | 265 { |
33555 | 266 if((!guiInfo.Filename ) || (guiInfo.Filename[0] == 0)) |
23077 | 267 return; |
268 | |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
269 if(guiInfo.Playing > GUI_STOP) |
23077 | 270 { |
33555 | 271 uiPause(); |
23077 | 272 return; |
273 } | |
33890 | 274 guiInfo.NewPlay = GUI_FILE_NEW; |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
275 gui(GUI_SET_STATE, (void *) GUI_PLAY); |
23077 | 276 } |
277 | |
33555 | 278 void uiPause( void ) |
23077 | 279 { |
33555 | 280 if(!guiInfo.Playing) return; |
23077 | 281 |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
282 if(guiInfo.Playing == GUI_PLAY) |
23077 | 283 { |
284 mp_cmd_t * cmd = calloc(1, sizeof(*cmd)); | |
285 cmd->id=MP_CMD_PAUSE; | |
286 cmd->name=strdup("pause"); | |
287 mp_input_queue_cmd(cmd); | |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
288 } else guiInfo.Playing = GUI_PLAY; |
23077 | 289 } |
290 | |
33555 | 291 void uiNext(void) |
23077 | 292 { |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
293 if(guiInfo.Playing == GUI_PAUSE) return; |
33555 | 294 switch(guiInfo.StreamType) |
23077 | 295 { |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26457
diff
changeset
|
296 #ifdef CONFIG_DVDREAD |
23077 | 297 case STREAMTYPE_DVD: |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
298 if(guiInfo.Chapter == (guiInfo.Chapters - 1)) |
23077 | 299 return; |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
300 guiInfo.Chapter++; |
23077 | 301 break; |
302 #endif | |
303 default: | |
304 if(mygui->playlist->current == (mygui->playlist->trackcount - 1)) | |
305 return; | |
33555 | 306 uiSetFileName(NULL, mygui->playlist->tracks[(mygui->playlist->current)++]->filename, |
23077 | 307 STREAMTYPE_STREAM); |
308 break; | |
309 } | |
310 mygui->startplay(mygui); | |
311 } | |
312 | |
33555 | 313 void uiPrev(void) |
23077 | 314 { |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
315 if(guiInfo.Playing == GUI_PAUSE) return; |
33555 | 316 switch(guiInfo.StreamType) |
23077 | 317 { |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26457
diff
changeset
|
318 #ifdef CONFIG_DVDREAD |
23077 | 319 case STREAMTYPE_DVD: |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
320 if(guiInfo.Chapter == 1) |
23077 | 321 return; |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
322 guiInfo.Chapter--; |
23077 | 323 break; |
324 #endif | |
325 default: | |
326 if(mygui->playlist->current == 0) | |
327 return; | |
33555 | 328 uiSetFileName(NULL, mygui->playlist->tracks[(mygui->playlist->current)--]->filename, |
23077 | 329 STREAMTYPE_STREAM); |
330 break; | |
331 } | |
332 mygui->startplay(mygui); | |
333 } | |
334 | |
33555 | 335 void uiSetFileName(char *dir, char *name, int type) |
23077 | 336 { |
337 if(!name) return; | |
338 if(!dir) | |
33740
2c02269701bd
Remove macros guiSetFilename() and guiSetDF() from interface.h.
ib
parents:
33737
diff
changeset
|
339 setdup(&guiInfo.Filename, name); |
23077 | 340 else |
33740
2c02269701bd
Remove macros guiSetFilename() and guiSetDF() from interface.h.
ib
parents:
33737
diff
changeset
|
341 setddup(&guiInfo.Filename, dir, name); |
23077 | 342 |
34064 | 343 filename = guiInfo.Filename; |
33555 | 344 guiInfo.StreamType = type; |
34064 | 345 |
33897 | 346 nfree(guiInfo.AudioFilename); |
347 nfree(guiInfo.SubtitleFilename); | |
23077 | 348 } |
349 | |
33555 | 350 void uiFullScreen( void ) |
23077 | 351 { |
33555 | 352 if(!guiInfo.sh_video) return; |
23077 | 353 |
354 if(sub_window) | |
355 { | |
356 if(!fullscreen && IsWindowVisible(mygui->subwindow) && !IsIconic(mygui->subwindow)) | |
357 GetWindowRect(mygui->subwindow, &old_rect); | |
358 | |
359 if(fullscreen) | |
360 { | |
361 fullscreen = 0; | |
362 style = WS_OVERLAPPEDWINDOW | WS_SIZEBOX; | |
363 } else { | |
364 fullscreen = 1; | |
365 style = WS_VISIBLE | WS_POPUP; | |
366 } | |
367 SetWindowLong(mygui->subwindow, GWL_STYLE, style); | |
368 update_subwindow(); | |
369 } | |
370 video_out->control(VOCTRL_FULLSCREEN, 0); | |
371 if(sub_window) ShowWindow(mygui->subwindow, SW_SHOW); | |
372 } | |
373 | |
24992 | 374 static unsigned __stdcall GuiThread(void* param) |
23077 | 375 { |
376 MSG msg; | |
377 | |
378 if(!skinName) skinName = strdup("Blue"); | |
33781 | 379 if(!mygui) mygui = create_gui(get_path("skins"), guiSetEvent); |
30558 | 380 if(!mygui) exit_player(EXIT_ERROR); |
23077 | 381 |
382 if(autosync && autosync != gtkAutoSync) | |
383 { | |
384 gtkAutoSyncOn = 1; | |
385 gtkAutoSync = autosync; | |
386 } | |
387 | |
24992 | 388 while(GetMessage(&msg, NULL, 0, 0)) |
23077 | 389 { |
390 TranslateMessage(&msg); | |
391 DispatchMessage(&msg); | |
392 } | |
23078 | 393 fprintf(stderr, "[GUI] GUI thread terminated.\n"); |
23077 | 394 fflush(stderr); |
395 return 0; | |
396 } | |
397 | |
398 void guiInit(void) | |
399 { | |
33555 | 400 memset(&guiInfo, 0, sizeof(guiInfo)); |
23077 | 401 /* Create The gui thread */ |
402 if (!mygui) | |
403 { | |
33358 | 404 hThread = _beginthreadex(NULL, 0, GuiThread, NULL, 0, &threadId); |
23077 | 405 mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] Creating GUI Thread 0x%04x\n", threadId); |
406 } | |
407 | |
408 /* Wait until the gui is created */ | |
409 while(!mygui) Sleep(100); | |
23078 | 410 mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] GUI thread started.\n"); |
23077 | 411 } |
412 | |
413 void guiDone(void) | |
414 { | |
415 if(mygui) | |
416 { | |
417 fprintf(stderr, "[GUI] Closed by main mplayer window\n"); | |
418 fflush(stderr); | |
24992 | 419 PostThreadMessage(threadId, WM_QUIT, 0, 0); |
420 WaitForSingleObject(hThread, INFINITE); | |
421 CloseHandle(hThread); | |
23077 | 422 mygui->uninit(mygui); |
33770 | 423 nfree(mygui); |
23077 | 424 } |
425 /* Remove tray icon */ | |
426 Shell_NotifyIcon(NIM_DELETE, &nid); | |
427 cfg_write(); | |
428 } | |
429 | |
430 /* this function gets called by mplayer to update the gui */ | |
33791
8b0c78a85a8c
Cosmetic: Change parameter names of gui() and mplayer().
ib
parents:
33781
diff
changeset
|
431 int gui(int what, void *data) |
23077 | 432 { |
33791
8b0c78a85a8c
Cosmetic: Change parameter names of gui() and mplayer().
ib
parents:
33781
diff
changeset
|
433 stream_t *stream = data; |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26457
diff
changeset
|
434 #ifdef CONFIG_DVDREAD |
33730 | 435 dvd_priv_t *dvdp; |
23077 | 436 #endif |
437 if(!mygui || !mygui->skin) return 0; | |
438 | |
33555 | 439 if(guiInfo.mpcontext) |
23077 | 440 { |
33555 | 441 audio_out = mpctx_get_audio_out(guiInfo.mpcontext); |
442 video_out = mpctx_get_video_out(guiInfo.mpcontext); | |
443 mixer = mpctx_get_mixer(guiInfo.mpcontext); | |
444 playtree = mpctx_get_playtree_iter(guiInfo.mpcontext); | |
23077 | 445 } |
446 | |
33726 | 447 switch (what) |
23077 | 448 { |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
449 case GUI_PREPARE: |
23077 | 450 { |
34052 | 451 audio_id = -1; |
452 video_id = -1; | |
453 dvdsub_id = -1; | |
454 vobsub_id = -1; | |
455 stream_cache_size = -1; | |
456 autosync = 0; | |
457 dvd_title = 0; | |
458 force_fps = 0; | |
459 if(!mygui->playlist->tracks) return 0; | |
34057 | 460 setdup(&guiInfo.Filename, mygui->playlist->tracks[mygui->playlist->current]->filename); |
34052 | 461 guiInfo.Track = mygui->playlist->current + 1; |
462 if(gtkAONorm) greplace(&af_cfg.list, "volnorm", "volnorm"); | |
463 if(gtkAOExtraStereo) | |
464 { | |
465 char *name = malloc(12 + 20 + 1); | |
466 snprintf(name, 12 + 20, "extrastereo=%f", gtkAOExtraStereoMul); | |
467 name[12 + 20] = 0; | |
468 greplace(&af_cfg.list, "extrastereo", name); | |
469 free(name); | |
470 } | |
471 if(gtkCacheOn) stream_cache_size = gtkCacheSize; | |
472 if(gtkAutoSyncOn) autosync = gtkAutoSync; | |
33555 | 473 guiInfo.NewPlay = 0; |
474 switch(guiInfo.StreamType) | |
23077 | 475 { |
476 case STREAMTYPE_PLAYLIST: | |
477 break; | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26457
diff
changeset
|
478 #ifdef CONFIG_DVDREAD |
23077 | 479 case STREAMTYPE_DVD: |
480 { | |
481 char tmp[512]; | |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
482 dvd_title = guiInfo.Track; |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
483 dvd_chapter = guiInfo.Chapter; |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
484 dvd_angle = guiInfo.Angle; |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
485 sprintf(tmp,"dvd://%d", guiInfo.Track); |
33740
2c02269701bd
Remove macros guiSetFilename() and guiSetDF() from interface.h.
ib
parents:
33737
diff
changeset
|
486 setdup(&guiInfo.Filename, tmp); |
23077 | 487 break; |
488 } | |
489 #endif | |
490 } | |
34057 | 491 filename = guiInfo.Filename; |
23077 | 492 break; |
493 } | |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
494 case GUI_SET_AUDIO: |
23077 | 495 { |
33901 | 496 guiInfo.VideoWindow = (data && !guiInfo.sh_video); |
33661 | 497 // NOTE: This type doesn't mean (and never meant) that we have |
498 // *just* audio, so there probably should be a check before | |
499 // hiding (see gui/interface.c). | |
23077 | 500 if(IsWindowVisible(mygui->subwindow)) |
501 ShowWindow(mygui->subwindow, SW_HIDE); | |
502 break; | |
503 } | |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
504 case GUI_SET_CONTEXT: |
33791
8b0c78a85a8c
Cosmetic: Change parameter names of gui() and mplayer().
ib
parents:
33781
diff
changeset
|
505 guiInfo.mpcontext = data; |
23077 | 506 break; |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
507 case GUI_SET_VIDEO: |
23077 | 508 { |
33791
8b0c78a85a8c
Cosmetic: Change parameter names of gui() and mplayer().
ib
parents:
33781
diff
changeset
|
509 guiInfo.sh_video = data; |
8b0c78a85a8c
Cosmetic: Change parameter names of gui() and mplayer().
ib
parents:
33781
diff
changeset
|
510 if (data) |
23077 | 511 { |
33791
8b0c78a85a8c
Cosmetic: Change parameter names of gui() and mplayer().
ib
parents:
33781
diff
changeset
|
512 sh_video_t *sh = data; |
23077 | 513 codecname = sh->codec->name; |
514 | |
515 /* we have video, show the subwindow */ | |
516 if(!IsWindowVisible(mygui->subwindow) || IsIconic(mygui->subwindow)) | |
517 ShowWindow(mygui->subwindow, SW_SHOWNORMAL); | |
518 if(WinID == -1) | |
519 update_subwindow(); | |
520 | |
521 } | |
522 break; | |
523 } | |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
524 case GUI_SETUP_VIDEO_WINDOW: |
23077 | 525 { |
33901 | 526 guiInfo.VideoWidth = vo_dwidth; |
527 guiInfo.VideoHeight = vo_dheight; | |
23077 | 528 |
33901 | 529 sub_aspect = (float)guiInfo.VideoWidth/guiInfo.VideoHeight; |
23077 | 530 if(WinID != -1) |
531 update_subwindow(); | |
532 break; | |
533 } | |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
534 case GUI_SET_STREAM: |
23077 | 535 { |
33555 | 536 guiInfo.StreamType = stream->type; |
23077 | 537 switch(stream->type) |
538 { | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26457
diff
changeset
|
539 #ifdef CONFIG_DVDREAD |
23077 | 540 case STREAMTYPE_DVD: |
33730 | 541 dvdp = stream->priv; |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
542 guiInfo.Tracks = dvdp->vmg_file->tt_srpt->nr_of_srpts; |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
543 guiInfo.Chapters = dvdp->vmg_file->tt_srpt->title[dvd_title].nr_of_ptts; |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
544 guiInfo.Angles = dvdp->vmg_file->tt_srpt->title[dvd_title].nr_of_angles; |
33902 | 545 guiInfo.AudioStreams = dvdp->nr_of_channels; |
546 memcpy(guiInfo.AudioStream, dvdp->audio_streams, sizeof(dvdp->audio_streams)); | |
547 guiInfo.Subtitles = dvdp->nr_of_subtitles; | |
548 memcpy(guiInfo.Subtitle, dvdp->subtitles, sizeof(dvdp->subtitles)); | |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
549 guiInfo.Chapter = dvd_chapter + 1; |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
550 guiInfo.Angle = dvd_angle + 1; |
33730 | 551 guiInfo.Track = dvd_title + 1; |
23077 | 552 break; |
553 #endif | |
554 } | |
555 break; | |
556 } | |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
557 case GUI_REDRAW: |
23077 | 558 mygui->updatedisplay(mygui, mygui->mainwindow); |
559 break; | |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
560 case GUI_SET_AFILTER: |
33791
8b0c78a85a8c
Cosmetic: Change parameter names of gui() and mplayer().
ib
parents:
33781
diff
changeset
|
561 guiInfo.afilter = data; |
23077 | 562 break; |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
563 case GUI_SET_STATE: |
23077 | 564 { |
33791
8b0c78a85a8c
Cosmetic: Change parameter names of gui() and mplayer().
ib
parents:
33781
diff
changeset
|
565 guiInfo.Playing = (int) data; |
33555 | 566 switch (guiInfo.Playing) |
23077 | 567 { |
33614 | 568 case GUI_PLAY: |
23077 | 569 { |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
570 guiInfo.Playing = GUI_PLAY; |
23077 | 571 break; |
572 } | |
33614 | 573 case GUI_STOP: |
23077 | 574 { |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
575 guiInfo.Playing = GUI_STOP; |
23077 | 576 if(movie_aspect >= 0) |
577 movie_aspect = -1; | |
578 update_subwindow(); | |
579 break; | |
580 } | |
33614 | 581 case GUI_PAUSE: |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
582 guiInfo.Playing = GUI_PAUSE; |
23077 | 583 break; |
584 } | |
585 break; | |
586 } | |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
587 case GUI_RUN_COMMAND: |
23077 | 588 { |
33791
8b0c78a85a8c
Cosmetic: Change parameter names of gui() and mplayer().
ib
parents:
33781
diff
changeset
|
589 mp_msg(MSGT_GPLAYER,MSGL_V, "cmd: %d\n", (int) data); |
23077 | 590 /* MPlayer asks us to quit */ |
33791
8b0c78a85a8c
Cosmetic: Change parameter names of gui() and mplayer().
ib
parents:
33781
diff
changeset
|
591 switch((int) data) |
23077 | 592 { |
31312
0b7792622c88
Remove Gui-specific slave commands and associated key-bindings and other code.
reimar
parents:
30901
diff
changeset
|
593 case MP_CMD_VO_FULLSCREEN: |
33555 | 594 uiFullScreen(); |
23077 | 595 break; |
596 case MP_CMD_QUIT: | |
597 { | |
598 mygui->uninit(mygui); | |
33770 | 599 nfree(mygui); |
30558 | 600 exit_player(EXIT_QUIT); |
33666
0f592e8530f1
Change return code of guiGetEvent() to indicate success.
ib
parents:
33661
diff
changeset
|
601 return 1; |
23077 | 602 } |
33696
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
603 case MP_CMD_PLAY_TREE_STEP: |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
604 guiSetEvent(evNext); |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
605 break; |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
606 case -MP_CMD_PLAY_TREE_STEP: |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
607 guiSetEvent(evPrev); |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
608 break; |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
609 case MP_CMD_STOP: |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
610 guiSetEvent(evStop); |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
611 break; |
23077 | 612 default: |
613 break; | |
614 } | |
615 break; | |
616 } | |
33732 | 617 case GUI_HANDLE_EVENTS: |
618 break; | |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
619 case GUI_SET_MIXER: |
23077 | 620 { |
621 if(audio_out) | |
622 { | |
623 /* Some audio_out drivers do not support balance e.g. dsound */ | |
624 /* FIXME this algo is not correct */ | |
625 float l, r; | |
626 mixer_getvolume(mixer, &l, &r); | |
33555 | 627 guiInfo.Volume = (r > l ? r : l); /* max(r,l) */ |
23077 | 628 if (r != l) |
33555 | 629 guiInfo.Balance = ((r-l) + 100.0f) * 0.5f; |
23077 | 630 else |
33555 | 631 guiInfo.Balance = 50.0f; |
23077 | 632 } |
633 break; | |
634 } | |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
635 case GUI_END_FILE: |
33694
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
636 { |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
637 if(!uiGotoTheNext && guiInfo.Playing) |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
638 { |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
639 uiGotoTheNext = 1; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
640 break; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
641 } |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
642 |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
643 if(uiGotoTheNext && guiInfo.Playing && |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
644 (mygui->playlist->current < (mygui->playlist->trackcount - 1)) && |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
645 guiInfo.StreamType != STREAMTYPE_DVD && |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
646 guiInfo.StreamType != STREAMTYPE_DVDNAV) |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
647 { |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
648 /* we've finished this file, reset the aspect */ |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
649 if(movie_aspect >= 0) |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
650 movie_aspect = -1; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
651 |
33894 | 652 uiGotoTheNext = 1; |
33890 | 653 guiInfo.NewPlay = GUI_FILE_NEW; |
33694
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
654 uiSetFileName(NULL, mygui->playlist->tracks[(mygui->playlist->current)++]->filename, STREAMTYPE_STREAM); |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
655 //sprintf(guiInfo.Filename, mygui->playlist->tracks[(mygui->playlist->current)++]->filename); |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
656 } |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
657 |
33894 | 658 if(guiInfo.NewPlay == GUI_FILE_NEW) |
33694
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
659 break; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
660 |
33897 | 661 guiInfo.ElapsedTime = 0; |
33694
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
662 guiInfo.Position = 0; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
663 guiInfo.AudioChannels = 0; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
664 |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
665 #ifdef CONFIG_DVDREAD |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
666 guiInfo.Track = 1; |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
667 guiInfo.Chapter = 1; |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
668 guiInfo.Angle = 1; |
33694
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
669 #endif |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
670 |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
671 if (mygui->playlist->current == (mygui->playlist->trackcount - 1)) |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
672 mygui->playlist->current = 0; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
673 |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
674 fullscreen = 0; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
675 if(style == WS_VISIBLE | WS_POPUP) |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
676 { |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
677 style = WS_OVERLAPPEDWINDOW | WS_SIZEBOX; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
678 SetWindowLong(mygui->subwindow, GWL_STYLE, style); |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
679 } |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
680 gui(GUI_SET_STATE, (void *) GUI_STOP); |
33694
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
681 break; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
682 } |
23077 | 683 default: |
33726 | 684 mp_msg(MSGT_GPLAYER, MSGL_ERR, "[GUI] GOT UNHANDLED EVENT %i\n", what); |
23077 | 685 } |
33666
0f592e8530f1
Change return code of guiGetEvent() to indicate success.
ib
parents:
33661
diff
changeset
|
686 return 1; |
23077 | 687 } |
688 | |
689 /* This function adds/inserts one file into the gui playlist */ | |
33579 | 690 static int import_file_into_gui(char *pathname, int insert) |
23077 | 691 { |
692 char filename[MAX_PATH]; | |
693 char *filepart = filename; | |
694 | |
695 if (strstr(pathname, "://")) | |
696 { | |
697 mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] Adding special %s\n", pathname); | |
698 mygui->playlist->add_track(mygui->playlist, pathname, NULL, NULL, 0); | |
699 return 1; | |
700 } | |
701 if (GetFullPathName(pathname, MAX_PATH, filename, &filepart)) | |
702 { | |
703 if (!(GetFileAttributes(filename) & FILE_ATTRIBUTE_DIRECTORY)) | |
704 { | |
705 mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] Adding filename: %s - fullpath: %s\n", filepart, filename); | |
706 mygui->playlist->add_track(mygui->playlist, filename, NULL, filepart, 0); | |
707 return 1; | |
708 } | |
709 else | |
710 mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] Cannot add %s\n", filename); | |
711 } | |
712 | |
713 return 0; | |
714 } | |
715 | |
716 /* This function imports the initial playtree (based on cmd-line files) into the gui playlist | |
717 by either: | |
718 - overwriting gui pl (enqueue=0) */ | |
719 | |
33752 | 720 int guiPlaylistInitialize(play_tree_t *my_playtree, m_config_t *config, int enqueue) |
23077 | 721 { |
722 play_tree_iter_t *my_pt_iter = NULL; | |
723 int result = 0; | |
724 | |
725 if(!mygui) guiInit(); | |
726 | |
727 if((my_pt_iter = pt_iter_create(&my_playtree, config))) | |
728 { | |
729 while ((filename = pt_iter_get_next_file(my_pt_iter)) != NULL) | |
730 { | |
731 if (parse_filename(filename, my_playtree, config, 0)) | |
732 result = 1; | |
733 else if (import_file_into_gui(filename, 0)) /* Add it to end of list */ | |
734 result = 1; | |
735 } | |
736 } | |
33555 | 737 uiGotoTheNext = 1; |
23077 | 738 |
739 if (result) | |
740 { | |
741 mygui->playlist->current = 0; | |
742 filename = mygui->playlist->tracks[0]->filename; | |
34057 | 743 uiSetFileName(NULL, filename, STREAMTYPE_FILE); |
23077 | 744 } |
745 return result; | |
746 } | |
747 | |
748 /* This function imports and inserts an playtree, that is created "on the fly", for example by | |
749 parsing some MOV-Reference-File; or by loading an playlist with "File Open" | |
750 The file which contained the playlist is thereby replaced with it's contents. */ | |
751 | |
33752 | 752 int guiPlaylistAdd(play_tree_t *my_playtree, m_config_t *config) |
23077 | 753 { |
754 play_tree_iter_t *my_pt_iter = NULL; | |
755 int result = 0; | |
756 | |
757 if((my_pt_iter = pt_iter_create(&my_playtree, config))) | |
758 { | |
759 while ((filename = pt_iter_get_next_file(my_pt_iter)) != NULL) | |
760 if (import_file_into_gui(filename, 1)) /* insert it into the list and set plCurrent = new item */ | |
761 result = 1; | |
762 pt_iter_destroy(&my_pt_iter); | |
763 } | |
764 return result; | |
765 } | |
766 | |
33579 | 767 static inline void gtkMessageBox(int type, const char *str) |
23077 | 768 { |
769 if (type & GTK_MB_FATAL) | |
770 MessageBox(NULL, str, "MPlayer GUI for Windows Error", MB_OK | MB_ICONERROR); | |
771 | |
772 fprintf(stderr, "[GUI] MessageBox: %s\n", str); | |
773 fflush(stderr); | |
774 } | |
775 | |
776 static int update_subwindow(void) | |
777 { | |
778 int x,y; | |
779 RECT rd; | |
780 WINDOWPOS wp; | |
781 | |
782 if(!sub_window) | |
783 { | |
33567 | 784 WinID = -1; |
23077 | 785 |
33555 | 786 if(IsWindowVisible(mygui->subwindow) && guiInfo.sh_video && guiInfo.Playing) |
23077 | 787 { |
788 ShowWindow(mygui->subwindow, SW_HIDE); | |
789 return 0; | |
790 } | |
33901 | 791 else if(!guiInfo.VideoWindow) |
23077 | 792 return 0; |
793 else ShowWindow(mygui->subwindow, SW_SHOW); | |
794 } | |
795 | |
796 /* we've come out of fullscreen at the end of file */ | |
33901 | 797 if((!IsWindowVisible(mygui->subwindow) || IsIconic(mygui->subwindow)) && guiInfo.VideoWindow) |
23077 | 798 ShowWindow(mygui->subwindow, SW_SHOWNORMAL); |
799 | |
800 /* get our current window coordinates */ | |
801 GetWindowRect(mygui->subwindow, &rd); | |
802 | |
803 x = rd.left; | |
804 y = rd.top; | |
805 | |
806 /* restore sub window position when coming out of fullscreen */ | |
807 if(x <= 0) x = old_rect.left; | |
808 if(y <= 0) y = old_rect.top; | |
809 | |
33555 | 810 if(!guiInfo.Playing) |
23077 | 811 { |
812 window *desc = NULL; | |
813 int i; | |
814 | |
815 for (i=0; i<mygui->skin->windowcount; i++) | |
816 if(mygui->skin->windows[i]->type == wiSub) | |
817 desc = mygui->skin->windows[i]; | |
818 | |
819 rd.right = rd.left+desc->base->bitmap[0]->width; | |
820 rd.bottom = rd.top+desc->base->bitmap[0]->height; | |
821 sub_aspect = (float)(rd.right-rd.left)/(rd.bottom-rd.top); | |
822 } | |
823 else | |
824 { | |
33901 | 825 rd.right = rd.left+guiInfo.VideoWidth; |
826 rd.bottom = rd.top+guiInfo.VideoHeight; | |
23077 | 827 |
828 if (movie_aspect > 0.0) // forced aspect from the cmdline | |
829 sub_aspect = movie_aspect; | |
830 } | |
831 | |
832 | |
833 AdjustWindowRect(&rd, WS_OVERLAPPEDWINDOW | WS_SIZEBOX, 0); | |
834 SetWindowPos(mygui->subwindow, 0, x, y, rd.right-rd.left, rd.bottom-rd.top, SWP_NOOWNERZORDER); | |
835 | |
836 wp.hwnd = mygui->subwindow; | |
837 wp.x = rd.left; | |
838 wp.y = rd.top; | |
839 wp.cx = rd.right-rd.left; | |
840 wp.cy = rd.bottom-rd.top; | |
841 wp.flags = SWP_NOOWNERZORDER | SWP_SHOWWINDOW; | |
842 | |
843 /* erase the bitmap image if there's video */ | |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
844 if(guiInfo.Playing != GUI_STOP && guiInfo.sh_video) |
23077 | 845 SendMessage(mygui->subwindow, WM_ERASEBKGND, (WPARAM)GetDC(mygui->subwindow), 0); |
846 | |
847 /* reset the window aspect */ | |
848 SendMessage(mygui->subwindow, WM_WINDOWPOSCHANGED, 0, (LPARAM)&wp); | |
849 return 0; | |
850 } |