/*****************************************************************************
* dialogs.cpp : wxWindows plugin for vlc
*****************************************************************************
- * Copyright (C) 2000-2001 VideoLAN
- * $Id: dialogs.cpp,v 1.10 2003/10/29 17:32:54 zorglub Exp $
+ * Copyright (C) 2000-2004 VideoLAN
+ * $Id$
*
- * Authors: Gildas Bazin <gbazin@netcourrier.com>
+ * Authors: Gildas Bazin <gbazin@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
#include <vlc/vlc.h>
#include <vlc/aout.h>
#include <vlc/intf.h>
-#include "stream_control.h"
#include "wxwindows.h"
/* include the icon graphic */
#include "../../../share/vlc32x32.xpm"
+/* Dialogs Provider */
+class DialogsProvider: public wxFrame
+{
+public:
+ /* Constructor */
+ DialogsProvider( intf_thread_t *p_intf, wxWindow *p_parent );
+ virtual ~DialogsProvider();
+
+private:
+ void Open( int i_access_method, int i_arg );
+
+ /* Event handlers (these functions should _not_ be virtual) */
+ void OnExit( wxCommandEvent& event );
+ void OnPlaylist( wxCommandEvent& event );
+ void OnMessages( wxCommandEvent& event );
+ void OnFileInfo( wxCommandEvent& event );
+ void OnPreferences( wxCommandEvent& event );
+ void OnWizardDialog( wxCommandEvent& event );
+ void OnBookmarks( wxCommandEvent& event );
+
+ void OnOpenFileGeneric( wxCommandEvent& event );
+ void OnOpenFileSimple( wxCommandEvent& event );
+ void OnOpenDirectory( wxCommandEvent& event );
+ void OnOpenFile( wxCommandEvent& event );
+ void OnOpenDisc( wxCommandEvent& event );
+ void OnOpenNet( wxCommandEvent& event );
+ void OnOpenCapture( wxCommandEvent& event );
+ void OnOpenSat( wxCommandEvent& event );
+
+ void OnPopupMenu( wxCommandEvent& event );
+
+ void OnIdle( wxIdleEvent& event );
+
+ void OnExitThread( wxCommandEvent& event );
+
+ DECLARE_EVENT_TABLE();
+
+ intf_thread_t *p_intf;
+
+public:
+ /* Secondary windows */
+ OpenDialog *p_open_dialog;
+ wxFileDialog *p_file_dialog;
+ wxDirDialog *p_dir_dialog;
+ Playlist *p_playlist_dialog;
+ Messages *p_messages_dialog;
+ FileInfo *p_fileinfo_dialog;
+ WizardDialog *p_wizard_dialog;
+ wxFrame *p_prefs_dialog;
+ wxWindow *p_bookmarks_dialog;
+ wxFileDialog *p_file_generic_dialog;
+};
+
DEFINE_LOCAL_EVENT_TYPE( wxEVT_DIALOG );
BEGIN_EVENT_TABLE(DialogsProvider, wxFrame)
EVT_COMMAND(INTF_DIALOG_FILE, wxEVT_DIALOG, DialogsProvider::OnOpenFile)
EVT_COMMAND(INTF_DIALOG_DISC, wxEVT_DIALOG, DialogsProvider::OnOpenDisc)
EVT_COMMAND(INTF_DIALOG_NET, wxEVT_DIALOG, DialogsProvider::OnOpenNet)
+ EVT_COMMAND(INTF_DIALOG_CAPTURE, wxEVT_DIALOG,
+ DialogsProvider::OnOpenCapture)
EVT_COMMAND(INTF_DIALOG_FILE_SIMPLE, wxEVT_DIALOG,
DialogsProvider::OnOpenFileSimple)
EVT_COMMAND(INTF_DIALOG_FILE_GENERIC, wxEVT_DIALOG,
DialogsProvider::OnOpenFileGeneric)
+ EVT_COMMAND(INTF_DIALOG_DIRECTORY, wxEVT_DIALOG,
+ DialogsProvider::OnOpenDirectory)
EVT_COMMAND(INTF_DIALOG_PLAYLIST, wxEVT_DIALOG,
DialogsProvider::OnPlaylist)
DialogsProvider::OnMessages)
EVT_COMMAND(INTF_DIALOG_PREFS, wxEVT_DIALOG,
DialogsProvider::OnPreferences)
- EVT_COMMAND(INTF_DIALOG_STREAM, wxEVT_DIALOG,
- DialogsProvider::OnStreamDialog)
+ EVT_COMMAND(INTF_DIALOG_WIZARD, wxEVT_DIALOG,
+ DialogsProvider::OnWizardDialog)
EVT_COMMAND(INTF_DIALOG_FILEINFO, wxEVT_DIALOG,
DialogsProvider::OnFileInfo)
+ EVT_COMMAND(INTF_DIALOG_BOOKMARKS, wxEVT_DIALOG,
+ DialogsProvider::OnBookmarks)
EVT_COMMAND(INTF_DIALOG_POPUPMENU, wxEVT_DIALOG,
DialogsProvider::OnPopupMenu)
EVT_COMMAND(INTF_DIALOG_EXIT, wxEVT_DIALOG,
DialogsProvider::OnExitThread)
END_EVENT_TABLE()
+wxWindow *CreateDialogsProvider( intf_thread_t *p_intf, wxWindow *p_parent )
+{
+ return new DialogsProvider( p_intf, p_parent );
+}
+
/*****************************************************************************
* Constructor.
*****************************************************************************/
p_fileinfo_dialog = NULL;
p_prefs_dialog = NULL;
p_file_generic_dialog = NULL;
- p_stream_dialog = NULL;
+ p_wizard_dialog = NULL;
+ p_bookmarks_dialog = NULL;
/* Give our interface a nice little icon */
p_intf->p_sys->p_icon = new wxIcon( vlc_xpm );
/* Create the messages dialog so it can begin storing logs */
p_messages_dialog = new Messages( p_intf, p_parent ? p_parent : this );
+ /* Check if user wants to show the bookmarks dialog by default */
+ wxCommandEvent dummy_event;
+ if( config_GetInt( p_intf, "wxwin-bookmarks" ) )
+ OnBookmarks( dummy_event );
+
/* Intercept all menu events in our custom event handler */
PushEventHandler( new MenuEvtHandler( p_intf, NULL ) );
}
if( p_messages_dialog ) delete p_messages_dialog;
if( p_fileinfo_dialog ) delete p_fileinfo_dialog;
if( p_file_generic_dialog ) delete p_file_generic_dialog;
- if( p_stream_dialog ) delete p_stream_dialog;
+ if( p_wizard_dialog ) delete p_wizard_dialog;
+ if( p_bookmarks_dialog ) delete p_bookmarks_dialog;
if( p_intf->p_sys->p_icon ) delete p_intf->p_sys->p_icon;
{
/* Update the log window */
if( p_messages_dialog )
- p_messages_dialog->UpdateLog();
+// p_messages_dialog->UpdateLog();
/* Update the playlist */
if( p_playlist_dialog )
}
}
-void DialogsProvider::OnStreamDialog( wxCommandEvent& WXUNUSED(event) )
+void DialogsProvider::OnWizardDialog( wxCommandEvent& WXUNUSED(event) )
{
- /* Show/hide the stream window */
- if( !p_stream_dialog )
- p_stream_dialog = new StreamDialog( p_intf, this );
+ p_wizard_dialog = new WizardDialog( p_intf, this, NULL, 0, 0 );
- if( p_stream_dialog )
+ if( p_wizard_dialog )
{
- p_stream_dialog->Show( !p_stream_dialog->IsShown() );
+ p_wizard_dialog->Run();
+ delete p_wizard_dialog;
+ }
+
+ p_wizard_dialog = NULL;
+}
+
+void DialogsProvider::OnBookmarks( wxCommandEvent& WXUNUSED(event) )
+{
+ /* Show/hide the open dialog */
+ if( !p_bookmarks_dialog )
+ p_bookmarks_dialog = BookmarksDialog( p_intf, this );
+
+ if( p_bookmarks_dialog )
+ {
+ p_bookmarks_dialog->Show( !p_bookmarks_dialog->IsShown() );
}
}
}
if( p_file_generic_dialog == NULL )
- p_file_generic_dialog = new wxFileDialog( this );
+ p_file_generic_dialog = new wxFileDialog( NULL );
if( p_file_generic_dialog )
{
p_arg->pf_callback( p_arg );
}
- /* Blocking or not ? */
- if( p_arg->b_blocking )
- {
- vlc_mutex_lock( &p_arg->lock );
- p_arg->b_ready = 1;
- vlc_cond_signal( &p_arg->wait );
- vlc_mutex_unlock( &p_arg->lock );
- }
-
- /* Clean-up */
- if( p_arg->b_blocking )
- {
- vlc_mutex_destroy( &p_arg->lock );
- vlc_cond_destroy( &p_arg->wait );
- }
if( p_arg->psz_results )
{
for( int i = 0; i < p_arg->i_results; i++ )
}
if( p_arg->psz_title ) free( p_arg->psz_title );
if( p_arg->psz_extensions ) free( p_arg->psz_extensions );
+
free( p_arg );
}
}
if( p_file_dialog == NULL )
- p_file_dialog = new wxFileDialog( this, wxU(_("Open file")),
+ p_file_dialog = new wxFileDialog( NULL, wxU(_("Open File")),
wxT(""), wxT(""), wxT("*"), wxOPEN | wxMULTIPLE );
if( p_file_dialog && p_file_dialog->ShowModal() == wxID_OK )
for( size_t i = 0; i < paths.GetCount(); i++ )
if( event.GetInt() )
playlist_Add( p_playlist, (const char *)paths[i].mb_str(),
- 0, 0,
+ (const char *)paths[i].mb_str(),
PLAYLIST_APPEND | (i ? 0 : PLAYLIST_GO),
PLAYLIST_END );
else
playlist_Add( p_playlist, (const char *)paths[i].mb_str(),
- 0, 0, PLAYLIST_APPEND, PLAYLIST_END );
+ (const char *)paths[i].mb_str(),
+ PLAYLIST_APPEND, PLAYLIST_END );
+ }
+
+ vlc_object_release( p_playlist );
+}
+
+void DialogsProvider::OnOpenDirectory( wxCommandEvent& event )
+{
+ playlist_t *p_playlist =
+ (playlist_t *)vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
+ FIND_ANYWHERE );
+ if( p_playlist == NULL )
+ {
+ return;
+ }
+
+ if( p_dir_dialog == NULL )
+ p_dir_dialog = new wxDirDialog( NULL );
+
+ if( p_dir_dialog && p_dir_dialog->ShowModal() == wxID_OK )
+ {
+ playlist_item_t *p_item;
+ wxString path = p_dir_dialog->GetPath();
+
+ int i_id = playlist_Add( p_playlist, (const char *)path.mb_str(),
+ (const char *)path.mb_str(),
+ PLAYLIST_APPEND, PLAYLIST_END );
+ p_item = playlist_ItemGetById( p_playlist, i_id );
+ if( p_item )
+ {
+ input_CreateThread( p_intf, &p_item->input );
+ }
}
vlc_object_release( p_playlist );
Open( NET_ACCESS, event.GetInt() );
}
-void DialogsProvider::OnOpenSat( wxCommandEvent& event )
+void DialogsProvider::OnOpenCapture( wxCommandEvent& event )
{
- Open( SAT_ACCESS, event.GetInt() );
+ Open( CAPTURE_ACCESS, event.GetInt() );
}
void DialogsProvider::Open( int i_access_method, int i_arg )
{
/* Show/hide the open dialog */
if( !p_open_dialog )
- p_open_dialog = new OpenDialog(p_intf, this, i_access_method, i_arg ,
- OPEN_NORMAL );
+ p_open_dialog = new OpenDialog( p_intf, this, i_access_method, i_arg,
+ OPEN_NORMAL );
if( p_open_dialog )
{