X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fwxwidgets%2Fdialogs.cpp;h=12e964753a6db40bbbb48dbc602aacdc67ecb15e;hb=6ee1e193fd896ab9a4729fde14f009d9ce629815;hp=bd8308cd2b77dd74da0ed55ebcd07b9113d79aee;hpb=e1069f1248d29dea95468778886f5b90f9d29913;p=vlc diff --git a/modules/gui/wxwidgets/dialogs.cpp b/modules/gui/wxwidgets/dialogs.cpp index bd8308cd2b..12e964753a 100644 --- a/modules/gui/wxwidgets/dialogs.cpp +++ b/modules/gui/wxwidgets/dialogs.cpp @@ -18,28 +18,40 @@ * * 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 /* malloc(), free() */ #include /* ENOMEM */ -#include /* strerror() */ -#include #include -#include -#include -#include "charset.h" - -#include "wxwidgets.h" +#include +#include + +#include "vlc_charset.h" + +//#include "dialogs/vlm/vlm_panel.hpp" +#include "dialogs/bookmarks.hpp" +#include "dialogs/wizard.hpp" +#include "dialogs/playlist.hpp" +#include "dialogs/open.hpp" +#include "dialogs/updatevlc.hpp" +#include "dialogs/fileinfo.hpp" +#include "dialogs/iteminfo.hpp" +#include "dialogs/preferences.hpp" +#include "dialogs/messages.hpp" +#include "dialogs/interaction.hpp" +#include "interface.hpp" /* include the icon graphic */ #include "../../../share/vlc32x32.xpm" + /* Dialogs Provider */ +namespace wxvlc +{ class DialogsProvider: public wxFrame { public: @@ -52,6 +64,8 @@ private: /* Event handlers (these functions should _not_ be virtual) */ void OnUpdateVLC( wxCommandEvent& event ); + //void OnVLM( wxCommandEvent& event ); + void OnInteraction( wxCommandEvent& event ); void OnExit( wxCommandEvent& event ); void OnPlaylist( wxCommandEvent& event ); void OnMessages( wxCommandEvent& event ); @@ -70,6 +84,9 @@ private: void OnOpenSat( wxCommandEvent& event ); void OnPopupMenu( wxCommandEvent& event ); + void OnAudioPopupMenu( wxCommandEvent& event ); + void OnVideoPopupMenu( wxCommandEvent& event ); + void OnMiscPopupMenu( wxCommandEvent& event ); void OnIdle( wxIdleEvent& event ); @@ -92,7 +109,9 @@ public: wxFrame *p_bookmarks_dialog; wxFileDialog *p_file_generic_dialog; UpdateVLC *p_updatevlc_dialog; + //VLMFrame *p_vlm_dialog; }; +} DEFINE_LOCAL_EVENT_TYPE( wxEVT_DIALOG ); @@ -125,12 +144,26 @@ BEGIN_EVENT_TABLE(DialogsProvider, wxFrame) DialogsProvider::OnFileInfo) EVT_COMMAND(INTF_DIALOG_BOOKMARKS, wxEVT_DIALOG, DialogsProvider::OnBookmarks) + EVT_COMMAND(INTF_DIALOG_POPUPMENU, wxEVT_DIALOG, DialogsProvider::OnPopupMenu) + EVT_COMMAND(INTF_DIALOG_AUDIOPOPUPMENU, wxEVT_DIALOG, + DialogsProvider::OnAudioPopupMenu) + EVT_COMMAND(INTF_DIALOG_VIDEOPOPUPMENU, wxEVT_DIALOG, + DialogsProvider::OnVideoPopupMenu) + EVT_COMMAND(INTF_DIALOG_MISCPOPUPMENU, wxEVT_DIALOG, + DialogsProvider::OnMiscPopupMenu) + EVT_COMMAND(INTF_DIALOG_EXIT, wxEVT_DIALOG, DialogsProvider::OnExitThread) EVT_COMMAND(INTF_DIALOG_UPDATEVLC, wxEVT_DIALOG, DialogsProvider::OnUpdateVLC) +#if 0 + EVT_COMMAND(INTF_DIALOG_VLM, wxEVT_DIALOG, + DialogsProvider::OnVLM) +#endif + EVT_COMMAND( INTF_DIALOG_INTERACTION, wxEVT_DIALOG, + DialogsProvider::OnInteraction ) END_EVENT_TABLE() wxWindow *CreateDialogsProvider( intf_thread_t *p_intf, wxWindow *p_parent ) @@ -157,9 +190,10 @@ DialogsProvider::DialogsProvider( intf_thread_t *_p_intf, wxWindow *p_parent ) p_bookmarks_dialog = NULL; p_dir_dialog = NULL; p_updatevlc_dialog = NULL; + //p_vlm_dialog = NULL; /* Give our interface a nice little icon */ - p_intf->p_sys->p_icon = new wxIcon( vlc_xpm ); + p_intf->p_sys->p_icon = new wxIcon( (const char**) vlc_xpm ); /* Create the messages dialog so it can begin storing logs */ p_messages_dialog = new Messages( p_intf, p_parent ? p_parent : this ); @@ -191,7 +225,7 @@ DialogsProvider::DialogsProvider( intf_thread_t *_p_intf, wxWindow *p_parent ) INIT( ID_PLAYLIST, p_playlist_dialog, new Playlist(p_intf,this), ShowPlaylist ); INIT( ID_MESSAGES, p_messages_dialog, new Messages(p_intf,this), Show ); INIT( ID_FILE_INFO, p_fileinfo_dialog, new FileInfo(p_intf,this), Show ); - INIT( ID_BOOKMARKS, p_bookmarks_dialog, BookmarksDialog(p_intf,this), Show); + INIT( ID_BOOKMARKS, p_bookmarks_dialog, new BookmarksDialog(p_intf,this), Show); #undef INIT } @@ -215,7 +249,7 @@ DialogsProvider::~DialogsProvider() #undef UPDATE - PopEventHandler(true); + PopEventHandler(true); /* Clean up */ if( p_open_dialog ) delete p_open_dialog; @@ -228,6 +262,7 @@ DialogsProvider::~DialogsProvider() if( p_wizard_dialog ) delete p_wizard_dialog; if( p_bookmarks_dialog ) delete p_bookmarks_dialog; if( p_updatevlc_dialog ) delete p_updatevlc_dialog; + //if( p_vlm_dialog ) delete p_vlm_dialog; if( p_intf->p_sys->p_icon ) delete p_intf->p_sys->p_icon; @@ -251,7 +286,7 @@ void DialogsProvider::OnIdle( wxIdleEvent& WXUNUSED(event) ) /* Update the fileinfo windows */ if( p_fileinfo_dialog ) - p_fileinfo_dialog->UpdateFileInfo(); + p_fileinfo_dialog->Update(); } void DialogsProvider::OnPlaylist( wxCommandEvent& WXUNUSED(event) ) @@ -319,7 +354,7 @@ void DialogsProvider::OnBookmarks( wxCommandEvent& WXUNUSED(event) ) { /* Show/hide the open dialog */ if( !p_bookmarks_dialog ) - p_bookmarks_dialog = BookmarksDialog( p_intf, this ); + p_bookmarks_dialog = new BookmarksDialog( p_intf, this ); if( p_bookmarks_dialog ) { @@ -344,8 +379,8 @@ void DialogsProvider::OnOpenFileGeneric( wxCommandEvent& event ) { p_file_generic_dialog->SetMessage( wxU(p_arg->psz_title) ); p_file_generic_dialog->SetWildcard( wxU(p_arg->psz_extensions) ); - p_file_generic_dialog->SetStyle( (p_arg->b_save ? wxSAVE : wxOPEN) | - (p_arg->b_multiple ? wxMULTIPLE:0) ); + p_file_generic_dialog->SetWindowStyle( (p_arg->b_save ? wxSAVE : wxOPEN) | + (p_arg->b_multiple ? wxMULTIPLE:0) ); } if( p_file_generic_dialog && @@ -360,7 +395,7 @@ void DialogsProvider::OnOpenFileGeneric( wxCommandEvent& event ) sizeof(char *) ); for( size_t i = 0; i < paths.GetCount(); i++ ) { - p_arg->psz_results[i] = strdup( paths[i].mb_str() ); + p_arg->psz_results[i] = strdup( paths[i].mb_str(wxConvUTF8) ); } } @@ -398,6 +433,12 @@ void DialogsProvider::OnOpenFileSimple( wxCommandEvent& event ) p_file_dialog = new wxFileDialog( NULL, wxU(_("Open File")), wxT(""), wxT(""), wxT("*"), wxOPEN | wxMULTIPLE ); + p_file_dialog->SetWildcard(wxU(_("All Files (*.*)|*" + "|Sound Files (*.mp3, *.ogg, etc.)|" EXTENSIONS_AUDIO + "|Video Files (*.avi, *.mpg, etc.)|" EXTENSIONS_VIDEO + "|Playlist Files (*.m3u, *.pls, etc.)|" EXTENSIONS_PLAYLIST + "|Subtitle Files (*.srt, *.sub, etc.)|" EXTENSIONS_SUBTITLE))); + if( p_file_dialog && p_file_dialog->ShowModal() == wxID_OK ) { wxArrayString paths; @@ -406,15 +447,16 @@ void DialogsProvider::OnOpenFileSimple( wxCommandEvent& event ) for( size_t i = 0; i < paths.GetCount(); i++ ) { - char *psz_utf8 = FromUTF32( paths[i].wc_str() ); + char *psz_utf8 = wxFromLocale( paths[i] ); if( event.GetInt() ) - playlist_Add( p_playlist, psz_utf8, psz_utf8, - PLAYLIST_APPEND | (i ? 0 : PLAYLIST_GO), - PLAYLIST_END ); + playlist_Add( p_playlist, psz_utf8, NULL, + PLAYLIST_APPEND | (i ? 0 : PLAYLIST_GO) | + (i ? PLAYLIST_PREPARSE : 0 ), + PLAYLIST_END, VLC_TRUE, VLC_FALSE ); else - playlist_Add( p_playlist, psz_utf8, psz_utf8, - PLAYLIST_APPEND, PLAYLIST_END ); - free( psz_utf8 ); + playlist_Add( p_playlist, psz_utf8, NULL, + PLAYLIST_APPEND | PLAYLIST_PREPARSE , PLAYLIST_END , VLC_TRUE, VLC_FALSE ); + wxLocaleFree( psz_utf8 ); } } @@ -432,16 +474,16 @@ void DialogsProvider::OnOpenDirectory( wxCommandEvent& event ) } if( p_dir_dialog == NULL ) - p_dir_dialog = new wxDirDialog( NULL ); + p_dir_dialog = new wxDirDialog( NULL, wxU(_("Select a directory")) ); if( p_dir_dialog && p_dir_dialog->ShowModal() == wxID_OK ) { wxString path = p_dir_dialog->GetPath(); - char *psz_utf8 = FromUTF32( path.wc_str() ); - playlist_Add( p_playlist, psz_utf8, psz_utf8, + char *psz_utf8 = wxFromLocale( path ); + playlist_Add( p_playlist, psz_utf8, NULL, PLAYLIST_APPEND | (event.GetInt() ? PLAYLIST_GO : 0), - PLAYLIST_END ); - free( psz_utf8 ); + PLAYLIST_END, VLC_TRUE, VLC_FALSE ); + wxLocaleFree( psz_utf8 ); } vlc_object_release( p_playlist ); @@ -486,6 +528,22 @@ void DialogsProvider::OnPopupMenu( wxCommandEvent& event ) ::PopupMenu( p_intf, this, mousepos ); } +void DialogsProvider::OnAudioPopupMenu( wxCommandEvent& event ) +{ + wxPoint mousepos = ScreenToClient( wxGetMousePosition() ); + ::AudioPopupMenu( p_intf, this, mousepos ); +} +void DialogsProvider::OnVideoPopupMenu( wxCommandEvent& event ) +{ + wxPoint mousepos = ScreenToClient( wxGetMousePosition() ); + ::VideoPopupMenu( p_intf, this, mousepos ); +} +void DialogsProvider::OnMiscPopupMenu( wxCommandEvent& event ) +{ + wxPoint mousepos = ScreenToClient( wxGetMousePosition() ); + ::MiscPopupMenu( p_intf, this, mousepos ); +} + void DialogsProvider::OnExitThread( wxCommandEvent& WXUNUSED(event) ) { wxTheApp->ExitMainLoop(); @@ -502,3 +560,62 @@ void DialogsProvider::OnUpdateVLC( wxCommandEvent& WXUNUSED(event) ) p_updatevlc_dialog->Show( !p_updatevlc_dialog->IsShown() ); } } + +#if 0 +void DialogsProvider::OnVLM( wxCommandEvent& WXUNUSED(event) ) +{ + /* Show/hide the file info window */ + if( !p_vlm_dialog ) + p_vlm_dialog = new VLMFrame( p_intf, this ); + + if( p_vlm_dialog ) + { + p_vlm_dialog->Show( !p_vlm_dialog->IsShown() ); + } +} +#endif + +void DialogsProvider::OnInteraction( wxCommandEvent& event ) +{ + intf_dialog_args_t *p_arg = (intf_dialog_args_t *)event.GetClientData(); + interaction_dialog_t *p_dialog; + InteractionDialog *p_wxdialog; + + return; + + if( p_arg == NULL ) + { + msg_Dbg( p_intf, "OnInteraction() called with NULL arg" ); + return; + } + p_dialog = p_arg->p_dialog; + + /** \bug We store the interface object for the dialog in the p_private + * field of the core dialog object. This is not safe if we change + * interface while a dialog is loaded */ + + switch( p_dialog->i_action ) + { + case INTERACT_NEW: + p_wxdialog = new InteractionDialog( p_intf, this, p_dialog ); + p_dialog->p_private = (void*)p_wxdialog; + p_wxdialog->Show(); + break; + case INTERACT_UPDATE: + p_wxdialog = (InteractionDialog*)(p_dialog->p_private); + if( p_wxdialog) + p_wxdialog->Update(); + break; + case INTERACT_HIDE: + p_wxdialog = (InteractionDialog*)(p_dialog->p_private); + if( p_wxdialog ) + p_wxdialog->Hide(); + p_dialog->i_status = HIDDEN_DIALOG; + break; + case INTERACT_DESTROY: + p_wxdialog = (InteractionDialog*)(p_dialog->p_private); + /// \todo + p_dialog->i_status = DESTROYED_DIALOG; + break; + } +}