[vlc-devel] commit: Qt4: implement PlaylistEventManager functionality in MainInputManager ( Jakob Leben )
git version control
git at videolan.org
Sat Nov 7 18:52:47 CET 2009
vlc | branch: master | Jakob Leben <jleben at videolan.org> | Sat Nov 7 18:40:38 2009 +0100| [24a911ff2aa88ddda6870f98acdded3f580c52f9] | committer: Jakob Leben
Qt4: implement PlaylistEventManager functionality in MainInputManager
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=24a911ff2aa88ddda6870f98acdded3f580c52f9
---
modules/gui/qt4/input_manager.cpp | 44 ++++++++++++++++++++++++++++++++++--
modules/gui/qt4/input_manager.hpp | 17 ++++++++++++++
2 files changed, 58 insertions(+), 3 deletions(-)
diff --git a/modules/gui/qt4/input_manager.cpp b/modules/gui/qt4/input_manager.cpp
index fd70141..200d5fb 100644
--- a/modules/gui/qt4/input_manager.cpp
+++ b/modules/gui/qt4/input_manager.cpp
@@ -39,6 +39,10 @@ static int ItemChanged( vlc_object_t *, const char *,
vlc_value_t, vlc_value_t, void * );
static int PLItemChanged( vlc_object_t *, const char *,
vlc_value_t, vlc_value_t, void * );
+static int PLItemAppended( vlc_object_t *, const char *,
+ vlc_value_t, vlc_value_t, void * );
+static int PLItemRemoved( vlc_object_t *, const char *,
+ vlc_value_t, vlc_value_t, void * );
static int VolumeChanged( vlc_object_t *, const char *,
vlc_value_t, vlc_value_t, void * );
@@ -881,6 +885,8 @@ MainInputManager::MainInputManager( intf_thread_t *_p_intf )
var_AddCallback( THEPL, "item-change", ItemChanged, im );
var_AddCallback( THEPL, "item-current", PLItemChanged, this );
var_AddCallback( THEPL, "activity", PLItemChanged, this );
+ var_AddCallback( THEPL, "playlist-item-append", PLItemAppended, this );
+ var_AddCallback( THEPL, "playlist-item-deleted", PLItemRemoved, this );
var_AddCallback( p_intf->p_libvlc, "volume-change", VolumeChanged, this );
@@ -918,6 +924,8 @@ MainInputManager::~MainInputManager()
var_DelCallback( THEPL, "item-change", ItemChanged, im );
var_DelCallback( THEPL, "item-current", PLItemChanged, this );
+ var_DelCallback( THEPL, "playlist-item-append", PLItemAppended, this );
+ var_DelCallback( THEPL, "playlist-item-deleted", PLItemRemoved, this );
}
vout_thread_t* MainInputManager::getVout()
@@ -933,14 +941,25 @@ aout_instance_t * MainInputManager::getAout()
void MainInputManager::customEvent( QEvent *event )
{
int type = event->type();
- if ( type != ItemChanged_Type && type != VolumeChanged_Type )
- return;
+
+ PLEvent *plEv;
// msg_Dbg( p_intf, "New MainIM Event of type: %i", type );
- if( type == VolumeChanged_Type )
+ switch( type )
{
+ case VolumeChanged_Type:
emit volumeChanged();
return;
+ case PLItemAppended_Type:
+ plEv = static_cast<PLEvent*>( event );
+ emit playlistItemAppended( plEv->i_item, plEv->i_parent );
+ return;
+ case PLItemRemoved_Type:
+ plEv = static_cast<PLEvent*>( event );
+ emit playlistItemRemoved( plEv->i_item );
+ return;
+ default:
+ if( type != ItemChanged_Type ) return;
}
/* Should be PLItemChanged Event */
@@ -1035,3 +1054,22 @@ static int VolumeChanged( vlc_object_t *p_this, const char *psz_var,
return VLC_SUCCESS;
}
+static int PLItemAppended
+( vlc_object_t * obj, const char *var, vlc_value_t old, vlc_value_t cur, void *data )
+{
+ MainInputManager *mim = static_cast<MainInputManager*>(data);
+ playlist_add_t *p_add = static_cast<playlist_add_t*>( cur.p_address );
+
+ PLEvent *event = new PLEvent( PLItemAppended_Type, p_add->i_item, p_add->i_node );
+ QApplication::postEvent( mim, event );
+ return VLC_SUCCESS;
+}
+static int PLItemRemoved
+( vlc_object_t * obj, const char *var, vlc_value_t old, vlc_value_t cur, void *data )
+{
+ MainInputManager *mim = static_cast<MainInputManager*>(data);
+
+ PLEvent *event = new PLEvent( PLItemRemoved_Type, cur.i_int, 0 );
+ QApplication::postEvent( mim, event );
+ return VLC_SUCCESS;
+}
diff --git a/modules/gui/qt4/input_manager.hpp b/modules/gui/qt4/input_manager.hpp
index 522f02f..688eb66 100644
--- a/modules/gui/qt4/input_manager.hpp
+++ b/modules/gui/qt4/input_manager.hpp
@@ -85,6 +85,21 @@ private:
input_item_t *p_item;
};
+enum PLEventTypes
+{
+ PLItemAppended_Type = QEvent::User + PLEventType + 1,
+ PLItemRemoved_Type
+};
+
+class PLEvent : public QEvent
+{
+public:
+ PLEvent( PLEventTypes t, int i, int p )
+ : QEvent( (QEvent::Type)t ), i_item(i), i_parent(p) {}
+ int i_item;
+ int i_parent;
+};
+
class InputManager : public QObject
{
Q_OBJECT;
@@ -251,6 +266,8 @@ public slots:
signals:
void inputChanged( input_thread_t * );
void volumeChanged();
+ void playlistItemAppended( int itemId, int parentId );
+ void playlistItemRemoved( int itemId );
};
#endif
More information about the vlc-devel
mailing list