]> git.sesse.net Git - vlc/blobdiff - modules/gui/wxwidgets/extrapanel.cpp
macosx: Fix addNode:.
[vlc] / modules / gui / wxwidgets / extrapanel.cpp
index 100239a4999aa0e1ce17b6493166674f44637838..deb146460a2fd5929f110836d4be2443993635f1 100644 (file)
@@ -4,7 +4,7 @@
  * Copyright (C) 2000-2004, 2003 the VideoLAN team
  * $Id$
  *
- * Authors: Clément Stenac <zorglub@videolan.org>
+ * Authors: Clément Stenac <zorglub@videolan.org>
  *
  * 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
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  *****************************************************************************/
 
 /*****************************************************************************
  * Preamble
  *****************************************************************************/
-#include <vlc/vlc.h>
-#include <vlc/aout.h>
-#include <aout_internal.h>
-#include <vlc/vout.h>
-#include <vlc/intf.h>
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <vlc_common.h>
+#include <vlc_aout.h>
+#include <vlc_vout.h>
+#include <vlc_interface.h>
 
 #include <math.h>
 
  * Local class declarations.
  *****************************************************************************/
 
-/* FIXME */
-#define SMOOTH_TIP N_( "If this setting is not zero, the bands will move " \
-                "together when you move one. The higher the value is, the " \
-                "more correlated their movement will be." )
+#define SMOOTH_TIP N_( "Controls the blending of equalizer bands. The higher" \
+            " this value is, the more correlated their movement will be." )
 
 static int IntfBandsCallback( vlc_object_t *, char const *,
                               vlc_value_t, vlc_value_t, void * );
 static int IntfPreampCallback( vlc_object_t *, char const *,
                                vlc_value_t, vlc_value_t, void * );
 static void ChangeFiltersString( intf_thread_t *, aout_instance_t *,
-                                 char *, vlc_bool_t );
-static void ChangeVFiltersString( intf_thread_t *, char *, vlc_bool_t );
-
+                                 char *, bool );
+static void ChangeVFiltersString( intf_thread_t *, char *, bool );
+static void ChangeVFilters2String( intf_thread_t *, char *, bool );
 
 /* IDs for the controls and the menu commands */
 enum
@@ -143,17 +144,20 @@ struct filter {
     char *psz_filter;
     char *psz_name;
     char *psz_help;
+    bool  b_vfilter2;
 };
 
 static const struct filter vfilters[] =
 {
-    { "clone", N_("Image clone"), N_("Creates several clones of the image") },
-    { "distort", N_("Distortion"), N_("Adds distorsion effects") },
-    { "invert", N_("Image inversion") , N_("Inverts the image colors") },
-    { "crop", N_("Image cropping"), N_("Crops the image") },
-    { "motionblur", N_("Blurring"), N_("Creates a motion blurring on the image") },
-    { "transform",  N_("Transformation"), N_("Rotates or flips the image") },
-    { "magnify",  N_("Magnify"), N_("Magnifies part of the image") },
+    { "clone", N_("Image clone"), N_("Creates several clones of the image"), false },
+    { "gradient", N_("Cartoon effect"), N_("Gradient effects (cartoon) on the image"), true },
+    { "invert", N_("Image inversion") , N_("Inverts the colors of the image"), true },
+    { "motionblur", N_("Blurring"), N_("Adds motion blurring to the image"), true },
+    { "ripple", N_("Water effect"), N_("Adds water effect to the image"), true },
+    { "wave", N_("Wave effect"), N_("Adds wave effect to the image"), true },
+    { "transform",  N_("Transformation"), N_("Rotates or flips the image"), false },
+    { "magnify",  N_("Magnify"), N_("Magnifies part of the image"), false },
+    { "puzzle",  N_("Puzzle"), N_("Turns the image into a puzzle"), false },
     { NULL, NULL, NULL } /* Do not remove this line */
 };
 
