/*****************************************************************************
* 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 );
#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 */
/* 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;
*****************************************************************************/
wxArrayString SeparateEntries( wxString );
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;
- vlc_bool_t b_disc_shown;
};
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;
vlc_bool_t b_extra;
vlc_bool_t b_undock;
+ wxControl *volctrl;
- wxGauge *volctrl;
+#ifdef wxHAS_TASK_BAR_ICON
+ Systray *p_systray;
+#endif
+
+ 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 );
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 );
void OnDiscDeviceChange( wxCommandEvent& event );
/* Event handlers for the net page */
+ void OnNetPanelChangeSpin( wxSpinEvent& event );
void OnNetPanelChange( wxCommandEvent& event );
void OnNetTypeChange( wxCommandEvent& event );
/* Event handlers for the caching option */
void OnCachingEnable( wxCommandEvent& event );
void OnCachingChange( wxCommandEvent& event );
+ void OnCachingChangeSpin( wxSpinEvent& event );
DECLARE_EVENT_TABLE();
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;
wxSpinCtrl *net_ports[4];
int i_net_ports[4];
wxTextCtrl *net_addrs[4];
+ wxCheckBox *net_timeshift;
wxCheckBox *net_ipv6;
/* Controls for the subtitles file */
/* Event specific to the announce address */
void OnAnnounceGroupChange( wxCommandEvent& event );
void OnAnnounceAddrChange( wxCommandEvent& event );
-
+
/* Event handlers for the encapsulation panel */
void OnEncapsulationChange( wxCommandEvent& event );
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;
{
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( const 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 );
private:
void RemoveItem( int );
+ void DeleteTreeItem( wxTreeItemId );
void DeleteItem( int item );
void DeleteNode( playlist_item_t *node );
+ void RecursiveDeleteSelection( wxTreeItemId );
+
/* 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 OnMenuClose( wxCommandEvent& event );
+ void OnClose( wxCloseEvent& WXUNUSED(event) );
- void OnEnableSelection( wxCommandEvent& event );
- void OnDisableSelection( wxCommandEvent& event );
- void OnInvertSelection( wxCommandEvent& event );
void OnDeleteSelection( wxCommandEvent& event );
- void OnSelectAll( wxCommandEvent& event );
void OnOpen( wxCommandEvent& event );
void OnSave( wxCommandEvent& event );
/* Search (user) */
void OnSearch( wxCommandEvent& event );
- void OnSearchTextChange( wxCommandEvent& event );
+ /*void OnSearchTextChange( wxCommandEvent& event );*/
wxTextCtrl *search_text;
wxButton *search_button;
wxTreeItemId search_current;
/* Popup */
wxMenu *item_popup;
wxMenu *node_popup;
- wxTreeItemId i_popup_item;
- playlist_item_t *p_popup_item;
- playlist_item_t *p_popup_parent;
+ wxTreeItemId i_wx_popup_item;
+ int i_popup_item;
+ int i_popup_parent;
void OnPopup( wxContextMenuEvent& event );
- void OnPopupPlay( wxMenuEvent& event );
- void OnPopupPreparse( wxMenuEvent& event );
- void OnPopupSort( wxMenuEvent& event );
- void OnPopupDel( wxMenuEvent& event );
- void OnPopupEna( wxMenuEvent& event );
- void OnPopupInfo( wxMenuEvent& 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 );
- void Preparse( playlist_t *p_playlist );
+ void Preparse();
/* Update */
- void UpdateNode( playlist_t *, playlist_item_t*, wxTreeItemId );
- void UpdateNodeChildren( playlist_t *, playlist_item_t*, wxTreeItemId );
- void CreateNode( playlist_t *, playlist_item_t*, wxTreeItemId );
- void UpdateTreeItem( playlist_t *, wxTreeItemId );
+ void UpdateNode( playlist_item_t*, wxTreeItemId );
+ void UpdateNodeChildren( playlist_item_t*, wxTreeItemId );
+ void CreateNode( playlist_item_t*, wxTreeItemId );
+ void UpdateTreeItem( wxTreeItemId );
/* Search (internal) */
int CountItems( wxTreeItemId);
- wxTreeItemId FindItem( wxTreeItemId, playlist_item_t * );
wxTreeItemId FindItem( wxTreeItemId, int );
wxTreeItemId FindItemByName( wxTreeItemId, wxString,
wxTreeItemId, vlc_bool_t *);
wxTreeItemId saved_tree_item;
- playlist_item_t *p_saved_item;
+ int i_saved_id;
+
+ playlist_t *p_playlist;
/* Custom events */
vlc_bool_t b_need_update;
private:
- void OnClose( wxCommandEvent& event );
+ void OnButtonClose( wxCommandEvent& event );
+ void OnClose( wxCloseEvent& WXUNUSED(event) );
DECLARE_EVENT_TABLE();
wxTreeItemId fileinfo_root;
wxString fileinfo_root_label;
-
};
#if wxUSE_DRAG_AND_DROP
#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;
+