playlist_table.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. from PyQt5.QtCore import pyqtSignal
  2. from PyQt5.QtWidgets import QTableWidgetItem
  3. from core.repositories import TrackRepository, SessionTrackRepository
  4. from ui.qt.widgets.DragDropTableWidget import DragDropTableWidget
  5. class PlaylistTable(DragDropTableWidget):
  6. trackSelected = pyqtSignal(object)
  7. trackDoubleClicked = pyqtSignal(object)
  8. def __init__(self, parent):
  9. super().__init__(parent)
  10. self.playlist = None
  11. self.count = -1
  12. self.cellPressed.connect(self._cellPressed)
  13. self.cellDoubleClicked.connect(self._cellDoubleClicked)
  14. def populate(self, playlist=None):
  15. if playlist:
  16. self.playlist = playlist
  17. if not self.playlist:
  18. return
  19. session_track_repo = SessionTrackRepository()
  20. track_repo = TrackRepository()
  21. self.clear()
  22. self.hideColumn(0)
  23. self.hideColumn(1)
  24. session_tracks = session_track_repo.get_by_session_id(self.playlist.id)
  25. if not session_tracks:
  26. # self.insertRow(0)
  27. # self.setItem(0, 2, QTableWidgetItem("(la liste est vide, ajoutez y vos morceaux)"))
  28. return
  29. i = 0
  30. for session_track in session_tracks:
  31. track = track_repo.get_by_id(session_track.track_id)
  32. self.insertRow(i)
  33. item = QTableWidgetItem()
  34. item.setData(0, session_track.id)
  35. self.setItem(i, 0, item)
  36. item = QTableWidgetItem()
  37. item.setData(0, track.id)
  38. self.setItem(i, 1, item)
  39. self.setItem(i, 2, QTableWidgetItem(track.title))
  40. i += 1
  41. self.count = i
  42. def clear(self):
  43. while self.rowCount():
  44. self.removeRow(0)
  45. super().clear()
  46. def _cellPressed(self, row, _):
  47. track_id = int(self.item(row, 1).data(0))
  48. if track_id:
  49. track = TrackRepository().get_by_id(track_id)
  50. self.trackSelected.emit(track)
  51. def _cellDoubleClicked(self, row, _):
  52. track_id = int(self.item(row, 1).data(0))
  53. if track_id:
  54. track = TrackRepository().get_by_id(int(track_id))
  55. self.trackDoubleClicked.emit(track)
  56. def selected_session_track(self):
  57. session_track_id = self.item(self.currentRow(), 0).data(0)
  58. if not session_track_id:
  59. return None
  60. return SessionTrackRepository().get_by_id(int(session_track_id))