@@ -204,7 +208,7 @@ wxPanel *ExtraPanel::VideoPanel( wxWindow *parent )
 
     /* Create static box to surround the adjust controls */
     wxStaticBox *adjust_box =
-           new wxStaticBox( panel, -1, wxU(_("Adjust Image")) );
+           new wxStaticBox( panel, -1, wxU(_("Image adjustment" )) );
     wxStaticBoxSizer *adjust_sizer =
         new wxStaticBoxSizer( adjust_box, wxVERTICAL );
     adjust_sizer->SetMinSize( -1, 50 );
@@ -311,13 +315,13 @@ wxPanel *ExtraPanel::VideoPanel( wxWindow *parent )
     {
         wxCheckBox *box = new wxCheckBox( panel, Filter0_Event + i,
                                           wxU( _( vfilters[i].psz_name ) ) );
-        t_col_sizer->Add( box, 0, wxALL, 4 );
+        t_col_sizer->Add( box, 0, wxALL, 2 );
         box->SetToolTip( wxU( _( vfilters[i].psz_help ) ) );
     }
 
     filter_sizer->Add( t_col_sizer );
     filter_sizer->Add( new wxButton( panel, FiltersInfo_Event,
-                            wxU(_("More info" ) ) ), 0, wxALL, 4 );
+                            wxU(_("More Info" ) ) ), 0, wxALL, 4 );
 #if 0
     other_sizer->Add( video_sizer, 0, wxALL | wxEXPAND , 0);
     other_sizer->Add( filter_sizer, 0, wxALL | wxEXPAND , 0);
@@ -356,7 +360,7 @@ wxPanel *ExtraPanel::VideoPanel( wxWindow *parent )
         hue_slider->Disable();
         gamma_slider->Disable();
     }
-    if( psz_filters ) free( psz_filters );
+    free( psz_filters );
 
     int i_value = config_GetInt( p_intf, "hue" );
     if( i_value > 0 && i_value < 360 )
@@ -375,7 +379,7 @@ wxPanel *ExtraPanel::VideoPanel( wxWindow *parent )
     if( f_value > 0 && f_value < 10 )
         gamma_slider->SetValue( (int)(10 * f_value) );
 
-    b_update = VLC_FALSE;
+    b_update = false;
 
     return panel;
 }
@@ -397,13 +401,13 @@ wxPanel *ExtraPanel::AudioPanel( wxWindow *parent )
 
     wxCheckBox * headphone_check = new wxCheckBox( panel, HeadPhone_Event,
                                     wxU(_("Headphone virtualization")));
-    headphone_check->SetToolTip( wxU(_("This filter gives the feeling of a "
-             "5.1 speaker set when using a headphone." ) ) );
+    headphone_check->SetToolTip( wxU(_("Imitates the effect of "
+             "surround sound when using headphones." ) ) );
 
     wxCheckBox * normvol_check = new wxCheckBox( panel, NormVol_Event,
                                     wxU(_("Volume normalization")));
-    normvol_check->SetToolTip( wxU(_("This filter prevents the audio output "
-                         "power from going over a defined value." ) ) );
+    normvol_check->SetToolTip( wxU(_("Prevents the audio output "
+                         "level from going over a predefined value." ) ) );
 
     wxStaticText *normvol_label = new wxStaticText( panel, -1,
                                    wxU( _("Maximum level") ) );
@@ -467,14 +471,14 @@ wxPanel *ExtraPanel::EqzPanel( wxWindow *parent )
     eq_chkbox =  new wxCheckBox( panel, EqEnable_Event,
                             wxU(_("Enable") ) );
     eq_chkbox->SetToolTip( wxU(_("Enable the equalizer. You can either "
-    "manually change the bands or use a preset (Audio Menu->Equalizer)." ) ) );
+    "manually adjust the bands or use a preset (Audio Menu->Equalizer)." ) ) );
     top_sizer->Add( eq_chkbox, 0, wxALL, 2 );
 
     eq_2p_chkbox =  new wxCheckBox( panel, Eq2Pass_Event,
                             wxU(_("2 Pass") ) );
 
