From 9a9b25622cd3cf9e41f5fcdec9b4529f7f6eb753 Mon Sep 17 00:00:00 2001 From: eyck Date: Sat, 17 Oct 2020 13:54:34 +0200 Subject: [PATCH] fix arrow painter if stream is moved --- .../database/ui/swt/internal/ArrowPainter.java | 13 ++++++++----- .../application/parts/TransactionDetails.java | 2 +- .../e4/application/parts/WaveformViewer.java | 17 +++++++++-------- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java index 813824b..0c58157 100644 --- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java +++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/ArrowPainter.java @@ -49,7 +49,7 @@ public class ArrowPainter implements IPainter { long scaleFactor; - boolean deferredUpdate; + boolean deferUpdate; public ArrowPainter(WaveformCanvas waveCanvas, RelationType relationType) { this.waveCanvas = waveCanvas; @@ -80,12 +80,14 @@ public class ArrowPainter implements IPainter { } protected void calculateGeometries() { - deferredUpdate = false; + deferUpdate = false; + iRect.clear(); + oRect.clear(); ITxStream stream = tx.getStream(); IWaveformPainter painter = waveCanvas.wave2painterMap.get(stream); if (painter == null) { // stream has been added but painter not yet // created - deferredUpdate = true; + deferUpdate = true; return; } int laneHeight = painter.getHeight() / stream.getMaxConcurrency(); @@ -117,11 +119,12 @@ public class ArrowPainter implements IPainter { Color fgColor = waveCanvas.colors[WaveformColors.REL_ARROW.ordinal()]; Color highliteColor = waveCanvas.colors[WaveformColors.REL_ARROW_HIGHLITE.ordinal()]; - if (deferredUpdate || (tx != null && waveCanvas.getScaleFactor() != scaleFactor)) { + if(tx==null) return; + if (!deferUpdate) { scaleFactor = waveCanvas.getScaleFactor(); calculateGeometries(); } - if(txRectangle == null) return; + if(deferUpdate) return; int correctionValue = (int)(selectionOffset); Rectangle correctedTargetRectangle = new Rectangle(txRectangle.x+correctionValue, txRectangle.y, txRectangle.width, txRectangle.height); for (LinkEntry entry : iRect) { diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/TransactionDetails.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/TransactionDetails.java index 6d4cc71..f4d3b1c 100644 --- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/TransactionDetails.java +++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/TransactionDetails.java @@ -395,7 +395,7 @@ public class TransactionDetails { if( part == null || ! (part.getObject() instanceof WaveformViewer ) ) return; if(treeViewer!=null && selection!=null && !treeViewer.getTree().isDisposed()){ - if( selection instanceof IStructuredSelection) { + if( selection instanceof IStructuredSelection && !selection.isEmpty()) { setInput(((IStructuredSelection)selection).getFirstElement()); } } diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java index 6282533..96e65cc 100644 --- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java +++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java @@ -1004,15 +1004,16 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis waveformPane.getStreamList().addAll(streams); } else { Object first = selection.getFirstElement(); - IWaveform stream = (first instanceof ITx) ? ((ITx) first).getStream() : (IWaveform) first; - TrackEntry trackEntry = waveformPane.getEntryForStream(stream); - if (insert) { - int index = waveformPane.getStreamList().indexOf(trackEntry); - waveformPane.getStreamList().addAll(index, streams); - } else { - waveformPane.getStreamList().addAll(streams); + if(first instanceof ITx) { + IWaveform stream = (first instanceof ITx) ? ((ITx) first).getStream() : (IWaveform) first; + TrackEntry trackEntry = waveformPane.getEntryForStream(stream); + if (insert) { + int index = waveformPane.getStreamList().indexOf(trackEntry); + waveformPane.getStreamList().addAll(index, streams); + } else { + waveformPane.getStreamList().addAll(streams); + } } - } setFocus(); }