/*****************************************************************************
* 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>
# include "config.h"
#endif
-#include "components/playlist/playlist_model.hpp"
-
-#include <QString>
#include <QList>
+#include <QString>
+#include <QUrl>
-class QSettings;
-class PLModel;
+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, PLModel * );
- PLItem( playlist_item_t *, QSettings *, PLModel * );
- ~PLItem();
-
- int row() const;
-
- void insertChild( PLItem *, int p, bool signal = true );
- void appendChild( PLItem *item, bool signal = true )
- {
- insertChild( item, children.count(), signal );
- };
-
- void remove( PLItem *removed );
+ friend class MLModel;
- PLItem *child( int row ) { return children.value( row ); };
- int childCount() const { return children.count(); };
+public:
+ virtual ~AbstractPLItem() {}
- PLItem *parent() { return parentItem; };
+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;
+
+ QList<AbstractPLItem *> children;
+ AbstractPLItem *parentItem;
+};
- void update( playlist_item_t *, bool );
+class PLItem : public AbstractPLItem
+{
+ friend class PLModel;
-protected:
- QList<PLItem*> children;
- bool b_current;
- int i_type;
- int i_id;
- int i_input_id;
- int i_showflags;
- bool b_is_node;
- input_item_t *p_input;
+public:
+ virtual ~PLItem();
+ bool hasSameParent( PLItem *other ) { return parent() == other->parent(); }
+ bool operator< ( AbstractPLItem& );
private:
- void init( playlist_item_t *, PLItem *, PLModel *, QSettings * );
- PLItem *parentItem;
- PLModel *model;
+ /* 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 * );
+ int i_playlist_id;
+ input_item_t *p_input;
};
#endif