/*****************************************************************************
* wxwindows.h: private wxWindows interface description
*****************************************************************************
- * Copyright (C) 1999-2004 VideoLAN
+ * Copyright (C) 1999-2005 the VideoLAN team
* $Id$
*
* Authors: Gildas Bazin <gbazin@videolan.org>
#include <wx/accel.h>
#include <wx/checkbox.h>
#include <wx/wizard.h>
+#include <wx/taskbar.h>
#include "vlc_keys.h"
-/* Hmmm, work-around for newest wxWin */
-#ifdef wxStaticCastEvent
-# undef wxStaticCastEvent
-# define wxStaticCastEvent(type, val) ((type)(val))
+#if (!wxCHECK_VERSION(2,5,0))
+typedef long wxTreeItemIdValue;
#endif
DECLARE_LOCAL_EVENT_TYPE( wxEVT_DIALOG, 0 );
#else // ENABLE_NLS && ENABLE_UTF8
#if wxUSE_UNICODE
-# define wxU(ansi) wxString(ansi, *wxConvCurrent)
+# define wxU(ansi) wxString(ansi, wxConvLocal)
#else
-# define wxU(ansi) ansi
+# define wxU(ansi) (ansi)
#endif
#define ISUTF8 0
/* wxL2U (locale to unicode) is used to convert ansi strings to unicode
* strings (wchar_t) */
-#if wxUSE_UNICODE
-# define wxL2U(ansi) wxString(ansi, *wxConvCurrent)
-#else
-# define wxL2U(ansi) ansi
-#endif
+#define wxL2U(ansi) wxU(ansi)
#define WRAPCOUNT 80
#define MODE_AUTHOR 2
#define MODE_TITLE 3
+enum{
+ ID_CONTROLS_TIMER,
+ ID_SLIDER_TIMER,
+};
+
class DialogsProvider;
class PrefsTreeCtrl;
class AutoBuiltPanel;
class VideoWindow;
+class WindowSettings;
/*****************************************************************************
* intf_sys_t: description and status of wxwindows interface
wxWindow *p_wxwindow;
wxIcon *p_icon;
+ /* window settings */
+ WindowSettings *p_window_settings;
+
/* special actions */
vlc_bool_t b_playing;
+ vlc_bool_t b_intf_show; /* interface to be shown */
/* The input thread */
input_thread_t * p_input;
/* Playlist management */
int i_playing; /* playlist selected item */
+ unsigned i_playlist_usage;
/* Send an event to show a dialog */
void (*pf_show_dialog) ( intf_thread_t *p_intf, int i_dialog, int i_arg,
/* Embedded vout */
VideoWindow *p_video_window;
wxBoxSizer *p_video_sizer;
+ vlc_bool_t b_video_autosize;
/* Aout */
aout_instance_t *p_aout;
* Prototypes
*****************************************************************************/
wxArrayString SeparateEntries( wxString );
-wxWindow *VideoWindow( intf_thread_t *p_intf, wxWindow *p_parent );
+wxWindow *CreateVideoWindow( intf_thread_t *p_intf, wxWindow *p_parent );
+void UpdateVideoWindow( intf_thread_t *p_intf, wxWindow *p_window );
wxWindow *BookmarksDialog( intf_thread_t *p_intf, wxWindow *p_parent );
wxWindow *CreateDialogsProvider( intf_thread_t *p_intf, wxWindow *p_parent );
virtual void Notify();
private:
+ //use wxWindow::IsShown instead
+ //vlc_bool_t b_slider_shown;
+ //vlc_bool_t b_disc_shown;
intf_thread_t *p_intf;
Interface *p_main_interface;
+ vlc_bool_t b_init;
int i_old_playing_status;
int i_old_rate;
- vlc_bool_t b_old_seekable;
};
wxCheckBox *eq_2p_chkbox;
+ wxButton *eq_restoredefaults_button;
+
wxSlider *smooth_slider;
+ wxStaticText *smooth_text;
wxSlider *preamp_slider;
wxStaticText * preamp_text;
};
#endif
+/* Systray integration */
+#ifdef wxHAS_TASK_BAR_ICON
+class Systray: public wxTaskBarIcon
+{
+public:
+ Systray( Interface* p_main_interface, intf_thread_t *p_intf );
+ virtual ~Systray() {};
+ wxMenu* CreatePopupMenu();
+ void UpdateTooltip( const wxChar* tooltip );
+
+private:
+ void OnMenuIconize( wxCommandEvent& event );
+ void OnLeftClick( wxTaskBarIconEvent& event );
+ void OnPlayStream ( wxCommandEvent& event );
+ void OnStopStream ( wxCommandEvent& event );
+ void OnPrevStream ( wxCommandEvent& event );
+ void OnNextStream ( wxCommandEvent& event );
+ void OnExit( wxCommandEvent& event );
+ Interface* p_main_interface;
+ intf_thread_t *p_intf;
+ DECLARE_EVENT_TABLE()
+};
+#endif
+
/* Main Interface */
class Interface: public wxFrame
{
public:
/* Constructor */
- Interface( intf_thread_t *p_intf );
+ Interface( intf_thread_t *p_intf, long style = wxDEFAULT_FRAME_STYLE );
virtual ~Interface();
+ void Init();
void TogglePlayButton( int i_playing_status );
void Update();
+ void PlayStream();
+ void StopStream();
+ void PrevStream();
+ void NextStream();
wxBoxSizer *frame_sizer;
wxStatusBar *statusbar;
+ void HideSlider(bool layout = true);
+ void ShowSlider(bool show = true, bool layout = true);
+
wxSlider *slider;
wxWindow *slider_frame;
+ wxBoxSizer *slider_sizer;
wxPanel *extra_frame;
+ void HideDiscFrame(bool layout = true);
+ void ShowDiscFrame(bool show = true, bool layout = true);
+
+ wxPanel *disc_frame;
+ wxBoxSizer *disc_sizer;
+ wxBitmapButton *disc_menu_button;
+ wxBitmapButton *disc_prev_button;
+ wxBitmapButton *disc_next_button;
+
wxFrame *extra_window;
vlc_bool_t b_extra;
vlc_bool_t b_undock;
+ wxControl *volctrl;
+
+#ifdef wxHAS_TASK_BAR_ICON
+ Systray *p_systray;
+#endif
- wxGauge *volctrl;
+ wxTimer m_controls_timer;
+ wxTimer m_slider_timer;
private:
void SetupHotkeys();
void Open( int i_access_method );
/* Event handlers (these functions should _not_ be virtual) */
+ void OnControlsTimer(wxTimerEvent& WXUNUSED(event));
+ void OnSliderTimer(wxTimerEvent& WXUNUSED(event));
+
void OnExit( wxCommandEvent& event );
void OnAbout( wxCommandEvent& event );
void OnOpenFileSimple( wxCommandEvent& event );
+ void OnOpenDir( wxCommandEvent& event );
void OnOpenFile( wxCommandEvent& event );
void OnOpenDisc( wxCommandEvent& event );
void OnOpenNet( wxCommandEvent& event );
void OnSlowStream( wxCommandEvent& event );
void OnFastStream( wxCommandEvent& event );
+ void OnDiscMenu( wxCommandEvent& event );
+ void OnDiscPrev( wxCommandEvent& event );
+ void OnDiscNext( wxCommandEvent& event );
+
void OnMenuOpen( wxMenuEvent& event );
#if defined( __WXMSW__ ) || defined( __WXMAC__ )
Timer *timer;
intf_thread_t *p_intf;
-private:
+ wxWindow *video_window;
+
int i_old_playing_status;
/* For auto-generated menus */
/* Event handlers (these functions should _not_ be virtual) */
void OnOk( wxCommandEvent& event );
void OnCancel( wxCommandEvent& event );
+ void OnClose( wxCloseEvent& event );
void OnPageChange( wxNotebookEvent& event );
void OnMRLChange( wxCommandEvent& event );
void OnFileBrowse( wxCommandEvent& event );
/* Event handlers for the disc page */
+ void OnDiscPanelChangeSpin( wxSpinEvent& event );
void OnDiscPanelChange( wxCommandEvent& event );
void OnDiscTypeChange( wxCommandEvent& event );
+#ifdef HAVE_LIBCDIO
+ void OnDiscProbe( wxCommandEvent& event );
+#endif
void OnDiscDeviceChange( wxCommandEvent& event );
/* Event handlers for the net page */
+ void OnNetPanelChangeSpin( wxSpinEvent& event );
void OnNetPanelChange( wxCommandEvent& event );
void OnNetTypeChange( wxCommandEvent& event );
void OnSoutEnable( wxCommandEvent& event );
void OnSoutSettings( wxCommandEvent& WXUNUSED(event) );
+ /* Event handlers for the caching option */
+ void OnCachingEnable( wxCommandEvent& event );
+ void OnCachingChange( wxCommandEvent& event );
+ void OnCachingChangeSpin( wxSpinEvent& event );
+
DECLARE_EVENT_TABLE();
intf_thread_t *p_intf;
/* Controls for the disc panel */
wxRadioBox *disc_type;
+ wxCheckBox *disc_probe;
wxTextCtrl *disc_device;
wxSpinCtrl *disc_title; int i_disc_title;
wxSpinCtrl *disc_chapter; int i_disc_chapter;
wxSpinCtrl *disc_sub; int i_disc_sub;
+ wxSpinCtrl *disc_audio; int i_disc_audio;
/* The media equivalent name for a DVD names. For example,
* "Title", is "Track" for a CD-DA */
wxStaticText *disc_title_label;
wxStaticText *disc_chapter_label;
wxStaticText *disc_sub_label;
-
+ wxStaticText *disc_audio_label;
+
/* Indicates if the disc device control was modified */
bool b_disc_device_changed;
-
+
/* Controls for the net panel */
wxRadioBox *net_type;
int i_net_type;
wxSpinCtrl *net_ports[4];
int i_net_ports[4];
wxTextCtrl *net_addrs[4];
+ wxCheckBox *net_timeshift;
wxCheckBox *net_ipv6;
/* Controls for the subtitles file */
wxCheckBox *sout_checkbox;
SoutDialog *sout_dialog;
wxArrayString sout_mrl;
+
+ /* Controls for the caching options */
+ wxCheckBox *caching_checkbox;
+ wxSpinCtrl *caching_value;
+ int i_caching;
};
enum
HTTP_ACCESS_OUT,
MMSH_ACCESS_OUT,
UDP_ACCESS_OUT,
- RTP_ACCESS_OUT,
ACCESS_OUT_NUM
};
PS_ENCAPSULATION,
MPEG1_ENCAPSULATION,
OGG_ENCAPSULATION,
- RAW_ENCAPSULATION,
ASF_ENCAPSULATION,
- AVI_ENCAPSULATION,
MP4_ENCAPSULATION,
MOV_ENCAPSULATION,
+ WAV_ENCAPSULATION,
+ RAW_ENCAPSULATION,
+ AVI_ENCAPSULATION,
ENCAPS_NUM
};
void OnNetChange( wxCommandEvent& event );
/* Event specific to the announce address */
+ void OnAnnounceGroupChange( wxCommandEvent& event );
void OnAnnounceAddrChange( wxCommandEvent& event );
/* Event handlers for the encapsulation panel */
wxPanel *misc_subpanels[MISC_SOUT_NUM];
wxCheckBox *sap_checkbox;
wxCheckBox *slp_checkbox;
+ wxTextCtrl *announce_group;
wxTextCtrl *announce_addr;
/* Controls for the encapsulation */
wxComboBox *audio_bitrate_combo;
wxComboBox *audio_channels_combo;
wxComboBox *video_scale_combo;
+ wxComboBox *subtitles_codec_combo;
+ wxCheckBox *subtitles_transc_checkbox;
+ wxCheckBox *subtitles_overlay_checkbox;
+
+ /* Misc controls */
+ wxCheckBox *sout_all_checkbox;
};
/* Subtitles File Dialog */
wxComboBox *file_combo;
wxComboBox *encoding_combo;
- wxSpinCtrl *delay_spinctrl;
+ wxComboBox *size_combo;
+ wxComboBox *align_combo;
wxSpinCtrl *fps_spinctrl;
+ wxSpinCtrl *delay_spinctrl;
private:
/* Event handlers (these functions should _not_ be virtual) */
{
public:
/* Constructor */
- WizardDialog( intf_thread_t *p_intf, wxWindow *p_parent,char *, int, int );
+ WizardDialog( intf_thread_t *, wxWindow *p_parent, char *, int, int );
virtual ~WizardDialog();
- void SetTranscode( char *vcodec, int vb, char *acodec,int ab);
+ void SetTranscode( char const *vcodec, int vb, char const *acodec, int ab);
void SetMrl( const char *mrl );
void SetTTL( int i_ttl );
void SetPartial( int, int );
- void SetStream( char *method, char *address );
- void SetTranscodeOut( char *address );
+ void SetStream( char const *method, char const *address );
+ void SetTranscodeOut( char const *address );
void SetAction( int i_action );
int GetAction();
void SetSAP( bool b_enabled, const char *psz_name );
- void SetMux( char *mux );
+ void SetMux( char const *mux );
void Run();
int i_action;
char *method;
void OnSave( wxCommandEvent& event );
void OnResetAll( wxCommandEvent& event );
void OnAdvanced( wxCommandEvent& event );
+ void OnClose( wxCloseEvent& event );
DECLARE_EVENT_TABLE();
private:
/* Event handlers (these functions should _not_ be virtual) */
- void OnClose( wxCommandEvent& event );
+ void OnButtonClose( wxCommandEvent& event );
+ void OnClose( wxCloseEvent& WXUNUSED(event) );
void OnClear( wxCommandEvent& event );
void OnSaveLog( wxCommandEvent& event );
void UpdatePlaylist();
void ShowPlaylist( bool show );
void UpdateItem( int );
+ void AppendItem( wxCommandEvent& );
bool b_need_update;
private:
+ void RemoveItem( int );
+ void DeleteTreeItem( wxTreeItemId );
void DeleteItem( int item );
- void ShowInfos( int item );
+ void DeleteNode( playlist_item_t *node );
- /* Event handlers (these functions should _not_ be virtual) */
+ void RecursiveDeleteSelection( wxTreeItemId );
- void OnSize( wxSizeEvent &event );
+ /* Event handlers (these functions should _not_ be virtual) */
+ /* Menu Handlers */
void OnAddFile( wxCommandEvent& event );
+ void OnAddDir( wxCommandEvent& event );
void OnAddMRL( wxCommandEvent& event );
- void OnClose( wxCommandEvent& event );
- void OnSearch( wxCommandEvent& event );
- void OnEnDis( wxCommandEvent& event );
- void OnInfos( wxCommandEvent& event );
- void OnSearchTextChange( wxCommandEvent& event );
+ void OnMenuClose( wxCommandEvent& event );
+ void OnClose( wxCloseEvent& WXUNUSED(event) );
+
+ void OnDeleteSelection( wxCommandEvent& event );
+
void OnOpen( wxCommandEvent& event );
void OnSave( wxCommandEvent& event );
+ /* Search (user) */
+ void OnSearch( wxCommandEvent& event );
+ /*void OnSearchTextChange( wxCommandEvent& event );*/
+ wxTextCtrl *search_text;
+ wxButton *search_button;
+ wxTreeItemId search_current;
+
+ void OnEnDis( wxCommandEvent& event );
+
+ /* Sort */
+ int i_sort_mode;
void OnSort( wxCommandEvent& event );
- void OnColSelect( wxListEvent& event );
+ int i_title_sorted;
+ int i_group_sorted;
+ int i_duration_sorted;
+
+ /* Dynamic menus */
+ void OnMenuEvent( wxCommandEvent& event );
+ void OnMenuOpen( wxMenuEvent& event );
+ wxMenu *p_view_menu;
+ wxMenu *p_sd_menu;
+ wxMenu *ViewMenu();
+ wxMenu *SDMenu();
void OnUp( wxCommandEvent& event);
void OnDown( wxCommandEvent& event);
- void OnEnableSelection( wxCommandEvent& event );
- void OnDisableSelection( wxCommandEvent& event );
- void OnInvertSelection( wxCommandEvent& event );
- void OnDeleteSelection( wxCommandEvent& event );
- void OnSelectAll( wxCommandEvent& event );
void OnRandom( wxCommandEvent& event );
void OnRepeat( wxCommandEvent& event );
void OnLoop ( wxCommandEvent& event );
- void OnActivateItem( wxListEvent& event );
- void OnKeyDown( wxListEvent& event );
+
+ void OnActivateItem( wxTreeEvent& event );
+ void OnKeyDown( wxTreeEvent& event );
void OnNewGroup( wxCommandEvent& event );
- /* Popup functions */
- void OnPopup( wxListEvent& event );
- void OnPopupPlay( wxMenuEvent& event );
- void OnPopupDel( wxMenuEvent& event );
- void OnPopupEna( wxMenuEvent& event );
- void OnPopupInfo( wxMenuEvent& event );
- void Rebuild();
+ /* Popup */
+ wxMenu *item_popup;
+ wxMenu *node_popup;
+ wxTreeItemId i_wx_popup_item;
+ int i_popup_item;
+ int i_popup_parent;
+ void OnPopup( wxContextMenuEvent& event );
+ void OnPopupPlay( wxCommandEvent& event );
+ void OnPopupPreparse( wxCommandEvent& event );
+ void OnPopupSort( wxCommandEvent& event );
+ void OnPopupDel( wxCommandEvent& event );
+ void OnPopupEna( wxCommandEvent& event );
+ void OnPopupInfo( wxCommandEvent& event );
+ void Rebuild( vlc_bool_t );
- /* Custom events */
- void OnPlaylistEvent( wxCommandEvent& event );
+ void Preparse();
- wxTextCtrl *search_text;
- wxButton *search_button;
- DECLARE_EVENT_TABLE();
+ /* Update */
+ void UpdateNode( playlist_item_t*, wxTreeItemId );
+ void UpdateNodeChildren( playlist_item_t*, wxTreeItemId );
+ void CreateNode( playlist_item_t*, wxTreeItemId );
+ void UpdateTreeItem( wxTreeItemId );
- wxMenu *popup_menu;
+ /* Search (internal) */
+ int CountItems( wxTreeItemId);
+ wxTreeItemId FindItem( wxTreeItemId, int );
+ wxTreeItemId FindItemByName( wxTreeItemId, wxString,
+ wxTreeItemId, vlc_bool_t *);
- ItemInfoDialog *iteminfo_dialog;
+ wxTreeItemId saved_tree_item;
+ int i_saved_id;
- intf_thread_t *p_intf;
- wxListView *listview;
- wxTreeCtrl *treeview;
- int i_update_counter;
- int i_sort_mode;
+ playlist_t *p_playlist;
- int i_popup_item;
- int i_title_sorted;
- int i_author_sorted;
- int i_group_sorted;
- int i_duration_sorted;
-};
+ /* Custom events */
+ void OnPlaylistEvent( wxCommandEvent& event );
-class NewGroup: public wxDialog
-{
-public:
- /* Constructor */
- NewGroup( intf_thread_t *p_intf, wxWindow *p_parent );
- virtual ~NewGroup();
+ DECLARE_EVENT_TABLE();
-private:
- /* Event handlers (these functions should _not_ be virtual) */
- void OnOk( wxCommandEvent& event );
- void OnCancel( wxCommandEvent& event );
+ /* Global widgets */
+ wxStatusBar *statusbar;
+ ItemInfoDialog *iteminfo_dialog;
- DECLARE_EVENT_TABLE();
+ int i_update_counter;
intf_thread_t *p_intf;
- wxTextCtrl *groupname;
+ wxTreeCtrl *treectrl;
+ int i_current_view;
+ vlc_bool_t b_changed_view;
+ char **pp_sds;
+
-protected:
- friend class Playlist;
- friend class ItemInfoDialog;
- char *psz_name;
};
/* ItemInfo Dialog */
/* Event handlers (these functions should _not_ be virtual) */
void OnOk( wxCommandEvent& event );
void OnCancel( wxCommandEvent& event );
- void OnNewGroup( wxCommandEvent& event );
void UpdateInfo();
wxTextCtrl *uri_text;
wxTextCtrl *name_text;
- wxTextCtrl *author_text;
wxTreeCtrl *info_tree;
wxTreeItemId info_root;
- wxCheckBox *enabled_checkbox;
- wxComboBox *group_combo;
- int ids_array[100];
};
virtual ~FileInfo();
void UpdateFileInfo();
+ vlc_bool_t b_need_update;
+
private:
- void OnClose( wxCommandEvent& event );
+ void OnButtonClose( wxCommandEvent& event );
+ void OnClose( wxCloseEvent& WXUNUSED(event) );
DECLARE_EVENT_TABLE();
#endif
} // end of wxvlc namespace
+/* */
+class WindowSettings
+{
+public:
+ WindowSettings( intf_thread_t *_p_intf );
+ virtual ~WindowSettings();
+ enum
+ {
+ ID_SCREEN = -1,
+ ID_MAIN,
+ ID_PLAYLIST,
+ ID_MESSAGES,
+ ID_FILE_INFO,
+ ID_BOOKMARKS,
+ ID_VIDEO,
+
+ ID_MAX,
+ };
+
+ void SetSettings( int id, bool _b_shown,
+ wxPoint p = wxDefaultPosition, wxSize s = wxDefaultSize );
+ bool GetSettings( int id, bool& _b_shown, wxPoint& p, wxSize& s );
+
+ void SetScreen( int i_screen_w, int i_screen_h );
+
+private:
+ intf_thread_t *p_intf;
+
+ int i_screen_w;
+ int i_screen_h;
+ bool b_valid[ID_MAX];
+ bool b_shown[ID_MAX];
+ wxPoint position[ID_MAX];
+ wxSize size[ID_MAX];
+};
+
/* Menus */
void PopupMenu( intf_thread_t *, wxWindow *, const wxPoint& );
wxMenu *SettingsMenu( intf_thread_t *, wxWindow *, wxMenu * = NULL );
};
} // end of wxvlc namespace
+
+
+/*
+ * wxWindows keeps dead locking because the timer tries to lock the playlist
+ * when it's already locked somewhere else in the very wxWindows interface
+ * module. Unless someone implements a "vlc_mutex_trylock", we need that.
+ */
+inline void LockPlaylist( intf_sys_t *p_sys, playlist_t *p_pl )
+{
+ if( p_sys->i_playlist_usage++ == 0)
+ vlc_mutex_lock( &p_pl->object_lock );
+}
+
+inline void UnlockPlaylist( intf_sys_t *p_sys, playlist_t *p_pl )
+{
+ if( --p_sys->i_playlist_usage == 0)
+ vlc_mutex_unlock( &p_pl->object_lock );
+}
+
using namespace wxvlc;
+