#define INTF_DIALOG_FILE_GENERIC 30
#define INTF_DIALOG_UPDATEVLC 90
+#define INTF_DIALOG_VLM 91
#define INTF_DIALOG_EXIT 99
SOURCES_wxwidgets = \
wxwidgets.cpp \
- wxwidgets.h \
- interface.cpp \
- extrapanel.cpp \
- dialogs.cpp \
- open.cpp \
- streamout.cpp \
- wizard.cpp \
streamdata.h \
streamdata.cpp \
- messages.cpp \
- playlist.cpp \
- iteminfo.cpp \
+ interface.cpp \
+ extrapanel.cpp \
menus.cpp \
- preferences.cpp \
- preferences_widgets.cpp \
- preferences_widgets.h \
timer.cpp \
- fileinfo.cpp \
- updatevlc.cpp \
- subtitles.cpp \
- bookmarks.cpp \
video.cpp \
+ slider_manager.cpp \
+ main_slider_manager.cpp \
+ dialogs.cpp \
+ dialogs/open.cpp \
+ dialogs/streamout.cpp \
+ dialogs/wizard.cpp \
+ dialogs/messages.cpp \
+ dialogs/playlist.cpp \
+ dialogs/iteminfo.cpp \
+ dialogs/preferences.cpp \
+ dialogs/preferences_widgets.cpp \
+ dialogs/preferences_widgets.h \
+ dialogs/fileinfo.cpp \
+ dialogs/updatevlc.cpp \
+ dialogs/subtitles.cpp \
+ dialogs/bookmarks.cpp \
+ dialogs/vlm/vlm_slider_manager.cpp \
+ dialogs/vlm/vlm_stream.cpp \
+ dialogs/vlm/vlm_wrapper.cpp \
+ dialogs/vlm/vlm_streampanel.cpp \
+ dialogs/vlm/vlm_panel.cpp \
$(NULL)
EXTRA_DIST += \
bitmaps/type_playlist.xpm \
bitmaps/type_unknown.xpm \
bitmaps/type_vfile.xpm \
- bitmaps/video.xpm
+ bitmaps/video.xpm \
+ vlm/vlm_slider_manager.hpp \
+ vlm/vlm_stream.hpp \
+ vlm/vlm_wrapper.hpp \
+ vlm/vlm_streampanel.hpp \
+ vlm/vlm_panel.hpp
--- /dev/null
+/* XPM */
+static char * trash_xpm[] = {
+"16 16 88 1",
+" c None",
+". c #2C2C2C",
+"+ c #6E6E6E",
+"@ c #555555",
+"# c #161616",
+"$ c #626154",
+"% c #6B6A5A",
+"& c #A1A095",
+"* c #9B9B98",
+"= c #A4A49D",
+"- c #A5A495",
+"; c #5C5C50",
+"> c #575649",
+", c #616057",
+"' c #D0CEBA",
+") c #CCCBBD",
+"! c #85847F",
+"~ c #4C4C48",
+"{ c #3D3C34",
+"] c #7E7C6B",
+"^ c #B2B09E",
+"/ c #B2B097",
+"( c #4D4C41",
+"_ c #616059",
+": c #E0E0DB",
+"< c #EBEBE4",
+"[ c #D8D7CD",
+"} c #CCCBBC",
+"| c #C0BEA8",
+"1 c #B8B69D",
+"2 c #C5C4AF",
+"3 c #AAA996",
+"4 c #414037",
+"5 c #4D4D42",
+"6 c #AAA99B",
+"7 c #D6D5CE",
+"8 c #EAE9E5",
+"9 c #E2E1DE",
+"0 c #D8D8CF",
+"a c #BCBBAE",
+"b c #9C9A89",
+"c c #737262",
+"d c #34332D",
+"e c #000000",
+"f c #41413C",
+"g c #888882",
+"h c #B3B2A8",
+"i c #BCBCAE",
+"j c #A3A18A",
+"k c #8F8D7A",
+"l c #606056",
+"m c #353530",
+"n c #676758",
+"o c #59594F",
+"p c #52524D",
+"q c #3D3D38",
+"r c #2A2A23",
+"s c #2E2E26",
+"t c #35352C",
+"u c #3D3D32",
+"v c #707060",
+"w c #919184",
+"x c #A0A098",
+"y c #707066",
+"z c #646458",
+"A c #606051",
+"B c #4D4D40",
+"C c #4E4E40",
+"D c #959587",
+"E c #B9B9AC",
+"F c #8E8E80",
+"G c #787868",
+"H c #7A7A67",
+"I c #565648",
+"J c #6E6E5D",
+"K c #939385",
+"L c #545445",
+"M c #46463C",
+"N c #868678",
+"O c #B2B2A5",
+"P c #8F8F82",
+"Q c #787865",
+"R c #515143",
+"S c #39392F",
+"T c #2F2F29",
+"U c #30302A",
+"V c #2C2C25",
+"W c #272720",
+" ",
+" ",
+" .+@# ",
+" $%&*=-;> ",
+" ,')!~{]^/( ",
+" _:<[}|1234 ",
+" 567890abcd ",
+" efghijklme ",
+" enopqrstue ",
+" evwxyzABCe ",
+" evDEFGHIIe ",
+" eJKEFGHILe ",
+" eMNOPGQRSe ",
+" eTUVWe ",
+" ",
+" "};
#include <vlc/vlc.h>
#include <vlc/aout.h>
#include <vlc/intf.h>
+
#include "charset.h"
-#include "wxwidgets.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 "interface.hpp"
/* include the icon graphic */
#include "../../../share/vlc32x32.xpm"
/* Event handlers (these functions should _not_ be virtual) */
void OnUpdateVLC( wxCommandEvent& event );
+ void OnVLM( wxCommandEvent& event );
void OnExit( wxCommandEvent& event );
void OnPlaylist( wxCommandEvent& event );
void OnMessages( wxCommandEvent& event );
wxFrame *p_bookmarks_dialog;
wxFileDialog *p_file_generic_dialog;
UpdateVLC *p_updatevlc_dialog;
+ VLMFrame *p_vlm_dialog;
};
DEFINE_LOCAL_EVENT_TYPE( wxEVT_DIALOG );
DialogsProvider::OnExitThread)
EVT_COMMAND(INTF_DIALOG_UPDATEVLC, wxEVT_DIALOG,
DialogsProvider::OnUpdateVLC)
+ EVT_COMMAND(INTF_DIALOG_VLM, wxEVT_DIALOG,
+ DialogsProvider::OnVLM)
END_EVENT_TABLE()
wxWindow *CreateDialogsProvider( 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 );
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
}
#undef UPDATE
- PopEventHandler(true);
+ PopEventHandler(true);
/* Clean up */
if( p_open_dialog ) delete p_open_dialog;
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;
{
/* 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 )
{
p_updatevlc_dialog->Show( !p_updatevlc_dialog->IsShown() );
}
}
+
+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() );
+ }
+}
/*****************************************************************************
* Preamble
*****************************************************************************/
-#include <stdlib.h> /* malloc(), free() */
-#include <errno.h> /* ENOMEM */
-#include <string.h> /* strerror() */
-#include <stdio.h>
+#include "dialogs/bookmarks.hpp"
-#include <vlc/vlc.h>
-#include <vlc/intf.h>
-
-#include "wxwidgets.h"
-#include <wx/dialog.h>
+#include "wizard.hpp"
/* Callback prototype */
static int PlaylistChanged( vlc_object_t *, const char *,
vlc_value_t, vlc_value_t, void * );
/*****************************************************************************
- * Class declaration.
+ * Event Table.
*****************************************************************************/
/* IDs for the controls and the menu commands */
ButtonEdit_Event
};
-class BookmarksDialog: public wxFrame
-{
-public:
- /* Constructor */
- BookmarksDialog( intf_thread_t *p_intf, wxWindow *p_parent );
- virtual ~BookmarksDialog();
-
- bool Show( bool );
-
-private:
-
- void Update();
-
- /* Event handlers (these functions should _not_ be virtual) */
- void OnClose( wxCloseEvent& event );
- void OnAdd( wxCommandEvent& event );
- void OnDel( wxCommandEvent& event );
- void OnClear( wxCommandEvent& event );
- void OnActivateItem( wxListEvent& event );
- void OnUpdate( wxCommandEvent &event );
- void OnEdit( wxCommandEvent& event );
- void OnExtract( wxCommandEvent& event );
-
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
- wxWindow *p_parent;
-
- wxListView *list_ctrl;
-};
-
-/*****************************************************************************
- * Event Table.
- *****************************************************************************/
-
DEFINE_LOCAL_EVENT_TYPE( wxEVT_BOOKMARKS );
BEGIN_EVENT_TABLE(BookmarksDialog, wxFrame)
EVT_COMMAND( -1, wxEVT_BOOKMARKS, BookmarksDialog::OnUpdate )
END_EVENT_TABLE()
-/* Declaration of class BookmarkEditDialog */
-class BookmarkEditDialog : public wxDialog
-{
-public:
- /* Constructor */
- BookmarkEditDialog( intf_thread_t *p_intf, wxWindow *p_parent,
- seekpoint_t *p_seekpoint );
- virtual ~BookmarkEditDialog();
- seekpoint_t *p_seekpoint;
-private:
-
- wxTextCtrl *name_text, *time_text, *bytes_text;
-
- void OnOK( wxCommandEvent& event);
- void OnCancel( wxCommandEvent& event);
-
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
-};
-
BEGIN_EVENT_TABLE( BookmarkEditDialog, wxDialog)
- EVT_BUTTON( wxID_OK, BookmarkEditDialog::OnOK)
+ EVT_BUTTON( wxID_OK, BookmarkEditDialog::OnOK)
END_EVENT_TABLE()
+
/****************************************************************************
* BookmarkEditDialog
***************************************************************************/
/*****************************************************************************
* Private methods.
*****************************************************************************/
-wxFrame *BookmarksDialog( intf_thread_t *p_intf, wxWindow *p_parent )
-{
- return new class BookmarksDialog( p_intf, p_parent );
-}
+//wxFrame *BookmarksDialog( intf_thread_t *p_intf, wxWindow *p_parent )
+//{
+// return new class BookmarksDialog( p_intf, p_parent );
+//}
void BookmarksDialog::Update()
{
--- /dev/null
+/*****************************************************************************
+ * bookmarks.hpp: Headers for the bookmarks window
+ *****************************************************************************
+ * Copyright (C) 1999-2005 the VideoLAN team
+ * $Id: wxwidgets.h 12670 2005-09-25 11:16:31Z zorglub $
+ *
+ * Authors: Gildas Bazin <gbazin@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+#ifndef _WXVLC_BOOKMARKS_H_
+#define _WXVLC_BOOKMARKS_H_
+
+#include "wxwidgets.hpp"
+
+namespace wxvlc
+{
+ class BookmarksDialog: public wxFrame
+ {
+ public:
+ /* Constructor */
+ BookmarksDialog( intf_thread_t *p_intf, wxWindow *p_parent );
+ virtual ~BookmarksDialog();
+
+ bool Show( bool );
+
+ private:
+ void Update();
+
+ /* Event handlers (these functions should _not_ be virtual) */
+ void OnClose( wxCloseEvent& event );
+ void OnAdd( wxCommandEvent& event );
+ void OnDel( wxCommandEvent& event );
+ void OnClear( wxCommandEvent& event );
+ void OnActivateItem( wxListEvent& event );
+ void OnUpdate( wxCommandEvent &event );
+ void OnEdit( wxCommandEvent& event );
+ void OnExtract( wxCommandEvent& event );
+
+ DECLARE_EVENT_TABLE();
+
+ intf_thread_t *p_intf;
+ wxWindow *p_parent;
+
+ wxListView *list_ctrl;
+ };
+
+ class BookmarkEditDialog : public wxDialog
+ {
+ public:
+ /* Constructor */
+ BookmarkEditDialog( intf_thread_t *p_intf, wxWindow *p_parent,
+ seekpoint_t *p_seekpoint );
+ virtual ~BookmarkEditDialog();
+ seekpoint_t *p_seekpoint;
+ private:
+ wxTextCtrl *name_text, *time_text, *bytes_text;
+
+ void OnOK( wxCommandEvent& event);
+ void OnCancel( wxCommandEvent& event);
+
+ DECLARE_EVENT_TABLE();
+
+ intf_thread_t *p_intf;
+ };
+};
+
+#endif
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-#include <vlc/vlc.h>
-#include <vlc/intf.h>
-
-#include "wxwidgets.h"
+#include "dialogs/fileinfo.hpp"
/*****************************************************************************
* Event Table.
--- /dev/null
+/*****************************************************************************
+ * fileinfo.hpp: private wxWindows interface description
+ *****************************************************************************
+ * Copyright (C) 1999-2005 the VideoLAN team
+ * $Id: wxwidgets.h 12502 2005-09-09 19:38:01Z gbazin $
+ *
+ * Authors: Gildas Bazin <gbazin@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+#ifndef _WXVLC_FILEINFO_H_
+#define _WXVLC_FILEINFO_H_
+
+#include "wxwidgets.hpp"
+
+#include <wx/treectrl.h>
+
+namespace wxvlc
+{
+ class FileInfo: public wxFrame
+ {
+ public:
+ /* Constructor */
+ FileInfo( intf_thread_t *p_intf, wxWindow *p_parent );
+ virtual ~FileInfo();
+ void UpdateFileInfo();
+
+ vlc_bool_t b_need_update;
+
+ private:
+ void OnButtonClose( wxCommandEvent& event );
+ void OnClose( wxCloseEvent& WXUNUSED(event) );
+
+ DECLARE_EVENT_TABLE();
+
+ intf_thread_t *p_intf;
+ wxTreeCtrl *fileinfo_tree;
+ wxTreeItemId fileinfo_root;
+ wxString fileinfo_root_label;
+ };
+};
+
+#endif
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-#include <stdlib.h> /* malloc(), free() */
-#include <errno.h> /* ENOMEM */
-#include <string.h> /* strerror() */
-#include <stdio.h>
-
-#include <vlc/vlc.h>
-
+#include "dialogs/iteminfo.hpp"
#include <wx/combobox.h>
#include <wx/statline.h>
-#include <vlc/intf.h>
-
-#include "wxwidgets.h"
-
#ifndef wxRB_SINGLE
# define wxRB_SINGLE 0
#endif
--- /dev/null
+/*****************************************************************************
+ * iteminfo.hpp: private wxWindows interface description
+ *****************************************************************************
+ * Copyright (C) 1999-2005 the VideoLAN team
+ * $Id: wxwidgets.h 12502 2005-09-09 19:38:01Z gbazin $
+ *
+ * Authors: Gildas Bazin <gbazin@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+#ifndef _WXVLC_ITEMINFO_H_
+#define _WXVLC_ITEMINFO_H_
+
+#include "wxwidgets.hpp"
+
+#include <wx/treectrl.h>
+
+namespace wxvlc
+{
+class ItemInfoDialog: public wxDialog
+{
+public:
+ /* Constructor */
+ ItemInfoDialog( intf_thread_t *p_intf, playlist_item_t *_p_item,
+ wxWindow *p_parent );
+ virtual ~ItemInfoDialog();
+
+ wxArrayString GetOptions();
+
+private:
+ wxPanel *InfoPanel( wxWindow* parent );
+ wxPanel *GroupPanel( wxWindow* parent );
+
+ /* Event handlers (these functions should _not_ be virtual) */
+ void OnOk( wxCommandEvent& event );
+ void OnCancel( wxCommandEvent& event );
+
+ void UpdateInfo();
+
+ DECLARE_EVENT_TABLE();
+
+ intf_thread_t *p_intf;
+ playlist_item_t *p_item;
+ wxWindow *p_parent;
+
+ /* Controls for the iteminfo dialog box */
+ wxPanel *info_subpanel;
+ wxPanel *info_panel;
+
+ wxPanel *group_subpanel;
+ wxPanel *group_panel;
+
+ wxTextCtrl *uri_text;
+ wxTextCtrl *name_text;
+
+ wxTreeCtrl *info_tree;
+ wxTreeItemId info_root;
+
+};
+
+};
+#endif
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-#include <stdlib.h> /* malloc(), free() */
-#include <errno.h> /* ENOMEM */
-#include <string.h> /* strerror() */
-#include <stdio.h>
-
-#include <vlc/vlc.h>
-#include <vlc/intf.h>
-
-#include "wxwidgets.h"
+#include "dialogs/messages.hpp"
/*****************************************************************************
* Event Table.
int i_stop = *p_sub->pi_stop;
vlc_mutex_unlock( p_sub->p_lock );
+
if( p_sub->i_start != i_stop )
{
textctrl->SetInsertionPointEnd();
--- /dev/null
+/*****************************************************************************
+ * messages.hpp: Messages dialog
+ *****************************************************************************
+ * Copyright (C) 1999-2005 the VideoLAN team
+ * $Id: wxwidgets.h 12670 2005-09-25 11:16:31Z zorglub $
+ *
+ * Authors: Gildas Bazin <gbazin@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+#ifndef _WXVLC_MESSAGES_H_
+#define _WXVLC_MESSAGES_H_
+
+#include "wxwidgets.hpp"
+
+namespace wxvlc
+{
+ class Messages: public wxFrame
+ {
+ public:
+ /* Constructor */
+ Messages( intf_thread_t *p_intf, wxWindow *p_parent );
+ virtual ~Messages();
+ bool Show( bool show = TRUE );
+ void UpdateLog();
+
+ private:
+ /* Event handlers (these functions should _not_ be virtual) */
+ void OnButtonClose( wxCommandEvent& event );
+ void OnClose( wxCloseEvent& WXUNUSED(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;
+ };
+};
+
+#endif
/*****************************************************************************
- * open.cpp : wxWindows plugin for vlc
+ * open.cpp : Open dialog box
*****************************************************************************
* Copyright (C) 2000-2005 the VideoLAN team
* $Id$
/*****************************************************************************
* Preamble
*****************************************************************************/
+#include "dialogs/open.hpp"
+#include "dialogs/streamout.hpp"
+#include "dialogs/preferences_widgets.h"
+#include "dialogs/subtitles.hpp"
-#include <stdlib.h> /* malloc(), free() */
-#include <errno.h> /* ENOMEM */
-#include <string.h> /* strerror() */
-#include <stdio.h>
-
-#include <vlc/vlc.h>
#include "charset.h"
#ifdef HAVE_LIBCDIO
#include <wx/statline.h>
#include <wx/tokenzr.h>
-#include <vlc/intf.h>
-
#include <vector>
-#include "wxwidgets.h"
-#include "preferences_widgets.h"
#ifndef wxRB_SINGLE
# define wxRB_SINGLE 0
*/
static char * ProbeDVD(const wxChar *device)
{
+ /*
char **ppsz_cd_drives;
const wxWX2MBbuf tmp_buf = wxConvCurrent->cWX2MB(device);
- char *psz_device = const_cast<char *>(tmp_buf.data());
+ char *psz_device = (char *) tmp_buf;
if( IsDVD(psz_device) )
{
}
}
cdio_free_device_list(ppsz_cd_drives);
- }
+ }*/
return NULL;
}
*/
static char * ProbeCDDA(const wxChar *device)
{
+ /*
char *ppsz_device[2];
const wxWX2MBbuf tmp_buf = wxConvCurrent->cWX2MB(device);
- char *psz_device = const_cast<char *>(tmp_buf.data());
+ char *psz_device = (char *) tmp_buf;
ppsz_device[0] = (device && *device) ? psz_device : NULL;
ppsz_device[1] = NULL;
return ProbeDevice(ppsz_device, CDIO_FS_AUDIO, false);
+ */ return NULL;
}
/* Return a device that has a VCD in it. The caller needs to free
the returned string.
*/
static char * ProbeVCD(const wxChar *device)
-{
+{/*
char *ppsz_device[2];
const wxWX2MBbuf tmp_buf = wxConvCurrent->cWX2MB(device);
- char *psz_device = const_cast<char *>(tmp_buf.data());
+ char *psz_device = (char *) tmp_buf;
ppsz_device[0] = (device && *device) ? psz_device : NULL;
ppsz_device[1] = NULL;
return ProbeDevice(ppsz_device,
(CDIO_FS_ANAL_SVCD|CDIO_FS_ANAL_CVD|CDIO_FS_ANAL_VIDEOCD
|CDIO_FS_UNKNOWN), true);
+ */ return NULL;
}
--- /dev/null
+/*****************************************************************************
+ * open.hpp: Headers for the Open dialog
+ *****************************************************************************
+ * Copyright (C) 1999-2005 the VideoLAN team
+ * $Id: wxwidgets.h 12670 2005-09-25 11:16:31Z zorglub $
+ *
+ * Authors: Gildas Bazin <gbazin@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+#ifndef _WXVLC_OPEN_H_
+#define _WXVLC_OPEN_H_
+
+#include "wxwidgets.hpp"
+
+#include <wx/spinctrl.h>
+
+class AutoBuiltPanel;
+namespace wxvlc
+{
+ class SubsFileDialog;
+ class SoutDialog;
+ WX_DEFINE_ARRAY(AutoBuiltPanel *, ArrayOfAutoBuiltPanel);
+
+ class OpenDialog: public wxDialog
+ {
+
+public:
+ /* Constructor */
+ OpenDialog( intf_thread_t *p_intf, wxWindow *p_parent,
+ int i_access_method, int i_arg = 0 );
+
+ /* Extended Contructor */
+ OpenDialog( intf_thread_t *p_intf, wxWindow *p_parent,
+ int i_access_method, int i_arg = 0 , int _i_method = 0 );
+ virtual ~OpenDialog();
+
+ int Show();
+ int Show( int i_access_method, int i_arg = 0 );
+
+ void UpdateMRL();
+ void UpdateMRL( int i_access_method );
+
+ wxArrayString mrl;
+
+private:
+ wxPanel *FilePanel( wxWindow* parent );
+ wxPanel *DiscPanel( wxWindow* parent );
+ wxPanel *NetPanel( wxWindow* parent );
+
+ ArrayOfAutoBuiltPanel input_tab_array;
+
+ /* 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 );
+
+ /* Event handlers for the file page */
+ void OnFilePanelChange( 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 );
+
+ /* 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 caching option */
+ void OnCachingEnable( wxCommandEvent& event );
+ void OnCachingChange( wxCommandEvent& event );
+ void OnCachingChangeSpin( wxSpinEvent& event );
+
+ DECLARE_EVENT_TABLE();
+
+ intf_thread_t *p_intf;
+ wxWindow *p_parent;
+ int i_current_access_method;
+ int i_disc_type_selection;
+
+ int i_method; /* Normal or for the stream dialog ? */
+ int i_open_arg;
+
+ wxComboBox *mrl_combo;
+ wxNotebook *notebook;
+
+ /* Controls for the file panel */
+ wxComboBox *file_combo;
+ wxFileDialog *file_dialog;
+
+ /* 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;
+ wxPanel *net_subpanels[4];
+ wxRadioButton *net_radios[4];
+ wxSpinCtrl *net_ports[4];
+ int i_net_ports[4];
+ wxTextCtrl *net_addrs[4];
+ wxCheckBox *net_timeshift;
+ wxCheckBox *net_ipv6;
+
+ /* 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 caching options */
+ wxCheckBox *caching_checkbox;
+ wxSpinCtrl *caching_value;
+ int i_caching;
+};
+
+};
+
+enum
+{
+ FILE_ACCESS = 0,
+ DISC_ACCESS,
+ NET_ACCESS,
+
+ /* Auto-built panels */
+ CAPTURE_ACCESS
+};
+#define MAX_ACCESS CAPTURE_ACCESS
+
+
+#endif
/*****************************************************************************
* Preamble
*****************************************************************************/
-#include <vlc/vlc.h>
-#include <vlc/intf.h>
-
-#include "wxwidgets.h"
+#include "dialogs/playlist.hpp"
+#include "dialogs/iteminfo.hpp"
+#include "interface.hpp" // Needed for D&D - TODO: Split
#include "bitmaps/shuffle.xpm"
#include "bitmaps/repeat.xpm"
--- /dev/null
+/*****************************************************************************
+ * playlist.hpp: Header for the playlist
+ *****************************************************************************
+ * Copyright (C) 1999-2005 the VideoLAN team
+ * $Id: wxwidgets.h 12502 2005-09-09 19:38:01Z gbazin $
+ *
+ * Authors: Clément Stenac <zorglub@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+#ifndef _WXVLC_PLAYLIST_H_
+#define _WXVLC_PLAYLIST_H_
+
+#include "wxwidgets.hpp"
+
+#include <wx/treectrl.h>
+
+#define MODE_NONE 0
+#define MODE_GROUP 1
+#define MODE_AUTHOR 2
+#define MODE_TITLE 3
+
+#define OPEN_NORMAL 0
+#define OPEN_STREAM 1
+
+namespace wxvlc
+{
+class ItemInfoDialog;
+class NewGroup;
+class ExportPlaylist;
+
+/* Playlist */
+class Playlist: public wxFrame
+{
+public:
+ /* Constructor */
+ Playlist( intf_thread_t *p_intf, wxWindow *p_parent );
+ virtual ~Playlist();
+
+ void UpdatePlaylist();
+ void ShowPlaylist( bool show );
+ void UpdateItem( int );
+ void AppendItem( wxCommandEvent& );
+
+ bool b_need_update;
+ int i_items_to_append;
+
+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 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 );
+ 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 OnRandom( wxCommandEvent& event );
+ void OnRepeat( wxCommandEvent& event );
+ void OnLoop ( wxCommandEvent& event );
+
+ void OnActivateItem( wxTreeEvent& event );
+ void OnKeyDown( wxTreeEvent& event );
+ void OnNewGroup( wxCommandEvent& event );
+
+ /* 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 );
+
+ void Preparse();
+
+ /* Update */
+ 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, int );
+ wxTreeItemId FindItemByName( wxTreeItemId, wxString,
+ wxTreeItemId, vlc_bool_t *);
+
+ wxTreeItemId saved_tree_item;
+ int i_saved_id;
+
+ playlist_t *p_playlist;
+
+
+ /* Custom events */
+ void OnPlaylistEvent( wxCommandEvent& event );
+
+ DECLARE_EVENT_TABLE();
+
+
+ /* Global widgets */
+ wxStatusBar *statusbar;
+ ItemInfoDialog *iteminfo_dialog;
+
+ int i_update_counter;
+
+ intf_thread_t *p_intf;
+ wxTreeCtrl *treectrl;
+ int i_current_view;
+ vlc_bool_t b_changed_view;
+ char **pp_sds;
+
+
+};
+
+} // end of wxvlc namespace
+
+#endif
/*****************************************************************************
* Preamble
*****************************************************************************/
-#include <stdlib.h> /* malloc(), free() */
-#include <errno.h> /* ENOMEM */
-#include <string.h> /* strerror() */
-#include <stdio.h>
-
-#include <vlc/vlc.h>
-#include <vlc/intf.h>
+#include "dialogs/preferences.hpp"
#include <vlc_config_cat.h>
-
-#include "wxwidgets.h"
-#include "preferences_widgets.h"
+#include "dialogs/preferences_widgets.h"
#include <wx/combobox.h>
#include <wx/statline.h>
#include <wx/clntdata.h>
#include <wx/dynarray.h>
#include <wx/imaglist.h>
+#include <wx/treectrl.h>
#include "bitmaps/type_net.xpm"
#include "bitmaps/codec.xpm"
{
bool hidden = false;
- if( b_advanced == b_new_advanced )
+ if( b_advanced == b_new_advanced )
{
goto hide;
}
--- /dev/null
+/*****************************************************************************
+ * preferences.hpp : Headers for the preference dialog
+ *****************************************************************************
+ * Copyright (C) 1999-2005 the VideoLAN team
+ * $Id: wxwidgets.h 12670 2005-09-25 11:16:31Z zorglub $
+ *
+ * Authors: Gildas Bazin <gbazin@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+#ifndef _WXVLC_PREFERENCES_H_
+#define _WXVLC_PREFERENCES_H_
+
+#include "wxwidgets.hpp"
+
+class PrefsTreeCtrl;
+class PrefsPanel;
+
+namespace wxvlc
+{
+ /** This class is the preferences window
+ * It includes a preferences panel (right part)
+ * and the PrefsTreeCtrl (left part)
+ */
+ 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 );
+ void OnAdvanced( wxCommandEvent& event );
+ void OnClose( wxCloseEvent& event );
+
+ DECLARE_EVENT_TABLE();
+
+ intf_thread_t *p_intf;
+
+ PrefsTreeCtrl *prefs_tree;
+ };
+
+};
+
+#endif
+
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-#include <stdlib.h> /* malloc(), free() */
-#include <errno.h> /* ENOMEM */
-#include <string.h> /* strerror() */
-#include <stdio.h>
-
-#include <vlc/vlc.h>
-#include <vlc/intf.h>
-
-#include <vlc_config_cat.h>
-
-#include "wxwidgets.h"
+#include "wxwidgets.hpp"
#include "preferences_widgets.h"
+#include <vlc_keys.h>
+#include <vlc_config_cat.h>
#include <wx/statline.h>
+#include <wx/spinctrl.h>
/*****************************************************************************
* CreateConfigControl wrapper
/*****************************************************************************
* Preamble
*****************************************************************************/
-#include <stdlib.h> /* malloc(), free() */
-#include <errno.h> /* ENOMEM */
-#include <string.h> /* strerror() */
-#include <stdio.h>
+#include "dialogs/streamout.hpp"
-#include <vlc/vlc.h>
-#include <vlc/intf.h>
-
-#include "wxwidgets.h"
+#include <wx/spinctrl.h>
#include <wx/combobox.h>
#include <wx/statline.h>
--- /dev/null
+/*****************************************************************************
+ * streamout.hpp: Stream output dialog
+ *****************************************************************************
+ * Copyright (C) 1999-2005 the VideoLAN team
+ * $Id: wxwidgets.h 12670 2005-09-25 11:16:31Z zorglub $
+ *
+ * Authors: Gildas Bazin <gbazin@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+#ifndef _WXVLC_STREAMOUT_H_
+#define _WXVLC_STREAMOUT_H_
+
+#include "wxwidgets.hpp"
+
+namespace wxvlc
+{
+ enum
+ {
+ PLAY_ACCESS_OUT = 0,
+ FILE_ACCESS_OUT,
+ HTTP_ACCESS_OUT,
+ MMSH_ACCESS_OUT,
+ RTP_ACCESS_OUT,
+ UDP_ACCESS_OUT,
+ ACCESS_OUT_NUM
+ };
+
+ enum
+ {
+ TS_ENCAPSULATION = 0,
+ PS_ENCAPSULATION,
+ MPEG1_ENCAPSULATION,
+ OGG_ENCAPSULATION,
+ ASF_ENCAPSULATION,
+ MP4_ENCAPSULATION,
+ MOV_ENCAPSULATION,
+ WAV_ENCAPSULATION,
+ RAW_ENCAPSULATION,
+ AVI_ENCAPSULATION,
+ ENCAPS_NUM
+ };
+
+ enum
+ {
+ ANN_MISC_SOUT = 0,
+ TTL_MISC_SOUT,
+ MISC_SOUT_NUM
+ };
+
+ 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 );
+ void OnFileDump( wxCommandEvent& event );
+
+ /* Event handlers for the net access output */
+ void OnNetChange( wxCommandEvent& event );
+
+ /* Event specific to the announce address */
+ void OnAnnounceGroupChange( wxCommandEvent& event );
+ void OnAnnounceAddrChange( 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_panel;
+ wxPanel *access_subpanels[ACCESS_OUT_NUM];
+ wxCheckBox *access_checkboxes[ACCESS_OUT_NUM];
+
+ int i_access_type;
+
+ wxComboBox *file_combo;
+ wxCheckBox *dump_checkbox;
+ wxSpinCtrl *net_ports[ACCESS_OUT_NUM];
+ wxTextCtrl *net_addrs[ACCESS_OUT_NUM];
+
+ /* Controls for the SAP announces and TTL setting */
+ wxPanel *misc_panel;
+ wxPanel *misc_subpanels[MISC_SOUT_NUM];
+ wxCheckBox *sap_checkbox;
+ wxTextCtrl *announce_group;
+ wxTextCtrl *announce_addr;
+ wxSpinCtrl *ttl_spin;
+
+ /* Controls for the encapsulation */
+ wxPanel *encapsulation_panel;
+ wxRadioButton *encapsulation_radios[ENCAPS_NUM];
+ int i_encapsulation_type;
+
+ /* Controls for transcoding */
+ wxPanel *transcoding_panel;
+ 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;
+ wxComboBox *video_scale_combo;
+ wxComboBox *subtitles_codec_combo;
+ wxCheckBox *subtitles_transc_checkbox;
+ wxCheckBox *subtitles_overlay_checkbox;
+
+ /* Misc controls */
+ wxCheckBox *sout_all_checkbox;
+ };
+
+};
+
+#endif
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-#include <stdlib.h> /* malloc(), free() */
-#include <errno.h> /* ENOMEM */
-#include <string.h> /* strerror() */
-#include <stdio.h>
-
-#include <vlc/vlc.h>
-#include <vlc/intf.h>
-
-#include "wxwidgets.h"
+#include "dialogs/subtitles.hpp"
#include <wx/combobox.h>
#include <wx/statline.h>
+#include <wx/spinctrl.h>
#ifndef wxRB_SINGLE
# define wxRB_SINGLE 0
--- /dev/null
+/*****************************************************************************
+ * subtitles.hpp: private wxWindows interface description
+ *****************************************************************************
+ * Copyright (C) 1999-2005 the VideoLAN team
+ * $Id: wxwidgets.h 12502 2005-09-09 19:38:01Z gbazin $
+ *
+ * Authors: Gildas Bazin <gbazin@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+#ifndef _WXVLC_SUBTITLES_H_
+#define _WXVLC_SUBTITLES_H_
+
+#include "wxwidgets.hpp"
+
+
+namespace wxvlc
+{
+/* 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;
+ wxComboBox *size_combo;
+ wxComboBox *align_combo;
+ wxSpinCtrl *fps_spinctrl;
+ wxSpinCtrl *delay_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;
+};
+
+};
+
+#endif
+
/*****************************************************************************
- * updatevlc.cpp : Check for VLC updates dialog
+ * updatevlc.cpp : VLC Update checker
*****************************************************************************
* Copyright (C) 2000-2004 the VideoLAN team
* $Id$
/*****************************************************************************
* Preamble
*****************************************************************************/
-#include <vlc/vlc.h>
-#include <vlc/intf.h>
-
+#include "updatevlc.hpp"
#include <wx/progdlg.h>
-
-#include "wxwidgets.h"
+#include <wx/treectrl.h>
#include "vlc_block.h"
#include "vlc_stream.h"
UpdateVLC::~UpdateVLC()
{
+ fprintf( stderr, "Fooing\n");
}
/* this function gets all the info from the xml files hosted on
--- /dev/null
+/*****************************************************************************
+ * updatevlc.hpp: VLC Update checker
+ *****************************************************************************
+ * Copyright (C) 1999-2005 the VideoLAN team
+ * $Id: wxwidgets.h 12670 2005-09-25 11:16:31Z zorglub $
+ *
+ * Authors: Antoine Cellerier <dionoea@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+#ifndef _WXVLC_UPDATEVLC_H_
+#define _WXVLC_UPDATEVLC_H_
+
+#include "wxwidgets.hpp"
+#include <list>
+
+class wxTreeCtrl;
+
+namespace wxvlc
+{
+ class UpdateVLC: public wxFrame
+ {
+ public:
+ /** Constructor */
+ UpdateVLC( intf_thread_t *p_intf, wxWindow *p_parent );
+ virtual ~UpdateVLC();
+
+ private:
+ void OnButtonClose( wxCommandEvent& event );
+ void OnClose( wxCloseEvent& WXUNUSED(event) );
+ void GetData();
+ void OnCheckForUpdate( wxCommandEvent& event );
+ void OnMirrorChoice( wxCommandEvent& event );
+ void UpdateUpdatesTree();
+ void UpdateMirrorsChoice();
+ void OnUpdatesTreeActivate( wxTreeEvent& event );
+ void DownloadFile( wxString url, wxString dst );
+
+ DECLARE_EVENT_TABLE();
+
+ intf_thread_t *p_intf;
+ wxTreeCtrl *updates_tree;
+
+ wxChoice *mirrors_choice;
+
+ wxString release_type; /* could be "stable", "test", "nightly" ... */
+
+ struct update_file_t
+ {
+ wxString type;
+ wxString md5;
+ wxString size;
+ wxString url;
+ wxString description;
+ };
+
+ struct update_version_t
+ {
+ wxString type;
+ wxString major;
+ wxString minor;
+ wxString revision;
+ wxString extra;
+ std::list<update_file_t> m_files;
+ };
+
+ std::list<update_version_t> m_versions;
+
+ struct update_mirror_t
+ {
+ wxString name;
+ wxString location;
+ wxString type;
+ wxString base_url;
+ };
+
+ std::list<update_mirror_t> m_mirrors;
+ };
+};
+
+#endif
--- /dev/null
+/*****************************************************************************
+ * vlm_panel.cpp: VLM Panel
+ *****************************************************************************
+ * Copyright (C) 2000-2005 the VideoLAN team
+ * $Id: playlist.cpp 12582 2005-09-17 14:15:32Z zorglub $
+ *
+ * Authors: Clément Stenac <zorglub@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/OR MODIFy
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+#include "dialogs/vlm/vlm_panel.hpp"
+#include "dialogs/vlm/vlm_wrapper.hpp"
+#include "dialogs/vlm/vlm_stream.hpp"
+#include "dialogs/vlm/vlm_streampanel.hpp"
+
+enum
+{
+ Notebook_Event,
+ Timer_Event,
+};
+
+BEGIN_EVENT_TABLE( VLMPanel, wxPanel)
+ EVT_TIMER( Timer_Event, VLMPanel::OnTimer )
+END_EVENT_TABLE()
+
+
+VLMPanel::VLMPanel( intf_thread_t *_p_intf, wxWindow *_p_parent ) :
+ wxPanel( _p_parent, -1, wxDefaultPosition, wxDefaultSize ),
+ timer( this, Timer_Event )
+{
+ p_intf = _p_intf;
+
+ p_vlm = new VLMWrapper( p_intf );
+ p_vlm->AttachVLM();
+
+ SetAutoLayout( TRUE );
+
+ wxBoxSizer *panel_sizer = new wxBoxSizer( wxVERTICAL );
+
+ p_notebook = new wxNotebook( this, Notebook_Event );
+#if (!wxCHECK_VERSION(2,5,0))
+ wxNotebookSizer *notebook_sizer = new wxNotebookSizer( p_notebook );
+#endif
+ p_notebook->AddPage( BroadcastPanel( p_notebook ), wxU( _("Broadcasts") ) );
+ p_notebook->AddPage( VODPanel( p_notebook ), wxU( _("VOD") ) );
+#if (!wxCHECK_VERSION(2,5,0))
+ panel_sizer->Add( notebook_sizer, 1, wxEXPAND | wxALL, 5 );
+#else
+ panel_sizer->Add( p_notebook, 1 , wxEXPAND | wxALL, 5 );
+#endif
+
+ panel_sizer->Layout();
+ SetSizerAndFit( panel_sizer );
+
+ Update();
+
+ timer.Start( 300 );
+}
+
+VLMPanel::~VLMPanel()
+{
+ delete p_vlm;
+}
+
+void VLMPanel::OnTimer( wxTimerEvent& event )
+{
+ Update();
+}
+
+void VLMPanel::Update()
+{
+ unsigned int i;
+ for( i = 0 ; i < broadcasts.size(); i++ )
+ {
+ ((VLMBroadcastStreamPanel *)broadcasts[i])->b_found = VLC_FALSE;
+ }
+ for( i = 0 ; i < vods.size(); i++ )
+ {
+ ((VLMVODStreamPanel *)vods[i])->b_found = VLC_FALSE;
+ }
+
+ p_vlm->LockVLM();
+ /* Iterate over the media, to find the panels to add / remove */
+ /* FIXME: This code should be better wrapped */
+ for( i = 0; i < p_vlm->NbMedia(); i++ )
+ {
+ vlm_media_t *p_media = p_vlm->GetMedia( i );
+
+ if( p_media->i_type == BROADCAST_TYPE )
+ {
+ vlc_bool_t b_foundthis = VLC_FALSE;
+ for( unsigned int j = 0 ; j < broadcasts.size(); j++ )
+ {
+ VLMBroadcastStreamPanel *p_streamp =
+ (VLMBroadcastStreamPanel *)(broadcasts[j]);
+ /* FIXME: dangerous .. */
+ if( p_streamp->GetStream()->p_media == p_media )
+ {
+ p_streamp->b_found = VLC_TRUE;
+ b_foundthis = VLC_TRUE;
+ break;
+ }
+ }
+ /* Create the stream */
+ if( !b_foundthis )
+ {
+ VLMBroadcastStream *p_broadcast =
+ new VLMBroadcastStream( p_intf, p_media, p_vlm );
+ AppendBroadcast( p_broadcast );
+ }
+ }
+ else if( p_media->i_type == VOD_TYPE )
+ {
+ vlc_bool_t b_foundthis = VLC_FALSE;
+ for( unsigned int j = 0 ; i < vods.size(); i++ )
+ {
+ VLMVODStreamPanel *p_streamp = (VLMVODStreamPanel *)( vods[j] );
+ if( p_streamp->GetStream()->p_media == p_media )
+ {
+ p_streamp->b_found = VLC_TRUE;
+ b_foundthis = VLC_TRUE;
+ break;
+ }
+ }
+ /* Create it */
+ if( !b_foundthis )
+ {
+ VLMVODStream *p_vod = new VLMVODStream(p_intf, p_media, p_vlm );
+ AppendVOD( p_vod );
+ }
+ }
+ }
+
+ /* Those not marked as found must be removed */
+ vector<VLMBroadcastStreamPanel *>::iterator it = broadcasts.begin();
+ while( it < broadcasts.end() )
+ {
+ if( (*it)->b_found == VLC_FALSE )
+ {
+ vector<VLMBroadcastStreamPanel *>::iterator rem = it;
+ it++;
+ VLMBroadcastStreamPanel *p_remove = *rem;
+ broadcasts.erase( rem );
+ RemoveBroadcast( p_remove );
+ delete p_remove;
+ }
+ else
+ it++;
+ }
+ vector<VLMVODStreamPanel *>::iterator it2 = vods.begin();
+ while( it2 < vods.end() )
+ {
+ if( (*it2)->b_found == VLC_FALSE )
+ {
+ vector<VLMVODStreamPanel *>::iterator rem = it2;
+ it2++;
+ VLMVODStreamPanel *p_remove = *rem;
+ vods.erase( rem );
+ RemoveVOD( p_remove );
+ delete p_remove;
+ }
+ else
+ it2++;
+ }
+
+ /* Update sliders*/
+ for( unsigned int j = 0 ; j < broadcasts.size(); j++ )
+ {
+ VLMBroadcastStreamPanel *p_streamp =
+ (VLMBroadcastStreamPanel *)( broadcasts[j] );
+ p_streamp->Update();
+ }
+ p_vlm->UnlockVLM();
+}
+
+/*************************
+ * Broadcasts management
+ *************************/
+wxPanel * VLMPanel::BroadcastPanel( wxWindow *parent )
+{
+ broadcasts_panel = new wxPanel( parent, -1, wxDefaultPosition, wxSize( 500, 350 ) );
+ broadcasts_sizer = new wxBoxSizer( wxVERTICAL );
+
+ wxStaticBox *add_box = new wxStaticBox( broadcasts_panel, -1,
+ wxU( _( "New broadcast") ) );
+ wxStaticBoxSizer *box_sizer = new wxStaticBoxSizer( add_box, wxHORIZONTAL );
+ box_sizer->Add( AddBroadcastPanel( broadcasts_panel), 0, wxEXPAND|wxALL, 5 );
+ box_sizer->Layout();
+
+ broadcasts_sizer->Add( box_sizer, 0, wxEXPAND|wxALL, 5 );
+
+ scrolled_broadcasts = new wxScrolledWindow( broadcasts_panel, -1,
+ wxDefaultPosition, wxDefaultSize,
+ wxBORDER_NONE | wxVSCROLL );
+
+ scrolled_broadcasts_sizer = new wxBoxSizer( wxVERTICAL );
+ scrolled_broadcasts->SetAutoLayout( TRUE );
+ scrolled_broadcasts->SetScrollRate( 5,5 );
+ scrolled_broadcasts->SetSizerAndFit( scrolled_broadcasts_sizer );
+
+ broadcasts_sizer->Add( scrolled_broadcasts, 1, wxEXPAND| wxALL, 5 );
+ broadcasts_sizer->Layout();
+
+ broadcasts_panel->SetSizerAndFit( broadcasts_sizer );
+
+ return broadcasts_panel;
+}
+
+wxPanel * VLMPanel::AddBroadcastPanel( wxPanel *panel )
+{
+ return new VLMAddStreamPanel( p_intf, panel, p_vlm, VLC_FALSE,
+ VLC_TRUE );
+}
+
+void VLMPanel::AppendBroadcast( VLMBroadcastStream *p_broadcast )
+{
+ VLMBroadcastStreamPanel *p_new =
+ new VLMBroadcastStreamPanel( p_intf, scrolled_broadcasts,
+ p_broadcast );
+ p_new->b_found = VLC_TRUE;
+ scrolled_broadcasts_sizer->Add( p_new, 0, wxEXPAND | wxALL, 5 );
+ scrolled_broadcasts_sizer->Layout();
+ scrolled_broadcasts->FitInside();
+ broadcasts.push_back( p_new );
+}
+
+void VLMPanel::RemoveBroadcast( VLMBroadcastStreamPanel *p_streamp )
+{
+ scrolled_broadcasts_sizer->Remove( p_streamp );
+ scrolled_broadcasts_sizer->Layout();
+ scrolled_broadcasts->FitInside();
+}
+
+/*************************
+ * VODS management
+ *************************/
+wxPanel * VLMPanel::VODPanel( wxWindow *parent )
+{
+ vods_panel = new wxPanel( parent, -1, wxDefaultPosition, wxSize( 500, 350 ) );
+ return vods_panel;
+}
+
+wxPanel * VLMPanel::AddVODPanel( wxPanel *panel )
+{
+ return new VLMAddStreamPanel( p_intf, panel, p_vlm, VLC_FALSE,
+ VLC_FALSE );
+}
+
+void VLMPanel::AppendVOD( VLMVODStream *p_vod )
+{
+ VLMVODStreamPanel *p_new =
+ new VLMVODStreamPanel( p_intf, scrolled_vods, p_vod );
+ p_new->b_found = VLC_TRUE;
+ scrolled_vods_sizer->Add( p_new, 0, wxEXPAND | wxALL, 5 );
+ scrolled_vods_sizer->Layout();
+ scrolled_vods->FitInside();
+ vods.push_back( p_new );
+}
+
+void VLMPanel::RemoveVOD( VLMVODStreamPanel *p_streamp )
+{
+ scrolled_vods_sizer->Remove( p_streamp );
+ scrolled_vods_sizer->Layout();
+ scrolled_vods->FitInside();
+}
+
+/****************************************************************************
+ * VLM Add Broadcast panel implementation
+ *****************************************************************************/
+enum
+{
+ Create_Event,
+ Clear_Event,
+ ChooseInput_Event,
+ ChooseOutput_Event,
+};
+
+BEGIN_EVENT_TABLE( VLMAddStreamPanel, wxPanel)
+ EVT_BUTTON( Create_Event, VLMAddStreamPanel::OnCreate )
+ EVT_BUTTON( Clear_Event, VLMAddStreamPanel::OnClear )
+END_EVENT_TABLE()
+
+VLMAddStreamPanel::VLMAddStreamPanel( intf_thread_t *_p_intf,
+ wxWindow *_p_parent, VLMWrapper *_p_vlm,
+ vlc_bool_t _b_edit, vlc_bool_t _b_broadcast ):
+ wxPanel( _p_parent, -1, wxDefaultPosition, wxDefaultSize )
+{
+ p_intf = _p_intf;
+ p_vlm = _p_vlm;
+ b_edit = _b_edit;
+ b_broadcast = _b_broadcast;
+
+ SetAutoLayout( TRUE );
+
+ wxBoxSizer *panel_sizer = new wxBoxSizer( wxVERTICAL );
+
+ wxFlexGridSizer *upper_sizer = new wxFlexGridSizer( 5,2 );
+
+ upper_sizer->Add( new wxStaticText( this, -1, wxU( _("Name") ) ) );
+ name_text = new wxTextCtrl( this, -1, wxU( _("") ), wxDefaultPosition,
+ wxSize( 150, -1 ) );
+ upper_sizer->Add( name_text , 1, wxEXPAND | wxLEFT | wxRIGHT, 5 );
+
+ upper_sizer->Add( new wxStaticText( this, -1, wxU( _("Input") ) ) );
+ input_text = new wxTextCtrl( this, -1, wxU( _("") ) ,
+ wxDefaultPosition, wxSize( 150, -1 ) );
+ upper_sizer->Add( input_text , 1, wxEXPAND | wxLEFT | wxRIGHT, 5 );
+ upper_sizer->Add( new wxButton( this, ChooseInput_Event, wxU( _("Choose") ) ) );
+
+ upper_sizer->Add( 0,0 );
+ upper_sizer->Add( 0,0 );
+
+ upper_sizer->Add( new wxStaticText( this, -1, wxU( _("Output") ) ) );
+ output_text = new wxTextCtrl( this, -1, wxU( _("") ) ,
+ wxDefaultPosition, wxSize( 150, -1 ) );
+ upper_sizer->Add( output_text, 1, wxEXPAND | wxLEFT | wxRIGHT, 5 );
+ upper_sizer->Add( new wxButton( this, ChooseOutput_Event,
+ wxU( _("Choose") ) ) );
+
+ panel_sizer->Add( upper_sizer, 0, wxEXPAND | wxALL, 5 );
+
+ wxBoxSizer *lower_sizer = new wxBoxSizer( wxHORIZONTAL );
+ lower_sizer->Add( new wxButton( this, Create_Event,
+ wxU( _( b_edit ? "Edit" : "Create" ) ) ),
+ 0 , wxEXPAND | wxALL , 5 );
+ lower_sizer->Add( new wxButton( this, Clear_Event, wxU( _( "Clear" ) ) ),
+ 0 , wxEXPAND | wxALL , 5 );
+
+ enabled_checkbox = new wxCheckBox( this, -1, wxU( _("Enabled" ) ) );
+ enabled_checkbox->SetValue( true );
+ lower_sizer->Add( enabled_checkbox, 1 , wxEXPAND | wxALL , 5 );
+ if( b_broadcast )
+ {
+ loop_checkbox = new wxCheckBox( this, -1, wxU( _("Loop" ) ) );
+ lower_sizer->Add( loop_checkbox, 1 , wxEXPAND | wxALL , 5 );
+ }
+
+ panel_sizer->Add( lower_sizer, 0 , wxEXPAND| wxALL, 5 );
+ panel_sizer->Layout();
+ SetSizerAndFit( panel_sizer );
+}
+
+VLMAddStreamPanel::~VLMAddStreamPanel()
+{
+}
+
+void VLMAddStreamPanel::Load( VLMStream *p_stream )
+{
+ name_text->SetValue( wxU( p_stream->p_media->psz_name ) );
+ name_text->SetEditable( false );
+ if( p_stream->p_media->i_input > 0 )
+ {
+ input_text->SetValue( wxU( p_stream->p_media->input[0] ) );
+ }
+ output_text->SetValue( wxU( p_stream->p_media->psz_output ) );
+ enabled_checkbox->SetValue( p_stream->p_media->b_enabled );
+ if( b_broadcast)
+ loop_checkbox->SetValue( p_stream->p_media->b_loop );
+}
+
+void VLMAddStreamPanel::OnCreate( wxCommandEvent &event )
+{
+ char *psz_name = FromLocale( name_text->GetValue().mb_str() );
+ char *psz_input = FromLocale( input_text->GetValue().mb_str() );
+ char *psz_output = FromLocale( output_text->GetValue().mb_str() );
+ if( b_broadcast && ! b_edit )
+ {
+ p_vlm->AddBroadcast( psz_name, psz_input, psz_output,
+ enabled_checkbox->IsChecked() ? VLC_TRUE: VLC_FALSE,
+ loop_checkbox->IsChecked() ? VLC_TRUE : VLC_FALSE );
+ }
+ else if( b_broadcast && b_edit )
+ {
+ p_vlm->EditBroadcast( psz_name, psz_input, psz_output,
+ enabled_checkbox->IsChecked() ? VLC_TRUE: VLC_FALSE,
+ loop_checkbox->IsChecked() ? VLC_TRUE : VLC_FALSE );
+ }
+ else if( !b_broadcast && !b_edit )
+ {
+ p_vlm->AddVod( psz_name, psz_input, psz_output,
+ enabled_checkbox->IsChecked() ? VLC_TRUE: VLC_FALSE,
+ loop_checkbox->IsChecked() ? VLC_TRUE : VLC_FALSE );
+ }
+ else
+ {
+ p_vlm->EditVod( psz_name, psz_input, psz_output,
+ enabled_checkbox->IsChecked() ? VLC_TRUE: VLC_FALSE,
+ loop_checkbox->IsChecked() ? VLC_TRUE : VLC_FALSE );
+ }
+ LocaleFree( psz_name) ; LocaleFree( psz_input ) ;
+ LocaleFree( psz_output);
+ if( !b_edit )
+ OnClear( event );
+}
+
+void VLMAddStreamPanel::OnClear( wxCommandEvent &event )
+{
+ name_text->SetValue( wxU("") );
+ input_text->SetValue( wxU("") );
+ output_text->SetValue( wxU("") );
+}
+
+
+/****************************************************************************
+ * VLM Frame implementation
+ ****************************************************************************/
+enum
+{
+ Close_Event,
+};
+
+BEGIN_EVENT_TABLE( VLMFrame, wxFrame )
+ EVT_CLOSE( VLMFrame::OnClose )
+END_EVENT_TABLE()
+
+VLMFrame::VLMFrame( intf_thread_t *_p_intf, wxWindow *_p_parent ) :
+ wxFrame( _p_parent, -1, wxU( _("VLM configuration") ),
+ wxDefaultPosition, wxSize( 640,480 ), wxDEFAULT_FRAME_STYLE )
+{
+ SetIcon( *_p_intf->p_sys->p_icon );
+
+ wxBoxSizer *main_sizer = new wxBoxSizer( wxHORIZONTAL );
+ vlm_panel = new VLMPanel( _p_intf, this );
+
+ main_sizer->Add( vlm_panel, 1, wxEXPAND | wxALL, 5 );
+ main_sizer->Layout();
+ SetSizerAndFit( main_sizer );
+}
+
+void VLMFrame::OnClose( wxCloseEvent& WXUNUSED(event) )
+{
+ Hide();
+}
+
+void VLMFrame::Update()
+{
+ vlm_panel->Update();
+}
+
+VLMFrame::~VLMFrame()
+{
+ delete vlm_panel;
+}
+
+/****************************************************************************
+ * VLM Add stream Frame implementation
+ ****************************************************************************/
+VLMEditStreamFrame::VLMEditStreamFrame( intf_thread_t *_p_intf,
+ wxWindow *_p_parent, VLMWrapper *_p_vlm, vlc_bool_t _b_broadcast,
+ VLMStream *p_stream ) :
+ wxFrame( _p_parent, -1, wxU( _("VLM stream") ),
+ wxDefaultPosition, wxSize( 640,480 ), wxDEFAULT_FRAME_STYLE )
+{
+ SetIcon( *_p_intf->p_sys->p_icon );
+
+ wxBoxSizer *main_sizer = new wxBoxSizer( wxHORIZONTAL );
+ vlm_panel = new VLMAddStreamPanel( _p_intf, this, _p_vlm ,
+ VLC_TRUE, _b_broadcast );
+
+ vlm_panel->Load( p_stream );
+
+ main_sizer->Add( vlm_panel, 1, wxEXPAND | wxALL, 5 );
+ main_sizer->Layout();
+ SetSizerAndFit( main_sizer );
+}
+
+VLMEditStreamFrame::~VLMEditStreamFrame()
+{
+}
--- /dev/null
+/*****************************************************************************
+ * vlm_panel.hpp: Header for the VLM panel
+ *****************************************************************************
+ * Copyright (C) 1999-2005 the VideoLAN team
+ * $Id: wxwidgets.h 12502 2005-09-09 19:38:01Z gbazin $
+ *
+ * Authors: Clément Stenac <zorglub@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+#ifndef _WXVLC_VLMPANEL_H_
+#define _WXVLC_VLMPANEL_H_
+
+#include "wxwidgets.hpp"
+
+#include <vector>
+using namespace std;
+
+
+class VLMWrapper;
+class VLMStream;
+class VLMBroadcastStream;
+class VLMVODStream;
+
+namespace wxvlc
+{
+ class VLMStreamPanel;
+ class VLMBroadcastStreamPanel;
+ class VLMVODStreamPanel;
+
+ /** This class is the panel to add or edit a VLM stream
+ * It can be embedded in the main VLM panel or on a separate frame
+ */
+ class VLMAddStreamPanel : public wxPanel
+ {
+ public:
+ VLMAddStreamPanel( intf_thread_t *, wxWindow *, VLMWrapper *,
+ vlc_bool_t, vlc_bool_t );
+ virtual ~VLMAddStreamPanel();
+ void Load( VLMStream *);
+ private:
+ void OnCreate( wxCommandEvent& );
+ void OnClear( wxCommandEvent& );
+
+ wxTextCtrl *name_text;
+ wxTextCtrl *input_text;
+ wxTextCtrl *output_text;
+
+ wxCheckBox *enabled_checkbox;
+ wxCheckBox *loop_checkbox;
+
+ intf_thread_t *p_intf;
+ VLMWrapper *p_vlm;
+
+
+ vlc_bool_t b_edit, b_broadcast;
+
+ DECLARE_EVENT_TABLE();
+ };
+
+ /**
+ * This class is the main VLM Manager panel
+ */
+ class VLMPanel : public wxPanel
+ {
+ public:
+ VLMPanel( intf_thread_t *p_intf, wxWindow * );
+ virtual ~VLMPanel();
+
+ void Update();
+
+ protected:
+
+ private:
+ VLMWrapper *p_vlm;
+ intf_thread_t *p_intf;
+
+ wxTimer timer;
+ void OnTimer( wxTimerEvent &);
+ /** Notebook */
+ wxNotebook *p_notebook;
+ DECLARE_EVENT_TABLE();
+
+ /* Broadcast stuff */
+ vector<VLMBroadcastStreamPanel *> broadcasts;
+ wxPanel *broadcasts_panel;
+ wxBoxSizer *broadcasts_sizer;
+ wxScrolledWindow *scrolled_broadcasts;
+ wxBoxSizer *scrolled_broadcasts_sizer;
+ wxPanel *BroadcastPanel( wxWindow *);
+ wxPanel *AddBroadcastPanel( wxPanel *);
+ void AppendBroadcast( VLMBroadcastStream *);
+ void RemoveBroadcast( VLMBroadcastStreamPanel *);
+
+ /* VOD stuff */
+ vector<VLMVODStreamPanel *> vods;
+ wxPanel *vods_panel;
+ wxBoxSizer *vods_sizer;
+ wxScrolledWindow *scrolled_vods;
+ wxBoxSizer *scrolled_vods_sizer;
+ wxPanel *VODPanel( wxWindow *);
+ wxPanel *AddVODPanel( wxPanel *);
+ void AppendVOD( VLMVODStream *);
+ void RemoveVOD( VLMVODStreamPanel *);
+
+ };
+
+ /** This class is the standard VLM frame
+ * It only consists of the VLM panel
+ */
+ class VLMFrame: public wxFrame
+ {
+ public:
+ VLMFrame( intf_thread_t *p_intf, wxWindow * );
+ virtual ~VLMFrame();
+
+ void Update();
+ private:
+ VLMPanel *vlm_panel;
+ DECLARE_EVENT_TABLE();
+ void OnClose( wxCloseEvent& );
+ };
+
+ /** This class is the edit dialog for a stream
+ * It only consists of the VLM edit panel
+ */
+ class VLMEditStreamFrame: public wxFrame
+ {
+ public:
+ VLMEditStreamFrame( intf_thread_t *p_intf, wxWindow *,
+ VLMWrapper * , vlc_bool_t, VLMStream * );
+ virtual ~VLMEditStreamFrame();
+
+ private:
+ VLMAddStreamPanel *vlm_panel;
+ };
+};
+
+#endif
--- /dev/null
+/*****************************************************************************
+ * vlm_slider_manager.cpp : Manage an input slider for a VLM stream
+ *****************************************************************************
+ * Copyright (C) 2000-2005 the VideoLAN team
+ * $Id: timer.cpp 11981 2005-08-03 15:03:23Z xtophe $
+ *
+ * Authors: Clément Stenac <zorglub@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+/*****************************************************************************
+ * Preamble
+ *****************************************************************************/
+#include "dialogs/vlm/vlm_slider_manager.hpp"
+#include "dialogs/vlm/vlm_stream.hpp"
+#include "dialogs/vlm/vlm_streampanel.hpp"
+
+/*****************************************************************************
+ * Constructor.
+ *****************************************************************************/
+VLMSliderManager::VLMSliderManager( intf_thread_t *_p_intf,
+ VLMBroadcastStreamPanel *_p_sp ) :
+ SliderManager( _p_intf )
+{
+ p_sp = _p_sp;
+ _slider = p_sp->p_slider;
+
+ b_slider_free = VLC_TRUE;
+ time_string = wxU( "0:00:00 / 0:00:00");
+}
+
+VLMSliderManager::~VLMSliderManager()
+{
+}
+
+/*****************************************************************************
+ * Private methods.
+ *****************************************************************************/
+
+void VLMSliderManager::UpdateInput()
+{
+ if( p_sp->GetStream()->p_media->i_instance == 0 )
+ {
+ p_input = NULL;
+ return;
+ }
+ /** FIXME !! */
+ p_input = p_sp->GetStream()->p_media->instance[0]->p_input;
+}
+
+void VLMSliderManager::UpdateButtons( vlc_bool_t b_play )
+{
+ if( b_play )
+ {
+ p_sp->TogglePlayButton( PLAYING_S );
+ }
+ else
+ {
+ p_sp->TogglePlayButton( PAUSE_S );
+ }
+}
+
+vlc_bool_t VLMSliderManager::IsShown()
+{
+ return _slider->IsEnabled();
+}
+
+void VLMSliderManager::ShowSlider()
+{
+ _slider->Enable();
+}
+
+void VLMSliderManager::HideSlider()
+{
+ _slider->SetValue( 0 );
+ _slider->Disable();
+ UpdateTime( "0:00:00", "0:00:00" );
+}
+
+vlc_bool_t VLMSliderManager::IsFree()
+{
+ return b_slider_free;
+}
+
+vlc_bool_t VLMSliderManager::IsPlaying()
+{
+ return VLC_TRUE; /* Is it really useful ? */
+}
+
+void VLMSliderManager::UpdateTime( char *psz_time, char *psz_total )
+{
+ time_string = wxU(psz_time) + wxString(wxT(" / ") ) +wxU(psz_total) ;
+}
+
+
+void VLMSliderManager::ProcessUpdate( wxScrollEvent &event )
+{
+
+#ifdef WIN32
+ if( event.GetEventType() == wxEVT_SCROLL_THUMBRELEASE
+ || event.GetEventType() == wxEVT_SCROLL_ENDSCROLL )
+ {
+#endif
+ if( i_slider_pos != event.GetPosition() && p_input )
+ {
+ vlc_value_t pos;
+ pos.f_float = (float)event.GetPosition() / (float)SLIDER_MAX_POS;
+
+ var_Set( p_input, "position", pos );
+ }
+
+#ifdef WIN32
+ b_slider_free = VLC_TRUE;
+ }
+ else
+ {
+ b_slider_free = VLC_FALSE;
+
+ if( p_input )
+ {
+ /* Update stream date */
+ char psz_time[ MSTRTIME_MAX_SIZE ], psz_total[ MSTRTIME_MAX_SIZE ];
+ mtime_t i_seconds;
+
+ i_seconds = var_GetTime( p_input, "length" ) / I64C(1000000 );
+ secstotimestr( psz_total, i_seconds );
+
+ i_seconds = var_GetTime( p_input, "time" ) / I64C(1000000 );
+ secstotimestr( psz_time, i_seconds );
+
+ time_string = wxU(psz_time) + wxString(wxT(" / ") ) +wxU(psz_total) ;
+ }
+ }
+#endif
+
+#undef WIN32
+}
--- /dev/null
+/*****************************************************************************
+ * vlm_slider_manager.hpp: Header for slider_manager
+ *****************************************************************************
+ * Copyright (C) 1999-2005 the VideoLAN team
+ * $Id: wxwidgets.h 12502 2005-09-09 19:38:01Z gbazin $
+ *
+ * Authors: Clément Stenac <zorglub@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+#ifndef _VLM_SLIDER_MANAGER_H_
+#define _VLM_SLIDER_MANAGER_H_
+
+#include "slider_manager.hpp"
+
+namespace wxvlc
+{
+ class VLMBroadcastStreamPanel;
+ /**
+ * This class manages a slider corresponding to the main input
+ */
+ class VLMSliderManager: public SliderManager
+ {
+ public:
+ VLMSliderManager( intf_thread_t *, VLMBroadcastStreamPanel * );
+ virtual ~VLMSliderManager();
+
+ wxString time_string;
+
+ void ProcessUpdate( wxScrollEvent & );
+
+ protected:
+ vlc_bool_t b_slider_free;
+ virtual void UpdateInput();
+ virtual void UpdateButtons( vlc_bool_t );
+ virtual void UpdateTime( char *, char *);
+
+ virtual vlc_bool_t IsShown();
+ virtual vlc_bool_t IsFree();
+ virtual vlc_bool_t IsPlaying();
+
+ virtual void HideSlider();
+ virtual void ShowSlider();
+
+ VLMBroadcastStreamPanel * p_sp;
+ };
+};
+
+#endif
--- /dev/null
+/*****************************************************************************
+ * vlm_stream.cpp : Implementation of the VLMStream class hierarchy
+ *****************************************************************************
+ * Copyright (C) 2000-2005 the VideoLAN team
+ * $Id: timer.cpp 11981 2005-08-03 15:03:23Z xtophe $
+ *
+ * Authors: Clément Stenac <zorglub@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+#include "dialogs/vlm/vlm_stream.hpp"
+#include "dialogs/vlm/vlm_wrapper.hpp"
+
+/*****************************************************************************
+ * VLMStream class
+ *****************************************************************************/
+VLMStream::VLMStream( intf_thread_t *_p_intf, vlm_media_t *_p_media,
+ VLMWrapper * _p_vlm )
+{
+ p_intf = _p_intf;
+ p_vlm = _p_vlm;
+ p_media = _p_media;
+}
+
+VLMStream::~VLMStream()
+{
+}
+
+void VLMStream::Enable()
+{
+ p_media->b_enabled = VLC_TRUE;
+}
+
+void VLMStream::Disable()
+{
+ p_media->b_enabled = VLC_FALSE;
+}
+
+void VLMStream::Delete()
+{
+ vlm_message_t *message;
+ string command = "del " + string( p_media->psz_name );
+ /* FIXME: Should be moved to vlm_Wrapper */
+ vlm_ExecuteCommand( p_vlm->GetVLM(), (char*)command.c_str(), & message );
+ vlm_MessageDelete( message );
+}
+
+/*****************************************************************************
+ * VLMBroadcastStream class
+ *****************************************************************************/
+VLMBroadcastStream::VLMBroadcastStream( intf_thread_t *_p_intf,
+ vlm_media_t *_p_media, VLMWrapper *_p_vlm ): VLMStream( _p_intf, _p_media, _p_vlm )
+{
+
+}
+
+VLMBroadcastStream::~VLMBroadcastStream()
+{
+}
+
+void VLMBroadcastStream::Play()
+{
+ vlm_message_t *message;
+ string command = "control " + string( p_media->psz_name ) + " play";
+ /* FIXME: Should be moved to vlm_Wrapper */
+ vlm_ExecuteCommand( p_vlm->GetVLM(), (char*)command.c_str(), & message );
+ vlm_MessageDelete( message );
+}
+
+void VLMBroadcastStream::Stop()
+{
+ vlm_message_t *message;
+ string command = "control " + string( p_media->psz_name ) + " stop";
+ vlm_ExecuteCommand( p_vlm->GetVLM(), (char*)command.c_str(), & message );
+ vlm_MessageDelete( message );
+}
+
+void VLMBroadcastStream::Pause()
+{
+ vlm_message_t *message;
+ string command = "control " + string( p_media->psz_name ) + " pause";
+ vlm_ExecuteCommand( p_vlm->GetVLM(), (char*)command.c_str(), & message );
+ vlm_MessageDelete( message );
+}
+
+/*****************************************************************************
+ * VLMVODStream class
+ *****************************************************************************/
+VLMVODStream::VLMVODStream( intf_thread_t *_p_intf, vlm_media_t *_p_media,
+ VLMWrapper *_p_vlm ): VLMStream( _p_intf, _p_media, _p_vlm )
+{
+
+}
+
+VLMVODStream::~VLMVODStream()
+{
+}
--- /dev/null
+/*****************************************************************************
+ * vlm_stream.hpp: Representation of a VLM Stream
+ *****************************************************************************
+ * Copyright (C) 1999-2005 the VideoLAN team
+ * $Id: vlm_stream.hpp 12502 2005-09-09 19:38:01Z gbazin $
+ *
+ * Authors: Clément Stenac <zorglub@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+/* FIXME : This is not WX-specific and should be moved to core */
+#ifndef _VLM_STREAM_H_
+#define _VLM_STREAM_H_
+
+#include <vlc/vlc.h>
+#include <vlc/intf.h>
+#include <vlc_vlm.h>
+
+#include <string>
+using namespace std;
+
+class VLMWrapper;
+
+/**
+ * This class encapsulates a VLM Stream and provides additional services
+ */
+class VLMStream
+{
+public:
+ VLMStream( intf_thread_t *, vlm_media_t * , VLMWrapper *);
+ virtual ~VLMStream();
+
+ vlm_media_t *p_media;
+
+
+ void Delete();
+ virtual void Disable();
+ virtual void Enable();
+
+ /* FIXME: provide accessor */
+ VLMWrapper *p_vlm;
+protected:
+ intf_thread_t *p_intf;
+ friend class VLMWrapper;
+private:
+};
+
+/**
+ * This class encapsulates a VLM Broadcast stream
+ */
+class VLMBroadcastStream : public VLMStream
+{
+public:
+ VLMBroadcastStream( intf_thread_t *, vlm_media_t *, VLMWrapper *);
+ virtual ~VLMBroadcastStream();
+
+ void Play();
+ void Pause();
+ void Stop();
+
+};
+
+/**
+ * This class encapsulates a VLM VOD Stream
+ */
+class VLMVODStream : public VLMStream
+{
+public:
+ VLMVODStream( intf_thread_t *, vlm_media_t *, VLMWrapper *);
+ virtual ~VLMVODStream();
+};
+
+#endif
--- /dev/null
+/*****************************************************************************
+ * vlm_streampanel:cpp
+ *****************************************************************************
+ * Copyright (C) 2000-2005 the VideoLAN team
+ * $Id: playlist.cpp 12582 2005-09-17 14:15:32Z zorglub $
+ *
+ * Authors: Clément Stenac <zorglub@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/OR MODIFy
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+#include "dialogs/vlm/vlm_streampanel.hpp"
+#include "dialogs/vlm/vlm_stream.hpp"
+#include "dialogs/vlm/vlm_slider_manager.hpp"
+
+#include "dialogs/vlm/vlm_panel.hpp"
+
+#include "bitmaps/play.xpm"
+#include "bitmaps/pause.xpm"
+#include "bitmaps/stop.xpm"
+#include "bitmaps/trash.xpm"
+
+enum
+{
+ BPlay_Event,
+ BStop_Event,
+ BSlider_Event,
+ BEdit_Event,
+ BTrash_Event,
+};
+
+BEGIN_EVENT_TABLE( VLMBroadcastStreamPanel, wxPanel )
+ EVT_BUTTON( BPlay_Event, VLMBroadcastStreamPanel::OnPlay )
+ EVT_BUTTON( BStop_Event, VLMBroadcastStreamPanel::OnStop )
+ EVT_BUTTON( BEdit_Event, VLMBroadcastStreamPanel::OnEdit )
+ EVT_BUTTON( BTrash_Event, VLMBroadcastStreamPanel::OnTrash )
+ EVT_COMMAND_SCROLL( BSlider_Event, VLMBroadcastStreamPanel::OnSliderUpdate )
+END_EVENT_TABLE()
+
+/***********************************************************************
+ * VLMStream
+ ***********************************************************************/
+VLMStreamPanel::VLMStreamPanel( intf_thread_t * _p_intf, wxWindow * _p_parent ):
+ wxPanel( _p_parent, -1, wxDefaultPosition, wxDefaultSize )
+{
+ p_intf = _p_intf;
+ p_slider = NULL;
+}
+
+VLMStreamPanel::~VLMStreamPanel()
+{
+}
+
+/***********************************************************************
+ * VLMBroadcastStream
+ ***********************************************************************/
+VLMBroadcastStreamPanel::VLMBroadcastStreamPanel( intf_thread_t* _p_intf,
+ wxWindow *_p_parent , VLMBroadcastStream *_stream ):
+ VLMStreamPanel( _p_intf, _p_parent ),
+ p_stream( _stream )
+{
+ wxStaticBox *box = new wxStaticBox( this, -1,
+ wxU( p_stream->p_media->psz_name ) );
+
+ wxStaticBoxSizer *box_sizer = new wxStaticBoxSizer( box, wxHORIZONTAL );
+
+ play_button = new wxBitmapButton( this, BPlay_Event,
+ wxBitmap( play_xpm ) );
+ play_button->SetToolTip( wxU(_("Play/Pause") ) );
+ box_sizer->Add( play_button, 0, wxEXPAND | wxALL, 5 );
+
+ wxBitmapButton *stop_button = new wxBitmapButton( this, BStop_Event,
+ wxBitmap( stop_xpm ) );
+ stop_button->SetToolTip( wxU(_("Stop") ) );
+ box_sizer->Add( stop_button, 0, wxEXPAND | wxALL, 5 );
+
+ p_slider = new wxSlider( this, BSlider_Event, 0, 0,
+ SLIDER_MAX_POS, wxDefaultPosition, wxDefaultSize );
+ p_slider->Disable();
+ box_sizer->Add( p_slider, 1, wxEXPAND | wxALL, 5 );
+
+ p_time = new wxStaticText( this, -1, wxU( "0:00:00 / 0:00:00") );
+ box_sizer->Add( p_time , 0, wxEXPAND | wxALL, 5 );
+
+ wxBitmapButton *edit_button = new wxBitmapButton( this, BEdit_Event,
+ wxBitmap( trash_xpm ) );
+ edit_button->SetToolTip( wxU( _("Edit") ) );
+ box_sizer->Add( edit_button, 0, wxEXPAND | wxALL , 5 );
+
+ wxBitmapButton *trash_button = new wxBitmapButton( this, BTrash_Event,
+ wxBitmap( trash_xpm ) );
+ trash_button->SetToolTip( wxU( _("Delete" ) ) );
+ box_sizer->Add( trash_button, 0, wxEXPAND | wxALL , 5 );
+
+ box_sizer->Layout();
+ SetSizerAndFit( box_sizer );
+
+ p_sm = new VLMSliderManager( p_intf, this );
+}
+
+VLMBroadcastStreamPanel::~VLMBroadcastStreamPanel()
+{
+}
+
+void VLMBroadcastStreamPanel::TogglePlayButton( int state )
+{
+ if( state == PLAYING_S )
+ {
+ play_button->SetBitmapLabel( wxBitmap( pause_xpm ) );
+ }
+ if( state == PAUSE_S )
+ {
+ play_button->SetBitmapLabel( wxBitmap( play_xpm ) );
+ }
+}
+
+void VLMBroadcastStreamPanel::Update()
+{
+ /* Update managed slider */
+ p_sm->Update();
+ p_time->SetLabel( p_sm->time_string );
+}
+
+void VLMBroadcastStreamPanel::OnPlay( wxCommandEvent &event )
+{
+ /* FIXME: Factorize input / VLM code here */
+ /* Handle multiple instance */
+ if( p_stream->p_media->i_instance > 0 &&
+ p_stream->p_media->instance[0]->p_input )
+ {
+ vlc_value_t val;
+ vlc_object_yield( p_stream->p_media->instance[0]->p_input );
+ var_Get( p_stream->p_media->instance[0]->p_input, "state", &val );
+ if( val.i_int != PAUSE_S )
+ {
+ /* Pause */
+ val.i_int = PAUSE_S;
+ }
+ else
+ {
+ /* Resume */
+ val.i_int = PLAYING_S;
+ }
+ var_Set( p_stream->p_media->instance[0]->p_input, "state", val );
+ TogglePlayButton( val.i_int );
+ vlc_object_release( p_stream->p_media->instance[0]->p_input );
+ }
+ else
+ {
+ p_stream->Play();
+ TogglePlayButton( PLAYING_S );
+ }
+}
+
+void VLMBroadcastStreamPanel::OnStop( wxCommandEvent &event )
+{
+ p_stream->Stop();
+}
+
+void VLMBroadcastStreamPanel::OnEdit( wxCommandEvent &event )
+{
+ VLMEditStreamFrame *p_frame =
+ new VLMEditStreamFrame( p_intf, this, p_stream->p_vlm, VLC_TRUE,
+ p_stream );
+ p_frame->Show();
+}
+
+void VLMBroadcastStreamPanel::OnTrash( wxCommandEvent &event )
+{
+ p_stream->Delete();
+}
+
+void VLMBroadcastStreamPanel::OnSliderUpdate( wxScrollEvent& event )
+{
+ p_sm->ProcessUpdate( event );
+}
+
+/***********************************************************************
+ * VLMVODStream
+ ***********************************************************************/
+VLMVODStreamPanel::VLMVODStreamPanel( intf_thread_t* _p_intf,
+ wxWindow *_p_parent , VLMVODStream *_stream ):
+ VLMStreamPanel( _p_intf, _p_parent ),
+ p_stream( _stream )
+{
+}
+
+VLMVODStreamPanel::~VLMVODStreamPanel()
+{
+}
--- /dev/null
+/*****************************************************************************
+ * vlm_streampanel.hpp: Panel for a VLM stream
+ *****************************************************************************
+ * Copyright (C) 1999-2005 the VideoLAN team
+ * $Id: wxwidgets.h 12502 2005-09-09 19:38:01Z gbazin $
+ *
+ * Authors: Clément Stenac <zorglub@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+#ifndef _VLM_STREAMPANEL_H_
+#define _VLM_STREAMPANEL_H_
+
+#include "wxwidgets.hpp"
+
+class VLMStream;
+class VLMBroadcastStream;
+class VLMVODStream;
+
+namespace wxvlc
+{
+ class VLMSliderManager;
+
+ /**
+ * This class represents the panel for a VLM Stream
+ * This class is abstract, it needs to be subclassed
+ */
+ class VLMStreamPanel : public wxPanel
+ {
+ public:
+ VLMStreamPanel( intf_thread_t *, wxWindow * );
+ virtual ~VLMStreamPanel();
+
+ virtual void TogglePlayButton( int ) {};
+ wxSlider *p_slider;
+
+ virtual void Update() = 0;
+ protected:
+ intf_thread_t *p_intf;
+ vlc_bool_t b_free;
+ vlc_bool_t b_new; ///< Is it a new stream ?
+ vlc_bool_t b_found; ///< Have we found the stream here ?
+ friend class VLMPanel;
+
+
+ private:
+ };
+
+ /**
+ * This class represents the panel for a Broadcast VLM Stream
+ */
+ class VLMBroadcastStreamPanel : public VLMStreamPanel
+ {
+ public:
+ VLMBroadcastStreamPanel( intf_thread_t *, wxWindow *,
+ VLMBroadcastStream * );
+ virtual ~VLMBroadcastStreamPanel();
+ VLMBroadcastStream *GetStream() { return p_stream; }
+
+ vlc_bool_t b_slider_free;
+
+ VLMSliderManager *p_sm;
+
+ virtual void Update();
+
+ virtual void TogglePlayButton( int );
+ protected:
+
+ private:
+ VLMBroadcastStream *p_stream;
+ DECLARE_EVENT_TABLE();
+
+ void OnPlay( wxCommandEvent &);
+ void OnStop( wxCommandEvent &);
+ void OnEdit( wxCommandEvent &);
+ void OnTrash( wxCommandEvent &);
+ void OnSliderUpdate( wxScrollEvent &);
+
+
+ wxBitmapButton *play_button;
+
+ wxStaticText *p_time;
+ };
+
+ /**
+ * This class represents the panel for a VOD VLM Stream
+ */
+ class VLMVODStreamPanel : public VLMStreamPanel
+ {
+ public:
+ VLMVODStreamPanel( intf_thread_t *, wxWindow *,
+ VLMVODStream * );
+ virtual ~VLMVODStreamPanel();
+
+ VLMVODStream *GetStream() { return p_stream; }
+
+ virtual void Update() {}
+ protected:
+
+ private:
+ VLMVODStream *p_stream;
+ };
+};
+
+#endif
--- /dev/null
+/*****************************************************************************
+ * vlm_wrapper.cpp : Wrapper around VLM
+ *****************************************************************************
+ * Copyright (C) 2000-2005 the VideoLAN team
+ * $Id: timer.cpp 11981 2005-08-03 15:03:23Z xtophe $
+ *
+ * Authors: Clément Stenac <zorglub@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+/* FIXME: This is not wx-specific */
+
+#include "dialogs/vlm/vlm_wrapper.hpp"
+
+VLMWrapper::VLMWrapper( intf_thread_t *_p_intf )
+{
+ p_intf = _p_intf;
+ p_vlm = NULL;
+}
+
+VLMWrapper::~VLMWrapper()
+{
+ /* FIXME :you have to destroy vlm here to close
+ * but we shouldn't destroy vlm here in case somebody else wants it */
+ if( p_vlm )
+ vlm_Delete( p_vlm );
+}
+
+vlc_bool_t VLMWrapper::AttachVLM()
+{
+ p_vlm = vlm_New( p_intf );
+ return p_vlm ? VLC_TRUE: VLC_FALSE ;
+}
+
+void VLMWrapper::LockVLM()
+{
+ vlc_mutex_lock( &p_vlm->object_lock );
+}
+
+void VLMWrapper::UnlockVLM()
+{
+ vlc_mutex_unlock( &p_vlm->object_lock );
+}
+
+void VLMWrapper::AddBroadcast( const char* name, const char* input,
+ const char* output,
+ vlc_bool_t b_enabled, vlc_bool_t b_loop )
+{
+ vlm_message_t *message;
+ string command = "new " + string(name) + " broadcast";
+ vlm_ExecuteCommand( p_vlm, command.c_str(), &message );
+ vlm_MessageDelete( message );
+ EditBroadcast( name, input, output, b_enabled, b_loop );
+}
+
+void VLMWrapper::EditBroadcast( const char* name, const char* input,
+ const char* output,
+ vlc_bool_t b_enabled, vlc_bool_t b_loop )
+{
+ vlm_message_t *message;
+ string command;
+ command = "setup " + string(name) + " inputdel all";
+ vlm_ExecuteCommand( p_vlm, command.c_str(), &message );
+ vlm_MessageDelete( message );
+ command = "setup " + string(name) + " input " + string(input);
+ vlm_ExecuteCommand( p_vlm, command.c_str(), &message );
+ vlm_MessageDelete( message );
+ if( strlen(output) > 0 )
+ {
+ command = "setup " + string(name) + " output " + string(output);
+ vlm_ExecuteCommand( p_vlm, (char*)command.c_str(), &message );
+ vlm_MessageDelete( message );
+ }
+ if( b_enabled )
+ {
+ command = "setup " + string(name) + " enabled";
+ vlm_ExecuteCommand( p_vlm, command.c_str(), &message );
+ vlm_MessageDelete( message );
+ }
+ if( b_loop )
+ {
+ command = "setup " + string(name) + " loop";
+ vlm_ExecuteCommand( p_vlm, command.c_str(), &message );
+ vlm_MessageDelete( message );
+ }
+}
+
+void VLMWrapper::AddVod( const char* name, const char* input,
+ const char* output,
+ vlc_bool_t b_enabled, vlc_bool_t b_loop )
+{
+ vlm_message_t *message;
+ string command = "new " + string(name) + " vod";
+ vlm_ExecuteCommand( p_vlm, command.c_str(), &message );
+ vlm_MessageDelete( message );
+ EditVod( name, input, output, b_enabled, b_loop );
+}
+
+void VLMWrapper::EditVod( const char* name, const char* input,
+ const char* output,
+ vlc_bool_t b_enabled, vlc_bool_t b_loop )
+{
+ vlm_message_t *message;
+ string command;
+ command = "setup " + string(name) + " input " + string(input);
+ vlm_ExecuteCommand( p_vlm, command.c_str(), &message );
+ vlm_MessageDelete( message );
+ if( strlen(output) > 0 )
+ {
+ command = "setup " + string(name) + " output " + string(output);
+ vlm_ExecuteCommand( p_vlm, (char*)command.c_str(), &message );
+ vlm_MessageDelete( message );
+ }
+ if( b_enabled )
+ {
+ command = "setup " + string(name) + " enabled";
+ vlm_ExecuteCommand( p_vlm, command.c_str(), &message );
+ vlm_MessageDelete( message );
+ }
+}
--- /dev/null
+/*****************************************************************************
+ * vlm_wrapper.hpp: Wrapper for VLM
+ *****************************************************************************
+ * Copyright (C) 1999-2005 the VideoLAN team
+ * $Id: wxwidgets.h 12502 2005-09-09 19:38:01Z gbazin $
+ *
+ * Authors: Clément Stenac <zorglub@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+/* This is not WX-specific */
+
+#include <vlc/vlc.h>
+#include <vlc/intf.h>
+#include <vlc_vlm.h>
+#include "dialogs/vlm/vlm_stream.hpp"
+
+#include <vector>
+#include <string>
+using namespace std;
+
+class VLMWrapper
+{
+public:
+ VLMWrapper( intf_thread_t * );
+ virtual ~VLMWrapper();
+
+ vlc_bool_t AttachVLM();
+ void LockVLM();
+ void UnlockVLM();
+
+ void AddBroadcast( const char*, const char*, const char*,
+ vlc_bool_t b_enabled = VLC_TRUE,
+ vlc_bool_t b_loop = VLC_TRUE );
+ void EditBroadcast( const char*, const char*, const char*,
+ vlc_bool_t b_enabled = VLC_TRUE,
+ vlc_bool_t b_loop = VLC_TRUE );
+ void AddVod( const char*, const char*, const char*,
+ vlc_bool_t b_enabled = VLC_TRUE,
+ vlc_bool_t b_loop = VLC_TRUE );
+ void EditVod( const char*, const char*, const char*,
+ vlc_bool_t b_enabled = VLC_TRUE,
+ vlc_bool_t b_loop = VLC_TRUE );
+
+ unsigned int NbMedia() { if( p_vlm ) return p_vlm->i_media; return 0; }
+ vlm_media_t *GetMedia( int i )
+ { if( p_vlm ) return p_vlm->media[i]; return NULL; }
+
+ vlm_t* GetVLM() { return p_vlm; }
+
+protected:
+
+private:
+ vlm_t *p_vlm;
+ intf_thread_t *p_intf;
+
+};
/*****************************************************************************
* Preamble
*****************************************************************************/
-#include <stdlib.h> /* malloc(), free() */
-#include <errno.h> /* ENOMEM */
-#include <string.h> /* strerror() */
-#include <stdio.h>
-
-#include <vlc/vlc.h>
-#include <vlc/intf.h>
-#include "network.h"
-
-#include "wxwidgets.h"
-
+#include "dialogs/wizard.hpp"
#include "streamdata.h"
+#include "dialogs/open.hpp"
#include <wx/statline.h>
+#include <network.h>
class wizHelloPage;
class wizInputPage;
--- /dev/null
+/*****************************************************************************
+ * wizard.hpp: Stream wizard headers
+ *****************************************************************************
+ * Copyright (C) 1999-2005 the VideoLAN team
+ * $Id: wxwidgets.h 12670 2005-09-25 11:16:31Z zorglub $
+ *
+ * Authors: Clément Stenac <zorglub@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+#ifndef _WXVLC_WIZARD_H_
+#define _WXVLC_WIZARD_H_
+
+#include "wxwidgets.hpp"
+#include <wx/wizard.h>
+
+namespace wxvlc
+{
+ /* Wizard */
+ class WizardDialog : public wxWizard
+ {
+ public:
+ /* Constructor */
+ WizardDialog( intf_thread_t *, wxWindow *p_parent, char *, int, int );
+ virtual ~WizardDialog();
+ 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 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 const *mux );
+ void Run();
+ int i_action;
+ char *method;
+
+ protected:
+ int vb,ab;
+ int i_from, i_to, i_ttl;
+ char *vcodec , *acodec , *address , *mrl , *mux ;
+ char *psz_sap_name;
+ bool b_sap;
+ DECLARE_EVENT_TABLE();
+
+ intf_thread_t *p_intf;
+ };
+};
+
+#endif
#include <math.h>
-#include "wxwidgets.h"
+#include "extrapanel.hpp"
/*****************************************************************************
* Local class declarations.
--- /dev/null
+/*****************************************************************************
+ * extrapanel.hpp: Headers for the extra panel window
+ *****************************************************************************
+ * Copyright (C) 1999-2005 the VideoLAN team
+ * $Id: wxwidgets.h 12670 2005-09-25 11:16:31Z zorglub $
+ *
+ * Authors: Clément Stenac <zorglub@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+#ifndef _WXVLC_EXTRAPANEL_H_
+#define _WXVLC_EXTRAPANEL_H_
+
+#include "wxwidgets.hpp"
+
+
+namespace wxvlc
+{
+ /* Extended panel */
+ class ExtraPanel: public wxPanel
+ {
+ public:
+ /* Constructor */
+ ExtraPanel( intf_thread_t *p_intf, wxWindow *p_parent );
+ virtual ~ExtraPanel();
+
+ /// \todo Check access level for these
+ wxStaticBox *adjust_box;
+ wxButton *restoredefaults_button;
+ wxSlider *brightness_slider;
+ wxSlider *contrast_slider;
+ wxSlider *saturation_slider;
+ wxSlider *hue_slider;
+ wxSlider *gamma_slider;
+
+ wxStaticBox *other_box;
+ wxComboBox *ratio_combo;
+
+ char *psz_bands;
+ float f_preamp;
+ vlc_bool_t b_update;
+ private:
+ /* General layout */
+ wxPanel *VideoPanel( wxWindow * );
+ wxPanel *EqzPanel( wxWindow * );
+ wxPanel *AudioPanel( wxWindow * );
+ wxNotebook *notebook;
+
+ /* Equalizer */
+ wxCheckBox *eq_chkbox;
+ wxCheckBox *eq_2p_chkbox;
+ wxButton *eq_restoredefaults_button;
+ wxSlider *smooth_slider;
+ wxStaticText *smooth_text;
+ wxSlider *preamp_slider;
+ wxStaticText * preamp_text;
+ int i_smooth;
+ wxSlider *band_sliders[10];
+ wxStaticText *band_texts[10];
+ int i_values[10];
+
+ void OnEnableEqualizer( wxCommandEvent& );
+ void OnRestoreDefaults( wxCommandEvent& );
+ void OnChangeEqualizer( wxScrollEvent& );
+ void OnEqSmooth( wxScrollEvent& );
+ void OnPreamp( wxScrollEvent& );
+ void OnEq2Pass( wxCommandEvent& );
+ void OnEqRestore( wxCommandEvent& );
+
+ /* Video */
+ void OnEnableAdjust( wxCommandEvent& );
+ void OnAdjustUpdate( wxScrollEvent& );
+ void OnRatio( wxCommandEvent& );
+ void OnFiltersInfo( wxCommandEvent& );
+ void OnSelectFilter( wxCommandEvent& );
+
+ /* Audio */
+ void OnHeadphone( wxCommandEvent& );
+ void OnNormvol( wxCommandEvent& );
+ void OnNormvolSlider( wxScrollEvent& );
+
+ void CheckAout();
+ void OnIdle( wxIdleEvent& );
+
+ DECLARE_EVENT_TABLE();
+
+ intf_thread_t *p_intf;
+ vlc_bool_t b_my_update;
+ wxWindow *p_parent;
+ };
+};
+#if 0
+/* Extended Window */
+class ExtraWindow: public wxFrame
+{
+public:
+ /* Constructor */
+ ExtraWindow( intf_thread_t *p_intf, wxWindow *p_parent, wxPanel *panel );
+ virtual ~ExtraWindow();
+
+private:
+
+ wxPanel *panel;
+
+ DECLARE_EVENT_TABLE();
+
+ intf_thread_t *p_intf;
+};
+#endif
+
+#endif
/*****************************************************************************
* Preamble
*****************************************************************************/
-#include <vlc/vlc.h>
-#include <vlc/aout.h>
-#include <vlc/vout.h>
-#include <vlc/input.h>
-#include <vlc/intf.h>
+#include "interface.hpp"
+#include "extrapanel.hpp"
+#include "timer.hpp"
+#include "video.hpp"
+#include <vlc_keys.h>
+
#include "charset.h"
-#include "wxwidgets.h"
+#include <vlc/aout.h>
+#include "charset.h"
/* include the toolbar graphics */
#include "bitmaps/play.xpm"
* (where it is special and put into the "Apple" menu) */
About_Event = wxID_ABOUT,
UpdateVLC_Event,
+ VLM_Event,
Iconize_Event
};
EVT_MENU(Exit_Event, Interface::OnExit)
EVT_MENU(About_Event, Interface::OnAbout)
EVT_MENU(UpdateVLC_Event, Interface::OnShowDialog)
+ EVT_MENU(VLM_Event, Interface::OnShowDialog)
EVT_MENU(Playlist_Event, Interface::OnShowDialog)
EVT_MENU(Logs_Event, Interface::OnShowDialog)
GetPosition(), GetSize() );
}
- PopEventHandler(true);
+ PopEventHandler(true);
if( video_window ) delete video_window;
view_menu->Append( Logs_Event, wxU(_("&Messages...\tCtrl-M")) );
view_menu->Append( FileInfo_Event,
wxU(_("Stream and Media &info...\tCtrl-I")) );
+ view_menu->Append( VLM_Event,
+ wxU(_("VLM Control...\tCtrl-I")) );
/* Create the "Auto-generated" menus */
p_settings_menu = SettingsMenu( p_intf, this );
void Interface::HideSlider( bool layout )
{
+ fprintf( stderr, "Hiding slider\n");
ShowSlider( false, layout );
}
break;
case OpenAdv_Event:
i_id = INTF_DIALOG_FILE;
+ break;
case OpenFile_Event:
i_id = INTF_DIALOG_FILE;
break;
case UpdateVLC_Event:
i_id = INTF_DIALOG_UPDATEVLC;
break;
+ case VLM_Event:
+ i_id = INTF_DIALOG_VLM;
+ break;
default:
i_id = INTF_DIALOG_FILE;
break;
frame_sizer->Fit(this);
}
-#if 0
- if( b_undock == VLC_TRUE )
- {
- fprintf(stderr,"Deleting window\n");
- if( extra_window )
- {
- delete extra_window;
- extra_window = NULL;
- }
- }
- else
- {
- extra_frame->Hide();
- frame_sizer->Hide( extra_frame );
- frame_sizer->Layout();
- frame_sizer->Fit(this);
- }
- }
- else
- {
- if( b_undock == VLC_TRUE )
- {
- fprintf(stderr,"Creating window\n");
- extra_frame->Hide();
- frame_sizer->Hide( extra_frame );
-#if (wxCHECK_VERSION(2,5,0))
- frame_sizer->Detach( extra_frame );
-#else
- frame_sizer->Remove( extra_frame );
-#endif
- frame_sizer->Layout();
- frame_sizer->Fit(this);
- extra_window = new ExtraWindow( p_intf, this, extra_frame );
- }
- else
- {
- fprintf(stderr,"Deleting window\n");
- if( extra_window )
- {
- delete extra_window;
- }
- extra_frame->Show();
- frame_sizer->Show( extra_frame );
- frame_sizer->Layout();
- frame_sizer->Fit(this);
- }
- }
-}
-
-void Interface::OnUndock(wxCommandEvent& event)
-{
- b_undock = (b_undock == VLC_TRUE ? VLC_FALSE : VLC_TRUE );
-
- if( b_extra == VLC_TRUE )
- {
- if( b_undock == VLC_FALSE )
- {
- fprintf(stderr,"Deleting window\n");
- if( extra_window )
- {
- delete extra_window;
- extra_window = NULL;
- }
- extra_frame->Show();
- frame_sizer->Show( extra_frame );
- frame_sizer->Layout();
- frame_sizer->Fit(this);
- }
- else
- {
- fprintf(stderr,"Creating window\n");
- extra_frame->Hide();
- frame_sizer->Hide( extra_frame );
-#if (wxCHECK_VERSION(2,5,0))
- frame_sizer->Detach( extra_frame );
-#else
- frame_sizer->Remove( extra_frame );
-#endif
- frame_sizer->Layout();
- frame_sizer->Fit(this);
- extra_window = new ExtraWindow( p_intf, this, extra_frame );
- }
- }
-}
-#endif
-
-
void Interface::OnPlayStream( wxCommandEvent& WXUNUSED(event) )
{
PlayStream();
return;
}
- /* FIXME --fenrir */
-#if 0
- if( p_playlist->p_input != NULL )
- {
- vlc_mutex_lock( &p_playlist->p_input->stream.stream_lock );
- if( p_playlist->p_input->stream.p_selected_area->i_id > 1 )
- {
- vlc_value_t val; val.b_bool = VLC_TRUE;
- vlc_mutex_unlock( &p_playlist->p_input->stream.stream_lock );
- var_Set( p_playlist->p_input, "prev-title", val );
- } else
- vlc_mutex_unlock( &p_playlist->p_input->stream.stream_lock );
- }
- vlc_mutex_unlock( &p_playlist->object_lock );
-#endif
-
playlist_Prev( p_playlist );
vlc_object_release( p_playlist );
}
{
return;
}
-
- /* FIXME --fenrir */
-#if 0
- var_Change( p_input, "title", VLC_VAR_CHOICESCOUNT, &val, NULL );
- vlc_mutex_lock( &p_playlist->object_lock );
- if( p_playlist->p_input != NULL )
- {
- vlc_mutex_lock( &p_playlist->p_input->stream.stream_lock );
- if( p_playlist->p_input->stream.i_area_nb > 1 &&
- p_playlist->p_input->stream.p_selected_area->i_id <
- p_playlist->p_input->stream.i_area_nb - 1 )
- {
- vlc_value_t val; val.b_bool = VLC_TRUE;
- vlc_mutex_unlock( &p_playlist->p_input->stream.stream_lock );
- var_Set( p_playlist->p_input, "next-title", val );
- } else
- vlc_mutex_unlock( &p_playlist->p_input->stream.stream_lock );
- }
- vlc_mutex_unlock( &p_playlist->object_lock );
-#endif
playlist_Next( p_playlist );
vlc_object_release( p_playlist );
}
for( size_t i = 0; i < filenames.GetCount(); i++ )
{
char *psz_utf8 = wxFromLocale( filenames[i] );
+
playlist_Add( p_playlist, psz_utf8, psz_utf8,
PLAYLIST_APPEND | ((i | b_enqueue) ? 0 : PLAYLIST_GO),
PLAYLIST_END );
--- /dev/null
+/*****************************************************************************
+ * interface.hpp: Main interface headers
+ *****************************************************************************
+ * Copyright (C) 1999-2005 the VideoLAN team
+ * $Id: wxwidgets.h 12670 2005-09-25 11:16:31Z zorglub $
+ *
+ * Authors: Gildas Bazin <gbazin@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+#ifndef _WXVLC_INTERFACE_H_
+#define _WXVLC_INTERFACE_H_
+
+#include "wxwidgets.hpp"
+
+#include <wx/dnd.h>
+#include <wx/accel.h>
+#include <wx/taskbar.h>
+//#include "vlc_keys.h"
+
+
+namespace wxvlc
+{
+ class Timer;
+ class Interface;
+
+#if wxUSE_DRAG_AND_DROP
+ /* Drag and Drop class */
+ class DragAndDrop: public wxFileDropTarget
+ {
+ public:
+ DragAndDrop( intf_thread_t *_p_intf, vlc_bool_t b_enqueue = VLC_FALSE );
+ virtual bool OnDropFiles( wxCoord x, wxCoord y,
+ const wxArrayString& filenames );
+
+ private:
+ intf_thread_t *p_intf;
+ vlc_bool_t b_enqueue;
+ };
+#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, 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
+
+ wxTimer m_controls_timer;
+ wxTimer m_slider_timer;
+
+ private:
+ void SetupHotkeys();
+ void CreateOurMenuBar();
+ void CreateOurToolBar();
+ void CreateOurExtendedPanel();
+ void CreateOurSlider();
+ 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 OnOpenSat( wxCommandEvent& event );
+
+ void OnExtended( wxCommandEvent& event );
+ //void OnUndock( wxCommandEvent& event );
+
+ void OnBookmarks( wxCommandEvent& event );
+ void OnShowDialog( wxCommandEvent& event );
+ void OnPlayStream( wxCommandEvent& event );
+ void OnStopStream( wxCommandEvent& event );
+ void OnSliderUpdate( wxScrollEvent& event );
+ void OnPrevStream( wxCommandEvent& event );
+ void OnNextStream( 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__ )
+ void OnContextMenu2(wxContextMenuEvent& event);
+ #endif
+ void OnContextMenu(wxMouseEvent& event);
+
+ void OnControlEvent( wxCommandEvent& event );
+
+ DECLARE_EVENT_TABLE();
+
+ Timer *timer;
+ intf_thread_t *p_intf;
+
+ wxWindow *video_window;
+
+ int i_old_playing_status;
+
+ /* For auto-generated menus */
+ wxMenu *p_settings_menu;
+ wxMenu *p_audio_menu;
+ wxMenu *p_video_menu;
+ wxMenu *p_navig_menu;
+ };
+
+
+ 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];
+ };
+
+
+ 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;
+ };
+};
+
+/// \todo Move this to class
+void PopupMenu( intf_thread_t *, wxWindow *, const wxPoint& );
+wxMenu *SettingsMenu( intf_thread_t *, wxWindow *, wxMenu * = NULL );
+wxMenu *AudioMenu( intf_thread_t *, wxWindow *, wxMenu * = NULL );
+wxMenu *VideoMenu( intf_thread_t *, wxWindow *, wxMenu * = NULL );
+wxMenu *NavigMenu( intf_thread_t *, wxWindow *, wxMenu * = NULL );
+
+
+#endif
--- /dev/null
+/*****************************************************************************
+ * slider_manager.cpp : Manage an input slider
+ *****************************************************************************
+ * Copyright (C) 2000-2005 the VideoLAN team
+ * $Id: timer.cpp 11981 2005-08-03 15:03:23Z xtophe $
+ *
+ * Authors: Clément Stenac <zorglub@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+#include "main_slider_manager.hpp"
+#include "interface.hpp"
+
+#include <vlc_meta.h>
+
+/*****************************************************************************
+ * Constructor.
+ *****************************************************************************/
+MainSliderManager::MainSliderManager( intf_thread_t *_p_intf,
+ Interface *_p_main_intf ) :
+ SliderManager( _p_intf )
+{
+ p_main_intf = _p_main_intf;
+ _slider = p_main_intf->slider;
+}
+
+MainSliderManager::~MainSliderManager()
+{
+ vlc_mutex_lock( &p_intf->change_lock );
+ if( p_intf->p_sys->p_input ) vlc_object_release( p_intf->p_sys->p_input );
+ p_intf->p_sys->p_input = NULL;
+ vlc_mutex_unlock( &p_intf->change_lock );
+}
+
+/*****************************************************************************
+ * Private methods.
+ *****************************************************************************/
+
+void MainSliderManager::UpdateInput()
+{
+ playlist_t *p_playlist =
+ (playlist_t *)vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
+ FIND_ANYWHERE );
+ if( p_playlist != NULL )
+ {
+ LockPlaylist( p_intf->p_sys, p_playlist );
+ p_input = p_intf->p_sys->p_input = p_playlist->p_input;
+ if( p_intf->p_sys->p_input )
+ vlc_object_yield( p_intf->p_sys->p_input );
+ UnlockPlaylist( p_intf->p_sys, p_playlist );
+ vlc_object_release( p_playlist );
+ }
+}
+
+void MainSliderManager::UpdateNowPlaying()
+{
+ char *psz_now_playing = vlc_input_item_GetInfo(
+ p_intf->p_sys->p_input->input.p_item,
+ _("Meta-information"), _(VLC_META_NOW_PLAYING) );
+ if( psz_now_playing && *psz_now_playing )
+ {
+ p_main_intf->statusbar->SetStatusText(
+ wxString(wxU(psz_now_playing)) + wxT( " - " ) +
+ wxU(p_intf->p_sys->p_input->input.p_item->psz_name), 2 );
+ }
+ else
+ {
+ p_main_intf->statusbar->SetStatusText(
+ wxU(p_intf->p_sys->p_input->input.p_item->psz_name), 2 );
+ }
+ free( psz_now_playing );
+}
+
+void MainSliderManager::UpdateButtons( vlc_bool_t b_play )
+{
+ if( b_play )
+ {
+ p_main_intf->TogglePlayButton( PLAYING_S );
+#ifdef wxHAS_TASK_BAR_ICON
+ if( p_main_intf->p_systray )
+ {
+ p_main_intf->p_systray->UpdateTooltip(
+ wxU( p_intf->p_sys->p_input->input.p_item->psz_name ) +
+ wxString(wxT(" - ")) + wxU(_("Playing")));
+ }
+#endif
+ }
+ else
+ {
+ p_main_intf->TogglePlayButton( PAUSE_S );
+ p_main_intf->statusbar->SetStatusText( wxT(""), 0 );
+ p_main_intf->statusbar->SetStatusText( wxT(""), 2 );
+#ifdef wxHAS_TASK_BAR_ICON
+ if( p_main_intf->p_systray )
+ {
+ p_main_intf->p_systray->UpdateTooltip( wxString(wxT("VLC media player - ")) + wxU(_("Stopped")) );
+ }
+#endif
+ }
+}
+
+void MainSliderManager::HideControls()
+{
+ p_main_intf->m_controls_timer.Start(200, wxTIMER_ONE_SHOT);
+}
+
+void MainSliderManager::DontHide()
+{
+ p_main_intf->m_controls_timer.Stop();
+
+ /* New input or stream map change */
+ p_intf->p_sys->b_playing = VLC_TRUE;
+}
+
+void MainSliderManager::UpdateDiscButtons()
+{
+ vlc_value_t val;
+ var_Change( p_input, "title", VLC_VAR_CHOICESCOUNT, &val, NULL );
+ if( val.i_int > 0 && !p_main_intf->disc_frame->IsShown() )
+ {
+ vlc_value_t val;
+
+ #define HELP_MENU N_("Menu")
+ #define HELP_PCH N_("Previous chapter")
+ #define HELP_NCH N_("Next chapter")
+ #define HELP_PTR N_("Previous track")
+ #define HELP_NTR N_("Next track")
+
+ var_Change( p_input, "chapter", VLC_VAR_CHOICESCOUNT, &val, NULL );
+
+ if( val.i_int > 0 )
+ {
+ p_main_intf->disc_menu_button->Show();
+ p_main_intf->disc_sizer->Show(
+ p_main_intf->disc_menu_button );
+ p_main_intf->disc_sizer->Layout();
+ p_main_intf->disc_sizer->Fit(
+ p_main_intf->disc_frame );
+ p_main_intf->disc_menu_button->SetToolTip(
+ wxU(_( HELP_MENU ) ) );
+ p_main_intf->disc_prev_button->SetToolTip(
+ wxU(_( HELP_PCH ) ) );
+ p_main_intf->disc_next_button->SetToolTip(
+ wxU(_( HELP_NCH ) ) );
+ }
+ else
+ {
+ p_main_intf->disc_menu_button->Hide();
+ p_main_intf->disc_sizer->Hide(
+ p_main_intf->disc_menu_button );
+ p_main_intf->disc_prev_button->SetToolTip(
+ wxU(_( HELP_PTR ) ) );
+ p_main_intf->disc_next_button->SetToolTip(
+ wxU(_( HELP_NTR ) ) );
+ }
+
+ p_main_intf->ShowDiscFrame();
+ }
+ else if( val.i_int == 0 && p_main_intf->disc_frame->IsShown() )
+ {
+ p_main_intf->HideDiscFrame();
+ }
+}
+
+vlc_bool_t MainSliderManager::IsShown()
+{
+ return p_main_intf->slider_frame->IsShown();
+}
+
+void MainSliderManager::ShowSlider()
+{
+ p_main_intf->ShowSlider();
+}
+
+void MainSliderManager::HideSlider()
+{
+ p_main_intf->m_slider_timer.Start( 200, wxTIMER_ONE_SHOT );
+}
+
+vlc_bool_t MainSliderManager::IsFree()
+{
+ return p_intf->p_sys->b_slider_free;
+}
+
+vlc_bool_t MainSliderManager::IsPlaying()
+{
+ return p_intf->p_sys->b_playing;
+}
+
+void MainSliderManager::UpdateTime( char *psz_time, char *psz_total )
+{
+ p_main_intf->statusbar->SetStatusText(
+ wxU(psz_time) + wxString(wxT(" / ")) +wxU(psz_total), 0 );
+}
--- /dev/null
+/*****************************************************************************
+ * slider_manager.hpp: Header for slider_manager
+ *****************************************************************************
+ * Copyright (C) 1999-2005 the VideoLAN team
+ * $Id: wxwidgets.h 12502 2005-09-09 19:38:01Z gbazin $
+ *
+ * Authors: Clément Stenac <zorglub@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+#ifndef _MAIN_SLIDER_MANAGER_H_
+#define _MAIN_SLIDER_MANAGER_H_
+
+#include "slider_manager.hpp"
+
+namespace wxvlc
+{
+ class Interface;
+ /**
+ * This class manages a slider corresponding to the main input
+ */
+ class MainSliderManager: public SliderManager
+ {
+ public:
+ MainSliderManager( intf_thread_t *p_intf, Interface * );
+ virtual ~MainSliderManager();
+
+ protected:
+ virtual void UpdateInput();
+ virtual void UpdateNowPlaying();
+ virtual void UpdateButtons( vlc_bool_t );
+ virtual void UpdateDiscButtons();
+ virtual void UpdateTime( char *, char *);
+
+ virtual vlc_bool_t IsShown();
+ virtual vlc_bool_t IsFree();
+ virtual vlc_bool_t IsPlaying();
+
+ virtual void HideSlider();
+ virtual void ShowSlider();
+
+ virtual void HideControls();
+ virtual void DontHide();
+
+ Interface * p_main_intf;
+ };
+};
+
+#endif
#include <vlc/vlc.h>
#include <vlc/intf.h>
-#include "wxwidgets.h"
+#include "wxwidgets.hpp"
+#include "interface.hpp"
class wxMenuItemExt: public wxMenuItem
{
--- /dev/null
+/*****************************************************************************
+ * slider_manager.cpp : Manage an input slider
+ *****************************************************************************
+ * Copyright (C) 2000-2005 the VideoLAN team
+ * $Id: timer.cpp 11981 2005-08-03 15:03:23Z xtophe $
+ *
+ * Authors: Clément Stenac <zorglub@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+/*****************************************************************************
+ * Preamble
+ *****************************************************************************/
+#include <stdlib.h> /* malloc(), free() */
+#include <errno.h> /* ENOMEM */
+#include <string.h> /* strerror() */
+#include <stdio.h>
+
+#include <vlc/vlc.h>
+#include <vlc/aout.h>
+#include <vlc/intf.h>
+
+#include "vlc_meta.h"
+
+#include "wxwidgets.hpp"
+
+#include "slider_manager.hpp"
+
+/*****************************************************************************
+ * Constructor.
+ *****************************************************************************/
+SliderManager::SliderManager( intf_thread_t *_p_intf )
+{
+ p_intf = _p_intf;
+ p_input = NULL;
+ i_old_playing_status = PAUSE_S;
+}
+
+SliderManager::~SliderManager()
+{
+ vlc_mutex_lock( &p_intf->change_lock );
+ if( p_intf->p_sys->p_input ) vlc_object_release( p_intf->p_sys->p_input );
+ p_intf->p_sys->p_input = NULL;
+ vlc_mutex_unlock( &p_intf->change_lock );
+}
+
+/*****************************************************************************
+ * Private methods.
+ *****************************************************************************/
+void SliderManager::Update()
+{
+ /* Update the input */
+ if( p_input == NULL )
+ {
+ UpdateInput();
+ if( p_input )
+ {
+ _slider->SetValue( 0 );
+ UpdateNowPlaying();
+
+ UpdateButtons( VLC_TRUE );
+
+ i_old_playing_status = PLAYING_S;
+ }
+ }
+ else if( p_input->b_dead )
+ {
+ HideControls();
+ HideSlider();
+
+ UpdateButtons( VLC_FALSE );
+
+ i_old_playing_status = PAUSE_S;
+
+ vlc_object_release( p_input );
+ p_input = NULL;
+ }
+
+ if( p_input )
+ {
+ if( !p_input->b_die )
+ {
+ vlc_value_t pos;
+
+ DontHide();
+
+ UpdateNowPlaying();
+
+ /* Really manage the slider */
+ var_Get( p_input, "position", &pos );
+
+ UpdateDiscButtons();
+
+ if( pos.f_float > 0.0 && ! IsShown() )
+ {
+ ShowSlider();
+ }
+ else if( pos.f_float <= 0.0 )
+ {
+ HideSlider();
+ }
+
+ if( IsPlaying() && IsShown() )
+ {
+ /* Update the slider if the user isn't dragging it. */
+ if( IsFree() )
+ {
+ char psz_time[ MSTRTIME_MAX_SIZE ];
+ char psz_total[ MSTRTIME_MAX_SIZE ];
+ vlc_value_t time;
+ mtime_t i_seconds;
+
+ /* Update the value */
+ if( pos.f_float >= 0.0 )
+ {
+ i_slider_pos = (int)(SLIDER_MAX_POS * pos.f_float);
+
+ _slider->SetValue( i_slider_pos );
+
+ var_Get( p_input, "time", &time );
+ i_seconds = time.i_time / 1000000;
+ secstotimestr ( psz_time, i_seconds );
+
+ var_Get( p_input, "length", &time );
+ i_seconds = time.i_time / 1000000;
+ secstotimestr ( psz_total, i_seconds );
+
+ UpdateTime( psz_time, psz_total );
+// p_main_interface->statusbar->SetStatusText(
+// wxU(psz_time) + wxString(wxT(" / ")) +
+// wxU(psz_total), 0 );
+ }
+ }
+ }
+ }
+ }
+}
--- /dev/null
+/*****************************************************************************
+ * slider_manager.hpp: Header for slider_manager
+ *****************************************************************************
+ * Copyright (C) 1999-2005 the VideoLAN team
+ * $Id: wxwidgets.h 12502 2005-09-09 19:38:01Z gbazin $
+ *
+ * Authors: Clément Stenac <zorglub@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+#ifndef _SLIDER_MANAGER_H_
+#define _SLIDER_MANAGER_H_
+
+#include "wxwidgets.hpp"
+
+namespace wxvlc
+{
+ /**
+ * This class manages a slider corresponding to an input
+ * This class is abstract, it needs to be subclassed
+ */
+ class SliderManager
+ {
+ public:
+ SliderManager( intf_thread_t *p_intf );
+ virtual ~SliderManager();
+
+ void Update();
+
+ protected:
+ virtual void UpdateInput() = 0;
+ virtual void UpdateNowPlaying() {};
+ virtual void UpdateButtons( vlc_bool_t ) {};
+ virtual void UpdateDiscButtons() {}
+ virtual void UpdateTime( char *, char *) = 0;
+
+ virtual vlc_bool_t IsShown() = 0;
+ virtual vlc_bool_t IsFree() = 0;
+ virtual vlc_bool_t IsPlaying() = 0;
+
+ virtual void HideSlider() {};
+ virtual void ShowSlider() {};
+
+ virtual void HideControls() {};
+ virtual void DontHide() {};
+
+ intf_thread_t * p_intf;
+ input_thread_t *p_input;
+ wxSlider *_slider; ///< Slider for this input
+ int i_slider_pos; ///< Current slider position
+
+ private:
+ int i_old_playing_status; ///< Previous playing status
+
+
+ };
+};
+
+#endif
/*****************************************************************************
* Preamble
*****************************************************************************/
-#include <stdlib.h> /* malloc(), free() */
-#include <errno.h> /* ENOMEM */
-#include <string.h> /* strerror() */
-#include <stdio.h>
-
-#include <vlc/vlc.h>
-#include <vlc/aout.h>
-#include <vlc/intf.h>
-
+#include "timer.hpp"
+#include "main_slider_manager.hpp"
+#include "interface.hpp"
#include "vlc_meta.h"
-#include "wxwidgets.h"
-#include <wx/timer.h>
-
//void DisplayStreamDate( wxControl *, intf_thread_t *, int );
/* Callback prototypes */
p_intf = _p_intf;
p_main_interface = _p_main_interface;
b_init = 0;
+
+ msm = new MainSliderManager( p_intf, p_main_interface );
+
i_old_playing_status = PAUSE_S;
i_old_rate = INPUT_RATE_DEFAULT;
vlc_object_release( p_playlist );
}
- vlc_mutex_lock( &p_intf->change_lock );
- if( p_intf->p_sys->p_input ) vlc_object_release( p_intf->p_sys->p_input );
- p_intf->p_sys->p_input = NULL;
- vlc_mutex_unlock( &p_intf->change_lock );
+ delete msm;
}
/*****************************************************************************
vlc_mutex_lock( &p_intf->change_lock );
- /* Update the input */
- if( p_intf->p_sys->p_input == NULL )
- {
- playlist_t *p_playlist =
- (playlist_t *)vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
- FIND_ANYWHERE );
- if( p_playlist != NULL )
- {
- LockPlaylist( p_intf->p_sys, p_playlist );
- p_intf->p_sys->p_input = p_playlist->p_input;
- if( p_intf->p_sys->p_input )
- vlc_object_yield( p_intf->p_sys->p_input );
- UnlockPlaylist( p_intf->p_sys, p_playlist );
- vlc_object_release( p_playlist );
- }
-
- /* Refresh interface */
- if( p_intf->p_sys->p_input )
- {
- p_main_interface->slider->SetValue( 0 );
-
- char *psz_now_playing = vlc_input_item_GetInfo(
- p_intf->p_sys->p_input->input.p_item,
- _("Meta-information"), _(VLC_META_NOW_PLAYING) );
- if( psz_now_playing && *psz_now_playing )
- {
- p_main_interface->statusbar->SetStatusText(
- wxString(wxU(psz_now_playing)) + wxT( " - " ) +
- wxU(p_intf->p_sys->p_input->input.p_item->psz_name), 2 );
- }
- else
- {
- p_main_interface->statusbar->SetStatusText(
- wxU(p_intf->p_sys->p_input->input.p_item->psz_name), 2 );
- }
- free( psz_now_playing );
-
- p_main_interface->TogglePlayButton( PLAYING_S );
-#ifdef wxHAS_TASK_BAR_ICON
- if( p_main_interface->p_systray )
- {
- p_main_interface->p_systray->UpdateTooltip( wxU(p_intf->p_sys->p_input->input.p_item->psz_name) + wxString(wxT(" - ")) + wxU(_("Playing")));
- }
-#endif
- i_old_playing_status = PLAYING_S;
- }
- }
- else if( p_intf->p_sys->p_input->b_dead )
- {
- //controls auto-hide after a timer
- p_main_interface->m_controls_timer.Start(200, wxTIMER_ONE_SHOT);
-
- p_main_interface->TogglePlayButton( PAUSE_S );
- i_old_playing_status = PAUSE_S;
-
- p_main_interface->statusbar->SetStatusText( wxT(""), 0 );
- p_main_interface->statusbar->SetStatusText( wxT(""), 2 );
-
-#ifdef wxHAS_TASK_BAR_ICON
- if( p_main_interface->p_systray )
- {
- p_main_interface->p_systray->UpdateTooltip( wxString(wxT("VLC media player - ")) + wxU(_("Stopped")) );
- }
-#endif
- vlc_object_release( p_intf->p_sys->p_input );
- p_intf->p_sys->p_input = NULL;
- }
+ /* Call update */
+ msm->Update();
+ vlc_value_t val;
+ input_thread_t *p_input = p_intf->p_sys->p_input;
if( p_intf->p_sys->p_input )
{
- input_thread_t *p_input = p_intf->p_sys->p_input;
- vlc_value_t val;
-
- if( !p_input->b_die )
+ if( !p_intf->p_sys->p_input->b_die )
{
- vlc_value_t pos;
-
- //prevent the controls from auto-hiding
- p_main_interface->m_controls_timer.Stop();
-
- /* New input or stream map change */
- p_intf->p_sys->b_playing = 1;
-
- /* Update the item name */
- char *psz_now_playing = vlc_input_item_GetInfo(
- p_intf->p_sys->p_input->input.p_item,
- _("Meta-information"), _(VLC_META_NOW_PLAYING) );
- if( psz_now_playing && *psz_now_playing )
- {
- p_main_interface->statusbar->SetStatusText(
- wxString(wxU(psz_now_playing)) + wxT( " - " ) +
- wxU(p_intf->p_sys->p_input->input.p_item->psz_name), 2 );
- }
- else
- {
- p_main_interface->statusbar->SetStatusText(
- wxU(p_intf->p_sys->p_input->input.p_item->psz_name), 2 );
- }
- free( psz_now_playing );
-
- /* Manage the slider */
- var_Get( p_input, "position", &pos );
-
- var_Change( p_input, "title", VLC_VAR_CHOICESCOUNT, &val, NULL );
- if( val.i_int > 0 && !p_main_interface->disc_frame->IsShown() )
- {
- vlc_value_t val;
-
- #define HELP_MENU N_("Menu")
- #define HELP_PCH N_("Previous chapter")
- #define HELP_NCH N_("Next chapter")
- #define HELP_PTR N_("Previous track")
- #define HELP_NTR N_("Next track")
-
- var_Change( p_input, "chapter", VLC_VAR_CHOICESCOUNT, &val,
- NULL );
-
- if( val.i_int > 0 )
- {
- p_main_interface->disc_menu_button->Show();
- p_main_interface->disc_sizer->Show(
- p_main_interface->disc_menu_button );
- p_main_interface->disc_sizer->Layout();
- p_main_interface->disc_sizer->Fit(
- p_main_interface->disc_frame );
- p_main_interface->disc_menu_button->SetToolTip(
- wxU(_( HELP_MENU ) ) );
- p_main_interface->disc_prev_button->SetToolTip(
- wxU(_( HELP_PCH ) ) );
- p_main_interface->disc_next_button->SetToolTip(
- wxU(_( HELP_NCH ) ) );
- }
- else
- {
- p_main_interface->disc_menu_button->Hide();
- p_main_interface->disc_sizer->Hide(
- p_main_interface->disc_menu_button );
-
- p_main_interface->disc_prev_button->SetToolTip(
- wxU(_( HELP_PTR ) ) );
- p_main_interface->disc_next_button->SetToolTip(
- wxU(_( HELP_NTR ) ) );
- }
-
- p_main_interface->ShowDiscFrame();
- }
- else if( val.i_int == 0 && p_main_interface->disc_frame->IsShown() )
- {
- p_main_interface->HideDiscFrame();
- }
-
-
- if( pos.f_float > 0.0 &&
- !p_main_interface->slider_frame->IsShown() )
- {
- /* Show the slider if it's position is significant */
- p_main_interface->ShowSlider();
- }
- else if( pos.f_float <= 0.0 )
- {
- p_main_interface->m_slider_timer.Start(200, wxTIMER_ONE_SHOT);
- }
-
- if( p_intf->p_sys->b_playing &&
- p_main_interface->slider_frame->IsShown() )
- {
- /* Update the slider if the user isn't dragging it. */
- if( p_intf->p_sys->b_slider_free )
- {
- char psz_time[ MSTRTIME_MAX_SIZE ];
- char psz_total[ MSTRTIME_MAX_SIZE ];
- vlc_value_t time;
- mtime_t i_seconds;
-
- /* Update the value */
- if( pos.f_float >= 0.0 )
- {
- p_intf->p_sys->i_slider_pos =
- (int)(SLIDER_MAX_POS * pos.f_float);
-
- p_main_interface->slider->SetValue(
- p_intf->p_sys->i_slider_pos );
-
- var_Get( p_intf->p_sys->p_input, "time", &time );
- i_seconds = time.i_time / 1000000;
- secstotimestr ( psz_time, i_seconds );
-
- var_Get( p_intf->p_sys->p_input, "length", &time );
- i_seconds = time.i_time / 1000000;
- secstotimestr ( psz_total, i_seconds );
-
- p_main_interface->statusbar->SetStatusText(
- wxU(psz_time) + wxString(wxT(" / ")) +
- wxU(psz_total), 0 );
- }
- }
- }
-
/* Take care of the volume, etc... */
p_main_interface->Update();
--- /dev/null
+/*****************************************************************************
+ * timer.hpp: Timer headers
+ *****************************************************************************
+ * Copyright (C) 1999-2005 the VideoLAN team
+ * $Id: wxwidgets.h 12502 2005-09-09 19:38:01Z gbazin $
+ *
+ * Authors: Gildas Bazin <gbazin@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+#include "wxwidgets.hpp"
+
+namespace wxvlc
+{
+ class MainSliderManager;
+ class Interface;
+
+ class Timer: public wxTimer
+ {
+ public:
+ /* Constructor */
+ Timer( intf_thread_t *p_intf, Interface *p_main_interface );
+ virtual ~Timer();
+
+ 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;
+
+ MainSliderManager *msm;
+ };
+
+}
#include <vlc/vout.h>
#include <vlc/intf.h>
-#include "wxwidgets.h"
+#include "video.hpp"
+#include "interface.hpp"
static void *GetWindow( intf_thread_t *p_intf, vout_thread_t *,
int *pi_x_hint, int *pi_y_hint,
ID_HIDE_TIMER
};
-class VideoWindow: public wxWindow
-{
-public:
- /* Constructor */
- VideoWindow( intf_thread_t *_p_intf, wxWindow *p_parent );
- virtual ~VideoWindow();
-
- void *GetWindow( vout_thread_t *p_vout, int *, int *,
- unsigned int *, unsigned int * );
- void ReleaseWindow( void * );
- int ControlWindow( void *, int, va_list );
-
- mtime_t i_creation_date;
-
-private:
- intf_thread_t *p_intf;
- vout_thread_t *p_vout;
- wxWindow *p_parent;
- vlc_mutex_t lock;
- vlc_bool_t b_shown;
- vlc_bool_t b_auto_size;
-
- wxWindow *p_child_window;
-
- wxTimer m_hide_timer;
-
- void UpdateSize( wxEvent& event );
- void UpdateHide( wxEvent& event );
- void OnControlEvent( wxCommandEvent& event );
- void OnHideTimer( wxTimerEvent& WXUNUSED(event));
-
- DECLARE_EVENT_TABLE();
-};
-
DEFINE_LOCAL_EVENT_TYPE( wxEVT_VLC_VIDEO );
BEGIN_EVENT_TABLE(VideoWindow, wxWindow)
--- /dev/null
+/*****************************************************************************
+ * video.hpp: Embedded video management
+ *****************************************************************************
+ * Copyright (C) 1999-2005 the VideoLAN team
+ * $Id: wxwidgets.h 12670 2005-09-25 11:16:31Z zorglub $
+ *
+ * Authors: Gildas Bazin <gbazin@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+#ifndef _WXVLC_VIDEO_H_
+#define _WXVLC_VIDEO_H_
+
+#include "wxwidgets.hpp"
+
+namespace wxvlc
+{
+ class VideoWindow: public wxWindow
+ {
+ public:
+ /* Constructor */
+ VideoWindow( intf_thread_t *_p_intf, wxWindow *p_parent );
+ virtual ~VideoWindow();
+
+ void *GetWindow( vout_thread_t *p_vout, int *, int *,
+ unsigned int *, unsigned int * );
+ void ReleaseWindow( void * );
+ int ControlWindow( void *, int, va_list );
+
+ mtime_t i_creation_date;
+
+ private:
+ intf_thread_t *p_intf;
+ vout_thread_t *p_vout;
+ wxWindow *p_parent;
+ vlc_mutex_t lock;
+ vlc_bool_t b_shown;
+ vlc_bool_t b_auto_size;
+
+ wxWindow *p_child_window;
+
+ wxTimer m_hide_timer;
+
+ void UpdateSize( wxEvent& event );
+ void UpdateHide( wxEvent& event );
+ void OnControlEvent( wxCommandEvent& event );
+ void OnHideTimer( wxTimerEvent& WXUNUSED(event));
+
+ DECLARE_EVENT_TABLE();
+ };
+};
+
+/* Delegates - Todo: fix this (remove 1st, make 2nd method) */
+wxWindow *CreateVideoWindow( intf_thread_t *p_intf, wxWindow *p_parent );
+void UpdateVideoWindow( intf_thread_t *p_intf, wxWindow *p_window );
+
+#endif
# include <locale.h>
#endif
-#include "wxwidgets.h"
+#include "interface.hpp"
/* Temporary hack */
#if defined(WIN32) && defined(_WX_INIT_H_)
+++ /dev/null
-/*****************************************************************************
- * wxwidgets.h: private wxWindows interface description
- *****************************************************************************
- * Copyright (C) 1999-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Gildas Bazin <gbazin@videolan.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * 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
- * GNU General Public License for more details.
- *
- * 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.
- *****************************************************************************/
-
-#ifdef WIN32 /* mingw32 hack */
-#undef Yield
-#undef CreateDialog
-#endif
-
-#ifdef _MSC_VER
-// turn off 'identifier was truncated to '255' characters in the debug info'
-# pragma warning( disable:4786 )
-#endif
-
-/* Let vlc take care of the i18n stuff */
-#define WXINTL_NO_GETTEXT_MACRO
-
-#include <list>
-
-#include <wx/wxprec.h>
-#include <wx/wx.h>
-
-#include <wx/listctrl.h>
-#include <wx/textctrl.h>
-#include <wx/notebook.h>
-#include <wx/spinctrl.h>
-#include <wx/dnd.h>
-#include <wx/treectrl.h>
-#include <wx/gauge.h>
-#include <wx/accel.h>
-#include <wx/checkbox.h>
-#include <wx/wizard.h>
-#include <wx/taskbar.h>
-#include "vlc_keys.h"
-
-#if (!wxCHECK_VERSION(2,5,0))
-typedef long wxTreeItemIdValue;
-#endif
-
-DECLARE_LOCAL_EVENT_TYPE( wxEVT_DIALOG, 0 );
-DECLARE_LOCAL_EVENT_TYPE( wxEVT_INTF, 1 );
-
-#define SLIDER_MAX_POS 10000
-
-/* wxU is used to convert ansi/utf8 strings to unicode strings (wchar_t) */
-#if defined( ENABLE_NLS )
-#if wxUSE_UNICODE
-# define wxU(utf8) wxString(utf8, wxConvUTF8)
-#else
-# define wxU(utf8) wxString(wxConvUTF8.cMB2WC(utf8), *wxConvCurrent)
-#endif
-#else // ENABLE_NLS
-#if wxUSE_UNICODE
-# define wxU(ansi) wxString(ansi, wxConvLocal)
-#else
-# define wxU(ansi) (ansi)
-#endif
-#endif
-
-/* wxL2U (locale to unicode) is used to convert ansi strings to unicode
- * strings (wchar_t) */
-#define wxL2U(ansi) wxU(ansi)
-
-#if wxUSE_UNICODE
-# define wxFromLocale(wxstring) FromUTF32(wxstring.wc_str())
-# define wxLocaleFree(string) free(string)
-#else
-# define wxFromLocale(wxstring) FromLocale(wxstring.mb_str())
-# define wxLocaleFree(string) LocaleFree(string)
-#endif
-
-#define WRAPCOUNT 80
-
-#define OPEN_NORMAL 0
-#define OPEN_STREAM 1
-
-#define MODE_NONE 0
-#define MODE_GROUP 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
- *****************************************************************************/
-struct intf_sys_t
-{
- /* the wx parent window */
- 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;
-
- /* 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 */
-
- /* 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,
- intf_dialog_args_t *p_arg );
-
- /* Popup menu */
- wxMenu *p_popup_menu;
-
- /* Hotkeys */
- int i_first_hotkey_event;
- int i_hotkeys;
-
- /* 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 *CreateVideoWindow( intf_thread_t *p_intf, wxWindow *p_parent );
-void UpdateVideoWindow( intf_thread_t *p_intf, wxWindow *p_window );
-wxFrame *BookmarksDialog( intf_thread_t *p_intf, wxWindow *p_parent );
-wxWindow *CreateDialogsProvider( intf_thread_t *p_intf, wxWindow *p_parent );
-
-namespace wxvlc
-{
-class Interface;
-class OpenDialog;
-class SoutDialog;
-class SubsFileDialog;
-class Playlist;
-class Messages;
-class FileInfo;
-class StreamDialog;
-class WizardDialog;
-class ItemInfoDialog;
-class NewGroup;
-class ExportPlaylist;
-
-/*****************************************************************************
- * Classes declarations.
- *****************************************************************************/
-/* Timer */
-class Timer: public wxTimer
-{
-public:
- /* Constructor */
- Timer( intf_thread_t *p_intf, Interface *p_main_interface );
- virtual ~Timer();
-
- 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;
-};
-
-
-/* Extended panel */
-class ExtraPanel: public wxPanel
-{
-public:
- /* Constructor */
- ExtraPanel( intf_thread_t *p_intf, wxWindow *p_parent );
- virtual ~ExtraPanel();
-
- wxStaticBox *adjust_box;
- wxButton *restoredefaults_button;
- wxSlider *brightness_slider;
- wxSlider *contrast_slider;
- wxSlider *saturation_slider;
- wxSlider *hue_slider;
- wxSlider *gamma_slider;
-
- wxStaticBox *other_box;
- wxComboBox *ratio_combo;
-
- char *psz_bands;
- float f_preamp;
- vlc_bool_t b_update;
-
-private:
-
- wxPanel *VideoPanel( wxWindow * );
- wxPanel *EqzPanel( wxWindow * );
- wxPanel *AudioPanel( wxWindow * );
-
- wxNotebook *notebook;
-
- wxCheckBox *eq_chkbox;
-
- wxCheckBox *eq_2p_chkbox;
-
- wxButton *eq_restoredefaults_button;
-
- wxSlider *smooth_slider;
- wxStaticText *smooth_text;
-
- wxSlider *preamp_slider;
- wxStaticText * preamp_text;
-
- int i_smooth;
- wxWindow *p_parent;
-
- wxSlider *band_sliders[10];
- wxStaticText *band_texts[10];
-
- int i_values[10];
-
- void CheckAout();
-
- /* Event handlers (these functions should _not_ be virtual) */
-
- void OnEnableAdjust( wxCommandEvent& );
- void OnEnableEqualizer( wxCommandEvent& );
- void OnRestoreDefaults( wxCommandEvent& );
- void OnChangeEqualizer( wxScrollEvent& );
- void OnAdjustUpdate( wxScrollEvent& );
- void OnRatio( wxCommandEvent& );
- void OnFiltersInfo( wxCommandEvent& );
- void OnSelectFilter( wxCommandEvent& );
-
- void OnEqSmooth( wxScrollEvent& );
- void OnPreamp( wxScrollEvent& );
- void OnEq2Pass( wxCommandEvent& );
- void OnEqRestore( wxCommandEvent& );
-
- void OnHeadphone( wxCommandEvent& );
- void OnNormvol( wxCommandEvent& );
- void OnNormvolSlider( wxScrollEvent& );
-
- void OnIdle( wxIdleEvent& );
-
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
- vlc_bool_t b_my_update;
-};
-
-#if 0
-/* Extended Window */
-class ExtraWindow: public wxFrame
-{
-public:
- /* Constructor */
- ExtraWindow( intf_thread_t *p_intf, wxWindow *p_parent, wxPanel *panel );
- virtual ~ExtraWindow();
-
-private:
-
- wxPanel *panel;
-
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
-};
-#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, 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
-
- wxTimer m_controls_timer;
- wxTimer m_slider_timer;
-
-private:
- void SetupHotkeys();
- void CreateOurMenuBar();
- void CreateOurToolBar();
- void CreateOurExtendedPanel();
- void CreateOurSlider();
- 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 OnOpenSat( wxCommandEvent& event );
-
- void OnExtended( wxCommandEvent& event );
- //void OnUndock( wxCommandEvent& event );
-
- void OnBookmarks( wxCommandEvent& event );
- void OnShowDialog( wxCommandEvent& event );
- void OnPlayStream( wxCommandEvent& event );
- void OnStopStream( wxCommandEvent& event );
- void OnSliderUpdate( wxScrollEvent& event );
- void OnPrevStream( wxCommandEvent& event );
- void OnNextStream( 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__ )
- void OnContextMenu2(wxContextMenuEvent& event);
-#endif
- void OnContextMenu(wxMouseEvent& event);
-
- void OnControlEvent( wxCommandEvent& event );
-
- DECLARE_EVENT_TABLE();
-
- Timer *timer;
- intf_thread_t *p_intf;
-
- wxWindow *video_window;
-
- int i_old_playing_status;
-
- /* For auto-generated menus */
- wxMenu *p_settings_menu;
- wxMenu *p_audio_menu;
- wxMenu *p_video_menu;
- wxMenu *p_navig_menu;
-};
-
-/* Open Dialog */
-WX_DEFINE_ARRAY(AutoBuiltPanel *, ArrayOfAutoBuiltPanel);
-class OpenDialog: public wxDialog
-{
-public:
- /* Constructor */
- OpenDialog( intf_thread_t *p_intf, wxWindow *p_parent,
- int i_access_method, int i_arg = 0 );
-
- /* Extended Contructor */
- OpenDialog( intf_thread_t *p_intf, wxWindow *p_parent,
- int i_access_method, int i_arg = 0 , int _i_method = 0 );
- virtual ~OpenDialog();
-
- int Show();
- int Show( int i_access_method, int i_arg = 0 );
-
- void UpdateMRL();
- void UpdateMRL( int i_access_method );
-
- wxArrayString mrl;
-
-private:
- wxPanel *FilePanel( wxWindow* parent );
- wxPanel *DiscPanel( wxWindow* parent );
- wxPanel *NetPanel( wxWindow* parent );
-
- ArrayOfAutoBuiltPanel input_tab_array;
-
- /* 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 );
-
- /* Event handlers for the file page */
- void OnFilePanelChange( 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 );
-
- /* 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 caching option */
- void OnCachingEnable( wxCommandEvent& event );
- void OnCachingChange( wxCommandEvent& event );
- void OnCachingChangeSpin( wxSpinEvent& event );
-
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
- wxWindow *p_parent;
- int i_current_access_method;
- int i_disc_type_selection;
-
- int i_method; /* Normal or for the stream dialog ? */
- int i_open_arg;
-
- wxComboBox *mrl_combo;
- wxNotebook *notebook;
-
- /* Controls for the file panel */
- wxComboBox *file_combo;
- wxFileDialog *file_dialog;
-
- /* 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;
- wxPanel *net_subpanels[4];
- wxRadioButton *net_radios[4];
- wxSpinCtrl *net_ports[4];
- int i_net_ports[4];
- wxTextCtrl *net_addrs[4];
- wxCheckBox *net_timeshift;
- wxCheckBox *net_ipv6;
-
- /* 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 caching options */
- wxCheckBox *caching_checkbox;
- wxSpinCtrl *caching_value;
- int i_caching;
-};
-
-enum
-{
- FILE_ACCESS = 0,
- DISC_ACCESS,
- NET_ACCESS,
-
- /* Auto-built panels */
- CAPTURE_ACCESS
-};
-#define MAX_ACCESS CAPTURE_ACCESS
-
-/* Stream output Dialog */
-enum
-{
- PLAY_ACCESS_OUT = 0,
- FILE_ACCESS_OUT,
- HTTP_ACCESS_OUT,
- MMSH_ACCESS_OUT,
- RTP_ACCESS_OUT,
- UDP_ACCESS_OUT,
- ACCESS_OUT_NUM
-};
-
-enum
-{
- TS_ENCAPSULATION = 0,
- PS_ENCAPSULATION,
- MPEG1_ENCAPSULATION,
- OGG_ENCAPSULATION,
- ASF_ENCAPSULATION,
- MP4_ENCAPSULATION,
- MOV_ENCAPSULATION,
- WAV_ENCAPSULATION,
- RAW_ENCAPSULATION,
- AVI_ENCAPSULATION,
- ENCAPS_NUM
-};
-
-enum
-{
- ANN_MISC_SOUT = 0,
- TTL_MISC_SOUT,
- MISC_SOUT_NUM
-};
-
-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 );
- void OnFileDump( wxCommandEvent& event );
-
- /* Event handlers for the net access output */
- void OnNetChange( wxCommandEvent& event );
-
- /* Event specific to the announce address */
- void OnAnnounceGroupChange( wxCommandEvent& event );
- void OnAnnounceAddrChange( 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_panel;
- wxPanel *access_subpanels[ACCESS_OUT_NUM];
- wxCheckBox *access_checkboxes[ACCESS_OUT_NUM];
-
- int i_access_type;
-
- wxComboBox *file_combo;
- wxCheckBox *dump_checkbox;
- wxSpinCtrl *net_ports[ACCESS_OUT_NUM];
- wxTextCtrl *net_addrs[ACCESS_OUT_NUM];
-
- /* Controls for the SAP announces and TTL setting */
- wxPanel *misc_panel;
- wxPanel *misc_subpanels[MISC_SOUT_NUM];
- wxCheckBox *sap_checkbox;
- wxTextCtrl *announce_group;
- wxTextCtrl *announce_addr;
- wxSpinCtrl *ttl_spin;
-
- /* Controls for the encapsulation */
- wxPanel *encapsulation_panel;
- wxRadioButton *encapsulation_radios[ENCAPS_NUM];
- int i_encapsulation_type;
-
- /* Controls for transcoding */
- wxPanel *transcoding_panel;
- 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;
- 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 */
-class SubsFileDialog: public wxDialog
-{
-public:
- /* Constructor */
- SubsFileDialog( intf_thread_t *p_intf, wxWindow *p_parent );
- virtual ~SubsFileDialog();
-
- wxComboBox *file_combo;
- wxComboBox *encoding_combo;
- wxComboBox *size_combo;
- wxComboBox *align_combo;
- wxSpinCtrl *fps_spinctrl;
- wxSpinCtrl *delay_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;
-};
-
-/* Stream */
-class StreamDialog: public wxFrame
-{
-public:
- /* Constructor */
- StreamDialog( intf_thread_t *p_intf, wxWindow *p_parent );
- virtual ~StreamDialog();
-
-private:
- void OnClose( wxCommandEvent& event );
- void OnOpen( wxCommandEvent& event );
- void OnSout( wxCommandEvent& event );
- void OnStart( wxCommandEvent& event );
-
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
-
- wxStaticText *step2_label;
- wxStaticText *step3_label;
- wxButton *sout_button;
- wxButton *start_button;
- wxArrayString mrl;
- wxArrayString sout_mrl;
- OpenDialog *p_open_dialog;
- SoutDialog *p_sout_dialog;
-};
-
-/* Wizard */
-class WizardDialog : public wxWizard
-{
-public:
- /* Constructor */
- WizardDialog( intf_thread_t *, wxWindow *p_parent, char *, int, int );
- virtual ~WizardDialog();
- 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 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 const *mux );
- void Run();
- int i_action;
- char *method;
-
-protected:
- int vb,ab;
- int i_from, i_to, i_ttl;
- char *vcodec , *acodec , *address , *mrl , *mux ;
- char *psz_sap_name;
- bool b_sap;
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
-};
-
-
-/* Preferences Dialog */
-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 );
- void OnAdvanced( wxCommandEvent& event );
- void OnClose( wxCloseEvent& 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();
- bool Show( bool show = TRUE );
- void UpdateLog();
-
-private:
- /* Event handlers (these functions should _not_ be virtual) */
- void OnButtonClose( wxCommandEvent& event );
- void OnClose( wxCloseEvent& WXUNUSED(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 */
-class Playlist: public wxFrame
-{
-public:
- /* Constructor */
- Playlist( intf_thread_t *p_intf, wxWindow *p_parent );
- virtual ~Playlist();
-
- void UpdatePlaylist();
- void ShowPlaylist( bool show );
- void UpdateItem( int );
- void AppendItem( wxCommandEvent& );
-
- bool b_need_update;
- int i_items_to_append;
-
-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 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 );
- 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 OnRandom( wxCommandEvent& event );
- void OnRepeat( wxCommandEvent& event );
- void OnLoop ( wxCommandEvent& event );
-
- void OnActivateItem( wxTreeEvent& event );
- void OnKeyDown( wxTreeEvent& event );
- void OnNewGroup( wxCommandEvent& event );
-
- /* 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 );
-
- void Preparse();
-
- /* Update */
- 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, int );
- wxTreeItemId FindItemByName( wxTreeItemId, wxString,
- wxTreeItemId, vlc_bool_t *);
-
- wxTreeItemId saved_tree_item;
- int i_saved_id;
-
- playlist_t *p_playlist;
-
-
- /* Custom events */
- void OnPlaylistEvent( wxCommandEvent& event );
-
- DECLARE_EVENT_TABLE();
-
-
- /* Global widgets */
- wxStatusBar *statusbar;
- ItemInfoDialog *iteminfo_dialog;
-
- int i_update_counter;
-
- intf_thread_t *p_intf;
- wxTreeCtrl *treectrl;
- int i_current_view;
- vlc_bool_t b_changed_view;
- char **pp_sds;
-
-
-};
-
-/* ItemInfo Dialog */
-class ItemInfoDialog: public wxDialog
-{
-public:
- /* Constructor */
- ItemInfoDialog( intf_thread_t *p_intf, playlist_item_t *_p_item,
- wxWindow *p_parent );
- virtual ~ItemInfoDialog();
-
- wxArrayString GetOptions();
-
-private:
- wxPanel *InfoPanel( wxWindow* parent );
- wxPanel *GroupPanel( wxWindow* parent );
-
- /* Event handlers (these functions should _not_ be virtual) */
- void OnOk( wxCommandEvent& event );
- void OnCancel( wxCommandEvent& event );
-
- void UpdateInfo();
-
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
- playlist_item_t *p_item;
- wxWindow *p_parent;
-
- /* Controls for the iteminfo dialog box */
- wxPanel *info_subpanel;
- wxPanel *info_panel;
-
- wxPanel *group_subpanel;
- wxPanel *group_panel;
-
- wxTextCtrl *uri_text;
- wxTextCtrl *name_text;
-
- wxTreeCtrl *info_tree;
- wxTreeItemId info_root;
-
-};
-
-
-/* File Info */
-class FileInfo: public wxFrame
-{
-public:
- /* Constructor */
- FileInfo( intf_thread_t *p_intf, wxWindow *p_parent );
- virtual ~FileInfo();
- void UpdateFileInfo();
-
- vlc_bool_t b_need_update;
-
-private:
- void OnButtonClose( wxCommandEvent& event );
- void OnClose( wxCloseEvent& WXUNUSED(event) );
-
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
- wxTreeCtrl *fileinfo_tree;
- wxTreeItemId fileinfo_root;
- wxString fileinfo_root_label;
-
-};
-
-/* Update VLC */
-class UpdateVLC: public wxFrame
-{
-public:
- /* Constructor */
- UpdateVLC( intf_thread_t *p_intf, wxWindow *p_parent );
- virtual ~UpdateVLC();
-
-private:
- void OnButtonClose( wxCommandEvent& event );
- void OnClose( wxCloseEvent& WXUNUSED(event) );
- void GetData();
- void OnCheckForUpdate( wxCommandEvent& event );
- void OnMirrorChoice( wxCommandEvent& event );
- void UpdateUpdatesTree();
- void UpdateMirrorsChoice();
- void OnUpdatesTreeActivate( wxTreeEvent& event );
- void DownloadFile( wxString url, wxString dst );
-
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
- wxTreeCtrl *updates_tree;
- wxTreeItemId updates_root;
-
- wxChoice *mirrors_choice;
-
- wxString release_type; /* could be "stable", "test", "nightly" ... */
-
- struct update_file_t
- {
- wxString type;
- wxString md5;
- wxString size;
- wxString url;
- wxString description;
- };
-
- struct update_version_t
- {
- wxString type;
- wxString major;
- wxString minor;
- wxString revision;
- wxString extra;
- std::list<update_file_t> m_files;
- };
-
- std::list<update_version_t> m_versions;
-
- struct update_mirror_t
- {
- wxString name;
- wxString location;
- wxString type;
- wxString base_url;
- };
-
- std::list<update_mirror_t> m_mirrors;
-};
-
-#if wxUSE_DRAG_AND_DROP
-/* Drag and Drop class */
-class DragAndDrop: public wxFileDropTarget
-{
-public:
- DragAndDrop( intf_thread_t *_p_intf, vlc_bool_t b_enqueue = VLC_FALSE );
-
- virtual bool OnDropFiles( wxCoord x, wxCoord y,
- const wxArrayString& filenames );
-
-private:
- intf_thread_t *p_intf;
- vlc_bool_t b_enqueue;
-};
-#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 );
-wxMenu *AudioMenu( intf_thread_t *, wxWindow *, wxMenu * = NULL );
-wxMenu *VideoMenu( intf_thread_t *, wxWindow *, wxMenu * = NULL );
-wxMenu *NavigMenu( intf_thread_t *, wxWindow *, wxMenu * = NULL );
-
-namespace wxvlc
-{
-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;
-};
-
-} // 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;
-
--- /dev/null
+/*****************************************************************************
+ * wxwidgets.hpp: Common headers for the wxwidges interface
+ *****************************************************************************
+ * Copyright (C) 1999-2005 the VideoLAN team
+ * $Id: wxwidgets.h 12502 2005-09-09 19:38:01Z gbazin $
+ *
+ * Authors: Gildas Bazin <gbazin@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * 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
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *****************************************************************************/
+
+#ifndef _WXVLC_WIDGETS_H_
+#define _WXVLC_WIDGETS_H_
+
+#ifdef WIN32 /* mingw32 hack */
+#undef Yield
+#undef CreateDialog
+#endif
+
+#ifdef _MSC_VER
+// turn off 'identifier was truncated to '255' characters in the debug info'
+# pragma warning( disable:4786 )
+#endif
+
+/* Let vlc take care of the i18n stuff */
+#define WXINTL_NO_GETTEXT_MACRO
+
+#include <vlc/vlc.h>
+#include <vlc/intf.h>
+
+#include <wx/wx.h>
+#define SLIDER_MAX_POS 10000
+
+/*
+#include <wx/listctrl.h>
+#include <wx/textctrl.h>
+#include <wx/notebook.h>
+#include <wx/spinctrl.h>
+#include <wx/dnd.h>
+#include <wx/treectrl.h>
+#include <wx/gauge.h>
+#include <wx/accel.h>
+#include <wx/checkbox.h>
+#include <wx/wizard.h>
+#include <wx/taskbar.h>
+#include "vlc_keys.h"
+*/
+#if (!wxCHECK_VERSION(2,5,0))
+typedef long wxTreeItemIdValue;
+#endif
+
+DECLARE_LOCAL_EVENT_TYPE( wxEVT_DIALOG, 0 );
+DECLARE_LOCAL_EVENT_TYPE( wxEVT_INTF, 1 );
+
+/***************************************************************************
+ * I18N macros
+ ***************************************************************************/
+
+/* wxU is used to convert ansi/utf8 strings to unicode strings (wchar_t) */
+#if defined( ENABLE_NLS )
+#if wxUSE_UNICODE
+# define wxU(utf8) wxString(utf8, wxConvUTF8)
+#else
+# define wxU(utf8) wxString(wxConvUTF8.cMB2WC(utf8), *wxConvCurrent)
+#endif
+#else // ENABLE_NLS
+#if wxUSE_UNICODE
+# define wxU(ansi) wxString(ansi, wxConvLocal)
+#else
+# define wxU(ansi) (ansi)
+#endif
+#endif
+
+/* wxL2U (locale to unicode) is used to convert ansi strings to unicode
+ * strings (wchar_t) */
+#define wxL2U(ansi) wxU(ansi)
+
+#if wxUSE_UNICODE
+# define wxFromLocale(wxstring) FromUTF32(wxstring.wc_str())
+# define wxLocaleFree(string) free(string)
+#else
+# define wxFromLocale(wxstring) FromLocale(wxstring.mb_str())
+# define wxLocaleFree(string) LocaleFree(string)
+#endif
+
+
+#define WRAPCOUNT 80
+
+#define OPEN_NORMAL 0
+#define OPEN_STREAM 1
+
+enum
+{
+ ID_CONTROLS_TIMER,
+ ID_SLIDER_TIMER,
+};
+
+namespace wxvlc {
+ class WindowSettings;
+ class VideoWindow;
+};
+
+using namespace wxvlc;
+
+class DialogsProvider;
+class PrefsTreeCtrl;
+class AutoBuiltPanel;
+
+/*****************************************************************************
+ * intf_sys_t: description and status of wxwindows interface
+ *****************************************************************************/
+struct intf_sys_t
+{
+ /* the wx parent window */
+ 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;
+
+ /* 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 */
+
+ /* 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,
+ intf_dialog_args_t *p_arg );
+
+ /* Popup menu */
+ wxMenu *p_popup_menu;
+
+ /* Hotkeys */
+ int i_first_hotkey_event;
+ int i_hotkeys;
+
+ /* 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 *CreateDialogsProvider( intf_thread_t *p_intf, wxWindow *p_parent );
+
+/*
+ * 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 );
+}
+
+#endif