multi-column sort
This commit is contained in:
parent
59664e6c48
commit
423b63accf
@ -105,6 +105,7 @@ class MusicTable(QTableView):
|
||||
self.current_song_filepath = ""
|
||||
self.horizontalHeader().setStretchLastSection(True)
|
||||
self.horizontalHeader().setSectionResizeMode(QHeaderView.Interactive)
|
||||
self.setSortingEnabled(False)
|
||||
# self.horizontalHeader().setCascadingSectionResizes(True)
|
||||
# CONNECTIONS
|
||||
self.clicked.connect(self.set_selected_song_filepath)
|
||||
@ -132,6 +133,35 @@ class MusicTable(QTableView):
|
||||
for i in range(self.model.columnCount() - 1):
|
||||
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:
|
||||
"""Do something when the QTableView is resized"""
|
||||
if e is None:
|
||||
|
||||
3
main.py
3
main.py
@ -211,6 +211,9 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow):
|
||||
self.actionScanLibraries.triggered.connect(self.scan_libraries)
|
||||
self.actionDeleteLibrary.triggered.connect(self.clear_database)
|
||||
self.actionDeleteDatabase.triggered.connect(self.delete_database)
|
||||
self.actionSortColumns.triggered.connect(
|
||||
self.tableView.sort_table_by_multiple_columns
|
||||
)
|
||||
|
||||
# QTableView
|
||||
self.tableView.viewport().installEventFilter(
|
||||
|
||||
@ -17,3 +17,4 @@ extensions = mp3,wav,ogg,flac
|
||||
# Music table options
|
||||
columns = title,artist,album,track_number,genre,codec,album_date,filepath
|
||||
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
4
ui.py
@ -181,6 +181,8 @@ class Ui_MainWindow(object):
|
||||
self.actionScanLibraries.setObjectName("actionScanLibraries")
|
||||
self.actionDeleteLibrary = QtWidgets.QAction(MainWindow)
|
||||
self.actionDeleteLibrary.setObjectName("actionDeleteLibrary")
|
||||
self.actionSortColumns = QtWidgets.QAction(MainWindow)
|
||||
self.actionSortColumns.setObjectName("actionSortColumns")
|
||||
self.actionOpenFiles = QtWidgets.QAction(MainWindow)
|
||||
self.actionOpenFiles.setObjectName("actionOpenFiles")
|
||||
self.actionDeleteDatabase = QtWidgets.QAction(MainWindow)
|
||||
@ -196,6 +198,7 @@ class Ui_MainWindow(object):
|
||||
self.menuQuick_Actions.addAction(self.actionScanLibraries)
|
||||
self.menuQuick_Actions.addAction(self.actionDeleteLibrary)
|
||||
self.menuQuick_Actions.addAction(self.actionDeleteDatabase)
|
||||
self.menuQuick_Actions.addAction(self.actionSortColumns)
|
||||
self.menubar.addAction(self.menuFile.menuAction())
|
||||
self.menubar.addAction(self.menuEdit.menuAction())
|
||||
self.menubar.addAction(self.menuView.menuAction())
|
||||
@ -224,6 +227,7 @@ class Ui_MainWindow(object):
|
||||
self.actionPreferences.setStatusTip(_translate("MainWindow", "Open preferences"))
|
||||
self.actionScanLibraries.setText(_translate("MainWindow", "Scan libraries"))
|
||||
self.actionDeleteLibrary.setText(_translate("MainWindow", "Delete Library"))
|
||||
self.actionSortColumns.setText(_translate("MainWindow", "Sort Columns"))
|
||||
self.actionOpenFiles.setText(_translate("MainWindow", "Open file(s)"))
|
||||
self.actionDeleteDatabase.setText(_translate("MainWindow", "Delete Database"))
|
||||
self.actionNewPlaylist.setText(_translate("MainWindow", "New playlist"))
|
||||
|
||||
6
ui.ui
6
ui.ui
@ -316,6 +316,7 @@
|
||||
<addaction name="actionScanLibraries"/>
|
||||
<addaction name="actionDeleteLibrary"/>
|
||||
<addaction name="actionDeleteDatabase"/>
|
||||
<addaction name="actionSortColumns"/>
|
||||
</widget>
|
||||
<addaction name="menuFile"/>
|
||||
<addaction name="menuEdit"/>
|
||||
@ -341,6 +342,11 @@
|
||||
<string>Delete Library</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionSortColumns">
|
||||
<property name="text">
|
||||
<string>Sort Columns</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionOpenFiles">
|
||||
<property name="text">
|
||||
<string>Open file(s)</string>
|
||||
|
||||
@ -1,2 +1,3 @@
|
||||
#!/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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user