diff --git a/components/MusicTable.py b/components/MusicTable.py index 8680b0f..b017d5d 100644 --- a/components/MusicTable.py +++ b/components/MusicTable.py @@ -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: diff --git a/main.py b/main.py index 2acc0a8..860a44d 100644 --- a/main.py +++ b/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( diff --git a/sample_config.ini b/sample_config.ini index 4385409..c4b43e5 100644 --- a/sample_config.ini +++ b/sample_config.ini @@ -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 diff --git a/ui.py b/ui.py index 99ac7d5..b9e3067 100644 --- a/ui.py +++ b/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")) diff --git a/ui.ui b/ui.ui index 87c41a2..59a8a78 100644 --- a/ui.ui +++ b/ui.ui @@ -315,7 +315,8 @@ - + + @@ -341,6 +342,11 @@ Delete Library + + + Sort Columns + + Open file(s) diff --git a/utils/create_blank_mp3.sh b/utils/create_blank_mp3.sh index 942d9fc..7c6a759 100644 --- a/utils/create_blank_mp3.sh +++ b/utils/create_blank_mp3.sh @@ -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