summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <wyskas@gmail.com>2009-09-19 10:49:10 +0200
committerAnton Khirnov <wyskas@gmail.com>2009-09-19 10:49:10 +0200
commita5019465a52dbbe17c625c1c1045427c5059fe9e (patch)
tree661759b271577b66218ec96e263b63a95cc9ed57
parent6f1cf7b125325ec2d95986a60ee34ca127129fc8 (diff)
Playlist: support for moving songs with drag&drop
-rw-r--r--nephilim/common.py32
-rw-r--r--nephilim/mpclient.py11
-rw-r--r--nephilim/plugins/Library.py20
-rw-r--r--nephilim/plugins/Playlist.py18
4 files changed, 51 insertions, 30 deletions
diff --git a/nephilim/common.py b/nephilim/common.py
index 7d6ba06..e3af3ef 100644
--- a/nephilim/common.py
+++ b/nephilim/common.py
@@ -146,3 +146,35 @@ class MetadataFetcher(QtCore.QObject):
pass
self.rep.abort()
self.rep = None
+
+class SongsMimeData(QtCore.QMimeData):
+ # private
+ __songs = None
+ __plistsongs = None
+
+ def set_songs(self, songs):
+ self.__songs = songs
+
+ def songs(self):
+ return self.__songs
+
+ def set_plistsongs(self, songs):
+ self.__plistsongs = songs
+
+ def plistsongs(self):
+ return self.__plistsongs
+
+ def formats(self):
+ types = QtCore.QMimeData.formats(self)
+ if self.__songs:
+ types += MIMETYPES['songs']
+ if self.__plistsongs:
+ types += MIMETYPES['plistsongs']
+ return types
+
+ def hasFormat(self, format):
+ if format == MIMETYPES['songs'] and self.__songs:
+ return True
+ elif format == MIMETYPES['plistsongs'] and self.__plistsongs:
+ return True
+ return QtCore.QMimeData.hasFormat(self, format)
diff --git a/nephilim/mpclient.py b/nephilim/mpclient.py
index 31b242f..9e287d7 100644
--- a/nephilim/mpclient.py
+++ b/nephilim/mpclient.py
@@ -295,16 +295,11 @@ class MPClient(QtCore.QObject):
if self._status['state'] == 'stop' and ret:
self.play(ret[0])
def move(self, source, target):
- """Move the songs in playlist. Takes a list of source ids and one target position."""
- self.logger.info('Moving %d to %d.'%(source, target))
+ """Move the songs in playlist. Takes one source id and one target position."""
+ self.logger.info('Moving %s to %s.'%(source, target))
if not self.__check_command_ok('moveid'):
return
- self._client.command_list_ok_begin()
- i = 0
- for id in source:
- self._client.moveid(id, target + i)
- i += 1
- list(self._client.command_list_end())
+ self._client.moveid(source, target)
#### private ####
def __finish_connect(self):
diff --git a/nephilim/plugins/Library.py b/nephilim/plugins/Library.py
index 348069c..c746af6 100644
--- a/nephilim/plugins/Library.py
+++ b/nephilim/plugins/Library.py
@@ -19,7 +19,7 @@ from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import QVariant
from ..plugin import Plugin
-from ..common import MIMETYPES
+from ..common import MIMETYPES, SongsMimeData
class Library(Plugin):
# public, const
@@ -260,21 +260,3 @@ class LibraryWidget(QtGui.QWidget):
paths.append(song)
self.plugin.mpclient.add(paths)
-class SongsMimeData(QtCore.QMimeData):
- # private
- __songs = None
-
- def set_songs(self, songs):
- self.__songs = songs
-
- def songs(self):
- return self.__songs
-
- def formats(self):
- types = QtCore.QMimeData.formats(self)
- return types if not self.__songs else types + [MIMETYPES['songs']]
-
- def hasFormat(self, format):
- if format == MIMETYPES['songs'] and self.__songs:
- return True
- return QtCore.QMimeData.hasFormat(self, format)
diff --git a/nephilim/plugins/Playlist.py b/nephilim/plugins/Playlist.py
index b6266cc..72e1d8b 100644
--- a/nephilim/plugins/Playlist.py
+++ b/nephilim/plugins/Playlist.py
@@ -19,7 +19,7 @@ from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import QVariant
from ..plugin import Plugin
-from ..common import MIMETYPES
+from ..common import MIMETYPES, SongsMimeData
class Playlist(Plugin):
# public, const
@@ -82,7 +82,7 @@ class PlaylistWidget(QtGui.QWidget):
# drag&drop
self.viewport().setAcceptDrops(True)
self.setDropIndicatorShown(True)
- self.setDragDropMode(QtGui.QAbstractItemView.DropOnly)
+ self.setDragDropMode(QtGui.QAbstractItemView.DragDrop)
columns = self.plugin.settings.value(self.plugin.name + '/columns').toStringList()
self.setColumnCount(len(columns))
@@ -118,8 +118,20 @@ class PlaylistWidget(QtGui.QWidget):
else:
QtGui.QTreeWidget.keyPressEvent(self, event)
+ def mimeData(self, items):
+ data = SongsMimeData()
+ data.set_plistsongs([items[0].id])
+ return data
+
def dropMimeData(self, parent, index, data, action):
- if data.hasFormat(MIMETYPES['songs']):
+ if data.hasFormat(MIMETYPES['plistsongs']):
+ if parent:
+ index = self.indexOfTopLevelItem(parent)
+ elif index >= self.topLevelItemCount():
+ index = self.topLevelItemCount() - 1
+ self.plugin.mpclient.move(data.plistsongs()[0], index)
+ return True
+ elif data.hasFormat(MIMETYPES['songs']):
if parent:
index = self.indexOfTopLevelItem(parent)
self.plugin.mpclient.add(data.songs(), index)