some stuff

This commit is contained in:
billy 2025-10-05 12:42:12 -04:00
parent 1add0bc85a
commit 0dd757ed6c
7 changed files with 105 additions and 59 deletions

View File

@ -88,3 +88,4 @@ QMultimedia.EncodingMode / Encoding quality...
- drag and drop song(s) onto PlaylistPane to add to playlist
- font sizing
- font choicing? :o

View File

@ -98,8 +98,8 @@ class HeaderTags2:
ID3Field(frame_class=TDRC, frame_id="TDRC", db="album_date", gui="Year"),
ID3Field(frame_class=TLEN, frame_id="TLEN", db="length_ms", gui="Time", editable=False),
ID3Field(db="codec", gui="Codec", editable=False),
ID3Field(db="filepath", gui="Filepath", editable=False),
ID3Field(db="bitrate", gui="Bitrate", editable=False),
ID3Field(db="filepath", gui="Filepath", editable=False),
]
# Lookup dicts
# - Usage example: frame_id['TPE1'].db # => "artist"

View File

@ -142,7 +142,6 @@ class MusicTable(QTableView):
self.doubleClicked.connect(self.play_selected_audio_file)
self.enterKey.connect(self.play_selected_audio_file)
self.model2.dataChanged.connect(self.on_cell_data_changed) # editing cells
self.horizontal_header.sectionResized.connect(self.on_header_resized)
# Final actions
# self.load_music_table()
self.setup_keyboard_shortcuts()
@ -181,7 +180,11 @@ class MusicTable(QTableView):
self.load_header_widths(self.saved_column_ratios)
def showEvent(self, a0):
# Restore scroll position
"""
When the table is shown:
- Set the widths very small, then set them to sizes relative to our stored ratios
- This is to prevent issues with the widths on app startup
"""
super().showEvent(a0)
widths = []
for _ in self.saved_column_ratios:
@ -209,7 +212,12 @@ class MusicTable(QTableView):
def contextMenuEvent(self, a0):
"""Right-click context menu"""
font: QFont = QFont()
font.setPointSize(11)
menu = QMenu(self)
menu.setFont(font)
add_to_playlist_action = QAction("Add to playlist", self)
_ = add_to_playlist_action.triggered.connect(self.add_selected_files_to_playlist)
menu.addAction(add_to_playlist_action)
@ -374,29 +382,6 @@ class MusicTable(QTableView):
self.set_selected_song_qmodel_index()
self.viewport().update() # type: ignore
def on_header_resized(self, logicalIndex: int, oldSize: int, newSize: int):
"""Handles keeping headers inside the viewport"""
# FIXME: how resize good
pass
# https://stackoverflow.com/questions/46775438/how-to-limit-qheaderview-size-when-resizing-sections
# col_count = self.model2.columnCount()
# qtableview_width = self.size().width()
# sum_of_cols = self.horizontal_header.length()
# # debug(f'qtable_width: {qtableview_width}')
# # debug(f'sum of cols: {sum_of_cols}')
#
# if sum_of_cols != qtableview_width: # check for discrepancy
# if logicalIndex < col_count: # if not the last header
# next_header_size = self.horizontal_header.sectionSize(logicalIndex + 1)
# if next_header_size > (sum_of_cols - qtableview_width): # if it should shrink
# self.horizontal_header.resizeSection(
# logicalIndex + 1,
# next_header_size - (sum_of_cols - qtableview_width),
# ) # shrink it
# else:
# self.horizontal_header.resizeSection(logicalIndex, oldSize) # block the resize
def on_cell_data_changed(self, topLeft: QModelIndex, bottomRight: QModelIndex):
"""Handles updating ID3 tags when data changes in a cell"""
# if isinstance(self.model2, QStandardItemModel):

View File

@ -7,7 +7,7 @@ MusicTable.py had a function called load_music_table(), which loads data
from the SQLite database to the QTableView. load_music_table()
checks for the self.search_string
in main.py, on self.lineEditSearch.textChanged(),
in main.py, on self.searchLineEdit.textChanged(),
this updates the self.search_string in MusicTable.py
in MusicTable.py, when Ctrl+F is pressed, the line edit gets hidden or visible

20
main.py
View File

