Some more Qt playlist code
authorClément Stenac <zorglub@videolan.org>
Mon, 26 Jun 2006 21:11:38 +0000 (21:11 +0000)
committerClément Stenac <zorglub@videolan.org>
Mon, 26 Jun 2006 21:11:38 +0000 (21:11 +0000)
modules/gui/qt4/components/playlist/panels.hpp
modules/gui/qt4/components/playlist/standardpanel.cpp
modules/gui/qt4/dialogs/playlist.cpp
modules/gui/qt4/dialogs/playlist.hpp
modules/gui/qt4/playlist_model.cpp
modules/gui/qt4/playlist_model.hpp

index 4596cfc..c574008 100644 (file)
@@ -46,7 +46,7 @@ class StandardPLPanel: public PLPanel
 {
     Q_OBJECT;
 public:
-    StandardPLPanel( QWidget *, intf_thread_t *, playlist_item_t * );
+    StandardPLPanel( QWidget *, intf_thread_t *, playlist_t *,playlist_item_t * );
     virtual ~StandardPLPanel();
 };
 
index 5094a8a..a2571a0 100644 (file)
 #include <QTreeView>
 
 StandardPLPanel::StandardPLPanel( QWidget *_parent, intf_thread_t *_p_intf,
+                                  playlist_t *p_playlist,
                                   playlist_item_t *p_root ):
                                   PLPanel( _parent, _p_intf )
 {
    
-    PLModel *model = new PLModel( p_root, -1, this );
-    QTreeView *view = new QTreeView( this );
+    PLModel *model = new PLModel( p_playlist, p_root, -1, this );
+    QTreeView *view = new QTreeView( 0 );
     view->setModel(model);
+    model->Rebuild();
+    view->show();
 }
 
 StandardPLPanel::~StandardPLPanel()
index 5120016..371e8bd 100644 (file)
@@ -31,7 +31,7 @@ PlaylistDialog::PlaylistDialog( intf_thread_t *_p_intf ) : QVLCFrame( _p_intf )
 {
     playlist_t *p_playlist = (playlist_t *)vlc_object_find( p_intf,
                                      VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
-    new StandardPLPanel( this, p_intf, p_playlist->p_root_category );
+    new StandardPLPanel( this, p_intf, p_playlist, p_playlist->p_root_category );
 }
 
 PlaylistDialog::~PlaylistDialog()
index e07ca7f..a0feee7 100644 (file)
@@ -37,7 +37,6 @@ public:
     virtual ~PlaylistDialog();
 private:
     PlaylistDialog( intf_thread_t * );
-    intf_thread_t *p_intf;
     static PlaylistDialog *instance;
 public slots:
 };
index e87772d..f5810dd 100644 (file)
@@ -42,19 +42,31 @@ static int ItemDeleted( vlc_object_t *p_this, const char *psz_variable,
  * Playlist item implementation
  *************************************************************************/
 
-PLItem::PLItem( int _i_id, int _i_input_id, PLItem *parent, PLModel *m)
+/**
+ * Column strings
+ *      Title
+ *      Artist
+ *      Duration
+ */
+
+void PLItem::init( int _i_id, int _i_input_id, PLItem *parent, PLModel *m)
 {
     parentItem = parent;
     i_id = _i_id; i_input_id = _i_input_id;
     model = m;
+    strings.append( "" );    
+    strings.append( "" );    
+    strings.append( "" );    
+}
+
+PLItem::PLItem( int _i_id, int _i_input_id, PLItem *parent, PLModel *m)
+{
+    init( _i_id, _i_input_id, parent, m );
 }
 
 PLItem::PLItem( playlist_item_t * p_item, PLItem *parent, PLModel *m )
 {
-    i_id = p_item->i_id;
-    i_input_id = p_item->p_input->i_id;
-    parentItem = parent;
-    model = m;
+    init( p_item->i_id, p_item->p_input->i_id, parent, m );
 }
 
 PLItem::~PLItem()
@@ -65,6 +77,7 @@ PLItem::~PLItem()
 void PLItem::insertChild( PLItem *item, int i_pos, bool signal )
 {
     assert( model );
+    fprintf( stderr, "Inserting child \n" );
     if( signal )
         model->beginInsertRows( model->index( this , 0 ), i_pos, i_pos );
     children.append( item );
@@ -79,16 +92,24 @@ int PLItem::row() const
     return 0;
 }
 
+void PLItem::update( playlist_item_t *p_item )
+{
+    assert( p_item->p_input->i_id == i_input_id );
+    strings[0] = QString::fromUtf8( p_item->p_input->psz_name );
+}
 
 /*************************************************************************
  * Playlist model implementation
  *************************************************************************/
 
-PLModel::PLModel( playlist_item_t * p_root, int i_depth, QObject *parent)
+PLModel::PLModel( playlist_t *_p_playlist,
+                  playlist_item_t * p_root, int i_depth, QObject *parent)
                                     : QAbstractItemModel(parent)
 {
-    rootItem = new PLItem( p_root, NULL, this );
-
+     rootItem = NULL;
+        rootItem = new PLItem( p_root, NULL, this );
+    fprintf( stderr, "%i -> %i, %i -> %i", p_root->i_id, rootItem->i_id, p_root->p_input->i_id, rootItem->i_input_id );
+    p_playlist= _p_playlist;
     i_items_to_append = 0;
     b_need_update     = false;
     i_cached_id       = -1;
@@ -275,6 +296,7 @@ PLItem * PLModel::FindInner( PLItem *root, int i_id, bool b_input )
                 return childFound;
             } 
         }
