2 * This file is part of MPlayer.
4 * MPlayer is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * MPlayer is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License along
15 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 #include <sys/types.h>
26 #include <gdk/gdkkeysyms.h>
33 #include "libaf/equalizer.h"
34 #include "libvo/video_out.h"
35 #include "stream/stream.h"
36 #include "libmpdemux/demuxer.h"
37 #include "libmpdemux/stheader.h"
38 #include "libmpcodecs/dec_video.h"
39 #include "gui/mplayer/widgets.h"
42 #include "gtk_common.h"
46 GtkWidget
* Equalizer
= NULL
;
47 static GtkWidget
* EquConfig
;
49 static GtkWidget
* Notebook
;
50 static GtkWidget
* ChannelsList
;
51 static GtkWidget
* VContrast
, * VBrightness
, * VHue
, * VSaturation
;
52 static GtkAdjustment
* VContrastadj
, * VBrightnessadj
, * VHueadj
, * VSaturationadj
;
53 static GtkWidget
* Ok
, * Clear
, * Config
;
54 static GtkWidget
* A3125
, * A125
, * A6250
, * A250
, * A500
, * A1000
, * A2000
, * A4000
, * A8000
, * A16000
;
55 static GtkAdjustment
* A3125adj
, * A125adj
, * A6250adj
, * A250adj
, * A500adj
, * A1000adj
, * A2000adj
, * A4000adj
, * A8000adj
, * A16000adj
;
57 static int Channel
= -1;
61 char * gtkEquChannel1
= NULL
;
62 char * gtkEquChannel2
= NULL
;
63 char * gtkEquChannel3
= NULL
;
64 char * gtkEquChannel4
= NULL
;
65 char * gtkEquChannel5
= NULL
;
66 char * gtkEquChannel6
= NULL
;
70 void ShowEquConfig( void );
71 void HideEquConfig( void );
73 static void eqSetBands( int channel
)
75 if ( channel
< 0 ) channel
=0;
76 gtk_adjustment_set_value( A3125adj
,0.0f
- gtkEquChannels
[channel
][0] );
77 gtk_adjustment_set_value( A6250adj
,0.0f
- gtkEquChannels
[channel
][1] );
78 gtk_adjustment_set_value( A125adj
,0.0f
- gtkEquChannels
[channel
][2] );
79 gtk_adjustment_set_value( A250adj
,0.0f
- gtkEquChannels
[channel
][3] );
80 gtk_adjustment_set_value( A500adj
,0.0f
- gtkEquChannels
[channel
][4] );
81 gtk_adjustment_set_value( A1000adj
,0.0f
- gtkEquChannels
[channel
][5] );
82 gtk_adjustment_set_value( A2000adj
,0.0f
- gtkEquChannels
[channel
][6] );
83 gtk_adjustment_set_value( A4000adj
,0.0f
- gtkEquChannels
[channel
][7] );
84 gtk_adjustment_set_value( A8000adj
,0.0f
- gtkEquChannels
[channel
][8] );
85 gtk_adjustment_set_value( A16000adj
,0.0f
- gtkEquChannels
[channel
][9] );
87 if ( guiIntfStruct
.sh_video
)
89 get_video_colors( guiIntfStruct
.sh_video
,"brightness",&vo_gamma_brightness
);
90 get_video_colors( guiIntfStruct
.sh_video
,"contrast",&vo_gamma_contrast
);
91 get_video_colors( guiIntfStruct
.sh_video
,"hue",&vo_gamma_hue
);
92 get_video_colors( guiIntfStruct
.sh_video
,"saturation",&vo_gamma_saturation
);
95 gtk_adjustment_set_value( VContrastadj
,(float)vo_gamma_contrast
);
96 gtk_adjustment_set_value( VBrightnessadj
,(float)vo_gamma_brightness
);
97 gtk_adjustment_set_value( VHueadj
,(float)vo_gamma_hue
);
98 gtk_adjustment_set_value( VSaturationadj
,(float)vo_gamma_saturation
);
101 static void eqSetChannelNames( void )
104 gtk_clist_clear( GTK_CLIST( ChannelsList
) );
106 str
[0]=MSGTR_EQU_All
;
107 gtk_clist_append( GTK_CLIST( ChannelsList
) ,str
);
108 if ( guiIntfStruct
.AudioType
> 1 )
110 str
[0]=gtkEquChannel1
; gtk_clist_append( GTK_CLIST( ChannelsList
) ,str
);
111 str
[0]=gtkEquChannel2
; gtk_clist_append( GTK_CLIST( ChannelsList
) ,str
);
113 if ( guiIntfStruct
.AudioType
> 2 )
115 str
[0]=gtkEquChannel3
; gtk_clist_append( GTK_CLIST( ChannelsList
) ,str
);
116 str
[0]=gtkEquChannel4
; gtk_clist_append( GTK_CLIST( ChannelsList
) ,str
);
118 if ( guiIntfStruct
.AudioType
> 4 )
120 str
[0]=gtkEquChannel5
; gtk_clist_append( GTK_CLIST( ChannelsList
) ,str
);
121 str
[0]=gtkEquChannel6
; gtk_clist_append( GTK_CLIST( ChannelsList
) ,str
);
123 gtk_clist_select_row( GTK_CLIST( ChannelsList
),0,0 );
126 void ShowEqualizer( void )
128 if ( Equalizer
) gtkActive( Equalizer
);
129 else Equalizer
=create_Equalizer();
131 if ( !gtkEquChannel1
) gtkEquChannel1
=strdup( MSGTR_EQU_Front_Right
);
132 if ( !gtkEquChannel2
) gtkEquChannel2
=strdup( MSGTR_EQU_Front_Left
);
133 if ( !gtkEquChannel3
) gtkEquChannel3
=strdup( MSGTR_EQU_Back_Right
);
134 if ( !gtkEquChannel4
) gtkEquChannel4
=strdup( MSGTR_EQU_Back_Left
);
135 if ( !gtkEquChannel5
) gtkEquChannel5
=strdup( MSGTR_EQU_Center
);
136 if ( !gtkEquChannel6
) gtkEquChannel6
=strdup( MSGTR_EQU_Bass
);
140 if ( !guiIntfStruct
.Playing
|| !guiIntfStruct
.sh_video
)
142 gtk_widget_set_sensitive( VContrast
,FALSE
);
143 gtk_widget_set_sensitive( VBrightness
,FALSE
);
144 gtk_widget_set_sensitive( VHue
,FALSE
);
145 gtk_widget_set_sensitive( VSaturation
,FALSE
);
149 if ( !guiIntfStruct
.Playing
|| !gtkEnableAudioEqualizer
)
151 gtk_widget_set_sensitive( ChannelsList
,FALSE
);
152 gtk_widget_set_sensitive( A3125
,FALSE
);
153 gtk_widget_set_sensitive( A125
,FALSE
);
154 gtk_widget_set_sensitive( A6250
,FALSE
);
155 gtk_widget_set_sensitive( A250
,FALSE
);
156 gtk_widget_set_sensitive( A500
,FALSE
);
157 gtk_widget_set_sensitive( A1000
,FALSE
);
158 gtk_widget_set_sensitive( A2000
,FALSE
);
159 gtk_widget_set_sensitive( A4000
,FALSE
);
160 gtk_widget_set_sensitive( A8000
,FALSE
);
161 gtk_widget_set_sensitive( A16000
,FALSE
);
164 if ( gtk_notebook_get_current_page( GTK_NOTEBOOK( Notebook
) ) == 0 ) gtk_widget_show( Config
);
165 gtk_widget_show( Equalizer
);
168 void HideEqualizer( void )
170 if ( !Equalizer
) return;
171 gtk_widget_hide( Equalizer
);
172 gtk_widget_destroy( Equalizer
);
174 if ( EquConfig
) HideEquConfig();
177 static gboolean
eqHScaleMotion( GtkWidget
* widget
,GdkEventMotion
* event
,gpointer user_data
)
180 switch ( (int)user_data
)
182 case 0: eq
.gain
=A3125adj
->value
; break;
183 case 1: eq
.gain
=A6250adj
->value
; break;
184 case 2: eq
.gain
=A125adj
->value
; break;
185 case 3: eq
.gain
=A250adj
->value
; break;
186 case 4: eq
.gain
=A500adj
->value
; break;
187 case 5: eq
.gain
=A1000adj
->value
; break;
188 case 6: eq
.gain
=A2000adj
->value
; break;
189 case 7: eq
.gain
=A4000adj
->value
; break;
190 case 8: eq
.gain
=A8000adj
->value
; break;
191 case 9: eq
.gain
=A16000adj
->value
; break;
192 default: return FALSE
;
194 eq
.gain
=0.0f
- eq
.gain
;
195 eq
.band
=(int)user_data
;
200 { eq
.channel
=i
; gtkSet( gtkSetEqualizer
,0,&eq
); }
201 } else { eq
.channel
=Channel
; gtkSet( gtkSetEqualizer
,0,&eq
); }
206 static gboolean
eqVScaleMotion( GtkWidget
* widget
,GdkEventMotion
* event
,gpointer user_data
)
209 switch( (int)user_data
)
211 case 1: gtkSet( gtkSetContrast
,VContrastadj
->value
,NULL
); break;
212 case 2: gtkSet( gtkSetBrightness
,VBrightnessadj
->value
,NULL
); break;
213 case 3: gtkSet( gtkSetHue
,VHueadj
->value
,NULL
); break;
214 case 4: gtkSet( gtkSetSaturation
,VSaturationadj
->value
,NULL
); break;
220 static void eqButtonReleased( GtkButton
* button
,gpointer user_data
)
222 switch( (int)user_data
)
224 case 0: HideEqualizer(); break;
226 if ( gtk_notebook_get_current_page( GTK_NOTEBOOK( Notebook
) ) == 0 )
228 if ( !guiIntfStruct
.Playing
|| !gtkEnableAudioEqualizer
) break;
229 gtkSet( gtkSetEqualizer
,0,NULL
);
230 eqSetBands( Channel
);
234 if ( !guiIntfStruct
.Playing
) break;
235 gtkSet( gtkSetContrast
,0.0f
,NULL
);
236 gtkSet( gtkSetBrightness
,0.0f
,NULL
);
237 gtkSet( gtkSetHue
,0.0f
,NULL
);
238 gtkSet( gtkSetSaturation
,0.0f
,NULL
);
239 eqSetBands( Channel
);
248 static void eqFocus( GtkWindow
* window
,GtkWidget
* widget
,gpointer user_data
)
249 { eqSetBands( Channel
); }
251 static void eqSelectChannelsListRow( GtkCList
* clist
,gint row
,gint column
,GdkEvent
* event
,gpointer user_data
)
254 eqSetBands( Channel
);
257 int i
,j
; equalizer_t eq
;
260 { eq
.band
=j
; eq
.channel
=i
; eq
.gain
=gtkEquChannels
[0][j
]; gtkSet( gtkSetEqualizer
,0,&eq
); }
264 void eqNotebook( GtkNotebook
* notebook
,GtkNotebookPage
* page
,gint page_num
,gpointer user_data
)
266 if ( page_num
) gtk_widget_hide( Config
);
267 else gtk_widget_show( Config
);
270 GtkWidget
* create_Equalizer( void )
274 GtkWidget
* scrolledwindow1
;
276 GtkWidget
* hbuttonbox1
;
277 GtkAccelGroup
* accel_group
;
279 accel_group
=gtk_accel_group_new();
281 Equalizer
=gtk_window_new( GTK_WINDOW_TOPLEVEL
);
282 gtk_widget_set_name( Equalizer
,MSGTR_Equalizer
);
283 gtk_object_set_data( GTK_OBJECT( Equalizer
),MSGTR_Equalizer
,Equalizer
);
284 gtk_widget_set_usize( Equalizer
,-1,256 );
285 gtk_window_set_title( GTK_WINDOW( Equalizer
),MSGTR_Equalizer
);
286 gtk_window_set_position( GTK_WINDOW( Equalizer
),GTK_WIN_POS_CENTER
);
287 gtk_window_set_policy( GTK_WINDOW( Equalizer
),FALSE
,FALSE
,FALSE
);
288 gtk_window_set_wmclass( GTK_WINDOW( Equalizer
),"Equalizer","MPlayer" );
290 gtk_widget_realize( Equalizer
);
291 gtkAddIcon( Equalizer
);
293 vbox1
=AddVBox( AddDialogFrame( Equalizer
),0 );
295 Notebook
=gtk_notebook_new();
296 gtk_widget_set_name( Notebook
,"Notebook" );
297 gtk_widget_show( Notebook
);
298 gtk_box_pack_start( GTK_BOX( vbox1
),Notebook
,TRUE
,TRUE
,0 );
299 gtk_container_set_border_width( GTK_CONTAINER( Notebook
),1 );
301 hbox1
=AddHBox( Notebook
,0 );
303 scrolledwindow1
=gtk_scrolled_window_new( NULL
,NULL
);
304 gtk_widget_set_name( scrolledwindow1
,"scrolledwindow1" );
305 gtk_widget_show( scrolledwindow1
);
306 gtk_box_pack_start( GTK_BOX( hbox1
),scrolledwindow1
,FALSE
,FALSE
,0 );
307 gtk_widget_set_usize( scrolledwindow1
,106,-2 );
308 gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( scrolledwindow1
),GTK_POLICY_AUTOMATIC
,GTK_POLICY_AUTOMATIC
);
310 ChannelsList
=gtk_clist_new( 1 );
311 gtk_widget_set_name( ChannelsList
,"ChannelsList" );
312 gtk_widget_show( ChannelsList
);
313 gtk_container_add( GTK_CONTAINER( scrolledwindow1
),ChannelsList
);
314 gtk_clist_set_column_width( GTK_CLIST( ChannelsList
),0,80 );
315 gtk_clist_column_titles_hide( GTK_CLIST( ChannelsList
) );
317 table1
=gtk_table_new( 2,10,FALSE
);
318 gtk_widget_set_name( table1
,"table1" );
319 gtk_widget_show( table1
);
320 gtk_box_pack_start( GTK_BOX( hbox1
),table1
,FALSE
,FALSE
,0 );
321 gtk_table_set_row_spacings( GTK_TABLE( table1
),4 );
322 gtk_table_set_col_spacings( GTK_TABLE( table1
),9 );
324 A3125adj
=GTK_ADJUSTMENT( gtk_adjustment_new( 0,-eqRange
,eqRange
,0.5,0,0 ) );
325 A3125
=AddVScaler( A3125adj
,NULL
,-1 );
326 gtk_table_attach( GTK_TABLE( table1
),A3125
,0,1,0,1,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( GTK_EXPAND
| GTK_FILL
),0,0 );
328 A6250adj
=GTK_ADJUSTMENT( gtk_adjustment_new( 0,-eqRange
,eqRange
,0.5,0,0 ) );
329 A6250
=AddVScaler( A6250adj
,NULL
,-1 );
330 gtk_table_attach( GTK_TABLE( table1
),A6250
,1,2,0,1,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( GTK_EXPAND
| GTK_FILL
),0,0 );
332 A125adj
=GTK_ADJUSTMENT( gtk_adjustment_new( 0,-eqRange
,eqRange
,0.5,0,0 ) );
333 A125
=AddVScaler( A125adj
,NULL
,-1 );
334 gtk_table_attach( GTK_TABLE( table1
),A125
,2,3,0,1,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( GTK_EXPAND
| GTK_FILL
),0,0 );
336 A250adj
=GTK_ADJUSTMENT( gtk_adjustment_new( 0,-eqRange
,eqRange
,0.5,0,0 ) );
337 A250
=AddVScaler( A250adj
,NULL
,-1 );
338 gtk_table_attach( GTK_TABLE( table1
),A250
,3,4,0,1,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( GTK_EXPAND
| GTK_FILL
),0,0 );
340 A500adj
=GTK_ADJUSTMENT( gtk_adjustment_new( 0,-eqRange
,eqRange
,0.5,0,0 ) );
341 A500
=AddVScaler( A500adj
,NULL
,-1 );
342 gtk_table_attach( GTK_TABLE( table1
),A500
,4,5,0,1,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( GTK_EXPAND
| GTK_FILL
),0,0 );
344 A1000adj
=GTK_ADJUSTMENT( gtk_adjustment_new( 0,-eqRange
,eqRange
,0.5,0,0 ) );
345 A1000
=AddVScaler( A1000adj
,NULL
,-1 );
346 gtk_table_attach( GTK_TABLE( table1
),A1000
,5,6,0,1,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( GTK_EXPAND
| GTK_FILL
),0,0 );
348 A2000adj
=GTK_ADJUSTMENT( gtk_adjustment_new( 0,-eqRange
,eqRange
,0.5,0,0 ) );
349 A2000
=AddVScaler( A2000adj
,NULL
,-1 );
350 gtk_table_attach( GTK_TABLE( table1
),A2000
,6,7,0,1,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( GTK_EXPAND
| GTK_FILL
),0,0 );
352 A4000adj
=GTK_ADJUSTMENT( gtk_adjustment_new( 0,-eqRange
,eqRange
,0.5,0,0 ) );
353 A4000
=AddVScaler( A4000adj
,NULL
,-1 );
354 gtk_table_attach( GTK_TABLE( table1
),A4000
,7,8,0,1,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( GTK_EXPAND
| GTK_FILL
),0,0 );
356 A8000adj
=GTK_ADJUSTMENT( gtk_adjustment_new( 0,-eqRange
,eqRange
,0.5,0,0 ) );
357 A8000
=AddVScaler( A8000adj
,NULL
,-1 );
358 gtk_table_attach( GTK_TABLE( table1
),A8000
,8,9,0,1,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( GTK_EXPAND
| GTK_FILL
),0,0 );
360 A16000adj
=GTK_ADJUSTMENT( gtk_adjustment_new( 0,-eqRange
,eqRange
,0.5,0,0 ) );
361 A16000
=AddVScaler( A16000adj
,NULL
,-1 );
362 gtk_table_attach( GTK_TABLE( table1
),A16000
,9,10,0,1,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( GTK_EXPAND
| GTK_FILL
),0,0 );
364 gtk_table_attach( GTK_TABLE( table1
),
365 AddLabel( "31.25",NULL
),
366 0,1,1,2,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
368 gtk_table_attach( GTK_TABLE( table1
),
369 AddLabel( "62.50",NULL
),
370 1,2,1,2,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
372 gtk_table_attach( GTK_TABLE( table1
),
373 AddLabel( "125",NULL
),
374 2,3,1,2,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
376 gtk_table_attach( GTK_TABLE( table1
),
377 AddLabel( "250",NULL
),
378 3,4,1,2,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
380 gtk_table_attach( GTK_TABLE( table1
),
381 AddLabel( "500",NULL
),
382 4,5,1,2,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
384 gtk_table_attach( GTK_TABLE( table1
),
385 AddLabel( "1000",NULL
),
386 5,6,1,2,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
388 gtk_table_attach( GTK_TABLE( table1
),
389 AddLabel( "2000",NULL
),
390 6,7,1,2,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
392 gtk_table_attach( GTK_TABLE( table1
),
393 AddLabel( "4000",NULL
),
394 7,8,1,2,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
396 gtk_table_attach( GTK_TABLE( table1
),
397 AddLabel( "8000",NULL
),
398 8,9,1,2,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
400 gtk_table_attach( GTK_TABLE( table1
),
401 AddLabel( "16000",NULL
),
402 9,10,1,2,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
404 gtk_notebook_set_tab_label( GTK_NOTEBOOK( Notebook
),gtk_notebook_get_nth_page( GTK_NOTEBOOK( Notebook
),0 ),
405 AddLabel( MSGTR_EQU_Audio
,NULL
) );
407 table1
=gtk_table_new( 4,2,FALSE
);
408 gtk_widget_set_name( table1
,"table1" );
409 gtk_widget_show( table1
);
410 gtk_container_add( GTK_CONTAINER( Notebook
),table1
);
412 gtk_table_attach( GTK_TABLE( table1
),
413 AddLabel( MSGTR_EQU_Contrast
,NULL
),
414 0,1,0,1,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
416 gtk_table_attach( GTK_TABLE( table1
),
417 AddLabel( MSGTR_EQU_Brightness
,NULL
),
418 0,1,1,2,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
420 gtk_table_attach( GTK_TABLE( table1
),
421 AddLabel( MSGTR_EQU_Hue
,NULL
),
422 0,1,2,3,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
424 gtk_table_attach( GTK_TABLE( table1
),
425 AddLabel( MSGTR_EQU_Saturation
,NULL
),
426 0,1,3,4,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
428 VContrastadj
=GTK_ADJUSTMENT( gtk_adjustment_new( 0,-100,100,1,0,0 ) );
429 VContrast
=AddHScaler( VContrastadj
,NULL
,1 );
430 gtk_table_attach( GTK_TABLE( table1
),VContrast
,1,2,0,1,(GtkAttachOptions
)( GTK_EXPAND
| GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
431 gtk_widget_set_usize( VContrast
,-1,45 );
433 VBrightnessadj
=GTK_ADJUSTMENT( gtk_adjustment_new( 0,-100,100,1,0,0 ) );
434 VBrightness
=AddHScaler( VBrightnessadj
,NULL
,1 );
435 gtk_table_attach( GTK_TABLE( table1
),VBrightness
,1,2,1,2,(GtkAttachOptions
)( GTK_EXPAND
| GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
436 gtk_widget_set_usize( VBrightness
,-1,45 );
438 VHueadj
=GTK_ADJUSTMENT( gtk_adjustment_new( 0,-100,100,1,0,0 ) );
439 VHue
=AddHScaler( VHueadj
,NULL
,1 );
440 gtk_table_attach( GTK_TABLE( table1
),VHue
,1,2,2,3,(GtkAttachOptions
)( GTK_EXPAND
| GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
441 gtk_widget_set_usize( VHue
,-1,45 );
443 VSaturationadj
=GTK_ADJUSTMENT( gtk_adjustment_new( 0,-100,100,1,0,0 ) );
444 VSaturation
=AddHScaler( VSaturationadj
,NULL
,1 );
445 gtk_table_attach( GTK_TABLE( table1
),VSaturation
,1,2,3,4,(GtkAttachOptions
)( GTK_EXPAND
| GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
446 gtk_widget_set_usize( VSaturation
,-1,45 );
448 gtk_notebook_set_tab_label( GTK_NOTEBOOK( Notebook
),gtk_notebook_get_nth_page( GTK_NOTEBOOK( Notebook
),1 ),
449 AddLabel( MSGTR_EQU_Video
,NULL
) );
451 AddHSeparator( vbox1
);
453 hbuttonbox1
=AddHButtonBox( vbox1
);
454 gtk_button_box_set_layout( GTK_BUTTON_BOX( hbuttonbox1
),GTK_BUTTONBOX_END
);
455 gtk_button_box_set_spacing( GTK_BUTTON_BOX( hbuttonbox1
),10 );
457 Config
=AddButton( MSGTR_Config
,hbuttonbox1
);
458 Clear
=AddButton( MSGTR_Clear
,hbuttonbox1
);
459 Ok
=AddButton( MSGTR_Ok
,hbuttonbox1
);
461 gtk_widget_add_accelerator( Ok
,"clicked",accel_group
,GDK_Escape
,0,GTK_ACCEL_VISIBLE
);
462 gtk_widget_add_accelerator( Ok
,"clicked",accel_group
,GDK_Return
,0,GTK_ACCEL_VISIBLE
);
464 gtk_signal_connect( GTK_OBJECT( Equalizer
),"destroy",GTK_SIGNAL_FUNC( WidgetDestroy
),&Equalizer
);
465 gtk_signal_connect( GTK_OBJECT( Equalizer
),"focus_in_event",GTK_SIGNAL_FUNC( eqFocus
),(void *)2 );
467 gtk_signal_connect( GTK_OBJECT( ChannelsList
),"select_row",GTK_SIGNAL_FUNC( eqSelectChannelsListRow
),NULL
);
469 gtk_signal_connect( GTK_OBJECT( A3125
),"motion_notify_event",GTK_SIGNAL_FUNC( eqHScaleMotion
),(void*)0 );
470 gtk_signal_connect( GTK_OBJECT( A6250
),"motion_notify_event",GTK_SIGNAL_FUNC( eqHScaleMotion
),(void*)1 );
471 gtk_signal_connect( GTK_OBJECT( A125
),"motion_notify_event",GTK_SIGNAL_FUNC( eqHScaleMotion
),(void*)2 );
472 gtk_signal_connect( GTK_OBJECT( A250
),"motion_notify_event",GTK_SIGNAL_FUNC( eqHScaleMotion
),(void*)3 );
473 gtk_signal_connect( GTK_OBJECT( A500
),"motion_notify_event",GTK_SIGNAL_FUNC( eqHScaleMotion
),(void*)4 );
474 gtk_signal_connect( GTK_OBJECT( A1000
),"motion_notify_event",GTK_SIGNAL_FUNC( eqHScaleMotion
),(void*)5 );
475 gtk_signal_connect( GTK_OBJECT( A2000
),"motion_notify_event",GTK_SIGNAL_FUNC( eqHScaleMotion
),(void*)6 );
476 gtk_signal_connect( GTK_OBJECT( A4000
),"motion_notify_event",GTK_SIGNAL_FUNC( eqHScaleMotion
),(void*)7 );
477 gtk_signal_connect( GTK_OBJECT( A8000
),"motion_notify_event",GTK_SIGNAL_FUNC( eqHScaleMotion
),(void*)8 );
478 gtk_signal_connect( GTK_OBJECT( A16000
),"motion_notify_event",GTK_SIGNAL_FUNC( eqHScaleMotion
),(void*)9 );
480 gtk_signal_connect( GTK_OBJECT( VContrast
),"motion_notify_event",GTK_SIGNAL_FUNC( eqVScaleMotion
),(void*)1 );
481 gtk_signal_connect( GTK_OBJECT( VBrightness
),"motion_notify_event",GTK_SIGNAL_FUNC( eqVScaleMotion
),(void*)2 );
482 gtk_signal_connect( GTK_OBJECT( VHue
),"motion_notify_event",GTK_SIGNAL_FUNC( eqVScaleMotion
),(void*)3 );
483 gtk_signal_connect( GTK_OBJECT( VSaturation
),"motion_notify_event",GTK_SIGNAL_FUNC( eqVScaleMotion
),(void *)4 );
485 gtk_signal_connect( GTK_OBJECT( Ok
),"clicked",GTK_SIGNAL_FUNC( eqButtonReleased
),(void *)0 );
486 gtk_signal_connect( GTK_OBJECT( Clear
),"clicked",GTK_SIGNAL_FUNC( eqButtonReleased
),(void *)1 );
487 gtk_signal_connect( GTK_OBJECT( Config
),"clicked",GTK_SIGNAL_FUNC( eqButtonReleased
),(void *)2 );
489 gtk_signal_connect( GTK_OBJECT( Notebook
),"switch_page",GTK_SIGNAL_FUNC( eqNotebook
),NULL
);
491 gtk_window_add_accel_group( GTK_WINDOW( Equalizer
),accel_group
);
496 // --- equalizer config dialog box
498 static GtkWidget
* CBChannel1
;
499 static GtkWidget
* CEChannel1
;
500 static GtkWidget
* CBChannel2
;
501 static GtkWidget
* CEChannel2
;
502 static GtkWidget
* CBChannel3
;
503 static GtkWidget
* CEChannel3
;
504 static GtkWidget
* CBChannel4
;
505 static GtkWidget
* CEChannel4
;
506 static GtkWidget
* CBChannel5
;
507 static GtkWidget
* CEChannel5
;
508 static GtkWidget
* CBChannel6
;
509 static GtkWidget
* CEChannel6
;
510 static GtkWidget
* ecOk
;
511 static GtkWidget
* ecCancel
;
513 GtkWidget
* create_EquConfig( void );
515 void ShowEquConfig( void )
517 GList
* Items
= NULL
;
519 if ( EquConfig
) gtkActive( EquConfig
);
520 else EquConfig
=create_EquConfig();
522 Items
=g_list_append( Items
,(gpointer
)MSGTR_EQU_Front_Right
);
523 Items
=g_list_append( Items
,(gpointer
)MSGTR_EQU_Front_Left
);
524 Items
=g_list_append( Items
,(gpointer
)MSGTR_EQU_Back_Right
);
525 Items
=g_list_append( Items
,(gpointer
)MSGTR_EQU_Back_Left
);
526 Items
=g_list_append( Items
,(gpointer
)MSGTR_EQU_Center
);
527 Items
=g_list_append( Items
,(gpointer
)MSGTR_EQU_Bass
);
529 gtk_combo_set_popdown_strings( GTK_COMBO( CBChannel1
),Items
);
530 gtk_combo_set_popdown_strings( GTK_COMBO( CBChannel2
),Items
);
531 gtk_combo_set_popdown_strings( GTK_COMBO( CBChannel3
),Items
);
532 gtk_combo_set_popdown_strings( GTK_COMBO( CBChannel4
),Items
);
533 gtk_combo_set_popdown_strings( GTK_COMBO( CBChannel5
),Items
);
534 gtk_combo_set_popdown_strings( GTK_COMBO( CBChannel6
),Items
);
536 g_list_free( Items
);
538 gtk_entry_set_text( GTK_ENTRY( CEChannel1
),gtkEquChannel1
); gtk_entry_set_editable( GTK_ENTRY( CEChannel1
),FALSE
);
539 gtk_entry_set_text( GTK_ENTRY( CEChannel2
),gtkEquChannel2
); gtk_entry_set_editable( GTK_ENTRY( CEChannel2
),FALSE
);
540 gtk_entry_set_text( GTK_ENTRY( CEChannel3
),gtkEquChannel3
); gtk_entry_set_editable( GTK_ENTRY( CEChannel3
),FALSE
);
541 gtk_entry_set_text( GTK_ENTRY( CEChannel4
),gtkEquChannel4
); gtk_entry_set_editable( GTK_ENTRY( CEChannel4
),FALSE
);
542 gtk_entry_set_text( GTK_ENTRY( CEChannel5
),gtkEquChannel5
); gtk_entry_set_editable( GTK_ENTRY( CEChannel5
),FALSE
);
543 gtk_entry_set_text( GTK_ENTRY( CEChannel6
),gtkEquChannel6
); gtk_entry_set_editable( GTK_ENTRY( CEChannel6
),FALSE
);
545 gtk_widget_show( EquConfig
);
546 gtkSetLayer( EquConfig
);
549 void HideEquConfig( void )
551 if ( !EquConfig
) return;
552 gtk_widget_hide( EquConfig
);
553 gtk_widget_destroy( EquConfig
);
557 static void ecButtonReleased( GtkButton
* button
,gpointer user_data
)
559 if ( (int)user_data
)
560 { // if you pressed Ok
561 gfree( (void **)>kEquChannel1
); gtkEquChannel1
=gstrdup( gtk_entry_get_text( GTK_ENTRY( CEChannel1
) ) );
562 gfree( (void **)>kEquChannel2
); gtkEquChannel2
=gstrdup( gtk_entry_get_text( GTK_ENTRY( CEChannel2
) ) );
563 gfree( (void **)>kEquChannel3
); gtkEquChannel3
=gstrdup( gtk_entry_get_text( GTK_ENTRY( CEChannel3
) ) );
564 gfree( (void **)>kEquChannel4
); gtkEquChannel4
=gstrdup( gtk_entry_get_text( GTK_ENTRY( CEChannel4
) ) );
565 gfree( (void **)>kEquChannel5
); gtkEquChannel5
=gstrdup( gtk_entry_get_text( GTK_ENTRY( CEChannel5
) ) );
566 gfree( (void **)>kEquChannel6
); gtkEquChannel6
=gstrdup( gtk_entry_get_text( GTK_ENTRY( CEChannel6
) ) );
572 GtkWidget
* create_EquConfig( void )
576 GtkWidget
* hbuttonbox1
;
577 GtkAccelGroup
* accel_group
;
579 accel_group
=gtk_accel_group_new();
581 EquConfig
=gtk_window_new( GTK_WINDOW_TOPLEVEL
);
582 gtk_widget_set_name( EquConfig
,"EquConfig" );
583 gtk_object_set_data( GTK_OBJECT( EquConfig
),"EquConfig",EquConfig
);
584 gtk_widget_set_usize( EquConfig
,350,260 );
585 GTK_WIDGET_SET_FLAGS( EquConfig
,GTK_CAN_DEFAULT
);
586 gtk_window_set_title( GTK_WINDOW( EquConfig
),MSGTR_ConfigureEqualizer
);
587 gtk_window_set_position( GTK_WINDOW( EquConfig
),GTK_WIN_POS_CENTER
);
588 // gtk_window_set_modal( GTK_WINDOW( EquConfig ),TRUE );
589 gtk_window_set_policy( GTK_WINDOW( EquConfig
),FALSE
,FALSE
,FALSE
);
590 gtk_window_set_wmclass( GTK_WINDOW( EquConfig
),"EquConfig","MPlayer" );
592 gtk_widget_realize( EquConfig
);
593 gtkAddIcon( EquConfig
);
595 vbox1
=AddVBox( AddDialogFrame( EquConfig
),0 );
597 table1
=gtk_table_new( 6,2,FALSE
);
598 gtk_widget_set_name( table1
,"table1" );
599 gtk_widget_show( table1
);
600 gtk_box_pack_start( GTK_BOX( vbox1
),table1
,TRUE
,TRUE
,0 );
601 gtk_table_set_row_spacings( GTK_TABLE( table1
),4 );
602 gtk_table_set_col_spacings( GTK_TABLE( table1
),4 );
604 gtk_table_attach( GTK_TABLE( table1
),
605 AddLabel( MSGTR_EQU_Channel1
,NULL
),
606 0,1,0,1,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
608 gtk_table_attach( GTK_TABLE( table1
),
609 AddLabel( MSGTR_EQU_Channel2
,NULL
),
610 0,1,1,2,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
612 gtk_table_attach( GTK_TABLE( table1
),
613 AddLabel( MSGTR_EQU_Channel3
,NULL
),
614 0,1,2,3,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
616 gtk_table_attach( GTK_TABLE( table1
),
617 AddLabel( MSGTR_EQU_Channel4
,NULL
),
618 0,1,3,4,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
620 gtk_table_attach( GTK_TABLE( table1
),
621 AddLabel( MSGTR_EQU_Channel5
,NULL
),
622 0,1,4,5,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
624 gtk_table_attach( GTK_TABLE( table1
),
625 AddLabel( MSGTR_EQU_Channel6
,NULL
),
626 0,1,5,6,(GtkAttachOptions
)( GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
628 CBChannel1
=AddComboBox( NULL
);
629 gtk_table_attach( GTK_TABLE( table1
),CBChannel1
,1,2,0,1,(GtkAttachOptions
)( GTK_EXPAND
| GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
631 CEChannel1
=GTK_COMBO( CBChannel1
)->entry
;
632 gtk_widget_set_name( CEChannel1
,"CEChannel1" );
633 gtk_widget_show( CEChannel1
);
635 CBChannel2
=AddComboBox( NULL
);
636 gtk_table_attach( GTK_TABLE( table1
),CBChannel2
,1,2,1,2,(GtkAttachOptions
)( GTK_EXPAND
| GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
638 CEChannel2
=GTK_COMBO( CBChannel2
)->entry
;
639 gtk_widget_set_name( CEChannel2
,"CEChannel2" );
640 gtk_widget_show( CEChannel2
);
642 CBChannel3
=AddComboBox( NULL
);
643 gtk_table_attach( GTK_TABLE( table1
),CBChannel3
,1,2,2,3,(GtkAttachOptions
)( GTK_EXPAND
| GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
645 CEChannel3
=GTK_COMBO( CBChannel3
)->entry
;
646 gtk_widget_set_name( CEChannel3
,"CEChannel3" );
647 gtk_widget_show( CEChannel3
);
649 CBChannel4
=AddComboBox( NULL
);
650 gtk_table_attach( GTK_TABLE( table1
),CBChannel4
,1,2,3,4,(GtkAttachOptions
)( GTK_EXPAND
| GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
652 CEChannel4
=GTK_COMBO( CBChannel4
)->entry
;
653 gtk_widget_set_name( CEChannel4
,"CEChannel4" );
654 gtk_widget_show( CEChannel4
);
656 CBChannel5
=AddComboBox( NULL
);
657 gtk_table_attach( GTK_TABLE( table1
),CBChannel5
,1,2,4,5,(GtkAttachOptions
)( GTK_EXPAND
| GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
659 CEChannel5
=GTK_COMBO( CBChannel5
)->entry
;
660 gtk_widget_set_name( CEChannel5
,"CEChannel5" );
661 gtk_widget_show( CEChannel5
);
663 CBChannel6
=AddComboBox( NULL
);
664 gtk_table_attach( GTK_TABLE( table1
),CBChannel6
,1,2,5,6,(GtkAttachOptions
)( GTK_EXPAND
| GTK_FILL
),(GtkAttachOptions
)( 0 ),0,0 );
666 CEChannel6
=GTK_COMBO( CBChannel6
)->entry
;
667 gtk_widget_set_name( CEChannel6
,"CEChannel6" );
668 gtk_widget_show( CEChannel6
);
670 AddHSeparator( vbox1
);
672 hbuttonbox1
=AddHButtonBox( vbox1
);
673 gtk_button_box_set_layout( GTK_BUTTON_BOX( hbuttonbox1
),GTK_BUTTONBOX_END
);
674 gtk_button_box_set_spacing( GTK_BUTTON_BOX( hbuttonbox1
),10 );
676 ecOk
=AddButton( MSGTR_Ok
,hbuttonbox1
);
677 ecCancel
=AddButton( MSGTR_Cancel
,hbuttonbox1
);
679 gtk_widget_add_accelerator( ecOk
,"clicked",accel_group
,GDK_Return
,0,GTK_ACCEL_VISIBLE
);
680 gtk_widget_add_accelerator( ecCancel
,"clicked",accel_group
,GDK_Escape
,0,GTK_ACCEL_VISIBLE
);
682 gtk_signal_connect( GTK_OBJECT( EquConfig
),"destroy",GTK_SIGNAL_FUNC( WidgetDestroy
),&EquConfig
);
684 gtk_signal_connect( GTK_OBJECT( ecOk
),"clicked",GTK_SIGNAL_FUNC( ecButtonReleased
),(void *)1 );
685 gtk_signal_connect( GTK_OBJECT( ecCancel
),"clicked",GTK_SIGNAL_FUNC( ecButtonReleased
),(void *)0 );
687 gtk_window_add_accel_group( GTK_WINDOW( EquConfig
),accel_group
);