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