- added second marker

- added zoom levels 1->3->10->30->...
- added waveform identification icon
This commit is contained in:
2015-10-29 20:02:08 +01:00
parent 070c947ae6
commit 83fd7877f2
15 changed files with 239 additions and 141 deletions

View File

@ -35,8 +35,6 @@ import org.osgi.service.prefs.PreferencesService;
public class StatusBarControl {
public static final String STATUS_UPDATE="StatusUpdate";
public static final String ZOOM_LEVEL="ZoomLevelUpdate";
public static final String CURSOR_TIME="CursorPosUpdate";
@Inject EModelService modelService;

View File

@ -29,9 +29,10 @@ import org.eclipse.swt.widgets.Composite;
public class WaveStatusBarControl extends StatusBarControl {
public static final String STATUS_UPDATE="StatusUpdate";
public static final String ZOOM_LEVEL="ZoomLevelUpdate";
public static final String CURSOR_TIME="CursorPosUpdate";
public static final String MARKER_TIME="MarkerPosUpdate";
public static final String MARKER_DIFF="MarlerDiffUpdate";
@Inject
EModelService modelService;
@ -74,14 +75,18 @@ public class WaveStatusBarControl extends StatusBarControl {
}
TextContributionItem zoomContribution, cursorContribution;
TextContributionItem cursorContribution, markerContribution, markerDiffContribution, zoomContribution;
@Inject
public WaveStatusBarControl(UISynchronize sync) {
super(sync);
zoomContribution = new TextContributionItem("Z:", 150);
cursorContribution = new TextContributionItem("C:", 120);
manager.prependToGroup(StatusLineManager.BEGIN_GROUP,cursorContribution);
cursorContribution = new TextContributionItem("C:", 80);
markerContribution = new TextContributionItem("M:", 80);
markerDiffContribution = new TextContributionItem("C-M:", 80);
zoomContribution = new TextContributionItem("Z:", 80);
manager.appendToGroup(StatusLineManager.BEGIN_GROUP,cursorContribution);
manager.appendToGroup(StatusLineManager.BEGIN_GROUP,markerContribution);
manager.appendToGroup(StatusLineManager.BEGIN_GROUP,markerDiffContribution);
manager.appendToGroup(StatusLineManager.BEGIN_GROUP, zoomContribution);
}
@ -112,4 +117,14 @@ public class WaveStatusBarControl extends StatusBarControl {
cursorContribution.setText(text);
}
@Inject @Optional
public void getMarkerEvent(@UIEventTopic(MARKER_TIME) String text) {
markerContribution.setText(text);
}
@Inject @Optional
public void getDiffEvent(@UIEventTopic(MARKER_DIFF) String text) {
markerDiffContribution.setText(text);
}
}

View File

@ -41,17 +41,17 @@ public class DesignBrowser implements ISelectionChangedListener {
@Inject ESelectionService selectionService;
private TreeViewer contentOutlineViewer;
private TreeViewer treeViewer;
private PropertyChangeListener l = new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
if("CHILDS".equals(evt.getPropertyName())){
contentOutlineViewer.getTree().getDisplay().asyncExec(new Runnable() {
treeViewer.getTree().getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
contentOutlineViewer.refresh();
treeViewer.refresh();
}
});
}
@ -62,18 +62,19 @@ public class DesignBrowser implements ISelectionChangedListener {
@PostConstruct
public void createComposite(Composite parent) {
parent.setLayout(new GridLayout(1, false));
contentOutlineViewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
contentOutlineViewer.addSelectionChangedListener(this);
contentOutlineViewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
contentOutlineViewer.setContentProvider(new TxDbContentProvider());
contentOutlineViewer.setLabelProvider(new TxDbLabelProvider());
contentOutlineViewer.setUseHashlookup(true);
treeViewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
treeViewer.addSelectionChangedListener(this);
treeViewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
treeViewer.setContentProvider(new TxDbContentProvider());
treeViewer.setLabelProvider(new TxDbLabelProvider());
treeViewer.setUseHashlookup(true);
treeViewer.setAutoExpandLevel(2);
}
@Focus
public void setFocus() {
contentOutlineViewer.getTree().setFocus();
selectionService.setSelection(contentOutlineViewer.getSelection());
treeViewer.getTree().setFocus();
selectionService.setSelection(treeViewer.getSelection());
}
@Override
@ -85,10 +86,10 @@ public class DesignBrowser implements ISelectionChangedListener {
@Inject @Optional
public void getStatusEvent(@UIEventTopic(WaveformViewerPart.ACTIVE_WAVEFORMVIEW) WaveformViewerPart waveformViewerPart) {
IWaveformDb database = waveformViewerPart.getDatabase();
Object input = contentOutlineViewer.getInput();
Object input = treeViewer.getInput();
if(input!=null && input instanceof List<?>)
((List<IWaveformDb>)input).get(0).removePropertyChangeListener(l);
contentOutlineViewer.setInput(database.isLoaded()?Arrays.asList(new IWaveformDb[]{database}):null);
treeViewer.setInput(database.isLoaded()?Arrays.asList(new IWaveformDb[]{database}):null);
// Set up the tree viewer
database.addPropertyChangeListener(l);
}

View File

@ -378,7 +378,7 @@ public class TransactionDetails {
res.add(new Object[]{
rel.getRelationType(),
rel.getSource().getGenerator().getName(),
txToString(rel.getSource())});
rel.getSource()});
}
return res.toArray();
} else if(propertyHolder.type == Type.OUT_REL){
@ -387,7 +387,7 @@ public class TransactionDetails {
res.add(new Object[]{
rel.getRelationType(),
rel.getTarget().getGenerator().getName(),
txToString(rel.getTarget())});
rel.getTarget()});
}
return res.toArray();
}
@ -447,6 +447,8 @@ public class TransactionDetails {
}else if(element instanceof Object[]){
Object[] elements = (Object[]) element;
return new StyledString(elements[field].toString());
} else if(element instanceof ITx){
return new StyledString(txToString((ITx) element));
}else
return new StyledString("");
}

