multi-column sort

This commit is contained in:
tsi-billypom 2024-09-24 16:30:57 -04:00
parent 59664e6c48
commit 423b63accf
6 changed files with 46 additions and 1 deletions

View File

@ -105,6 +105,7 @@ class MusicTable(QTableView):
self.current_song_filepath = "" self.current_song_filepath = ""
self.horizontalHeader().setStretchLastSection(True) self.horizontalHeader().setStretchLastSection(True)
self.horizontalHeader().setSectionResizeMode(QHeaderView.Interactive) self.horizontalHeader().setSectionResizeMode(QHeaderView.Interactive)
self.setSortingEnabled(False)
# self.horizontalHeader().setCascadingSectionResizes(True) # self.horizontalHeader().setCascadingSectionResizes(True)
# CONNECTIONS # CONNECTIONS
self.clicked.connect(self.set_selected_song_filepath) self.clicked.connect(self.set_selected_song_filepath)
@ -132,6 +133,35 @@ class MusicTable(QTableView):
for i in range(self.model.columnCount() - 1): for i in range(self.model.columnCount() - 1):
self.setColumnWidth(i, int(table_view_column_widths[i])) self.setColumnWidth(i, int(table_view_column_widths[i]))
def sort_table_by_multiple_columns(self):
"""
Sorts the data in QTableView (self) by multiple columns
as defined in config.ini
"""
self.setSortingEnabled(False)
self.setSortingEnabled(True)
sort_orders = []
config_sort_orders: list[int] = [
int(x) for x in self.config["table"]["sort_orders"].split(",")
]
print(f"config sort orders = {config_sort_orders}")
for order in config_sort_orders:
if order == 0:
sort_orders.append(None)
elif order == 1:
sort_orders.append(Qt.SortOrder.AscendingOrder)
elif order == 2:
sort_orders.append(Qt.SortOrder.DescendingOrder)
print(f"sort_orders = {sort_orders}")
for i, order in enumerate(sort_orders):
print(f"i = {i}, order = {order}")
if order is not None:
print(f"sorting column {i} by {order}")
self.sortByColumn(i, order)
self.model.layoutChanged.emit()
def resizeEvent(self, e: typing.Optional[QResizeEvent]) -> None: def resizeEvent(self, e: typing.Optional[QResizeEvent]) -> None:
"""Do something when the QTableView is resized""" """Do something when the QTableView is resized"""
if e is None: if e is None:

View File

