X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fwxwindows%2Fwxwindows.h;h=7875907adfbcfbdcb0bd37a4f855733440457e7b;hb=49d00069faa86ffcf22d4cbd064cd5c500056ea1;hp=7f4ae6a1d76ba17f24c8a7d3e05e3570a6cec8fc;hpb=632a9c5531f6b3735ef420f004ef1ec1fe57e681;p=vlc diff --git a/modules/gui/wxwindows/wxwindows.h b/modules/gui/wxwindows/wxwindows.h index 7f4ae6a1d7..7875907adf 100644 --- a/modules/gui/wxwindows/wxwindows.h +++ b/modules/gui/wxwindows/wxwindows.h @@ -2,7 +2,7 @@ * wxwindows.h: private wxWindows interface description ***************************************************************************** * Copyright (C) 1999, 2000 VideoLAN - * $Id: wxwindows.h,v 1.2 2002/11/23 01:32:40 ipkiss Exp $ + * $Id: wxwindows.h,v 1.51 2003/08/10 09:22:07 gbazin Exp $ * * Authors: Gildas Bazin * @@ -10,7 +10,7 @@ * 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 @@ -22,37 +22,62 @@ *****************************************************************************/ #include +#include +#include +#include +#include +#include +#include + +DECLARE_LOCAL_EVENT_TYPE( wxEVT_DIALOG, 0 ); +enum +{ + FILE_ACCESS, + DISC_ACCESS, + NET_ACCESS, + SAT_ACCESS, + FILE_SIMPLE_ACCESS +}; + +class OpenDialog; class Playlist; +class Messages; +class FileInfo; + +#define SLIDER_MAX_POS 10000 + +/* wxU is used to convert ansi/utf8 strings to unicode strings (wchar_t) */ +#if defined( ENABLE_NLS ) && defined( HAVE_GETTEXT ) && \ + defined( WIN32 ) && !defined( HAVE_INCLUDED_GETTEXT ) +#if wxUSE_UNICODE +# define wxU(utf8) wxString(utf8, wxConvUTF8) +#else +# define wxU(utf8) wxString(wxConvUTF8.cMB2WC(utf8), *wxConvCurrent) +#endif + +#else // ENABLE_NLS && HAVE_GETTEXT && WIN32 && !HAVE_INCLUDED_GETTEXT +#if wxUSE_UNICODE +# define wxU(ansi) wxString(ansi, *wxConvCurrent) +#else +# define wxU(ansi) ansi +#endif + +#endif + +wxArrayString SeparateEntries( wxString ); /***************************************************************************** - * intf_sys_t: description and status of Gtk+ interface + * intf_sys_t: description and status of wxwindows interface *****************************************************************************/ struct intf_sys_t { /* the wx parent window */ wxWindow *p_wxwindow; - - /* secondary windows */ - Playlist *p_playlist_window; + wxIcon *p_icon; /* special actions */ vlc_bool_t b_playing; - vlc_bool_t b_popup_changed; /* display menu ? */ - vlc_bool_t b_window_changed; /* window display toggled ? */ - vlc_bool_t b_playlist_changed; /* playlist display toggled ? */ - vlc_bool_t b_slider_free; /* slider status */ - - /* menus handlers */ - vlc_bool_t b_program_update; /* do we need to update programs - menu */ - vlc_bool_t b_title_update; /* do we need to update title menus */ - vlc_bool_t b_chapter_update; /* do we need to update - chapter menus */ - vlc_bool_t b_audio_update; /* do we need to update audio menus */ - vlc_bool_t b_spu_update; /* do we need to update spu menus */ - - /* windows and widgets */ /* The input thread */ input_thread_t * p_input; @@ -60,6 +85,7 @@ struct intf_sys_t /* The slider */ int i_slider_pos; /* slider position */ int i_slider_oldpos; /* previous position */ + vlc_bool_t b_slider_free; /* slider status */ /* The messages window */ msg_subscription_t* p_sub; /* message bank subscription */ @@ -67,8 +93,13 @@ struct intf_sys_t /* Playlist management */ int i_playing; /* playlist selected item */ - /* The window labels for DVD mode */ - int i_part; /* current chapter */ + /* Send an event to show a dialog */ + void (*pf_show_dialog) ( intf_thread_t *p_intf, int i_dialog, int i_arg, + intf_dialog_args_t *p_arg ); + + /* Popup menu */ + wxMenu *p_popup_menu; + }; /***************************************************************************** @@ -93,6 +124,8 @@ public: private: intf_thread_t *p_intf; Interface *p_main_interface; + int i_old_playing_status; + int i_old_rate; }; /* Main Interface */ @@ -102,26 +135,370 @@ public: /* Constructor */ Interface( intf_thread_t *p_intf ); virtual ~Interface(); - wxSlider *slider; + void TogglePlayButton( int i_playing_status ); + + wxBoxSizer *frame_sizer; wxStatusBar *statusbar; + wxSlider *slider; + wxWindow *slider_frame; + wxStaticBox *slider_box; + + wxGauge *volctrl; + private: + void CreateOurMenuBar(); + void CreateOurToolBar(); + void CreateOurSlider(); + void Open( int i_access_method ); + /* Event handlers (these functions should _not_ be virtual) */ void OnExit( wxCommandEvent& event ); void OnAbout( wxCommandEvent& event ); - void OnPlaylist( wxCommandEvent& event ); - void OnOpenFile( wxCommandEvent& event ); + + void OnShowDialog( wxCommandEvent& event ); + void OnPlayStream( wxCommandEvent& event ); void OnStopStream( wxCommandEvent& event ); - void OnPauseStream( wxCommandEvent& event ); void OnSliderUpdate( wxScrollEvent& event ); void OnPrevStream( wxCommandEvent& event ); void OnNextStream( wxCommandEvent& event ); + void OnSlowStream( wxCommandEvent& event ); + void OnFastStream( wxCommandEvent& event ); + + void OnMenuOpen( wxMenuEvent& event ); + +#if defined( __WXMSW__ ) || defined( __WXMAC__ ) + void OnContextMenu2(wxContextMenuEvent& event); +#endif + void OnContextMenu(wxMouseEvent& event); DECLARE_EVENT_TABLE(); Timer *timer; intf_thread_t *p_intf; + +private: + int i_old_playing_status; + + /* For auto-generated menus */ + wxMenu *p_audio_menu; + vlc_bool_t b_audio_menu; + wxMenu *p_video_menu; + vlc_bool_t b_video_menu; + wxMenu *p_navig_menu; + vlc_bool_t b_navig_menu; +}; + +/* 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 OnOpenFileGeneric( wxCommandEvent& event ); + void OnOpenFileSimple( wxCommandEvent& event ); + void OnOpenFile( wxCommandEvent& event ); + void OnOpenDisc( wxCommandEvent& event ); + void OnOpenNet( 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; + Playlist *p_playlist_dialog; + Messages *p_messages_dialog; + FileInfo *p_fileinfo_dialog; + wxFrame *p_prefs_dialog; + wxFileDialog *p_file_generic_dialog; +}; + +/* Open Dialog */ +class SoutDialog; +class SubsFileDialog; +class OpenDialog: public wxFrame +{ +public: + /* Constructor */ + OpenDialog( intf_thread_t *p_intf, wxWindow *p_parent, + int i_access_method, int i_arg = 0 ); + virtual ~OpenDialog(); + + int Show(); + int Show( int i_access_method, int i_arg = 0 ); + + wxArrayString mrl; + +private: + wxPanel *FilePanel( wxWindow* parent ); + wxPanel *DiscPanel( wxWindow* parent ); + wxPanel *NetPanel( wxWindow* parent ); + wxPanel *SatPanel( wxWindow* parent ); + + void UpdateMRL( int i_access_method ); + + /* Event handlers (these functions should _not_ be virtual) */ + void OnOk( wxCommandEvent& event ); + void OnCancel( wxCommandEvent& event ); + + void OnPageChange( wxNotebookEvent& event ); + void OnMRLChange( wxCommandEvent& event ); + + /* Event handlers for the file page */ + void OnFilePanelChange( wxCommandEvent& event ); + void OnFileBrowse( wxCommandEvent& event ); + + /* Event handlers for the disc page */ + void OnDiscPanelChange( wxCommandEvent& event ); + void OnDiscTypeChange( wxCommandEvent& event ); + + /* Event handlers for the net page */ + void OnNetPanelChange( wxCommandEvent& event ); + void OnNetTypeChange( wxCommandEvent& event ); + + /* Event handlers for the stream output */ + void OnSubsFileEnable( wxCommandEvent& event ); + void OnSubsFileSettings( wxCommandEvent& WXUNUSED(event) ); + + /* Event handlers for the stream output */ + void OnSoutEnable( wxCommandEvent& event ); + void OnSoutSettings( wxCommandEvent& WXUNUSED(event) ); + + /* Event handlers for the demux dump */ + void OnDemuxDumpEnable( wxCommandEvent& event ); + void OnDemuxDumpBrowse( wxCommandEvent& event ); + void OnDemuxDumpChange( wxCommandEvent& event ); + + DECLARE_EVENT_TABLE(); + + intf_thread_t *p_intf; + wxWindow *p_parent; + int i_current_access_method; + + wxComboBox *mrl_combo; + wxNotebook *notebook; + + /* Controls for the file panel */ + wxComboBox *file_combo; + wxFileDialog *file_dialog; + + /* Controls for the disc panel */ + wxRadioBox *disc_type; + wxTextCtrl *disc_device; + wxSpinCtrl *disc_title; + int i_disc_title; + wxSpinCtrl *disc_chapter; + int i_disc_chapter; + + /* Controls for the net panel */ + wxRadioBox *net_type; + int i_net_type; + wxPanel *net_subpanels[4]; + wxRadioButton *net_radios[4]; + wxSpinCtrl *net_ports[4]; + int i_net_ports[4]; + wxTextCtrl *net_addrs[4]; + + /* Controls for the subtitles file */ + wxButton *subsfile_button; + wxCheckBox *subsfile_checkbox; + SubsFileDialog *subsfile_dialog; + wxArrayString subsfile_mrl; + + /* Controls for the stream output */ + wxButton *sout_button; + wxCheckBox *sout_checkbox; + SoutDialog *sout_dialog; + wxArrayString sout_mrl; + + /* Controls for the demux dump */ + wxTextCtrl *demuxdump_textctrl; + wxButton *demuxdump_button; + wxCheckBox *demuxdump_checkbox; + wxFileDialog *demuxdump_dialog; +}; + +/* Stream output Dialog */ +class SoutDialog: public wxDialog +{ +public: + /* Constructor */ + SoutDialog( intf_thread_t *p_intf, wxWindow *p_parent ); + virtual ~SoutDialog(); + + wxArrayString GetOptions(); + +private: + void UpdateMRL(); + wxPanel *AccessPanel( wxWindow* parent ); + wxPanel *MiscPanel( wxWindow* parent ); + wxPanel *EncapsulationPanel( wxWindow* parent ); + wxPanel *TranscodingPanel( wxWindow* parent ); + void ParseMRL(); + + /* Event handlers (these functions should _not_ be virtual) */ + void OnOk( wxCommandEvent& event ); + void OnCancel( wxCommandEvent& event ); + void OnMRLChange( wxCommandEvent& event ); + void OnAccessTypeChange( wxCommandEvent& event ); + + /* Event handlers for the file access output */ + void OnFileChange( wxCommandEvent& event ); + void OnFileBrowse( wxCommandEvent& event ); + + /* Event handlers for the net access output */ + void OnNetChange( wxCommandEvent& event ); + + /* Event specific to the sap address */ + void OnSAPAddrChange( wxCommandEvent& event ); + + /* Event handlers for the encapsulation panel */ + void OnEncapsulationChange( wxCommandEvent& event ); + + /* Event handlers for the transcoding panel */ + void OnTranscodingEnable( wxCommandEvent& event ); + void OnTranscodingChange( wxCommandEvent& event ); + + /* Event handlers for the misc panel */ + void OnSAPMiscChange( wxCommandEvent& event ); + + DECLARE_EVENT_TABLE(); + + intf_thread_t *p_intf; + wxWindow *p_parent; + + wxComboBox *mrl_combo; + + /* Controls for the access outputs */ + wxPanel *access_subpanels[5]; + wxCheckBox *access_checkboxes[5]; + + int i_access_type; + + wxComboBox *file_combo; + wxSpinCtrl *net_ports[5]; + wxTextCtrl *net_addrs[5]; + + /* Controls for the SAP announces */ + wxPanel *misc_subpanels[1]; + wxCheckBox *sap_checkbox; + wxTextCtrl *sap_addr; + + /* Controls for the encapsulation */ + wxRadioButton *encapsulation_radios[5]; + int i_encapsulation_type; + + /* Controls for transcoding */ + wxCheckBox *video_transc_checkbox; + wxComboBox *video_codec_combo; + wxComboBox *audio_codec_combo; + wxCheckBox *audio_transc_checkbox; + wxComboBox *video_bitrate_combo; + wxComboBox *audio_bitrate_combo; + wxComboBox *audio_channels_combo; +}; + +/* Subtitles File Dialog */ +class SubsFileDialog: public wxDialog +{ +public: + /* Constructor */ + SubsFileDialog( intf_thread_t *p_intf, wxWindow *p_parent ); + virtual ~SubsFileDialog(); + + wxComboBox *file_combo; + wxComboBox *encoding_combo; + wxSpinCtrl *delay_spinctrl; + wxSpinCtrl *fps_spinctrl; + +private: + /* Event handlers (these functions should _not_ be virtual) */ + void OnOk( wxCommandEvent& event ); + void OnCancel( wxCommandEvent& event ); + void OnFileBrowse( wxCommandEvent& event ); + + DECLARE_EVENT_TABLE(); + + intf_thread_t *p_intf; + wxWindow *p_parent; +}; + +/* Preferences Dialog */ +class PrefsTreeCtrl; +class PrefsDialog: public wxFrame +{ +public: + /* Constructor */ + PrefsDialog( intf_thread_t *p_intf, wxWindow *p_parent ); + virtual ~PrefsDialog(); + +private: + wxPanel *PrefsPanel( wxWindow* parent ); + + /* Event handlers (these functions should _not_ be virtual) */ + void OnOk( wxCommandEvent& event ); + void OnCancel( wxCommandEvent& event ); + void OnSave( wxCommandEvent& event ); + void OnResetAll( wxCommandEvent& event ); + + DECLARE_EVENT_TABLE(); + + intf_thread_t *p_intf; + + PrefsTreeCtrl *prefs_tree; +}; + +/* Messages */ +class Messages: public wxFrame +{ +public: + /* Constructor */ + Messages( intf_thread_t *p_intf, wxWindow *p_parent ); + virtual ~Messages(); + void UpdateLog(); + +private: + /* Event handlers (these functions should _not_ be virtual) */ + void OnClose( wxCommandEvent& event ); + void OnVerbose( wxCommandEvent& event ); + void OnClear( wxCommandEvent& event ); + void OnSaveLog( wxCommandEvent& event ); + + DECLARE_EVENT_TABLE(); + + intf_thread_t *p_intf; + wxTextCtrl *textctrl; + wxTextAttr *info_attr; + wxTextAttr *err_attr; + wxTextAttr *warn_attr; + wxTextAttr *dbg_attr; + + wxFileDialog *save_log_dialog; + + vlc_bool_t b_verbose; }; /* Playlist */ @@ -129,27 +506,119 @@ class Playlist: public wxFrame { public: /* Constructor */ - Playlist( intf_thread_t *p_intf, Interface *p_main_interface ); + Playlist( intf_thread_t *p_intf, wxWindow *p_parent ); virtual ~Playlist(); - void Rebuild(); - void Manage(); + + void UpdatePlaylist(); + void ShowPlaylist( bool show ); + + bool b_need_update; + vlc_mutex_t lock; private: + void DeleteItem( int item ); + /* Event handlers (these functions should _not_ be virtual) */ - void OnAddUrl( wxCommandEvent& event ); - void OnAddDirectory( wxCommandEvent& event ); + void OnAddFile( wxCommandEvent& event ); + void OnAddMRL( wxCommandEvent& event ); void OnClose( wxCommandEvent& event ); + void OnOpen( wxCommandEvent& event ); + void OnSave( wxCommandEvent& event ); void OnInvertSelection( wxCommandEvent& event ); void OnDeleteSelection( wxCommandEvent& event ); void OnSelectAll( wxCommandEvent& event ); void OnActivateItem( wxListEvent& event ); void OnKeyDown( wxListEvent& event ); + void Rebuild(); DECLARE_EVENT_TABLE(); - void DeleteItem( int item ); intf_thread_t *p_intf; - Interface *p_main_interface; wxListView *listview; - wxButton *ok_button; + int i_update_counter; +}; + +/* File Info */ +class FileInfo: public wxFrame +{ +public: + /* Constructor */ + FileInfo( intf_thread_t *p_intf, wxWindow *p_parent ); + virtual ~FileInfo(); + void UpdateFileInfo(); + +private: + void OnClose( wxCommandEvent& event ); + + DECLARE_EVENT_TABLE(); + + intf_thread_t *p_intf; + wxTreeCtrl *fileinfo_tree; + wxTreeItemId fileinfo_root; + wxString fileinfo_root_label; + +}; + +#if !defined(__WXX11__) +/* Drag and Drop class */ +class DragAndDrop: public wxFileDropTarget +{ +public: + DragAndDrop( intf_thread_t *_p_intf ); + + virtual bool OnDropFiles( wxCoord x, wxCoord y, + const wxArrayString& filenames ); + +private: + intf_thread_t *p_intf; +}; +#endif + +/* Menus */ +void PopupMenu( intf_thread_t *_p_intf, wxWindow *p_parent, + const wxPoint& pos ); +wxMenu *AudioMenu( intf_thread_t *_p_intf, wxWindow *p_parent ); +wxMenu *VideoMenu( intf_thread_t *_p_intf, wxWindow *p_parent ); +wxMenu *NavigMenu( intf_thread_t *_p_intf, wxWindow *p_parent ); + +class MenuEvtHandler : public wxEvtHandler +{ +public: + MenuEvtHandler( intf_thread_t *p_intf, Interface *p_main_interface ); + virtual ~MenuEvtHandler(); + + void OnMenuEvent( wxCommandEvent& event ); + void OnShowDialog( wxCommandEvent& event ); + +private: + + DECLARE_EVENT_TABLE() + + intf_thread_t *p_intf; + Interface *p_main_interface; +}; + +class Menu: public wxMenu +{ +public: + /* Constructor */ + Menu( intf_thread_t *p_intf, wxWindow *p_parent, int i_count, + char **ppsz_names, int *pi_objects, int i_start_id ); + virtual ~Menu(); + +private: + /* Event handlers (these functions should _not_ be virtual) */ + void OnClose( wxCommandEvent& event ); + void OnShowDialog( wxCommandEvent& event ); + void OnEntrySelected( wxCommandEvent& event ); + + wxMenu *Menu::CreateDummyMenu(); + void Menu::CreateMenuItem( wxMenu *, char *, vlc_object_t * ); + wxMenu *Menu::CreateChoicesMenu( char *, vlc_object_t * ); + + DECLARE_EVENT_TABLE(); + + intf_thread_t *p_intf; + + int i_item_id; };