]> git.sesse.net Git - vlc/blobdiff - modules/gui/qt4/components/playlist/selector.hpp
Revert "Qt4: small loop change"
[vlc] / modules / gui / qt4 / components / playlist / selector.hpp
index f2c367eed3596f450a4c6f3d0f8f2a53972ed43a..f040d8f63786a21356aa0e78b293484a104ce39d 100644 (file)
@@ -1,10 +1,11 @@
 /*****************************************************************************
  * 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
 # include "config.h"
 #endif
 
-#include "components/playlist/playlist_model.hpp"
+#include "qt4.hpp"
+#include "util/customwidgets.hpp" /* QVLCFramelessButton */
 
-#include <QWidget>
-#include <QTreeWidgetItem>
+#include <QTreeWidget>
 
-class QTreeWidget;
+class QHBoxLayout;
+class QPainter;
+class QTreeWidgetItem;
 class PlaylistWidget;
+class QLabel;
 
-enum {
-    PL_TYPE,
-    ML_TYPE,
+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 ); }
+    QString text() const { 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;
 };
 
 Q_DECLARE_METATYPE( playlist_item_t *);
-class PLSelector: public QWidget
+Q_DECLARE_METATYPE( input_item_t *);
+class PLSelector: public QTreeWidget
 {
-    Q_OBJECT;
+    Q_OBJECT
 public:
     PLSelector( QWidget *p, intf_thread_t *_p_intf );
     virtual ~PLSelector();
+
+    void getCurrentSelectedItem( int *type, QString *name );
+
 protected:
-    PLModel *model;
-    friend class PlaylistWidget;
+    virtual void drawBranches ( QPainter *, const QRect &, const QModelIndex & ) const;
+    virtual void dragMoveEvent ( QDragMoveEvent * event );
+    virtual bool dropMimeData ( QTreeWidgetItem *, int, const QMimeData *, Qt::DropAction );
+    virtual QStringList mimeTypes () const;
+
 private:
-    intf_thread_t *p_intf;
-    QTreeWidget *view;
     void createItems();
+    PLSelItem * addItem ( SelectorItemType type, const char* str,
+            bool drop = false, 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 * );
 };