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