浏览代码

add drag and drop from explorer to playlist

olinox 4 年之前
父节点
当前提交
57d1cf889b
共有 7 个文件被更改,包括 1305 次插入2067 次删除
  1. 6 6
      notes
  2. 8 2
      ui/qt/main.ui
  3. 38 34
      ui/qt/main_ui.py
  4. 1241 2023
      ui/qt/rsc_rc.py
  5. 2 2
      ui/qt/widgets/playlist_table.py
  6. 5 0
      ui/qt/widgets/sqt/SQTableWidget.py
  7. 5 0
      ui/window.py

+ 6 - 6
notes

@@ -10,10 +10,6 @@ Bugs:
 
 Priorité 1:
 
-* maj les tables playlist et explorer quand les metas d'un fichier sont modifiées
-* (?) permettre de reset les metas d'une piste à partir du fichier ou de remplacer directement les metas du fichier
-* permettre de réordonner correctement les musiques
-* permettre un glisser-déposer de l'explorer vers la playlist
 * Imprimer la séance
 * playlists: afficher la durée des musiques
 
@@ -21,6 +17,10 @@ Priorité 2:
 
 * Ajouter le module de téléchargement depuis youtube
 * faire un prompt premier lancement pour ajouter des dossiers de musique et créer une première séance
-* ajouter des options de paramétrage des pistes d'une playlist: passage de morceau "fondu", pause après le morceau,
-  sleep x secondes après le morceau
+* ajouter des options de paramétrage des pistes d'une playlist:
+  * passage de morceau "fondu"
+  * pause après le morceau
+  * démarrer le morceau à x secs
+  * finir le morceau à x secs
+
 * placer des marqueurs de début-fin des morceaux sur les notes de la séances

+ 8 - 2
ui/qt/main.ui

@@ -439,6 +439,9 @@
                   <property name="editTriggers">
                    <set>QAbstractItemView::NoEditTriggers</set>
                   </property>
+                  <property name="dragDropMode">
+                   <enum>QAbstractItemView::DragOnly</enum>
+                  </property>
                   <property name="alternatingRowColors">
                    <bool>true</bool>
                   </property>
@@ -1299,6 +1302,9 @@
                   <property name="editTriggers">
                    <set>QAbstractItemView::NoEditTriggers</set>
                   </property>
+                  <property name="showDropIndicator" stdset="0">
+                   <bool>false</bool>
+                  </property>
                   <property name="dragEnabled">
                    <bool>true</bool>
                   </property>
@@ -1306,10 +1312,10 @@
                    <bool>false</bool>
                   </property>
                   <property name="dragDropMode">
-                   <enum>QAbstractItemView::NoDragDrop</enum>
+                   <enum>QAbstractItemView::DropOnly</enum>
                   </property>
                   <property name="defaultDropAction">
-                   <enum>Qt::MoveAction</enum>
+                   <enum>Qt::IgnoreAction</enum>
                   </property>
                   <property name="alternatingRowColors">
                    <bool>true</bool>

+ 38 - 34
ui/qt/main_ui.py

@@ -182,11 +182,14 @@ class Ui_mainWindow(object):
         self.explorerFilterTags.setMinimumSize(QtCore.QSize(0, 28))
         self.explorerFilterTags.setMaximumSize(QtCore.QSize(16777215, 28))
         self.explorerFilterTags.setObjectName("explorerFilterTags")
