X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Fcomponents%2Fplaylist%2Fplaylist_model.hpp;h=cb5e68c3e04766c9ee682acc8f9eeaa6b6c192c5;hb=790811343ae90c501aabd1a40ec375659fd415f2;hp=183aab9ad7a6ed3532648c6ad3129c7b94e7cdea;hpb=e20319314d0ce591fa4ffa5a5f58a5e51b9f9a37;p=vlc diff --git a/modules/gui/qt4/components/playlist/playlist_model.hpp b/modules/gui/qt4/components/playlist/playlist_model.hpp index 183aab9ad7..cb5e68c3e0 100644 --- a/modules/gui/qt4/components/playlist/playlist_model.hpp +++ b/modules/gui/qt4/components/playlist/playlist_model.hpp @@ -5,6 +5,7 @@ * $Id$ * * Authors: Clément Stenac + * Jakob Leben * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -28,9 +29,11 @@ # include "config.h" #endif -#include +#include "qt4.hpp" + #include #include + #include "playlist_item.hpp" #include @@ -42,33 +45,8 @@ #include class QSignalMapper; - class PLItem; -#define DEPTH_PL -1 -#define DEPTH_SEL 1 - -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 -{ -public: - PLEvent( int type, int id ) : QEvent( (QEvent::Type)(type) ) - { i_id = id; p_add = NULL; }; - - PLEvent( playlist_add_t *a ) : QEvent( (QEvent::Type)(ItemAppend_Type) ) - { p_add = a; }; - - virtual ~PLEvent() {}; - - int i_id; - playlist_add_t *p_add; -}; - - class PLModel : public QAbstractItemModel { Q_OBJECT @@ -76,51 +54,62 @@ class PLModel : public QAbstractItemModel friend class PLItem; public: + enum { + IsCurrentRole = Qt::UserRole + }; + PLModel( playlist_t *, intf_thread_t *, - playlist_item_t *, int, QObject *parent = 0 ); + playlist_item_t *, QObject *parent = 0 ); ~PLModel(); - /* All types of lookups / QModel stuff */ + /*** QModel subclassing ***/ + + /* Data structure */ 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; - QModelIndex index( int r, int c, const QModelIndex &parent ) const; - QModelIndex index( PLItem *, int c ) const; - int itemId( 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; + Qt::ItemFlags flags( const QModelIndex &index ) const; + QModelIndex index( int r, int c, const QModelIndex &parent ) const; + QModelIndex parent( const QModelIndex &index ) const; - bool b_need_update; - int i_items_to_append; - - 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 */ + /* Drag and Drop */ 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; - int shownFlags() { return rootItem->i_showflags; } + /**** Custom ****/ + + /* Lookups */ + QStringList selectedURIs(); + QModelIndex index( PLItem *, int c ) const; + QModelIndex index( int i_id, int c ); + QModelIndex currentIndex(); + bool isCurrent( const QModelIndex &index ) const; + int itemId( const QModelIndex &index ) const; + + /* Actions */ + void popup( const QModelIndex & index, const QPoint &point, const QModelIndexList &list ); + void doDelete( QModelIndexList selected ); + void search( const QString& search_text ); + void sort( int column, Qt::SortOrder order ); + void sort( int i_root_id, int column, Qt::SortOrder order ); + void removeItem( int ); + void rebuild(); void rebuild( playlist_item_t *, bool b_first = false ); + + inline PLItem *getItem( QModelIndex index ) const + { + if( index.isValid() ) + return static_cast( index.internalPointer() ); + else return rootItem; + } private: - void addCallbacks(); - void delCallbacks(); - void customEvent( QEvent * ); + /* General */ PLItem *rootItem; playlist_t *p_playlist; @@ -129,42 +118,43 @@ private: static QIcon icons[ITEM_TYPE_NUMBER]; - /* Update processing */ - void ProcessInputItemUpdate( int i_input_id ); - void ProcessItemRemoval( int i_id ); - void ProcessItemAppend( playlist_add_t *p_add ); - - void UpdateTreeItem( PLItem *, bool, bool force = false ); - void UpdateTreeItem( playlist_item_t *, PLItem *, bool, bool forc = false ); - void UpdateNodeChildren( PLItem * ); - void UpdateNodeChildren( playlist_item_t *, PLItem * ); - /* Actions */ void recurseDelete( QList children, QModelIndexList *fullList ); void doDeleteItem( PLItem *item, QModelIndexList *fullList ); + void updateTreeItem( PLItem * ); + void removeItem ( PLItem * ); + void takeItem( PLItem * ); //will not delete item + void insertChildren( PLItem *node, QList& items, int i_pos ); + void dropAppendCopy( QByteArray& data, PLItem *target ); + void dropMove( QByteArray& data, PLItem *target, int new_pos ); + /* The following actions will not signal the view! */ + void updateChildren( PLItem * ); + void updateChildren( playlist_item_t *, PLItem * ); /* Popup */ - int i_popup_item, i_popup_parent; + int i_popup_item, i_popup_parent, i_popup_column; QModelIndexList current_selection; - QSignalMapper *ContextUpdateMapper; /* Lookups */ - PLItem *FindById( PLItem *, int ); - PLItem *FindByInput( PLItem *, int ); - PLItem *FindInner( PLItem *, int , bool ); + PLItem *findById( PLItem *, int ); + PLItem *findByInput( PLItem *, int ); + PLItem *findInner( PLItem *, int , bool ); + + int columnFromMeta( int meta_column ) const; + int columnToMeta( int column ) const; + bool canEdit() const; PLItem *p_cached_item; PLItem *p_cached_item_bi; int i_cached_id; int i_cached_input_id; + signals: - void shouldRemove( int ); + void currentChanged( const QModelIndex& ); + void rootChanged(); 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(); @@ -172,11 +162,14 @@ private slots: void popupInfo(); void popupStream(); void popupSave(); -#ifdef WIN32 void popupExplore(); -#endif - - void viewchanged( int ); + void popupAddNode(); + void popupSortAsc(); + void popupSortDesc(); + void processInputItemUpdate( input_item_t *); + void processInputItemUpdate( input_thread_t* p_input ); + void processItemRemoval( int i_id ); + void processItemAppend( int item, int parent ); }; #endif