diff --git a/README.md b/README.md index 3a728ae..1314edc 100644 --- a/README.md +++ b/README.md @@ -88,3 +88,4 @@ QMultimedia.EncodingMode / Encoding quality... - drag and drop song(s) onto PlaylistPane to add to playlist - font sizing - font choicing? :o + diff --git a/components/HeaderTags.py b/components/HeaderTags.py index d3254f3..e5d3fd2 100644 --- a/components/HeaderTags.py +++ b/components/HeaderTags.py @@ -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" diff --git a/components/MusicTable.py b/components/MusicTable.py index 4a58c16..3525dc0 100644 --- a/components/MusicTable.py +++ b/components/MusicTable.py @@ -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): diff --git a/components/SearchLineEdit.py b/components/SearchLineEdit.py index 40e4d2d..4e4e6b6 100644 --- a/components/SearchLineEdit.py +++ b/components/SearchLineEdit.py @@ -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 diff --git a/main.py b/main.py index f63c621..f7cd507 100644 --- a/main.py +++ b/main.py @@ -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: diff --git a/ui.py b/ui.py index d4b7711..613a647 100644 --- a/ui.py +++ b/ui.py @@ -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 diff --git a/ui.ui b/ui.ui index 625aec1..7572a42 100644 --- a/ui.ui +++ b/ui.ui @@ -26,6 +26,9 @@ 0 + + + @@ -112,17 +115,10 @@ - + QLayout::SetMaximumSize - - - - Qt::Horizontal - - - @@ -130,7 +126,10 @@ Monospace + 12 + 75 false + true @@ -143,7 +142,10 @@ Monospace + 12 + 75 false + true @@ -156,6 +158,7 @@ Monospace + 12 75 false true @@ -168,6 +171,13 @@ + + + + Qt::Horizontal + + + @@ -179,6 +189,13 @@ + + + 12 + 75 + true + + 50 @@ -222,7 +239,7 @@ - 28 + 48 @@ -231,7 +248,7 @@ - 28 + 48 @@ -240,7 +257,7 @@ - 28 + 48 @@ -290,6 +307,9 @@ Monospace + 12 + 75 + true @@ -311,7 +331,7 @@ 0 0 1152 - 24 + 27 @@ -332,6 +352,7 @@ View + @@ -391,6 +412,11 @@ Export playlist + + + Font listing + + @@ -414,6 +440,11 @@ QTreeView
components
+ + SearchLineEdit + QLineEdit +
components
+