+class QLabel;
+
+enum SelectorItemType {
+ CATEGORY_TYPE,
+ SD_TYPE,
+ PL_ITEM_TYPE
+};
+
+enum SpecialData {
+ IS_PODCAST = 1,
+ IS_PL,
+ IS_ML
+};
+
+enum {
+ TYPE_ROLE = Qt::UserRole + 1,
+ NAME_ROLE, //QString
+ LONGNAME_ROLE, //QString
+ PL_ITEM_ROLE, //playlist_item_t*
+ PL_ITEM_ID_ROLE, //playlist_item_t->i_id
+ IN_ITEM_ROLE, //input_item_t->i_id
+ SPECIAL_ROLE //SpecialData
+};
+
+enum ItemAction {
+ ADD_ACTION,
+ RM_ACTION
+};
+
+
+class SelectorActionButton : public QVLCFramelessButton
+{
+protected:
+ virtual void paintEvent( QPaintEvent * );
+};
+
+class PLSelItem : public QWidget
+{
+ Q_OBJECT
+public:
+ PLSelItem( QTreeWidgetItem*, const QString& );
+
+ void setText( const QString& text ) { lbl->setText( text ); }
+ const QString text() { return lbl->text(); }
+
+ void addAction( ItemAction, const QString& toolTip = 0 );
+ QTreeWidgetItem *treeItem() { return qitem; }
+
+public slots:
+ void showAction() { if( lblAction ) lblAction->show(); }
+ void hideAction() { if( lblAction ) lblAction->hide(); }
+
+private slots:
+ void triggerAction() { emit action( this ); }
+
+signals:
+ void action( PLSelItem* );
+
+private:
+ inline void enterEvent( QEvent* ){ showAction(); }
+ inline void leaveEvent( QEvent* ){ hideAction(); }
+
+ QTreeWidgetItem* qitem;
+ QVLCFramelessButton *lblAction;
+ QLabel *lbl;
+ QHBoxLayout *layout;
+};