-    eq_2p_chkbox->SetToolTip( wxU(_("If you enable this setting, the "
-     "equalizer filter will be applied twice. The effect will be sharper.") ) );
+    eq_2p_chkbox->SetToolTip( wxU(_("Apply the equalizer twice. "
+               "The resulting effect will be sharper.") ) );
 
     top_sizer->Add( eq_2p_chkbox, 0, wxALL, 2 );
 
@@ -485,13 +489,13 @@ wxPanel *ExtraPanel::EqzPanel( wxWindow *parent )
     top_sizer->Add( eq_restoredefaults_button, 0, wxALL, 2 );
     top_sizer->Add( 0, 0, 1, wxALL, 2 );
 
-    smooth_text = new wxStaticText( panel, -1, wxU( "Smooth :" ));
-    smooth_text->SetToolTip( wxU( SMOOTH_TIP ) );
+    smooth_text = new wxStaticText( panel, -1, wxU( _("Smooth :") ));
+    smooth_text->SetToolTip( wxU( _(SMOOTH_TIP) ) );
     top_sizer->Add( smooth_text, 0, wxALL, 2 );
 
     smooth_slider =new wxSlider( panel, Smooth_Event, 0, 0, 10 ,
                     wxDefaultPosition, wxSize( 100, -1 ) );
-    smooth_slider->SetToolTip( wxU( SMOOTH_TIP ) );
+    smooth_slider->SetToolTip( wxU( _(SMOOTH_TIP) ) );
     top_sizer->Add( smooth_slider, 0, wxALL, 2 );
     i_smooth = 0;
 
@@ -516,7 +520,7 @@ wxPanel *ExtraPanel::EqzPanel( wxWindow *parent )
         eq_gridsizer->Add( band_sliders[i], 1, wxEXPAND|wxALL, 2 );
     }
 
-    preamp_text = new wxStaticText( panel, -1, wxT( "Preamp\n12.0dB" ) );
+    preamp_text = new wxStaticText( panel, -1, wxU( _("Preamp\n12.0dB") ) );
     wxFont font= preamp_text->GetFont();
     font.SetPointSize(7);
     preamp_text->SetFont( font );
@@ -547,13 +551,13 @@ wxPanel *ExtraPanel::EqzPanel( wxWindow *parent )
 
     aout_instance_t *p_aout = (aout_instance_t *)vlc_object_find(p_intf,
                                  VLC_OBJECT_AOUT, FIND_ANYWHERE);
-    char *psz_af = NULL;
+    char *psz_af;
     if( p_aout )
     {
-        psz_af = var_GetString( p_aout, "audio-filter" );
+        psz_af = var_GetNonEmptyString( p_aout, "audio-filter" );
         if( var_GetBool( p_aout, "equalizer-2pass" ) )
             eq_2p_chkbox->SetValue( true );
-       vlc_object_release( p_aout );
+        vlc_object_release( p_aout );
     }
     else
     {
@@ -561,7 +565,7 @@ wxPanel *ExtraPanel::EqzPanel( wxWindow *parent )
         if( config_GetInt( p_intf, "equalizer-2pass" ) )
             eq_2p_chkbox->SetValue( true );
     }
