Browse Source

fix further bugs and add more assertion infos

master
Nils 4 years ago
parent
commit
34ee20a0bf
  1. 12
      engine/api.py
  2. 1
      engine/items.py
  3. 5
      engine/track.py
  4. 2
      qtgui/conductor.py
  5. 2
      qtgui/items.py

12
engine/api.py

@ -774,12 +774,16 @@ def joinBlock():
def deleteBlock(blockId): def deleteBlock(blockId):
track, block = session.data.blockById(blockId) track, block = session.data.blockById(blockId)
oldBlockArrangement = track.asListOfBlockIds() oldBlockArrangement = track.asListOfBlockIds()
parentTrack, deletedBlock = track.deleteBlock(block) result = track.deleteBlock(block)
if (parentTrack and deletedBlock): #not the last block if result: #not the last block
parentTrack, deletedBlock = result
#Blocks are never truly deleted but a stored in the Block.allBlocks dict. This keeps the reference to this deleted block alive and it can be added through rearrange, which gets its blocks from this dict. #Blocks are never truly deleted but a stored in the Block.allBlocks dict. This keeps the reference to this deleted block alive and it can be added through rearrange, which gets its blocks from this dict.
session.history.register(lambda i=id(track), l=oldBlockArrangement: rearrangeBlocks(i, l), descriptionString = "delete block") session.history.register(lambda i=id(track), l=oldBlockArrangement: rearrangeBlocks(i, l), descriptionString = "delete block")
callbacks._updateTrack(id(track)) callbacks._updateTrack(id(track))
callbacks._setCursor() callbacks._setCursor()
return True
else:
return False
def deleteCurrentBlock(): def deleteCurrentBlock():
currentBlockId = id(session.data.currentTrack().currentBlock()) currentBlockId = id(session.data.currentTrack().currentBlock())
@ -837,7 +841,7 @@ def moveBlockToOtherTrack(blockId, newTrackId, listOfBlockIdsForNewTrack):
newTrack.appendExistingBlock(block) newTrack.appendExistingBlock(block)
newTrack.rearrangeBlocks(listOfBlockIdsForNewTrack) newTrack.rearrangeBlocks(listOfBlockIdsForNewTrack)
#We don't need to check if deleting succeeded because we already checked if there are more than 1 blocks in the track above. #We don't need to check if deleting succeeded because we already checked if there are more than 1 blocks in the track above.
oldTrack.deleteBlock(block) #It is important that we delete the block at exactly this point in time, not ealier. Otherwise the reference for undo will go away. oldTrack.deleteBlock(block) #Check for last block is above. It is important that we delete the block at exactly this point in time, not ealier. Otherwise the reference for undo will go away.
block.parentTrack = newTrack block.parentTrack = newTrack
callbacks._updateTrack(id(oldTrack)) callbacks._updateTrack(id(oldTrack))
@ -1924,7 +1928,7 @@ def moveCCBlockToOtherTrack(graphBlockId, newTrackId, listOfBlockIdsForNewTrack)
newGraphTrack.appendExistingGraphBlock(graphBlock) newGraphTrack.appendExistingGraphBlock(graphBlock)
newGraphTrack.rearrangeBlocks(listOfBlockIdsForNewTrack) newGraphTrack.rearrangeBlocks(listOfBlockIdsForNewTrack)
oldccTrack.deleteBlock(graphBlock) #It is important that we delete the block at exactly this point in time, not ealier. Otherwise the reference for undo will go away. oldccTrack.deleteBlock(graphBlock) #Check for last block is above. It is important that we delete the block at exactly this point in time, not earlier. Otherwise the reference for undo will go away.
graphBlock.parentGraphTrack = newGraphTrack graphBlock.parentGraphTrack = newGraphTrack
callbacks._updateGraphTrackCC(trId, cc) callbacks._updateGraphTrackCC(trId, cc)

1
engine/items.py