+        it++;
     }
     return NULL;
 }
@@ -298,13 +320,15 @@ void PLModel::customEvent( QEvent *event )
 /**** Events processing ****/
 void PLModel::ProcessInputItemUpdate( int i_input_id )
 {
-    assert( i_input_id >= 0 );
-    UpdateTreeItem( FindByInput( rootItem, i_input_id ), true );
+    if( i_input_id <= 0 ) return;
+    PLItem *item = FindByInput( rootItem, i_input_id );
+    fprintf( stderr, "Updating %i -> %p \n", i_input_id, item );
+    UpdateTreeItem( item, true );
 }
 
 void PLModel::ProcessItemRemoval( int i_id )
 {
-    assert( i_id >= 0 );
+    if( i_id <= 0 ) return;
     if( i_id == i_cached_id ) i_cached_id = -1;
     i_cached_input_id = -1;
 
@@ -314,6 +338,7 @@ void PLModel::ProcessItemRemoval( int i_id )
 void PLModel::ProcessItemAppend( playlist_add_t *p_add )
 {
     playlist_item_t *p_item = NULL;
+    PLItem *newItem = NULL;
     i_items_to_append--;
     if( b_need_update ) return;
 
@@ -323,7 +348,9 @@ void PLModel::ProcessItemAppend( playlist_add_t *p_add )
     p_item = playlist_ItemGetById( p_playlist, p_add->i_item );
     if( !p_item || p_item->i_flags & PLAYLIST_DBL_FLAG ) goto end;
 
-    nodeItem->appendChild( new PLItem( p_item, nodeItem, this ) );
+    newItem = new PLItem( p_item, nodeItem, this );
+    nodeItem->appendChild( newItem );
+    UpdateTreeItem( p_item, newItem, true );
 
 end:
     return;
@@ -362,6 +389,7 @@ void PLModel::UpdateNodeChildren( playlist_item_t *p_node, PLItem *root )
     for( int i = 0; i < p_node->i_children ; i++ )
     {
         PLItem *newItem =  new PLItem( p_node->pp_children[i], root, this );
+        fprintf( stderr, "New %p\n", newItem );
         root->appendChild( newItem, false );
         UpdateTreeItem( newItem, false );
         if( p_node->pp_children[i]->i_children != -1 )
@@ -371,13 +399,15 @@ void PLModel::UpdateNodeChildren( playlist_item_t *p_node, PLItem *root )
 
 void PLModel::UpdateTreeItem( PLItem *item, bool signal )
 {
-    playlist_item_t *p_item = playlist_ItemGetById( p_playlist, rootItem->i_id );
+    playlist_item_t *p_item = playlist_ItemGetById( p_playlist, item->i_id );
     UpdateTreeItem( p_item, item, signal );
 }
 
 void PLModel::UpdateTreeItem( playlist_item_t *p_item, PLItem *item, bool signal ) 
 {
     /// \todo
+    fprintf( stderr, "Updating item %s\n", p_item->p_input->psz_name );
+    item->update( p_item );
     if( signal )
     {    // emit 
     }
index 5c1daea..796a67b 100644 (file)
@@ -50,12 +50,15 @@ public:
     int childCount() const { return children.count(); };
     QString columnString( int col ) { return strings.value( col ); };
     PLItem *parent() { return parentItem; };
+
+    void update( playlist_item_t *);
 protected:
     QList<PLItem*> children;
     int i_id;
     int i_input_id;
     friend class PLModel;
 private:
+    void init( int, int, PLItem *, PLModel * );
     QList<QString> strings;
     PLItem *parentItem;
 
@@ -89,7 +92,7 @@ class PLModel : public QAbstractItemModel
     Q_OBJECT
 
 public:
-    PLModel( playlist_item_t *, int, QObject *parent = 0);
+    PLModel( playlist_t *, playlist_item_t *, int, QObject *parent = 0);
     ~PLModel();
 
     void customEvent( QEvent * );
@@ -110,6 +113,7 @@ public:
 
     bool b_need_update;
     int i_items_to_append;
+    void Rebuild();
 private:
     void addCallbacks();
     void delCallbacks();
@@ -118,7 +122,6 @@ private:
     playlist_t *p_playlist;
 
     /* Update processing */
-    void Rebuild();
     void ProcessInputItemUpdate( int i_input_id );
     void ProcessItemRemoval( int i_id );
     void ProcessItemAppend( playlist_add_t *p_add );