multi-column sort
This commit is contained in:
parent
59664e6c48
commit
423b63accf
@ -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:
|
||||||
|
|||||||
3
main.py
3
main.py
@ -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(
|
||||||
|
|||||||
@ -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
4
ui.py
@ -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
6
ui.ui
@ -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>
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user