]> git.sesse.net Git - vlc/blobdiff - modules/gui/wxwindows/wxwindows.h
Revert wrongly commited files in previous commit
[vlc] / modules / gui / wxwindows / wxwindows.h
index 8cadcece5d33e4a464c9930e90f9e6ad8fa88182..fcb5460fe9eeb22e0641044818cd4659e3532520 100644 (file)
 #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 );
@@ -89,10 +87,16 @@ DECLARE_LOCAL_EVENT_TYPE( wxEVT_INTF, 1 );
 #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
@@ -103,6 +107,9 @@ struct intf_sys_t
     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 */
@@ -120,6 +127,7 @@ struct intf_sys_t
 
     /* 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,
@@ -135,6 +143,7 @@ struct intf_sys_t
     /* Embedded vout */
     VideoWindow         *p_video_window;
     wxBoxSizer          *p_video_sizer;
+    vlc_bool_t          b_video_autosize;
 
     /* Aout */
     aout_instance_t     *p_aout;
@@ -145,6 +154,7 @@ struct intf_sys_t
  *****************************************************************************/
 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 );
 
@@ -177,13 +187,14 @@ public:
     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;
 };
 
 
@@ -222,7 +233,10 @@ private:
 
     wxCheckBox *eq_2p_chkbox;
 
+    wxButton *eq_restoredefaults_button;
+
     wxSlider *smooth_slider;
+    wxStaticText *smooth_text;
 
     wxSlider *preamp_slider;
     wxStaticText * preamp_text;
@@ -289,12 +303,13 @@ private:
 class Systray: public wxTaskBarIcon
 {
 public:
-    Systray( Interface* p_main_interface );
+    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 );
@@ -302,6 +317,7 @@ private:
     void OnNextStream ( wxCommandEvent& event );
     void OnExit(  wxCommandEvent& event );
     Interface* p_main_interface;
+    intf_thread_t *p_intf;
     DECLARE_EVENT_TABLE()
 };
 #endif
@@ -324,11 +340,17 @@ public:
     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;
@@ -340,11 +362,15 @@ public:
     vlc_bool_t b_extra;
     vlc_bool_t b_undock;
 
-    wxGauge     *volctrl;
+    wxControl  *volctrl;
+
 #ifdef wxHAS_TASK_BAR_ICON
     Systray     *p_systray;
 #endif
 
+    wxTimer m_controls_timer;
+    wxTimer m_slider_timer;
+
 private:
     void SetupHotkeys();
     void CreateOurMenuBar();
@@ -354,6 +380,9 @@ private:
     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 );
 
@@ -395,7 +424,8 @@ private:
     Timer *timer;
     intf_thread_t *p_intf;
 
-private:
+    wxWindow *video_window;
+
     int i_old_playing_status;
 
     /* For auto-generated menus */
@@ -437,6 +467,7 @@ private:
     /* 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 );
@@ -446,11 +477,13 @@ private:
     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 );
 
@@ -465,6 +498,7 @@ private:
     /* Event handlers for the caching option */
     void OnCachingEnable( wxCommandEvent& event );
     void OnCachingChange( wxCommandEvent& event );
+    void OnCachingChangeSpin( wxSpinEvent& event );
 
     DECLARE_EVENT_TABLE();
 
@@ -507,6 +541,7 @@ private:
     wxSpinCtrl *net_ports[4];
     int        i_net_ports[4];
     wxTextCtrl *net_addrs[4];
+    wxCheckBox *net_timeshift;
     wxCheckBox *net_ipv6;
 
     /* Controls for the subtitles file */
@@ -658,6 +693,9 @@ private:
     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;
@@ -768,6 +806,7 @@ private:
     void OnSave( wxCommandEvent& event );
     void OnResetAll( wxCommandEvent& event );
     void OnAdvanced( wxCommandEvent& event );
+    void OnClose( wxCloseEvent& event );
 
     DECLARE_EVENT_TABLE();
 
@@ -788,7 +827,8 @@ public:
 
 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 );
 
@@ -823,29 +863,29 @@ public:
 
 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;
@@ -881,35 +921,36 @@ private:
     /* 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 */
@@ -988,7 +1029,8 @@ public:
     vlc_bool_t b_need_update;
 
 private:
-    void OnClose( wxCommandEvent& event );
+    void OnButtonClose( wxCommandEvent& event );
+    void OnClose( wxCloseEvent& WXUNUSED(event) );
 
     DECLARE_EVENT_TABLE();
 
@@ -1016,6 +1058,42 @@ private:
 #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 );
@@ -1043,5 +1121,24 @@ private:
 };
 
 } // 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;