-    if( psz_af != NULL ? strstr( psz_af, "equalizer" ) != NULL : VLC_FALSE )
+    if( psz_af != NULL && strstr( psz_af, "equalizer" ) )
     {
         eq_chkbox->SetValue( true );
     } else {
@@ -590,11 +594,11 @@ wxPanel *ExtraPanel::EqzPanel( wxWindow *parent )
 void ExtraPanel::OnIdle( wxIdleEvent &event )
 {
     CheckAout();
-    if( b_update == VLC_TRUE )
+    if( b_update == true )
     {
-        if( b_my_update == VLC_TRUE )
+        if( b_my_update == true )
         {
-            b_update = b_my_update = VLC_FALSE;
+            b_update = b_my_update = false;
             return;
         }
         char *p = psz_bands;
@@ -626,7 +630,7 @@ void ExtraPanel::OnIdle( wxIdleEvent &event )
         const wxString preamp = wxT("Preamp\n");
         preamp_text->SetLabel( preamp + wxU( psz_val ) + wxT( "dB" ) );
         eq_chkbox->SetValue( TRUE );
-        b_update = VLC_FALSE;
+        b_update = false;
     }
 }
 
@@ -639,7 +643,7 @@ void ExtraPanel::OnEnableEqualizer( wxCommandEvent &event )
     aout_instance_t *p_aout= (aout_instance_t *)vlc_object_find(p_intf,
                                  VLC_OBJECT_AOUT, FIND_ANYWHERE);
     ChangeFiltersString( p_intf,p_aout, "equalizer",
-                         event.IsChecked() ? VLC_TRUE : VLC_FALSE );
+                         event.IsChecked() ? true : false );
 
     if( event.IsChecked() )
     {
@@ -679,7 +683,7 @@ void ExtraPanel::OnEqRestore( wxCommandEvent &event )
     if( p_aout == NULL )
     {
         vlc_value_t val;
-        vlc_bool_t b_previous = eq_chkbox->IsChecked();
+        bool b_previous = eq_chkbox->IsChecked();
         val.f_float = 12.0;
         IntfPreampCallback( NULL, NULL, val,val, this );
         config_PutFloat( p_intf, "equalizer-preamp", 12.0 );
@@ -709,7 +713,7 @@ void ExtraPanel::OnEq2Pass( wxCommandEvent &event )
     aout_instance_t *p_aout= (aout_instance_t *)vlc_object_find(p_intf,
                                  VLC_OBJECT_AOUT, FIND_ANYWHERE);
 
-    vlc_bool_t b_2p = event.IsChecked() ? VLC_TRUE : VLC_FALSE;
+    bool b_2p = event.IsChecked() ? true : false;
 
     if( p_aout == NULL )
     {
@@ -723,7 +727,7 @@ void ExtraPanel::OnEq2Pass( wxCommandEvent &event )
         {
             for( int 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;
             }
         }
         vlc_object_release( p_aout );
@@ -756,7 +760,7 @@ void ExtraPanel::OnPreamp( wxScrollEvent &event )
     {
         var_SetFloat( p_aout, "equalizer-preamp", f );
         config_PutFloat( p_intf, "equalizer-preamp", f );
-        b_my_update = VLC_TRUE;
+        b_my_update = true;
         vlc_object_release( p_aout );
     }
 }
@@ -808,7 +812,7 @@ void ExtraPanel::OnChangeEqualizer( wxScrollEvent &event )
     {
         var_SetString( p_aout, "equalizer-bands", psz_values );
         config_PutPsz( p_intf, "equalizer-bands", psz_values );
-        b_my_update = VLC_TRUE;
+        b_my_update = true;
         vlc_object_release( p_aout );
     }
 }
@@ -821,7 +825,7 @@ void ExtraPanel::OnHeadphone( wxCommandEvent &event )
     aout_instance_t *p_aout= (aout_instance_t *)vlc_object_find(p_intf,
                                  VLC_OBJECT_AOUT, FIND_ANYWHERE);
     ChangeFiltersString( p_intf , p_aout, "headphone_channel_mixer",
-                         event.IsChecked() ? VLC_TRUE : VLC_FALSE );
+                         event.IsChecked() ? true : false );
     if( p_aout != NULL )
         vlc_object_release( p_aout );
 }
@@ -831,7 +835,7 @@ void ExtraPanel::OnNormvol( wxCommandEvent &event )
     aout_instance_t *p_aout= (aout_instance_t *)vlc_object_find(p_intf,
                                  VLC_OBJECT_AOUT, FIND_ANYWHERE);
     ChangeFiltersString( p_intf , p_aout, "normvol",
-                         event.IsChecked() ? VLC_TRUE : VLC_FALSE );
+                         event.IsChecked() ? true : false );
     if( p_aout != NULL )
         vlc_object_release( p_aout );
 }
