Mercurial > mplayer.hg
annotate Gui/interface.c @ 20997:425ff58ad31b
Move xvid 'grayscale' option close to 'interlacing'
author | gpoirier |
---|---|
date | Sat, 18 Nov 2006 12:26:04 +0000 |
parents | 18ba5bc68f40 |
children | b42f1c1ef651 |
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" |
15 #include "mplayer/mplayer.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" |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
19 #include "app.h" |
6794 | 20 #include "cfg.h" |
17144 | 21 #include "help_mp.h" |
22 #include "subreader.h" | |
23 #include "libvo/x11_common.h" | |
24 #include "libvo/video_out.h" | |
25 #include "libvo/font_load.h" | |
26 #include "libvo/sub.h" | |
27 #include "input/input.h" | |
28 #include "libao2/audio_out.h" | |
29 #include "mixer.h" | |
30 #include "libaf/af.h" | |
31 #include "libaf/equalizer.h" | |
5789 | 32 |
14254 | 33 extern af_cfg_t af_cfg; |
34 | |
6996 | 35 #ifdef USE_ICONV |
7128 | 36 #include <iconv.h> |
6996 | 37 #endif |
38 | |
19274
e579e74d6c3c
fix includes due to libmpdemux split (patch by Stefan Huehner)
ben
parents:
19081
diff
changeset
|
39 #include "stream/stream.h" |
17144 | 40 #include "libmpdemux/demuxer.h" |
41 #include "libmpdemux/stheader.h" | |
42 #include "libmpcodecs/dec_video.h" | |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
43 |
18682
bee3186a06f7
include stream_dvd's interface from libmpdemux/stream_dvd.h
nicodvb
parents:
18533
diff
changeset
|
44 #ifdef USE_DVDREAD |
19274
e579e74d6c3c
fix includes due to libmpdemux split (patch by Stefan Huehner)
ben
parents:
19081
diff
changeset
|
45 #include "stream/stream_dvd.h" |
18682
bee3186a06f7
include stream_dvd's interface from libmpdemux/stream_dvd.h
nicodvb
parents:
18533
diff
changeset
|
46 #endif |
bee3186a06f7
include stream_dvd's interface from libmpdemux/stream_dvd.h
nicodvb
parents:
18533
diff
changeset
|
47 |
bee3186a06f7
include stream_dvd's interface from libmpdemux/stream_dvd.h
nicodvb
parents:
18533
diff
changeset
|
48 |
17144 | 49 #include "m_config.h" |
50 #include "m_option.h" | |
9623
20f0a254142d
bugfix from Raindel Shachar <raindel@techunix.technion.ac.il>
pontscho
parents:
9314
diff
changeset
|
51 |
12691
0230544f52a1
Fix GUI compilation, patch by Reimar Dffinger and Alexander Strasser.
diego
parents:
12646
diff
changeset
|
52 extern mixer_t mixer; // mixer from mplayer.c |
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 #if defined( USE_OSD ) || defined( USE_SUB ) |
06d29dbdf20d
upsz, sorry, i forgott this :) (skin name saving:)
pontscho
parents:
6794
diff
changeset
|
384 guiLoadFont(); |
06d29dbdf20d
upsz, sorry, i forgott this :) (skin name saving:)
pontscho
parents:
6794
diff
changeset
|
385 #endif |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
386 } |
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
387 |
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
388 void guiDone( void ) |
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
389 { |
8883 | 390 mplMainRender=0; |
14156 | 391 mp_msg( MSGT_GPLAYER,MSGL_V,"[GUI] done.\n" ); |
9625 | 392 |
393 if ( gui_save_pos ) | |
394 { | |
395 gui_main_pos_x=appMPlayer.mainWindow.X; gui_main_pos_y=appMPlayer.mainWindow.Y; | |
396 gui_sub_pos_x=appMPlayer.subWindow.X; gui_sub_pos_y=appMPlayer.subWindow.Y; | |
397 } | |
20424 | 398 |
399 #ifdef USE_ASS | |
400 ass_enabled = gtkASS.enabled; | |
401 ass_use_margins = gtkASS.use_margins; | |
402 ass_top_margin = gtkASS.top_margin; | |
403 ass_bottom_margin = gtkASS.bottom_margin; | |
404 #endif | |
9625 | 405 |
6794 | 406 cfg_write(); |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
407 wsXDone(); |
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
408 } |
4798 | 409 |
4858 | 410 int guiCMDArray[] = |
411 { | |
8883 | 412 evLoadPlay, |
4858 | 413 evLoadSubtitle, |
414 evAbout, | |
415 evPlay, | |
416 evStop, | |
417 evPlayList, | |
418 evPreferences, | |
419 evFullScreen, | |
420 evSkinBrowser | |
421 }; | |
422 | |
6619
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
423 extern ao_functions_t * audio_out; |
6755 | 424 extern vo_functions_t * video_out; |
6794 | 425 extern int frame_dropping; |
426 extern int stream_dump_type; | |
9812
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
427 extern int vcd_track; |
9623
20f0a254142d
bugfix from Raindel Shachar <raindel@techunix.technion.ac.il>
pontscho
parents:
9314
diff
changeset
|
428 extern m_obj_settings_t*vo_plugin_args; |
6794 | 429 |
430 #if defined( USE_OSD ) || defined( USE_SUB ) | |
431 void guiLoadFont( void ) | |
432 { | |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
7111
diff
changeset
|
433 #ifdef HAVE_FREETYPE |
8635
81dbd28ef7c0
these patches let ,,oldstyle'' and freetype subtitle renderers live
arpi
parents:
8615
diff
changeset
|
434 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
|
435 #else |
6794 | 436 if ( vo_font ) |
437 { | |
438 int i; | |
439 if ( vo_font->name ) free( vo_font->name ); | |
440 if ( vo_font->fpath ) free( vo_font->fpath ); | |
441 for ( i=0;i<16;i++ ) | |
442 if ( vo_font->pic_a[i] ) | |
443 { | |
444 if ( vo_font->pic_a[i]->bmp ) free( vo_font->pic_a[i]->bmp ); | |
445 if ( vo_font->pic_a[i]->pal ) free( vo_font->pic_a[i]->pal ); | |
446 } | |
447 for ( i=0;i<16;i++ ) | |
448 if ( vo_font->pic_b[i] ) | |
449 { | |
450 if ( vo_font->pic_b[i]->bmp ) free( vo_font->pic_b[i]->bmp ); | |
451 if ( vo_font->pic_b[i]->pal ) free( vo_font->pic_b[i]->pal ); | |
452 } | |
453 free( vo_font ); vo_font=NULL; | |
454 } | |
7019 | 455 if ( font_name ) |
6794 | 456 { |
7019 | 457 vo_font=read_font_desc( font_name,font_factor,0 ); |
6794 | 458 if ( !vo_font ) mp_msg( MSGT_CPLAYER,MSGL_ERR,MSGTR_CantLoadFont,font_name ); |
459 } | |
460 else | |
461 { | |
7019 | 462 font_name=gstrdup( get_path( "font/font.desc" ) ); |
463 vo_font=read_font_desc( font_name,font_factor,0 ); | |
6794 | 464 if ( !vo_font ) |
465 { | |
10272
7b0bc557987b
renames: DATADIR->MPLAYER_DATADIR, CONFDIR->MPLAYER_CONFDIR, LIBDIR->MPLAYER_LIBDIR
arpi
parents:
10193
diff
changeset
|
466 gfree( (void **)&font_name ); font_name=gstrdup(MPLAYER_DATADIR "/font/font.desc" ); |
7019 | 467 vo_font=read_font_desc( font_name,font_factor,0 ); |
6794 | 468 } |
469 } | |
7122
0dc9cb756b68
freetype 2.0/2.1+ support - disabled by default until bugs fixed
arpi
parents:
7111
diff
changeset
|
470 #endif |
6794 | 471 } |
472 #endif | |
6619
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
473 |
7150 | 474 #ifdef USE_SUB |
7169 | 475 extern mp_osd_obj_t* vo_osd_list; |
476 | |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
477 extern char **sub_name; |
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
478 |
7150 | 479 void guiLoadSubtitle( char * name ) |
480 { | |
481 if ( guiIntfStruct.Playing == 0 ) | |
482 { | |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
483 guiIntfStruct.SubtitleChanged=1; //what is this for? (mw) |
7150 | 484 return; |
485 } | |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
486 if ( subdata ) |
7150 | 487 { |
14156 | 488 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
|
489 sub_free( subdata ); |
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
490 subdata=NULL; |
7150 | 491 vo_sub=NULL; |
7169 | 492 if ( vo_osd_list ) |
493 { | |
494 int len; | |
495 mp_osd_obj_t * osd = vo_osd_list; | |
496 while ( osd ) | |
497 { | |
498 if ( osd->type == OSDTYPE_SUBTITLE ) break; | |
499 osd=osd->next; | |
500 } | |
501 if ( osd && osd->flags&OSDFLAG_VISIBLE ) | |
502 { | |
503 len=osd->stride * ( osd->bbox.y2 - osd->bbox.y1 ); | |
504 memset( osd->bitmap_buffer,0,len ); | |
505 memset( osd->alpha_buffer,0,len ); | |
506 } | |
507 } | |
7150 | 508 } |
7169 | 509 if ( name ) |
510 { | |
14156 | 511 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
|
512 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
|
513 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
|
514 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
|
515 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
|
516 sub_name[1] = NULL; |
7169 | 517 } |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
518 update_set_of_subtitles(); |
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
519 |
7150 | 520 } |
521 #endif | |
522 | |
7009 | 523 static void add_vop( char * str ) |
524 { | |
14156 | 525 mp_msg( MSGT_GPLAYER,MSGL_STATUS,MSGTR_AddingVideoFilter,str ); |
7009 | 526 if ( vo_plugin_args ) |
527 { | |
528 int i = 0; | |
9623
20f0a254142d
bugfix from Raindel Shachar <raindel@techunix.technion.ac.il>
pontscho
parents:
9314
diff
changeset
|
529 while ( vo_plugin_args[i].name ) if ( !gstrcmp( vo_plugin_args[i++].name,str ) ) { i=-1; break; } |
7009 | 530 if ( i != -1 ) |
9623
20f0a254142d
bugfix from Raindel Shachar <raindel@techunix.technion.ac.il>
pontscho
parents:
9314
diff
changeset
|
531 { vo_plugin_args=realloc( vo_plugin_args,( i + 2 ) * sizeof( m_obj_settings_t ) ); vo_plugin_args[i].name=strdup( str );vo_plugin_args[i].attribs = NULL; vo_plugin_args[i+1].name=NULL; } |
20f0a254142d
bugfix from Raindel Shachar <raindel@techunix.technion.ac.il>
pontscho
parents:
9314
diff
changeset
|
532 } else { vo_plugin_args=malloc( 2 * sizeof( m_obj_settings_t ) ); vo_plugin_args[0].name=strdup( str );vo_plugin_args[0].attribs = NULL; vo_plugin_args[1].name=NULL; } |
7009 | 533 } |
534 | |
535 static void remove_vop( char * str ) | |
536 { | |
537 int n = 0; | |
538 | |
539 if ( !vo_plugin_args ) return; | |
540 | |
14156 | 541 mp_msg( MSGT_GPLAYER,MSGL_STATUS,MSGTR_RemovingVideoFilter,str ); |
7009 | 542 |
9623
20f0a254142d
bugfix from Raindel Shachar <raindel@techunix.technion.ac.il>
pontscho
parents:
9314
diff
changeset
|
543 while ( vo_plugin_args[n++].name ); n--; |
7009 | 544 if ( n > -1 ) |
545 { | |
546 int i = 0,m = -1; | |
9623
20f0a254142d
bugfix from Raindel Shachar <raindel@techunix.technion.ac.il>
pontscho
parents:
9314
diff
changeset
|
547 while ( vo_plugin_args[i].name ) if ( !gstrcmp( vo_plugin_args[i++].name,str ) ) { m=i - 1; break; } |
7009 | 548 i--; |
549 if ( m > -1 ) | |
550 { | |
9623
20f0a254142d
bugfix from Raindel Shachar <raindel@techunix.technion.ac.il>
pontscho
parents:
9314
diff
changeset
|
551 if ( n == 1 ) { free( vo_plugin_args[0].name );free( vo_plugin_args[0].attribs ); free( vo_plugin_args ); vo_plugin_args=NULL; } |
20f0a254142d
bugfix from Raindel Shachar <raindel@techunix.technion.ac.il>
pontscho
parents:
9314
diff
changeset
|
552 else { free( vo_plugin_args[i].name );free( vo_plugin_args[i].attribs ); memcpy( &vo_plugin_args[i],&vo_plugin_args[i + 1],( n - i ) * sizeof( m_obj_settings_t ) ); } |
7009 | 553 } |
554 } | |
555 } | |
556 | |
557 int guiGetEvent( int type,char * arg ) | |
4798 | 558 { |
6280 | 559 stream_t * stream = (stream_t *) arg; |
5672
1f8b34f1e7c0
ifdef reading dvd args, without it non-dvd compilation fails.
eyck
parents:
5665
diff
changeset
|
560 #ifdef USE_DVDREAD |
5665 | 561 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
|
562 #endif |
6619
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
563 |
4798 | 564 switch ( type ) |
565 { | |
566 case guiXEvent: | |
8973 | 567 guiIntfStruct.event_struct=(void *)arg; |
4798 | 568 wsEvents( wsDisplay,(XEvent *)arg,NULL ); |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
569 gtkEventHandling(); |
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
570 break; |
4798 | 571 case guiCEvent: |
4963 | 572 switch ( (int)arg ) |
573 { | |
9202 | 574 case guiSetPlay: |
575 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
|
576 // if ( !gtkShowVideoWindow ) wsVisibleWindow( &appMPlayer.subWindow,wsHideWindow ); |
9202 | 577 break; |
578 case guiSetStop: | |
579 guiIntfStruct.Playing=0; | |
12068 | 580 // if ( !gtkShowVideoWindow ) wsVisibleWindow( &appMPlayer.subWindow,wsHideWindow ); |
9202 | 581 break; |
8423 | 582 case guiSetPause: guiIntfStruct.Playing=2; break; |
4963 | 583 } |
8423 | 584 mplState(); |
4818
3473ca9ef158
new gui interface, and gtk moved into mplayer process. fork ... bleh :)
pontscho
parents:
4798
diff
changeset
|
585 break; |
5665 | 586 case guiSetState: |
587 mplState(); | |
588 break; | |
589 case guiSetFileName: | |
590 if ( arg ) guiSetFilename( guiIntfStruct.Filename,arg ); | |
591 break; | |
5789 | 592 case guiSetAudioOnly: |
593 guiIntfStruct.AudioOnly=(int)arg; | |
7009 | 594 if ( (int)arg ) { guiIntfStruct.NoWindow=True; wsVisibleWindow( &appMPlayer.subWindow,wsHideWindow ); } |
5789 | 595 else wsVisibleWindow( &appMPlayer.subWindow,wsShowWindow ); |
596 break; | |
8312
ef8c992672f4
- audio track handling in menu (idea from Rdiger Kuhlmann)
pontscho
parents:
8311
diff
changeset
|
597 case guiSetDemuxer: |
ef8c992672f4
- audio track handling in menu (idea from Rdiger Kuhlmann)
pontscho
parents:
8311
diff
changeset
|
598 guiIntfStruct.demuxer=(void *)arg; |
ef8c992672f4
- audio track handling in menu (idea from Rdiger Kuhlmann)
pontscho
parents:
8311
diff
changeset
|
599 break; |
14254 | 600 case guiSetAfilter: |
601 guiIntfStruct.afilter=(void *)arg; | |
602 break; | |
5789 | 603 case guiSetShVideo: |
604 { | |
5986 | 605 if ( !appMPlayer.subWindow.isFullScreen ) |
606 { | |
607 wsResizeWindow( &appMPlayer.subWindow,vo_dwidth,vo_dheight ); | |
608 wsMoveWindow( &appMPlayer.subWindow,True,appMPlayer.sub.x,appMPlayer.sub.y ); | |
609 } | |
5955
caac20b1ca79
fix xmga fs, resize to movie size and mouse auto hide + dga
pontscho
parents:
5945
diff
changeset
|
610 guiIntfStruct.MovieWidth=vo_dwidth; |
5997
b5fb9a927bf3
add WM detection, and wm specific fullscreen code. (???)
pontscho
parents:
5986
diff
changeset
|
611 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
|
612 if (guiWinID>=0) |
9306 | 613 wsMoveWindow( &appMPlayer.mainWindow,0,0, vo_dheight); |
5789 | 614 } |
615 break; | |
5665 | 616 #ifdef USE_DVDREAD |
617 case guiSetDVD: | |
618 guiIntfStruct.DVD.titles=dvdp->vmg_file->tt_srpt->nr_of_srpts; | |
619 guiIntfStruct.DVD.chapters=dvdp->vmg_file->tt_srpt->title[dvd_title].nr_of_ptts; | |
620 guiIntfStruct.DVD.angles=dvdp->vmg_file->tt_srpt->title[dvd_title].nr_of_angles; | |
621 guiIntfStruct.DVD.nr_of_audio_channels=dvdp->nr_of_channels; | |
622 memcpy( guiIntfStruct.DVD.audio_streams,dvdp->audio_streams,sizeof( dvdp->audio_streams ) ); | |
623 guiIntfStruct.DVD.nr_of_subtitles=dvdp->nr_of_subtitles; | |
624 memcpy( guiIntfStruct.DVD.subtitles,dvdp->subtitles,sizeof( dvdp->subtitles ) ); | |
625 guiIntfStruct.DVD.current_title=dvd_title + 1; | |
626 guiIntfStruct.DVD.current_chapter=dvd_chapter + 1; | |
627 guiIntfStruct.DVD.current_angle=dvd_angle + 1; | |
628 guiIntfStruct.Track=dvd_title + 1; | |
629 break; | |
630 #endif | |
6280 | 631 case guiSetStream: |
632 guiIntfStruct.StreamType=stream->type; | |
633 switch( stream->type ) | |
634 { | |
7150 | 635 #ifdef USE_DVDREAD |
6280 | 636 case STREAMTYPE_DVD: |
637 guiGetEvent( guiSetDVD,(char *)stream->priv ); | |
638 break; | |
7150 | 639 #endif |
6280 | 640 #ifdef HAVE_VCD |
641 case STREAMTYPE_VCD: | |
642 { | |
643 int i; | |
10696
73702d2f93ab
1000l. The vcd api changed and nobody updated the gui..
alex
parents:
10607
diff
changeset
|
644 |
73702d2f93ab
1000l. The vcd api changed and nobody updated the gui..
alex
parents:
10607
diff
changeset
|
645 if (!stream->priv) |
73702d2f93ab
1000l. The vcd api changed and nobody updated the gui..
alex
parents:
10607
diff
changeset
|
646 { |
73702d2f93ab
1000l. The vcd api changed and nobody updated the gui..
alex
parents:
10607
diff
changeset
|
647 guiIntfStruct.VCDTracks=0; |
73702d2f93ab
1000l. The vcd api changed and nobody updated the gui..
alex
parents:
10607
diff
changeset
|
648 break; |
73702d2f93ab
1000l. The vcd api changed and nobody updated the gui..
alex
parents:
10607
diff
changeset
|
649 } |
6280 | 650 for ( i=1;i < 100;i++ ) |
10696
73702d2f93ab
1000l. The vcd api changed and nobody updated the gui..
alex
parents:
10607
diff
changeset
|
651 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
|
652 vcd_seek_to_track( stream->priv,vcd_track ); |
6280 | 653 guiIntfStruct.VCDTracks=--i; |
654 break; | |
655 } | |
656 #endif | |
7150 | 657 default: break; |
6280 | 658 } |
659 break; | |
4858 | 660 case guiIEvent: |
14148 | 661 mp_msg( MSGT_GPLAYER,MSGL_V,"cmd: %d\n",(int)arg ); |
4858 | 662 switch( (int)arg ) |
663 { | |
664 case MP_CMD_QUIT: | |
665 mplEventHandling( evExit,0 ); | |
666 break; | |
667 case MP_CMD_VO_FULLSCREEN: | |
668 mplEventHandling( evFullScreen,0 ); | |
669 break; | |
670 default: | |
671 mplEventHandling( guiCMDArray[ (int)arg - MP_CMD_GUI_EVENTS - 1 ],0 ); | |
672 } | |
673 break; | |
6619
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
674 case guiReDraw: |
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
675 mplEventHandling( evRedraw,0 ); |
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
676 break; |
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
677 case guiSetVolume: |
6903 | 678 if ( audio_out ) |
679 { | |
680 float l,r; | |
12691
0230544f52a1
Fix GUI compilation, patch by Reimar Dffinger and Alexander Strasser.
diego
parents:
12646
diff
changeset
|
681 mixer_getvolume( &mixer,&l,&r ); |
6903 | 682 guiIntfStruct.Volume=(r>l?r:l); |
683 if ( r != l ) guiIntfStruct.Balance=( ( r - l ) + 100 ) * 0.5f; | |
684 else guiIntfStruct.Balance=50.0f; | |
685 btnModify( evSetVolume,guiIntfStruct.Volume ); | |
686 btnModify( evSetBalance,guiIntfStruct.Balance ); | |
687 } | |
688 break; | |
7009 | 689 case guiSetFileFormat: |
690 guiIntfStruct.FileFormat=(int)arg; | |
691 break; | |
6903 | 692 case guiSetValues: |
6912 | 693 // -- video |
7217 | 694 guiIntfStruct.sh_video=arg; |
6912 | 695 if ( arg ) |
696 { | |
7217 | 697 sh_video_t * sh = (sh_video_t *)arg; |
7150 | 698 guiIntfStruct.FPS=sh->fps; |
6912 | 699 } |
7009 | 700 |
701 if ( guiIntfStruct.NoWindow ) wsVisibleWindow( &appMPlayer.subWindow,wsHideWindow ); | |
8280
72700fefd3dc
no seeking if stream is STREAMTYPE_STREAM (net/stdin)
pontscho
parents:
8150
diff
changeset
|
702 |
8300 | 703 if ( guiIntfStruct.StreamType == STREAMTYPE_STREAM ) btnSet( evSetMoviePosition,btnDisabled ); |
704 else btnSet( evSetMoviePosition,btnReleased ); | |
8284 | 705 |
6794 | 706 // -- audio |
6619
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
707 if ( audio_out ) |
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
708 { |
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
709 float l,r; |
12691
0230544f52a1
Fix GUI compilation, patch by Reimar Dffinger and Alexander Strasser.
diego
parents:
12646
diff
changeset
|
710 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
|
711 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
|
712 if ( r != l ) guiIntfStruct.Balance=( ( r - l ) + 100 ) * 0.5f; |
6627 | 713 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
|
714 btnModify( evSetVolume,guiIntfStruct.Volume ); |
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
715 btnModify( evSetBalance,guiIntfStruct.Balance ); |
f554e7271587
fix volume handling ( step 2 ) -- add balance support and some code cleanup and fix
pontscho
parents:
6280
diff
changeset
|
716 } |
6627 | 717 |
718 if ( gtkEnableAudioEqualizer ) | |
719 { | |
720 equalizer_t eq; | |
721 int i,j; | |
722 for ( i=0;i<6;i++ ) | |
723 for ( j=0;j<10;j++ ) | |
724 { | |
725 eq.channel=i; eq.band=j; eq.gain=gtkEquChannels[i][j]; | |
726 gtkSet( gtkSetEqualizer,0,&eq ); | |
727 } | |
728 } | |
6794 | 729 // -- subtitle |
7009 | 730 #ifdef HAVE_DXR3 |
8043 | 731 if ( video_driver_list && !gstrcmp( video_driver_list[0],"dxr3" ) && guiIntfStruct.FileFormat != DEMUXER_TYPE_MPEG_PS |
732 #ifdef USE_LIBAVCODEC | |
733 && !gtkVopLAVC | |
734 #endif | |
735 ) | |
7009 | 736 { |
20723 | 737 gtkMessageBox( GTK_MB_FATAL,MSGTR_NEEDLAVC ); |
7009 | 738 guiIntfStruct.Playing=0; |
739 return True; | |
740 } | |
741 #endif | |
6627 | 742 break; |
743 case guiSetDefaults: | |
9055 | 744 // if ( guiIntfStruct.Playing == 1 && guiIntfStruct.FilenameChanged ) |
745 if ( guiIntfStruct.FilenameChanged ) | |
8423 | 746 { |
747 audio_id=-1; | |
748 video_id=-1; | |
749 dvdsub_id=-1; | |
750 vobsub_id=-1; | |
751 stream_cache_size=-1; | |
752 autosync=0; | |
753 vcd_track=0; | |
754 dvd_title=0; | |
9055 | 755 force_fps=0; |
8423 | 756 } |
18076
d30afd14867f
Segfault fix, patch by Stanislav Maslovski stanislav POIS maslovski AH gmail POIS com
gpoirier
parents:
17974
diff
changeset
|
757 guiIntfStruct.demuxer=NULL; |
18533
6b92a27e247c
also set guiIntfStruct.sh_video to NULL for guiSetDefaults.
reimar
parents:
18076
diff
changeset
|
758 guiIntfStruct.sh_video=NULL; |
8423 | 759 wsPostRedisplay( &appMPlayer.subWindow ); |
760 break; | |
761 case guiSetParameters: | |
9055 | 762 guiGetEvent( guiSetDefaults,NULL ); |
8423 | 763 switch ( guiIntfStruct.StreamType ) |
764 { | |
765 case STREAMTYPE_PLAYLIST: | |
766 break; | |
767 #ifdef HAVE_VCD | |
768 case STREAMTYPE_VCD: | |
9812
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
769 { |
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
770 char tmp[512]; |
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
771 sprintf( tmp,"vcd://%d",guiIntfStruct.Track + 1 ); |
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
772 guiSetFilename( guiIntfStruct.Filename,tmp ); |
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
773 } |
8423 | 774 break; |
775 #endif | |
776 #ifdef USE_DVDREAD | |
777 case STREAMTYPE_DVD: | |
9812
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
778 { |
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
779 char tmp[512]; |
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
780 sprintf( tmp,"dvd://%d",guiIntfStruct.Title ); |
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
781 guiSetFilename( guiIntfStruct.Filename,tmp ); |
22092ed814ad
fix dvd, vcd playing, compiling, and add one small playlist patch
pontscho
parents:
9625
diff
changeset
|
782 } |
8423 | 783 dvd_chapter=guiIntfStruct.Chapter; |
784 dvd_angle=guiIntfStruct.Angle; | |
785 break; | |
786 #endif | |
6794 | 787 } |
9291
64b8c5a07c2c
- It adds an option enqueue/noenqueue, so users can choose if they want to
arpi
parents:
9202
diff
changeset
|
788 //if ( guiIntfStruct.StreamType != STREAMTYPE_PLAYLIST ) // Does not make problems anymore! |
8423 | 789 { |
790 if ( guiIntfStruct.Filename ) filename=gstrdup( guiIntfStruct.Filename ); | |
791 else if ( filename ) guiSetFilename( guiIntfStruct.Filename,filename ); | |
792 } | |
7009 | 793 // --- video opts |
7019 | 794 |
7582 | 795 if ( !video_driver_list ) |
6794 | 796 { |
6797
06d29dbdf20d
upsz, sorry, i forgott this :) (skin name saving:)
pontscho
parents:
6794
diff
changeset
|
797 int i = 0; |
6903 | 798 while ( video_out_drivers[i++] ) |
799 if ( video_out_drivers[i - 1]->control( VOCTRL_GUISUPPORT,NULL ) == VO_TRUE ) | |
800 { | |
8150 | 801 gaddlist( &video_driver_list,(char *)video_out_drivers[i - 1]->info->short_name ); |
6903 | 802 break; |
803 } | |
6794 | 804 } |
805 | |
7582 | 806 if ( !video_driver_list && !video_driver_list[0] ) { gtkMessageBox( GTK_MB_FATAL,MSGTR_IDFGCVD ); exit_player( "gui init" ); } |
7009 | 807 |
808 { | |
809 int i = 0; | |
810 guiIntfStruct.NoWindow=False; | |
811 while ( video_out_drivers[i++] ) | |
812 if ( video_out_drivers[i - 1]->control( VOCTRL_GUISUPPORT,NULL ) == VO_TRUE ) | |
6794 | 813 { |
8150 | 814 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 | 815 { guiIntfStruct.NoWindow=True; break; } |
6794 | 816 } |
7009 | 817 } |
818 | |
819 #ifdef HAVE_DXR3 | |
8043 | 820 #ifdef USE_LIBAVCODEC |
7009 | 821 remove_vop( "lavc" ); |
8043 | 822 #endif |
7582 | 823 if ( video_driver_list && !gstrcmp( video_driver_list[0],"dxr3" ) ) |
7009 | 824 { |
825 if ( ( guiIntfStruct.StreamType != STREAMTYPE_DVD)&&( guiIntfStruct.StreamType != STREAMTYPE_VCD ) ) | |
826 { | |
8043 | 827 #ifdef USE_LIBAVCODEC |
7009 | 828 if ( gtkVopLAVC ) add_vop( "lavc" ); |
8043 | 829 #endif |
7009 | 830 } |
831 } | |
832 #endif | |
833 // --- | |
7019 | 834 if ( gtkVopPP ) add_vop( "pp" ); |
835 else remove_vop( "pp" ); | |
6794 | 836 |
837 // --- 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
|
838 // if ( ao_plugin_cfg.plugin_list ) { free( ao_plugin_cfg.plugin_list ); ao_plugin_cfg.plugin_list=NULL; } |
14254 | 839 if (gtkAONorm) |
840 greplace(&af_cfg.list, "volnorm", "volnorm"); | |
841 if (gtkEnableAudioEqualizer) | |
842 greplace(&af_cfg.list, "equalizer", "equalizer"); | |
6794 | 843 if ( gtkAOExtraStereo ) |
844 { | |
14254 | 845 char *name = malloc(12 + 20 + 1); |
846 snprintf(name, 12 + 20, "extrastereo=%f", gtkAOExtraStereoMul); | |
847 name[12 + 20] = 0; | |
848 greplace(&af_cfg.list, "extrastereo", name); | |
849 free(name); | |
6794 | 850 } |
8600
54eac4cf587c
Lots of functions and variables specific to OSS audio are used without
arpi
parents:
8484
diff
changeset
|
851 #ifdef USE_OSS_AUDIO |
12918 | 852 if ( audio_driver_list && !gstrncmp( audio_driver_list[0],"oss",3 ) ) |
6794 | 853 { |
12918 | 854 char *tmp; |
855 mixer_device = gtkAOOSSMixer; | |
856 mixer_channel = gtkAOOSSMixerChannel; | |
857 if (gtkAOOSSDevice) { | |
858 tmp = calloc( 1,strlen( gtkAOOSSDevice ) + 7 ); | |
7019 | 859 sprintf( tmp,"oss:%s",gtkAOOSSDevice ); |
12918 | 860 } else |
14627 | 861 tmp = strdup("oss"); |
12918 | 862 gaddlist( &audio_driver_list,tmp ); |
14627 | 863 free(tmp); |
12918 | 864 } |
865 #endif | |
866 #if defined(HAVE_ALSA9) || defined (HAVE_ALSA1X) | |
867 if ( audio_driver_list && !gstrncmp( audio_driver_list[0],"alsa",4 ) ) | |
868 { | |
869 char *tmp; | |
870 mixer_device = gtkAOALSAMixer; | |
871 mixer_channel = gtkAOALSAMixerChannel; | |
872 if (gtkAOALSADevice) { | |
873 tmp = calloc( 1,strlen( gtkAOALSADevice ) + 14 ); | |
874 sprintf( tmp,"alsa:device=%s",gtkAOALSADevice ); | |
875 } else | |
14627 | 876 tmp = strdup("alsa"); |
7582 | 877 gaddlist( &audio_driver_list,tmp ); |
14627 | 878 free(tmp); |
7019 | 879 } |
8615 | 880 #endif |
8714
a88f827ec563
SDL Audio configure window from Filip Kalinski <filon@pld.org.pl>
pontscho
parents:
8635
diff
changeset
|
881 #ifdef HAVE_SDL |
12918 | 882 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
|
883 { |
12918 | 884 char *tmp; |
885 if (gtkAOSDLDriver) { | |
886 tmp = calloc( 1,strlen( gtkAOSDLDriver ) + 10 ); | |
8714
a88f827ec563
SDL Audio configure window from Filip Kalinski <filon@pld.org.pl>
pontscho
parents:
8635
diff
changeset
|
887 sprintf( tmp,"sdl:%s",gtkAOSDLDriver ); |
12918 | 888 } else |
14627 | 889 tmp = strdup("sdl"); |
8714
a88f827ec563
SDL Audio configure window from Filip Kalinski <filon@pld.org.pl>
pontscho
parents:
8635
diff
changeset
|
890 gaddlist( &audio_driver_list,tmp ); |
14627 | 891 free(tmp); |
8714
a88f827ec563
SDL Audio configure window from Filip Kalinski <filon@pld.org.pl>
pontscho
parents:
8635
diff
changeset
|
892 } |
a88f827ec563
SDL Audio configure window from Filip Kalinski <filon@pld.org.pl>
pontscho
parents:
8635
diff
changeset
|
893 #endif |
14686
e2b2ab284a9a
ESD configuration dialog and software volume control option for Gui
reimar
parents:
14627
diff
changeset
|
894 #ifdef USE_ESD |
e2b2ab284a9a
ESD configuration dialog and software volume control option for Gui
reimar
parents:
14627
diff
changeset
|
895 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
|
896 { |
e2b2ab284a9a
ESD configuration dialog and software volume control option for Gui
reimar
parents:
14627
diff
changeset
|
897 char *tmp; |
e2b2ab284a9a
ESD configuration dialog and software volume control option for Gui
reimar
parents:
14627
diff
changeset
|
898 if (gtkAOESDDevice) { |
e2b2ab284a9a
ESD configuration dialog and software volume control option for Gui
reimar
parents:
14627
diff
changeset
|
899 tmp = calloc( 1,strlen( gtkAOESDDevice ) + 10 ); |
e2b2ab284a9a
ESD configuration dialog and software volume control option for Gui
reimar
parents:
14627
diff
changeset
|
900 sprintf( tmp,"esd:%s",gtkAOESDDevice ); |
e2b2ab284a9a
ESD configuration dialog and software volume control option for Gui
reimar
parents:
14627
diff
changeset
|
901 } else |
e2b2ab284a9a
ESD configuration dialog and software volume control option for Gui
reimar
parents:
14627
diff
changeset
|
902 tmp = strdup("esd"); |
e2b2ab284a9a
ESD configuration dialog and software volume control option for Gui
reimar
parents:
14627
diff
changeset
|
903 gaddlist( &audio_driver_list,tmp ); |
e2b2ab284a9a
ESD configuration dialog and software volume control option for Gui
reimar
parents:
14627
diff
changeset
|
904 free(tmp); |
e2b2ab284a9a
ESD configuration dialog and software volume control option for Gui
reimar
parents:
14627
diff
changeset
|
905 } |
e2b2ab284a9a
ESD configuration dialog and software volume control option for Gui
reimar
parents:
14627
diff
changeset
|
906 #endif |
6794 | 907 // -- subtitle |
908 #ifdef USE_SUB | |
9870
09d630a4f991
support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents:
9812
diff
changeset
|
909 //subdata->filename=gstrdup( guiIntfStruct.Subtitlename ); |
6794 | 910 stream_dump_type=0; |
911 if ( gtkSubDumpMPSub ) stream_dump_type=4; | |
912 if ( gtkSubDumpSrt ) stream_dump_type=6; | |
913 gtkSubDumpMPSub=gtkSubDumpSrt=0; | |
6627 | 914 #endif |
6794 | 915 #if defined( USE_OSD ) || defined( USE_SUB ) |
916 guiLoadFont(); | |
6627 | 917 #endif |
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 } |