View File

@ -54,7 +54,7 @@ import com.minres.scviewer.database.IWaveformDbFactory;
import com.minres.scviewer.database.IWaveformEvent;
import com.minres.scviewer.database.swt.GotoDirection;
import com.minres.scviewer.database.swt.TxDisplay;
import com.minres.scviewer.e4.application.internal.StatusBarControl;
import com.minres.scviewer.e4.application.internal.WaveStatusBarControl;
public class WaveformViewerPart {
@ -64,12 +64,7 @@ public class WaveformViewerPart {
protected static final String DATABASE_FILE = "DATABASE_FILE";
protected static final String SHOWN_WAVEFORM = "SHOWN_WAVEFORM";
private final static String[] zoomLevel={
"1fs", "10fs", "100fs",
"1ps", "10ps", "100ps",
"1ns", "10ns", "100ns",
"1µs", "10µs", "10µs",
"1ms", "10ms", "100ms", "1s"};
private String[] zoomLevel;
public static final String ID = "com.minres.scviewer.ui.TxEditorPart"; //$NON-NLS-1$
@ -115,10 +110,21 @@ public class WaveformViewerPart {
@Override
public void propertyChange(PropertyChangeEvent evt) {
Long time = (Long) evt.getNewValue();
eventBroker.post(StatusBarControl.CURSOR_TIME, ""+ time/1000000+"ns");
eventBroker.post(WaveStatusBarControl.CURSOR_TIME, txDisplay.getScaledTime(time));
long marker=txDisplay.getActMarkerTime();
eventBroker.post(WaveStatusBarControl.MARKER_DIFF, txDisplay.getScaledTime(time-marker));
}
});
txDisplay.addPropertyChangeListener(TxDisplay.MARKER_PROPERTY, new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
Long time = (Long) evt.getNewValue();
eventBroker.post(WaveStatusBarControl.MARKER_TIME, txDisplay.getScaledTime(time));
long cursor=txDisplay.getCursorTime();
eventBroker.post(WaveStatusBarControl.MARKER_DIFF, txDisplay.getScaledTime(cursor-time));
}
});
txDisplay.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
@ -126,6 +132,7 @@ public class WaveformViewerPart {
selectionService.setSelection(event.getSelection());
}
});
zoomLevel=txDisplay.getZoomLevels();
filesToLoad=new ArrayList<File>();
persistedState = part.getPersistedState();
Integer files = persistedState.containsKey(DATABASE_FILE+"S")?Integer.parseInt(persistedState.get(DATABASE_FILE+"S")):0;
@ -134,7 +141,7 @@ public class WaveformViewerPart {
}
if(filesToLoad.size()>0)
loadDatabase();
eventBroker.post(StatusBarControl.ZOOM_LEVEL, zoomLevel[txDisplay.getZoomLevel()]);
eventBroker.post(WaveStatusBarControl.ZOOM_LEVEL, zoomLevel[txDisplay.getZoomLevel()]);
menuService.registerContextMenu(txDisplay.getNameControl(), "com.minres.scviewer.e4.application.popupmenu.namecontext");
menuService.registerContextMenu(txDisplay.getValueControl(), "com.minres.scviewer.e4.application.popupmenu.namecontext");
menuService.registerContextMenu(txDisplay.getWaveformControl(), "com.minres.scviewer.e4.application.popupmenu.wavecontext");
@ -248,8 +255,12 @@ public class WaveformViewerPart {
private void updateAll() {
eventBroker.post(ACTIVE_WAVEFORMVIEW, this);
eventBroker.post(StatusBarControl.ZOOM_LEVEL, zoomLevel[txDisplay.getZoomLevel()]);
eventBroker.post(StatusBarControl.CURSOR_TIME, Long.toString(txDisplay.getCursorTime()/1000000)+"ns");
eventBroker.post(WaveStatusBarControl.ZOOM_LEVEL, zoomLevel[txDisplay.getZoomLevel()]);
long cursor=txDisplay.getCursorTime();
long marker=txDisplay.getActMarkerTime();
eventBroker.post(WaveStatusBarControl.CURSOR_TIME, txDisplay.getScaledTime(cursor));
eventBroker.post(WaveStatusBarControl.MARKER_TIME, txDisplay.getScaledTime(marker));
eventBroker.post(WaveStatusBarControl.MARKER_DIFF, txDisplay.getScaledTime(cursor-marker));
}
@Inject @Optional
@ -356,13 +367,11 @@ public class WaveformViewerPart {
if(level<0) level=0;
if(level>zoomLevel.length-1) level=zoomLevel.length-1;
txDisplay.setZoomLevel(level);
eventBroker.post(StatusBarControl.ZOOM_LEVEL, zoomLevel[txDisplay.getZoomLevel()]);
}
updateAll(); }
public void setZoomFit() {
txDisplay.setZoomLevel(6);
eventBroker.post(StatusBarControl.ZOOM_LEVEL, zoomLevel[txDisplay.getZoomLevel()]);
}
updateAll(); }
public int getZoomLevel() {
return txDisplay.getZoomLevel();

View File

@ -20,6 +20,7 @@ import org.eclipse.wb.swt.ResourceManager;
import com.minres.scviewer.database.IHierNode;
import com.minres.scviewer.database.ISignal;
import com.minres.scviewer.database.ISignalChangeMulti;
import com.minres.scviewer.database.ITxStream;
import com.minres.scviewer.database.IWaveformDb;
@ -27,10 +28,7 @@ public class TxDbLabelProvider implements ILabelProvider {
private List<ILabelProviderListener> listeners = new ArrayList<ILabelProviderListener>();
private Image database;
private Image stream;
private Image signal;
private Image folder;
private Image database, stream, signal, folder, wave;
public TxDbLabelProvider() {
@ -39,6 +37,7 @@ public class TxDbLabelProvider implements ILabelProvider {
stream=ResourceManager.getPluginImage("com.minres.scviewer.e4.application", "icons/stream.png");
folder=ResourceManager.getPluginImage("com.minres.scviewer.e4.application", "icons/folder.png");
signal=ResourceManager.getPluginImage("com.minres.scviewer.e4.application", "icons/signal.png");
wave=ResourceManager.getPluginImage("com.minres.scviewer.e4.application", "icons/wave.png");
}
@Override
@ -52,6 +51,7 @@ public class TxDbLabelProvider implements ILabelProvider {
if(stream!=null) stream.dispose();
if(folder!=null) folder.dispose();
if(signal!=null) signal.dispose();
if(wave!=null) wave.dispose();
}
@Override
@ -71,7 +71,11 @@ public class TxDbLabelProvider implements ILabelProvider {
}else if(element instanceof ITxStream){
return stream;
}else if(element instanceof ISignal<?>){
return signal;
Object o = ((ISignal<?>)element).getEvents().firstEntry().getValue();
if(o instanceof ISignalChangeMulti)
return wave;
else
return signal;
}else if(element instanceof IHierNode){
return folder;
} else