removed qt designer MusicTable widget properties, set them manually in widget constructor
This commit is contained in:
parent
9b5e635a6e
commit
696d0d2fb1
@ -17,6 +17,11 @@ install system packages
|
|||||||
sudo apt install ffmpeg python3-pyqt5 virtualenv
|
sudo apt install ffmpeg python3-pyqt5 virtualenv
|
||||||
```
|
```
|
||||||
|
|
||||||
|
additional packages needed for wsl
|
||||||
|
```bash
|
||||||
|
sudo apt install gstreamer1.0-plugins-good
|
||||||
|
```
|
||||||
|
|
||||||
create environment
|
create environment
|
||||||
```bash
|
```bash
|
||||||
cd musicpom
|
cd musicpom
|
||||||
@ -51,9 +56,9 @@ config.ini db/
|
|||||||
- ~~editable lyrics window~~
|
- ~~editable lyrics window~~
|
||||||
- ~~batch metadata changer (red highlight fields that have differing info)~~
|
- ~~batch metadata changer (red highlight fields that have differing info)~~
|
||||||
- ~~playlists~~
|
- ~~playlists~~
|
||||||
|
- ~~delete songs from library (del key || right-click delete)~~
|
||||||
- playlist autoexporting
|
- playlist autoexporting
|
||||||
- fix table headers being resized and going out window bounds
|
- fix table headers being resized and going out window bounds
|
||||||
- delete songs from library (del key || right-click delete)
|
|
||||||
- .wav, .ogg, .flac convertor
|
- .wav, .ogg, .flac convertor
|
||||||
- FIXME: dbaccess is instantiated for every track being reorganized
|
- FIXME: dbaccess is instantiated for every track being reorganized
|
||||||
- automatic "radio" based on artist or genre
|
- automatic "radio" based on artist or genre
|
||||||
|
|||||||
@ -64,6 +64,7 @@ class MusicTable(QTableView):
|
|||||||
def __init__(self, parent=None, application_window=None):
|
def __init__(self, parent=None, application_window=None):
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
self.application_window = application_window
|
self.application_window = application_window
|
||||||
|
# needed a separate model to do certain actions
|
||||||
self.model2: QStandardItemModel = QStandardItemModel()
|
self.model2: QStandardItemModel = QStandardItemModel()
|
||||||
self.setModel(self.model2)
|
self.setModel(self.model2)
|
||||||
|
|
||||||
@ -108,11 +109,25 @@ class MusicTable(QTableView):
|
|||||||
self.songChanged = None
|
self.songChanged = None
|
||||||
self.selected_song_filepath = ""
|
self.selected_song_filepath = ""
|
||||||
self.current_song_filepath = ""
|
self.current_song_filepath = ""
|
||||||
|
self.current_item = None # track where cursor was last
|
||||||
|
|
||||||
|
# Properties
|
||||||
|
self.setSortingEnabled(False)
|
||||||
|
self.setAcceptDrops(True)
|
||||||
|
self.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff)
|
||||||
|
self.setEditTriggers(QAbstractItemView.EditTrigger.EditKeyPressed)
|
||||||
|
self.setAlternatingRowColors(True)
|
||||||
|
self.setSelectionMode(QAbstractItemView.ExtendedSelection)
|
||||||
|
self.setSelectionBehavior(QAbstractItemView.SelectRows)
|
||||||
|
self.setSortingEnabled(True)
|
||||||
self.horizontal_header: QHeaderView = self.horizontalHeader()
|
self.horizontal_header: QHeaderView = self.horizontalHeader()
|
||||||
assert self.horizontal_header is not None
|
assert self.horizontal_header is not None # i hate look at linting errors
|
||||||
self.horizontal_header.setStretchLastSection(True)
|
self.horizontal_header.setStretchLastSection(True)
|
||||||
self.horizontal_header.setSectionResizeMode(QHeaderView.Interactive)
|
self.horizontal_header.setSectionResizeMode(QHeaderView.Interactive)
|
||||||
self.setSortingEnabled(False)
|
self.vertical_header: QHeaderView = self.verticalHeader()
|
||||||
|
assert self.vertical_header is not None
|
||||||
|
self.vertical_header.setVisible(False)
|
||||||
|
|
||||||
# CONNECTIONS
|
# CONNECTIONS
|
||||||
self.clicked.connect(self.set_selected_song_filepath)
|
self.clicked.connect(self.set_selected_song_filepath)
|
||||||
self.doubleClicked.connect(self.set_current_song_filepath)
|
self.doubleClicked.connect(self.set_current_song_filepath)
|
||||||
@ -170,15 +185,17 @@ class MusicTable(QTableView):
|
|||||||
elif order == 2:
|
elif order == 2:
|
||||||
sort_orders.append(Qt.SortOrder.DescendingOrder)
|
sort_orders.append(Qt.SortOrder.DescendingOrder)
|
||||||
|
|
||||||
# NOTE:
|
# QTableView sorts need to happen in reverse order
|
||||||
# this is bad because sortByColumn calls a SELECT statement,
|
# The primary sort column is the last column sorted.
|
||||||
# and will do this for as many sorts that are needed
|
|
||||||
# maybe not a huge deal for a small music application...
|
|
||||||
# `len(config_sort_orders)` number of SELECTs
|
|
||||||
for i in reversed(range(len(sort_orders))):
|
for i in reversed(range(len(sort_orders))):
|
||||||
if sort_orders[i] is not None:
|
if sort_orders[i] is not None:
|
||||||
debug(f"sorting column {i} by {sort_orders[i]}")
|
debug(f"sorting column {i} by {sort_orders[i]}")
|
||||||
self.sortByColumn(i, sort_orders[i])
|
self.sortByColumn(i, sort_orders[i])
|
||||||
|
# WARNING:
|
||||||
|
# sortByColumn calls a SELECT statement,
|
||||||
|
# and will do this for as many sorts that are needed
|
||||||
|
# maybe not a huge deal for a small music application...
|
||||||
|
# `len(config_sort_orders)` number of SELECTs
|
||||||
|
|
||||||
self.connect_data_changed()
|
self.connect_data_changed()
|
||||||
self.connect_layout_changed()
|
self.connect_layout_changed()
|
||||||
@ -548,7 +565,8 @@ class MusicTable(QTableView):
|
|||||||
self.playPauseSignal.emit()
|
self.playPauseSignal.emit()
|
||||||
|
|
||||||
def add_files(self, files: list[str]) -> None:
|
def add_files(self, files: list[str]) -> None:
|
||||||
"""Spawns a worker thread - adds a list of filepaths to the library
|
"""
|
||||||
|
Spawns a worker thread - adds a list of filepaths to the library
|
||||||
- Drag & Drop song(s) on tableView
|
- Drag & Drop song(s) on tableView
|
||||||
- File > Open > List of song(s)
|
- File > Open > List of song(s)
|
||||||
"""
|
"""
|
||||||
|
|||||||
2
main.py
2
main.py
@ -437,7 +437,7 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow):
|
|||||||
def speed_changed(self, rate: int) -> None:
|
def speed_changed(self, rate: int) -> None:
|
||||||
"""Handles playback speed changes"""
|
"""Handles playback speed changes"""
|
||||||
self.player.setPlaybackRate(rate / 50)
|
self.player.setPlaybackRate(rate / 50)
|
||||||
self.speedLabel.setText(str(round(rate / 50, 2)))
|
self.speedLabel.setText("{:.2f}".format(rate / 50))
|
||||||
|
|
||||||
def on_play_clicked(self) -> None:
|
def on_play_clicked(self) -> None:
|
||||||
"""Updates the Play & Pause buttons when clicked"""
|
"""Updates the Play & Pause buttons when clicked"""
|
||||||
|
|||||||
14
ui.py
14
ui.py
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
# Form implementation generated from reading ui file 'ui.ui'
|
# Form implementation generated from reading ui file 'ui.ui'
|
||||||
#
|
#
|
||||||
# Created by: PyQt5 UI code generator 5.15.10
|
# Created by: PyQt5 UI code generator 5.15.11
|
||||||
#
|
#
|
||||||
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
|
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
|
||||||
# run again. Do not edit this file unless you know what you are doing.
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
@ -143,16 +143,7 @@ class Ui_MainWindow(object):
|
|||||||
self.playlistTreeView.setObjectName("playlistTreeView")
|
self.playlistTreeView.setObjectName("playlistTreeView")
|
||||||
self.hLayoutMusicTable.addWidget(self.playlistTreeView)
|
self.hLayoutMusicTable.addWidget(self.playlistTreeView)
|
||||||
self.tableView = MusicTable(self.centralwidget)
|
self.tableView = MusicTable(self.centralwidget)
|
||||||
self.tableView.setMaximumSize(QtCore.QSize(16777215, 16777215))
|
|
||||||
self.tableView.setAcceptDrops(True)
|
|
||||||
self.tableView.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
|
|
||||||
self.tableView.setEditTriggers(QtWidgets.QAbstractItemView.AnyKeyPressed|QtWidgets.QAbstractItemView.EditKeyPressed)
|
|
||||||
self.tableView.setAlternatingRowColors(True)
|
|
||||||
self.tableView.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
|
|
||||||
self.tableView.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
|
|
||||||
self.tableView.setSortingEnabled(True)
|
|
||||||
self.tableView.setObjectName("tableView")
|
self.tableView.setObjectName("tableView")
|
||||||
self.tableView.verticalHeader().setVisible(False)
|
|
||||||
self.hLayoutMusicTable.addWidget(self.tableView)
|
self.hLayoutMusicTable.addWidget(self.tableView)
|
||||||
self.hLayoutMusicTable.setStretch(0, 2)
|
self.hLayoutMusicTable.setStretch(0, 2)
|
||||||
self.hLayoutMusicTable.setStretch(1, 10)
|
self.hLayoutMusicTable.setStretch(1, 10)
|
||||||
@ -217,7 +208,7 @@ class Ui_MainWindow(object):
|
|||||||
self.verticalLayout_3.setStretch(0, 20)
|
self.verticalLayout_3.setStretch(0, 20)
|
||||||
MainWindow.setCentralWidget(self.centralwidget)
|
MainWindow.setCentralWidget(self.centralwidget)
|
||||||
self.menubar = QtWidgets.QMenuBar(MainWindow)
|
self.menubar = QtWidgets.QMenuBar(MainWindow)
|
||||||
self.menubar.setGeometry(QtCore.QRect(0, 0, 1152, 41))
|
self.menubar.setGeometry(QtCore.QRect(0, 0, 1152, 21))
|
||||||
self.menubar.setObjectName("menubar")
|
self.menubar.setObjectName("menubar")
|
||||||
self.menuFile = QtWidgets.QMenu(self.menubar)
|
self.menuFile = QtWidgets.QMenu(self.menubar)
|
||||||
self.menuFile.setObjectName("menuFile")
|
self.menuFile.setObjectName("menuFile")
|
||||||
@ -267,7 +258,6 @@ class Ui_MainWindow(object):
|
|||||||
_translate = QtCore.QCoreApplication.translate
|
_translate = QtCore.QCoreApplication.translate
|
||||||
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
|
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
|
||||||
self.artistLabel.setText(_translate("MainWindow", "artist"))
|
self.artistLabel.setText(_translate("MainWindow", "artist"))
|
||||||
self.titleLabel.setText(_translate("MainWindow", "song title"))
|
|
||||||
self.albumLabel.setText(_translate("MainWindow", "album"))
|
self.albumLabel.setText(_translate("MainWindow", "album"))
|
||||||
self.startTimeLabel.setText(_translate("MainWindow", "00:00"))
|
self.startTimeLabel.setText(_translate("MainWindow", "00:00"))
|
||||||
self.slashLabel.setText(_translate("MainWindow", "/"))
|
self.slashLabel.setText(_translate("MainWindow", "/"))
|
||||||
|
|||||||
38
ui.ui
38
ui.ui
@ -101,9 +101,6 @@
|
|||||||
<pointsize>18</pointsize>
|
<pointsize>18</pointsize>
|
||||||
</font>
|
</font>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
|
||||||
<string>song title</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
@ -240,38 +237,7 @@
|
|||||||
<widget class="PlaylistsPane" name="playlistTreeView"/>
|
<widget class="PlaylistsPane" name="playlistTreeView"/>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="MusicTable" name="tableView">
|
<widget class="MusicTable" name="tableView"/>
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>16777215</width>
|
|
||||||
<height>16777215</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="acceptDrops">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
<property name="horizontalScrollBarPolicy">
|
|
||||||
<enum>Qt::ScrollBarAlwaysOff</enum>
|
|
||||||
</property>
|
|
||||||
<property name="editTriggers">
|
|
||||||
<set>QAbstractItemView::AnyKeyPressed|QAbstractItemView::EditKeyPressed</set>
|
|
||||||
</property>
|
|
||||||
<property name="alternatingRowColors">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
<property name="selectionMode">
|
|
||||||
<enum>QAbstractItemView::ExtendedSelection</enum>
|
|
||||||
</property>
|
|
||||||
<property name="selectionBehavior">
|
|
||||||
<enum>QAbstractItemView::SelectRows</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sortingEnabled">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
<attribute name="verticalHeaderVisible">
|
|
||||||
<bool>false</bool>
|
|
||||||
</attribute>
|
|
||||||
</widget>
|
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
@ -407,7 +373,7 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>1152</width>
|
<width>1152</width>
|
||||||
<height>41</height>
|
<height>21</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QMenu" name="menuFile">
|
<widget class="QMenu" name="menuFile">
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user