-        self.explorerFilterTags.addItem("")
+        icon4 = QtGui.QIcon()
+        icon4.addPixmap(QtGui.QPixmap(":/img/rsc/filter.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.explorerFilterTags.addItem(icon4, "")
         self.verticalLayout_8.addWidget(self.explorerFilterTags)
         self.explorerTable = ExplorerTable(self.page_3)
         self.explorerTable.setMinimumSize(QtCore.QSize(320, 0))
         self.explorerTable.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
+        self.explorerTable.setDragDropMode(QtWidgets.QAbstractItemView.DragOnly)
         self.explorerTable.setAlternatingRowColors(True)
         self.explorerTable.setIndentation(10)
         self.explorerTable.setAnimated(True)
@@ -238,9 +241,9 @@ class Ui_mainWindow(object):
         self.explorerTrackEdit.setMinimumSize(QtCore.QSize(28, 28))
         self.explorerTrackEdit.setMaximumSize(QtCore.QSize(28, 28))
         self.explorerTrackEdit.setText("")
-        icon4 = QtGui.QIcon()
-        icon4.addPixmap(QtGui.QPixmap(":/img/rsc/edit.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.explorerTrackEdit.setIcon(icon4)
+        icon5 = QtGui.QIcon()
+        icon5.addPixmap(QtGui.QPixmap(":/img/rsc/edit.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.explorerTrackEdit.setIcon(icon5)
         self.explorerTrackEdit.setObjectName("explorerTrackEdit")
         self.horizontalLayout_13.addWidget(self.explorerTrackEdit)
         self.verticalLayout_9.addLayout(self.horizontalLayout_13)
@@ -445,9 +448,9 @@ class Ui_mainWindow(object):
         self.explorerTrackPlay.setEnabled(False)
         self.explorerTrackPlay.setMinimumSize(QtCore.QSize(220, 38))
         self.explorerTrackPlay.setMaximumSize(QtCore.QSize(16777215, 38))
-        icon5 = QtGui.QIcon()
-        icon5.addPixmap(QtGui.QPixmap(":/img/rsc/play.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.explorerTrackPlay.setIcon(icon5)
+        icon6 = QtGui.QIcon()
+        icon6.addPixmap(QtGui.QPixmap(":/img/rsc/play.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.explorerTrackPlay.setIcon(icon6)
         self.explorerTrackPlay.setIconSize(QtCore.QSize(12, 12))
         self.explorerTrackPlay.setObjectName("explorerTrackPlay")
         self.verticalLayout_5.addWidget(self.explorerTrackPlay)
@@ -455,9 +458,9 @@ class Ui_mainWindow(object):
         self.explorerAddToPlaylist.setEnabled(False)
         self.explorerAddToPlaylist.setMinimumSize(QtCore.QSize(220, 38))
         self.explorerAddToPlaylist.setMaximumSize(QtCore.QSize(16777215, 38))
-        icon6 = QtGui.QIcon()
-        icon6.addPixmap(QtGui.QPixmap(":/img/rsc/plus.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.explorerAddToPlaylist.setIcon(icon6)
+        icon7 = QtGui.QIcon()
+        icon7.addPixmap(QtGui.QPixmap(":/img/rsc/plus.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.explorerAddToPlaylist.setIcon(icon7)
         self.explorerAddToPlaylist.setObjectName("explorerAddToPlaylist")
         self.verticalLayout_5.addWidget(self.explorerAddToPlaylist)
         self.horizontalLayout_6.addLayout(self.verticalLayout_5)
@@ -488,10 +491,11 @@ class Ui_mainWindow(object):
         self.explorerPlaylist.setEnabled(False)
         self.explorerPlaylist.setMinimumSize(QtCore.QSize(240, 0))
         self.explorerPlaylist.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
+        self.explorerPlaylist.setProperty("showDropIndicator", False)
         self.explorerPlaylist.setDragEnabled(True)
         self.explorerPlaylist.setDragDropOverwriteMode(False)
-        self.explorerPlaylist.setDragDropMode(QtWidgets.QAbstractItemView.NoDragDrop)
-        self.explorerPlaylist.setDefaultDropAction(QtCore.Qt.MoveAction)
+        self.explorerPlaylist.setDragDropMode(QtWidgets.QAbstractItemView.DropOnly)
+        self.explorerPlaylist.setDefaultDropAction(QtCore.Qt.IgnoreAction)
         self.explorerPlaylist.setAlternatingRowColors(True)
         self.explorerPlaylist.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
         self.explorerPlaylist.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
@@ -516,33 +520,33 @@ class Ui_mainWindow(object):
         self.btnPlaylistMoveToTop = QtWidgets.QToolButton(self.page_3)
         self.btnPlaylistMoveToTop.setMinimumSize(QtCore.QSize(28, 28))
         self.btnPlaylistMoveToTop.setMaximumSize(QtCore.QSize(28, 28))
-        icon7 = QtGui.QIcon()
-        icon7.addPixmap(QtGui.QPixmap(":/img/rsc/double-up-arrow.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.btnPlaylistMoveToTop.setIcon(icon7)
+        icon8 = QtGui.QIcon()
+        icon8.addPixmap(QtGui.QPixmap(":/img/rsc/double-up-arrow.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnPlaylistMoveToTop.setIcon(icon8)
         self.btnPlaylistMoveToTop.setObjectName("btnPlaylistMoveToTop")
         self.horizontalLayout_22.addWidget(self.btnPlaylistMoveToTop)
         self.btnPlaylistMoveUp = QtWidgets.QToolButton(self.page_3)
         self.btnPlaylistMoveUp.setMinimumSize(QtCore.QSize(28, 28))
         self.btnPlaylistMoveUp.setMaximumSize(QtCore.QSize(28, 28))
-        icon8 = QtGui.QIcon()
-        icon8.addPixmap(QtGui.QPixmap(":/img/rsc/arrow-up.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.btnPlaylistMoveUp.setIcon(icon8)
+        icon9 = QtGui.QIcon()
+        icon9.addPixmap(QtGui.QPixmap(":/img/rsc/arrow-up.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnPlaylistMoveUp.setIcon(icon9)
         self.btnPlaylistMoveUp.setObjectName("btnPlaylistMoveUp")
         self.horizontalLayout_22.addWidget(self.btnPlaylistMoveUp)
         self.btnPlaylistMoveDown = QtWidgets.QToolButton(self.page_3)
         self.btnPlaylistMoveDown.setMinimumSize(QtCore.QSize(28, 28))
         self.btnPlaylistMoveDown.setMaximumSize(QtCore.QSize(28, 288))
-        icon9 = QtGui.QIcon()
-        icon9.addPixmap(QtGui.QPixmap(":/img/rsc/arrow-down.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.btnPlaylistMoveDown.setIcon(icon9)
+        icon10 = QtGui.QIcon()
+        icon10.addPixmap(QtGui.QPixmap(":/img/rsc/arrow-down.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnPlaylistMoveDown.setIcon(icon10)
         self.btnPlaylistMoveDown.setObjectName("btnPlaylistMoveDown")
         self.horizontalLayout_22.addWidget(self.btnPlaylistMoveDown)
         self.btnPlaylistMoveToBottom = QtWidgets.QToolButton(self.page_3)
         self.btnPlaylistMoveToBottom.setMinimumSize(QtCore.QSize(28, 28))
         self.btnPlaylistMoveToBottom.setMaximumSize(QtCore.QSize(28, 28))
-        icon10 = QtGui.QIcon()
-        icon10.addPixmap(QtGui.QPixmap(":/img/rsc/double-below-arrow.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.btnPlaylistMoveToBottom.setIcon(icon10)
+        icon11 = QtGui.QIcon()
+        icon11.addPixmap(QtGui.QPixmap(":/img/rsc/double-below-arrow.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnPlaylistMoveToBottom.setIcon(icon11)
         self.btnPlaylistMoveToBottom.setObjectName("btnPlaylistMoveToBottom")
         self.horizontalLayout_22.addWidget(self.btnPlaylistMoveToBottom)
         spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
@@ -550,9 +554,9 @@ class Ui_mainWindow(object):
         self.btnPlaylistRemove = QtWidgets.QToolButton(self.page_3)
         self.btnPlaylistRemove.setMinimumSize(QtCore.QSize(28, 28))
         self.btnPlaylistRemove.setMaximumSize(QtCore.QSize(28, 28))
-        icon11 = QtGui.QIcon()
-        icon11.addPixmap(QtGui.QPixmap(":/img/rsc/trash.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.btnPlaylistRemove.setIcon(icon11)
+        icon12 = QtGui.QIcon()
+        icon12.addPixmap(QtGui.QPixmap(":/img/rsc/trash.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnPlaylistRemove.setIcon(icon12)
         self.btnPlaylistRemove.setObjectName("btnPlaylistRemove")
         self.horizontalLayout_22.addWidget(self.btnPlaylistRemove)
         self.verticalLayout_12.addLayout(self.horizontalLayout_22)
@@ -620,16 +624,16 @@ class Ui_mainWindow(object):
         self.horizontalLayout_7.setObjectName("horizontalLayout_7")
         self.musicFoldersRemoveButton = QtWidgets.QPushButton(self.page_5)
         self.musicFoldersRemoveButton.setMinimumSize(QtCore.QSize(0, 32))
-        icon12 = QtGui.QIcon()
-        icon12.addPixmap(QtGui.QPixmap(":/img/rsc/delete.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.musicFoldersRemoveButton.setIcon(icon12)
+        icon13 = QtGui.QIcon()
+        icon13.addPixmap(QtGui.QPixmap(":/img/rsc/delete.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.musicFoldersRemoveButton.setIcon(icon13)
         self.musicFoldersRemoveButton.setObjectName("musicFoldersRemoveButton")
         self.horizontalLayout_7.addWidget(self.musicFoldersRemoveButton)
         spacerItem5 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
         self.horizontalLayout_7.addItem(spacerItem5)
         self.musicFoldersAddButton = QtWidgets.QPushButton(self.page_5)
         self.musicFoldersAddButton.setMinimumSize(QtCore.QSize(128, 32))
-        self.musicFoldersAddButton.setIcon(icon6)
+        self.musicFoldersAddButton.setIcon(icon7)
         self.musicFoldersAddButton.setObjectName("musicFoldersAddButton")
         self.horizontalLayout_7.addWidget(self.musicFoldersAddButton)
         self.verticalLayout_6.addLayout(self.horizontalLayout_7)
@@ -673,7 +677,7 @@ class Ui_mainWindow(object):
         self.tableTagsRemoveButton = QtWidgets.QPushButton(self.page_5)
         self.tableTagsRemoveButton.setMinimumSize(QtCore.QSize(100, 32))
         self.tableTagsRemoveButton.setMaximumSize(QtCore.QSize(100, 32))
-        self.tableTagsRemoveButton.setIcon(icon12)
+        self.tableTagsRemoveButton.setIcon(icon13)
         self.tableTagsRemoveButton.setObjectName("tableTagsRemoveButton")
         self.horizontalLayout_20.addWidget(self.tableTagsRemoveButton)
         spacerItem6 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
@@ -681,7 +685,7 @@ class Ui_mainWindow(object):
         self.tagsTableAddButton = QtWidgets.QPushButton(self.page_5)
         self.tagsTableAddButton.setMinimumSize(QtCore.QSize(128, 32))
         self.tagsTableAddButton.setMaximumSize(QtCore.QSize(128, 32))
-        self.tagsTableAddButton.setIcon(icon6)
+        self.tagsTableAddButton.setIcon(icon7)
         self.tagsTableAddButton.setObjectName("tagsTableAddButton")
         self.horizontalLayout_20.addWidget(self.tagsTableAddButton)
         self.verticalLayout_6.addLayout(self.horizontalLayout_20)
@@ -708,7 +712,7 @@ class Ui_mainWindow(object):
         self.retranslateUi(mainWindow)
         self.menu.setCurrentRow(-1)
         self.stack.setCurrentIndex(1)
-        self.explorerFilterTags.setCurrentIndex(0)
+        self.explorerFilterTags.setCurrentIndex(-1)
         self.explorerTrackMetaStack.setCurrentIndex(1)
         QtCore.QMetaObject.connectSlotsByName(mainWindow)
 

文件差异内容过多而无法显示
+ 1241 - 2023
ui/qt/rsc_rc.py


+ 2 - 2
ui/qt/widgets/playlist_table.py

@@ -3,10 +3,10 @@ from PyQt5.QtGui import QIcon, QPixmap
 from PyQt5.QtWidgets import QTableWidgetItem
 
 from core.repositories import TrackRepository, SessionTrackRepository
-from ui.qt.widgets.DragDropTableWidget import DragDropTableWidget
+from ui.qt.widgets.sqt.SQTableWidget import SQTableWidget
 
 
-class PlaylistTable(DragDropTableWidget):
+class PlaylistTable(SQTableWidget):
     trackSelected = pyqtSignal(object)
     trackDoubleClicked = pyqtSignal(object)
 

+ 5 - 0
ui/qt/widgets/sqt/SQTableWidget.py

@@ -1,7 +1,9 @@
+from PyQt5.QtCore import pyqtSignal
 from PyQt5.QtWidgets import QTableWidget
 
 
 class SQTableWidget(QTableWidget):
+    droppedEvent = pyqtSignal(object)
 
     def rows(self):
         for index in range(self.rowCount()):
@@ -10,3 +12,6 @@ class SQTableWidget(QTableWidget):
     def columns(self):
         for index in range(self.columnCount()):
             yield index
+
+    def dropEvent(self, event):
+        self.droppedEvent.emit(event)

+ 5 - 0
ui/window.py

@@ -92,6 +92,7 @@ class MainWindow(QMainWindow):
         self.ui.btnSelectPlaylist.clicked.connect(self.selectPlaylist)
 
         self.ui.explorerAddToPlaylist.clicked.connect(self.add_to_playlist)
+        self.ui.explorerPlaylist.droppedEvent.connect(self.add_to_playlist)
 
         self.ui.explorerPlaylist.trackSelected.connect(self.newTrackSelected)
         self.ui.explorerPlaylist.trackDoubleClicked.connect(self.play_playlist)
@@ -319,6 +320,10 @@ class MainWindow(QMainWindow):
 
         self.selected_playlist = playlist
 
+    def playlistItemDropped(self, event):
+        if event.source() == ExplorerTable:
+            self.add_to_playlist()
+
     def add_to_playlist(self):
         track = self.ui.explorerTable.selected_track()
         if track is None:

部分文件因为文件数量过多而无法显示