X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Fplaylist_model.hpp;h=eb3711258db9501c5e4d51de4cbffada0756d233;hb=30d0aba730ec2c15871d70b963b11f137f821b98;hp=2f82c854db8abc6bf92943f85cf810799ae32758;hpb=96a9eea8c77b0325391d50b002b0e068ac115a0c;p=vlc diff --git a/modules/gui/qt4/playlist_model.hpp b/modules/gui/qt4/playlist_model.hpp index 2f82c854db..eb3711258d 100644 --- a/modules/gui/qt4/playlist_model.hpp +++ b/modules/gui/qt4/playlist_model.hpp @@ -24,19 +24,24 @@ #ifndef _PLAYLIST_MODEL_H_ #define _PLAYLIST_MODEL_H_ -#include -#include #include -#include +#include #include +#include +#include +#include +#include +#include + class PLModel; +class QSignalMapper; class PLItem { public: - PLItem( int, int, PLItem *parent , PLModel *); - PLItem( playlist_item_t *, PLItem *parent, PLModel *); + PLItem( int, int, PLItem *parent , PLModel * ); + PLItem( playlist_item_t *, PLItem *parent, PLModel * ); ~PLItem(); int row() const; @@ -46,18 +51,23 @@ public: { insertChild( item, children.count(), signal ); }; + void remove( PLItem *removed ); PLItem *child( int row ) { return children.value( row ); }; int childCount() const { return children.count(); }; QString columnString( int col ) { return strings.value( col ); }; PLItem *parent() { return parentItem; }; - void update( playlist_item_t *); + void update( playlist_item_t *, bool ); protected: QList children; QList strings; + bool current; int type; int i_id; int i_input_id; + int i_showflags; + + void updateview( void ); friend class PLModel; private: void init( int, int, PLItem *, PLModel * ); @@ -68,6 +78,7 @@ private: static int ItemUpdate_Type = QEvent::User + 2; static int ItemDelete_Type = QEvent::User + 3; static int ItemAppend_Type = QEvent::User + 4; +static int PLUpdate_Type = QEvent::User + 5; class PLEvent : public QEvent { @@ -83,7 +94,6 @@ public: }; #include -#include #include class PLModel : public QAbstractItemModel @@ -91,36 +101,57 @@ class PLModel : public QAbstractItemModel Q_OBJECT public: - PLModel( playlist_t *, playlist_item_t *, int, QObject *parent = 0); + PLModel( playlist_t *, intf_thread_t *, + playlist_item_t *, int, QObject *parent = 0 ); ~PLModel(); - void customEvent( QEvent * ); - - /* QModel stuff */ - QVariant data( const QModelIndex &index, int role) const; - Qt::ItemFlags flags( const QModelIndex &index) const; + /* All types of lookups / QModel stuff */ + QVariant data( const QModelIndex &index, int role ) const; + Qt::ItemFlags flags( const QModelIndex &index ) const; QVariant headerData( int section, Qt::Orientation orientation, - int role = Qt::DisplayRole) const; - + int role = Qt::DisplayRole ) const; QModelIndex index( int r, int c, const QModelIndex &parent ) const; QModelIndex index( PLItem *, int c ) const; int itemId( const QModelIndex &index ) const; - - QModelIndex parent( const QModelIndex &index) const; + bool isCurrent( const QModelIndex &index ); + QModelIndex parent( const QModelIndex &index ) const; int childrenCount( const QModelIndex &parent = QModelIndex() ) const; int rowCount( const QModelIndex &parent = QModelIndex() ) const; int columnCount( const QModelIndex &parent = QModelIndex() ) const; bool b_need_update; int i_items_to_append; - void Rebuild(); - void rebuildRoot( playlist_item_t * ); + + void rebuild(); void rebuild( playlist_item_t * ); + bool hasRandom(); bool hasLoop(); bool hasRepeat(); + + /* Actions made by the views */ + void popup( QModelIndex & index, QPoint &point, QModelIndexList list ); + void doDelete( QModelIndexList selected ); + void search( QString search ); + void sort( int column, Qt::SortOrder order ); + void removeItem( int ); + + /* DnD handling */ + Qt::DropActions supportedDropActions() const; + QMimeData* mimeData( const QModelIndexList &indexes ) const; + bool dropMimeData( const QMimeData *data, Qt::DropAction action, + int row, int column, const QModelIndex &target ); + QStringList mimeTypes() const; + + void sendArt( QString url ); + void removeArt( ); + + int shownFlags() { return rootItem->i_showflags; } private: void addCallbacks(); void delCallbacks(); + void customEvent( QEvent * ); + PLItem *rootItem; playlist_t *p_playlist; + intf_thread_t *p_intf; int i_depth; static QIcon icons[ITEM_TYPE_NUMBER]; @@ -135,6 +166,15 @@ private: void UpdateNodeChildren( PLItem * ); void UpdateNodeChildren( playlist_item_t *, PLItem * ); + /* Actions */ + void recurseDelete( QList children, QModelIndexList *fullList ); + void doDeleteItem( PLItem *item, QModelIndexList *fullList ); + + /* Popup */ + int i_popup_item, i_popup_parent; + QModelIndexList current_selection; + QSignalMapper *ContextUpdateMapper; + /* Lookups */ PLItem *FindById( PLItem *, int ); PLItem *FindByInput( PLItem *, int ); @@ -143,8 +183,25 @@ private: PLItem *p_cached_item_bi; int i_cached_id; int i_cached_input_id; +signals: + void artSet( QString ); + void shouldRemove( int ); public slots: void activateItem( const QModelIndex &index ); + void activateItem( playlist_item_t *p_item ); + void setRandom( bool ); + void setLoop( bool ); + void setRepeat( bool ); +private slots: + void popupPlay(); + void popupDel(); + void popupInfo(); + void popupStream(); + void popupSave(); +#ifdef WIN32 + void popupExplore(); +#endif + void viewchanged( int ); friend class PLItem; };