diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/IWaveformStyleProvider.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/IWaveformStyleProvider.java index 7fcb9c1..cbc3d1f 100644 --- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/IWaveformStyleProvider.java +++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/IWaveformStyleProvider.java @@ -12,4 +12,6 @@ public interface IWaveformStyleProvider { int getTrackHeight(); Color getColor(WaveformColors type); + + Color[] computeColor(String name); } diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/IWaveformView.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/IWaveformView.java index 80cc30c..9830894 100644 --- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/IWaveformView.java +++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/IWaveformView.java @@ -112,4 +112,6 @@ public interface IWaveformView extends PropertyChangeListener, ISelectionProvide public void addDisposeListener( DisposeListener listener ); public void deleteSelectedTracks(); + + public TrackEntry addWaveform(IWaveform waveform, int pos); } \ No newline at end of file diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/TrackEntry.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/TrackEntry.java index d459f0f..f1fc0ab 100644 --- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/TrackEntry.java +++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/TrackEntry.java @@ -11,63 +11,12 @@ package com.minres.scviewer.database.ui; -import java.awt.Color; - 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; + IWaveformStyleProvider styleProvider; - // 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 "random" color here, one name always results in the same color! - if( streamValue!=null && randomColors.length > 0 ) { - int index = Math.abs(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 @@ -92,14 +41,12 @@ public class TrackEntry { public WaveDisplay waveDisplay = WaveDisplay.DEFAULT; - public TrackEntry(IWaveform waveform) { + public TrackEntry(IWaveform waveform, IWaveformStyleProvider styleProvider) { this.waveform = waveform; + this.styleProvider=styleProvider; vOffset=0; height=0; selected=false; - signalColors = new Color[2]; - signalColors[0] = fallbackColor; - signalColors[1] = highlightedFallbackColor; } public IWaveform getWaveform(){ diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/DefaultWaveformStyleProvider.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/DefaultWaveformStyleProvider.java index d51c920..1ab88e6 100644 --- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/DefaultWaveformStyleProvider.java +++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/DefaultWaveformStyleProvider.java @@ -83,5 +83,10 @@ public class DefaultWaveformStyleProvider implements IWaveformStyleProvider { // TODO Auto-generated method stub return colors[type.ordinal()]; } + @Override + public Color[] computeColor(String name) { + return new Color[] {SWTResourceManager.getColor( 200,0,0), SWTResourceManager.getColor( 255,0,0)}; + + } } diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/SignalPainter.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/SignalPainter.java index a5322c4..6362196 100644 --- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/SignalPainter.java +++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/SignalPainter.java @@ -28,7 +28,6 @@ import com.minres.scviewer.database.DoubleVal; import com.minres.scviewer.database.IEvent; import com.minres.scviewer.database.IWaveform; import com.minres.scviewer.database.ui.TrackEntry; -import com.minres.scviewer.database.ui.TrackEntry.ValueDisplay; import com.minres.scviewer.database.ui.WaveformColors; public class SignalPainter extends TrackPainter { diff --git a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/StreamPainter.java b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/StreamPainter.java index 2a9dc48..ff62e35 100644 --- a/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/StreamPainter.java +++ b/plugins/com.minres.scviewer.database.ui.swt/src/com/minres/scviewer/database/ui/swt/internal/StreamPainter.java @@ -16,7 +16,7 @@ import java.util.NavigableMap; import java.util.TreeSet; import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.GC; +import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; @@ -46,20 +46,6 @@ public class StreamPainter extends TrackPainter{ 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 0 ) { + int index = Math.abs(streamValue.hashCode()) % randomColors.length; + result[0] = randomColors[index][0]; + result[1] = randomColors[index][1]; + } + return result; + } + } 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 73406b3..c39e95b 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 @@ -504,7 +504,7 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis return false; } }); - setupColors(); + waveformPane.setStyleProvider(new WaveformStyleProvider(store)); } @Inject @@ -537,17 +537,9 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis @Override public void preferenceChange(PreferenceChangeEvent event) { if (!PreferenceConstants.DATABASE_RELOAD.equals(event.getKey()) && !PreferenceConstants.SHOW_HOVER.equals(event.getKey())){ - setupColors(); - } + waveformPane.setStyleProvider(new WaveformStyleProvider(store)); } } - /** - * Setup colors. - */ - protected void setupColors() { - waveformPane.setStyleProvider(new WaveformStyleProvider(store)); - } - class DbLoadJob extends Job { final File file; public DbLoadJob(String name, final File file) { @@ -809,7 +801,7 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis for (int i = 0; i < waves; i++) { IWaveform waveform = database.getStreamByName(state.get(SHOWN_WAVEFORM + i)); if (waveform != null) { - TrackEntry t = new TrackEntry(waveform); + TrackEntry t = waveformPane.addWaveform(waveform, -1); //check if t is selected boolean isSelected = Boolean.valueOf(state.get(SHOWN_WAVEFORM + i + WAVEFORM_SELECTED)); if(isSelected) { @@ -826,8 +818,6 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis t.waveDisplay=WaveDisplay.valueOf(s); } } - if (res.size() > 0) - waveformPane.getStreamList().addAll(res); Integer cursorLength = state.containsKey(SHOWN_CURSOR+"S")?Integer.parseInt(state.get(SHOWN_CURSOR + "S")):0; //$NON-NLS-1$ //$NON-NLS-2$ List cursors = waveformPane.getCursorList(); if (cursorLength == cursors.size()) { @@ -997,12 +987,10 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis * @param insert the insert */ public void addStreamsToList(IWaveform[] iWaveforms, boolean insert) { - List streams = new LinkedList<>(); - for (IWaveform stream : iWaveforms) - streams.add(new TrackEntry(stream)); IStructuredSelection selection = (IStructuredSelection) waveformPane.getSelection(); if (selection.size() == 0) { - waveformPane.getStreamList().addAll(streams); + for (IWaveform waveform : iWaveforms) + waveformPane.addWaveform(waveform, -1); } else { Object first = selection.getFirstElement(); if(first instanceof ITx) { @@ -1010,17 +998,21 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis TrackEntry trackEntry = waveformPane.getEntryForStream(stream); if (insert) { int index = waveformPane.getStreamList().indexOf(trackEntry); - waveformPane.getStreamList().addAll(index, streams); + for (IWaveform waveform : iWaveforms) + waveformPane.addWaveform(waveform, index++); } else { - waveformPane.getStreamList().addAll(streams); + for (IWaveform waveform : iWaveforms) + waveformPane.addWaveform(waveform, -1); } } else if(first instanceof TrackEntry) { TrackEntry trackEntry = (TrackEntry) first; if (insert) { int index = waveformPane.getStreamList().indexOf(trackEntry); - waveformPane.getStreamList().addAll(index, streams); + for (IWaveform waveform : iWaveforms) + waveformPane.addWaveform(waveform, index++); } else { - waveformPane.getStreamList().addAll(streams); + for (IWaveform waveform : iWaveforms) + waveformPane.addWaveform(waveform, -1); } } diff --git a/plugins/com.minres.scviewer.ui/src/com/minres/scviewer/ui/TxEditorPart.java b/plugins/com.minres.scviewer.ui/src/com/minres/scviewer/ui/TxEditorPart.java index a7dbfb8..fbcca4f 100644 --- a/plugins/com.minres.scviewer.ui/src/com/minres/scviewer/ui/TxEditorPart.java +++ b/plugins/com.minres.scviewer.ui/src/com/minres/scviewer/ui/TxEditorPart.java @@ -16,7 +16,6 @@ import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; -import java.util.LinkedList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -78,7 +77,7 @@ public class TxEditorPart extends EditorPart implements ITabbedPropertySheetPage public static final String WAVE_ACTION_ID = "com.minres.scviewer.ui.action.AddToWave"; - private IWaveformView txDisplay; + private IWaveformView waveformView; /** This is the root of the editor's model. */ private IWaveformDb database; @@ -106,23 +105,23 @@ public class TxEditorPart extends EditorPart implements ITabbedPropertySheetPage myParent.getDisplay().syncExec(new Runnable() { @Override public void run() { - txDisplay.setMaxTime(database.getMaxTime()); + waveformView.setMaxTime(database.getMaxTime()); } }); } } }); WaveformViewFactory factory = new WaveformViewFactory(); - txDisplay = factory.createPanel(parent); - txDisplay.setMaxTime(0); - txDisplay.addPropertyChangeListener(IWaveformView.CURSOR_PROPERTY, new PropertyChangeListener() { + waveformView = factory.createPanel(parent); + waveformView.setMaxTime(0); + waveformView.addPropertyChangeListener(IWaveformView.CURSOR_PROPERTY, new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { Long time = (Long) evt.getNewValue(); cursorStatusLineItem.setText("Cursor: "+ time/1000000+"ns"); } }); - getSite().setSelectionProvider(txDisplay); + getSite().setSelectionProvider(waveformView); new Thread(new Runnable() { @Override public void run() { @@ -133,8 +132,8 @@ public class TxEditorPart extends EditorPart implements ITabbedPropertySheetPage } } }).run(); - zoomStatusLineItem.setText("Zoom level: "+zoomLevel[txDisplay.getZoomLevel()]); - cursorStatusLineItem.setText("Cursor: "+ txDisplay.getCursorTime()/1000000+"ns"); + zoomStatusLineItem.setText("Zoom level: "+zoomLevel[waveformView.getZoomLevel()]); + cursorStatusLineItem.setText("Cursor: "+ waveformView.getCursorTime()/1000000+"ns"); MenuManager menuMgr = new MenuManager("#PopupMenu"); // menuMgr.setRemoveAllWhenShown(true); // menuMgr.addMenuListener(new IMenuListener() { @@ -142,9 +141,9 @@ public class TxEditorPart extends EditorPart implements ITabbedPropertySheetPage // fillContextMenu(manager); // } // }); - Menu menu = menuMgr.createContextMenu(txDisplay.getControl()); - txDisplay.getControl().setMenu(menu); - getSite().registerContextMenu(menuMgr, txDisplay); + Menu menu = menuMgr.createContextMenu(waveformView.getControl()); + waveformView.getControl().setMenu(menu); + getSite().registerContextMenu(menuMgr, waveformView); } @@ -204,7 +203,7 @@ public class TxEditorPart extends EditorPart implements ITabbedPropertySheetPage pm.beginTask("Loading database "+files[0].getName(), files.length); try { database.load(files[0]); - database.addPropertyChangeListener(txDisplay); + database.addPropertyChangeListener(waveformView); pm.worked(1); if(pm.isCanceled()) return; if(files.length==2){ @@ -236,16 +235,14 @@ public class TxEditorPart extends EditorPart implements ITabbedPropertySheetPage } protected void updateTxDisplay() { - txDisplay.setMaxTime(database.getMaxTime()); + waveformView.setMaxTime(database.getMaxTime()); if(TxEditorPart.this.getEditorInput() instanceof TxEditorInput && ((TxEditorInput) TxEditorPart.this.getEditorInput()).getStreamNames().size()>0){ - LinkedList entries= new LinkedList<>(); for(String streamName:((TxEditorInput) TxEditorPart.this.getEditorInput()).getStreamNames()){ - IWaveform stream = database.getStreamByName(streamName); - if(stream!=null) - entries.add(new TrackEntry(stream)); + IWaveform waveform = database.getStreamByName(streamName); + if(waveform!=null) + waveformView.addWaveform(waveform, -1); } - txDisplay.getStreamList().addAll(entries); } } @@ -335,9 +332,9 @@ public class TxEditorPart extends EditorPart implements ITabbedPropertySheetPage public void addStreamToList(IWaveform obj){ if(getEditorInput() instanceof TxEditorInput && !((TxEditorInput) getEditorInput()).getStreamNames().contains(obj.getFullName())){ ((TxEditorInput) getEditorInput()).getStreamNames().add(obj.getFullName()); - txDisplay.getStreamList().add(new TrackEntry(obj)); + waveformView.addWaveform(obj, -1); } else - txDisplay.getStreamList().add(new TrackEntry(obj)); + waveformView.addWaveform(obj, -1); } @@ -351,13 +348,13 @@ public class TxEditorPart extends EditorPart implements ITabbedPropertySheetPage ((TxEditorInput) getEditorInput()).getStreamNames().remove(waveform.getFullName()); } TrackEntry entry=null; - for(TrackEntry e:txDisplay.getStreamList()) { + for(TrackEntry e:waveformView.getStreamList()) { if(e.waveform==waveform) { entry=e; break; } } - txDisplay.getStreamList().remove(entry); + waveformView.getStreamList().remove(entry); } public void removeStreamsFromList(IWaveform[] iWaveforms){ @@ -366,20 +363,20 @@ public class TxEditorPart extends EditorPart implements ITabbedPropertySheetPage } public List getStreamList(){ - return txDisplay.getStreamList(); + return waveformView.getStreamList(); } public void setSelection(final ISelection selection){ myParent.getDisplay().asyncExec(new Runnable() { @Override public void run() { - txDisplay.setSelection(selection); + waveformView.setSelection(selection); } }); } public ISelection getSelection(){ - return txDisplay.getSelection(); + return waveformView.getSelection(); } @Override @@ -388,19 +385,19 @@ public class TxEditorPart extends EditorPart implements ITabbedPropertySheetPage } public void moveSelection(GotoDirection next) { - txDisplay.moveSelection( next); + waveformView.moveSelection( next); } public void setZoomLevel(Integer level) { - txDisplay.setZoomLevel(level); + waveformView.setZoomLevel(level); } public void setZoomFit() { - txDisplay.setZoomLevel(6); + waveformView.setZoomLevel(6); } public int getZoomLevel() { - return txDisplay.getZoomLevel(); + return waveformView.getZoomLevel(); } public void removeSelected() {