/*****************************************************************************
* selector.hpp : Playlist source selector
****************************************************************************
- * Copyright (C) 2000-2005 the VideoLAN team
+ * Copyright (C) 2000-2009 the VideoLAN team
* $Id$
*
* Authors: Clément Stenac <zorglub@videolan.org>
+ * Jean-Baptiste Kempf
*
* 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
#ifndef _PLSEL_H_
#define _PLSEL_H_
-#include <vlc/vlc.h>
-#include <QWidget>
-#include <QString>
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <QTreeWidget>
+#include <QTreeWidgetItem>
+#include <QStyledItemDelegate>
+#include <QPainter>
+#include <QPushButton>
+#include <QLabel>
+#include <QHBoxLayout>
+#include "util/customwidgets.hpp"
+
+#include <vlc_playlist.h>
+
+#include "qt4.hpp"
+
+class PlaylistWidget;
+
+enum SelectorItemType {
+ CATEGORY_TYPE,
+ SD_TYPE,
+ PL_ITEM_TYPE
+};
+
+enum SpecialData {
+ IS_PODCAST = 1,
+ IS_PL,
+ IS_ML
+};
+
+enum {
+ TYPE_ROLE = Qt::UserRole,
+ 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 PLSelector: public QWidget
+
+class SelectorActionButton : public QVLCFramelessButton
+{
+public:
+ SelectorActionButton( QWidget *parent = NULL )
+ : QVLCFramelessButton( parent ) {}
+private:
+ void paintEvent( QPaintEvent * );
+};
+
+class PLSelItem : public QWidget
{
- Q_OBJECT;
+ Q_OBJECT
+public:
+ PLSelItem( QTreeWidgetItem*, const QString& );
+ void setText( const QString& );
+ void addAction( ItemAction, const QString& toolTip = 0 );
+ QTreeWidgetItem *treeItem() { return qitem; }
+ QString text() { return lbl->text(); }
+public slots:
+ void showAction();
+ void hideAction();
+private slots:
+ void triggerAction() { emit action( this ); }
+signals:
+ void action( PLSelItem* );
+private:
+ void enterEvent( QEvent* );
+ void leaveEvent( QEvent* );
+ QTreeWidgetItem* qitem;
+ QVLCFramelessButton *lblAction;
+ QLabel *lbl;
+ QHBoxLayout *layout;
+};
+
+Q_DECLARE_METATYPE( playlist_item_t *);
+Q_DECLARE_METATYPE( input_item_t *);
+class PLSelector: public QTreeWidget
+{
+ Q_OBJECT
public:
PLSelector( QWidget *p, intf_thread_t *_p_intf );
virtual ~PLSelector();
+protected:
+ friend class PlaylistWidget;
private:
+ QStringList mimeTypes () const;
+ bool dropMimeData ( QTreeWidgetItem *, int, const QMimeData *, Qt::DropAction );
+ void dragMoveEvent ( QDragMoveEvent * event );
+ void createItems();
+ void drawBranches ( QPainter *, const QRect &, const QModelIndex & ) const;
+ PLSelItem * addItem (
+ SelectorItemType type, const char* str, bool drop,
+ QTreeWidgetItem* parentItem = 0 );
+ PLSelItem * addPodcastItem( playlist_item_t *p_item );
+ inline PLSelItem * itemWidget( QTreeWidgetItem * );
intf_thread_t *p_intf;
+ QTreeWidgetItem *podcastsParent;
+ int podcastsParentId;
+private slots:
+ void setSource( QTreeWidgetItem *item );
+ void plItemAdded( int, int );
+ void plItemRemoved( int );
+ void inputItemUpdate( input_item_t * );
+ void podcastAdd( PLSelItem* );
+ void podcastRemove( PLSelItem* );
+
+signals:
+ void activated( playlist_item_t * );
};
#endif