playlist_table.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. from PyQt5.QtCore import pyqtSignal
  2. from PyQt5.QtGui import QIcon, QPixmap
  3. from PyQt5.QtWidgets import QTableWidgetItem
  4. from core.repositories import TrackRepository, SessionTrackRepository
  5. from ui.qt.widgets.DragDropTableWidget import DragDropTableWidget
  6. class PlaylistTable(DragDropTableWidget):
  7. trackSelected = pyqtSignal(object)
  8. trackDoubleClicked = pyqtSignal(object)
  9. def __init__(self, parent):
  10. super().__init__(parent)
  11. self.playlist = None
  12. self.count = -1
  13. self.cellPressed.connect(self._cellPressed)
  14. self.cellDoubleClicked.connect(self._cellDoubleClicked)
  15. def populate(self, playlist=None):
  16. if playlist:
  17. self.playlist = playlist
  18. if not self.playlist:
  19. return
  20. session_track_repo = SessionTrackRepository()
  21. track_repo = TrackRepository()
  22. self.clear()
  23. self.hideColumn(0)
  24. self.hideColumn(1)
  25. session_tracks = session_track_repo.get_by_session_id(self.playlist.id)
  26. if not session_tracks:
  27. # self.insertRow(0)
  28. # self.setItem(0, 2, QTableWidgetItem("(la liste est vide, ajoutez y vos morceaux)"))
  29. return
  30. i = 0
  31. for session_track in session_tracks:
  32. track = track_repo.get_by_id(session_track.track_id)
  33. self.insertRow(i)
  34. item = QTableWidgetItem()
  35. item.setData(0, session_track.id)
  36. self.setItem(i, 0, item)
  37. item = QTableWidgetItem()
  38. item.setData(0, track.id)
  39. self.setItem(i, 1, item)
  40. self.setItem(i, 2, QTableWidgetItem(track.title))
  41. i += 1
  42. self.count = i
  43. def clear(self):
  44. while self.rowCount():
  45. self.removeRow(0)
  46. super().clear()
  47. def _cellPressed(self, row, _):
  48. track_id = int(self.item(row, 1).data(0))
  49. if track_id:
  50. track = TrackRepository().get_by_id(track_id)
  51. self.trackSelected.emit(track)
  52. def _cellDoubleClicked(self, row, _):
  53. track_id = int(self.item(row, 1).data(0))
  54. if track_id:
  55. track = TrackRepository().get_by_id(int(track_id))
  56. self.trackDoubleClicked.emit(track)
  57. def selected_session_track(self):
  58. session_track_id = self.item(self.currentRow(), 0).data(0)
  59. if not session_track_id:
  60. return None
  61. return SessionTrackRepository().get_by_id(int(session_track_id))
  62. def set_is_playing(self, track=None):
  63. for i in self.rows():
  64. track_id = self.item(i, 1).data(0)
  65. if track is not None and track_id == track.id:
  66. icon = QIcon(":/img/rsc/play.png")
  67. else:
  68. icon = QIcon()
  69. self.item(i, 2).setIcon(icon)
  70. def update_session_track_order(self, session_track, new_order):
  71. session_track_repo = SessionTrackRepository()
  72. session_track_repo.set_session_track_order(session_track, new_order, True)
  73. self.populate()
  74. def move_selected_up(self, track):
  75. session_track = self.selected_session_track()
  76. if session_track:
  77. self.update_session_track_order(session_track, session_track.order - 1)
  78. def move_selected_down(self, track):
  79. session_track = self.selected_session_track()
  80. if session_track:
  81. self.update_session_track_order(session_track, session_track.order + 1)
  82. def move_selected_to_top(self, track):
  83. session_track = self.selected_session_track()
  84. if session_track:
  85. self.update_session_track_order(session_track, 0)
  86. def move_selected_to_bottom(self, track):
  87. session_track = self.selected_session_track()
  88. if session_track:
  89. self.update_session_track_order(session_track, 99999999)