X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fmacosx%2Fequalizer.m;h=02f1ba71902e9399987748adf4b98e6be0f8cc32;hb=de587c237065de4696d9d035d0504cdf34990d87;hp=b816a3a63761fd1617548722b5b66a5410670e99;hpb=21445d780fe5e8a1ed786bdb15aaebca46b6841d;p=vlc diff --git a/modules/gui/macosx/equalizer.m b/modules/gui/macosx/equalizer.m index b816a3a637..02f1ba7190 100644 --- a/modules/gui/macosx/equalizer.m +++ b/modules/gui/macosx/equalizer.m @@ -1,16 +1,17 @@ /***************************************************************************** * equalizer.m: MacOS X interface module ***************************************************************************** - * Copyright (C) 2004 the VideoLAN team + * Copyright (C) 2004-2008 the VideoLAN team * $Id$ * - * Authors: Jerome Decoodt + * Authors: Jérôme Decoodt + * Felix Paul Kühne * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -24,7 +25,11 @@ /***************************************************************************** * Preamble *****************************************************************************/ -#include +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include #include #include "intf.h" @@ -35,12 +40,12 @@ #include "../../audio_filter/equalizer_presets.h" /***************************************************************************** - * VLCEqualizer implementation + * VLCEqualizer implementation *****************************************************************************/ @implementation VLCEqualizer static void ChangeFiltersString( intf_thread_t *p_intf, - char *psz_name, vlc_bool_t b_add ) + char *psz_name, bool b_add ) { char *psz_parser, *psz_string; int i; @@ -48,12 +53,11 @@ static void ChangeFiltersString( intf_thread_t *p_intf, VLC_OBJECT_AOUT, FIND_ANYWHERE ); aout_instance_t *p_aout = (aout_instance_t *)p_object; if( p_object == NULL ) - p_object = vlc_object_find( p_intf, - VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ); + p_object = pl_Yield( p_intf ); if( p_object == NULL ) return; - psz_string = var_GetString( p_object, "audio-filter" ); + psz_string = var_GetNonEmptyString( p_object, "audio-filter" ); if( !psz_string ) psz_string = strdup( "" ); @@ -98,39 +102,52 @@ static void ChangeFiltersString( intf_thread_t *p_intf, { for( i = 0; i < p_aout->i_nb_inputs; i++ ) { - p_aout->pp_inputs[i]->b_restart = VLC_TRUE; + p_aout->pp_inputs[i]->b_restart = true; } } + + if( (BOOL)config_GetInt( p_object, "macosx-eq-keep" ) == YES ) + { + /* save changed to config */ + config_PutPsz( p_object, "audio-filter", psz_string ); + + /* save to vlcrc */ + config_SaveConfigFile( p_object, "main" ); + } + free( psz_string ); vlc_object_release( p_object ); } -static vlc_bool_t GetFiltersStatus( intf_thread_t *p_intf, +static bool GetFiltersStatus( intf_thread_t *p_intf, char *psz_name ) { char *psz_parser, *psz_string; vlc_object_t *p_object = vlc_object_find( p_intf, VLC_OBJECT_AOUT, FIND_ANYWHERE ); if( p_object == NULL ) - p_object = vlc_object_find( p_intf, - VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ); + p_object = pl_Yield( p_intf ); if( p_object == NULL ) - return VLC_FALSE; + return false; - psz_string = var_GetString( p_object, "audio-filter" ); + if( (BOOL)config_GetInt( p_intf, "macosx-eq-keep" ) == YES ) + psz_string = config_GetPsz( p_intf, "audio-filter" ); + + if(! psz_string ) + psz_string = var_GetNonEmptyString( p_object, "audio-filter" ); vlc_object_release( p_object ); - if( !psz_string ) return VLC_FALSE; + if( !psz_string ) return false; psz_parser = strstr( psz_string, psz_name ); free( psz_string ); if ( psz_parser ) - return VLC_TRUE; + return true; else - return VLC_FALSE; + return false; } - (void)initStrings @@ -138,8 +155,7 @@ static vlc_bool_t GetFiltersStatus( intf_thread_t *p_intf, int i; [o_btn_equalizer setToolTip: _NS("Equalizer")]; [o_ckb_2pass setTitle: _NS("2 Pass")]; - [o_ckb_2pass setToolTip: _NS("Apply the" -/// \bug [String] missing space + [o_ckb_2pass setToolTip: _NS("Apply the " "equalizer filter twice. The effect will be sharper.")]; [o_ckb_enable setTitle: _NS("Enable")]; [o_ckb_enable setToolTip: _NS("Enable the equalizer. Bands can be set " @@ -153,21 +169,7 @@ static vlc_bool_t GetFiltersStatus( intf_thread_t *p_intf, } [o_window setTitle: _NS("Equalizer")]; - /* - [o_slider_band1 setFloatValue: 0]; - [o_slider_band2 setFloatValue: 0]; - [o_slider_band3 setFloatValue: 0]; - [o_slider_band4 setFloatValue: 0]; - [o_slider_band5 setFloatValue: 0]; - [o_slider_band6 setFloatValue: 0]; - [o_slider_band7 setFloatValue: 0]; - [o_slider_band8 setFloatValue: 0]; - [o_slider_band9 setFloatValue: 0]; - [o_slider_band10 setFloatValue: 0]; - */ - [self initBandSliders]; - [o_ckb_enable setState: NSOffState]; - [o_ckb_2pass setState: NSOffState]; + [self initBandSliders]; } - (void)equalizerUpdated @@ -175,37 +177,44 @@ static vlc_bool_t GetFiltersStatus( intf_thread_t *p_intf, intf_thread_t *p_intf = VLCIntf; float f_preamp, f_band[10]; char *psz_bands, *psz_bands_init, *p_next; - vlc_bool_t b_2p; + bool b_2p; int i; - vlc_bool_t b_enabled = GetFiltersStatus( p_intf, (char *)"equalizer" ); + bool b_enabled = GetFiltersStatus( p_intf, (char *)"equalizer" ); vlc_object_t *p_object = vlc_object_find( p_intf, - VLC_OBJECT_AOUT, FIND_ANYWHERE ); + VLC_OBJECT_AOUT, FIND_ANYWHERE ); if( p_object == NULL ) - p_object = vlc_object_find( p_intf, - VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ); + p_object = pl_Yield( p_intf ); if( p_object == NULL ) return; var_Create( p_object, "equalizer-preamp", VLC_VAR_FLOAT | - VLC_VAR_DOINHERIT ); + VLC_VAR_DOINHERIT ); var_Create( p_object, "equalizer-bands", VLC_VAR_STRING | - VLC_VAR_DOINHERIT ); + VLC_VAR_DOINHERIT ); - f_preamp = var_GetFloat( p_object, "equalizer-preamp" ); - psz_bands = var_GetString( p_object, "equalizer-bands" ); + psz_bands = var_GetNonEmptyString( p_object, "equalizer-bands" ); - if( !strcmp( psz_bands, "" ) ) + if( psz_bands == NULL ) psz_bands = strdup( "0 0 0 0 0 0 0 0 0 0" ); - b_2p = var_GetBool( p_object, "equalizer-2pass" ); + if( (BOOL)config_GetInt( p_intf, "macosx-eq-keep" ) == YES ) + { + b_2p = (BOOL)config_GetInt( p_object, "equalizer-2pass" ); + f_preamp = config_GetFloat( p_object, "equalizer-preamp" ); + } + else + { + b_2p = var_GetBool( p_object, "equalizer-2pass" ); + f_preamp = var_GetFloat( p_object, "equalizer-preamp" ); + } vlc_object_release( p_object ); - -/* Set the preamp slider */ + + /* Set the preamp slider */ [o_slider_preamp setFloatValue: f_preamp]; -/* Set the bands slider */ + /* Set the bands slider */ psz_bands_init = psz_bands; for( i = 0; i < 10; i++ ) @@ -217,51 +226,35 @@ static vlc_bool_t GetFiltersStatus( intf_thread_t *p_intf, f_band[i] = (float)strtod( psz_bands, &p_next ); #endif if( !p_next || p_next == psz_bands ) break; /* strtof() failed */ - + if( !*psz_bands ) break; /* end of line */ psz_bands = p_next+1; } free( psz_bands_init ); - [self setBandSlidersValues:f_band]; - - /* - [o_slider_band1 setFloatValue: f_band[0]]; - [o_slider_band2 setFloatValue: f_band[1]]; - [o_slider_band3 setFloatValue: f_band[2]]; - [o_slider_band4 setFloatValue: f_band[3]]; - [o_slider_band5 setFloatValue: f_band[4]]; - [o_slider_band6 setFloatValue: f_band[5]]; - [o_slider_band7 setFloatValue: f_band[6]]; - [o_slider_band8 setFloatValue: f_band[7]]; - [o_slider_band9 setFloatValue: f_band[8]]; - [o_slider_band10 setFloatValue: f_band[9]]; - */ - -/* Set the the checkboxes */ - if( b_enabled == VLC_TRUE ) - [o_ckb_enable setState:NSOnState]; - else - [o_ckb_enable setState:NSOffState]; + [self setBandSlidersValues:f_band]; + + /* Set the the checkboxes */ + [o_ckb_enable setState: b_enabled]; - [o_ckb_2pass setState:( ( b_2p == VLC_TRUE ) ? NSOnState : NSOffState )]; + [o_ckb_2pass setState: b_2p]; } - (IBAction)bandSliderUpdated:(id)sender { intf_thread_t *p_intf = VLCIntf; vlc_object_t *p_object = vlc_object_find( p_intf, - VLC_OBJECT_AOUT, FIND_ANYWHERE ); - char psz_values[102]; - memset( psz_values, 0, 102 ); + VLC_OBJECT_AOUT, FIND_ANYWHERE ); if( p_object == NULL ) - p_object = vlc_object_find( p_intf, - VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ); + p_object = pl_Yield( p_intf ); if( p_object == NULL ) return; + char psz_values[102]; + memset( psz_values, 0, 102 ); + /* Write the new bands values */ -/* TODO: write a generic code instead of ten times the same thing */ + /* TODO: write a generic code instead of ten times the same thing */ sprintf( psz_values, "%s %.1f", psz_values, [o_slider_band1 floatValue] ); sprintf( psz_values, "%s %.1f", psz_values, [o_slider_band2 floatValue] ); @@ -275,6 +268,16 @@ static vlc_bool_t GetFiltersStatus( intf_thread_t *p_intf, sprintf( psz_values, "%s %.1f", psz_values, [o_slider_band10 floatValue] ); var_SetString( p_object, "equalizer-bands", psz_values ); + + if( (BOOL)config_GetInt( p_intf, "macosx-eq-keep" ) == YES ) + { + /* save changed to config */ + config_PutPsz( p_intf, "equalizer-bands", psz_values ); + + /* save to vlcrc */ + config_SaveConfigFile( p_intf, "equalizer" ); + } + vlc_object_release( p_object ); } @@ -283,16 +286,15 @@ static vlc_bool_t GetFiltersStatus( intf_thread_t *p_intf, intf_thread_t *p_intf = VLCIntf; int i; vlc_object_t *p_object= vlc_object_find( p_intf, - VLC_OBJECT_AOUT, FIND_ANYWHERE ); - char psz_values[102]; - memset( psz_values, 0, 102 ); - + VLC_OBJECT_AOUT, FIND_ANYWHERE ); if( p_object == NULL ) - p_object = vlc_object_find( p_intf, - VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ); + p_object = pl_Yield( p_intf ); if( p_object == NULL ) return; + char psz_values[102]; + memset( psz_values, 0, 102 ); + var_SetString( p_object , "equalizer-preset" , preset_list[[sender indexOfSelectedItem]] ); for( i = 0; i < 10; i++ ) @@ -301,20 +303,20 @@ static vlc_bool_t GetFiltersStatus( intf_thread_t *p_intf, var_SetFloat( p_object, "equalizer-preamp", eqz_preset_10b[[sender indexOfSelectedItem]]->f_preamp); [o_slider_preamp setFloatValue: eqz_preset_10b[[sender indexOfSelectedItem]]->f_preamp]; - /* - [o_slider_band1 setFloatValue: eqz_preset_10b[[sender indexOfSelectedItem]]->f_amp[0]]; - [o_slider_band2 setFloatValue: eqz_preset_10b[[sender indexOfSelectedItem]]->f_amp[1]]; - [o_slider_band3 setFloatValue: eqz_preset_10b[[sender indexOfSelectedItem]]->f_amp[2]]; - [o_slider_band4 setFloatValue: eqz_preset_10b[[sender indexOfSelectedItem]]->f_amp[3]]; - [o_slider_band5 setFloatValue: eqz_preset_10b[[sender indexOfSelectedItem]]->f_amp[4]]; - [o_slider_band6 setFloatValue: eqz_preset_10b[[sender indexOfSelectedItem]]->f_amp[5]]; - [o_slider_band7 setFloatValue: eqz_preset_10b[[sender indexOfSelectedItem]]->f_amp[6]]; - [o_slider_band8 setFloatValue: eqz_preset_10b[[sender indexOfSelectedItem]]->f_amp[7]]; - [o_slider_band9 setFloatValue: eqz_preset_10b[[sender indexOfSelectedItem]]->f_amp[8]]; - [o_slider_band10 setFloatValue: eqz_preset_10b[[sender indexOfSelectedItem]]->f_amp[9]]; - */ - [self setBandSlidersValues:(float *)eqz_preset_10b[[sender indexOfSelectedItem]]->f_amp]; - + + [self setBandSlidersValues:(float *)eqz_preset_10b[[sender indexOfSelectedItem]]->f_amp]; + + if( (BOOL)config_GetInt( p_intf, "macosx-eq-keep" ) == YES ) + { + /* save changed to config */ + config_PutPsz( p_intf, "equalizer-bands", psz_values ); + config_PutFloat( p_intf, "equalizer-preamp", eqz_preset_10b[[sender indexOfSelectedItem]]->f_preamp ); + config_PutPsz( p_intf, "equalizer-preset", preset_list[[sender indexOfSelectedItem]] ); + + /* save to vlcrc */ + config_SaveConfigFile( p_intf, "equalizer" ); + } + vlc_object_release( p_object ); } @@ -329,15 +331,23 @@ static vlc_bool_t GetFiltersStatus( intf_thread_t *p_intf, float f_preamp = [sender floatValue] ; vlc_object_t *p_object = vlc_object_find( p_intf, - VLC_OBJECT_AOUT, FIND_ANYWHERE ); + VLC_OBJECT_AOUT, FIND_ANYWHERE ); if( p_object == NULL ) - p_object = vlc_object_find( p_intf, - VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ); + p_object = pl_Yield( p_intf ); if( p_object == NULL ) return; var_SetFloat( p_object, "equalizer-preamp", f_preamp ); + if( (BOOL)config_GetInt( p_intf, "macosx-eq-keep" ) == YES ) + { + /* save changed to config */ + config_PutFloat( p_intf, "equalizer-preamp", f_preamp ); + + /* save to vlcrc */ + config_SaveConfigFile( p_intf, "equalizer" ); + } + vlc_object_release( p_object ); } @@ -358,26 +368,34 @@ static vlc_bool_t GetFiltersStatus( intf_thread_t *p_intf, - (IBAction)twopass:(id)sender { intf_thread_t *p_intf = VLCIntf; - vlc_bool_t b_2p = [sender state] ? VLC_TRUE : VLC_FALSE; + bool b_2p = [sender state] ? true : false; vlc_object_t *p_object= vlc_object_find( p_intf, - VLC_OBJECT_AOUT, FIND_ANYWHERE ); + VLC_OBJECT_AOUT, FIND_ANYWHERE ); aout_instance_t *p_aout = (aout_instance_t *)p_object; if( p_object == NULL ) - p_object = vlc_object_find( p_intf, - VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ); + p_object = pl_Yield( p_intf ); if( p_object == NULL ) return; var_SetBool( p_object, "equalizer-2pass", b_2p ); if( ( [o_ckb_enable state] ) && ( p_aout != NULL ) ) { - int i; + int i; for( i = 0; i < p_aout->i_nb_inputs; i++ ) { - p_aout->pp_inputs[i]->b_restart = VLC_TRUE; + p_aout->pp_inputs[i]->b_restart = true; } } + if( (BOOL)config_GetInt( p_intf, "macosx-eq-keep" ) == YES ) + { + /* save changed to config */ + config_PutInt( p_intf, "equalizer-2pass", (int)b_2p ); + + /* save to vlcrc */ + config_SaveConfigFile( p_intf, "equalizer" ); + } + vlc_object_release( p_object ); } @@ -390,10 +408,9 @@ static vlc_bool_t GetFiltersStatus( intf_thread_t *p_intf, { int i; vlc_object_t *p_object= vlc_object_find( VLCIntf, - VLC_OBJECT_AOUT, FIND_ANYWHERE ); + VLC_OBJECT_AOUT, FIND_ANYWHERE ); if( p_object == NULL ) - p_object = vlc_object_find( VLCIntf, - VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ); + p_object = pl_Yield( VLCIntf ); [o_window setExcludedFromWindowsMenu: TRUE]; @@ -404,112 +421,99 @@ static vlc_bool_t GetFiltersStatus( intf_thread_t *p_intf, char *psz_preset; var_Create( p_object, "equalizer-preset", VLC_VAR_STRING | - VLC_VAR_DOINHERIT ); - psz_preset = var_GetString( p_object, "equalizer-preset" ); + VLC_VAR_DOINHERIT ); + psz_preset = var_GetNonEmptyString( p_object, "equalizer-preset" ); - for( i = 0 ; i < 18 ; i++ ) + for( i = 0 ; (psz_preset != NULL) && (i < 18) ; i++ ) { - if( !strcmp( preset_list[i], psz_preset ) ) + if( strcmp( preset_list[i], psz_preset ) ) + continue; + + [o_popup_presets selectItemAtIndex: i]; + + + [o_slider_preamp setFloatValue: eqz_preset_10b[i]->f_preamp]; + [self setBandSlidersValues: (float *)eqz_preset_10b[i]->f_amp]; + + if( strcmp( psz_preset, "flat" ) ) { - [o_popup_presets selectItemAtIndex: i]; - - [o_slider_preamp setFloatValue: eqz_preset_10b[i]->f_preamp]; - [self setBandSlidersValues: (float *)eqz_preset_10b[i]->f_amp]; - - /* - [o_slider_band1 setFloatValue: eqz_preset_10b[i]->f_amp[0]]; - [o_slider_band2 setFloatValue: eqz_preset_10b[i]->f_amp[1]]; - [o_slider_band3 setFloatValue: eqz_preset_10b[i]->f_amp[2]]; - [o_slider_band4 setFloatValue: eqz_preset_10b[i]->f_amp[3]]; - [o_slider_band5 setFloatValue: eqz_preset_10b[i]->f_amp[4]]; - [o_slider_band6 setFloatValue: eqz_preset_10b[i]->f_amp[5]]; - [o_slider_band7 setFloatValue: eqz_preset_10b[i]->f_amp[6]]; - [o_slider_band8 setFloatValue: eqz_preset_10b[i]->f_amp[7]]; - [o_slider_band9 setFloatValue: eqz_preset_10b[i]->f_amp[8]]; - [o_slider_band10 setFloatValue: eqz_preset_10b[i]->f_amp[9]]; - */ - - if( strcmp( psz_preset, "flat" ) ) - { - char psz_bands[100]; - memset( psz_bands, 0, 100 ); - - sprintf( psz_bands, "%.1f %.1f %.1f %.1f %.1f %.1f %.1f " - "%.1f %.1f %.1f", - eqz_preset_10b[i]->f_amp[0], - eqz_preset_10b[i]->f_amp[1], - eqz_preset_10b[i]->f_amp[2], - eqz_preset_10b[i]->f_amp[3], - eqz_preset_10b[i]->f_amp[4], - eqz_preset_10b[i]->f_amp[5], - eqz_preset_10b[i]->f_amp[6], - eqz_preset_10b[i]->f_amp[7], - eqz_preset_10b[i]->f_amp[8], - eqz_preset_10b[i]->f_amp[9] ); - - var_Create( p_object, "equalizer-preamp", VLC_VAR_FLOAT | - VLC_VAR_DOINHERIT ); - var_Create( p_object, "equalizer-bands", VLC_VAR_STRING | - VLC_VAR_DOINHERIT ); - var_SetFloat( p_object, "equalizer-preamp", - eqz_preset_10b[i]->f_preamp ); - var_SetString( p_object, "equalizer-bands", psz_bands ); - } + char psz_bands[100]; + + snprintf( psz_bands, sizeof( psz_bands ), + "%.1f %.1f %.1f %.1f %.1f %.1f %.1f " + "%.1f %.1f %.1f", + eqz_preset_10b[i]->f_amp[0], + eqz_preset_10b[i]->f_amp[1], + eqz_preset_10b[i]->f_amp[2], + eqz_preset_10b[i]->f_amp[3], + eqz_preset_10b[i]->f_amp[4], + eqz_preset_10b[i]->f_amp[5], + eqz_preset_10b[i]->f_amp[6], + eqz_preset_10b[i]->f_amp[7], + eqz_preset_10b[i]->f_amp[8], + eqz_preset_10b[i]->f_amp[9] ); + + var_Create( p_object, "equalizer-preamp", VLC_VAR_FLOAT | + VLC_VAR_DOINHERIT ); + var_Create( p_object, "equalizer-bands", VLC_VAR_STRING | + VLC_VAR_DOINHERIT ); + var_SetFloat( p_object, "equalizer-preamp", + eqz_preset_10b[i]->f_preamp ); + var_SetString( p_object, "equalizer-bands", psz_bands ); } } free( psz_preset ); vlc_object_release( p_object ); } - [self equalizerUpdated]; - + [self equalizerUpdated]; } - (id)getSliderByIndex:(int)index { - switch(index) - { - case 0 : return o_slider_band1; - case 1 : return o_slider_band2; - case 2 : return o_slider_band3; - case 3 : return o_slider_band4; - case 4 : return o_slider_band5; - case 5 : return o_slider_band6; - case 6 : return o_slider_band7; - case 7 : return o_slider_band8; - case 8 : return o_slider_band9; - case 9 : return o_slider_band10; - default : return nil; - } + switch(index) + { + case 0 : return o_slider_band1; + case 1 : return o_slider_band2; + case 2 : return o_slider_band3; + case 3 : return o_slider_band4; + case 4 : return o_slider_band5; + case 5 : return o_slider_band6; + case 6 : return o_slider_band7; + case 7 : return o_slider_band8; + case 8 : return o_slider_band9; + case 9 : return o_slider_band10; + default : return nil; + } } - (void)setBandSlidersValues:(float *)values { - int i = 0; - for (i = 0 ; i<= 9 ; i++) - { - [self setValue:values[i] forSlider:i]; - } + int i = 0; + for (i = 0 ; i<= 9 ; i++) + { + [self setValue:values[i] forSlider:i]; + } } - (void)initBandSliders { - int i = 0; - for (i = 0 ; i< 9 ; i++) - { - [self setValue:0.0 forSlider:i]; - } + int i = 0; + for (i = 0 ; i< 9 ; i++) + { + [self setValue:0.0 forSlider:i]; + } } - (void)setValue:(float)value forSlider:(int)index { - id slider = [self getSliderByIndex:index]; - - if (slider != nil) - { - [slider setFloatValue:value]; - } + id slider = [self getSliderByIndex:index]; + + if (slider != nil) + { + [slider setFloatValue:value]; + } } @end