From e0d00e6402565864c40b3fa01ace609557c89d9d Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Thu, 11 Apr 2019 06:09:35 +0000 Subject: [PATCH 1/4] Settings update --- .../org.eclipse.core.resources.prefs | 2 -- com.minres.scviewer.database.test/.classpath | 6 ++++- .../org.eclipse.core.resources.prefs | 3 --- com.minres.scviewer.database.text/.classpath | 23 +++++++++++-------- .../.settings/org.eclipse.jdt.core.prefs | 1 + .../org.eclipse.core.resources.prefs | 2 -- .../org.eclipse.core.resources.prefs | 2 -- com.minres.scviewer.database/.classpath | 4 ++-- .../org.eclipse.core.resources.prefs | 2 -- com.minres.scviewer.e4.application/.classpath | 2 +- .../org.eclipse.core.resources.prefs | 2 -- com.minres.scviewer.ui/.classpath | 3 +-- .../org.eclipse.core.resources.prefs | 2 -- .../org.eclipse.core.resources.prefs | 2 -- 14 files changed, 23 insertions(+), 33 deletions(-) delete mode 100644 com.minres.scviewer.database.sqlite/.settings/org.eclipse.core.resources.prefs delete mode 100644 com.minres.scviewer.database.test/.settings/org.eclipse.core.resources.prefs delete mode 100644 com.minres.scviewer.database.ui.swt/.settings/org.eclipse.core.resources.prefs delete mode 100644 com.minres.scviewer.database.vcd/.settings/org.eclipse.core.resources.prefs delete mode 100644 com.minres.scviewer.database/.settings/org.eclipse.core.resources.prefs delete mode 100644 com.minres.scviewer.feature/.settings/org.eclipse.core.resources.prefs delete mode 100644 com.minres.scviewer.ui/.settings/org.eclipse.core.resources.prefs delete mode 100644 com.minres.scviewer.updateSite/.settings/org.eclipse.core.resources.prefs diff --git a/com.minres.scviewer.database.sqlite/.settings/org.eclipse.core.resources.prefs b/com.minres.scviewer.database.sqlite/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 99f26c0..0000000 --- a/com.minres.scviewer.database.sqlite/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding/=UTF-8 diff --git a/com.minres.scviewer.database.test/.classpath b/com.minres.scviewer.database.test/.classpath index 43b9862..cc5ee2d 100644 --- a/com.minres.scviewer.database.test/.classpath +++ b/com.minres.scviewer.database.test/.classpath @@ -2,6 +2,10 @@ - + + + + + diff --git a/com.minres.scviewer.database.test/.settings/org.eclipse.core.resources.prefs b/com.minres.scviewer.database.test/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index e84a201..0000000 --- a/com.minres.scviewer.database.test/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,3 +0,0 @@ -eclipse.preferences.version=1 -encoding//src/com/minres/scviewer/database/test/DatabaseServicesTest.java=UTF-8 -encoding/=UTF-8 diff --git a/com.minres.scviewer.database.text/.classpath b/com.minres.scviewer.database.text/.classpath index fbe692e..289f0a4 100644 --- a/com.minres.scviewer.database.text/.classpath +++ b/com.minres.scviewer.database.text/.classpath @@ -1,19 +1,22 @@ - - - - - - + + + + + + - - - - + + + + + + + diff --git a/com.minres.scviewer.database.text/.settings/org.eclipse.jdt.core.prefs b/com.minres.scviewer.database.text/.settings/org.eclipse.jdt.core.prefs index 6e80039..4e4a3ad 100644 --- a/com.minres.scviewer.database.text/.settings/org.eclipse.jdt.core.prefs +++ b/com.minres.scviewer.database.text/.settings/org.eclipse.jdt.core.prefs @@ -5,4 +5,5 @@ org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.release=disabled org.eclipse.jdt.core.compiler.source=1.8 diff --git a/com.minres.scviewer.database.ui.swt/.settings/org.eclipse.core.resources.prefs b/com.minres.scviewer.database.ui.swt/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 99f26c0..0000000 --- a/com.minres.scviewer.database.ui.swt/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding/=UTF-8 diff --git a/com.minres.scviewer.database.vcd/.settings/org.eclipse.core.resources.prefs b/com.minres.scviewer.database.vcd/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 99f26c0..0000000 --- a/com.minres.scviewer.database.vcd/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding/=UTF-8 diff --git a/com.minres.scviewer.database/.classpath b/com.minres.scviewer.database/.classpath index 5f81a27..cf36b56 100644 --- a/com.minres.scviewer.database/.classpath +++ b/com.minres.scviewer.database/.classpath @@ -1,7 +1,7 @@ - - + + diff --git a/com.minres.scviewer.database/.settings/org.eclipse.core.resources.prefs b/com.minres.scviewer.database/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 99f26c0..0000000 --- a/com.minres.scviewer.database/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding/=UTF-8 diff --git a/com.minres.scviewer.e4.application/.classpath b/com.minres.scviewer.e4.application/.classpath index eca7bdb..43b9862 100644 --- a/com.minres.scviewer.e4.application/.classpath +++ b/com.minres.scviewer.e4.application/.classpath @@ -3,5 +3,5 @@ - + diff --git a/com.minres.scviewer.feature/.settings/org.eclipse.core.resources.prefs b/com.minres.scviewer.feature/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 99f26c0..0000000 --- a/com.minres.scviewer.feature/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding/=UTF-8 diff --git a/com.minres.scviewer.ui/.classpath b/com.minres.scviewer.ui/.classpath index 879524a..cf36b56 100644 --- a/com.minres.scviewer.ui/.classpath +++ b/com.minres.scviewer.ui/.classpath @@ -2,7 +2,6 @@ - - + diff --git a/com.minres.scviewer.ui/.settings/org.eclipse.core.resources.prefs b/com.minres.scviewer.ui/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 99f26c0..0000000 --- a/com.minres.scviewer.ui/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding/=UTF-8 diff --git a/com.minres.scviewer.updateSite/.settings/org.eclipse.core.resources.prefs b/com.minres.scviewer.updateSite/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 99f26c0..0000000 --- a/com.minres.scviewer.updateSite/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding/=UTF-8 From b648dccfd85ac7569852e01f8557307b66ecc953 Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Thu, 11 Apr 2019 06:24:47 +0000 Subject: [PATCH 2/4] Fixed NPE in case of detached waveform --- .../e4/application/handlers/AddWaveformHandler.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/AddWaveformHandler.java b/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/AddWaveformHandler.java index 54c476e..4965478 100644 --- a/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/AddWaveformHandler.java +++ b/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/AddWaveformHandler.java @@ -40,13 +40,16 @@ public class AddWaveformHandler { @Named(IServiceConstants.ACTIVE_SELECTION) @Optional IStructuredSelection selection) { if(designBrowser==null) designBrowser = getListPart( partService); if(designBrowser==null || designBrowser.getActiveWaveformViewerPart()==null) return false; - Boolean before = "before".equalsIgnoreCase(where); //$NON-NLS-1$ + boolean before = "before".equalsIgnoreCase(where); //$NON-NLS-1$ + IStructuredSelection waveformSelection = null; + if(designBrowser.getActiveWaveformViewerPart()!=null) + waveformSelection = (IStructuredSelection)designBrowser.getActiveWaveformViewerPart().getSelection(); if("true".equalsIgnoreCase(all)) //$NON-NLS-1$ return designBrowser.getFilteredChildren().length>0 && - (!before || ((IStructuredSelection)designBrowser.getActiveWaveformViewerPart().getSelection()).size()>0); + (!before || (waveformSelection!=null && waveformSelection.size()>0)); else - return selection.size()>0 && - (!before || ((IStructuredSelection)designBrowser.getActiveWaveformViewerPart().getSelection()).size()>0); + return selection!=null && selection.size()>0 && + (!before || (waveformSelection!=null && waveformSelection.size()>0)); } @Execute From 4d4a6579c6a2772c80fc133bee60d5036c3cb1d4 Mon Sep 17 00:00:00 2001 From: Brita Keller Date: Sun, 9 Jun 2019 17:29:22 +0200 Subject: [PATCH 3/4] Fixed #13 - added transaction colors --- .../database/swt/internal/StreamPainter.java | 44 ++++++++--- .../database/swt/internal/WaveformViewer.java | 11 ++- .../scviewer/database/ui/TrackEntry.java | 79 ++++++++++++++++++- 3 files changed, 119 insertions(+), 15 deletions(-) diff --git a/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/StreamPainter.java b/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/StreamPainter.java index d9e748a..cad44fd 100644 --- a/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/StreamPainter.java +++ b/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/StreamPainter.java @@ -44,6 +44,20 @@ public class StreamPainter extends TrackPainter{ this.stream=trackEntry.getStream(); this.seenTx=new TreeSet(); } + + /* + * convert java.awt.Color to org.eclipse.swt.graphics.Color + */ + static org.eclipse.swt.graphics.Color toSwtColor( GC gc, java.awt.Color awtColor ){ + return new org.eclipse.swt.graphics.Color( gc.getDevice(), awtColor.getRed(), awtColor.getGreen(), awtColor.getBlue() ); + } + + static org.eclipse.swt.graphics.Color[] toSwtColors( GC gc, java.awt.Color[] awtColors ){ + org.eclipse.swt.graphics.Color[] swtColors = new org.eclipse.swt.graphics.Color[awtColors.length]; + for( int i=0; i firstTx=stream.getEvents().floorEntry(beginTime); @@ -75,38 +90,43 @@ public class StreamPainter extends TrackPainter{ for( int y1=area.y+trackHeight/2; y1)firstTx.getValue()) - drawTx(gc, area, txEvent.getTransaction()); - else{ + drawTx(gc, area, txEvent.getTransaction(), false); + }else{ seenTx.clear(); NavigableMap entries = stream.getEvents().subMap(firstTx.getKey(), true, lastTx.getKey(), true); boolean highlighed=false; gc.setForeground(this.waveCanvas.colors[WaveformColors.LINE.ordinal()]); - gc.setBackground(this.waveCanvas.colors[WaveformColors.TX_BG.ordinal()]); - for(Entry entry: entries.entrySet()) + + for(Entry entry: entries.entrySet()) for(ITxEvent txEvent:(Collection)entry.getValue()){ if(txEvent.getType()==ITxEvent.Type.BEGIN) seenTx.add(txEvent.getTransaction()); if(txEvent.getType()==ITxEvent.Type.END){ ITx tx = txEvent.getTransaction(); highlighed|=waveCanvas.currentSelection!=null && waveCanvas.currentSelection.equals(tx); - drawTx(gc, area, tx); + drawTx(gc, area, tx, false); seenTx.remove(tx); } } for(ITx tx:seenTx){ - drawTx(gc, area, tx); + drawTx(gc, area, tx, false); } if(highlighed){ gc.setForeground(this.waveCanvas.colors[WaveformColors.LINE_HIGHLITE.ordinal()]); - gc.setBackground(this.waveCanvas.colors[WaveformColors.TX_BG_HIGHLITE.ordinal()]); - drawTx(gc, area, waveCanvas.currentSelection); + drawTx(gc, area, waveCanvas.currentSelection, true); } } } - protected void drawTx(GC gc, Rectangle area, ITx tx) { + protected void drawTx(GC gc, Rectangle area, ITx tx, boolean highlighted ) { + // compute colors + java.awt.Color[] fallbackColors = trackEntry.getColors(); + java.awt.Color[] transColor = TrackEntry.computeColor( tx.getGenerator().getName(), fallbackColors[0], fallbackColors[1] ); + + gc.setBackground( toSwtColor( gc, transColor[highlighted?1:0] ) ); + int offset = tx.getConcurrencyIndex()*this.waveCanvas.getTrackHeight(); Rectangle bb = new Rectangle( (int)(tx.getBeginTime()/this.waveCanvas.getScaleFactor()-waveCanvas.getXOffset()), area.y+offset+txBase, diff --git a/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformViewer.java b/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformViewer.java index 2cbfe2b..04d9232 100644 --- a/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformViewer.java +++ b/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/swt/internal/WaveformViewer.java @@ -10,6 +10,7 @@ *******************************************************************************/ package com.minres.scviewer.database.swt.internal; +import java.awt.Color; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; @@ -485,13 +486,15 @@ public class WaveformViewer implements IWaveformViewer { resultsList[tx.getConcurrencyIndex()]= evt.getTransaction(); } } - firstTx=stream.getEvents().lowerEntry(firstTx.getKey()); + firstTx=stream.getEvents().lowerEntry(firstTx.getKey()); }while(firstTx!=null && !isArrayFull(resultsList)); entry.currentValue=""; boolean separator=false; + for(ITx o:resultsList){ if(separator) entry.currentValue+="|"; if(o!=null) entry.currentValue+=((ITx)o).getGenerator().getName(); + separator=true; } } @@ -502,7 +505,8 @@ public class WaveformViewer implements IWaveformViewer { valueListScrolled.setMinSize(width, trackVerticalHeight); valueListScrolled.redraw(); } - + + private boolean isArrayFull(Object[] array){ for(Object o:array){ if(o==null) return false; @@ -600,6 +604,9 @@ public class WaveformViewer implements IWaveformViewer { TrackEntry trackEntry = getEntryForStream(txSel.getStream()); if(trackEntry==null && addIfNeeded){ trackEntry=new TrackEntry(txSel.getStream()); + // compute fallback colors + Color fallbackColors[] = TrackEntry.computeColor(txSel.getStream().getName(), TrackEntry.fallbackColor, TrackEntry.highlightedFallbackColor); + trackEntry.setColor(fallbackColors[0], fallbackColors[1]); streams.add(trackEntry); } currentTxSelection = txSel; diff --git a/com.minres.scviewer.database.ui/src/com/minres/scviewer/database/ui/TrackEntry.java b/com.minres.scviewer.database.ui/src/com/minres/scviewer/database/ui/TrackEntry.java index b751aa1..c8637ec 100644 --- a/com.minres.scviewer.database.ui/src/com/minres/scviewer/database/ui/TrackEntry.java +++ b/com.minres.scviewer.database.ui/src/com/minres/scviewer/database/ui/TrackEntry.java @@ -10,13 +10,87 @@ *******************************************************************************/ package com.minres.scviewer.database.ui; + +import java.awt.Color; + import com.minres.scviewer.database.ISignal; import com.minres.scviewer.database.ITxEvent; import com.minres.scviewer.database.ITxStream; import com.minres.scviewer.database.IWaveform; - public class TrackEntry { + + // color info + public static Color fallbackColor = new Color(200,0,0); + public static Color highlightedFallbackColor = new Color(255,0,0); + private Color[]signalColors; + + // list of random colors + private static Color[][] randomColors = { + { new Color( 170, 66, 37 ), new Color ( 190, 66, 37 ) }, + { new Color( 96, 74, 110 ), new Color ( 96, 74, 130 ) }, + { new Color( 133, 105, 128 ), new Color ( 153, 105, 128 ) }, + { new Color( 0, 126, 135 ), new Color ( 0, 126, 155 ) }, + { new Color( 243, 146, 75 ), new Color ( 255, 146, 75 ) }, + { new Color( 206, 135, 163 ), new Color ( 226, 135, 163 ) }, + { new Color( 124, 103, 74 ), new Color ( 144, 103, 74 ) }, + { new Color( 194, 187, 169 ), new Color ( 214, 187, 169 ) }, + { new Color( 104, 73, 71 ), new Color ( 124, 73, 71 ) }, + { new Color( 75, 196, 213 ), new Color ( 75, 196, 233 ) }, + { new Color( 206, 232, 229 ), new Color ( 206, 252, 229 ) }, + { new Color( 169, 221, 199 ), new Color ( 169, 241, 199 ) }, + { new Color( 100, 165, 197 ), new Color ( 100, 165, 217 ) }, + { new Color( 150, 147, 178 ), new Color ( 150, 147, 198 ) }, + { new Color( 200, 222, 182 ), new Color ( 200, 242, 182 ) }, + { new Color( 147, 208, 197 ), new Color ( 147, 228, 197 ) } + }; + + public static Color[] computeColor (String streamValue, Color fallback, Color highlightedFallback) { + + Color[]result = new Color[2]; + + result[0] = fallback; + result[1] = highlightedFallback; + + // assign colors to standard values + if (streamValue.contains("read")){ + result[0] = new Color(86,174,53); + result[1] = new Color (86,194,53); + }else if (streamValue.contains("rdata")){ + result[0] = new Color(138,151,71); + result[1] = new Color (138,171,71); + }else if (streamValue.contains("addr")){ + result[0] = new Color(233,187,68); + result[1] = new Color (233,207,68); + }else if (streamValue.contains("write")){ + result[0] = new Color(1,128,191); + result[1] = new Color (1,128,211); + }else if (streamValue.contains("wdata")){ + result[0] = new Color(2,181,160); + result[1] = new Color (2,201,160); + + }else { + // assign "random" color here, one name always results in the same color! + if( randomColors.length > 0 ) { + int index = streamValue.hashCode() % randomColors.length; + result[0] = randomColors[index][0]; + result[1] = randomColors[index][1]; + } + } + + return result; + + } + + public void setColor(Color changedColor, Color highlightColor) { + signalColors[0] = changedColor; + signalColors[1] = highlightColor; + } + + public Color[] getColors() { + return signalColors; + } + public enum ValueDisplay { DEFAULT, SIGNED, UNSIGNED @@ -45,6 +119,9 @@ public class TrackEntry { vOffset=0; height=0; selected=false; + signalColors = new Color[2]; + signalColors[0] = fallbackColor; + signalColors[1] = highlightedFallbackColor; } public boolean isStream(){ From 15c24f0925159728dc39b9ac822e85425348f1f9 Mon Sep 17 00:00:00 2001 From: Brita Keller Date: Tue, 25 Jun 2019 22:15:13 +0200 Subject: [PATCH 4/4] Fixed #15 - no more ArrayOutOfBounds exception when deleting last stream --- .../e4/application/parts/WaveformViewer.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java b/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java index 56f947b..db74ba1 100644 --- a/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java +++ b/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java @@ -826,14 +826,26 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis List streams = waveformPane.getStreamList(); ISelection sel = waveformPane.getSelection(); TrackEntry newSelection=null; + if(sel instanceof IStructuredSelection && ((IStructuredSelection) sel).size()==2) { Iterator it = ((IStructuredSelection)sel).iterator(); it.next(); int idx = streams.indexOf(it.next()); - if(idx==streams.size()-1) - newSelection=streams.get(idx-1); - else + + if(idx==streams.size()-1) { + //last stream gets deleted, no more selection + if(idx==0) { + newSelection=null; + } + //more than 1 stream left, last gets deleted, selection jumps to new last stream + else { + newSelection=streams.get(idx-1); + } + } + //more than 1 stream left, any stream but the last gets deleted, selection jumps to the next stream + else { newSelection=streams.get(idx+1); + } } waveformPane.setSelection(new StructuredSelection()); streams.remove(trackEntry);