Mercurial > mplayer.hg
annotate Gui/interface.c @ 22609:cd50e0497989
Remove unnecessary -I./wm option from CFLAGS.
author | diego |
---|---|
date | Thu, 15 Mar 2007 23:28:38 +0000 |
parents | a7e5b99ac083 |
children |
rev | line source |
---|---|
8058 | 1 |
4845 | 2 #include <inttypes.h> |
3 #include <stdlib.h> | |
4 #include <stdio.h> | |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
5 #include <string.h> |
8058 | 6 #include <sys/types.h> |
4798 | 7 |
8058 | 8 #include "wm/ws.h" |
9 #include "wm/wsxdnd.h" | |
4798 | 10 #include "interface.h" |
6619
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
11 #include "skin/skin.h" |
8058 | 12 |
6627 | 13 #include "mplayer/gtk/eq.h" |
8058 | 14 #include "mplayer/widgets.h" |
21227
308495b6d611
Rename Gui/mplayer/mplayer.h to gmplayer.h, another file named mplayer.h
diego
parents:
21140
diff
changeset
|
15 #include "mplayer/gmplayer.h" |
8423 | 16 #include "mplayer/play.h" |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
17 |
17144 | 18 #include "mplayer.h" |
22286 | 19 #include "access_mpcontext.h" |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
20 #include "app.h" |
6794 | 21 #include "cfg.h" |
17144 | 22 #include "help_mp.h" |
23 #include "subreader.h" | |
24 #include "libvo/x11_common.h" | |
25 #include "libvo/video_out.h" | |
26 #include "libvo/font_load.h" | |
27 #include "libvo/sub.h" | |
28 #include "input/input.h" | |
29 #include "libao2/audio_out.h" | |
30 #include "mixer.h" | |
31 #include "libaf/af.h" | |
32 #include "libaf/equalizer.h" | |
5789 | 33 |
14254 | 34 extern af_cfg_t af_cfg; |
35 | |
6996 | 36 #ifdef USE_ICONV |
7128 | 37 #include <iconv.h> |
6996 | 38 #endif |
39 | |
19274
e579e74d6c3c
fix includes due to libmpdemux split (patch by Stefan Huehner)
ben
parents:
19081
diff
changeset
|
40 #include "stream/stream.h" |
17144 | 41 #include "libmpdemux/demuxer.h" |
42 #include "libmpdemux/stheader.h" | |
43 #include "libmpcodecs/dec_video.h" | |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
44 |
18682
bee3186a06f7
include stream_dvd's interface from libmpdemux/stream_dvd.h
nicodvb
parents:
18533
diff
changeset
|
45 #ifdef USE_DVDREAD |
19274
e579e74d6c3c
fix includes due to libmpdemux split (patch by Stefan Huehner)
ben
parents:
19081
diff
changeset
|
46 #include "stream/stream_dvd.h" |
18682
bee3186a06f7
include stream_dvd's interface from libmpdemux/stream_dvd.h
nicodvb
parents:
18533
diff
changeset
|
47 #endif |
bee3186a06f7
include stream_dvd's interface from libmpdemux/stream_dvd.h
nicodvb
parents:
18533
diff
changeset
|
48 |
bee3186a06f7
include stream_dvd's interface from libmpdemux/stream_dvd.h
nicodvb
parents:
18533
diff
changeset
|
49 |
17144 | 50 #include "m_config.h" |
51 #include "m_option.h" | |
9623
20f0a254142d
bugfix from Raindel Shachar <raindel@techunix.technion.ac.il>
pontscho
parents:
9314
diff
changeset
|
52 |
12691
0230544f52a1
Fix GUI compilation, patch by Reimar Dffinger and Alexander Strasser.
diego
parents:
12646
diff
changeset
|
53 |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
54 guiInterface_t guiIntfStruct; |
9314
f38fe55d0e05
this patch adds the option -guiwid to gmplayer. I think its a more clean
arpi
parents:
9306
diff
changeset
|
55 int guiWinID=-1; |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
56 |
19081
273bdef43012
Mark several string parameters that are not modified in the function as const.
diego
parents:
19061
diff
changeset
|
57 char * gstrcat( char ** dest,const char * src ) |
6627 | 58 { |
59 char * tmp = NULL; | |
60 | |
61 if ( !src ) return NULL; | |
62 | |
63 if ( *dest ) | |
64 { | |
65 tmp=malloc( strlen( *dest ) + strlen( src ) + 1 ); | |
12646 | 66 |
67 if ( tmp ) /* TODO: advanced error handling */ | |
68 { | |
69 strcpy( tmp,*dest ); strcat( tmp,src ); free( *dest ); | |
70 } | |
71 } | |
6627 | 72 else |
73 { tmp=malloc( strlen( src ) + 1 ); strcpy( tmp,src ); } | |
74 *dest=tmp; | |
75 return tmp; | |
76 } | |
77 | |
19081
273bdef43012
Mark several string parameters that are not modified in the function as const.
diego
parents:
19061
diff
changeset
|
78 int gstrcmp( const char * a,const char * b ) |
6794 | 79 { |
80 if ( !a && !b ) return 0; | |
81 if ( !a || !b ) return -1; | |
82 return strcmp( a,b ); | |
83 } | |
84 | |
19081
273bdef43012
Mark several string parameters that are not modified in the function as const.
diego
parents:
19061
diff
changeset
|
85 int gstrncmp( const char * a,const char * b,int size ) |
7019 | 86 { |
87 if ( !a && !b ) return 0; | |
88 if ( !a || !b ) return -1; | |
89 return strncmp( a,b,size ); | |
90 } | |
91 | |
19081
273bdef43012
Mark several string parameters that are not modified in the function as const.
diego
parents:
19061
diff
changeset
|
92 char * gstrdup( const char * str ) |
6794 | 93 { |
94 if ( !str ) return NULL; | |
95 return strdup( str ); | |
96 } | |
97 | |
8284 | 98 char * gstrchr( char * str,int c ) |
99 { | |
100 if ( !str ) return NULL; | |
101 return strchr( str,c ); | |
102 } | |
103 | |
6794 | 104 void gfree( void ** p ) |
105 { | |
106 if ( *p == NULL ) return; | |
107 free( *p ); *p=NULL; | |
108 } | |
109 | |
19081
273bdef43012
Mark several string parameters that are not modified in the function as const.
diego
parents:
19061
diff
changeset
|
110 void gset( char ** str, const char * what ) |
6794 | 111 { |
7887
0e5544951425
A small patch to Gui/interface.c; the first fix is a plain bug, the second is
arpi
parents:
7707
diff
changeset
|
112 if ( *str ) { if ( !strstr( *str,what ) ) { gstrcat( str,"," ); gstrcat( str,what ); }} |
6794 | 113 else gstrcat( str,what ); |
114 } | |
115 | |
14254 | 116 /** |
117 * \brief this actually creates a new list containing only one element... | |
118 */ | |
19081
273bdef43012
Mark several string parameters that are not modified in the function as const.
diego
parents:
19061
diff
changeset
|
119 void gaddlist( char *** list,const char * entry ) |
7582 | 120 { |
121 int i; | |
122 | |
123 if ( (*list) ) | |
124 { | |
125 for ( i=0;(*list)[i];i++ ) free( (*list)[i] ); | |
126 free( (*list) ); | |
127 } | |
128 | |
14177
b8ba18471f4a
Somebody obviously took a course "coding non-portable".
reimar
parents:
14156
diff
changeset
|
129 (*list)=malloc( 2 * sizeof(char **) ); |
7582 | 130 (*list)[0]=gstrdup( entry ); |
131 (*list)[1]=NULL; | |
132 } | |
133 | |
14254 | 134 /** |
135 * \brief this replaces a string starting with search by replace. | |
136 * If not found, replace is appended. | |
137 */ | |
19081
273bdef43012
Mark several string parameters that are not modified in the function as const.
diego
parents:
19061
diff
changeset
|
138 void greplace(char ***list, const char *search, const char *replace) |
14254 | 139 { |
140 int i = 0; | |
141 int len = (search) ? strlen(search) : 0; | |
142 | |
143 if (*list) { | |
144 for (i = 0; (*list)[i]; i++) { | |
145 if (search && (strncmp((*list)[i], search, len) == 0)) { | |
146 free((*list)[i]); | |
147 (*list)[i] = gstrdup(replace); | |
148 return; | |
149 } | |
150 } | |
151 *list = realloc(*list, (i + 2) * sizeof(char *)); | |
152 } | |
153 else | |
154 *list = malloc(2 * sizeof(char *)); | |
155 | |
156 (*list)[i] = gstrdup(replace); | |
157 (*list)[i + 1] = NULL; | |
158 } | |
159 | |
6996 | 160 #ifdef USE_ICONV |
161 char * gconvert_uri_to_filename( char * str ) | |
162 { | |
163 iconv_t d; | |
164 char * out = strdup( str ); | |
165 char * tmp = NULL; | |
166 char * ize; | |
167 size_t inb,outb; | |
168 char * charset = "ISO8859-1"; | |
169 char * cs; | |
170 | |
171 if ( !strchr( str,'%' ) ) return str; | |
172 | |
173 { | |
174 char * t = calloc( 1,strlen( out ) ); | |
175 int i,c = 0; | |
176 for ( i=0;i < (int)strlen( out );i++ ) | |
177 if ( out[i] != '%' ) t[c++]=out[i]; | |
178 else | |
179 { | |
12068 | 180 char tmp[5] = "0xXX"; |
6996 | 181 // if ( out[++i] == '%' ) { t[c++]='%'; continue; }; |
182 tmp[2]=out[++i]; tmp[3]=out[++i]; | |
183 t[c++]=(char)strtol( tmp,(char **)NULL,0 ); | |
184 } | |
185 free( out ); | |
186 out=t; | |
187 } | |
188 | |
189 if ( (cs=getenv( "CHARSET" )) && *cs ) charset=cs; | |
190 | |
191 inb=outb=strlen( out ); | |
192 tmp=calloc( 1,outb + 1 ); | |
193 ize=tmp; | |
194 d=iconv_open( charset,"UTF-8" ); | |
195 if ( (iconv_t)(-1) == d ) return str; | |
196 iconv( d,&out,&inb,&tmp,&outb ); | |
197 iconv_close( d ); | |
198 free( out ); | |
199 return ize; | |
200 } | |
201 #endif | |
202 | |
6218 | 203 void guiInit( void ) |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
204 { |
8058 | 205 int i; |
206 | |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
207 memset( &guiIntfStruct,0,sizeof( guiIntfStruct ) ); |
6898 | 208 guiIntfStruct.Balance=50.0f; |
209 guiIntfStruct.StreamType=-1; | |
210 | |
6627 | 211 memset( >kEquChannels,0,sizeof( gtkEquChannels ) ); |
7707 | 212 #ifdef HAVE_DXR3 |
7706 | 213 if ( !gtkDXR3Device ) gtkDXR3Device=strdup( "/dev/em8300-0" ); |
7707 | 214 #endif |
14181
6ecf5fca82e2
Fixes the bug that after opening the preferences panel gmplayer plays files
reimar
parents:
14177
diff
changeset
|
215 if ( stream_cache_size > 0 ) { gtkCacheOn=1; gtkCacheSize=stream_cache_size; } |
18743
087415a46292
respect saved default for cache enable when nothing specified on
reimar
parents:
18682
diff
changeset
|
216 else if ( stream_cache_size == 0 ) gtkCacheOn = 0; |
8311 | 217 if ( autosync && autosync != gtkAutoSync ) { gtkAutoSyncOn=1; gtkAutoSync=autosync; } |
6898 | 218 |
20424 | 219 #ifdef USE_ASS |
220 gtkASS.enabled = ass_enabled; | |
221 gtkASS.use_margins = ass_use_margins; | |
222 gtkASS.top_margin = ass_top_margin; | |
223 gtkASS.bottom_margin = ass_bottom_margin; | |
224 #endif | |
225 | |
6898 | 226 gtkInit(); |
8043 | 227 // --- initialize X |
6912 | 228 wsXInit( (void *)mDisplay ); |
8058 | 229 // --- load skin |
17974
9a5a62f480e6
Rename the default GUI skins directory from 'Skin' to 'skins', keeping
diego
parents:
17144
diff
changeset
|
230 skinDirInHome=get_path("skins"); |
9a5a62f480e6
Rename the default GUI skins directory from 'Skin' to 'skins', keeping
diego
parents:
17144
diff
changeset
|
231 skinDirInHome_obsolete=get_path("Skin"); |
9a5a62f480e6
Rename the default GUI skins directory from 'Skin' to 'skins', keeping
diego
parents:
17144
diff
changeset
|
232 skinMPlayerDir=MPLAYER_DATADIR "/skins"; |
9a5a62f480e6
Rename the default GUI skins directory from 'Skin' to 'skins', keeping
diego
parents:
17144
diff
changeset
|
233 skinMPlayerDir_obsolete=MPLAYER_DATADIR "/Skin"; |
14156 | 234 mp_msg( MSGT_GPLAYER,MSGL_V,"SKIN dir 1: '%s'\n",skinDirInHome); |
17974
9a5a62f480e6
Rename the default GUI skins directory from 'Skin' to 'skins', keeping
diego
parents:
17144
diff
changeset
|
235 mp_msg( MSGT_GPLAYER,MSGL_V,"SKIN dir 1 (obsolete): '%s'\n",skinDirInHome_obsolete); |
14156 | 236 mp_msg( MSGT_GPLAYER,MSGL_V,"SKIN dir 2: '%s'\n",skinMPlayerDir); |
17974
9a5a62f480e6
Rename the default GUI skins directory from 'Skin' to 'skins', keeping
diego
parents:
17144
diff
changeset
|
237 mp_msg( MSGT_GPLAYER,MSGL_V,"SKIN dir 2 (obsolete): '%s'\n",skinMPlayerDir_obsolete); |
8043 | 238 if ( !skinName ) skinName=strdup( "default" ); |
10607
a17ebe817e33
Fixed a long standing issue: if configured a not available (not existing, permission denied, ...) skin, the gui never ever started again. Now it reverts to 'default' if it can't open the selected skin, if 'default' fails too, the gui exits with error.
alex
parents:
10594
diff
changeset
|
239 i = skinRead( skinName ); |
a17ebe817e33
Fixed a long standing issue: if configured a not available (not existing, permission denied, ...) skin, the gui never ever started again. Now it reverts to 'default' if it can't open the selected skin, if 'default' fails too, the gui exits with error.
alex
parents:
10594
diff
changeset
|
240 if ((i == -1) && strcmp(skinName,"default")) |
a17ebe817e33
Fixed a long standing issue: if configured a not available (not existing, permission denied, ...) skin, the gui never ever started again. Now it reverts to 'default' if it can't open the selected skin, if 'default' fails too, the gui exits with error.
alex
parents:
10594
diff
changeset
|
241 { |
14156 | 242 mp_msg( MSGT_GPLAYER,MSGL_WARN,MSGTR_SKIN_SKINCFG_SelectedSkinNotFound, skinName); |
10607
a17ebe817e33
Fixed a long standing issue: if configured a not available (not existing, permission denied, ...) skin, the gui never ever started again. Now it reverts to 'default' if it can't open the selected skin, if 'default' fails too, the gui exits with error.
alex
parents:
10594
diff
changeset
|
243 skinName=strdup( "default" ); |
a17ebe817e33
Fixed a long standing issue: if configured a not available (not existing, permission denied, ...) skin, the gui never ever started again. Now it reverts to 'default' if it can't open the selected skin, if 'default' fails too, the gui exits with error.
alex
parents:
10594
diff
changeset
|
244 i = skinRead( skinName ); |
a17ebe817e33
Fixed a long standing issue: if configured a not available (not existing, permission denied, ...) skin, the gui never ever started again. Now it reverts to 'default' if it can't open the selected skin, if 'default' fails too, the gui exits with error.
alex
parents:
10594
diff
changeset
|
245 } |
a17ebe817e33
Fixed a long standing issue: if configured a not available (not existing, permission denied, ...) skin, the gui never ever started again. Now it reverts to 'default' if it can't open the selected skin, if 'default' fails too, the gui exits with error.
alex
parents:
10594
diff
changeset
|
246 switch (i) { |
8043 | 247 case -1: mp_msg( MSGT_GPLAYER,MSGL_ERR,MSGTR_SKIN_SKINCFG_SkinNotFound,skinName ); exit( 0 ); |
248 case -2: mp_msg( MSGT_GPLAYER,MSGL_ERR,MSGTR_SKIN_SKINCFG_SkinCfgReadError,skinName ); exit( 0 ); | |
249 } | |
8058 | 250 // --- initialize windows |
19061
86350b4b8203
drops casts from void * on malloc/calloc from the gui code
reynaldo
parents:
18743
diff
changeset
|
251 if ( ( mplDrawBuffer = malloc( appMPlayer.main.Bitmap.ImageSize ) ) == NULL ) |
8058 | 252 { |
253 fprintf( stderr,MSGTR_NEMDB ); | |
254 exit( 0 ); | |
255 } | |
9306 | 256 |
9625 | 257 if ( gui_save_pos ) |
258 { | |
259 appMPlayer.main.x = gui_main_pos_x; | |
260 appMPlayer.main.y = gui_main_pos_y; | |
261 appMPlayer.sub.x = gui_sub_pos_x; | |
262 appMPlayer.sub.y = gui_sub_pos_y; | |
263 } | |
264 | |
9306 | 265 if (WinID>0) |
9625 | 266 { |
9306 | 267 appMPlayer.subWindow.Parent=WinID; |
268 appMPlayer.sub.x=0; | |
269 appMPlayer.sub.y=0; | |
9625 | 270 } |
271 if (guiWinID>=0) appMPlayer.mainWindow.Parent=guiWinID; | |
9202 | 272 |
8058 | 273 wsCreateWindow( &appMPlayer.subWindow, |
274 appMPlayer.sub.x,appMPlayer.sub.y,appMPlayer.sub.width,appMPlayer.sub.height, | |
9202 | 275 wsNoBorder,wsShowMouseCursor|wsHandleMouseButton|wsHandleMouseMove,wsShowFrame|wsHideWindow,"MPlayer - Video" ); |
8058 | 276 |
277 wsDestroyImage( &appMPlayer.subWindow ); | |
278 wsCreateImage( &appMPlayer.subWindow,appMPlayer.sub.Bitmap.Width,appMPlayer.sub.Bitmap.Height ); | |
279 wsXDNDMakeAwareness(&appMPlayer.subWindow); | |
280 | |
8973 | 281 mplMenuInit(); |
282 mplPBInit(); | |
283 | |
8058 | 284 vo_setwindow( appMPlayer.subWindow.WindowID, appMPlayer.subWindow.wGC ); |
285 | |
286 // i=wsHideFrame|wsMaxSize|wsHideWindow; | |
287 // if ( appMPlayer.mainDecoration ) i=wsShowFrame|wsMaxSize|wsHideWindow; | |
288 i=wsShowFrame|wsMaxSize|wsHideWindow; | |
289 wsCreateWindow( &appMPlayer.mainWindow, | |
290 appMPlayer.main.x,appMPlayer.main.y,appMPlayer.main.width,appMPlayer.main.height, | |
8949 | 291 wsNoBorder,wsShowMouseCursor|wsHandleMouseButton|wsHandleMouseMove,i,"MPlayer" ); |
8058 | 292 |
293 wsSetShape( &appMPlayer.mainWindow,appMPlayer.main.Mask.Image ); | |
294 wsXDNDMakeAwareness(&appMPlayer.mainWindow); | |
295 | |
19997 | 296 #ifdef DEBUG |
14156 | 297 mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[main] depth on screen: %d\n",wsDepthOnScreen ); |
8058 | 298 mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[main] parent: 0x%x\n",(int)appMPlayer.mainWindow.WindowID ); |
299 mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[main] sub: 0x%x\n",(int)appMPlayer.subWindow.WindowID ); | |
19997 | 300 #endif |
8058 | 301 |
302 appMPlayer.mainWindow.ReDraw=(void *)mplMainDraw; | |
303 appMPlayer.mainWindow.MouseHandler=mplMainMouseHandle; | |
304 appMPlayer.mainWindow.KeyHandler=mplMainKeyHandle; | |
305 appMPlayer.mainWindow.DandDHandler=mplDandDHandler; | |
306 | |
307 appMPlayer.subWindow.ReDraw=(void *)mplSubDraw; | |
308 appMPlayer.subWindow.MouseHandler=mplSubMouseHandle; | |
309 appMPlayer.subWindow.KeyHandler=mplMainKeyHandle; | |
310 appMPlayer.subWindow.DandDHandler=mplDandDHandler; | |
311 | |
8973 | 312 wsSetBackgroundRGB( &appMPlayer.subWindow,appMPlayer.sub.R,appMPlayer.sub.G,appMPlayer.sub.B ); |
8058 | 313 wsClearWindow( appMPlayer.subWindow ); |
314 if ( appMPlayer.sub.Bitmap.Image ) wsConvert( &appMPlayer.subWindow,appMPlayer.sub.Bitmap.Image,appMPlayer.sub.Bitmap.ImageSize ); | |
315 | |
316 btnModify( evSetVolume,guiIntfStruct.Volume ); | |
317 btnModify( evSetBalance,guiIntfStruct.Balance ); | |
318 btnModify( evSetMoviePosition,guiIntfStruct.Position ); | |
319 | |
320 wsSetIcon( wsDisplay,appMPlayer.mainWindow.WindowID,guiIcon,guiIconMask ); | |
321 wsSetIcon( wsDisplay,appMPlayer.subWindow.WindowID,guiIcon,guiIconMask ); | |
322 | |
323 guiIntfStruct.Playing=0; | |
324 | |
325 if ( !appMPlayer.mainDecoration ) wsWindowDecoration( &appMPlayer.mainWindow,0 ); | |
326 | |
327 wsVisibleWindow( &appMPlayer.mainWindow,wsShowWindow ); | |
9202 | 328 #if 0 |
8058 | 329 wsVisibleWindow( &appMPlayer.subWindow,wsShowWindow ); |
330 | |
331 { | |
332 XEvent xev; | |
333 do { XNextEvent( wsDisplay,&xev ); } while ( xev.type != MapNotify || xev.xmap.event != appMPlayer.subWindow.WindowID ); | |
334 appMPlayer.subWindow.Mapped=wsMapped; | |
335 } | |
336 | |
9088 | 337 if ( !fullscreen ) fullscreen=gtkLoadFullscreen; |
8058 | 338 if ( fullscreen ) |
339 { | |
340 mplFullScreen(); | |
341 btnModify( evFullScreen,btnPressed ); | |
342 } | |
9202 | 343 #else |
11874 | 344 if ( !fullscreen ) fullscreen=gtkLoadFullscreen; |
9202 | 345 if ( gtkShowVideoWindow ) |
346 { | |
347 wsVisibleWindow( &appMPlayer.subWindow,wsShowWindow ); | |
348 { | |
349 XEvent xev; | |
350 do { XNextEvent( wsDisplay,&xev ); } while ( xev.type != MapNotify || xev.xmap.event != appMPlayer.subWindow.WindowID ); | |
351 appMPlayer.subWindow.Mapped=wsMapped; | |
352 } | |
353 | |
354 if ( fullscreen ) | |
355 { | |
356 mplFullScreen(); | |
357 btnModify( evFullScreen,btnPressed ); | |
358 } | |
359 } | |
360 else | |
361 { | |
362 if ( fullscreen ) | |
363 { | |
364 wsVisibleWindow( &appMPlayer.subWindow,wsShowWindow ); | |
365 { | |
366 XEvent xev; | |
367 do { XNextEvent( wsDisplay,&xev ); } while ( xev.type != MapNotify || xev.xmap.event != appMPlayer.subWindow.WindowID ); | |
368 appMPlayer.subWindow.Mapped=wsMapped; | |
369 } | |
370 wsVisibleWindow( &appMPlayer.subWindow, wsShowWindow ); | |
371 | |
372 mplFullScreen(); | |
373 btnModify( evFullScreen,btnPressed ); | |
374 } | |
375 } | |
8058 | 376 #endif |
377 mplSubRender=1; | |
8043 | 378 // --- |
7538 | 379 |
8423 | 380 if ( filename ) mplSetFileName( NULL,filename,STREAMTYPE_FILE ); |
7009 | 381 if ( plCurrent && !filename ) mplSetFileName( plCurrent->path,plCurrent->name,STREAMTYPE_FILE ); |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
382 if ( subdata ) guiSetFilename( guiIntfStruct.Subtitlename, subdata->filename ); |
6797
06d29dbdf20d
upsz, sorry, i forgott this :) (skin name saving:)
pontscho
parents:
6794
diff
changeset
|
383 guiLoadFont(); |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
384 } |
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
385 |
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
386 void guiDone( void ) |
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
387 { |
8883 | 388 mplMainRender=0; |
14156 | 389 mp_msg( MSGT_GPLAYER,MSGL_V,"[GUI] done.\n" ); |
9625 | 390 |
391 if ( gui_save_pos ) | |
392 { | |
393 gui_main_pos_x=appMPlayer.mainWindow.X; gui_main_pos_y=appMPlayer.mainWindow.Y; | |
394 gui_sub_pos_x=appMPlayer.subWindow.X; gui_sub_pos_y=appMPlayer.subWindow.Y; | |
395 } | |
20424 | 396 |
397 #ifdef USE_ASS | |
398 ass_enabled = gtkASS.enabled; | |
399 ass_use_margins = gtkASS.use_margins; | |
400 ass_top_margin = gtkASS.top_margin; | |
401 ass_bottom_margin = gtkASS.bottom_margin; | |
402 #endif | |
9625 | 403 |
6794 | 404 cfg_write(); |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
405 wsXDone(); |
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
406 } |
4798 | 407 |
4858 | 408 int guiCMDArray[] = |
409 { | |
8883 | 410 evLoadPlay, |
4858 | 411 evLoadSubtitle, |
412 evAbout, | |
413 evPlay, | |
414 evStop, | |
415 evPlayList, | |
416 evPreferences, | |
417 evFullScreen, | |
418 evSkinBrowser | |
419 }; | |
420 | |
6794 | 421 extern int frame_dropping; |
422 extern int stream_dump_type; | |
9812
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
423 extern int vcd_track; |
21429 | 424 extern m_obj_settings_t * vf_settings; |
6794 | 425 |
426 void guiLoadFont( void ) | |
427 { | |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
7111
diff
changeset
|
428 #ifdef HAVE_FREETYPE |
8635
81dbd28ef7c0
these patches let ,,oldstyle'' and freetype subtitle renderers live
arpi
parents:
8615
diff
changeset
|
429 load_font_ft(vo_image_width, vo_image_height); |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
7111
diff
changeset
|
430 #else |
6794 | 431 if ( vo_font ) |
432 { | |
433 int i; | |
434 if ( vo_font->name ) free( vo_font->name ); | |
435 if ( vo_font->fpath ) free( vo_font->fpath ); | |
436 for ( i=0;i<16;i++ ) | |
437 if ( vo_font->pic_a[i] ) | |
438 { | |
439 if ( vo_font->pic_a[i]->bmp ) free( vo_font->pic_a[i]->bmp ); | |
440 if ( vo_font->pic_a[i]->pal ) free( vo_font->pic_a[i]->pal ); | |
441 } | |
442 for ( i=0;i<16;i++ ) | |
443 if ( vo_font->pic_b[i] ) | |
444 { | |
445 if ( vo_font->pic_b[i]->bmp ) free( vo_font->pic_b[i]->bmp ); | |
446 if ( vo_font->pic_b[i]->pal ) free( vo_font->pic_b[i]->pal ); | |
447 } | |
448 free( vo_font ); vo_font=NULL; | |
449 } | |
7019 | 450 if ( font_name ) |
6794 | 451 { |
7019 | 452 vo_font=read_font_desc( font_name,font_factor,0 ); |
6794 | 453 if ( !vo_font ) mp_msg( MSGT_CPLAYER,MSGL_ERR,MSGTR_CantLoadFont,font_name ); |
454 } | |
455 else | |
456 { | |
7019 | 457 font_name=gstrdup( get_path( "font/font.desc" ) ); |
458 vo_font=read_font_desc( font_name,font_factor,0 ); | |
6794 | 459 if ( !vo_font ) |
460 { | |
10272
7b0bc557987b
renames: DATADIR->MPLAYER_DATADIR, CONFDIR->MPLAYER_CONFDIR, LIBDIR->MPLAYER_LIBDIR
arpi
parents:
10193
diff
changeset
|
461 gfree( (void **)&font_name ); font_name=gstrdup(MPLAYER_DATADIR "/font/font.desc" ); |
7019 | 462 vo_font=read_font_desc( font_name,font_factor,0 ); |
6794 | 463 } |
464 } | |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
7111
diff
changeset
|
465 #endif |
6794 | 466 } |
6619
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
467 |
7169 | 468 extern mp_osd_obj_t* vo_osd_list; |
469 | |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
470 extern char **sub_name; |
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
471 |
7150 | 472 void guiLoadSubtitle( char * name ) |
473 { | |
474 if ( guiIntfStruct.Playing == 0 ) | |
475 { | |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
476 guiIntfStruct.SubtitleChanged=1; //what is this for? (mw) |
7150 | 477 return; |
478 } | |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
479 if ( subdata ) |
7150 | 480 { |
14156 | 481 mp_msg( MSGT_GPLAYER,MSGL_INFO,MSGTR_DeletingSubtitles ); |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
482 sub_free( subdata ); |
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
483 subdata=NULL; |
7150 | 484 vo_sub=NULL; |
7169 | 485 if ( vo_osd_list ) |
486 { | |
487 int len; | |
488 mp_osd_obj_t * osd = vo_osd_list; | |
489 while ( osd ) | |
490 { | |
491 if ( osd->type == OSDTYPE_SUBTITLE ) break; | |
492 osd=osd->next; | |
493 } | |
494 if ( osd && osd->flags&OSDFLAG_VISIBLE ) | |
495 { | |
496 len=osd->stride * ( osd->bbox.y2 - osd->bbox.y1 ); | |
497 memset( osd->bitmap_buffer,0,len ); | |
498 memset( osd->alpha_buffer,0,len ); | |
499 } | |
500 } | |
7150 | 501 } |
7169 | 502 if ( name ) |
503 { | |
14156 | 504 mp_msg( MSGT_GPLAYER,MSGL_INFO,MSGTR_LoadingSubtitles,name ); |
15603
2d1ad16b6021
strdup subtitle filename at a more appropriate place, fixing memleaks and
reimar
parents:
14686
diff
changeset
|
505 subdata=sub_read_file( name, guiIntfStruct.FPS ); |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
506 if ( !subdata ) mp_msg( MSGT_GPLAYER,MSGL_ERR,MSGTR_CantLoadSub,name ); |
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
507 sub_name = (malloc(2 * sizeof(char*))); //when mplayer will be restarted |
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
508 sub_name[0] = strdup(name); //sub_name[0] will be read |
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
509 sub_name[1] = NULL; |
7169 | 510 } |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
511 update_set_of_subtitles(); |
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
512 |
7150 | 513 } |
514 | |
21428
47cc96df63d0
cosmetics: Rename functions and variable names from vop to vf.
diego
parents:
21227
diff
changeset
|
515 static void add_vf( char * str ) |
7009 | 516 { |
14156 | 517 mp_msg( MSGT_GPLAYER,MSGL_STATUS,MSGTR_AddingVideoFilter,str ); |
21429 | 518 if ( vf_settings ) |
7009 | 519 { |
520 int i = 0; | |
21429 | 521 while ( vf_settings[i].name ) if ( !gstrcmp( vf_settings[i++].name,str ) ) { i=-1; break; } |
7009 | 522 if ( i != -1 ) |
21429 | 523 { vf_settings=realloc( vf_settings,( i + 2 ) * sizeof( m_obj_settings_t ) ); vf_settings[i].name=strdup( str );vf_settings[i].attribs = NULL; vf_settings[i+1].name=NULL; } |
524 } else { vf_settings=malloc( 2 * sizeof( m_obj_settings_t ) ); vf_settings[0].name=strdup( str );vf_settings[0].attribs = NULL; vf_settings[1].name=NULL; } | |
7009 | 525 } |
526 | |
21428
47cc96df63d0
cosmetics: Rename functions and variable names from vop to vf.
diego
parents:
21227
diff
changeset
|
527 static void remove_vf( char * str ) |
7009 | 528 { |
529 int n = 0; | |
530 | |
21429 | 531 if ( !vf_settings ) return; |
7009 | 532 |
14156 | 533 mp_msg( MSGT_GPLAYER,MSGL_STATUS,MSGTR_RemovingVideoFilter,str ); |
7009 | 534 |
21429 | 535 while ( vf_settings[n++].name ); n--; |
7009 | 536 if ( n > -1 ) |
537 { | |
538 int i = 0,m = -1; | |
21429 | 539 while ( vf_settings[i].name ) if ( !gstrcmp( vf_settings[i++].name,str ) ) { m=i - 1; break; } |
7009 | 540 i--; |
541 if ( m > -1 ) | |
542 { | |
21429 | 543 if ( n == 1 ) { free( vf_settings[0].name );free( vf_settings[0].attribs ); free( vf_settings ); vf_settings=NULL; } |
544 else { free( vf_settings[i].name );free( vf_settings[i].attribs ); memcpy( &vf_settings[i],&vf_settings[i + 1],( n - i ) * sizeof( m_obj_settings_t ) ); } | |
7009 | 545 } |
546 } | |
547 } | |
548 | |
549 int guiGetEvent( int type,char * arg ) | |
4798 | 550 { |
22286 | 551 ao_functions_t *audio_out = NULL; |
552 vo_functions_t *video_out = NULL; | |
553 mixer_t *mixer = NULL; | |
554 | |
6280 | 555 stream_t * stream = (stream_t *) arg; |
5672
1f8b34f1e7c0
ifdef reading dvd args, without it non-dvd compilation fails.
eyck
parents:
5665
diff
changeset
|
556 #ifdef USE_DVDREAD |
5665 | 557 dvd_priv_t * dvdp = (dvd_priv_t *) arg; |
5672
1f8b34f1e7c0
ifdef reading dvd args, without it non-dvd compilation fails.
eyck
parents:
5665
diff
changeset
|
558 #endif |
6619
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
559 |
22286 | 560 if (guiIntfStruct.mpcontext) { |
561 audio_out = mpctx_get_audio_out(guiIntfStruct.mpcontext); | |
562 video_out = mpctx_get_video_out(guiIntfStruct.mpcontext); | |
563 mixer = mpctx_get_mixer(guiIntfStruct.mpcontext); | |
564 } | |
565 | |
4798 | 566 switch ( type ) |
567 { | |
568 case guiXEvent: | |
8973 | 569 guiIntfStruct.event_struct=(void *)arg; |
4798 | 570 wsEvents( wsDisplay,(XEvent *)arg,NULL ); |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
571 gtkEventHandling(); |
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
572 break; |
4798 | 573 case guiCEvent: |
4963 | 574 switch ( (int)arg ) |
575 { | |
9202 | 576 case guiSetPlay: |
577 guiIntfStruct.Playing=1; | |
11918
634a2b279b1a
'video window vanishes after pause' bugfix, based on Andr Khne's (andre.kuehne@gmx.net) bugreport
pontscho
parents:
11874
diff
changeset
|
578 // if ( !gtkShowVideoWindow ) wsVisibleWindow( &appMPlayer.subWindow,wsHideWindow ); |
9202 | 579 break; |
580 case guiSetStop: | |
581 guiIntfStruct.Playing=0; | |
12068 | 582 // if ( !gtkShowVideoWindow ) wsVisibleWindow( &appMPlayer.subWindow,wsHideWindow ); |
9202 | 583 break; |
8423 | 584 case guiSetPause: guiIntfStruct.Playing=2; break; |
4963 | 585 } |
8423 | 586 mplState(); |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
587 break; |
5665 | 588 case guiSetState: |
589 mplState(); | |
590 break; | |
591 case guiSetFileName: | |
592 if ( arg ) guiSetFilename( guiIntfStruct.Filename,arg ); | |
593 break; | |
5789 | 594 case guiSetAudioOnly: |
595 guiIntfStruct.AudioOnly=(int)arg; | |
7009 | 596 if ( (int)arg ) { guiIntfStruct.NoWindow=True; wsVisibleWindow( &appMPlayer.subWindow,wsHideWindow ); } |
5789 | 597 else wsVisibleWindow( &appMPlayer.subWindow,wsShowWindow ); |
598 break; | |
22286 | 599 case guiSetContext: |
600 guiIntfStruct.mpcontext=(void *)arg; | |
8312
ef8c992672f4
- audio track handling in menu (idea from Rdiger Kuhlmann)
pontscho
parents:
8311
diff
changeset
|
601 case guiSetDemuxer: |
ef8c992672f4
- audio track handling in menu (idea from Rdiger Kuhlmann)
pontscho
parents:
8311
diff
changeset
|
602 guiIntfStruct.demuxer=(void *)arg; |
ef8c992672f4
- audio track handling in menu (idea from Rdiger Kuhlmann)
pontscho
parents:
8311
diff
changeset
|
603 break; |
14254 | 604 case guiSetAfilter: |
605 guiIntfStruct.afilter=(void *)arg; | |
606 break; | |
5789 | 607 case guiSetShVideo: |
608 { | |
5986 | 609 if ( !appMPlayer.subWindow.isFullScreen ) |
610 { | |
611 wsResizeWindow( &appMPlayer.subWindow,vo_dwidth,vo_dheight ); | |
612 wsMoveWindow( &appMPlayer.subWindow,True,appMPlayer.sub.x,appMPlayer.sub.y ); | |
613 } | |
5955
caac20b1ca79
fix xmga fs, resize to movie size and mouse auto hide + dga
pontscho
parents:
5945
diff
changeset
|
614 guiIntfStruct.MovieWidth=vo_dwidth; |
5997
b5fb9a927bf3
add WM detection, and wm specific fullscreen code. (???)
pontscho
parents:
5986
diff
changeset
|
615 guiIntfStruct.MovieHeight=vo_dheight; |
9314
f38fe55d0e05
this patch adds the option -guiwid to gmplayer. I think its a more clean
arpi
parents:
9306
diff
changeset
|
616 if (guiWinID>=0) |
9306 | 617 wsMoveWindow( &appMPlayer.mainWindow,0,0, vo_dheight); |
5789 | 618 } |
619 break; | |
5665 | 620 #ifdef USE_DVDREAD |
621 case guiSetDVD: | |
622 guiIntfStruct.DVD.titles=dvdp->vmg_file->tt_srpt->nr_of_srpts; | |
623 guiIntfStruct.DVD.chapters=dvdp->vmg_file->tt_srpt->title[dvd_title].nr_of_ptts; | |
624 guiIntfStruct.DVD.angles=dvdp->vmg_file->tt_srpt->title[dvd_title].nr_of_angles; | |
625 guiIntfStruct.DVD.nr_of_audio_channels=dvdp->nr_of_channels; | |
626 memcpy( guiIntfStruct.DVD.audio_streams,dvdp->audio_streams,sizeof( dvdp->audio_streams ) ); | |
627 guiIntfStruct.DVD.nr_of_subtitles=dvdp->nr_of_subtitles; | |
628 memcpy( guiIntfStruct.DVD.subtitles,dvdp->subtitles,sizeof( dvdp->subtitles ) ); | |
629 guiIntfStruct.DVD.current_title=dvd_title + 1; | |
630 guiIntfStruct.DVD.current_chapter=dvd_chapter + 1; | |
631 guiIntfStruct.DVD.current_angle=dvd_angle + 1; | |
632 guiIntfStruct.Track=dvd_title + 1; | |
633 break; | |
634 #endif | |
6280 | 635 case guiSetStream: |
636 guiIntfStruct.StreamType=stream->type; | |
637 switch( stream->type ) | |
638 { | |
7150 | 639 #ifdef USE_DVDREAD |
6280 | 640 case STREAMTYPE_DVD: |
641 guiGetEvent( guiSetDVD,(char *)stream->priv ); | |
642 break; | |
7150 | 643 #endif |
6280 | 644 #ifdef HAVE_VCD |
645 case STREAMTYPE_VCD: | |
646 { | |
647 int i; | |
10696
73702d2f93ab
1000l. The vcd api changed and nobody updated the gui..
alex
parents:
10607
diff
changeset
|
648 |
73702d2f93ab
1000l. The vcd api changed and nobody updated the gui..
alex
parents:
10607
diff
changeset
|
649 if (!stream->priv) |
73702d2f93ab
1000l. The vcd api changed and nobody updated the gui..
alex
parents:
10607
diff
changeset
|
650 { |
73702d2f93ab
1000l. The vcd api changed and nobody updated the gui..
alex
parents:
10607
diff
changeset
|
651 guiIntfStruct.VCDTracks=0; |
73702d2f93ab
1000l. The vcd api changed and nobody updated the gui..
alex
parents:
10607
diff
changeset
|
652 break; |
73702d2f93ab
1000l. The vcd api changed and nobody updated the gui..
alex
parents:
10607
diff
changeset
|
653 } |
6280 | 654 for ( i=1;i < 100;i++ ) |
10696
73702d2f93ab
1000l. The vcd api changed and nobody updated the gui..
alex
parents:
10607
diff
changeset
|
655 if ( vcd_seek_to_track( stream->priv,i ) < 0 ) break; |
73702d2f93ab
1000l. The vcd api changed and nobody updated the gui..
alex
parents:
10607
diff
changeset
|
656 vcd_seek_to_track( stream->priv,vcd_track ); |
6280 | 657 guiIntfStruct.VCDTracks=--i; |
658 break; | |
659 } | |
660 #endif | |
7150 | 661 default: break; |
6280 | 662 } |
663 break; | |
4858 | 664 case guiIEvent: |
14148 | 665 mp_msg( MSGT_GPLAYER,MSGL_V,"cmd: %d\n",(int)arg ); |
4858 | 666 switch( (int)arg ) |
667 { | |
668 case MP_CMD_QUIT: | |
669 mplEventHandling( evExit,0 ); | |
670 break; | |
671 case MP_CMD_VO_FULLSCREEN: | |
672 mplEventHandling( evFullScreen,0 ); | |
673 break; | |
674 default: | |
675 mplEventHandling( guiCMDArray[ (int)arg - MP_CMD_GUI_EVENTS - 1 ],0 ); | |
676 } | |
677 break; | |
6619
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
678 case guiReDraw: |
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
679 mplEventHandling( evRedraw,0 ); |
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
680 break; |
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
681 case guiSetVolume: |
6903 | 682 if ( audio_out ) |
683 { | |
684 float l,r; | |
22286 | 685 mixer_getvolume( mixer,&l,&r ); |
6903 | 686 guiIntfStruct.Volume=(r>l?r:l); |
687 if ( r != l ) guiIntfStruct.Balance=( ( r - l ) + 100 ) * 0.5f; | |
688 else guiIntfStruct.Balance=50.0f; | |
689 btnModify( evSetVolume,guiIntfStruct.Volume ); | |
690 btnModify( evSetBalance,guiIntfStruct.Balance ); | |
691 } | |
692 break; | |
7009 | 693 case guiSetFileFormat: |
694 guiIntfStruct.FileFormat=(int)arg; | |
695 break; | |
6903 | 696 case guiSetValues: |
6912 | 697 // -- video |
7217 | 698 guiIntfStruct.sh_video=arg; |
6912 | 699 if ( arg ) |
700 { | |
7217 | 701 sh_video_t * sh = (sh_video_t *)arg; |
7150 | 702 guiIntfStruct.FPS=sh->fps; |
6912 | 703 } |
7009 | 704 |
705 if ( guiIntfStruct.NoWindow ) wsVisibleWindow( &appMPlayer.subWindow,wsHideWindow ); | |
8280
72700fefd3dc
no seeking if stream is STREAMTYPE_STREAM (net/stdin)
pontscho
parents:
8150
diff
changeset
|
706 |
8300 | 707 if ( guiIntfStruct.StreamType == STREAMTYPE_STREAM ) btnSet( evSetMoviePosition,btnDisabled ); |
708 else btnSet( evSetMoviePosition,btnReleased ); | |
8284 | 709 |
6794 | 710 // -- audio |
6619
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
711 if ( audio_out ) |
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
712 { |
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
713 float l,r; |
22286 | 714 mixer_getvolume( mixer,&l,&r ); |
6619
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
715 guiIntfStruct.Volume=(r>l?r:l); |
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
716 if ( r != l ) guiIntfStruct.Balance=( ( r - l ) + 100 ) * 0.5f; |
6627 | 717 else guiIntfStruct.Balance=50.0f; |
6619
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
718 btnModify( evSetVolume,guiIntfStruct.Volume ); |
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
719 btnModify( evSetBalance,guiIntfStruct.Balance ); |
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
720 } |
6627 | 721 |
722 if ( gtkEnableAudioEqualizer ) | |
723 { | |
724 equalizer_t eq; | |
725 int i,j; | |
726 for ( i=0;i<6;i++ ) | |
727 for ( j=0;j<10;j++ ) | |
728 { | |
729 eq.channel=i; eq.band=j; eq.gain=gtkEquChannels[i][j]; | |
730 gtkSet( gtkSetEqualizer,0,&eq ); | |
731 } | |
732 } | |
6794 | 733 // -- subtitle |
7009 | 734 #ifdef HAVE_DXR3 |
8043 | 735 if ( video_driver_list && !gstrcmp( video_driver_list[0],"dxr3" ) && guiIntfStruct.FileFormat != DEMUXER_TYPE_MPEG_PS |
736 #ifdef USE_LIBAVCODEC | |
21428
47cc96df63d0
cosmetics: Rename functions and variable names from vop to vf.
diego
parents:
21227
diff
changeset
|
737 && !gtkVfLAVC |
8043 | 738 #endif |
739 ) | |
7009 | 740 { |
20723 | 741 gtkMessageBox( GTK_MB_FATAL,MSGTR_NEEDLAVC ); |
7009 | 742 guiIntfStruct.Playing=0; |
743 return True; | |
744 } | |
745 #endif | |
6627 | 746 break; |
747 case guiSetDefaults: | |
9055 | 748 // if ( guiIntfStruct.Playing == 1 && guiIntfStruct.FilenameChanged ) |
749 if ( guiIntfStruct.FilenameChanged ) | |
8423 | 750 { |
751 audio_id=-1; | |
752 video_id=-1; | |
753 dvdsub_id=-1; | |
754 vobsub_id=-1; | |
755 stream_cache_size=-1; | |
756 autosync=0; | |
757 vcd_track=0; | |
758 dvd_title=0; | |
9055 | 759 force_fps=0; |
8423 | 760 } |
18076
d30afd14867f
Segfault fix, patch by Stanislav Maslovski stanislav POIS maslovski AH gmail POIS com
gpoirier
parents:
17974
diff
changeset
|
761 guiIntfStruct.demuxer=NULL; |
18533
6b92a27e247c
also set guiIntfStruct.sh_video to NULL for guiSetDefaults.
reimar
parents:
18076
diff
changeset
|
762 guiIntfStruct.sh_video=NULL; |
8423 | 763 wsPostRedisplay( &appMPlayer.subWindow ); |
764 break; | |
765 case guiSetParameters: | |
9055 | 766 guiGetEvent( guiSetDefaults,NULL ); |
8423 | 767 switch ( guiIntfStruct.StreamType ) |
768 { | |
769 case STREAMTYPE_PLAYLIST: | |
770 break; | |
771 #ifdef HAVE_VCD | |
772 case STREAMTYPE_VCD: | |
9812
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
773 { |
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
774 char tmp[512]; |
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
775 sprintf( tmp,"vcd://%d",guiIntfStruct.Track + 1 ); |
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
776 guiSetFilename( guiIntfStruct.Filename,tmp ); |
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
777 } |
8423 | 778 break; |
779 #endif | |
780 #ifdef USE_DVDREAD | |
781 case STREAMTYPE_DVD: | |
9812
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
782 { |
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
783 char tmp[512]; |
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
784 sprintf( tmp,"dvd://%d",guiIntfStruct.Title ); |
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
785 guiSetFilename( guiIntfStruct.Filename,tmp ); |
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
786 } |
8423 | 787 dvd_chapter=guiIntfStruct.Chapter; |
788 dvd_angle=guiIntfStruct.Angle; | |
789 break; | |
790 #endif | |
6794 | 791 } |
9291
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
792 //if ( guiIntfStruct.StreamType != STREAMTYPE_PLAYLIST ) // Does not make problems anymore! |
8423 | 793 { |
794 if ( guiIntfStruct.Filename ) filename=gstrdup( guiIntfStruct.Filename ); | |
795 else if ( filename ) guiSetFilename( guiIntfStruct.Filename,filename ); | |
796 } | |
7009 | 797 // --- video opts |
7019 | 798 |
7582 | 799 if ( !video_driver_list ) |
6794 | 800 { |
6797
06d29dbdf20d
upsz, sorry, i forgott this :) (skin name saving:)
pontscho
parents:
6794
diff
changeset
|
801 int i = 0; |
6903 | 802 while ( video_out_drivers[i++] ) |
803 if ( video_out_drivers[i - 1]->control( VOCTRL_GUISUPPORT,NULL ) == VO_TRUE ) | |
804 { | |
8150 | 805 gaddlist( &video_driver_list,(char *)video_out_drivers[i - 1]->info->short_name ); |
6903 | 806 break; |
807 } | |
6794 | 808 } |
809 | |
7582 | 810 if ( !video_driver_list && !video_driver_list[0] ) { gtkMessageBox( GTK_MB_FATAL,MSGTR_IDFGCVD ); exit_player( "gui init" ); } |
7009 | 811 |
812 { | |
813 int i = 0; | |
814 guiIntfStruct.NoWindow=False; | |
815 while ( video_out_drivers[i++] ) | |
816 if ( video_out_drivers[i - 1]->control( VOCTRL_GUISUPPORT,NULL ) == VO_TRUE ) | |
6794 | 817 { |
8150 | 818 if ( ( video_driver_list && !gstrcmp( video_driver_list[0],(char *)video_out_drivers[i - 1]->info->short_name ) )&&( video_out_drivers[i - 1]->control( VOCTRL_GUI_NOWINDOW,NULL ) == VO_TRUE ) ) |
7009 | 819 { guiIntfStruct.NoWindow=True; break; } |
6794 | 820 } |
7009 | 821 } |
822 | |
823 #ifdef HAVE_DXR3 | |
8043 | 824 #ifdef USE_LIBAVCODEC |
21428
47cc96df63d0
cosmetics: Rename functions and variable names from vop to vf.
diego
parents:
21227
diff
changeset
|
825 remove_vf( "lavc" ); |
8043 | 826 #endif |
7582 | 827 if ( video_driver_list && !gstrcmp( video_driver_list[0],"dxr3" ) ) |
7009 | 828 { |
829 if ( ( guiIntfStruct.StreamType != STREAMTYPE_DVD)&&( guiIntfStruct.StreamType != STREAMTYPE_VCD ) ) | |
830 { | |
8043 | 831 #ifdef USE_LIBAVCODEC |
21428
47cc96df63d0
cosmetics: Rename functions and variable names from vop to vf.
diego
parents:
21227
diff
changeset
|
832 if ( gtkVfLAVC ) add_vf( "lavc" ); |
8043 | 833 #endif |
7009 | 834 } |
835 } | |
836 #endif | |
837 // --- | |
21428
47cc96df63d0
cosmetics: Rename functions and variable names from vop to vf.
diego
parents:
21227
diff
changeset
|
838 if ( gtkVfPP ) add_vf( "pp" ); |
47cc96df63d0
cosmetics: Rename functions and variable names from vop to vf.
diego
parents:
21227
diff
changeset
|
839 else remove_vf( "pp" ); |
6794 | 840 |
841 // --- audio opts | |
7887
0e5544951425
A small patch to Gui/interface.c; the first fix is a plain bug, the second is
arpi
parents:
7707
diff
changeset
|
842 // if ( ao_plugin_cfg.plugin_list ) { free( ao_plugin_cfg.plugin_list ); ao_plugin_cfg.plugin_list=NULL; } |
14254 | 843 if (gtkAONorm) |
844 greplace(&af_cfg.list, "volnorm", "volnorm"); | |
845 if (gtkEnableAudioEqualizer) | |
846 greplace(&af_cfg.list, "equalizer", "equalizer"); | |
6794 | 847 if ( gtkAOExtraStereo ) |
848 { | |
14254 | 849 char *name = malloc(12 + 20 + 1); |
850 snprintf(name, 12 + 20, "extrastereo=%f", gtkAOExtraStereoMul); | |
851 name[12 + 20] = 0; | |
852 greplace(&af_cfg.list, "extrastereo", name); | |
853 free(name); | |
6794 | 854 } |
8600
54eac4cf587c
Lots of functions and variables specific to OSS audio are used without
arpi
parents:
8484
diff
changeset
|
855 #ifdef USE_OSS_AUDIO |
12918 | 856 if ( audio_driver_list && !gstrncmp( audio_driver_list[0],"oss",3 ) ) |
6794 | 857 { |
12918 | 858 char *tmp; |
859 mixer_device = gtkAOOSSMixer; | |
860 mixer_channel = gtkAOOSSMixerChannel; | |
861 if (gtkAOOSSDevice) { | |
862 tmp = calloc( 1,strlen( gtkAOOSSDevice ) + 7 ); | |
7019 | 863 sprintf( tmp,"oss:%s",gtkAOOSSDevice ); |
12918 | 864 } else |
14627 | 865 tmp = strdup("oss"); |
12918 | 866 gaddlist( &audio_driver_list,tmp ); |
14627 | 867 free(tmp); |
12918 | 868 } |
869 #endif | |
870 #if defined(HAVE_ALSA9) || defined (HAVE_ALSA1X) | |
871 if ( audio_driver_list && !gstrncmp( audio_driver_list[0],"alsa",4 ) ) | |
872 { | |
873 char *tmp; | |
874 mixer_device = gtkAOALSAMixer; | |
875 mixer_channel = gtkAOALSAMixerChannel; | |
876 if (gtkAOALSADevice) { | |
877 tmp = calloc( 1,strlen( gtkAOALSADevice ) + 14 ); | |
878 sprintf( tmp,"alsa:device=%s",gtkAOALSADevice ); | |
879 } else | |
14627 | 880 tmp = strdup("alsa"); |
7582 | 881 gaddlist( &audio_driver_list,tmp ); |
14627 | 882 free(tmp); |
7019 | 883 } |
8615 | 884 #endif |
8714
a88f827ec563
SDL Audio configure window from Filip Kalinski <filon@pld.org.pl>
pontscho
parents:
8635
diff
changeset
|
885 #ifdef HAVE_SDL |
12918 | 886 if ( audio_driver_list && !gstrncmp( audio_driver_list[0],"sdl",3 ) ) |
8714
a88f827ec563
SDL Audio configure window from Filip Kalinski <filon@pld.org.pl>
pontscho
parents:
8635
diff
changeset
|
887 { |
12918 | 888 char *tmp; |
889 if (gtkAOSDLDriver) { | |
890 tmp = calloc( 1,strlen( gtkAOSDLDriver ) + 10 ); | |
8714
a88f827ec563
SDL Audio configure window from Filip Kalinski <filon@pld.org.pl>
pontscho
parents:
8635
diff
changeset
|
891 sprintf( tmp,"sdl:%s",gtkAOSDLDriver ); |
12918 | 892 } else |
14627 | 893 tmp = strdup("sdl"); |
8714
a88f827ec563
SDL Audio configure window from Filip Kalinski <filon@pld.org.pl>
pontscho
parents:
8635
diff
changeset
|
894 gaddlist( &audio_driver_list,tmp ); |
14627 | 895 free(tmp); |
8714
a88f827ec563
SDL Audio configure window from Filip Kalinski <filon@pld.org.pl>
pontscho
parents:
8635
diff
changeset
|
896 } |
a88f827ec563
SDL Audio configure window from Filip Kalinski <filon@pld.org.pl>
pontscho
parents:
8635
diff
changeset
|
897 #endif |
14686
e2b2ab284a9a
ESD configuration dialog and software volume control option for Gui
reimar
parents:
14627
diff
changeset
|
898 #ifdef USE_ESD |
e2b2ab284a9a
ESD configuration dialog and software volume control option for Gui
reimar
parents:
14627
diff
changeset
|
899 if ( audio_driver_list && !gstrncmp( audio_driver_list[0],"esd",3 ) ) |
e2b2ab284a9a
ESD configuration dialog and software volume control option for Gui
reimar
parents:
14627
diff
changeset
|
900 { |
e2b2ab284a9a
ESD configuration dialog and software volume control option for Gui
reimar
parents:
14627
diff
changeset
|
901 char *tmp; |
e2b2ab284a9a
ESD configuration dialog and software volume control option for Gui
reimar
parents:
14627
diff
changeset
|
902 if (gtkAOESDDevice) { |
e2b2ab284a9a
ESD configuration dialog and software volume control option for Gui
reimar
parents:
14627
diff
changeset
|
903 tmp = calloc( 1,strlen( gtkAOESDDevice ) + 10 ); |
e2b2ab284a9a
ESD configuration dialog and software volume control option for Gui
reimar
parents:
14627
diff
changeset
|
904 sprintf( tmp,"esd:%s",gtkAOESDDevice ); |
e2b2ab284a9a
ESD configuration dialog and software volume control option for Gui
reimar
parents:
14627
diff
changeset
|
905 } else |
e2b2ab284a9a
ESD configuration dialog and software volume control option for Gui
reimar
parents:
14627
diff
changeset
|
906 tmp = strdup("esd"); |
e2b2ab284a9a
ESD configuration dialog and software volume control option for Gui
reimar
parents:
14627
diff
changeset
|
907 gaddlist( &audio_driver_list,tmp ); |
e2b2ab284a9a
ESD configuration dialog and software volume control option for Gui
reimar
parents:
14627
diff
changeset
|
908 free(tmp); |
e2b2ab284a9a
ESD configuration dialog and software volume control option for Gui
reimar
parents:
14627
diff
changeset
|
909 } |
e2b2ab284a9a
ESD configuration dialog and software volume control option for Gui
reimar
parents:
14627
diff
changeset
|
910 #endif |
6794 | 911 // -- subtitle |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
912 //subdata->filename=gstrdup( guiIntfStruct.Subtitlename ); |
6794 | 913 stream_dump_type=0; |
914 if ( gtkSubDumpMPSub ) stream_dump_type=4; | |
915 if ( gtkSubDumpSrt ) stream_dump_type=6; | |
916 gtkSubDumpMPSub=gtkSubDumpSrt=0; | |
917 guiLoadFont(); | |
6627 | 918 |
6794 | 919 // --- misc |
8423 | 920 if ( gtkCacheOn ) stream_cache_size=gtkCacheSize; |
8484 | 921 if ( gtkAutoSyncOn ) autosync=gtkAutoSync; |
8423 | 922 |
8484 | 923 if ( guiIntfStruct.AudioFile ) audio_stream=gstrdup( guiIntfStruct.AudioFile ); |
924 else if ( guiIntfStruct.FilenameChanged ) gfree( (void**)&audio_stream ); | |
925 //audio_stream=NULL; | |
6627 | 926 |
8423 | 927 guiIntfStruct.DiskChanged=0; |
928 guiIntfStruct.FilenameChanged=0; | |
929 guiIntfStruct.NewPlay=0; | |
930 | |
20424 | 931 #ifdef USE_ASS |
932 ass_enabled = gtkASS.enabled; | |
933 ass_use_margins = gtkASS.use_margins; | |
934 ass_top_margin = gtkASS.top_margin; | |
935 ass_bottom_margin = gtkASS.bottom_margin; | |
936 #endif | |
937 | |
6627 | 938 break; |
4798 | 939 } |
7009 | 940 return False; |
4798 | 941 } |
942 | |
943 void guiEventHandling( void ) | |
944 { | |
7009 | 945 if ( !guiIntfStruct.Playing || guiIntfStruct.NoWindow ) wsHandleEvents(); |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
946 gtkEventHandling(); |
4798 | 947 } |
6627 | 948 |
949 // --- | |
950 | |
951 float gtkEquChannels[6][10]; | |
952 | |
6713 | 953 plItem * plCurrent = NULL; |
954 plItem * plList = NULL; | |
955 plItem * plLastPlayed = NULL; | |
956 | |
7092
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
957 URLItem *URLList = NULL; |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
958 |
9055 | 959 char *fsHistory[fsPersistant_MaxPos] = { NULL,NULL,NULL,NULL,NULL }; |
960 | |
6713 | 961 #if defined( MP_DEBUG ) && 0 |
962 void list( void ) | |
6627 | 963 { |
6713 | 964 plItem * next = plList; |
965 printf( "--- list ---\n" ); | |
966 while( next || next->next ) | |
967 { | |
968 printf( "item: %s/%s\n",next->path,next->name ); | |
969 if ( next->next ) next=next->next; else break; | |
970 } | |
971 printf( "--- end of list ---\n" ); | |
972 } | |
973 #else | |
974 #define list(); | |
975 #endif | |
976 | |
977 void * gtkSet( int cmd,float fparam, void * vparam ) | |
978 { | |
6627 | 979 equalizer_t * eq = (equalizer_t *)vparam; |
6713 | 980 plItem * item = (plItem *)vparam; |
6627 | 981 |
7092
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
982 URLItem * url_item = (URLItem *)vparam; |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
983 int is_added = True; |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
984 |
6627 | 985 switch ( cmd ) |
986 { | |
6713 | 987 // --- handle playlist |
6755 | 988 case gtkAddPlItem: // add item to playlist |
6713 | 989 if ( plList ) |
990 { | |
991 plItem * next = plList; | |
992 while ( next->next ) { /*printf( "%s\n",next->name );*/ next=next->next; } | |
993 next->next=item; item->prev=next; | |
7092
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
994 } else { item->prev=item->next=NULL; plCurrent=plList=item; } |
6713 | 995 list(); |
996 return NULL; | |
9291
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
997 case gtkInsertPlItem: // add item into playlist after current |
6713 | 998 if ( plCurrent ) |
999 { | |
9291
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1000 plItem * curr = plCurrent; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1001 item->next=curr->next; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1002 if (item->next) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1003 item->next->prev=item; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1004 item->prev=curr; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1005 curr->next=item; |
6713 | 1006 plCurrent=plCurrent->next; |
9291
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1007 return plCurrent; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1008 } |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1009 else |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1010 return gtkSet(gtkAddPlItem,0,(void*)item); |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1011 return NULL; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1012 case gtkGetNextPlItem: // get current item from playlist |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1013 if ( plCurrent && plCurrent->next) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1014 { |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1015 plCurrent=plCurrent->next; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1016 /*if ( !plCurrent && plList ) |
6713 | 1017 { |
1018 plItem * next = plList; | |
1019 while ( next->next ) { if ( !next->next ) break; next=next->next; } | |
1020 plCurrent=next; | |
9291
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1021 }*/ |
6713 | 1022 return plCurrent; |
1023 } | |
1024 return NULL; | |
1025 case gtkGetPrevPlItem: | |
9291
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1026 if ( plCurrent && plCurrent->prev) |
6713 | 1027 { |
1028 plCurrent=plCurrent->prev; | |
9291
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1029 //if ( !plCurrent && plList ) plCurrent=plList; |
6713 | 1030 return plCurrent; |
1031 } | |
6794 | 1032 return NULL; |
9291
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1033 case gtkSetCurrPlItem: // set current item |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1034 plCurrent=item; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1035 return plCurrent; |
6713 | 1036 case gtkGetCurrPlItem: // get current item |
1037 return plCurrent; | |
9291
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1038 case gtkDelCurrPlItem: // delete current item |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1039 { |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1040 plItem * curr = plCurrent; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1041 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1042 if (!curr) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1043 return NULL; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1044 if (curr->prev) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1045 curr->prev->next=curr->next; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1046 if (curr->next) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1047 curr->next->prev=curr->prev; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1048 if (curr==plList) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1049 plList=curr->next; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1050 plCurrent=curr->next; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1051 // Free it |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1052 if ( curr->path ) free( curr->path ); |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1053 if ( curr->name ) free( curr->name ); |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1054 free( curr ); |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1055 } |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1056 mplCurr(); // Instead of using mplNext && mplPrev |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1057 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1058 return plCurrent; |
6713 | 1059 case gtkDelPl: // delete list |
1060 { | |
1061 plItem * curr = plList; | |
1062 plItem * next; | |
1063 if ( !plList ) return NULL; | |
1064 if ( !curr->next ) | |
1065 { | |
1066 if ( curr->path ) free( curr->path ); | |
1067 if ( curr->name ) free( curr->name ); | |
1068 free( curr ); | |
1069 } | |
1070 else | |
1071 { | |
1072 while ( curr->next ) | |
1073 { | |
1074 next=curr->next; | |
1075 if ( curr->path ) free( curr->path ); | |
1076 if ( curr->name ) free( curr->name ); | |
1077 free( curr ); | |
1078 curr=next; | |
1079 } | |
1080 } | |
1081 plList=NULL; plCurrent=NULL; | |
1082 } | |
1083 return NULL; | |
7092
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
1084 // ----- Handle url |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
1085 case gtkAddURLItem: |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
1086 if ( URLList ) |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
1087 { |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
1088 URLItem * next_url = URLList; |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
1089 is_added = False; |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
1090 while ( next_url->next ) |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
1091 { |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
1092 if ( !gstrcmp( next_url->url,url_item->url ) ) |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
1093 { |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
1094 is_added=True; |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
1095 break; |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
1096 } |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
1097 next_url=next_url->next; |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
1098 } |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
1099 if ( ( !is_added )&&( gstrcmp( next_url->url,url_item->url ) ) ) next_url->next=url_item; |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
1100 } else { url_item->next=NULL; URLList=url_item; } |
8e9607c5897e
- warning fixes from Dominik Mierzejewski <dominik@rangers.eu.org>
pontscho
parents:
7019
diff
changeset
|
1101 return NULL; |
6794 | 1102 // --- subtitle |
7139 | 1103 #ifndef HAVE_FREETYPE |
6794 | 1104 case gtkSetFontFactor: |
7019 | 1105 font_factor=fparam; |
6794 | 1106 guiLoadFont(); |
1107 return NULL; | |
7139 | 1108 #else |
1109 case gtkSetFontOutLine: | |
1110 subtitle_font_thickness=( 8.0f / 100.0f ) * fparam; | |
1111 guiLoadFont(); | |
1112 return NULL; | |
1113 case gtkSetFontBlur: | |
1114 subtitle_font_radius=( 8.0f / 100.0f ) * fparam; | |
1115 guiLoadFont(); | |
1116 return NULL; | |
1117 case gtkSetFontTextScale: | |
1118 text_font_scale_factor=fparam; | |
1119 guiLoadFont(); | |
1120 return NULL; | |
1121 case gtkSetFontOSDScale: | |
1122 osd_font_scale_factor=fparam; | |
1123 guiLoadFont(); | |
1124 return NULL; | |
1125 case gtkSetFontEncoding: | |
9056 | 1126 gfree( (void **)&subtitle_font_encoding ); |
7139 | 1127 subtitle_font_encoding=gstrdup( (char *)vparam ); |
1128 guiLoadFont(); | |
1129 return NULL; | |
1130 case gtkSetFontAutoScale: | |
1131 subtitle_autoscale=(int)fparam; | |
1132 guiLoadFont(); | |
1133 return NULL; | |
1134 #endif | |
9056 | 1135 #ifdef USE_ICONV |
1136 case gtkSetSubEncoding: | |
1137 gfree( (void **)&sub_cp ); | |
1138 sub_cp=gstrdup( (char *)vparam ); | |
1139 break; | |
6794 | 1140 #endif |
1141 // --- misc | |
1142 case gtkClearStruct: | |
7009 | 1143 if ( (unsigned int)vparam & guiFilenames ) |
6794 | 1144 { |
1145 gfree( (void **)&guiIntfStruct.Filename ); | |
1146 gfree( (void **)&guiIntfStruct.Subtitlename ); | |
1147 gfree( (void **)&guiIntfStruct.AudioFile ); | |
7009 | 1148 gtkSet( gtkDelPl,0,NULL ); |
6794 | 1149 } |
1150 #ifdef USE_DVDREAD | |
7009 | 1151 if ( (unsigned int)vparam & guiDVD ) memset( &guiIntfStruct.DVD,0,sizeof( guiDVDStruct ) ); |
6794 | 1152 #endif |
1153 #ifdef HAVE_VCD | |
7009 | 1154 if ( (unsigned int)vparam & guiVCD ) guiIntfStruct.VCDTracks=0; |
6794 | 1155 #endif |
1156 return NULL; | |
1157 case gtkSetExtraStereo: | |
1158 gtkAOExtraStereoMul=fparam; | |
14254 | 1159 if (guiIntfStruct.afilter) |
1160 af_control_any_rev(guiIntfStruct.afilter, | |
1161 AF_CONTROL_ES_MUL | AF_CONTROL_SET, >kAOExtraStereoMul); | |
6794 | 1162 return NULL; |
1163 case gtkSetPanscan: | |
7217 | 1164 { |
1165 mp_cmd_t * mp_cmd; | |
19061
86350b4b8203
drops casts from void * on malloc/calloc from the gui code
reynaldo
parents:
18743
diff
changeset
|
1166 mp_cmd=calloc( 1,sizeof( *mp_cmd ) ); |
7217 | 1167 mp_cmd->id=MP_CMD_PANSCAN; mp_cmd->name=strdup( "panscan" ); |
1168 mp_cmd->args[0].v.f=fparam; mp_cmd->args[1].v.i=1; | |
1169 mp_input_queue_cmd( mp_cmd ); | |
1170 } | |
6794 | 1171 return NULL; |
1172 case gtkSetAutoq: | |
7019 | 1173 auto_quality=(int)fparam; |
6794 | 1174 return NULL; |
6713 | 1175 // --- set equalizers |
6627 | 1176 case gtkSetContrast: |
7217 | 1177 if ( guiIntfStruct.sh_video ) set_video_colors( guiIntfStruct.sh_video,"contrast",(int)fparam ); |
1178 return NULL; | |
6627 | 1179 case gtkSetBrightness: |
7217 | 1180 if ( guiIntfStruct.sh_video ) set_video_colors( guiIntfStruct.sh_video,"brightness",(int)fparam ); |
1181 return NULL; | |
6627 | 1182 case gtkSetHue: |
7217 | 1183 if ( guiIntfStruct.sh_video ) set_video_colors( guiIntfStruct.sh_video,"hue",(int)fparam ); |
1184 return NULL; | |
6627 | 1185 case gtkSetSaturation: |
7217 | 1186 if ( guiIntfStruct.sh_video ) set_video_colors( guiIntfStruct.sh_video,"saturation",(int)fparam ); |
1187 return NULL; | |
6627 | 1188 case gtkSetEqualizer: |
14254 | 1189 { |
1190 af_control_ext_t tmp; | |
6627 | 1191 if ( eq ) |
1192 { | |
1193 gtkEquChannels[eq->channel][eq->band]=eq->gain; | |
14254 | 1194 tmp.ch = eq->channel; |
1195 tmp.arg = gtkEquChannels[eq->channel]; | |
1196 if (guiIntfStruct.afilter) | |
1197 af_control_any_rev(guiIntfStruct.afilter, | |
1198 AF_CONTROL_EQUALIZER_GAIN | AF_CONTROL_SET, &tmp); | |
6627 | 1199 } |
1200 else | |
1201 { | |
14254 | 1202 int i; |
6627 | 1203 memset( gtkEquChannels,0,sizeof( gtkEquChannels ) ); |
14254 | 1204 if (guiIntfStruct.afilter) |
6627 | 1205 for ( i=0;i<6;i++ ) |
14254 | 1206 { |
1207 tmp.ch = i; | |
1208 tmp.arg = gtkEquChannels[i]; | |
1209 af_control_any_rev(guiIntfStruct.afilter, | |
1210 AF_CONTROL_EQUALIZER_GAIN | AF_CONTROL_SET, &tmp); | |
1211 } | |
6627 | 1212 } |
6713 | 1213 return NULL; |
14254 | 1214 } |
6627 | 1215 } |
6713 | 1216 return NULL; |
6627 | 1217 } |
9291
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1218 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1219 #define mp_basename(s) (strrchr(s,'/')==NULL?(char*)s:(strrchr(s,'/')+1)) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1220 |
17144 | 1221 #include "playtree.h" |
9291
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1222 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1223 //This function adds/inserts one file into the gui playlist |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1224 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1225 int import_file_into_gui(char* temp, int insert) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1226 { |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1227 char *filename, *pathname; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1228 plItem * item; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1229 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1230 filename = strdup(mp_basename(temp)); |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1231 pathname = strdup(temp); |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1232 if (strlen(pathname)-strlen(filename)>0) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1233 pathname[strlen(pathname)-strlen(filename)-1]='\0'; // We have some path so remove / at end |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1234 else |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1235 pathname[strlen(pathname)-strlen(filename)]='\0'; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1236 mp_msg(MSGT_PLAYTREE,MSGL_V, "Adding filename %s && pathname %s\n",filename,pathname); //FIXME: Change to MSGL_DBG2 ? |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1237 item=calloc( 1,sizeof( plItem ) ); |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1238 if (!item) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1239 return 0; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1240 item->name=filename; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1241 item->path=pathname; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1242 if (insert) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1243 gtkSet( gtkInsertPlItem,0,(void*)item ); // Inserts the item after current, and makes current=item |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1244 else |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1245 gtkSet( gtkAddPlItem,0,(void*)item ); |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1246 return 1; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1247 } |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1248 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1249 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1250 // This function imports the initial playtree (based on cmd-line files) into the gui playlist |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1251 // by either: |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1252 // - overwriting gui pl (enqueue=0) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1253 // - appending it to gui pl (enqueue=1) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1254 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1255 int import_initial_playtree_into_gui(play_tree_t* my_playtree, m_config_t* config, int enqueue) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1256 { |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1257 play_tree_iter_t* my_pt_iter=NULL; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1258 int result=0; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1259 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1260 if (!enqueue) // Delete playlist before "appending" |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1261 gtkSet(gtkDelPl,0,0); |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1262 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1263 if((my_pt_iter=pt_iter_create(&my_playtree,config))) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1264 { |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1265 while ((filename=pt_iter_get_next_file(my_pt_iter))!=NULL) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1266 { |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1267 if (import_file_into_gui(filename, 0)) // Add it to end of list |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1268 result=1; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1269 } |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1270 } |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1271 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1272 mplCurr(); // Update filename |
10193 | 1273 mplGotoTheNext=1; |
9291
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1274 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1275 if (!enqueue) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1276 filename=guiIntfStruct.Filename; // Backward compatibility; if file is specified on commandline, |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1277 // gmplayer does directly start in Play-Mode. |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1278 else |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1279 filename=NULL; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1280 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1281 return result; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1282 } |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1283 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1284 // This function imports and inserts an playtree, that is created "on the fly", for example by |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1285 // parsing some MOV-Reference-File; or by loading an playlist with "File Open" |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1286 // |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1287 // The file which contained the playlist is thereby replaced with it's contents. |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1288 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1289 int import_playtree_playlist_into_gui(play_tree_t* my_playtree, m_config_t* config) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1290 { |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1291 play_tree_iter_t* my_pt_iter=NULL; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1292 int result=0; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1293 plItem * save=(plItem*)gtkSet( gtkGetCurrPlItem, 0, 0); // Save current item |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1294 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1295 if((my_pt_iter=pt_iter_create(&my_playtree,config))) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1296 { |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1297 while ((filename=pt_iter_get_next_file(my_pt_iter))!=NULL) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1298 { |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1299 if (import_file_into_gui(filename, 1)) // insert it into the list and set plCurrent=new item |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1300 result=1; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1301 } |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1302 pt_iter_destroy(&my_pt_iter); |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1303 } |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1304 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1305 if (save) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1306 gtkSet(gtkSetCurrPlItem, 0, (void*)save); |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1307 else |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1308 gtkSet(gtkSetCurrPlItem, 0, (void*)plList); // go to head, if plList was empty before |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1309 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1310 if (save && result) |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1311 gtkSet(gtkDelCurrPlItem, 0, 0); |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1312 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1313 mplCurr(); // Update filename |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1314 filename=NULL; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1315 |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1316 return result; |
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
1317 } |
16374
e2e231134056
Remove many annoying GTK includes in every compile line and remove GTK
ods15
parents:
15603
diff
changeset
|
1318 |
e2e231134056
Remove many annoying GTK includes in every compile line and remove GTK
ods15
parents:
15603
diff
changeset
|
1319 // wrapper function for mp_msg to display a message box for errors and warnings. |
e2e231134056
Remove many annoying GTK includes in every compile line and remove GTK
ods15
parents:
15603
diff
changeset
|
1320 |
e2e231134056
Remove many annoying GTK includes in every compile line and remove GTK
ods15
parents:
15603
diff
changeset
|
1321 void guiMessageBox(int level, char * str) { |
e2e231134056
Remove many annoying GTK includes in every compile line and remove GTK
ods15
parents:
15603
diff
changeset
|
1322 switch(level) { |
e2e231134056
Remove many annoying GTK includes in every compile line and remove GTK
ods15
parents:
15603
diff
changeset
|
1323 case MSGL_FATAL: |
e2e231134056
Remove many annoying GTK includes in every compile line and remove GTK
ods15
parents:
15603
diff
changeset
|
1324 gtkMessageBox(GTK_MB_FATAL|GTK_MB_SIMPLE, str); |
e2e231134056
Remove many annoying GTK includes in every compile line and remove GTK
ods15
parents:
15603
diff
changeset
|
1325 break; |
e2e231134056
Remove many annoying GTK includes in every compile line and remove GTK
ods15
parents:
15603
diff
changeset
|
1326 case MSGL_ERR: |
e2e231134056
Remove many annoying GTK includes in every compile line and remove GTK
ods15
parents:
15603
diff
changeset
|
1327 gtkMessageBox(GTK_MB_ERROR|GTK_MB_SIMPLE, str); |
e2e231134056
Remove many annoying GTK includes in every compile line and remove GTK
ods15
parents:
15603
diff
changeset
|
1328 break; |
e2e231134056
Remove many annoying GTK includes in every compile line and remove GTK
ods15
parents:
15603
diff
changeset
|
1329 #if 0 |
e2e231134056
Remove many annoying GTK includes in every compile line and remove GTK
ods15
parents:
15603
diff
changeset
|
1330 // WARNING! Do NOT enable this! There are too many non-critical messages with |
e2e231134056
Remove many annoying GTK includes in every compile line and remove GTK
ods15
parents:
15603
diff
changeset
|
1331 // MSGL_WARN, for example: broken SPU packets, codec's bit error messages, |
e2e231134056
Remove many annoying GTK includes in every compile line and remove GTK
ods15
parents:
15603
diff
changeset
|
1332 // etc etc, they should not raise up a new window every time. |
e2e231134056
Remove many annoying GTK includes in every compile line and remove GTK
ods15
parents:
15603
diff
changeset
|
1333 case MSGL_WARN: |
e2e231134056
Remove many annoying GTK includes in every compile line and remove GTK
ods15
parents:
15603
diff
changeset
|
1334 gtkMessageBox(GTK_MB_WARNING|GTK_MB_SIMPLE, str); |
e2e231134056
Remove many annoying GTK includes in every compile line and remove GTK
ods15
parents:
15603
diff
changeset
|
1335 break; |
e2e231134056
Remove many annoying GTK includes in every compile line and remove GTK
ods15
parents:
15603
diff
changeset
|
1336 #endif |
e2e231134056
Remove many annoying GTK includes in every compile line and remove GTK
ods15
parents:
15603
diff
changeset
|
1337 } |
e2e231134056
Remove many annoying GTK includes in every compile line and remove GTK
ods15
parents:
15603
diff
changeset
|
1338 } |