From d012ca9ed1c9b5dd45d8496491b0cb7564908a90 Mon Sep 17 00:00:00 2001 From: Nils Date: Mon, 1 Aug 2022 00:56:29 +0200 Subject: [PATCH] show first block name in track list widget --- qtgui/tracklistwidget.py | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/qtgui/tracklistwidget.py b/qtgui/tracklistwidget.py index ffe44ab..718f191 100644 --- a/qtgui/tracklistwidget.py +++ b/qtgui/tracklistwidget.py @@ -54,8 +54,8 @@ class TrackListWidget(QtWidgets.QWidget): self.realTrackListWidget = _TrackListWidget(mainWindow, self) self.layout.addWidget(self.trackLabel) - self.layout.addWidget(self.showEverythingCheckBox) self.layout.addWidget(self.soloPlaybackCheckbox) + self.layout.addWidget(self.showEverythingCheckBox) self.layout.addWidget(self.realTrackListWidget, stretch=1) api.callbacks.setCursor.append(self.callback_setCursor) @@ -95,6 +95,8 @@ class _TrackListWidget(QtWidgets.QListWidget): self.mainWindow = mainWindow self._lastCurrentTrackId = None + self._firstBlockNames = {} # engineTrackId : string + self.tracks = {} # engineTrackId : engineExportData self.itemPressed.connect(self._react_itemPressed) @@ -104,6 +106,7 @@ class _TrackListWidget(QtWidgets.QListWidget): api.callbacks.tracksChanged.append(self.syncTracks) api.callbacks.updateTrack.append(self.updateTrack) api.callbacks.setCursor.append(self.setCursor) + api.callbacks.updateBlockTrack.append(self.updateBlockList) #to get the block names def showEverything(self, state:bool): @@ -118,7 +121,7 @@ class _TrackListWidget(QtWidgets.QListWidget): self.showTrack(cursorExportObject["trackId"]) self.blockSignals(True) - self.setCurrentRow(cursorExportObject["position"]) + self.setCurrentRow(cursorExportObject["position"]+1) #+1 offset for the initial block name self.blockSignals(False) @@ -127,7 +130,11 @@ class _TrackListWidget(QtWidgets.QListWidget): It only happens when the mouse etc. actually pressed an item. This list cannot be activated by cursor keys etc. directly. """ - api.toPosition(self.currentRow()) #currentRow is calculated after we already are on the item. + + i = self.currentRow() #currentRow is calculated after we already are on the item. + if i > 0: + i -= 1 #-1 because we have the artificial first block item that the engine didn't send us + api.toPosition(i) def syncTracks(self, listOfStaticTrackRepresentations): """Handles the number of tracks and track meta-data changes, @@ -137,29 +144,38 @@ class _TrackListWidget(QtWidgets.QListWidget): if not trackExportObject["id"] in self.tracks: self.tracks[trackExportObject["id"]] = None + def updateBlockList(self, trackId, listOfBlockExportDicts): + """This comes in for every small item change. But only per track. + Blocknames in our list are done by using the artificial block end markers, but the first block does not have that. + We store this for self.showTrack + """ + self._firstBlockNames[trackId] = listOfBlockExportDicts[0]["name"] + #updateTrack callback arrives before updateBlockTrack. + #We need both, but we also need to update the first item directly after a name change + if trackId == self._lastCurrentTrackId: + self.item(0).setText("== " + self._firstBlockNames[trackId] ) + def updateTrack(self, trackId, staticRepresentationList): """Callback: The content of a single track has changed""" if not trackId in self.tracks: #hidden track. But this can still happen through the data editor return - self.tracks[trackId] = staticRepresentationList if trackId == self._lastCurrentTrackId: self.showTrack(trackId) - - def showTrack(self, trackId): """Cursor moved to a different track. This is essentially destroy-and-recreate in Qt """ - self.clear() staticRepresentationList = self.tracks[trackId] count = 0 - filterTypes = set(("Chord", "Rest")) + #Block entries are done with BlockEndMarker, but there is no for the first. + self.addItem("== " + self._firstBlockNames[self._lastCurrentTrackId]) + filterTypes = set(("Chord", "Rest")) if self._showEverything: for staticItem in staticRepresentationList: self.addItem(staticItem["UIstring"])