@ -1136,6 +1136,7 @@ class Chord(Item):
note = self.getNearestNote(pitch) note = self.getNearestNote(pitch)
oldValueForUndo = note.pitch oldValueForUndo = note.pitch
note.octaveDown() note.octaveDown()
self.notelist.sort()
self._cachedClefForLedgerLines = None self._cachedClefForLedgerLines = None
return lambda: self._setNotePitch(note, oldValueForUndo) return lambda: self._setNotePitch(note, oldValueForUndo)

5
engine/track.py

@ -448,6 +448,8 @@ class Track(object):
block.parentTrack = None block.parentTrack = None
self.toPosition(originalPosition, strict = False) #has head() in it. strict=False just leaves the cursor at head if we can't return to the position because it got deleted. self.toPosition(originalPosition, strict = False) #has head() in it. strict=False just leaves the cursor at head if we can't return to the position because it got deleted.
return self, block #self is parent Track return self, block #self is parent Track
else:
return False
def currentBlock(self): def currentBlock(self):
block = self.blocks[self.state.blockindex] block = self.blocks[self.state.blockindex]
@ -601,7 +603,8 @@ class Track(object):
while not self.state.ticksSinceLastMeasureStartLive <= 0: while not self.state.ticksSinceLastMeasureStartLive <= 0:
self.left() self.left()
while self.left(): #stops automatically at the beginning of the track while self.left(): #stops automatically at the beginning of the track
if self.currentItem().logicalDuration() > 0 or not self.state.ticksSinceLastMeasureStartLive == 0: #we found the boundary between this measure and the one before it curItem = self.currentItem()
if curItem and curItem.logicalDuration() > 0 or not self.state.ticksSinceLastMeasureStartLive == 0: #we found the boundary between this measure and the one before it
self.right() self.right()
break break
else: else:

2
qtgui/conductor.py

@ -605,7 +605,7 @@ class TimeLine(QtWidgets.QGraphicsItem):
secondsSinceLastTempoChange = gridCounter * self.gridInSeconds - sliceStartInSeconds secondsSinceLastTempoChange = gridCounter * self.gridInSeconds - sliceStartInSeconds
posInTicks = nowPoint["position"] + secondsSinceLastTempoChange * ticksPerSecondForThisSlice posInTicks = nowPoint["position"] + secondsSinceLastTempoChange * ticksPerSecondForThisSlice
assert nowPoint["position"] <= posInTicks <= nextPoint["position"] assert nowPoint["position"] <= posInTicks <= nextPoint["position"], (nowPoint["position"], posInTicks, nextPoint["position"])
result.append((posInTicks, gridCounter * self.gridInSeconds)) result.append((posInTicks, gridCounter * self.gridInSeconds))
sliceStartInSeconds = sliceEndInSeconds sliceStartInSeconds = sliceEndInSeconds

2
qtgui/items.py

@ -485,7 +485,7 @@ class GuiChord(GuiItem):
for noteExportObject in self.staticItem["notelist"]: for noteExportObject in self.staticItem["notelist"]:
#notes in a chord come in the order highest to lowest #notes in a chord come in the order highest to lowest
#determine if we have two neighbouring noteheads. If yes we shift one of the heads to the right #determine if we have two neighbouring noteheads. If yes we shift one of the heads to the right
assert lastDotOnLine >= noteExportObject["dotOnLine"] assert lastDotOnLine >= noteExportObject["dotOnLine"], (lastDotOnLine, noteExportObject["dotOnLine"]) #If this fails means the engine function did not call Chord.notelist.sort() after modification
if lastDotOnLine - noteExportObject["dotOnLine"] == 1: if lastDotOnLine - noteExportObject["dotOnLine"] == 1:
moveThisNoteheadToTheRight = True moveThisNoteheadToTheRight = True
lastDotOnLine = noteExportObject["dotOnLine"] lastDotOnLine = noteExportObject["dotOnLine"]

Loading…
Cancel
Save