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