]> git.sesse.net Git - vlc/blobdiff - modules/gui/qt4/components/playlist/playlist_item.hpp
Qt: Rework Models.
[vlc] / modules / gui / qt4 / components / playlist / playlist_item.hpp
index 0ff3f2d51f893f37ec5b26d6565aaafdcf324f6f..1aa7d06cb6b09eea9c8d6af412fec3f1067ee0a2 100644 (file)
@@ -1,7 +1,7 @@
 /*****************************************************************************
  * playlist_item.hpp : Item for a playlist tree
  ****************************************************************************
- * Copyright (C) 2006 the VideoLAN team
+ * Copyright (C) 2006-2011 the VideoLAN team
  * $Id$
  *
  * Authors: ClĂ©ment Stenac <zorglub@videolan.org>
 #endif
 
 #include <QList>
+#include <QString>
+#include <QUrl>
 
+enum
+{
+    INPUTITEM_ID = 1,
+    PLAYLIST_ID,
+    MLMEDIA_ID
+};
 
-class PLItem
+class AbstractPLItem
 {
+    friend class PLItem; /* super ugly glue stuff */
+    friend class MLItem;
+    friend class VLCModel;
     friend class PLModel;
-public:
-    PLItem( playlist_item_t *, PLItem *parent );
-    PLItem( playlist_item_t * );
-    ~PLItem();
+    friend class MLModel;
 
-    int row() const;
+public:
+    virtual ~AbstractPLItem() {}
 
-    void insertChild( PLItem *, int p, bool signal = true );
-    void appendChild( PLItem *item, bool signal = true )
-    {
-        children.insert( children.count(), item );
-    };
+protected:
+    virtual int id( int type ) = 0;
+    int childCount() const { return children.count(); }
+    int indexOf( AbstractPLItem *item ) const { return children.indexOf( item ); };
+    int lastIndexOf( AbstractPLItem *item ) const { return children.lastIndexOf( item ); };
+    AbstractPLItem *parent() { return parentItem; }
+    virtual input_item_t *inputItem() = 0;
+    void insertChild( AbstractPLItem *item, int pos = -1 ) { children.insert( pos, item ); }
+    void appendChild( AbstractPLItem *item ) { insertChild( item, children.count() ); } ;
+    virtual AbstractPLItem *child( int id ) const = 0;
+    void removeChild( AbstractPLItem *item );
+    void clearChildren();
+    virtual QUrl getURI() const = 0;
+    virtual QString getTitle() const = 0;
 
-    PLItem *child( int row ) { return children.value( row ); };
-    int childCount() const { return children.count(); };
+    QList<AbstractPLItem *> children;
+    AbstractPLItem *parentItem;
+};
 
-    PLItem *parent() { return parentItem; };
+class PLItem : public AbstractPLItem
+{
+    friend class PLModel;
 
-protected:
-    QList<PLItem*> children;
-    int i_id;
-    input_item_t *p_input;
+public:
+    virtual ~PLItem();
+    bool hasSameParent( PLItem *other ) { return parent() == other->parent(); }
+    bool operator< ( AbstractPLItem& );
 
 private:
+    /* AbstractPLItem */
+    int id( int type );
+    input_item_t *inputItem() { return p_input; }
+    AbstractPLItem *child( int id ) const { return children.value( id ); };
+    virtual QUrl getURI() const;
+    virtual QString getTitle() const;
+
+    /* Local */
+    PLItem( playlist_item_t *, PLItem *parent );
+    int row();
+    void takeChildAt( int );
+
+    PLItem( playlist_item_t * );
     void init( playlist_item_t *, PLItem * );
-    PLItem *parentItem;
+    int i_playlist_id;
+    input_item_t *p_input;
 };
 
 #endif