* open.cpp : wxWindows plugin for vlc
*****************************************************************************
* Copyright (C) 2000-2001 VideoLAN
- * $Id: open.cpp,v 1.6 2003/03/22 03:14:34 gbazin Exp $
+ * $Id: open.cpp,v 1.7 2003/03/29 01:50:12 gbazin Exp $
*
* Authors: Gildas Bazin <gbazin@netcourrier.com>
*
SoutEnable_Event,
SoutSettings_Event,
+
+ DemuxDump_Event,
+ DemuxDumpEnable_Event,
+ DemuxDumpBrowse_Event,
};
BEGIN_EVENT_TABLE(OpenDialog, wxDialog)
/* Events generated by the stream output buttons */
EVT_CHECKBOX(SoutEnable_Event, OpenDialog::OnSoutEnable)
EVT_BUTTON(SoutSettings_Event, OpenDialog::OnSoutSettings)
+
+ /* Events generated by the demux dump buttons */
+ EVT_CHECKBOX(DemuxDumpEnable_Event, OpenDialog::OnDemuxDumpEnable)
+ EVT_TEXT(DemuxDump_Event, OpenDialog::OnDemuxDumpChange)
+ EVT_BUTTON(DemuxDumpBrowse_Event, OpenDialog::OnDemuxDumpBrowse)
+
END_EVENT_TABLE()
/*****************************************************************************
/* Create Stream Output checkox */
wxFlexGridSizer *sout_sizer = new wxFlexGridSizer( 2, 1, 20 );
- wxCheckBox *checkbox = new wxCheckBox( panel, SoutEnable_Event,
+ sout_checkbox = new wxCheckBox( panel, SoutEnable_Event,
_("Stream Output") );
- checkbox->SetToolTip( _("Use VLC has a stream server") );
- sout_sizer->Add( checkbox, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
+ sout_checkbox->SetToolTip( _("Use VLC has a stream server") );
+ sout_sizer->Add( sout_checkbox, 0,
+ wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
sout_button = new wxButton( panel, SoutSettings_Event, _("Settings...") );
sout_button->Disable();
char *psz_sout = config_GetPsz( p_intf, "sout" );
if( psz_sout && *psz_sout )
{
- checkbox->SetValue(TRUE);
+ sout_checkbox->SetValue(TRUE);
sout_button->Enable();
}
if( psz_sout ) free( psz_sout );
sout_sizer->Add( sout_button, 1, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL );
+ /* Create Demux Dump checkox */
+ wxBoxSizer *demuxdump_sizer = new wxBoxSizer( wxHORIZONTAL );
+ demuxdump_checkbox = new wxCheckBox( panel, DemuxDumpEnable_Event,
+ _("Capture input stream") );
+ demuxdump_checkbox->SetToolTip(
+ _("Capture the stream you are playing to a file") );
+ demuxdump_textctrl = new wxTextCtrl( panel, DemuxDump_Event,
+ "", wxDefaultPosition, wxDefaultSize,
+ wxTE_PROCESS_ENTER);
+ demuxdump_button = new wxButton( panel, DemuxDumpBrowse_Event,
+ _("Browse...") );
+
+ char *psz_demuxdump = config_GetPsz( p_intf, "demuxdump-file" );
+ if( psz_demuxdump && *psz_demuxdump )
+ {
+ demuxdump_textctrl->SetValue( psz_demuxdump );
+ }
+ if( psz_demuxdump ) free( psz_demuxdump );
+
+ demuxdump_textctrl->Disable();
+ demuxdump_button->Disable();
+ demuxdump_sizer->Add( demuxdump_checkbox, 0,
+ wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, 10 );
+ demuxdump_sizer->Add( demuxdump_button, 0,
+ wxALL | wxALIGN_CENTER_VERTICAL, 10 );
+ demuxdump_sizer->Add( demuxdump_textctrl, 1, wxALL, 10 );
+
/* Separation */
wxStaticLine *static_line = new wxStaticLine( panel, wxID_OK );
wxButton *cancel_button = new wxButton( panel, wxID_CANCEL, _("Cancel") );
+ /* Update Disc panel */
+ wxCommandEvent dummy_event;
+ OnDiscTypeChange( dummy_event );
+
/* Update MRL */
wxNotebookEvent event = wxNotebookEvent( wxEVT_NULL, 0, i_access_method );
OnPageChange( event );
panel_sizer->Add( label, 0, wxEXPAND | wxALL, 5 );
panel_sizer->Add( notebook_sizer, 1, wxEXPAND | wxALL, 5 );
panel_sizer->Add( sout_sizer, 0, wxALIGN_LEFT | wxALL, 5 );
+ panel_sizer->Add( demuxdump_sizer, 0, wxEXPAND | wxALIGN_LEFT | wxALL, 5 );
panel_sizer->Add( static_line, 0, wxEXPAND | wxALL, 5 );
panel_sizer->Add( button_sizer, 0, wxALIGN_LEFT | wxALL, 5 );
panel_sizer->Layout();
sizer->Add( browse_button, 0, wxALL, 5 );
panel->SetSizerAndFit( sizer );
-
return panel;
}
sizer_row->Add( sizer, 0, wxEXPAND | wxALL, 5 );
panel->SetSizerAndFit( sizer_row );
-
- /* Update Disc panel */
- wxCommandEvent dummy_event;
- OnDiscTypeChange( dummy_event );
-
return panel;
}
sizer_row->Add( sizer, 0, wxEXPAND | wxALL, 5 );
panel->SetSizerAndFit( sizer_row );
-
- /* Update Net panel */
- net_addrs[3]->SetValue( "http://" );
- wxCommandEvent dummy_event;
- dummy_event.SetId( NetRadio1_Event );
- OnNetTypeChange( dummy_event );
-
return panel;
}
void OpenDialog::UpdateMRL( int i_access_method )
{
+ wxString demux;
+
+ i_current_access_method = i_access_method;
+
+ /* Check if the user asked for demuxdump */
+ if( demuxdump_checkbox->GetValue() )
+ {
+ demux = "/demuxdump";
+ }
+
switch( i_access_method )
{
case FILE_ACCESS:
- mrl = "file://" + file_combo->GetValue();
+ mrl = "file" + demux + "://" + file_combo->GetValue();
break;
case DISC_ACCESS:
- mrl = ( disc_type->GetSelection() == 0 ? "dvdold://" :
- disc_type->GetSelection() == 1 ? "dvd://" : "vcd://" )
+ mrl = ( disc_type->GetSelection() == 0 ? "dvdold" :
+ disc_type->GetSelection() == 1 ? "dvd" : "vcd" )
+ + demux + "://"
+ disc_device->GetLineText(0)
+ wxString::Format( "@%d:%d",
disc_title->GetValue(),
if( net_ports[0]->GetValue() !=
config_GetInt( p_intf, "server-port" ) )
{
- mrl = wxString::Format( "udp://@:%d",
- net_ports[0]->GetValue() );
+ mrl = "udp" + demux +
+ wxString::Format( "://@:%d", net_ports[0]->GetValue() );
}
else
{
- mrl = "udp://";
+ mrl = "udp" + demux + "://";
}
break;
case 1:
- mrl = "udp://@" + net_addrs[1]->GetLineText(0);
+ mrl = "udp" + demux + "://@" + net_addrs[1]->GetLineText(0);
if( net_ports[1]->GetValue() !=
config_GetInt( p_intf, "server-port" ) )
{
break;
case 2:
- mrl = "udp://";
+ mrl = "udp" + demux + "://";
break;
case 3:
/* http access */
- mrl = net_addrs[3]->GetLineText(0);
+ mrl = "http" + demux + "://" + net_addrs[3]->GetLineText(0);
break;
}
break;
case SAT_ACCESS:
- mrl = "satellite://";
+ mrl = "satellite" + demux + "://";
break;
default:
break;
{
config_PutPsz( p_intf, "sout", "" );
}
+ else
+ {
+ demuxdump_checkbox->SetValue( 0 );
+ wxCommandEvent event = wxCommandEvent( wxEVT_NULL );
+ event.SetInt( 0 );
+ OnDemuxDumpEnable( event );
+ }
}
void OpenDialog::OnSoutSettings( wxCommandEvent& WXUNUSED(event) )
config_PutPsz( p_intf, "sout", (char *)dialog.mrl.c_str() );
}
}
+
+/*****************************************************************************
+ * Demux dump event methods.
+ *****************************************************************************/
+void OpenDialog::OnDemuxDumpEnable( wxCommandEvent& event )
+{
+ demuxdump_textctrl->Enable( event.GetInt() != 0 );
+ demuxdump_button->Enable( event.GetInt() != 0 );
+
+ if( event.GetInt() )
+ {
+ sout_checkbox->SetValue( 0 );
+ wxCommandEvent event = wxCommandEvent( wxEVT_NULL );
+ event.SetInt( 0 );
+ OnSoutEnable( event );
+ }
+
+ UpdateMRL( i_current_access_method );
+}
+
+void OpenDialog::OnDemuxDumpBrowse( wxCommandEvent& WXUNUSED(event) )
+{
+ wxFileDialog dialog( this, _("Save file"), "", "", "*.*", wxSAVE );
+
+ if( dialog.ShowModal() == wxID_OK )
+ {
+ demuxdump_textctrl->SetValue( dialog.GetPath() );
+ wxCommandEvent event = wxCommandEvent( wxEVT_NULL );
+ OnDemuxDumpChange( event );
+ }
+}
+
+void OpenDialog::OnDemuxDumpChange( wxCommandEvent& WXUNUSED(event) )
+{
+ config_PutPsz( p_intf, "demuxdump-file",
+ demuxdump_textctrl->GetValue() );
+}
* preferences.cpp : wxWindows plugin for vlc
*****************************************************************************
* Copyright (C) 2000-2001 VideoLAN
- * $Id: preferences.cpp,v 1.1 2003/03/26 00:56:22 gbazin Exp $
+ * $Id: preferences.cpp,v 1.2 2003/03/29 01:50:12 gbazin Exp $
*
* Authors: Gildas Bazin <gbazin@netcourrier.com>
*
#include <wx/wxprec.h>
#include <wx/wx.h>
+#include <wx/window.h>
#include <wx/notebook.h>
#include <wx/textctrl.h>
#include <wx/combobox.h>
#include <wx/spinctrl.h>
#include <wx/statline.h>
#include <wx/treectrl.h>
+#include <wx/clntdata.h>
+#include <wx/dynarray.h>
#include <vlc/intf.h>
wxWindow *p_parent;
};
+WX_DEFINE_ARRAY(wxEvtHandler *, ArrayOfControls);
+
class PrefsPanel : public wxScrolledWindow
{
public:
DECLARE_EVENT_TABLE()
intf_thread_t *p_intf;
+ ArrayOfControls controls_array;
};
-class ConfigData : public wxTreeItemData
+class ConfigTreeData : public wxTreeItemData
{
public:
- ConfigData() { panel == NULL; }
- virtual ~ConfigData() { if( panel ) delete panel; }
+ ConfigTreeData() { panel == NULL; }
+ virtual ~ConfigTreeData() { if( panel ) delete panel; }
wxWindow *panel;
wxBoxSizer *sizer;
};
+class ConfigData : public wxClientData
+{
+public:
+ ConfigData() { b_advanced = VLC_FALSE; }
+ ConfigData( vlc_bool_t _b_advanced ) { b_advanced = _b_advanced; }
+ virtual ~ConfigData() { }
+
+ vlc_bool_t IsAdvanced() { return b_advanced; }
+
+private:
+ vlc_bool_t b_advanced;
+};
+
/*****************************************************************************
* Event Table.
*****************************************************************************/
void PrefsTreeCtrl::OnSelectTreeItem( wxTreeEvent& event )
{
- ConfigData *config_data;
+ ConfigTreeData *config_data;
- config_data = (ConfigData *)GetItemData( event.GetOldItem() );
+ config_data = (ConfigTreeData *)GetItemData( event.GetOldItem() );
if( config_data && config_data->panel )
{
config_data->panel->Hide();
p_sizer->Remove( config_data->panel );
}
- config_data = (ConfigData *)GetItemData( event.GetItem() );
+ config_data = (ConfigTreeData *)GetItemData( event.GetItem() );
if( config_data && config_data->panel )
{
config_data->panel->Show();
switch( p_item->i_type )
{
case CONFIG_HINT_CATEGORY:
- ConfigData *config_data = new ConfigData;
+ ConfigTreeData *config_data = new ConfigTreeData;
config_data->panel =
new PrefsPanel( p_parent, p_intf,
p_module, p_item->psz_text );
}
/* Add the plugin to the tree */
- ConfigData *config_data = new ConfigData;
+ ConfigTreeData *config_data = new ConfigTreeData;
config_data->panel =
new PrefsPanel( p_parent, p_intf, p_module, NULL );
config_data->panel->Hide();
: wxScrolledWindow( parent, -1, wxDefaultPosition, wxDefaultSize )
{
module_config_t *p_item;
+ vlc_list_t *p_list;
+ module_t *p_parser;
+
wxStaticText *label;
wxComboBox *combo;
wxRadioButton *radio;
wxButton *button;
wxStaticLine *static_line;
wxBoxSizer *horizontal_sizer;
+ wxSortedArrayString sorted_array;
+ wxArrayString array;
/* Initializations */
p_intf = _p_intf;
break;
case CONFIG_ITEM_MODULE:
+ label = new wxStaticText(this, -1, p_item->psz_text);
+ combo = new wxComboBox( this, -1, p_item->psz_value,
+ wxDefaultPosition, wxSize(200,-1),
+ 0, NULL );
+
/* build a list of available modules */
+ p_list = vlc_list_find( p_intf, VLC_OBJECT_MODULE, FIND_ANYWHERE );
+ for( int i_index = 0; i_index < p_list->i_count; i_index++ )
+ {
+ p_parser = (module_t *)p_list->p_values[i_index].p_object ;
+
+ if( !strcmp( p_parser->psz_capability,
+ p_item->psz_type ) )
+ {
+ combo->Append( p_parser->psz_longname );
+ }
+ }
- label = new wxStaticText(this, -1, p_item->psz_text);
- combo = new wxComboBox( this, -1, "", wxPoint(20,25),
- wxSize(120, -1), 0, NULL );
combo->SetToolTip( p_item->psz_longtext );
horizontal_sizer = new wxBoxSizer( wxHORIZONTAL );
horizontal_sizer->Add( label, 0, wxALL, 5 );
case CONFIG_ITEM_STRING:
case CONFIG_ITEM_FILE:
label = new wxStaticText(this, -1, p_item->psz_text);
- textctrl = new wxTextCtrl( this, -1, "",
+ textctrl = new wxTextCtrl( this, -1, p_item->psz_value,
wxDefaultPosition, wxDefaultSize,
wxTE_PROCESS_ENTER);
-#if 0
- combo = new wxComboBox( this, -1, "", wxPoint(20,25),
- wxSize(120, -1), 0, NULL );
-#endif
textctrl->SetToolTip( p_item->psz_longtext );
horizontal_sizer = new wxBoxSizer( wxHORIZONTAL );
horizontal_sizer->Add( label, 0, wxALL, 5 );
case CONFIG_ITEM_INTEGER:
label = new wxStaticText(this, -1, p_item->psz_text);
- spin = new wxSpinCtrl( this, -1, p_item->psz_text,
+ spin = new wxSpinCtrl( this, -1,
+ wxString::Format(_("%d"), p_item->i_value),
wxDefaultPosition, wxDefaultSize,
wxSP_ARROW_KEYS,
- 0, 16000, 8);
+ 0, 16000, p_item->i_value);
spin->SetToolTip( p_item->psz_longtext );
horizontal_sizer = new wxBoxSizer( wxHORIZONTAL );
horizontal_sizer->Add( label, 0, wxALL, 5 );
case CONFIG_ITEM_FLOAT:
label = new wxStaticText(this, -1, p_item->psz_text);
- spin = new wxSpinCtrl( this, -1, p_item->psz_text,
+ spin = new wxSpinCtrl( this, -1,
+ wxString::Format(_("%d"), p_item->i_value),
wxDefaultPosition, wxDefaultSize,
wxSP_ARROW_KEYS,
- 0, 16000, 8);
+ 0, 16000, p_item->i_value);
spin->SetToolTip( p_item->psz_longtext );
horizontal_sizer = new wxBoxSizer( wxHORIZONTAL );
horizontal_sizer->Add( label, 0, wxALL, 5 );
case CONFIG_ITEM_BOOL:
checkbox = new wxCheckBox( this, -1, p_item->psz_text );
+ if( p_item->i_value ) checkbox->SetValue(TRUE);
checkbox->SetToolTip( p_item->psz_longtext );
horizontal_sizer = new wxBoxSizer( wxHORIZONTAL );
horizontal_sizer->Add( checkbox, 0, wxALL, 5 );