--- /dev/null
+/*****************************************************************************
+ * extrapanel.cpp : wxWindows plugin for vlc
+ *****************************************************************************
+ * Copyright (C) 2000-2004, 2003 VideoLAN
+ * $Id: interface.cpp 8152 2004-07-08 10:52:23Z gbazin $
+ *
+ * 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
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+/*****************************************************************************
+ * Preamble
+ *****************************************************************************/
+#include <vlc/vlc.h>
+#include <vlc/aout.h>
+#include <aout_internal.h>
+#include <vlc/vout.h>
+#include <vlc/intf.h>
+
+#include <math.h>
+
+#include "wxwindows.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." )
+
+static int IntfBandsCallback( vlc_object_t *p_this, char const *psz_cmd,
+ vlc_value_t oldval, vlc_value_t newval, void *param );
+static int IntfPreampCallback( vlc_object_t *p_this, char const *psz_cmd,
+ vlc_value_t oldval, vlc_value_t newval, void *param );
+static void ChangeFiltersString( intf_thread_t *p_intf,
+ aout_instance_t * p_aout,
+ char *psz_name, vlc_bool_t b_add );
+static void ChangeVFiltersString( intf_thread_t *p_intf,
+ char *psz_name, vlc_bool_t b_add );
+
+
+/* IDs for the controls and the menu commands */
+enum
+{
+ Notebook_Event,
+
+ Adjust_Event,
+ RestoreDefaults_Event,
+
+ Hue_Event,
+ Contrast_Event,
+ Brightness_Event,
+ Saturation_Event,
+ Gamma_Event,
+ Ratio_Event,
+
+ FiltersInfo_Event,
+
+ Filter0_Event, Filter1_Event, Filter2_Event, Filter3_Event, Filter4_Event,
+ Filter5_Event, Filter6_Event, Filter7_Event, Filter8_Event, Filter9_Event,
+
+ EqEnable_Event,
+ Eq2Pass_Event,
+ EqRestore_Event,
+
+ Smooth_Event,
+
+ Preamp_Event,
+
+ Band0_Event,Band1_Event,Band2_Event,Band3_Event,Band4_Event,
+ Band5_Event,Band6_Event,Band7_Event,Band8_Event,Band9_Event,
+
+ NormVol_Event, NVSlider_Event, HeadPhone_Event
+};
+
+BEGIN_EVENT_TABLE( ExtraPanel, wxPanel )
+ EVT_IDLE( ExtraPanel::OnIdle )
+
+ /* Equalizer */
+ EVT_CHECKBOX( EqEnable_Event, ExtraPanel::OnEnableEqualizer )
+ EVT_CHECKBOX( Eq2Pass_Event, ExtraPanel::OnEq2Pass )
+ EVT_BUTTON( EqRestore_Event, ExtraPanel::OnEqRestore )
+
+ EVT_COMMAND_SCROLL( Preamp_Event, ExtraPanel::OnPreamp )
+ EVT_COMMAND_SCROLL( Smooth_Event, ExtraPanel::OnEqSmooth )
+
+ EVT_COMMAND_SCROLL(Band0_Event, ExtraPanel::OnChangeEqualizer)
+ EVT_COMMAND_SCROLL(Band1_Event, ExtraPanel::OnChangeEqualizer)
+ EVT_COMMAND_SCROLL(Band2_Event, ExtraPanel::OnChangeEqualizer)
+ EVT_COMMAND_SCROLL(Band3_Event, ExtraPanel::OnChangeEqualizer)
+ EVT_COMMAND_SCROLL(Band4_Event, ExtraPanel::OnChangeEqualizer)
+ EVT_COMMAND_SCROLL(Band5_Event, ExtraPanel::OnChangeEqualizer)
+ EVT_COMMAND_SCROLL(Band6_Event, ExtraPanel::OnChangeEqualizer)
+ EVT_COMMAND_SCROLL(Band7_Event, ExtraPanel::OnChangeEqualizer)
+ EVT_COMMAND_SCROLL(Band8_Event, ExtraPanel::OnChangeEqualizer)
+ EVT_COMMAND_SCROLL(Band9_Event, ExtraPanel::OnChangeEqualizer)
+
+ /* Video */
+ EVT_CHECKBOX( Adjust_Event, ExtraPanel::OnEnableAdjust )
+ EVT_BUTTON( RestoreDefaults_Event, ExtraPanel::OnRestoreDefaults )
+
+ EVT_COMMAND_SCROLL(Hue_Event, ExtraPanel::OnAdjustUpdate)
+ EVT_COMMAND_SCROLL(Contrast_Event, ExtraPanel::OnAdjustUpdate)
+ EVT_COMMAND_SCROLL(Brightness_Event, ExtraPanel::OnAdjustUpdate)
+ EVT_COMMAND_SCROLL(Saturation_Event, ExtraPanel::OnAdjustUpdate)
+ EVT_COMMAND_SCROLL(Gamma_Event, ExtraPanel::OnAdjustUpdate)
+
+ EVT_BUTTON( FiltersInfo_Event, ExtraPanel::OnFiltersInfo )
+
+ EVT_CHECKBOX( Filter0_Event, ExtraPanel::OnSelectFilter )
+ EVT_CHECKBOX( Filter1_Event, ExtraPanel::OnSelectFilter )
+ EVT_CHECKBOX( Filter2_Event, ExtraPanel::OnSelectFilter )
+ EVT_CHECKBOX( Filter3_Event, ExtraPanel::OnSelectFilter )
+ EVT_CHECKBOX( Filter4_Event, ExtraPanel::OnSelectFilter )
+ EVT_CHECKBOX( Filter5_Event, ExtraPanel::OnSelectFilter )
+ EVT_CHECKBOX( Filter6_Event, ExtraPanel::OnSelectFilter )
+ EVT_CHECKBOX( Filter7_Event, ExtraPanel::OnSelectFilter )
+ EVT_CHECKBOX( Filter8_Event, ExtraPanel::OnSelectFilter )
+ EVT_CHECKBOX( Filter9_Event, ExtraPanel::OnSelectFilter )
+
+ /* Audio */
+ EVT_CHECKBOX( NormVol_Event, ExtraPanel::OnNormvol )
+ EVT_CHECKBOX( HeadPhone_Event, ExtraPanel::OnHeadphone )
+
+ EVT_COMMAND_SCROLL( NVSlider_Event, ExtraPanel::OnNormvolSlider )
+
+END_EVENT_TABLE()
+
+struct filter {
+ char *psz_filter;
+ char *psz_name;
+ char *psz_help;
+};
+
+static const struct filter vfilters[] =
+{
+ { "clone", "Image clone","Creates several clones of the image" },
+ { "distort", "Distortion", "Adds distorsion effects" },
+ { "invert", "Image inversion" , "Inverts the image colors" },
+ { "crop","Image cropping", "Crops the image" },
+ { "motionblur", "Blurring", "Creates a motion blurring on the image" },
+ { "transform","Transformation","Rotates or flips the image" },
+ {NULL , NULL , NULL } /* Do not remove this line */
+};
+
+/*****************************************************************************
+ * Constructor.
+ *****************************************************************************/
+ExtraPanel::ExtraPanel( intf_thread_t *_p_intf, wxWindow *_p_parent ):
+ wxPanel( _p_parent , -1, wxDefaultPosition, wxDefaultSize )
+{
+
+ p_intf = _p_intf;
+ p_parent = _p_parent;
+ SetAutoLayout( TRUE );
+
+ wxBoxSizer *extra_sizer = new wxBoxSizer( wxHORIZONTAL );
+
+ notebook = new wxNotebook( this, Notebook_Event );
+
+ wxNotebookSizer *notebook_sizer = new wxNotebookSizer( notebook );
+
+ notebook->AddPage( VideoPanel( notebook ), wxU(_("Video")) );
+ notebook->AddPage( EqzPanel( notebook ), wxU(_("Equalizer")) );
+ notebook->AddPage( AudioPanel( notebook ), wxU(_("Audio")) );
+
+ extra_sizer->Add( notebook_sizer, 1, wxEXPAND, 0 );
+
+ SetSizerAndFit( extra_sizer );
+ extra_sizer->Layout();
+}
+
+ExtraPanel::~ExtraPanel()
+{
+}
+
+
+/* Video Panel constructor */
+wxPanel *ExtraPanel::VideoPanel( wxWindow *parent )
+{
+ char *psz_filters;
+
+ wxPanel *panel = new wxPanel( parent, -1 );
+ wxBoxSizer *panel_sizer = new wxBoxSizer( wxHORIZONTAL );
+
+ /* Create static box to surround the adjust controls */
+ wxStaticBox *adjust_box =
+ new wxStaticBox( panel, -1, wxU(_("Adjust Image")) );
+ wxStaticBoxSizer *adjust_sizer =
+ new wxStaticBoxSizer( adjust_box, wxVERTICAL );
+ adjust_sizer->SetMinSize( -1, 50 );
+
+ /* Create flex grid */
+ wxFlexGridSizer *adjust_gridsizer =
+ new wxFlexGridSizer( 6, 2, 0, 0);
+ adjust_gridsizer->AddGrowableCol(1);
+
+ /* Create the adjust button */
+ wxCheckBox * adjust_check = new wxCheckBox( panel, Adjust_Event,
+ wxU(_("Enable")));
+
+ /* Create the restore to defaults button */
+ restoredefaults_button =
+ new wxButton( panel, RestoreDefaults_Event,
+ wxU(_("Restore Defaults")), wxDefaultPosition);
+
+ wxStaticText *hue_text = new wxStaticText( panel, -1,
+ wxU(_("Hue")) );
+ hue_slider = new wxSlider ( panel, Hue_Event, 0, 0,
+ 360, wxDefaultPosition, wxDefaultSize );
+
+ wxStaticText *contrast_text = new wxStaticText( panel, -1,
+ wxU(_("Contrast")) );
+ contrast_slider = new wxSlider ( panel, Contrast_Event, 0, 0,
+ 200, wxDefaultPosition, wxDefaultSize);
+
+ wxStaticText *brightness_text = new wxStaticText( panel, -1,
+ wxU(_("Brightness")) );
+ brightness_slider = new wxSlider ( panel, Brightness_Event, 0, 0,
+ 200, wxDefaultPosition, wxDefaultSize) ;
+
+ wxStaticText *saturation_text = new wxStaticText( panel, -1,
+ wxU(_("Saturation")) );
+ saturation_slider = new wxSlider ( panel, Saturation_Event, 0, 0,
+ 300, wxDefaultPosition, wxDefaultSize );
+
+ wxStaticText *gamma_text = new wxStaticText( panel, -1,
+ wxU(_("Gamma")) );
+ gamma_slider = new wxSlider ( panel, Gamma_Event, 0, 0,
+ 100, wxDefaultPosition, wxDefaultSize );
+
+ adjust_gridsizer->Add(adjust_check, 1, wxEXPAND, 0);
+ adjust_gridsizer->Add(restoredefaults_button, 1, wxEXPAND, 0);
+ adjust_gridsizer->Add(hue_text, 1, wxEXPAND, 0);
+ adjust_gridsizer->Add(hue_slider, 1, wxEXPAND, 0);
+ adjust_gridsizer->Add(contrast_text, 1, wxEXPAND, 0);
+ adjust_gridsizer->Add(contrast_slider, 1, wxEXPAND, 0);
+ adjust_gridsizer->Add(brightness_text, 1, wxEXPAND, 0);
+ adjust_gridsizer->Add(brightness_slider, 1, wxEXPAND, 0);
+ adjust_gridsizer->Add(saturation_text, 1, wxEXPAND, 0);
+ adjust_gridsizer->Add(saturation_slider, 1, wxEXPAND, 0);
+ adjust_gridsizer->Add(gamma_text, 1, wxEXPAND, 0);
+ adjust_gridsizer->Add(gamma_slider, 1, wxEXPAND, 0);
+
+ adjust_sizer->Add(adjust_gridsizer,1,wxEXPAND, 0);
+
+ panel_sizer->Add( adjust_sizer , 1 );
+
+#if 0
+ /* Create sizer to surround the other controls */
+ wxBoxSizer *other_sizer = new wxBoxSizer( wxVERTICAL );
+
+ wxStaticBox *video_box =
+ new wxStaticBox( panel, -1, wxU(_("Video Options")) );
+ /* Create the sizer for the frame */
+ wxStaticBoxSizer *video_sizer =
+ new wxStaticBoxSizer( video_box, wxVERTICAL );
+ video_sizer->SetMinSize( -1, 50 );
+
+ static const wxString ratio_array[] =
+ {
+ wxT("4:3"),
+ wxT("16:9"),
+ };
+
+ wxBoxSizer *ratio_sizer = new wxBoxSizer( wxHORIZONTAL );
+ wxStaticText *ratio_text = new wxStaticText( panel, -1,
+ wxU(_("Aspect Ratio")) );
+
+ ratio_combo = new wxComboBox( panel, Ratio_Event, wxT(""),
+ wxDefaultPosition, wxSize( 80 , -1),
+ WXSIZEOF(ratio_array), ratio_array,
+ 0 );
+
+ ratio_sizer->Add( ratio_text, 0 );
+ ratio_sizer->Add( ratio_combo, 0 );
+ ratio_sizer->Layout();
+
+ video_sizer->Add( ratio_sizer , 0 , wxALL , 0 );
+ video_sizer->Layout();
+#endif
+ wxStaticBox *filter_box =
+ new wxStaticBox( panel, -1, wxU(_("Video Filters")) );
+ wxStaticBoxSizer *filter_sizer =
+ new wxStaticBoxSizer( filter_box, wxHORIZONTAL );
+
+ wxBoxSizer *t_col_sizer = new wxBoxSizer( wxVERTICAL );
+
+
+ for( int i = 0 ; vfilters[i].psz_filter != NULL ; i++ )
+ {
+ wxCheckBox *box = new wxCheckBox( panel, Filter0_Event + i,
+ wxT( _( vfilters[i].psz_name ) ) );
+ t_col_sizer->Add( box );
+ box->SetToolTip( wxT( _( vfilters[i].psz_help ) ) );
+ }
+
+ filter_sizer->Add( t_col_sizer );
+ filter_sizer->Add( new wxButton( panel, FiltersInfo_Event,
+ wxU(_("More info" ) ) ) );
+#if 0
+ other_sizer->Add( video_sizer, 0, wxALL | wxEXPAND , 0);
+ other_sizer->Add( filter_sizer, 0, wxALL | wxEXPAND , 0);
+ other_sizer->Layout();
+ panel_sizer->Add(other_sizer , 1 );
+#endif
+
+ panel_sizer->Add( filter_sizer, 1 );
+
+ panel->SetSizerAndFit( panel_sizer );
+
+ /* Layout the whole panel */
+ panel_sizer->Layout();
+
+ panel_sizer->SetSizeHints( panel );
+
+ /* Write down initial values */
+ psz_filters = config_GetPsz( p_intf, "filter" );
+ if( psz_filters && strstr( psz_filters, "adjust" ) )
+ {
+ adjust_check->SetValue( 1 );
+ restoredefaults_button->Enable();
+ saturation_slider->Enable();
+ contrast_slider->Enable();
+ brightness_slider->Enable();
+ hue_slider->Enable();
+ gamma_slider->Enable();
+ }
+ else
+ {
+ adjust_check->SetValue( 0 );
+ restoredefaults_button->Disable();
+ saturation_slider->Disable();
+ contrast_slider->Disable();
+ brightness_slider->Disable();
+ hue_slider->Disable();
+ gamma_slider->Disable();
+ }
+ if( psz_filters ) free( psz_filters );
+
+ int i_value = config_GetInt( p_intf, "hue" );
+ if( i_value > 0 && i_value < 360 )
+ hue_slider->SetValue( i_value );
+ float f_value;
+ f_value = config_GetFloat( p_intf, "saturation" );
+ if( f_value > 0 && f_value < 5 )
+ saturation_slider->SetValue( (int)(100 * f_value) );
+ f_value = config_GetFloat( p_intf, "contrast" );
+ if( f_value > 0 && f_value < 4 )
+ contrast_slider->SetValue( (int)(100 * f_value) );
+ f_value = config_GetFloat( p_intf, "brightness" );
+ if( f_value > 0 && f_value < 2 )
+ brightness_slider->SetValue( (int)(100 * f_value) );
+ f_value = config_GetFloat( p_intf, "gamma" );
+ if( f_value > 0 && f_value < 10 )
+ gamma_slider->SetValue( (int)(10 * f_value) );
+
+ return panel;
+}
+
+/* Audio panel constructor */
+wxPanel *ExtraPanel::AudioPanel( wxWindow *parent )
+{
+ char *psz_filters;
+
+ wxPanel *panel = new wxPanel( parent, -1 );
+ wxBoxSizer *panel_sizer = new wxBoxSizer( wxHORIZONTAL );
+
+ /* Create static box to surround the adjust controls */
+ wxStaticBox *filter_box =
+ new wxStaticBox( panel, -1, wxU(_("Audio filters")) );
+ wxStaticBoxSizer *filter_sizer =
+ new wxStaticBoxSizer( filter_box, wxVERTICAL );
+ filter_sizer->SetMinSize( -1, 50 );
+
+ 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." ) ) );
+
+ 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" ) ) );
+
+ wxStaticText *normvol_label = new wxStaticText( panel, -1,
+ wxU( _("Maximum level") ) );
+
+ wxSlider *normvol_slider = new wxSlider ( panel, NVSlider_Event, 20, 5,
+ 100, wxDefaultPosition, wxSize( 100, -1 ) );
+
+ filter_sizer->Add( headphone_check );
+ filter_sizer->Add( normvol_check );
+ filter_sizer->Add( normvol_label, 0, wxLEFT, 10 );
+ filter_sizer->Add( normvol_slider, 0, wxLEFT, 10 );
+
+ panel_sizer->Add( filter_sizer, 1 );
+ panel->SetSizerAndFit( panel_sizer );
+ panel_sizer->Layout();
+ panel_sizer->SetSizeHints( panel );
+
+ /* Write down initial values */
+ psz_filters = config_GetPsz( p_intf, "audio-filter" );
+ if( psz_filters )
+ {
+ headphone_check->SetValue( strstr( psz_filters, "headphone" ) );
+ normvol_check->SetValue( strstr( psz_filters, "normvol" ) );
+ free( psz_filters );
+ }
+ else
+ {
+ headphone_check->SetValue( 0 );
+ normvol_check->SetValue( 0 );
+ }
+
+ return panel;
+}
+
+
+static const wxString band_frequencies[] =
+{
+ wxT(" 60 Hz"),
+ wxT("170 Hz"),
+ wxT("310 Hz"),
+ wxT("600 Hz"),
+ wxT(" 1 kHz"),
+ wxT(" 3 kHz"),
+ wxT(" 6 kHz"),
+ wxT("12 kHz"),
+ wxT("14 kHz"),
+ wxT("16 kHz")
+};
+
+/* Equalizer Panel constructor */
+wxPanel *ExtraPanel::EqzPanel( wxWindow *parent )
+{
+ wxPanel *panel = new wxPanel( parent, -1 );
+ wxBoxSizer *panel_sizer = new wxBoxSizer( wxVERTICAL );
+
+ /* Create static box to surround the adjust controls */
+ wxBoxSizer *top_sizer =
+ new wxBoxSizer( wxHORIZONTAL );
+
+ /* Create the enable button */
+ 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)." ) ) );
+ top_sizer->Add( eq_chkbox );
+
+ eq_2p_chkbox = new wxCheckBox( panel, Eq2Pass_Event,
+ wxU(_("2 Pass") ) );
+
+ eq_2p_chkbox->SetToolTip( wxU(_("If you enable this settting, the "
+ "equalizer filter will be applied twice. The effect will be sharper") ) );
+
+ top_sizer->Add( eq_2p_chkbox );
+
+ top_sizer->Add( 0, 0, 1 );
+
+ top_sizer->Add( new wxButton( panel, EqRestore_Event,
+ wxU( _("Restore defaults") ) ) );
+ top_sizer->Add( 0, 0, 1 );
+
+ wxStaticText *smooth_text = new wxStaticText( panel, -1, wxU( "Smooth :" ));
+ smooth_text->SetToolTip( wxU( SMOOTH_TIP ) );
+ top_sizer->Add( smooth_text );
+
+ smooth_slider =new wxSlider( panel, Smooth_Event, 0, 0, 10 ,
+ wxDefaultPosition, wxSize( 100, -1 ) );
+ smooth_slider->SetToolTip( wxU( SMOOTH_TIP ) );
+ top_sizer->Add( smooth_slider );
+
+ /* Create flex grid */
+ wxFlexGridSizer *eq_gridsizer =
+ new wxFlexGridSizer( 2, 12, 0, 0);
+ eq_gridsizer->AddGrowableRow( 0 );
+ eq_gridsizer->AddGrowableCol( 1 );
+
+ preamp_slider = new wxSlider( panel, Preamp_Event, 200, 0, 400,
+ wxDefaultPosition, wxSize( -1 , 90 ) , wxSL_VERTICAL );
+ eq_gridsizer->Add( preamp_slider, 1, wxEXPAND, 0 );
+
+ eq_gridsizer->Add( 0,0,1 );
+
+ for( int i = 0 ; i < 10 ; i++ )
+ {
+ band_sliders[i] = new wxSlider( panel, Band0_Event + i, 200, 0, 400,
+ wxDefaultPosition, wxSize( -1 , 90 ) , wxSL_VERTICAL );
+
+ i_values[i] = 200;
+ eq_gridsizer->Add( band_sliders[i], 1, wxEXPAND, 0 );
+ }
+
+ preamp_text = new wxStaticText( panel, -1, wxT( "Preamp\n0.0dB" ) );
+ wxFont font= preamp_text->GetFont();
+ font.SetPointSize(7);
+ preamp_text->SetFont( font );
+ eq_gridsizer->Add( preamp_text );
+
+ eq_gridsizer->Add( 0,0,1 );
+
+ for( int i = 0 ; i < 10 ; i++ )
+ {
+ band_texts[i] = new wxStaticText( panel, -1,
+ band_frequencies[i] + wxU("\n0.0dB" ) ) ;
+ eq_gridsizer->Add( band_texts[i], 1, wxEXPAND, 0 );
+ wxFont font= band_texts[i]->GetFont();
+ font.SetPointSize(7);
+ band_texts[i]->SetFont( font );
+ }
+
+ panel_sizer->Add( top_sizer , 0 , wxTOP | wxEXPAND , 5 );
+ panel_sizer->Add( eq_gridsizer , 0 , wxEXPAND , 0 );
+
+ panel->SetSizer( panel_sizer );
+
+ panel_sizer->Layout();
+
+ panel_sizer->SetSizeHints( panel );
+
+ CheckAout();
+ return panel;
+}
+
+/*******************************************************
+ * Event handlers
+ *******************************************************/
+
+/* Keep aout up to date and update the bands if needed */
+void ExtraPanel::OnIdle( wxIdleEvent &event )
+{
+ CheckAout();
+ if( b_update == VLC_TRUE )
+ {
+ if( b_my_update == VLC_TRUE )
+ {
+ b_update = b_my_update = VLC_FALSE;
+ return;
+ }
+ char *p = psz_bands;
+ for( int i = 0; i < 10; i++ )
+ {
+ float f;
+ char psz_val[5];
+ int i_val;
+ /* Read dB -20/20*/
+ f = strtof( p, &p );
+ i_val= (int)( ( f + 20 ) * 10 );
+ band_sliders[i]->SetValue( 400 - i_val );
+ i_values[i] = 400 - i_val;
+ sprintf( psz_val, "%.1f", f );
+ band_texts[i]->SetLabel( band_frequencies[i] + wxT("\n") +
+ wxT( psz_val ) + wxT("dB") );
+ if( p == NULL )
+ {
+ break;
+ }
+ p++;
+ if( *p == 0 )
+ break;
+ }
+ char psz_val[5];
+ int i_val = (int)( ( f_preamp + 20 ) * 10 );
+ sprintf( psz_val, "%.1f", f_preamp );
+ preamp_slider->SetValue( 400 - i_val );
+ const wxString preamp = wxT("Preamp\n");
+ preamp_text->SetLabel( preamp + wxT( psz_val ) + wxT( "dB" ) );
+ eq_chkbox->SetValue( TRUE );
+ b_update = VLC_FALSE;
+ }
+}
+
+/*************************
+ * Equalizer Panel events
+ *************************/
+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 );
+ if( p_aout != NULL )
+ vlc_object_release( p_aout );
+}
+
+void ExtraPanel::OnEqRestore( wxCommandEvent &event )
+{
+ aout_instance_t *p_aout= (aout_instance_t *)vlc_object_find(p_intf,
+ VLC_OBJECT_AOUT, FIND_ANYWHERE);
+ if( p_aout == NULL )
+ {
+ config_PutFloat( p_intf, "equalizer-preamp", 0.0 );
+ config_PutPsz( p_intf, "equalizer-bands",
+ "0 0 0 0 0 0 0 0 0 0");
+ }
+ else
+ {
+ var_SetFloat( p_aout, "equalizer-preamp", 0.0 );
+ var_SetString( p_aout, "equalizer-bands",
+ "0 0 0 0 0 0 0 0 0 0");
+ vlc_object_release( p_aout );
+ }
+}
+
+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;
+
+ if( p_aout == NULL )
+ {
+ config_PutInt( p_intf, "equalizer-2pass", b_2p );
+ }
+ else
+ {
+ var_SetBool( p_aout, "equalizer-2pass", b_2p );
+ if( eq_chkbox->IsChecked() )
+ {
+ for( int i = 0; i < p_aout->i_nb_inputs; i++ )
+ {
+ p_aout->pp_inputs[i]->b_restart = VLC_TRUE;
+ }
+ }
+ vlc_object_release( p_aout );
+ }
+}
+
+void ExtraPanel::OnEqSmooth( wxScrollEvent &event )
+{
+ /* Max smoothing : 70% */
+ i_smooth = event.GetPosition() * 7;
+}
+
+void ExtraPanel::OnPreamp( wxScrollEvent &event )
+{
+ float f= (float)( 400 - event.GetPosition() ) / 10 - 20 ;
+ char psz_val[5];
+
+ aout_instance_t *p_aout= (aout_instance_t *)vlc_object_find(p_intf,
+ VLC_OBJECT_AOUT, FIND_ANYWHERE);
+
+ sprintf( psz_val, "%.1f", f );
+ const wxString preamp = wxT("Preamp\n");
+ preamp_text->SetLabel( preamp + wxT( psz_val ) + wxT( "dB" ) );
+
+ if( p_aout == NULL )
+ {
+ config_PutFloat( p_intf, "equalizer-preamp", f );
+ }
+ else
+ {
+ var_SetFloat( p_aout, "equalizer-preamp", f );
+ b_my_update = VLC_TRUE;
+ vlc_object_release( p_aout );
+ }
+}
+
+void ExtraPanel::OnChangeEqualizer( wxScrollEvent &event )
+{
+ aout_instance_t *p_aout= (aout_instance_t *)vlc_object_find(p_intf,
+ VLC_OBJECT_AOUT, FIND_ANYWHERE);
+ char psz_values[102];
+ memset( psz_values, 0, 102 );
+
+ /* Smoothing */
+ int i_diff = event.GetPosition() - i_values[ event.GetId() - Band0_Event ];
+ i_values[ event.GetId() - Band0_Event] = event.GetPosition();
+
+ for( int i = event.GetId() + 1 ; i <= Band9_Event ; i++ )
+ {
+ int i_new = band_sliders[ i-Band0_Event ]->GetValue() +
+ (int)( i_diff * pow( (float)i_smooth / 100 , i- event.GetId() ) ) ;
+ if( i_new < 0 ) i_new = 0;
+ if( i_new > 400 ) i_new = 400;
+ band_sliders[ i-Band0_Event ]->SetValue( i_new );
+ }
+ for( int i = Band0_Event ; i < event.GetId() ; i++ )
+ {
+ int i_new = band_sliders[ i-Band0_Event ]->GetValue() +
+ (int)( i_diff * pow( (float)i_smooth / 100 , event.GetId() - i ) );
+ if( i_new < 0 ) i_new = 0;
+ if( i_new > 400 ) i_new = 400;
+ band_sliders[ i-Band0_Event ]->SetValue( i_new );
+ }
+
+ /* Write the new bands values */
+ for( int i = 0 ; i < 10 ; i++ )
+ {
+ char psz_val[5];
+ float f_val = (float)( 400 - band_sliders[i]->GetValue() ) / 10- 20 ;
+ sprintf( psz_values, "%s %f", psz_values, f_val );
+ sprintf( psz_val, "%.1f", f_val );
+ band_texts[i]->SetLabel( band_frequencies[i] + wxT("\n") +
+ wxT( psz_val ) + wxT("dB" ) );
+ }
+ if( p_aout == NULL )
+ {
+ config_PutPsz( p_intf, "equalizer-bands", psz_values );
+ }
+ else
+ {
+ var_SetString( p_aout, "equalizer-bands", psz_values );
+ b_my_update = VLC_TRUE;
+ vlc_object_release( p_aout );
+ }
+}
+
+/***********************
+ * Audio Panel events
+ ***********************/
+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",
+ event.IsChecked() ? VLC_TRUE : VLC_FALSE );
+ if( p_aout != NULL )
+ vlc_object_release( p_aout );
+}
+
+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 );
+ if( p_aout != NULL )
+ vlc_object_release( p_aout );
+}
+
+void ExtraPanel::OnNormvolSlider( wxScrollEvent &event )
+{
+ aout_instance_t *p_aout= (aout_instance_t *)vlc_object_find(p_intf,
+ VLC_OBJECT_AOUT, FIND_ANYWHERE);
+ if( p_aout != NULL )
+ {
+ var_SetFloat( p_aout, "norm-max-level", (float)event.GetPosition()/10 );
+ vlc_object_release( p_aout );
+ }
+ else
+ {
+ config_PutFloat( p_intf, "norm-max-level",
+ (float)event.GetPosition()/10 );
+ }
+}
+/***********************
+ * Video Panel events
+ ***********************/
+void ExtraPanel::OnEnableAdjust(wxCommandEvent& event)
+{
+ ChangeVFiltersString( p_intf, "adjust",
+ event.IsChecked() ? VLC_TRUE : VLC_FALSE );
+
+ if( event.IsChecked() )
+ {
+ restoredefaults_button->Enable();
+ brightness_slider->Enable();
+ saturation_slider->Enable();
+ contrast_slider->Enable();
+ hue_slider->Enable();
+ gamma_slider->Enable();
+ }
+ else
+ {
+ restoredefaults_button->Disable();
+ brightness_slider->Disable();
+ saturation_slider->Disable();
+ contrast_slider->Disable();
+ hue_slider->Disable();
+ gamma_slider->Disable();
+ }
+}
+
+void ExtraPanel::OnRestoreDefaults( wxCommandEvent &event)
+{
+ hue_slider->SetValue(0);
+ saturation_slider->SetValue(100);
+ brightness_slider->SetValue(100);
+ contrast_slider->SetValue(100),
+ gamma_slider->SetValue(10);
+
+ wxScrollEvent *hscroll_event = new wxScrollEvent(0, Hue_Event, 0);
+ OnAdjustUpdate(*hscroll_event);
+
+ wxScrollEvent *sscroll_event = new wxScrollEvent(0, Saturation_Event, 100);
+ OnAdjustUpdate(*sscroll_event);
+
+ wxScrollEvent *bscroll_event = new wxScrollEvent(0, Brightness_Event, 100);
+ OnAdjustUpdate(*bscroll_event);
+
+ wxScrollEvent *cscroll_event = new wxScrollEvent(0, Contrast_Event, 100);
+ OnAdjustUpdate(*cscroll_event);
+
+ wxScrollEvent *gscroll_event = new wxScrollEvent(0, Gamma_Event, 10);
+ OnAdjustUpdate(*gscroll_event);
+
+}
+
+void ExtraPanel::OnAdjustUpdate( wxScrollEvent &event)
+{
+ vout_thread_t *p_vout = (vout_thread_t *)vlc_object_find(p_intf,
+ VLC_OBJECT_VOUT, FIND_ANYWHERE);
+ if( p_vout == NULL )
+ switch( event.GetId() )
+ {
+ case Hue_Event:
+ config_PutInt( p_intf , "hue" , event.GetPosition() );
+ break;
+
+ case Saturation_Event:
+ config_PutFloat( p_intf , "saturation" ,
+ (float)event.GetPosition()/100 );
+ break;
+
+ case Brightness_Event:
+ config_PutFloat( p_intf , "brightness" ,
+ (float)event.GetPosition()/100 );
+ break;
+
+ case Contrast_Event:
+ config_PutFloat( p_intf , "contrast" ,
+ (float)event.GetPosition()/100 );
+ break;
+
+ case Gamma_Event:
+ config_PutFloat( p_intf , "gamma" ,
+ (float)event.GetPosition()/10 );
+ break;
+ }
+ else
+ {
+ vlc_value_t val;
+ switch( event.GetId() )
+ {
+ case Hue_Event:
+ val.i_int = event.GetPosition();
+ var_Set( p_vout, "hue", val );
+ break;
+
+ case Saturation_Event:
+ val.f_float = (float)event.GetPosition() / 100;
+ var_Set( p_vout, "saturation", val );
+ break;
+
+ case Brightness_Event:
+ val.f_float = (float)event.GetPosition() / 100;
+ var_Set( p_vout, "brightness", val );
+ break;
+
+ case Contrast_Event:
+ val.f_float = (float)event.GetPosition() / 100;
+ var_Set( p_vout, "contrast", val );
+ break;
+
+ case Gamma_Event:
+ val.f_float = (float)event.GetPosition() / 10;
+ var_Set( p_vout, "gamma", val );
+ break;
+ }
+ vlc_object_release(p_vout);
+ }
+}
+
+/* FIXME */
+void ExtraPanel::OnRatio( wxCommandEvent& event )
+{
+ config_PutPsz( p_intf, "aspect-ratio", ratio_combo->GetValue().mb_str() );
+}
+
+
+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 );
+ }
+}
+
+void ExtraPanel::OnFiltersInfo(wxCommandEvent& event)
+{
+ wxMessageBox( wxU( _("Select the video effects filters to apply. "
+ "You must restart the stream for these settings to "
+ "take effect.\n"
+ "To configure the filters, go to the Preferences, enable "
+ "the advanced options, and go to 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 / General / Video."
+ ) ),
+ wxU( _("More information" ) ), wxOK | wxICON_INFORMATION,
+ this->p_parent );
+}
+/**********************************
+ * Other functions
+ **********************************/
+void ExtraPanel::CheckAout()
+{
+ aout_instance_t *p_aout= (aout_instance_t *)vlc_object_find(p_intf,
+ VLC_OBJECT_AOUT, FIND_ANYWHERE);
+ if( p_aout != NULL )
+ {
+ if( p_aout != p_intf->p_sys->p_aout )
+ {
+ /* We want to know if someone changes the bands */
+ if( var_AddCallback( p_aout, "equalizer-bands",
+ IntfBandsCallback, this ) )
+ {
+ /* The variable does not exist yet, wait */
+ vlc_object_release( p_aout );
+ return;
+ }
+ if( var_AddCallback( p_aout, "equalizer-preamp",
+ IntfPreampCallback, this ) )
+ {
+ vlc_object_release( p_aout );
+ return;
+ }
+ /* Ok, we have our variables, make a first update round */
+ 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;
+ }
+ vlc_object_release( p_aout );
+ }
+}
+
+
+static void ChangeVFiltersString( intf_thread_t *p_intf,
+ char *psz_name, vlc_bool_t b_add )
+{
+ char *psz_parser, *psz_string;
+
+ psz_string = config_GetPsz( p_intf, "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 */
+ //fprintf(stderr,"\nNow : %s",psz_string );
+ config_PutPsz( p_intf, "filter", psz_string );
+ 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_parser, *psz_string;
+
+ if( p_aout )
+ {
+ psz_string = var_GetString( p_aout, "audio-filter" );
+ }
+ else
+ {
+ psz_string = config_GetPsz( p_intf, "audio-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 );
+
+ if( *(psz_string+strlen(psz_string ) -1 ) == ',' )
+ {
+ *(psz_string+strlen(psz_string ) -1 ) = '\0';
+ }
+ }
+ else
+ {
+ free( psz_string );
+ return;
+ }
+ }
+ fprintf(stderr,"\nSETTING %s\n",psz_string );
+
+ if( p_aout == NULL )
+ {
+ config_PutPsz( p_intf, "audio-filter", psz_string );
+ }
+ else
+ {
+ 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;
+ }
+ }
+ free( psz_string );
+}
+
+
+static int IntfBandsCallback( vlc_object_t *p_this, char const *psz_cmd,
+ vlc_value_t oldval, vlc_value_t newval, void *param )
+{
+ ExtraPanel *p_panel = (ExtraPanel *)param;
+
+ p_panel->psz_bands = strdup( newval.psz_string );
+ p_panel->b_update = VLC_TRUE;
+
+ return VLC_SUCCESS;
+}
+
+static int IntfPreampCallback( vlc_object_t *p_this, char const *psz_cmd,
+ vlc_value_t oldval, vlc_value_t newval, void *param )
+{
+ ExtraPanel *p_panel = (ExtraPanel *)param;
+
+ p_panel->f_preamp = newval.f_float;
+ p_panel->b_update = VLC_TRUE;
+
+ return VLC_SUCCESS;
+}
+
+#if 0
+/**********************************************************************
+ * A small window to contain the extrapanel in its undocked state
+ **********************************************************************/
+BEGIN_EVENT_TABLE(ExtraWindow, wxFrame)
+END_EVENT_TABLE()
+
+
+ExtraWindow::ExtraWindow( intf_thread_t *_p_intf, wxWindow *p_parent,
+ wxPanel *_extra_panel ):
+ 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 );
+
+ window_sizer->Layout();
+ window_sizer->Fit( this );
+
+ Show();
+}
+
+ExtraWindow::~ExtraWindow()
+{
+ delete panel;
+}
+#endif
OpenOther_Event,
EjectDisc_Event,
- StreamWizard_Event,
Wizard_Event,
Playlist_Event,
Prefs_Event,
Extended_Event,
+// Undock_Event,
Bookmarks_Event,
Skins_Event,
SlowStream_Event,
FastStream_Event,
- Adjust_Event,
- RestoreDefaults_Event,
- Hue_Event,
- Contrast_Event,
- Brightness_Event,
- Saturation_Event,
- Gamma_Event,
-
- Ratio_Event,
- Visual_Event,
-
/* it is important for the id corresponding to the "About" command to have
* this standard value as otherwise it won't be handled properly under Mac
* (where it is special and put into the "Apple" menu) */
EVT_MENU_OPEN(Interface::OnMenuOpen)
- EVT_MENU( Extended_Event, Interface::OnExtended)
- EVT_MENU( Bookmarks_Event, Interface::OnShowDialog)
+ EVT_MENU( Extended_Event, Interface::OnExtended )
+// EVT_MENU( Undock_Event, Interface::OnUndock )
- EVT_CHECKBOX( Adjust_Event, Interface::OnEnableAdjust)
- EVT_BUTTON( RestoreDefaults_Event, Interface::OnRestoreDefaults)
- EVT_TEXT( Ratio_Event, Interface::OnRatio)
- EVT_CHECKBOX( Visual_Event, Interface::OnEnableVisual)
+ EVT_MENU( Bookmarks_Event, Interface::OnShowDialog)
#if defined( __WXMSW__ ) || defined( __WXMAC__ )
EVT_CONTEXT_MENU(Interface::OnContextMenu2)
EVT_MENU(OpenNet_Event, Interface::OnShowDialog)
EVT_MENU(OpenCapture_Event, Interface::OnShowDialog)
EVT_MENU(OpenSat_Event, Interface::OnShowDialog)
- EVT_MENU(StreamWizard_Event, Interface::OnShowDialog)
EVT_MENU(Wizard_Event, Interface::OnShowDialog)
EVT_MENU(StopStream_Event, Interface::OnStopStream)
EVT_MENU(PlayStream_Event, Interface::OnPlayStream)
/* Slider events */
EVT_COMMAND_SCROLL(SliderScroll_Event, Interface::OnSliderUpdate)
-
- EVT_COMMAND_SCROLL(Hue_Event, Interface::OnAdjustUpdate)
- EVT_COMMAND_SCROLL(Contrast_Event, Interface::OnAdjustUpdate)
- EVT_COMMAND_SCROLL(Brightness_Event, Interface::OnAdjustUpdate)
- EVT_COMMAND_SCROLL(Saturation_Event, Interface::OnAdjustUpdate)
- EVT_COMMAND_SCROLL(Gamma_Event, Interface::OnAdjustUpdate)
/* Custom events */
EVT_COMMAND(0, wxEVT_INTF, Interface::OnControlEvent)
p_intf = _p_intf;
i_old_playing_status = PAUSE_S;
b_extra = VLC_FALSE;
+// b_undock = VLC_FALSE;
+
+ extra_window = NULL;
/* Give our interface a nice little icon */
SetIcon( wxIcon( vlc_xpm ) );
CreateOurToolBar();
/* Create the extra panel */
- CreateOurExtendedPanel();
+ extra_frame = new ExtraPanel( p_intf, this );
frame_sizer->Add( extra_frame, 0, wxEXPAND , 0 );
frame_sizer->Hide( extra_frame );
file_menu->AppendSeparator();
file_menu->Append( Wizard_Event, wxU(_("&Wizard...\tCtrl-W")) );
- file_menu->Append( StreamWizard_Event,
- wxU(_("Old streaming Wizard...")) );
file_menu->AppendSeparator();
file_menu->Append( Exit_Event, wxU(_("E&xit\tCtrl-X")) );
}
-void Interface::CreateOurExtendedPanel()
-{
- char *psz_filters;
-
- extra_frame = new wxPanel( this, -1, wxDefaultPosition, wxDefaultSize );
- extra_frame->SetAutoLayout( TRUE );
- wxBoxSizer *extra_sizer = new wxBoxSizer( wxHORIZONTAL );
-
- /* Create static box to surround the adjust controls */
- wxStaticBox *adjust_box =
- new wxStaticBox( extra_frame, -1, wxU(_("Adjust Image")) );
-
- /* Create the size for the frame */
- wxStaticBoxSizer *adjust_sizer =
- new wxStaticBoxSizer( adjust_box, wxVERTICAL );
- adjust_sizer->SetMinSize( -1, 50 );
-
- /* Create flex grid */
- wxFlexGridSizer *adjust_gridsizer =
- new wxFlexGridSizer( 6, 2, 0, 0);
- adjust_gridsizer->AddGrowableCol(1);
-
- /* Create every controls */
-
- /* Create the adjust button */
- wxCheckBox * adjust_check = new wxCheckBox( extra_frame, Adjust_Event,
- wxU(_("Enable")));
-
- /* Create the restore to defaults button */
- restoredefaults_button =
- new wxButton( extra_frame, RestoreDefaults_Event,
- wxU(_("Restore Defaults")), wxDefaultPosition);
-
- wxStaticText *hue_text = new wxStaticText( extra_frame, -1,
- wxU(_("Hue")) );
- hue_slider = new wxSlider ( extra_frame, Hue_Event, 0, 0,
- 360, wxDefaultPosition, wxDefaultSize );
-
-
- wxStaticText *contrast_text = new wxStaticText( extra_frame, -1,
- wxU(_("Contrast")) );
- contrast_slider = new wxSlider ( extra_frame, Contrast_Event, 0, 0,
- 200, wxDefaultPosition, wxDefaultSize);
-
- wxStaticText *brightness_text = new wxStaticText( extra_frame, -1,
- wxU(_("Brightness")) );
- brightness_slider = new wxSlider ( extra_frame, Brightness_Event, 0, 0,
- 200, wxDefaultPosition, wxDefaultSize) ;
-
- wxStaticText *saturation_text = new wxStaticText( extra_frame, -1,
- wxU(_("Saturation")) );
- saturation_slider = new wxSlider ( extra_frame, Saturation_Event, 0, 0,
- 300, wxDefaultPosition, wxDefaultSize );
-
- wxStaticText *gamma_text = new wxStaticText( extra_frame, -1,
- wxU(_("Gamma")) );
- gamma_slider = new wxSlider ( extra_frame, Gamma_Event, 0, 0,
- 100, wxDefaultPosition, wxDefaultSize );
-
- adjust_gridsizer->Add(adjust_check, 1, wxEXPAND, 0);
- adjust_gridsizer->Add(restoredefaults_button, 1, wxEXPAND, 0);
- adjust_gridsizer->Add(hue_text, 1, wxEXPAND, 0);
- adjust_gridsizer->Add(hue_slider, 1, wxEXPAND, 0);
- adjust_gridsizer->Add(contrast_text, 1, wxEXPAND, 0);
- adjust_gridsizer->Add(contrast_slider, 1, wxEXPAND, 0);
- adjust_gridsizer->Add(brightness_text, 1, wxEXPAND, 0);
- adjust_gridsizer->Add(brightness_slider, 1, wxEXPAND, 0);
- adjust_gridsizer->Add(saturation_text, 1, wxEXPAND, 0);
- adjust_gridsizer->Add(saturation_slider, 1, wxEXPAND, 0);
- adjust_gridsizer->Add(gamma_text, 1, wxEXPAND, 0);
- adjust_gridsizer->Add(gamma_slider, 1, wxEXPAND, 0);
-
- adjust_sizer->Add(adjust_gridsizer,1,wxEXPAND, 0);
-
- extra_sizer->Add(adjust_sizer,1,wxBOTTOM,5);
-
- /* Create sizer to surround the other controls */
- wxBoxSizer *other_sizer = new wxBoxSizer( wxVERTICAL );
-
-
- wxStaticBox *video_box =
- new wxStaticBox( extra_frame, -1, wxU(_("Video Options")) );
- /* Create the sizer for the frame */
- wxStaticBoxSizer *video_sizer =
- new wxStaticBoxSizer( video_box, wxVERTICAL );
- video_sizer->SetMinSize( -1, 50 );
-
- static const wxString ratio_array[] =
- {
- wxT("4:3"),
- wxT("16:9"),
- };
-
- wxBoxSizer *ratio_sizer = new wxBoxSizer( wxHORIZONTAL );
- wxStaticText *ratio_text = new wxStaticText( extra_frame, -1,
- wxU(_("Aspect Ratio")) );
-
- ratio_combo = new wxComboBox( extra_frame, Ratio_Event, wxT(""),
- wxDefaultPosition, wxSize(120,-1),
- WXSIZEOF(ratio_array), ratio_array,
- 0 );
-
- ratio_sizer->Add( ratio_text, 0, wxALL, 2 );
- ratio_sizer->Add( ratio_combo, 0, wxALL, 2 );
- ratio_sizer->Layout();
-
- video_sizer->Add( ratio_sizer , 0 , wxALL , 0 );
- video_sizer->Layout();
-
-#if 0
- wxBoxSizer *visual_sizer = new wxBoxSizer( wxHORIZONTAL );
-
- wxCheckBox *visual_checkbox = new wxCheckBox( extra_frame, Visual_Event,
- wxU(_("Visualizations")) );
-
- visual_sizer->Add( visual_checkbox, 0, wxEXPAND, 0);
- visual_sizer->Layout();
-
- wxStaticBox *audio_box =
- new wxStaticBox( extra_frame, -1, wxU(_("Audio Options")) );
- /* Create the sizer for the frame */
- wxStaticBoxSizer *audio_sizer =
- new wxStaticBoxSizer( audio_box, wxVERTICAL );
- audio_sizer->SetMinSize( -1, 50 );
-
- audio_sizer->Add( visual_sizer, 0, wxALL, 0);
- audio_sizer->Layout();
-
- other_sizer->Add( audio_sizer , 0 , wxALL | wxEXPAND , 0 );
-#endif
- other_sizer->Add( video_sizer, 0, wxALL | wxEXPAND , 0);
- other_sizer->Layout();
-
- extra_sizer->Add(other_sizer,0,wxBOTTOM,5);
-
- extra_frame->SetSizer( extra_sizer );
-
- /* Layout the whole panel */
- extra_sizer->Layout();
-
- extra_sizer->SetSizeHints(extra_frame);
-
- /* Write down initial values */
-#if 0
- psz_filters = config_GetPsz( p_intf, "audio-filter" );
- if( psz_filters && strstr( psz_filters, "visual" ) )
- {
- visual_checkbox->SetValue(1);
- }
- if( psz_filters ) free( psz_filters );
-#endif
- psz_filters = config_GetPsz( p_intf, "filter" );
- if( psz_filters && strstr( psz_filters, "adjust" ) )
- {
- adjust_check->SetValue( 1 );
- restoredefaults_button->Enable();
- saturation_slider->Enable();
- contrast_slider->Enable();
- brightness_slider->Enable();
- hue_slider->Enable();
- gamma_slider->Enable();
- }
- else
- {
- adjust_check->SetValue( 0 );
- restoredefaults_button->Disable();
- saturation_slider->Disable();
- contrast_slider->Disable();
- brightness_slider->Disable();
- hue_slider->Disable();
- gamma_slider->Disable();
- }
- if( psz_filters ) free( psz_filters );
-
- int i_value = config_GetInt( p_intf, "hue" );
- if( i_value > 0 && i_value < 360 )
- hue_slider->SetValue( i_value );
-
- float f_value;
- f_value = config_GetFloat( p_intf, "saturation" );
- if( f_value > 0 && f_value < 5 )
- saturation_slider->SetValue( (int)(100 * f_value) );
- f_value = config_GetFloat( p_intf, "contrast" );
- if( f_value > 0 && f_value < 4 )
- contrast_slider->SetValue( (int)(100 * f_value) );
- f_value = config_GetFloat( p_intf, "brightness" );
- if( f_value > 0 && f_value < 2 )
- brightness_slider->SetValue( (int)(100 * f_value) );
- f_value = config_GetFloat( p_intf, "gamma" );
- if( f_value > 0 && f_value < 10 )
- gamma_slider->SetValue( (int)(10 * f_value) );
-
- extra_frame->Hide();
-}
-
static int ConvertHotkeyModifiers( int i_hotkey )
{
int i_accel_flags = 0;
p_settings_menu->AppendCheckItem( Extended_Event,
wxU(_("&Extended GUI") ) );
if( b_extra ) p_settings_menu->Check( Extended_Event, TRUE );
+#if 0
+ p_settings_menu->AppendCheckItem( Undock_Event,
+ wxU(_("&Undock Ext. GUI") ) );
+ if( b_undock ) p_settings_menu->Check( Undock_Event, TRUE );
+#endif
p_settings_menu->AppendCheckItem( Bookmarks_Event,
wxU(_("&Bookmarks...") ) );
p_settings_menu->Append( Prefs_Event, wxU(_("&Preferences...")) );
case Prefs_Event:
i_id = INTF_DIALOG_PREFS;
break;
- case StreamWizard_Event:
- i_id = INTF_DIALOG_STREAMWIZARD;
- break;
case Wizard_Event:
i_id = INTF_DIALOG_WIZARD;
break;
void Interface::OnExtended(wxCommandEvent& event)
{
- if( b_extra == VLC_FALSE)
+ b_extra = (b_extra == VLC_TRUE ? VLC_FALSE : VLC_TRUE );
+
+ if( b_extra == VLC_FALSE )
{
- extra_frame->Show();
- frame_sizer->Show( extra_frame );
- b_extra = VLC_TRUE;
+ extra_frame->Hide();
+ frame_sizer->Hide( extra_frame );
}
else
{
- extra_frame->Hide();
- frame_sizer->Hide( extra_frame );
- b_extra = VLC_FALSE;
+ extra_frame->Show();
+ frame_sizer->Show( extra_frame );
}
frame_sizer->Layout();
frame_sizer->Fit(this);
}
-void Interface::OnEnableAdjust(wxCommandEvent& event)
-{
- char *psz_filters=config_GetPsz( p_intf, "filter");
- char *psz_new = NULL;
- if( event.IsChecked() )
- {
- if(psz_filters == NULL)
+#if 0
+ if( b_undock == VLC_TRUE )
{
- psz_new = strdup( "adjust" );
+ fprintf(stderr,"Deleting window\n");
+ if( extra_window )
+ {
+ delete extra_window;
+ extra_window = NULL;
+ }
}
else
{
- psz_new= (char *) malloc(strlen(psz_filters) + 8 );
- sprintf( psz_new, "%s:adjust", psz_filters);
+ extra_frame->Hide();
+ frame_sizer->Hide( extra_frame );
+ frame_sizer->Layout();
+ frame_sizer->Fit(this);
}
- config_PutPsz( p_intf, "filter", psz_new );
- vlc_value_t val;
- vout_thread_t *p_vout =
- (vout_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_VOUT,
- FIND_ANYWHERE );
- if( p_vout != NULL )
- {
- val.psz_string = strdup( psz_new );
- var_Set( p_vout, "filter", val);
- vlc_object_release( p_vout );
- }
- if( val.psz_string ) free( val.psz_string );
- restoredefaults_button->Enable();
- brightness_slider->Enable();
- saturation_slider->Enable();
- contrast_slider->Enable();
- hue_slider->Enable();
- gamma_slider->Enable();
}
else
{
- if( psz_filters != NULL )
+ if( b_undock == VLC_TRUE )
{
-
- char *psz_current;
- unsigned int i=0;
- for( i = 0; i< strlen(psz_filters ); i++)
- {
- if ( !strncasecmp( &psz_filters[i],"adjust",6 ))
- {
- if(i > 0)
- if( psz_filters[i-1] == ':' ) i--;
- psz_current = strchr( &psz_filters[i+1] , ':' );
- if( !psz_current )
- psz_filters[i] = '\0';
- else
- {
- memmove( &psz_filters[i] , psz_current,
- &psz_filters[strlen(psz_filters)]-psz_current
- +1);
- }
- }
- }
- config_PutPsz( p_intf, "filter", psz_filters);
- vlc_value_t val;
- val.psz_string = strdup( psz_filters );
- vout_thread_t *p_vout =
- (vout_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_VOUT,
- FIND_ANYWHERE );
- if( p_vout != NULL )
+ fprintf(stderr,"Creating window\n");
+ extra_frame->Hide();
+ frame_sizer->Hide( extra_frame );
+ frame_sizer->Detach( extra_frame );
+ frame_sizer->Layout();
+ frame_sizer->Fit(this);
+ extra_window = new ExtraWindow( p_intf, this, extra_frame );
+ }
+ else
+ {
+ fprintf(stderr,"Deleting window\n");
+ if( extra_window )
{
- var_Set( p_vout, "filter", val);
- vlc_object_release( p_vout );
+ delete extra_window;
}
- if( val.psz_string ) free( val.psz_string );
+ extra_frame->Show();
+ frame_sizer->Show( extra_frame );
+ frame_sizer->Layout();
+ frame_sizer->Fit(this);
}
- restoredefaults_button->Disable();
- brightness_slider->Disable();
- saturation_slider->Disable();
- contrast_slider->Disable();
- hue_slider->Disable();
- gamma_slider->Disable();
}
- if(psz_filters) free(psz_filters);
- if(psz_new) free(psz_new);
}
-void Interface::OnRestoreDefaults( wxCommandEvent &event)
+void Interface::OnUndock(wxCommandEvent& event)
{
- hue_slider->SetValue(0);
- saturation_slider->SetValue(100);
- brightness_slider->SetValue(100);
- contrast_slider->SetValue(100),
- gamma_slider->SetValue(10);
-
- wxScrollEvent *hscroll_event = new wxScrollEvent(0, Hue_Event, 0);
- OnAdjustUpdate(*hscroll_event);
-
- wxScrollEvent *sscroll_event = new wxScrollEvent(0, Saturation_Event, 100);
- OnAdjustUpdate(*sscroll_event);
-
- wxScrollEvent *bscroll_event = new wxScrollEvent(0, Brightness_Event, 100);
- OnAdjustUpdate(*bscroll_event);
-
- wxScrollEvent *cscroll_event = new wxScrollEvent(0, Contrast_Event, 100);
- OnAdjustUpdate(*cscroll_event);
-
- wxScrollEvent *gscroll_event = new wxScrollEvent(0, Gamma_Event, 10);
- OnAdjustUpdate(*gscroll_event);
+ b_undock = (b_undock == VLC_TRUE ? VLC_FALSE : VLC_TRUE );
-}
-
-void Interface::OnAdjustUpdate( wxScrollEvent &event)
-{
- vout_thread_t *p_vout = (vout_thread_t *)vlc_object_find(p_intf, VLC_OBJECT_VOUT, FIND_ANYWHERE);
- if(p_vout == NULL)
- switch(event.GetId())
+ if( b_extra == VLC_TRUE )
+ {
+ if( b_undock == VLC_FALSE )
{
- case Hue_Event:
- config_PutInt( p_intf , "hue" , event.GetPosition() );
- break;
-
- case Saturation_Event:
- config_PutFloat( p_intf , "saturation" , (float)event.GetPosition()/100 );
- break;
-
- case Brightness_Event:
- config_PutFloat( p_intf , "brightness" , (float)event.GetPosition()/100 );
- break;
-
- case Contrast_Event:
- config_PutFloat( p_intf , "contrast" , (float)event.GetPosition()/100 );
- break;
-
- case Gamma_Event:
- config_PutFloat( p_intf , "gamma" , (float)event.GetPosition()/10 );
- break;
+ fprintf(stderr,"Deleting window\n");
+ if( extra_window )
+ {
+ delete extra_window;
+ extra_window = NULL;
+ }
+ extra_frame->Show();
+ frame_sizer->Show( extra_frame );
+ frame_sizer->Layout();
+ frame_sizer->Fit(this);
}
- else
- {
- vlc_value_t val;
- switch(event.GetId())
+ else
{
- case Hue_Event:
- val.i_int = event.GetPosition();
- var_Set(p_vout, "hue", val);
- break;
-
- case Saturation_Event:
- val.f_float = (float)event.GetPosition()/100;
- var_Set(p_vout, "saturation", val);
- break;
-
- case Brightness_Event:
- val.f_float = (float)event.GetPosition()/100;
- var_Set(p_vout, "brightness", val);
- break;
-
- case Contrast_Event:
- val.f_float = (float)event.GetPosition()/100;
- var_Set(p_vout, "contrast", val);
- break;
-
- case Gamma_Event:
- val.f_float = (float)event.GetPosition()/10;
- var_Set(p_vout, "gamma", val);
- break;
+ fprintf(stderr,"Creating window\n");
+ extra_frame->Hide();
+ frame_sizer->Hide( extra_frame );
+ frame_sizer->Detach( extra_frame );
+ frame_sizer->Layout();
+ frame_sizer->Fit(this);
+ extra_window = new ExtraWindow( p_intf, this, extra_frame );
}
- vlc_object_release(p_vout);
- }
-}
-
-void Interface::OnRatio( wxCommandEvent& event )
-{
- config_PutPsz( p_intf, "aspect-ratio", ratio_combo->GetValue().mb_str() );
-}
-
-void Interface::OnEnableVisual(wxCommandEvent& event)
-{
- if( event.IsChecked() )
- {
- config_PutPsz( p_intf, "audio-filter", "visual" );
- }
- else
- {
- config_PutPsz( p_intf, "audio-filter", "" );
}
}
+#endif
void Interface::OnPlayStream( wxCommandEvent& WXUNUSED(event) )
{
+++ /dev/null
-/*****************************************************************************
- * stream.cpp : wxWindows plugin for vlc
- *****************************************************************************
- * Copyright (C) 2000-2004 VideoLAN
- * $Id$
- *
- * 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
- * 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
- * GNU General Public License for more details.
- *
- * 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.
- *****************************************************************************/
-
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-#include <stdlib.h> /* malloc(), free() */
-#include <errno.h> /* ENOMEM */
-#include <string.h> /* strerror() */
-#include <stdio.h>
-
-#include <vlc/vlc.h>
-#include <vlc/intf.h>
-
-#include "wxwindows.h"
-
-#include <wx/statline.h>
-
-#define STREAM_INTRO N_( "Stream with VLC in three steps." )
-#define STREAM_STEP1 N_( "Step 1: Select what to stream." )
-#define STREAM_STEP2 N_( "Step 2: Define streaming method." )
-#define STREAM_STEP3 N_( "Step 3: Start streaming." )
-
-/*****************************************************************************
- * Event Table.
- *****************************************************************************/
-
-/* IDs for the controls and the menu commands */
-enum
-{
- Open_Event,
- Sout_Event,
- Start_Event,
- Close_Event
-};
-
-BEGIN_EVENT_TABLE(StreamDialog, wxFrame)
- /* Button events */
- EVT_BUTTON(wxID_OK, StreamDialog::OnClose)
-
- EVT_BUTTON(Open_Event,StreamDialog::OnOpen)
- EVT_BUTTON(Sout_Event,StreamDialog::OnSout)
- EVT_BUTTON(Start_Event,StreamDialog::OnStart)
-
- /* Hide the window when the user closes the window */
- EVT_CLOSE(StreamDialog::OnClose)
-
-END_EVENT_TABLE()
-
-/*****************************************************************************
- * Constructor.
- *****************************************************************************/
-StreamDialog::StreamDialog( intf_thread_t *_p_intf, wxWindow *p_parent ):
- wxFrame( p_parent, -1, wxU(_("Stream")), wxDefaultPosition,
- wxDefaultSize, wxDEFAULT_FRAME_STYLE )
-{
- /* Initializations */
- p_intf = _p_intf;
- SetIcon( *p_intf->p_sys->p_icon );
- SetAutoLayout( TRUE );
-
- p_open_dialog = NULL;
- p_sout_dialog = NULL;
-
- /* Create a panel to put everything in */
- wxPanel *panel = new wxPanel( this, -1 );
- panel->SetAutoLayout( TRUE );
-
- wxStaticText *intro_label = new wxStaticText( panel,
- -1 , wxU(_( STREAM_INTRO )));
-
-
- wxStaticText *step1_label = new wxStaticText( panel,
- -1 , wxU(_( STREAM_STEP1 )));
-
- step2_label = new wxStaticText( panel,
- -1 , wxU(_( STREAM_STEP2 )));
-
- step3_label = new wxStaticText( panel,
- -1 , wxU(_( STREAM_STEP3 )));
-
- wxButton *open_button = new wxButton( panel,
- Open_Event, wxU(_("Open...")));
-
- sout_button = new wxButton( panel,
- Sout_Event, wxU(_("Choose...")));
-
- start_button = new wxButton( panel,
- Start_Event, wxU(_("Start!")));
-
- step2_label->Disable();
- step3_label->Disable();
-
- sout_button->Disable();
- start_button->Disable();
-
- /* Place everything in sizers */
- wxBoxSizer *main_sizer = new wxBoxSizer( wxVERTICAL );
- wxBoxSizer *panel_sizer = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer *step1_sizer = new wxBoxSizer( wxHORIZONTAL );
- wxBoxSizer *step2_sizer = new wxBoxSizer( wxHORIZONTAL );
- wxBoxSizer *step3_sizer = new wxBoxSizer( wxHORIZONTAL );
-
- step1_sizer->Add( step1_label, 1, wxALL | wxEXPAND | wxALIGN_LEFT, 10 );
- step1_sizer->Add( open_button, 1, wxALL | wxEXPAND | wxALIGN_RIGHT, 10 );
-
- step2_sizer->Add( step2_label, 1, wxALL | wxEXPAND | wxALIGN_LEFT, 10 );
- step2_sizer->Add( sout_button, 1, wxALL | wxEXPAND | wxALIGN_RIGHT, 10 );
-
- step3_sizer->Add( step3_label, 1, wxALL | wxEXPAND | wxLEFT, 10 );
- step3_sizer->Add( start_button, 1, wxALL | wxEXPAND | wxLEFT, 10 );
-
- panel_sizer->Add( intro_label, 0, wxEXPAND | wxALL, 10 );
-
- panel_sizer->Add( new wxStaticLine( panel, 0), 0,
- wxEXPAND | wxLEFT | wxRIGHT, 2 );
- panel_sizer->Add( step1_sizer, 0, wxEXPAND, 10 );
- panel_sizer->Add( new wxStaticLine( panel, 0), 0,
- wxEXPAND | wxLEFT | wxRIGHT, 2 );
- panel_sizer->Add( step2_sizer, 0, wxEXPAND, 10 );
- panel_sizer->Add( new wxStaticLine( panel, 0), 0,
- wxEXPAND | wxLEFT | wxRIGHT, 2 );
- panel_sizer->Add( step3_sizer, 0, wxEXPAND, 10 );
-
- panel_sizer->Layout();
- panel->SetSizerAndFit( panel_sizer );
- main_sizer->Add( panel, 1, wxEXPAND, 0 );
- main_sizer->Layout();
- SetSizerAndFit( main_sizer );
-
-}
-
-/*****************************************************************************
- * Destructor.
- *****************************************************************************/
-StreamDialog::~StreamDialog()
-{
- if( p_open_dialog ) delete p_open_dialog;
- if( p_sout_dialog ) delete p_sout_dialog;
-}
-
-void StreamDialog::OnOpen( wxCommandEvent& event )
-{
- if( !p_open_dialog )
- {
- p_open_dialog =
- new OpenDialog( p_intf, this, FILE_ACCESS, 1 , OPEN_STREAM );
- }
-
- if( p_open_dialog)
- {
- p_open_dialog->Show();
- p_open_dialog->Enable();
- mrl = p_open_dialog->mrl;
- sout_button->Enable();
- step2_label->Enable();
- }
-}
-
-void StreamDialog::OnSout( wxCommandEvent& event )
-{
- /* Show/hide the sout dialog */
- if( p_sout_dialog == NULL )
- p_sout_dialog = new SoutDialog( p_intf, this );
-
- if( p_sout_dialog && p_sout_dialog->ShowModal() == wxID_OK )
- {
- sout_mrl = p_sout_dialog->GetOptions();
- start_button->Enable();
- step3_label->Enable();
- }
-}
-
-void StreamDialog::OnStart( wxCommandEvent& event )
-{
- /* Update the playlist */
- playlist_t *p_playlist =
- (playlist_t *)vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
- FIND_ANYWHERE );
- if( p_playlist == NULL ) return;
-
- for( int i = 0; i < (int)p_open_dialog->mrl.GetCount(); i++ )
- {
- playlist_item_t *p_item = playlist_ItemNew( p_intf,
- (const char *)p_open_dialog->mrl[i].mb_str(),
- (const char *)p_open_dialog->mrl[i].mb_str() );
- int i_options = 0;
-
- /* Count the input options */
- while( i + i_options + 1 < (int)p_open_dialog->mrl.GetCount() &&
- ((const char *)p_open_dialog->mrl[i + i_options + 1].
- mb_str())[0] == ':' )
- {
- i_options++;
- }
-
- /* Insert options */
- for( int j = 0; j < i_options; j++ )
- {
- playlist_ItemAddOption( p_item ,
- p_open_dialog->mrl[i + j + 1].mb_str() );
- }
-
- /* Get the options from the stream output dialog */
- if( sout_mrl.GetCount() )
- {
- for( int j = 0; j < (int)sout_mrl.GetCount(); j++ )
- {
- playlist_ItemAddOption( p_item , sout_mrl[j].mb_str() );
- }
- }
-
- playlist_AddItem( p_playlist, p_item,
- PLAYLIST_APPEND | (i ? 0 : PLAYLIST_GO),
- PLAYLIST_END );
-
- msg_Dbg( p_intf,"playings %s",
- (const char *)p_open_dialog->mrl[i].mb_str() );
-
- i += i_options;
- }
- vlc_object_release( p_playlist );
-
- Hide();
-}
-
-void StreamDialog::OnClose( wxCommandEvent& event )
-{
- Hide();
-}