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