mirror of
https://github.com/Syncplay/syncplay
synced 2024-12-17 12:24:38 +00:00
Allow for files to be added to top/middle of playlist
This commit is contained in:
parent
573947582b
commit
dae3fbbcfe
@ -1,5 +1,5 @@
|
||||
from PySide import QtGui
|
||||
from PySide.QtCore import Qt, QSettings, QSize, QPoint, QUrl
|
||||
from PySide.QtCore import Qt, QSettings, QSize, QPoint, QUrl, QLine
|
||||
from syncplay import utils, constants, version
|
||||
from syncplay.messages import getMessage
|
||||
import sys
|
||||
@ -59,7 +59,75 @@ class UserlistItemDelegate(QtGui.QStyledItemDelegate):
|
||||
QtGui.QStyledItemDelegate.paint(self, itemQPainter, optionQStyleOptionViewItem, indexQModelIndex)
|
||||
|
||||
class MainWindow(QtGui.QMainWindow):
|
||||
insertPosition = None
|
||||
|
||||
def setPlaylistInsertPosition(self, newPosition):
|
||||
if MainWindow.insertPosition <> newPosition:
|
||||
MainWindow.insertPosition = newPosition
|
||||
self.playlist.forceUpdate()
|
||||
|
||||
class PlaylistItemDelegate(QtGui.QStyledItemDelegate):
|
||||
def paint(self, itemQPainter, optionQStyleOptionViewItem, indexQModelIndex):
|
||||
QtGui.QStyledItemDelegate.paint(self, itemQPainter, optionQStyleOptionViewItem, indexQModelIndex)
|
||||
itemQPainter.save()
|
||||
lineAbove = False
|
||||
lineBelow = False
|
||||
if MainWindow.insertPosition == 0 and indexQModelIndex.row() == 0:
|
||||
lineAbove = True
|
||||
elif MainWindow.insertPosition and indexQModelIndex.row() == MainWindow.insertPosition-1:
|
||||
lineBelow = True
|
||||
if lineAbove:
|
||||
line = QLine(optionQStyleOptionViewItem.rect.topLeft(), optionQStyleOptionViewItem.rect.topRight())
|
||||
itemQPainter.drawLine(line)
|
||||
elif lineBelow:
|
||||
line = QLine(optionQStyleOptionViewItem.rect.bottomLeft(), optionQStyleOptionViewItem.rect.bottomRight())
|
||||
itemQPainter.drawLine(line)
|
||||
itemQPainter.restore()
|
||||
|
||||
class PlaylistGroupBox(QtGui.QGroupBox):
|
||||
def dragEnterEvent(self, event):
|
||||
data = event.mimeData()
|
||||
urls = data.urls()
|
||||
window = self.parent().parent().parent().parent()
|
||||
if urls and urls[0].scheme() == 'file':
|
||||
event.acceptProposedAction()
|
||||
window.setPlaylistInsertPosition(window.playlist.count() if window.clearedPlaylistNote else 0)
|
||||
else:
|
||||
super(MainWindow.PlaylistGroupBox, self).dragEnterEvent(event)
|
||||
|
||||
def dragLeaveEvent(self, event):
|
||||
window = self.parent().parent().parent().parent()
|
||||
window.setPlaylistInsertPosition(None)
|
||||
|
||||
def dropEvent(self, event):
|
||||
window = self.parent().parent().parent().parent()
|
||||
window.setPlaylistInsertPosition(None)
|
||||
if QtGui.QDropEvent.proposedAction(event) == Qt.MoveAction:
|
||||
QtGui.QDropEvent.setDropAction(event, Qt.CopyAction) # Avoids file being deleted
|
||||
data = event.mimeData()
|
||||
urls = data.urls()
|
||||
|
||||
if urls and urls[0].scheme() == 'file':
|
||||
indexRow = window.playlist.count() if window.clearedPlaylistNote else 0
|
||||
|
||||
for url in urls[::-1]:
|
||||
dropfilepath = os.path.abspath(unicode(url.toLocalFile()))
|
||||
if os.path.isfile(dropfilepath):
|
||||
window.addFileToPlaylist(dropfilepath, indexRow)
|
||||
elif os.path.isdir(dropfilepath):
|
||||
window.addFolderToPlaylist(dropfilepath)
|
||||
else:
|
||||
super(MainWindow.PlaylistWidget, self).dropEvent(event)
|
||||
|
||||
class PlaylistWidget(QtGui.QListWidget):
|
||||
def dragLeaveEvent(self, event):
|
||||
window = self.parent().parent().parent().parent().parent()
|
||||
window.setPlaylistInsertPosition(None)
|
||||
|
||||
def forceUpdate(self):
|
||||
root = self.rootIndex()
|
||||
self.dataChanged(root, root)
|
||||
|
||||
def keyPressEvent(self, event):
|
||||
if event.key() == Qt.Key_Delete:
|
||||
self._remove_selected_items()
|
||||
@ -78,18 +146,39 @@ class MainWindow(QtGui.QMainWindow):
|
||||
else:
|
||||
super(MainWindow.PlaylistWidget, self).dragEnterEvent(event)
|
||||
|
||||
def dragMoveEvent(self, event):
|
||||
data = event.mimeData()
|
||||
urls = data.urls()
|
||||
if urls and urls[0].scheme() == 'file':
|
||||
event.acceptProposedAction()
|
||||
indexRow = self.indexAt(event.pos()).row()
|
||||
window = self.parent().parent().parent().parent().parent()
|
||||
if not window.clearedPlaylistNote:
|
||||
indexRow = 0
|
||||
if indexRow == -1:
|
||||
indexRow = window.playlist.count()
|
||||
window.setPlaylistInsertPosition(indexRow)
|
||||
else:
|
||||
super(MainWindow.PlaylistWidget, self).dragMoveEvent(event)
|
||||
|
||||
def dropEvent(self, event):
|
||||
window = self.parent().parent().parent().parent().parent()
|
||||
window.setPlaylistInsertPosition(None)
|
||||
if QtGui.QDropEvent.proposedAction(event) == Qt.MoveAction:
|
||||
QtGui.QDropEvent.setDropAction(event, Qt.CopyAction) # Avoids file being deleted
|
||||
data = event.mimeData()
|
||||
urls = data.urls()
|
||||
|
||||
if urls and urls[0].scheme() == 'file':
|
||||
for url in urls:
|
||||
indexRow = self.indexAt(event.pos()).row()
|
||||
if not window.clearedPlaylistNote:
|
||||
indexRow = 0
|
||||
if indexRow == -1:
|
||||
indexRow = window.playlist.count()
|
||||
for url in urls[::-1]:
|
||||
dropfilepath = os.path.abspath(unicode(url.toLocalFile()))
|
||||
if os.path.isfile(dropfilepath):
|
||||
window.addFileToPlaylist(dropfilepath)
|
||||
window.addFileToPlaylist(dropfilepath, indexRow)
|
||||
elif os.path.isdir(dropfilepath):
|
||||
window.addFolderToPlaylist(dropfilepath)
|
||||
else:
|
||||
@ -527,33 +616,26 @@ class MainWindow(QtGui.QMainWindow):
|
||||
|
||||
self.addPlaybackLayout(window)
|
||||
|
||||
window.playlistGroup = QtGui.QGroupBox(u"Enable shared playlists")
|
||||
window.playlistGroup = self.PlaylistGroupBox(u"Enable shared playlists")
|
||||
window.playlistGroup.setCheckable(True)
|
||||
window.playlistLayout = QtGui.QHBoxLayout()
|
||||
window.playlistGroup.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Fixed)
|
||||
window.playlistGroup.setAcceptDrops(True)
|
||||
window.playlist = self.PlaylistWidget()
|
||||
window.playlist.setDragDropMode(QtGui.QAbstractItemView.InternalMove)
|
||||
window.playlist.setItemDelegate(self.PlaylistItemDelegate())
|
||||
window.playlist.setDragEnabled(True)
|
||||
window.playlist.setAcceptDrops(True)
|
||||
window.playlist.setDropIndicatorShown(True)
|
||||
window.playlist.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
|
||||
window.playlist.setDefaultDropAction(Qt.MoveAction)
|
||||
window.playlist.setDragDropMode(QtGui.QAbstractItemView.InternalMove)
|
||||
noteFont = QtGui.QFont()
|
||||
noteFont.setItalic(True)
|
||||
playlistItem = QtGui.QListWidgetItem(u"Drag file here to add it to shared playlist.")
|
||||
playlistItem = QtGui.QListWidgetItem(u"Drag file here to add it to the shared playlist.")
|
||||
playlistItem.setFont(noteFont)
|
||||
window.playlist.addItem(playlistItem)
|
||||
window.playlist.addItem("")
|
||||
playlistItem = QtGui.QListWidgetItem(u"You can drag items around too.",)
|
||||
playlistItem.setFont(noteFont)
|
||||
window.playlist.addItem(playlistItem)
|
||||
window.playlist.addItem("")
|
||||
playlistItem = QtGui.QListWidgetItem(u"...and right click here for more options (soon).")
|
||||
playlistItem.setFont(noteFont)
|
||||
window.playlist.addItem(playlistItem)
|
||||
window.playlist.addItem("")
|
||||
playlistItem = QtGui.QListWidgetItem(u"<-- Test icon for currently playing file")
|
||||
window.playlist.addItem(playlistItem)
|
||||
window.playlist.addItem("")
|
||||
playlistItem.setFont(noteFont)
|
||||
playlistItem.setIcon(QtGui.QIcon(self.resourcespath + 'bullet_right_grey.png'))
|
||||
window.playlist.addItem(playlistItem)
|
||||
window.playlistLayout.addWidget(window.playlist)
|
||||
window.playlistLayout.setAlignment(Qt.AlignTop)
|
||||
window.playlistGroup.setLayout(window.playlistLayout)
|
||||
@ -849,10 +931,13 @@ class MainWindow(QtGui.QMainWindow):
|
||||
self._syncplayClient._player.openFile(dropfilepath, resetPosition=True)
|
||||
self._syncplayClient.setPosition(0)
|
||||
|
||||
def addFileToPlaylist(self, filePath):
|
||||
def addFileToPlaylist(self, filePath, index = -1):
|
||||
if os.path.isfile(filePath):
|
||||
self.removePlaylistNote()
|
||||
self.playlist.addItem(os.path.basename(filePath))
|
||||
if index == -1:
|
||||
self.playlist.addItem(os.path.basename(filePath))
|
||||
else:
|
||||
self.playlist.insertItem(index, os.path.basename(filePath))
|
||||
|
||||
def addStreamToPlaylist(self, filePath):
|
||||
self.removePlayListNote()
|
||||
|
Loading…
Reference in New Issue
Block a user