Updated UI to reflect database changes esp. in VCD

This commit is contained in:
2018-11-06 08:26:39 +01:00
parent 47a285bf6d
commit f81e830e93
15 changed files with 87 additions and 112 deletions

View File

@ -40,6 +40,8 @@ public class Messages extends NLS {
public static String TransactionDetails_3;
public static String TransactionDetails_4;
public static String WaveformPreferencesPage_1;
public static String WaveformViewer_13;
public static String WaveformViewer_14;
public static String WaveformViewer_15;
public static String WaveformViewer_16;
public static String WaveformViewer_17;

View File

@ -44,9 +44,10 @@ public class WaveformPopupMenuContribution {
Object selected = ((IStructuredSelection)sel).getFirstElement();
if(selected instanceof ISignal<?>) {
Object x = ((ISignal<?>) selected).getEvents().firstEntry().getValue();
if((x instanceof Double) || (x instanceof BitVector)) {
if((x instanceof BitVector) && ((BitVector)x).getWidth()==1) {
return false;
} else
return true;
}
}
}
}

View File

@ -186,17 +186,15 @@ public class StatusBarControl {
*/
@Override
public void beginTask(final String name, final int totalWork) {
sync.syncExec(new Runnable() {
sync.asyncExec(new Runnable() {
@Override
public void run() {
if(runningTasks <= 0) { // --- no task is running at the moment ---
progressBar.setEnabled(false);
progressBar.setSelection(0);
progressBar.setMaximum(totalWork);
} else { // --- other tasks are running ---
progressBar.setMaximum(progressBar.getMaximum() + totalWork);
}
runningTasks++;
if(runningTasks == 1) { // --- no task is running at the moment ---
progressBar.setEnabled(true);
progressBar.setSelection(0);
}
progressBar.setMaximum(totalWork);
progressBar.setToolTipText(Messages.StatusBarControl_1 + runningTasks + Messages.StatusBarControl_2 + name);
}
});
@ -207,7 +205,7 @@ public class StatusBarControl {
*/
@Override
public void worked(final int work) {
sync.syncExec(new Runnable() {
sync.asyncExec(new Runnable() {
@Override
public void run() {
progressBar.setSelection(progressBar.getSelection() + work);
@ -215,63 +213,28 @@ public class StatusBarControl {
});
}
/* (non-Javadoc)
* @see org.eclipse.core.runtime.NullProgressMonitor#done()
/**
* Adds the job.
*
* @param job the job
* @return the i progress monitor
*/
@Override
public void done() {
sync.syncExec(new Runnable() {
@Override
public void run() {
progressBar.setSelection(0);
progressBar.setMaximum(1);
progressBar.setEnabled(false);
}
});
}
/**
* Adds the job.
*
* @param job the job
* @return the i progress monitor
*/
/*
@Override
public boolean isCanceled() {
sync.syncExec(new Runnable() {
@Override
public void run() {
cancelled=delegate.isCanceled();
}
});
return cancelled;
}
@Override
public void setCanceled(final boolean value) {
sync.syncExec(new Runnable() {
@Override
public void run() {
delegate.setCanceled(value);
}
});
}
*/
public IProgressMonitor addJob(Job job){
if(job != null){
job.addJobChangeListener(new JobChangeAdapter() {
@Override
public void done(IJobChangeEvent event) {
sync.syncExec(new Runnable() {
public void done(final IJobChangeEvent event) {
sync.asyncExec(new Runnable() {
@Override
public void run() {
runningTasks--;
if(event.getResult()==null) return;
if(runningTasks>0) runningTasks--;
if (runningTasks > 0){ // --- some tasks are still running ---
progressBar.setToolTipText(Messages.StatusBarControl_3 + runningTasks);
} else { // --- all tasks are done (a reset of selection could also be done) ---
progressBar.setToolTipText(Messages.StatusBarControl_4);
progressBar.setSelection(progressBar.getMaximum());
progressBar.setEnabled(false);
}
}
});

View File

@ -34,6 +34,8 @@ TransactionDetails_21=End time
TransactionDetails_3=Value
TransactionDetails_4=Relation
WaveformPreferencesPage_1=Color for
WaveformViewer_13=Database Load Status
WaveformViewer_14=Database Load Cancelled
WaveformViewer_15=Database Load Job
WaveformViewer_16=Loading
WaveformViewer_17=Database re-load

View File

@ -73,7 +73,7 @@ public class LoadingWaveformDb implements IWaveformDb {
}
@Override
public boolean load(File inp) throws Exception {
public boolean load(File inp) {
return false;
}

View File

@ -31,14 +31,19 @@ import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Named;
import org.eclipse.core.internal.jobs.JobManager;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.SubMonitor;
import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.IJobManager;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.core.runtime.jobs.JobChangeAdapter;
import org.eclipse.core.runtime.jobs.JobGroup;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
@ -48,6 +53,7 @@ import org.eclipse.e4.core.services.events.IEventBroker;
import org.eclipse.e4.ui.di.Focus;
import org.eclipse.e4.ui.di.PersistState;
import org.eclipse.e4.ui.di.UIEventTopic;
import org.eclipse.e4.ui.di.UISynchronize;
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
import org.eclipse.e4.ui.services.EMenuService;
import org.eclipse.e4.ui.workbench.modeling.EPartService;
@ -75,7 +81,6 @@ import com.minres.scviewer.database.ITxRelation;
import com.minres.scviewer.database.IWaveform;
import com.minres.scviewer.database.IWaveformDb;
import com.minres.scviewer.database.IWaveformDbFactory;
import com.minres.scviewer.database.IWaveformEvent;
import com.minres.scviewer.database.RelationType;
import com.minres.scviewer.database.swt.Constants;
import com.minres.scviewer.database.swt.WaveformViewerFactory;
@ -143,6 +148,9 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis
/** The waveform pane. */
private IWaveformViewer waveformPane;
/** get UISynchronize injected as field */
@Inject UISynchronize sync;
/** The event broker. */
@Inject
private IEventBroker eventBroker;
@ -284,7 +292,7 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis
@Override
public void handleEvent(Event e) {
if(e==null) { // dummy to take out logging
/*
String string = e.type == SWT.KeyDown ? "DOWN:" : "UP :";
string += " stateMask=0x" + Integer.toHexString (e.stateMask) + ","; // SWT.CTRL, SWT.ALT, SWT.SHIFT, SWT.COMMAND
string += " keyCode=0x" + Integer.toHexString (e.keyCode) + ",";
@ -293,7 +301,7 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis
string += " location="+e.keyLocation;
}
System.out.println (string);
}
*/
if((e.stateMask&SWT.MOD3)!=0) { // Alt key
} else if((e.stateMask&SWT.MOD1)!=0) { //Ctrl/Cmd
int zoomlevel = waveformPane.getZoomLevel();
@ -411,7 +419,23 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis
}
waveformPane.setColors(colorPref);
}
class DbLoadJob extends Job {
final File file;
public DbLoadJob(String name, final File file) {
super(name);
this.file=file;
}
@Override
protected IStatus run(IProgressMonitor monitor) {
monitor.setTaskName(Messages.WaveformViewer_16+file.getName());
boolean res = database.load(file);
monitor.done();
database.addPropertyChangeListener(waveformPane);
return res?Status.OK_STATUS:Status.CANCEL_STATUS;
}
}
/**
* Load database.
*
@ -419,50 +443,46 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis
*/
protected void loadDatabase(final Map<String, String> state) {
fileMonitor.removeFileChangeListener(this);
MultiStatus fStatus= new MultiStatus("blah", IStatus.OK, Messages.WaveformViewer_13, null);
Job job = new Job(Messages.WaveformViewer_15) {
@Override
protected IStatus run(IProgressMonitor monitor) {
// convert to SubMonitor and set total number of work units
SubMonitor subMonitor = SubMonitor.convert(monitor, filesToLoad.size()+1);
SubMonitor subMonitor = SubMonitor.convert(monitor, filesToLoad.size());
JobGroup jobGroup = new JobGroup(Messages.WaveformViewer_15, filesToLoad.size(), filesToLoad.size());
filesToLoad.forEach((final File file) -> {
Job job = new DbLoadJob(Messages.WaveformViewer_16 + file.getName(), file);
job.setProgressGroup(subMonitor, 1);
job.setJobGroup(jobGroup);
job.schedule();
});
try {
subMonitor.worked(1);
for (File file : filesToLoad) {
subMonitor.setTaskName(Messages.WaveformViewer_16+file.getName());
database.load(file);
database.addPropertyChangeListener(waveformPane);
subMonitor.worked(1);
if (monitor.isCanceled())
return Status.CANCEL_STATUS;
}
} catch (Exception e) {
database = null;
e.printStackTrace();
return Status.CANCEL_STATUS;
jobGroup.join(0, monitor);
} catch (OperationCanceledException | InterruptedException e) {
throw new OperationCanceledException(Messages.WaveformViewer_14);
}
subMonitor.done();
monitor.done();
return Status.OK_STATUS;
if (monitor.isCanceled())
throw new OperationCanceledException(Messages.WaveformViewer_14);
fStatus.addAll(jobGroup.getResult());
return fStatus;
}
};
job.addJobChangeListener(new JobChangeAdapter() {
@Override
public void done(IJobChangeEvent event) {
if (event.getResult() == Status.OK_STATUS)
myParent.getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
waveformPane.setMaxTime(database.getMaxTime());
if (state != null)
restoreWaveformViewerState(state);
fileChecker = null;
if (checkForUpdates)
fileChecker = fileMonitor.addFileChangeListener(WaveformViewer.this, filesToLoad,
FILE_CHECK_INTERVAL);
}
});
if (event.getResult().getCode() != Status.OK_STATUS.getCode()) return;
sync.asyncExec(()->{
waveformPane.setMaxTime(database.getMaxTime());
if (state != null)
restoreWaveformViewerState(state);
fileChecker = null;
if (checkForUpdates)
fileChecker = fileMonitor.addFileChangeListener(WaveformViewer.this, filesToLoad, FILE_CHECK_INTERVAL);
});
}
});
job.schedule(0);
job.setSystem(true);
job.schedule(1000L); // let the UI initialize so that we have a progress monitor
}
/* (non-Javadoc)