@ -4,6 +4,8 @@ import logging
import typing
import DBA
import qdarktheme
from PyQt5.QtGui import QFontDatabase
from PyQt5 import QtCore
from subprocess import run
# from pyqtgraph import mkBrush
@ -58,6 +60,7 @@ from components import (
CreatePlaylistWindow,
ExportPlaylistWindow,
HeaderTags2,
DebugWindow
)
from utils.export_playlist_by_id import export_playlist_by_id
@ -160,6 +163,9 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow):
# EDIT MENU
self.actionPreferences.triggered.connect(self.open_preferences)
# VIEW MENU
self.actionFontListing.triggered.connect(self.open_font_listing)
QFontDatabase().families()
# QUICK ACTIONS MENU
self.actionScanLibraries.triggered.connect(self.scan_libraries)
@ -171,10 +177,10 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow):
self.tableView.viewport().installEventFilter(self)
# Search box
self.lineEditSearch: QLineEdit
self.searchLineEdit: QLineEdit
# CONNECTIONS
self.lineEditSearch.textTypedSignal.connect(self.handle_search_box_text)
self.searchLineEdit.textTypedSignal.connect(self.handle_search_box_text)
# tableView
self.tableView.playSignal.connect(self.play_audio_file)
self.tableView.playPauseSignal.connect(self.on_play_clicked) # Spacebar toggle play/pause signal
@ -382,9 +388,9 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow):
def handle_search_box_visibility(self):
"""show or hide the searchbox"""
visible = self.lineEditSearch.toggle_visibility()
visible = self.searchLineEdit.toggle_visibility()
if visible:
self.lineEditSearch.setFocus()
self.searchLineEdit.setFocus()
else:
self.tableView.setFocus()
@ -545,6 +551,12 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow):
preferences_window.reloadDatabaseSignal.connect(self.tableView.load_music_table)
preferences_window.exec_() # Display the preferences window modally
# View
def open_font_listing(self) -> None:
window = DebugWindow(QFontDatabase().families())
window.exec_()
# Quick Actions
def scan_libraries(self) -> None:

49
ui.py
View File

