]> git.sesse.net Git - vlc/commitdiff
Qt: use "no art" picture for drag-and-drop pixmap in all playlist views
authorJakob Leben <jleben@videolan.org>
Wed, 10 Mar 2010 10:47:06 +0000 (11:47 +0100)
committerJakob Leben <jleben@videolan.org>
Wed, 10 Mar 2010 10:49:38 +0000 (11:49 +0100)
This makes drag-and-drop easier, because drag-and-drop pixmap does not
cover the area under mouse cursor.

modules/gui/qt4/components/playlist/icon_view.cpp
modules/gui/qt4/components/playlist/icon_view.hpp
modules/gui/qt4/components/playlist/standardpanel.cpp

index f60ce0e9c12d1e0abee4b06e85a3ff21cb9c96b0..290300a41421755d17a87780e301a4f021a55fdf 100644 (file)
@@ -32,6 +32,7 @@
 #include <QStyleOptionViewItem>
 #include <QFontMetrics>
 #include <QPixmapCache>
+#include <QDrag>
 
 #include "assert.h"
 
@@ -309,6 +310,15 @@ QSize PlListViewItemDelegate::sizeHint ( const QStyleOptionViewItem & option, co
   return QSize( 0, height );
 }
 
+static void plViewStartDrag( QAbstractItemView *view, const Qt::DropActions & supportedActions )
+{
+    QDrag *drag = new QDrag( view );
+    drag->setPixmap( QPixmap( ":/noart64" ) );
+    drag->setMimeData( view->model()->mimeData(
+        view->selectionModel()->selectedIndexes() ) );
+    drag->exec( supportedActions );
+}
+
 PlIconView::PlIconView( PLModel *model, QWidget *parent ) : QListView( parent )
 {
     PlIconViewItemDelegate *delegate = new PlIconViewItemDelegate( this );
@@ -329,6 +339,11 @@ PlIconView::PlIconView( PLModel *model, QWidget *parent ) : QListView( parent )
     setItemDelegate( delegate );
 }
 
+void PlIconView::startDrag ( Qt::DropActions supportedActions )
+{
+    plViewStartDrag( this, supportedActions );
+}
+
 PlListView::PlListView( PLModel *model, QWidget *parent ) : QListView( parent )
 {
     setModel( model );
@@ -343,3 +358,14 @@ PlListView::PlListView( PLModel *model, QWidget *parent ) : QListView( parent )
     PlListViewItemDelegate *delegate = new PlListViewItemDelegate( this );
     setItemDelegate( delegate );
 }
+
+void PlListView::startDrag ( Qt::DropActions supportedActions )
+{
+    plViewStartDrag( this, supportedActions );
+}
+
+void PlTreeView::startDrag ( Qt::DropActions supportedActions )
+{
+    plViewStartDrag( this, supportedActions );
+}
+
index 27b704f5e61751a34ec9af25673bac6b276904af..b5cc433afafba4f93e7c887d9e0464066aac0fe9 100644 (file)
@@ -26,6 +26,7 @@
 
 #include <QStyledItemDelegate>
 #include <QListView>
+#include <QTreeView>
 
 class QPainter;
 class PLModel;
@@ -67,6 +68,8 @@ class PlIconView : public QListView
 
 public:
     PlIconView( PLModel *model, QWidget *parent = 0 );
+private:
+    void startDrag ( Qt::DropActions supportedActions );
 };
 
 class PlListView : public QListView
@@ -75,6 +78,16 @@ class PlListView : public QListView
 
 public:
     PlListView( PLModel *model, QWidget *parent = 0 );
+private:
+    void startDrag ( Qt::DropActions supportedActions );
+};
+
+class PlTreeView : public QTreeView
+{
+    Q_OBJECT
+
+private:
+    void startDrag ( Qt::DropActions supportedActions );
 };
 
 #endif
index bc31e5ae9b6fb1ec1dae925b7111aaaf4537703e..1cef8f41f60313a0d1cf3900e0544033f728dd99 100644 (file)
@@ -289,7 +289,7 @@ void StandardPLPanel::createListView()
 void StandardPLPanel::createTreeView()
 {
     /* Create and configure the QTreeView */
-    treeView = new QTreeView;
+    treeView = new PlTreeView;
 
     treeView->setIconSize( QSize( 20, 20 ) );
     treeView->setAlternatingRowColors( true );