#include <QFontMetrics>
#include <QPixmapCache>
#include <QDrag>
+#include <QDragMoveEvent>
#include "assert.h"
drag->exec( supportedActions );
}
+static void plViewDragMoveEvent( QAbstractItemView *view, QDragMoveEvent * event )
+{
+ if( event->keyboardModifiers() & Qt::ControlModifier &&
+ event->possibleActions() & Qt::CopyAction )
+ event->setDropAction( Qt::CopyAction );
+ else event->acceptProposedAction();
+}
+
PlIconView::PlIconView( PLModel *model, QWidget *parent ) : QListView( parent )
{
PlIconViewItemDelegate *delegate = new PlIconViewItemDelegate( this );
plViewStartDrag( this, supportedActions );
}
+void PlIconView::dragMoveEvent ( QDragMoveEvent * event )
+{
+ plViewDragMoveEvent( this, event );
+ QAbstractItemView::dragMoveEvent( event );
+}
+
PlListView::PlListView( PLModel *model, QWidget *parent ) : QListView( parent )
{
setModel( model );
plViewStartDrag( this, supportedActions );
}
+void PlListView::dragMoveEvent ( QDragMoveEvent * event )
+{
+ plViewDragMoveEvent( this, event );
+ QAbstractItemView::dragMoveEvent( event );
+}
+
void PlTreeView::startDrag ( Qt::DropActions supportedActions )
{
plViewStartDrag( this, supportedActions );
}
+void PlTreeView::dragMoveEvent ( QDragMoveEvent * event )
+{
+ plViewDragMoveEvent( this, event );
+ QAbstractItemView::dragMoveEvent( event );
+}
PlIconView( PLModel *model, QWidget *parent = 0 );
private:
void startDrag ( Qt::DropActions supportedActions );
+ void dragMoveEvent ( QDragMoveEvent * event );
};
class PlListView : public QListView
PlListView( PLModel *model, QWidget *parent = 0 );
private:
void startDrag ( Qt::DropActions supportedActions );
+ void dragMoveEvent ( QDragMoveEvent * event );
};
class PlTreeView : public QTreeView
private:
void startDrag ( Qt::DropActions supportedActions );
+ void dragMoveEvent ( QDragMoveEvent * event );
};
#endif
Qt::DropActions PLModel::supportedDropActions() const
{
- return Qt::CopyAction; /* Why not Qt::MoveAction */
+ return Qt::CopyAction | Qt::MoveAction;
}
Qt::ItemFlags PLModel::flags( const QModelIndex &index ) const
bool PLModel::dropMimeData( const QMimeData *data, Qt::DropAction action,
int row, int column, const QModelIndex &parent )
{
+ bool copy = action == Qt::CopyAction;
+ if( !copy && action != Qt::MoveAction )
+ return true;
+
const PlMimeData *plMimeData = qobject_cast<const PlMimeData*>( data );
if( plMimeData )
{
- if( action == Qt::IgnoreAction )
- return true;
-
- PL_LOCK;
- playlist_item_t *p_parent =
- playlist_ItemGetById( p_playlist, itemId( parent ) );
- if( !p_parent || p_parent->i_children == -1 )
- {
- PL_UNLOCK;
- return false;
- }
-
- bool copy = false;
- playlist_item_t *p_pl = p_playlist->p_playing;
- playlist_item_t *p_ml = p_playlist->p_media_library;
- if
- (
- row == -1 && (
- ( p_pl && p_parent == p_pl ) ||
- ( p_ml && p_parent == p_ml ) )
- )
- copy = true;
- PL_UNLOCK;
-
if( copy )
dropAppendCopy( plMimeData, getItem( parent ) );
else
return true;
}
+void PLSelector::dragMoveEvent ( QDragMoveEvent * event )
+{
+ event->setDropAction( Qt::CopyAction );
+ QAbstractItemView::dragMoveEvent( event );
+}
+
void PLSelector::plItemAdded( int item, int parent )
{
if( parent != podcastsParentId ) return;
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 (