Updated UI to reflect database changes esp. in VCD
This commit is contained in:
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -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
|
||||
|
@ -73,7 +73,7 @@ public class LoadingWaveformDb implements IWaveformDb {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean load(File inp) throws Exception {
|
||||
public boolean load(File inp) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
Reference in New Issue
Block a user