@ -211,6 +211,9 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow):
self.actionScanLibraries.triggered.connect(self.scan_libraries) self.actionScanLibraries.triggered.connect(self.scan_libraries)
self.actionDeleteLibrary.triggered.connect(self.clear_database) self.actionDeleteLibrary.triggered.connect(self.clear_database)
self.actionDeleteDatabase.triggered.connect(self.delete_database) self.actionDeleteDatabase.triggered.connect(self.delete_database)
self.actionSortColumns.triggered.connect(
self.tableView.sort_table_by_multiple_columns
)
# QTableView # QTableView
self.tableView.viewport().installEventFilter( self.tableView.viewport().installEventFilter(

View File

@ -17,3 +17,4 @@ extensions = mp3,wav,ogg,flac
# Music table options # Music table options
columns = title,artist,album,track_number,genre,codec,album_date,filepath columns = title,artist,album,track_number,genre,codec,album_date,filepath
column_widths = 181,116,222,76,74,72,287,150 column_widths = 181,116,222,76,74,72,287,150
sort_orders = None,Qt.AscendingOrder,Qt.AscendingOrder,Qt.AscendingOrder,None,None,None,None

4
ui.py
View File

@ -181,6 +181,8 @@ class Ui_MainWindow(object):
self.actionScanLibraries.setObjectName("actionScanLibraries") self.actionScanLibraries.setObjectName("actionScanLibraries")
self.actionDeleteLibrary = QtWidgets.QAction(MainWindow) self.actionDeleteLibrary = QtWidgets.QAction(MainWindow)
self.actionDeleteLibrary.setObjectName("actionDeleteLibrary") self.actionDeleteLibrary.setObjectName("actionDeleteLibrary")
self.actionSortColumns = QtWidgets.QAction(MainWindow)
self.actionSortColumns.setObjectName("actionSortColumns")
self.actionOpenFiles = QtWidgets.QAction(MainWindow) self.actionOpenFiles = QtWidgets.QAction(MainWindow)
self.actionOpenFiles.setObjectName("actionOpenFiles") self.actionOpenFiles.setObjectName("actionOpenFiles")
self.actionDeleteDatabase = QtWidgets.QAction(MainWindow) self.actionDeleteDatabase = QtWidgets.QAction(MainWindow)
@ -196,6 +198,7 @@ class Ui_MainWindow(object):
self.menuQuick_Actions.addAction(self.actionScanLibraries) self.menuQuick_Actions.addAction(self.actionScanLibraries)
self.menuQuick_Actions.addAction(self.actionDeleteLibrary) self.menuQuick_Actions.addAction(self.actionDeleteLibrary)
self.menuQuick_Actions.addAction(self.actionDeleteDatabase) self.menuQuick_Actions.addAction(self.actionDeleteDatabase)
self.menuQuick_Actions.addAction(self.actionSortColumns)
self.menubar.addAction(self.menuFile.menuAction()) self.menubar.addAction(self.menuFile.menuAction())
self.menubar.addAction(self.menuEdit.menuAction()) self.menubar.addAction(self.menuEdit.menuAction())
self.menubar.addAction(self.menuView.menuAction()) self.menubar.addAction(self.menuView.menuAction())
@ -224,6 +227,7 @@ class Ui_MainWindow(object):
self.actionPreferences.setStatusTip(_translate("MainWindow", "Open preferences")) self.actionPreferences.setStatusTip(_translate("MainWindow", "Open preferences"))
self.actionScanLibraries.setText(_translate("MainWindow", "Scan libraries")) self.actionScanLibraries.setText(_translate("MainWindow", "Scan libraries"))
self.actionDeleteLibrary.setText(_translate("MainWindow", "Delete Library")) self.actionDeleteLibrary.setText(_translate("MainWindow", "Delete Library"))
self.actionSortColumns.setText(_translate("MainWindow", "Sort Columns"))
self.actionOpenFiles.setText(_translate("MainWindow", "Open file(s)")) self.actionOpenFiles.setText(_translate("MainWindow", "Open file(s)"))
self.actionDeleteDatabase.setText(_translate("MainWindow", "Delete Database")) self.actionDeleteDatabase.setText(_translate("MainWindow", "Delete Database"))
self.actionNewPlaylist.setText(_translate("MainWindow", "New playlist")) self.actionNewPlaylist.setText(_translate("MainWindow", "New playlist"))

6
ui.ui
View File

@ -316,6 +316,7 @@
<addaction name="actionScanLibraries"/> <addaction name="actionScanLibraries"/>
<addaction name="actionDeleteLibrary"/> <addaction name="actionDeleteLibrary"/>
<addaction name="actionDeleteDatabase"/> <addaction name="actionDeleteDatabase"/>
<addaction name="actionSortColumns"/>
</widget> </widget>
<addaction name="menuFile"/> <addaction name="menuFile"/>
<addaction name="menuEdit"/> <addaction name="menuEdit"/>
@ -341,6 +342,11 @@
<string>Delete Library</string> <string>Delete Library</string>
</property> </property>
</action> </action>
<action name="actionSortColumns">
<property name="text">
<string>Sort Columns</string>
</property>
</action>
<action name="actionOpenFiles"> <action name="actionOpenFiles">
<property name="text"> <property name="text">
<string>Open file(s)</string> <string>Open file(s)</string>

View File

@ -1,2 +1,3 @@
#!/bin/bash #!/bin/bash
# creates a 5 second long empty mp3 file
ffmpeg -f lavfi -i anullsrc=r=44100:cl=mono -t 5 -q:a 9 -acodec libmp3lame out.mp3 ffmpeg -f lavfi -i anullsrc=r=44100:cl=mono -t 5 -q:a 9 -acodec libmp3lame out.mp3