some stuff
This commit is contained in:
parent
1add0bc85a
commit
0dd757ed6c
@ -88,3 +88,4 @@ QMultimedia.EncodingMode / Encoding quality...
|
||||
- drag and drop song(s) onto PlaylistPane to add to playlist
|
||||
- font sizing
|
||||
- font choicing? :o
|
||||
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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):
|
||||
|
||||
@ -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
20
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:
|
||||
|
||||
49
ui.py
49
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
|
||||
|
||||
55
ui.ui
55
ui.ui
@ -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/>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user