1 /*****************************************************************************
2 * selector.hpp : Playlist source selector
3 ****************************************************************************
4 * Copyright (C) 2000-2009 the VideoLAN team
7 * Authors: Clément Stenac <zorglub@videolan.org>
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.
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.
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 *****************************************************************************/
33 #include "util/customwidgets.hpp" /* QFramelessButton */
35 #include <QTreeWidget>
39 class QTreeWidgetItem
;
43 enum SelectorItemType
{
57 TYPE_ROLE
= Qt::UserRole
+ 1,
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
72 class SelectorActionButton
: public QFramelessButton
75 virtual void paintEvent( QPaintEvent
* );
78 class PLSelItem
: public QWidget
82 PLSelItem( QTreeWidgetItem
*, const QString
& );
84 void setText( const QString
& text
) { lbl
->setText( text
); }
85 QString
text() const { return lbl
->text(); }
87 void addAction( ItemAction
, const QString
& toolTip
= 0 );
88 QTreeWidgetItem
*treeItem() { return qitem
; }
91 void showAction() { if( lblAction
) lblAction
->show(); }
92 void hideAction() { if( lblAction
) lblAction
->hide(); }
95 void triggerAction() { emit
action( this ); }
98 void action( PLSelItem
* );
101 inline void enterEvent( QEvent
* ){ showAction(); }
102 inline void leaveEvent( QEvent
* ){ hideAction(); }
104 QTreeWidgetItem
* qitem
;
105 QFramelessButton
* lblAction
;
110 Q_DECLARE_METATYPE( playlist_item_t
*);
111 Q_DECLARE_METATYPE( input_item_t
*);
112 class PLSelector
: public QTreeWidget
116 PLSelector( QWidget
*p
, intf_thread_t
*_p_intf
);
117 virtual ~PLSelector();
119 void getCurrentSelectedItem( int *type
, QString
*name
);
122 virtual void drawBranches ( QPainter
*, const QRect
&, const QModelIndex
& ) const;
123 virtual void dragMoveEvent ( QDragMoveEvent
* event
);
124 virtual bool dropMimeData ( QTreeWidgetItem
*, int, const QMimeData
*, Qt::DropAction
);
125 virtual QStringList
mimeTypes () const;
126 virtual void wheelEvent(QWheelEvent
*e
);
130 PLSelItem
* addItem ( SelectorItemType type
, const char* str
,
131 bool drop
= false, QTreeWidgetItem
* parentItem
= 0 );
132 PLSelItem
* addPodcastItem( playlist_item_t
*p_item
);
134 inline PLSelItem
* itemWidget( QTreeWidgetItem
* );
136 intf_thread_t
*p_intf
;
137 QTreeWidgetItem
*podcastsParent
;
138 int podcastsParentId
;
139 QTreeWidgetItem
*curItem
;
142 void setSource( QTreeWidgetItem
*item
);
143 void plItemAdded( int, int );
144 void plItemRemoved( int );
145 void inputItemUpdate( input_item_t
* );
146 void podcastAdd( PLSelItem
* );
147 void podcastRemove( PLSelItem
* );
150 void categoryActivated( playlist_item_t
*, bool );