@@ -857,7 +861,7 @@ void ExtraPanel::OnNormvolSlider( wxScrollEvent &event )
 void ExtraPanel::OnEnableAdjust(wxCommandEvent& event)
 {
     ChangeVFiltersString( p_intf,  "adjust",
-                          event.IsChecked() ? VLC_TRUE : VLC_FALSE );
+                          event.IsChecked() ? true : false );
 
     if( event.IsChecked() )
     {
@@ -983,7 +987,7 @@ void ExtraPanel::OnAdjustUpdate( wxScrollEvent &event)
 /* FIXME */
 void ExtraPanel::OnRatio( wxCommandEvent& event )
 {
-   config_PutPsz( p_intf, "aspect-ratio", ratio_combo->GetValue().mb_str() );
+   config_PutPsz( p_intf, "aspect-ratio", ratio_combo->GetValue().mb_str(wxConvUTF8) );
 }
 
 
@@ -992,24 +996,26 @@ void ExtraPanel::OnSelectFilter(wxCommandEvent& event)
     int i_filter = event.GetId() - Filter0_Event ;
     if( vfilters[i_filter].psz_filter  )
     {
-        ChangeVFiltersString( p_intf, vfilters[i_filter].psz_filter ,
-                              event.IsChecked() ? VLC_TRUE : VLC_FALSE );
+        if( vfilters[i_filter].b_vfilter2 )
+            ChangeVFilters2String( p_intf, vfilters[i_filter].psz_filter ,
+                                event.IsChecked() ? true : false );
+        else
+            ChangeVFiltersString( p_intf, vfilters[i_filter].psz_filter ,
+                                  event.IsChecked() ? true : false );
     }
 }
 
 void ExtraPanel::OnFiltersInfo(wxCommandEvent& event)
 {
-    wxMessageBox( wxU( _("Select the video effects filters to apply. "
+    wxMessageBox( wxU( _("Filtering effects to apply to the video. "
                   "You must restart the stream for these settings to "
-                  "take effect.\n"
-                  "To configure the filters, go to the Preferences, "
-                  "and go to Modules/Video Filters. "
-                  "You can then configure each filter.\n"
-                  "If you want fine control over the filters ( to choose "
-                  "the order in which they are applied ), you need to enter "
-                  "manually a filters string (Preferences / Video / Filters)."
+                  "take effect.\n\n"
+                  "To configure these filters, go to Preferences / Video / "
+                  "Filters. In order to control the order in which they "
+                  "are applied, enter a filters string in the Video Filter "
+                  "Module inside the preferences."
                   ) ),
-                    wxU( _("More information" ) ), wxOK | wxICON_INFORMATION,
+                    wxU( _("More Information" ) ), wxOK | wxICON_INFORMATION,
                     this->p_parent );
 }
 /**********************************
@@ -1041,16 +1047,17 @@ void ExtraPanel::CheckAout()
             p_intf->p_sys->p_aout = p_aout;
 
             f_preamp = var_GetFloat( p_aout, "equalizer-preamp" );
-            psz_bands = var_GetString( p_aout, "equalizer-bands" );
-            b_update = VLC_TRUE;
+            psz_bands = var_GetNonEmptyString( p_aout, "equalizer-bands" );
+            if( psz_bands == NULL )
+                psz_bands = strdup("");
+            b_update = true;
         }
         vlc_object_release( p_aout );
     }
 }
 
-
 static void ChangeVFiltersString( intf_thread_t *p_intf,
-                                 char *psz_name, vlc_bool_t b_add )
+                                  char *psz_name, bool b_add )
 {
     vout_thread_t *p_vout;
     char *psz_parser, *psz_string;
@@ -1110,16 +1117,76 @@ static void ChangeVFiltersString( intf_thread_t *p_intf,
     free( psz_string );
 }
 
+static void ChangeVFilters2String( intf_thread_t *p_intf,
+                                  char *psz_name, bool b_add )
+{
+    vout_thread_t *p_vout;
+    char *psz_parser, *psz_string;
+
+    psz_string = config_GetPsz( p_intf, "video-filter" );
+
+    if( !psz_string ) psz_string = strdup("");
+
+    psz_parser = strstr( psz_string, psz_name );
+
+    if( b_add )
+    {
+        if( !psz_parser )
+        {
+            psz_parser = psz_string;
+            asprintf( &psz_string, (*psz_string) ? "%s:%s" : "%s%s",
+                            psz_string, psz_name );
+            free( psz_parser );
+        }
+        else
+        {
+            return;
+        }
+    }
+    else
+    {
+        if( psz_parser )
+        {
+            memmove( psz_parser, psz_parser + strlen(psz_name) +
+                            (*(psz_parser + strlen(psz_name)) == ':' ? 1 : 0 ),
+                            strlen(psz_parser + strlen(psz_name)) + 1 );
+
+            /* Remove trailing : : */
+            if( *(psz_string+strlen(psz_string ) -1 ) == ':' )
+            {
+                *(psz_string+strlen(psz_string ) -1 ) = '\0';
+            }
+         }
+         else
+         {
+             free( psz_string );
+             return;
+         }
+    }
+    /* Vout is not kept, so put that in the config */
+    config_PutPsz( p_intf, "video-filter", psz_string );
+
+    /* Try to set on the fly */
+    p_vout = (vout_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_VOUT,
+                                              FIND_ANYWHERE );
+    if( p_vout )
+    {
+        var_SetString( p_vout, "video-filter", psz_string );
+        vlc_object_release( p_vout );
+    }
+    free( psz_string );
+}
+
 
 static void ChangeFiltersString( intf_thread_t *p_intf,
                                  aout_instance_t * p_aout,
-                                 char *psz_name, vlc_bool_t b_add )
+                                 char *psz_name, bool b_add )
 {
     char *psz_parser, *psz_string;
 
     if( p_aout )
     {
-        psz_string = var_GetString( p_aout, "audio-filter" );
+        psz_string = var_GetNonEmptyString( p_aout, "audio-filter" );
     }
     else
     {
@@ -1173,7 +1240,7 @@ static void ChangeFiltersString( intf_thread_t *p_intf,
         var_SetString( p_aout, "audio-filter", psz_string );
         for( int 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;
         }
     }
     free( psz_string );
@@ -1186,7 +1253,7 @@ static int IntfBandsCallback( vlc_object_t *p_this, char const *psz_cmd,
     ExtraPanel *p_panel = (ExtraPanel *)param;
 
     p_panel->psz_bands = strdup( newval.psz_string );
-    p_panel->b_update = VLC_TRUE;
+    p_panel->b_update = true;
 
     return VLC_SUCCESS;
 }
@@ -1197,7 +1264,7 @@ static int IntfPreampCallback( vlc_object_t *p_this, char const *psz_cmd,
     ExtraPanel *p_panel = (ExtraPanel *)param;
 
     p_panel->f_preamp = newval.f_float;
-    p_panel->b_update = VLC_TRUE;
+    p_panel->b_update = true;
 
     return VLC_SUCCESS;
 }
@@ -1215,13 +1282,11 @@ ExtraWindow::ExtraWindow( intf_thread_t *_p_intf, wxWindow *p_parent,
        wxFrame( p_parent, -1, wxU(_("Extended controls")), wxDefaultPosition,
                  wxDefaultSize, wxDEFAULT_FRAME_STYLE )
 {
-        fprintf(stderr,"Creating extrawindow\n");
     p_intf = _p_intf;
     SetIcon( *p_intf->p_sys->p_icon );
 
     wxBoxSizer *window_sizer = new wxBoxSizer( wxVERTICAL );
     SetSizer( window_sizer );
-//    panel = new ExtraPanel(  p_intf, this );//_extra_panel;
 
     panel = _extra_panel;
     window_sizer->Add( panel );