@ -24,9 +24,9 @@ class Ui_MainWindow(object):
self.verticalLayout.setContentsMargins(-1, -1, 0, -1)
self.verticalLayout.setSpacing(6)
self.verticalLayout.setObjectName("verticalLayout")
self.lineEditSearch = SearchLineEdit(self.centralwidget)
self.lineEditSearch.setObjectName("lineEditSearch")
self.verticalLayout.addWidget(self.lineEditSearch)
self.searchLineEdit = SearchLineEdit(self.centralwidget)
self.searchLineEdit.setObjectName("searchLineEdit")
self.verticalLayout.addWidget(self.searchLineEdit)
self.hLayoutHead = QtWidgets.QHBoxLayout()
self.hLayoutHead.setSizeConstraint(QtWidgets.QLayout.SetFixedSize)
self.hLayoutHead.setObjectName("hLayoutHead")
@ -60,15 +60,13 @@ class Ui_MainWindow(object):
self.hLayoutMusicTable.setSizeConstraint(QtWidgets.QLayout.SetMaximumSize)
self.hLayoutMusicTable.setContentsMargins(0, -1, 0, -1)
self.hLayoutMusicTable.setObjectName("hLayoutMusicTable")
self.verticalLayout_2 = QtWidgets.QVBoxLayout()
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.playlistTreeView = PlaylistsPane(self.centralwidget)
self.playlistTreeView.setObjectName("playlistTreeView")
self.verticalLayout_2.addWidget(self.playlistTreeView)
self.hLayoutMusicTable.addLayout(self.verticalLayout_2)
self.hLayoutMusicTable.addWidget(self.playlistTreeView)
self.tableView = MusicTable(self.centralwidget)
self.tableView.setObjectName("tableView")
self.hLayoutMusicTable.addWidget(self.tableView)
self.hLayoutMusicTable.setStretch(0, 2)
self.hLayoutMusicTable.setStretch(1, 10)
self.verticalLayout.addLayout(self.hLayoutMusicTable)
self.hLayoutCurrentSongDetails = QtWidgets.QHBoxLayout()
@ -90,29 +88,32 @@ class Ui_MainWindow(object):
self.hLayoutPlayback = QtWidgets.QHBoxLayout()
self.hLayoutPlayback.setSizeConstraint(QtWidgets.QLayout.SetMaximumSize)
self.hLayoutPlayback.setObjectName("hLayoutPlayback")
self.playbackSlider = QtWidgets.QSlider(self.centralwidget)
self.playbackSlider.setOrientation(QtCore.Qt.Horizontal)
self.playbackSlider.setObjectName("playbackSlider")
self.hLayoutPlayback.addWidget(self.playbackSlider)
self.timeHorizontalLayout2 = QtWidgets.QHBoxLayout()
self.timeHorizontalLayout2.setObjectName("timeHorizontalLayout2")
self.startTimeLabel = QtWidgets.QLabel(self.centralwidget)
font = QtGui.QFont()
font.setFamily("Monospace")
font.setPointSize(12)
font.setBold(True)
font.setItalic(False)
font.setWeight(75)
self.startTimeLabel.setFont(font)
self.startTimeLabel.setObjectName("startTimeLabel")
self.timeHorizontalLayout2.addWidget(self.startTimeLabel)
self.slashLabel = QtWidgets.QLabel(self.centralwidget)
font = QtGui.QFont()
font.setFamily("Monospace")
font.setPointSize(12)
font.setBold(True)
font.setItalic(False)
font.setWeight(75)
self.slashLabel.setFont(font)
self.slashLabel.setObjectName("slashLabel")
self.timeHorizontalLayout2.addWidget(self.slashLabel)
self.endTimeLabel = QtWidgets.QLabel(self.centralwidget)
font = QtGui.QFont()
font.setFamily("Monospace")
font.setPointSize(12)
font.setBold(True)
font.setItalic(False)
font.setWeight(75)
@ -120,7 +121,11 @@ class Ui_MainWindow(object):
self.endTimeLabel.setObjectName("endTimeLabel")
self.timeHorizontalLayout2.addWidget(self.endTimeLabel)
self.hLayoutPlayback.addLayout(self.timeHorizontalLayout2)
self.hLayoutPlayback.setStretch(0, 4)
self.playbackSlider = QtWidgets.QSlider(self.centralwidget)
self.playbackSlider.setOrientation(QtCore.Qt.Horizontal)
self.playbackSlider.setObjectName("playbackSlider")
self.hLayoutPlayback.addWidget(self.playbackSlider)
self.hLayoutPlayback.setStretch(1, 4)
self.verticalLayout.addLayout(self.hLayoutPlayback)
self.hLayoutControls = QtWidgets.QHBoxLayout()
self.hLayoutControls.setSpacing(6)
@ -128,6 +133,11 @@ class Ui_MainWindow(object):
self.hLayoutVolume = QtWidgets.QHBoxLayout()
self.hLayoutVolume.setObjectName("hLayoutVolume")
self.volumeLabel = QtWidgets.QLabel(self.centralwidget)
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.volumeLabel.setFont(font)
self.volumeLabel.setObjectName("volumeLabel")
self.hLayoutVolume.addWidget(self.volumeLabel)
self.volumeSlider = QtWidgets.QSlider(self.centralwidget)
@ -143,19 +153,19 @@ class Ui_MainWindow(object):
self.hLayoutControls.addItem(spacerItem)
self.previousButton = QtWidgets.QPushButton(self.centralwidget)
font = QtGui.QFont()
font.setPointSize(28)
font.setPointSize(48)
self.previousButton.setFont(font)
self.previousButton.setObjectName("previousButton")
self.hLayoutControls.addWidget(self.previousButton)
self.playButton = QtWidgets.QPushButton(self.centralwidget)
font = QtGui.QFont()
font.setPointSize(28)
font.setPointSize(48)
self.playButton.setFont(font)
self.playButton.setObjectName("playButton")
self.hLayoutControls.addWidget(self.playButton)
self.nextButton = QtWidgets.QPushButton(self.centralwidget)
font = QtGui.QFont()
font.setPointSize(28)
font.setPointSize(48)
self.nextButton.setFont(font)
self.nextButton.setObjectName("nextButton")
self.hLayoutControls.addWidget(self.nextButton)
@ -176,6 +186,9 @@ class Ui_MainWindow(object):
self.speedLabel = QtWidgets.QLabel(self.centralwidget)
font = QtGui.QFont()
font.setFamily("Monospace")
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.speedLabel.setFont(font)
self.speedLabel.setObjectName("speedLabel")
self.horizontalLayout_2.addWidget(self.speedLabel)
@ -190,7 +203,7 @@ class Ui_MainWindow(object):
self.verticalLayout_3.setStretch(0, 20)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 1152, 21))
self.menubar.setGeometry(QtCore.QRect(0, 0, 1152, 27))
self.menubar.setObjectName("menubar")
self.menuFile = QtWidgets.QMenu(self.menubar)
self.menuFile.setObjectName("menuFile")
@ -220,10 +233,13 @@ class Ui_MainWindow(object):
self.actionNewPlaylist.setObjectName("actionNewPlaylist")
self.actionExportPlaylist = QtWidgets.QAction(MainWindow)
self.actionExportPlaylist.setObjectName("actionExportPlaylist")
self.actionFontListing = QtWidgets.QAction(MainWindow)
self.actionFontListing.setObjectName("actionFontListing")
self.menuFile.addAction(self.actionOpenFiles)
self.menuFile.addAction(self.actionNewPlaylist)
self.menuFile.addAction(self.actionExportPlaylist)
self.menuEdit.addAction(self.actionPreferences)
self.menuView.addAction(self.actionFontListing)
self.menuQuick_Actions.addAction(self.actionScanLibraries)
self.menuQuick_Actions.addAction(self.actionDeleteLibrary)
self.menuQuick_Actions.addAction(self.actionDeleteDatabase)
@ -257,5 +273,6 @@ class Ui_MainWindow(object):
self.actionDeleteDatabase.setText(_translate("MainWindow", "Delete Database"))
self.actionNewPlaylist.setText(_translate("MainWindow", "New playlist"))
self.actionExportPlaylist.setText(_translate("MainWindow", "Export playlist"))
self.actionFontListing.setText(_translate("MainWindow", "Font listing"))
from components import AlbumArtGraphicsView, MusicTable, PlaylistsPane, SearchLineEdit
from pyqtgraph import PlotWidget

