Tabbed playlist proof-of-concept (via menu Test)

This commit is contained in:
Keith Edmunds 2021-04-27 18:34:03 +01:00
parent e086dd35c6
commit 4d852f7a4e
3 changed files with 61 additions and 80 deletions

View File

@ -21,6 +21,7 @@ import helpers
from config import Config from config import Config
from model import Settings from model import Settings
from songdb import add_path_to_db from songdb import add_path_to_db
from playlists import Playlist
from ui.main_window_ui import Ui_MainWindow from ui.main_window_ui import Ui_MainWindow
@ -28,6 +29,7 @@ class Window(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__(parent) super().__init__(parent)
self.setupUi(self) self.setupUi(self)
self.timer = QTimer() self.timer = QTimer()
self.even_tick = True self.even_tick = True
self.playing = False self.playing = False
@ -46,18 +48,22 @@ class Window(QMainWindow, Ui_MainWindow):
height = record.f_int or 981 height = record.f_int or 981
self.setGeometry(x, y, width, height) self.setGeometry(x, y, width, height)
self.playlist.set_column_widths() # self.playlist.set_column_widths()
# Hard code to the first playlist for now # Hard code to the first playlist for now
# TODO # TODO
self.playlist.load_playlist(1) # self.playlist = Playlist()
self.update_headers() # self.playlist.load_playlist(1)
self.enable_play_next_controls() # self.tabPlaylist.addTab(self.playlist, "Default")
self.plLabel = QLabel(f"Playlist: {self.playlist.playlist_name}") # self.playlist.load_playlist(1)
self.statusbar.addPermanentWidget(self.plLabel) # self.update_headers()
# self.enable_play_next_controls()
self.timer.start(Config.TIMER_MS) # self.plLabel = QLabel(f"Playlist: {self.playlist.playlist_name}")
# self.statusbar.addPermanentWidget(self.plLabel)
# self.timer.start(Config.TIMER_MS)
def add_file(self): def add_file(self):
dlg = QFileDialog() dlg = QFileDialog()
@ -101,8 +107,8 @@ class Window(QMainWindow, Ui_MainWindow):
def connect_signals_slots(self): def connect_signals_slots(self):
self.actionAdd_file.triggered.connect(self.add_file) self.actionAdd_file.triggered.connect(self.add_file)
self.action_Clear_selection.triggered.connect( # self.action_Clear_selection.triggered.connect(
self.playlist.clearSelection) # self.playlist.clearSelection)
self.actionFade.triggered.connect(self.fade) self.actionFade.triggered.connect(self.fade)
self.actionNewPlaylist.triggered.connect(self.create_playlist) self.actionNewPlaylist.triggered.connect(self.create_playlist)
self.actionPlay_next.triggered.connect(self.play_next) self.actionPlay_next.triggered.connect(self.play_next)
@ -120,7 +126,7 @@ class Window(QMainWindow, Ui_MainWindow):
self.btnPrevious.clicked.connect(self.play_previous) self.btnPrevious.clicked.connect(self.play_previous)
self.btnSetNext.clicked.connect(self.set_next_track) self.btnSetNext.clicked.connect(self.set_next_track)
self.btnSkipNext.clicked.connect(self.play_next) self.btnSkipNext.clicked.connect(self.play_next)
self.btnStop.clicked.connect(self.playlist.stop) # self.btnStop.clicked.connect(self.playlist.stop)
self.spnVolume.valueChanged.connect(self.change_volume) self.spnVolume.valueChanged.connect(self.change_volume)
self.timer.timeout.connect(self.tick) self.timer.timeout.connect(self.tick)
@ -209,6 +215,12 @@ class Window(QMainWindow, Ui_MainWindow):
import ipdb import ipdb
ipdb.set_trace() ipdb.set_trace()
self.playlist = Playlist(parent=self.tabPlaylist)
self.tabPlaylist.addTab(self.playlist, "Default")
self.playlist.load_playlist(1)
self.playlist2 = Playlist(parent=self.tabPlaylist)
self.tabPlaylist.addTab(self.playlist2, "List 2")
self.playlist2.load_playlist(2)
def test_skip_to_end(self): def test_skip_to_end(self):
"Skip current track to 1 second before silence" "Skip current track to 1 second before silence"

View File

@ -2,6 +2,7 @@ from PyQt5 import QtCore
from PyQt5.QtCore import Qt from PyQt5.QtCore import Qt
from PyQt5.Qt import QFont from PyQt5.Qt import QFont
from PyQt5.QtGui import QColor, QDropEvent from PyQt5.QtGui import QColor, QDropEvent
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import ( from PyQt5.QtWidgets import (
QAbstractItemView, QAbstractItemView,
QApplication, QApplication,
@ -44,6 +45,28 @@ class Playlist(QTableWidget):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
self.setAlternatingRowColors(True)
self.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
self.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
self.setVerticalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel)
self.setRowCount(0)
self.setColumnCount(7)
item = QtWidgets.QTableWidgetItem()
self.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.setHorizontalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.setHorizontalHeaderItem(2, item)
item = QtWidgets.QTableWidgetItem()
self.setHorizontalHeaderItem(3, item)
item = QtWidgets.QTableWidgetItem()
self.setHorizontalHeaderItem(4, item)
item = QtWidgets.QTableWidgetItem()
self.setHorizontalHeaderItem(5, item)
item = QtWidgets.QTableWidgetItem()
self.setHorizontalHeaderItem(6, item)
self.horizontalHeader().setMinimumSectionSize(0)
self.setDragEnabled(True) self.setDragEnabled(True)
self.setAcceptDrops(True) self.setAcceptDrops(True)
self.viewport().setAcceptDrops(True) self.viewport().setAcceptDrops(True)
@ -323,7 +346,7 @@ class Playlist(QTableWidget):
p = Playlists.get_playlist_by_id(plid) p = Playlists.get_playlist_by_id(plid)
self.playlist_id = plid self.playlist_id = plid
self.playlist_name = p.name self.playlist_name = p.name
self.parent().parent().update_statusbar() # TODO self.parent().parent().update_statusbar()
# We need to retrieve playlist tracks and playlist notes, then # We need to retrieve playlist tracks and playlist notes, then
# add them in row order. We don't mandate that an item will be # add them in row order. We don't mandate that an item will be
@ -791,7 +814,7 @@ class Playlist(QTableWidget):
self._set_row_bold(row) self._set_row_bold(row)
# Headers might need updating # Headers might need updating
self.parent().parent().update_headers() # TODO self.parent().parent().update_headers()
def _save_playlist(self): def _save_playlist(self):
""" """

View File

@ -449,66 +449,19 @@ border: 1px solid rgb(85, 87, 83);</string>
</widget> </widget>
</item> </item>
<item row="2" column="0"> <item row="2" column="0">
<widget class="Playlist" name="playlist"> <widget class="QTabWidget" name="tabPlaylist">
<property name="editTriggers"> <property name="currentIndex">
<set>QAbstractItemView::NoEditTriggers</set> <number>-1</number>
</property> </property>
<property name="alternatingRowColors"> <property name="documentMode">
<bool>false</bool>
</property>
<property name="tabsClosable">
<bool>false</bool>
</property>
<property name="movable">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="selectionMode">
<enum>QAbstractItemView::ExtendedSelection</enum>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
<property name="verticalScrollMode">
<enum>QAbstractItemView::ScrollPerPixel</enum>
</property>
<property name="rowCount">
<number>0</number>
</property>
<property name="columnCount">
<number>7</number>
</property>
<attribute name="horizontalHeaderMinimumSectionSize">
<number>0</number>
</attribute>
<column>
<property name="text">
<string>Index</string>
</property>
</column>
<column>
<property name="text">
<string>mss</string>
</property>
</column>
<column>
<property name="text">
<string>Title</string>
</property>
</column>
<column>
<property name="text">
<string>Artist</string>
</property>
</column>
<column>
<property name="text">
<string>Duration</string>
</property>
</column>
<column>
<property name="text">
<string>Start</string>
</property>
</column>
<column>
<property name="text">
<string>Path</string>
</property>
</column>
</widget> </widget>
</item> </item>
<item row="3" column="0"> <item row="3" column="0">
@ -840,7 +793,7 @@ border: 1px solid rgb(85, 87, 83);</string>
<action name="actionPlay_next"> <action name="actionPlay_next">
<property name="icon"> <property name="icon">
<iconset> <iconset>
<normaloff>icon-play.png</normaloff>icon-play.png</iconset> <normaloff>../../../../.designer/backup/icon-play.png</normaloff>../../../../.designer/backup/icon-play.png</iconset>
</property> </property>
<property name="text"> <property name="text">
<string>&amp;Play next</string> <string>&amp;Play next</string>
@ -864,7 +817,7 @@ border: 1px solid rgb(85, 87, 83);</string>
<action name="actionSearch_database"> <action name="actionSearch_database">
<property name="icon"> <property name="icon">
<iconset> <iconset>
<normaloff>icon_search_database.png</normaloff>icon_search_database.png</iconset> <normaloff>../../../../.designer/backup/icon_search_database.png</normaloff>../../../../.designer/backup/icon_search_database.png</iconset>
</property> </property>
<property name="text"> <property name="text">
<string>Search &amp;database</string> <string>Search &amp;database</string>
@ -876,7 +829,7 @@ border: 1px solid rgb(85, 87, 83);</string>
<action name="actionAdd_file"> <action name="actionAdd_file">
<property name="icon"> <property name="icon">
<iconset> <iconset>
<normaloff>icon_open_file.png</normaloff>icon_open_file.png</iconset> <normaloff>../../../../.designer/backup/icon_open_file.png</normaloff>../../../../.designer/backup/icon_open_file.png</iconset>
</property> </property>
<property name="text"> <property name="text">
<string>Add &amp;file</string> <string>Add &amp;file</string>
@ -888,7 +841,7 @@ border: 1px solid rgb(85, 87, 83);</string>
<action name="actionFade"> <action name="actionFade">
<property name="icon"> <property name="icon">
<iconset> <iconset>
<normaloff>icon-fade.png</normaloff>icon-fade.png</iconset> <normaloff>../../../../.designer/backup/icon-fade.png</normaloff>../../../../.designer/backup/icon-fade.png</iconset>
</property> </property>
<property name="text"> <property name="text">
<string>F&amp;ade</string> <string>F&amp;ade</string>
@ -959,13 +912,6 @@ border: 1px solid rgb(85, 87, 83);</string>
</property> </property>
</action> </action>
</widget> </widget>
<customwidgets>
<customwidget>
<class>Playlist</class>
<extends>QTableWidget</extends>
<header>playlists</header>
</customwidget>
</customwidgets>
<resources> <resources>
<include location="icons.qrc"/> <include location="icons.qrc"/>
</resources> </resources>