qt4: Replace redundant virtual with Q_DECL_OVERRIDE
[vlc.git] / modules / gui / qt4 / components / playlist / selector.hpp
1 /*****************************************************************************
2  * selector.hpp : Playlist source selector
3  ****************************************************************************
4  * Copyright (C) 2000-2009 the VideoLAN team
5  * $Id$
6  *
7  * Authors: ClĂ©ment Stenac <zorglub@videolan.org>
8  *          Jean-Baptiste Kempf
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software
22  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
23  *****************************************************************************/
24
25 #ifndef _PLSEL_H_
26 #define _PLSEL_H_
27
28 #ifdef HAVE_CONFIG_H
29 # include "config.h"
30 #endif
31
32 #include "qt4.hpp"
33 #include "util/customwidgets.hpp" /* QFramelessButton */
34
35 #include <QTreeWidget>
36
37 class QHBoxLayout;
38 class QPainter;
39 class QTreeWidgetItem;
40 class PlaylistWidget;
41 class QLabel;
42
43 enum SelectorItemType {
44     CATEGORY_TYPE,
45     SD_TYPE,
46     PL_ITEM_TYPE,
47     SQL_ML_TYPE,
48 };
49
50 enum SpecialData {
51     IS_PODCAST = 1,
52     IS_PL,
53     IS_ML
54 };
55
56 enum {
57     TYPE_ROLE = Qt::UserRole + 1,
58     NAME_ROLE,           //QString
59     LONGNAME_ROLE,       //QString
60     PL_ITEM_ROLE,        //playlist_item_t*
61     PL_ITEM_ID_ROLE,     //playlist_item_t->i_id
62     IN_ITEM_ROLE,        //input_item_t->i_id
63     SPECIAL_ROLE,        //SpecialData
64     CAP_SEARCH_ROLE,
65     SD_CATEGORY_ROLE,
66 };
67
68 enum ItemAction {
69     ADD_ACTION,
70     RM_ACTION
71 };
72
73
74 class SelectorActionButton : public QFramelessButton
75 {
76 protected:
77     void paintEvent( QPaintEvent * ) Q_DECL_OVERRIDE;
78 };
79
80 class PLSelItem : public QWidget
81 {
82     Q_OBJECT
83 public:
84     PLSelItem( QTreeWidgetItem*, const QString& );
85
86     void setText( const QString& text ) { lbl->setText( text ); }
87     QString text() const { return lbl->text(); }
88
89     void addAction( ItemAction, const QString& toolTip = 0 );
90     QTreeWidgetItem *treeItem() { return qitem; }
91
92 public slots:
93     void showAction() { if( lblAction ) lblAction->show();  }
94     void hideAction() { if( lblAction ) lblAction->hide(); }
95
96 private slots:
97     void triggerAction() { emit action( this ); }
98
99 signals:
100     void action( PLSelItem* );
101
102 private:
103     inline void enterEvent( QEvent* ){ showAction(); }
104     inline void leaveEvent( QEvent* ){ hideAction(); }
105
106     QTreeWidgetItem*     qitem;
107     QFramelessButton* lblAction;
108     QLabel*              lbl;
109     QHBoxLayout*         layout;
110 };
111
112 #include <vlc_input_item.h>
113
114 Q_DECLARE_METATYPE( playlist_item_t *);
115 Q_DECLARE_METATYPE( input_item_t *);
116 class PLSelector: public QTreeWidget
117 {
118     Q_OBJECT
119 public:
120     PLSelector( QWidget *p, intf_thread_t *_p_intf );
121     virtual ~PLSelector();
122
123     void getCurrentItemInfos( int *type, bool *delayedSearch, QString *name );
124     int getCurrentItemCategory();
125
126 protected:
127     void drawBranches ( QPainter *, const QRect &, const QModelIndex & ) const Q_DECL_OVERRIDE;
128     void dragMoveEvent ( QDragMoveEvent * event ) Q_DECL_OVERRIDE;
129     bool dropMimeData ( QTreeWidgetItem *, int, const QMimeData *, Qt::DropAction ) Q_DECL_OVERRIDE;
130     QStringList mimeTypes () const Q_DECL_OVERRIDE;
131     void wheelEvent(QWheelEvent *e) Q_DECL_OVERRIDE;
132
133 private:
134     void createItems();
135     PLSelItem * addItem ( SelectorItemType type, const char* str,
136             bool drop = false, bool bold = false, QTreeWidgetItem* parentItem = 0 );
137     PLSelItem * addPodcastItem( playlist_item_t *p_item );
138
139     PLSelItem* playlistItem;
140
141     void updateTotalDuration(PLSelItem*, const char*);
142
143     inline PLSelItem * itemWidget( QTreeWidgetItem * );
144
145     intf_thread_t    *p_intf;
146     QTreeWidgetItem  *podcastsParent;
147     int               podcastsParentId;
148     QTreeWidgetItem  *curItem;
149
150 private slots:
151     void setSource( QTreeWidgetItem *item );
152     void plItemAdded( int, int );
153     void plItemRemoved( int );
154     void inputItemUpdate( input_item_t * );
155     void podcastAdd( PLSelItem* );
156     void podcastRemove( PLSelItem* );
157
158 signals:
159     void categoryActivated( playlist_item_t *, bool );
160     void SDCategorySelected( bool );
161 };
162
163 #endif