55
ui.ui
View File

@ -26,6 +26,9 @@
<property name="rightMargin">
<number>0</number>
</property>
<item>
<widget class="SearchLineEdit" name="searchLineEdit"/>
</item>
<item>
<layout class="QHBoxLayout" name="hLayoutHead" stretch="1,0,6">
<property name="sizeConstraint">
@ -112,17 +115,10 @@
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="hLayoutPlayback" stretch="4,0">
<layout class="QHBoxLayout" name="hLayoutPlayback" stretch="0,4">
<property name="sizeConstraint">
<enum>QLayout::SetMaximumSize</enum>
</property>
<item>
<widget class="QSlider" name="playbackSlider">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="timeHorizontalLayout2">
<item>
@ -130,7 +126,10 @@
<property name="font">
<font>
<family>Monospace</family>
<pointsize>12</pointsize>
<weight>75</weight>
<italic>false</italic>
<bold>true</bold>
</font>
</property>
<property name="text">
@ -143,7 +142,10 @@
<property name="font">
<font>
<family>Monospace</family>
<pointsize>12</pointsize>
<weight>75</weight>
<italic>false</italic>
<bold>true</bold>
</font>
</property>
<property name="text">
@ -156,6 +158,7 @@
<property name="font">
<font>
<family>Monospace</family>
<pointsize>12</pointsize>
<weight>75</weight>
<italic>false</italic>
<bold>true</bold>
@ -168,6 +171,13 @@
</item>
</layout>
</item>
<item>
<widget class="QSlider" name="playbackSlider">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
</layout>
</item>
<item>
@ -179,6 +189,13 @@
<layout class="QHBoxLayout" name="hLayoutVolume">
<item>
<widget class="QLabel" name="volumeLabel">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>50</string>
</property>
@ -222,7 +239,7 @@
<widget class="QPushButton" name="previousButton">
<property name="font">
<font>
<pointsize>28</pointsize>
<pointsize>48</pointsize>
</font>
</property>
</widget>
@ -231,7 +248,7 @@
<widget class="QPushButton" name="playButton">
<property name="font">
<font>
<pointsize>28</pointsize>
<pointsize>48</pointsize>
</font>
</property>
</widget>
@ -240,7 +257,7 @@
<widget class="QPushButton" name="nextButton">
<property name="font">
<font>
<pointsize>28</pointsize>
<pointsize>48</pointsize>
</font>
</property>
</widget>
@ -290,6 +307,9 @@
<property name="font">
<font>
<family>Monospace</family>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
@ -311,7 +331,7 @@
<x>0</x>
<y>0</y>
<width>1152</width>
<height>24</height>
<height>27</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">
@ -332,6 +352,7 @@
<property name="title">
<string>View</string>
</property>
<addaction name="actionFontListing"/>
</widget>
<widget class="QMenu" name="menuQuick_Actions">
<property name="title">
@ -391,6 +412,11 @@
<string>Export playlist</string>
</property>
</action>
<action name="actionFontListing">
<property name="text">
<string>Font listing</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>
@ -414,6 +440,11 @@
<extends>QTreeView</extends>
<header>components</header>
</customwidget>
<customwidget>
<class>SearchLineEdit</class>
<extends>QLineEdit</extends>
<header>components</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>