]> git.sesse.net Git - vlc/blob - modules/gui/qt4/components/playlist/ml_model.hpp
Qt/ML: ML Model and Item
[vlc] / modules / gui / qt4 / components / playlist / ml_model.hpp
1 /*****************************************************************************
2  * ml_model.hpp ML model
3  *****************************************************************************
4  * Copyright (C) 2008-2011 the VideoLAN Team and AUTHORS
5  * $Id$
6  *
7  * Authors: Antoine Lejeune <phytos@videolan.org>
8  *          Jean-Philippe André <jpeg@videolan.org>
9  *          Rémi Duraffort <ivoire@videolan.org>
10  *          Adrien Maglo <magsoft@videolan.org>
11  *          Srikanth Raju <srikiraju#gmail#com>
12  *
13  * This program is free software; you can redistribute it and/or modify
14  * it under the terms of the GNU General Public License as published by
15  * the Free Software Foundation; either version 2 of the License, or
16  * (at your option) any later version.
17  *
18  * This program is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with this program; if not, write to the Free Software
25  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
26  *****************************************************************************/
27
28 #ifndef _MEDIA_LIBRARY_MLMODEL_H
29 #define _MEDIA_LIBRARY_MLMODEL_H
30
31 #ifdef HAVE_CONFIG_H
32 # include <config.h>
33 #endif
34
35 #ifdef MEDIA_LIBRARY
36 #include <vlc_common.h>
37 #include <vlc_interface.h>
38 #include <vlc_media_library.h>
39
40 #include "components/playlist/vlc_model.hpp"
41 #include "ml_item.hpp"
42 #include "qt4.hpp"
43
44 class MLItem;
45
46 /** *************************************************************************
47  * \brief Tree model for the result list
48  ****************************************************************************/
49 class MLModel : public VLCModel
50 {
51     Q_OBJECT;
52
53 public:
54     // Basic QAbstractItemModel implementation
55     MLModel( intf_thread_t *_p_intf, QObject *parent = NULL );
56     virtual ~MLModel();
57     inline MLItem *getItem( QModelIndex index ) const
58     {
59         if( index.isValid() )
60             return static_cast<MLItem*>( index.internalPointer() );
61         else return NULL;
62     }
63     virtual int getId( QModelIndex index ) const;
64
65     QVariant data( const QModelIndex &idx, int role = Qt::DisplayRole ) const;
66     bool setData( const QModelIndex &idx, const QVariant &value,
67                   int role = Qt::EditRole );
68     ml_select_e columnType( int column ) const;
69
70     QModelIndex index( int row, int column,
71                        const QModelIndex & parent = QModelIndex() ) const;
72     virtual QModelIndex currentIndex() const;
73     int rowCount( const QModelIndex & parent = QModelIndex() ) const;
74     int columnCount( const QModelIndex & parent = QModelIndex() ) const;
75
76     QModelIndex parent( const QModelIndex& ) const;
77     QVariant headerData( int, Qt::Orientation, int ) const;
78     Qt::ItemFlags flags( const QModelIndex& ) const;
79     bool isEditable( const QModelIndex& ) const;
80
81     // Drag and drop: MIME data
82     QMimeData* mimeData( const QModelIndexList & indexes ) const;
83
84     // Custom functions
85     int insertMedia( ml_media_t *p_media, int row = -1,
86                      bool bSignal = true );
87     int appendMedia( ml_media_t *p_media );
88     int insertMediaArray( vlc_array_t *p_media_array, int row = -1,
89                           bool bSignal = true );
90
91     int insertResult( const ml_result_t *p_result, int row = -1,
92                       bool bSignal = true );
93     inline int appendResult( const ml_result_t *p_result );
94     int insertResultArray( vlc_array_t *p_result_array, int row = -1,
95                            bool bSignal = true );
96
97     void remove( MLItem *item );
98     void remove( QModelIndexList list );
99     void remove( QModelIndex idx );
100
101     void clear();
102     virtual bool popup( const QModelIndex & index, const QPoint &point, const QModelIndexList &list );
103     void play( const QModelIndex &idx );
104     QStringList selectedURIs();
105
106 public slots:
107     void activateItem( const QModelIndex &index );
108
109 protected slots:
110     void popupDel();
111     void popupPlay();
112     void popupInfo();
113     void popupStream();
114     void popupSave();
115
116 private:
117     QList< MLItem* > items;
118     media_library_t* p_ml;
119
120     QModelIndex current_index;
121     QModelIndexList current_selection;
122 };
123
124 #endif
125 #endif