diff options
-rw-r--r-- | known-issues.md | 2 | ||||
-rw-r--r-- | solo_tool_qt.py | 36 |
2 files changed, 32 insertions, 6 deletions
diff --git a/known-issues.md b/known-issues.md index 86e83c7..a9f5bbe 100644 --- a/known-issues.md +++ b/known-issues.md @@ -8,6 +8,8 @@ * automatically play next song when current song ends * playback doesn't stop when jumping to next/previous song * should this be the default anyway? +* Switching between songs and AB limits does not work properly + * AB controller only keeps track of limit index, not current song => when song changes, index is invalid but not properly reset # Closed Issues diff --git a/solo_tool_qt.py b/solo_tool_qt.py index 25a15fb..b3eac81 100644 --- a/solo_tool_qt.py +++ b/solo_tool_qt.py @@ -42,6 +42,7 @@ class ABListModel(QAbstractListModel): class MainWindow(QMainWindow, Ui_MainWindow): songChangeSignal = pyqtSignal(int) + abLimitsChangeSignal = pyqtSignal(int) def __init__(self, *args, **kwargs): super(MainWindow, self).__init__(*args, **kwargs) @@ -64,6 +65,9 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.abListModel = ABListModel(self.soloTool) self.abListView.setModel(self.abListModel) self.abListView.selectionModel().selectionChanged.connect(self.abListSelectionChanged) + self.abLimitsChangePending = None + self.abLimitsChangeSignal.connect(self.currentAbLimitsChanged) + self.soloTool.registerCurrentAbLimitsCallback(self.abLimitsChangeSignal.emit) self.songSlider.setMaximum(POSITION_FACTOR) self.songSlider.sliderPressed.connect(self.songSliderPressed) @@ -167,8 +171,8 @@ class MainWindow(QMainWindow, Ui_MainWindow): index = i.indexes()[0].row() self.soloTool.setSong(index) - self.abListModel.layoutChanged.emit() self.clearListViewSelection(self.abListView) + self.abListModel.layoutChanged.emit() def currentSongChanged(self, songIndex): if self.songChangePending == CHANGE_GUI: @@ -176,15 +180,35 @@ class MainWindow(QMainWindow, Ui_MainWindow): else: assert self.songChangePending is None self.songChangePending = CHANGE_INTERNAL - print(f"Forcing selection to {songIndex}") i = self.playlistModel.createIndex(songIndex, 0) self.songListView.selectionModel().select(i, QItemSelectionModel.ClearAndSelect) def abListSelectionChanged(self, i): - if i is not None and not i.isEmpty(): - index = i.indexes()[0].row() - ab = self.soloTool.getStoredAbLimits()[index] - self.soloTool.loadAbLimits(index) + if self.abLimitsChangePending == CHANGE_INTERNAL: + print("Ack internal change") + self.abLimitsChangePending = None + else: + assert self.abLimitsChangePending is None + if i is not None and not i.isEmpty(): + print("Processing GUI change") + self.abLimitsChangePending = CHANGE_GUI + index = i.indexes()[0].row() + ab = self.soloTool.getStoredAbLimits()[index] + self.soloTool.loadAbLimits(index) + self.aSlider.setValue(int(ab[0] * POSITION_FACTOR)) + self.bSlider.setValue(int(ab[1] * POSITION_FACTOR)) + + def currentAbLimitsChanged(self, abIndex): + if self.abLimitsChangePending == CHANGE_GUI: + print("Ack GUI change") + self.abLimitsChangePending = None + else: + assert self.abLimitsChangePending is None + print("Processing internal change") + self.abLimitsChangePending = CHANGE_INTERNAL + i = self.abListModel.createIndex(abIndex, 0) + self.abListView.selectionModel().select(i, QItemSelectionModel.ClearAndSelect) + ab = self.soloTool.getStoredAbLimits()[abIndex] self.aSlider.setValue(int(ab[0] * POSITION_FACTOR)) self.bSlider.setValue(int(ab[1] * POSITION_FACTOR)) |