from PyQt5.QtCore import pyqtSignal from PyQt5.QtGui import QIcon, QPixmap from PyQt5.QtWidgets import QTableWidgetItem from core.repositories import TrackRepository, SessionTrackRepository from ui.qt.widgets.DragDropTableWidget import DragDropTableWidget class PlaylistTable(DragDropTableWidget): trackSelected = pyqtSignal(object) trackDoubleClicked = pyqtSignal(object) def __init__(self, parent): super().__init__(parent) self.playlist = None self.count = -1 self.cellPressed.connect(self._cellPressed) self.cellDoubleClicked.connect(self._cellDoubleClicked) def populate(self, playlist=None): if playlist: self.playlist = playlist if not self.playlist: return session_track_repo = SessionTrackRepository() track_repo = TrackRepository() self.clear() self.hideColumn(0) self.hideColumn(1) session_tracks = session_track_repo.get_by_session_id(self.playlist.id) if not session_tracks: # self.insertRow(0) # self.setItem(0, 2, QTableWidgetItem("(la liste est vide, ajoutez y vos morceaux)")) return i = 0 for session_track in session_tracks: track = track_repo.get_by_id(session_track.track_id) self.insertRow(i) item = QTableWidgetItem() item.setData(0, session_track.id) self.setItem(i, 0, item) item = QTableWidgetItem() item.setData(0, track.id) self.setItem(i, 1, item) self.setItem(i, 2, QTableWidgetItem(track.title)) i += 1 self.count = i def clear(self): while self.rowCount(): self.removeRow(0) super().clear() def _cellPressed(self, row, _): track_id = int(self.item(row, 1).data(0)) if track_id: track = TrackRepository().get_by_id(track_id) self.trackSelected.emit(track) def _cellDoubleClicked(self, row, _): track_id = int(self.item(row, 1).data(0)) if track_id: track = TrackRepository().get_by_id(int(track_id)) self.trackDoubleClicked.emit(track) def selected_session_track(self): session_track_id = self.item(self.currentRow(), 0).data(0) if not session_track_id: return None return SessionTrackRepository().get_by_id(int(session_track_id)) def set_is_playing(self, track=None): for i in range(self.rowCount()): track_id = self.item(i, 1).data(0) if track is not None and track_id == track.id: icon = QIcon(":/img/rsc/play.png") else: icon = QIcon() self.item(i, 2).setIcon(icon)