- fixed tests

- added missing functions
- added launch configs
This commit is contained in:
2015-10-24 23:15:07 +02:00
parent c8e98b3d60
commit 31af3b4c94
21 changed files with 366 additions and 166 deletions

View File

@ -98,15 +98,13 @@
</children>
</trimBars>
<trimBars xmi:id="_JHMt8HS8EeWBq8z1Dv39LA" elementId="org.eclipse.ui.trim.status" side="Bottom">
<persistedState key="height" value="50"/>
<children xsi:type="menu:ToolControl" xmi:id="_YsBi8HfLEeWwZ-9vrAR2UQ" elementId="org.eclipse.ui.StatusLine" contributionURI="bundleclass://com.minres.scviewer.e4.application/com.minres.scviewer.e4.application.internal.WaveStatusBarControl"/>
<children xsi:type="menu:ToolControl" xmi:id="_76uUAF9tEeO-yojH_y4TJA" elementId="Spacer Glue" contributionURI="bundleclass://org.eclipse.e4.ui.workbench.renderers.swt/org.eclipse.e4.ui.workbench.renderers.swt.LayoutModifierToolControl">
<tags>glue</tags>
<tags>move_after:PerspectiveSpacer</tags>
<tags>SHOW_RESTORE_MENU</tags>
<children xsi:type="menu:ToolControl" xmi:id="_YsBi8HfLEeWwZ-9vrAR2UQ" elementId="org.eclipse.ui.StatusLine" contributionURI="bundleclass://com.minres.scviewer.e4.application/com.minres.scviewer.e4.application.internal.WaveStatusBarControl">
<tags>stretch</tags>
</children>
<children xsi:type="menu:ToolControl" xmi:id="_VZzJMHdHEeWwZ-9vrAR2UQ" elementId="org.eclipse.ui.HeapStatus" contributionURI="bundleclass://com.minres.scviewer.e4.application/com.minres.scviewer.e4.application.internal.StatusBarControl"/>
<children xsi:type="menu:ToolControl" xmi:id="_y0ZS0HfzEeWwZ-9vrAR2UQ" elementId="org.eclipse.ui.ProgressBar" contributionURI="bundleclass://com.minres.scviewer.e4.application/com.minres.scviewer.e4.application.internal.StatusBarControl"/>
<children xsi:type="menu:ToolControl" xmi:id="_y0ZS0HfzEeWwZ-9vrAR2UQ" elementId="org.eclipse.ui.ProgressBar" contributionURI="bundleclass://com.minres.scviewer.e4.application/com.minres.scviewer.e4.application.internal.StatusBarControl">
<tags>Draggable</tags>
</children>
</trimBars>
</children>
<handlers xmi:id="_95PfvXNmEeWBq8z1Dv39LA" elementId="com.minres.scviewer.e4.application.handler.quitCommand" contributionURI="bundleclass://com.minres.scviewer.e4.application/com.minres.scviewer.e4.application.handlers.QuitHandler" command="_95PfvHNmEeWBq8z1Dv39LA"/>

View File

@ -23,7 +23,8 @@ Require-Bundle: javax.inject;bundle-version="1.0.0",
org.eclipse.osgi.services;bundle-version="3.5.0",
org.eclipse.core.jobs,
org.eclipse.osgi,
com.google.guava
com.google.guava,
org.eclipse.equinox.preferences
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: com.minres.scviewer.database,
javax.inject;version="1.0.0"

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -33,6 +33,7 @@ import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.wb.swt.ResourceManager;
import org.osgi.service.prefs.Preferences;
/**
* The Heap Status control, which shows the heap usage statistics in the window trim.
@ -46,7 +47,7 @@ public class HeapStatus extends Composite {
private Image disabledGcImage;
private Color bgCol, usedMemCol, lowMemCol, freeMemCol, topLeftCol, bottomRightCol, sepCol, textCol, markCol, armCol;
private Canvas button;
private IEclipsePreferences prefStore;
private Preferences preferences;
private int updateInterval;
private boolean showMax;
private long totalMem;
@ -86,10 +87,10 @@ public class HeapStatus extends Composite {
@Override
public void preferenceChange(PreferenceChangeEvent event) {
if (IHeapStatusConstants.PREF_UPDATE_INTERVAL.equals(event.getKey())) {
setUpdateIntervalInMS(prefStore.getInt(IHeapStatusConstants.PREF_UPDATE_INTERVAL, 100));
setUpdateIntervalInMS(preferences.getInt(IHeapStatusConstants.PREF_UPDATE_INTERVAL, 100));
}
else if (IHeapStatusConstants.PREF_SHOW_MAX.equals(event.getKey())) {
showMax = prefStore.getBoolean(IHeapStatusConstants.PREF_SHOW_MAX, true);
showMax = preferences.getBoolean(IHeapStatusConstants.PREF_SHOW_MAX, true);
}
}
@ -103,14 +104,15 @@ public class HeapStatus extends Composite {
* @param parent the parent composite
* @param preferences the preference store
*/
public HeapStatus(Composite parent, IEclipsePreferences preferences) {
public HeapStatus(Composite parent, Preferences preferences) {
super(parent, SWT.NONE);
maxMem = getMaxMem();
maxMemKnown = maxMem != Long.MAX_VALUE;
this.prefStore = preferences;
preferences.addPreferenceChangeListener(prefListener);
this.preferences = preferences;
if(this.preferences instanceof IEclipsePreferences)
((IEclipsePreferences)this.preferences).addPreferenceChangeListener(prefListener);
setUpdateIntervalInMS(preferences.getInt(IHeapStatusConstants.PREF_UPDATE_INTERVAL, 100));
showMax = preferences.getBoolean(IHeapStatusConstants.PREF_SHOW_MAX, true);
@ -263,7 +265,8 @@ public class HeapStatus extends Composite {
}
private void doDispose() {
prefStore.removePreferenceChangeListener(prefListener);
if(preferences instanceof IEclipsePreferences)
((IEclipsePreferences)preferences).removePreferenceChangeListener(prefListener);
if (gcImage != null) {
gcImage.dispose();
}
@ -591,7 +594,7 @@ public class HeapStatus extends Composite {
@Override
public void run() {
prefStore.putBoolean(IHeapStatusConstants.PREF_SHOW_MAX, isChecked());
preferences.putBoolean(IHeapStatusConstants.PREF_SHOW_MAX, isChecked());
redraw();
}
}

View File

@ -14,20 +14,23 @@ import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.inject.Inject;
import org.eclipse.core.internal.preferences.BundleDefaultPreferences;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.core.runtime.jobs.JobChangeAdapter;
import org.eclipse.core.runtime.jobs.ProgressProvider;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.e4.core.di.annotations.Optional;
import org.eclipse.e4.ui.di.UIEventTopic;
import org.eclipse.e4.ui.di.UISynchronize;
import org.eclipse.e4.ui.model.application.ui.menu.MToolControl;
import org.eclipse.e4.ui.workbench.modeling.EModelService;
import org.eclipse.jface.action.StatusLineManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.ProgressBar;
import org.osgi.service.prefs.PreferencesService;
public class StatusBarControl {
@ -36,12 +39,15 @@ public class StatusBarControl {
public static final String CURSOR_TIME="CursorPosUpdate";
@Inject EModelService modelService;
@Inject @Optional IEclipsePreferences preferences;
@Inject @Optional PreferencesService osgiPreverences;
private final UISynchronize sync;
protected StatusLineManager manager;
private SyncedProgressMonitor monitor;
private ProgressBar progressBar;
@Inject
public StatusBarControl(UISynchronize sync) {
@ -74,8 +80,11 @@ public class StatusBarControl {
* @param toolControl
*/
private void createProgressBar(Composite parent, MToolControl toolControl) {
manager.createControl(parent);
monitor=new SyncedProgressMonitor(manager.getProgressMonitor());
new Label(parent, SWT.NONE);
progressBar = new ProgressBar(parent, SWT.SMOOTH);
progressBar.setBounds(100, 10, 200, 20);
new Label(parent, SWT.NONE);
monitor=new SyncedProgressMonitor(progressBar);
Job.getJobManager().setProgressProvider(new ProgressProvider() {
@Override
public IProgressMonitor createMonitor(Job job) {
@ -89,12 +98,7 @@ public class StatusBarControl {
* @param toolControl
*/
private void createHeapStatus(Composite parent, MToolControl toolControl) {
if(preferences==null){
preferences=new BundleDefaultPreferences();
preferences.putInt(IHeapStatusConstants.PREF_UPDATE_INTERVAL, 100);
preferences.putBoolean(IHeapStatusConstants.PREF_SHOW_MAX, true);
}
new HeapStatus(parent, preferences);
new HeapStatus(parent, osgiPreverences.getSystemPreferences());
}
/**
@ -113,26 +117,19 @@ public class StatusBarControl {
}
}
private final class SyncedProgressMonitor implements IProgressMonitor {
private final class SyncedProgressMonitor extends NullProgressMonitor {
IProgressMonitor delegate;
private boolean cancelled;
// thread-Safe via thread confinement of the UI-Thread
// (means access only via UI-Thread)
private long runningTasks = 0L;
private ProgressBar progressBar;
SyncedProgressMonitor(IProgressMonitor delegate){
this.delegate=delegate;
}
public IProgressMonitor addJob(Job job){
if(job != null){
job.addJobChangeListener(new JobChangeAdapter() {
@Override
public void done(IJobChangeEvent event) {
// clean-up
event.getJob().removeJobChangeListener(this);
}
});
}
return this;
public SyncedProgressMonitor(ProgressBar progressBar) {
super();
this.progressBar = progressBar;
runningTasks=0;
progressBar.setSelection(0);
progressBar.setEnabled(false);
}
@Override
@ -140,7 +137,15 @@ public class StatusBarControl {
sync.syncExec(new Runnable() {
@Override
public void run() {
delegate.beginTask(name, totalWork);
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++;
progressBar.setToolTipText("Currently running: " + runningTasks + "\nLast task: " + name);
}
});
}
@ -150,7 +155,7 @@ public class StatusBarControl {
sync.syncExec(new Runnable() {
@Override
public void run() {
delegate.worked(work);
progressBar.setSelection(progressBar.getSelection() + work);
}
});
}
@ -160,21 +165,13 @@ public class StatusBarControl {
sync.syncExec(new Runnable() {
@Override
public void run() {
delegate.done();
progressBar.setSelection(0);
progressBar.setMaximum(1);
progressBar.setEnabled(false);
}
});
}
@Override
public void internalWorked(final double work) {
sync.syncExec(new Runnable() {
@Override
public void run() {
delegate.internalWorked(work);
}
});
}
/*
@Override
public boolean isCanceled() {
sync.syncExec(new Runnable() {
@ -195,25 +192,30 @@ public class StatusBarControl {
}
});
}
*/
public IProgressMonitor addJob(Job job){
if(job != null){
job.addJobChangeListener(new JobChangeAdapter() {
@Override
public void done(IJobChangeEvent event) {
sync.syncExec(new Runnable() {
@Override
public void setTaskName(final String name) {
sync.syncExec(new Runnable() {
@Override
public void run() {
delegate.setTaskName(name);
}
});
}
@Override
public void subTask(final String name) {
sync.syncExec(new Runnable() {
@Override
public void run() {
delegate.subTask(name);
}
});
@Override
public void run() {
runningTasks--;
if (runningTasks > 0){ // --- some tasks are still running ---
progressBar.setToolTipText("Currently running: " + runningTasks);
} else { // --- all tasks are done (a reset of selection could also be done) ---
progressBar.setToolTipText("No background progress running.");
}
}
});
// clean-up
event.getJob().removeJobChangeListener(this);
}
});
}
return this;
}
}
}

View File

@ -82,8 +82,8 @@ public class WaveStatusBarControl extends StatusBarControl {
super(sync);
zoomContribution = new TextContributionItem("Z:", 150);
cursorContribution = new TextContributionItem("C:", 120);
manager.appendToGroup(StatusLineManager.BEGIN_GROUP,cursorContribution);
manager.appendToGroup(StatusLineManager.MIDDLE_GROUP, zoomContribution);
manager.prependToGroup(StatusLineManager.BEGIN_GROUP,cursorContribution);
manager.appendToGroup(StatusLineManager.BEGIN_GROUP, zoomContribution);
}
@Inject

View File

@ -10,6 +10,8 @@
*******************************************************************************/
package com.minres.scviewer.e4.application.parts;
import java.util.Arrays;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Named;
@ -18,10 +20,13 @@ import org.eclipse.e4.core.di.annotations.Optional;
import org.eclipse.e4.core.services.events.IEventBroker;
import org.eclipse.e4.ui.di.Focus;
import org.eclipse.e4.ui.di.UIEventTopic;
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
import org.eclipse.e4.ui.services.IServiceConstants;
import org.eclipse.e4.ui.workbench.modeling.EPartService;
import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
@ -53,9 +58,10 @@ public class WaveformListPart implements ISelectionChangedListener {
private Text nameFilter;
private TableViewer txTableViewer;
ToolItem appendItem, insertItem;
ToolItem appendItem, insertItem, insertAllItem, appendAllItem;
WaveformAttributeFilter attributeFilter;
int thisSelectionCount=0, otherSelectionCount=0;
@PostConstruct
public void createComposite(Composite parent) {
parent.setLayout(new GridLayout(1, false));
@ -66,11 +72,12 @@ public class WaveformListPart implements ISelectionChangedListener {
@Override
public void modifyText(ModifyEvent e) {
attributeFilter.setSearchText(((Text) e.widget).getText());
updateButtons();
txTableViewer.refresh();
}
});
nameFilter.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
attributeFilter = new WaveformAttributeFilter();
txTableViewer = new TableViewer(parent);
@ -79,14 +86,27 @@ public class WaveformListPart implements ISelectionChangedListener {
txTableViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
txTableViewer.addSelectionChangedListener(this);
txTableViewer.addFilter(attributeFilter);
ToolBar toolBar = new ToolBar(parent, SWT.FLAT | SWT.RIGHT);
toolBar.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
toolBar.setBounds(0, 0, 87, 20);
appendItem = new ToolItem(toolBar, SWT.NONE);
appendItem.setToolTipText("Append selected");
appendItem.setImage(ResourceManager.getPluginImage("com.minres.scviewer.e4.application", "icons/append_wave.png"));
appendItem.setEnabled(false);
appendItem.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
eventBroker.post(WaveformViewerPart.ADD_WAVEFORM,
((IStructuredSelection)txTableViewer.getSelection()).toList());
}
});
insertItem = new ToolItem(toolBar, SWT.NONE);
insertItem.setImage(ResourceManager.getPluginImage("com.minres.scviewer.e4.application", "icons/bullet_plus.png"));
insertItem.setText("Insert");
insertItem.setToolTipText("Insert selected");
insertItem.setImage(ResourceManager.getPluginImage("com.minres.scviewer.e4.application", "icons/insert_wave.png"));
insertItem.setEnabled(false);
insertItem.addSelectionListener(new SelectionAdapter() {
@Override
@ -96,15 +116,33 @@ public class WaveformListPart implements ISelectionChangedListener {
}
});
appendItem = new ToolItem(toolBar, SWT.NONE);
appendItem.setImage(ResourceManager.getPluginImage("com.minres.scviewer.e4.application", "icons/bullet_plus.png"));
appendItem.setText("Append");
appendItem.setEnabled(false);
appendItem.addSelectionListener(new SelectionAdapter() {
new ToolItem(toolBar, SWT.SEPARATOR);
appendAllItem = new ToolItem(toolBar, SWT.NONE);
appendAllItem.setToolTipText("Append all");
appendAllItem.setImage(ResourceManager.getPluginImage("com.minres.scviewer.e4.application", "icons/append_all_waves.png"));
appendAllItem.setEnabled(false);
new ToolItem(toolBar, SWT.SEPARATOR);
appendAllItem.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
eventBroker.post(WaveformViewerPart.ADD_WAVEFORM,
((IStructuredSelection)txTableViewer.getSelection()).toList());
Object[] all = getFilteredChildren(txTableViewer);
if(all.length>0)
eventBroker.post(WaveformViewerPart.ADD_WAVEFORM, Arrays.asList(all));
}
});
insertAllItem = new ToolItem(toolBar, SWT.NONE);
insertAllItem.setToolTipText("Insert all");
insertAllItem.setImage(ResourceManager.getPluginImage("com.minres.scviewer.e4.application", "icons/insert_all_waves.png"));
insertAllItem.setEnabled(false);
insertAllItem.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
Object[] all = getFilteredChildren(txTableViewer);
if(all.length>0)
eventBroker.post(WaveformViewerPart.ADD_WAVEFORM, Arrays.asList(all));
}
});
@ -119,6 +157,7 @@ public class WaveformListPart implements ISelectionChangedListener {
@Inject @Optional
public void getStatusEvent(@UIEventTopic(WaveformViewerPart.ACTIVE_NODE) Object o) {
txTableViewer.setInput(o);
updateButtons();
}
@Override
@ -131,50 +170,79 @@ public class WaveformListPart implements ISelectionChangedListener {
switch(selection.size()){
case 0:
appendItem.setEnabled(false);
insertItem.setEnabled(false);
break;
case 1:
selectionService.setSelection(selection.getFirstElement());
appendItem.setEnabled(true);
break;
default:
selectionService.setSelection(selection.toList());
appendItem.setEnabled(true);
break;
}
thisSelectionCount=selection.toList().size();
updateButtons();
}
@Inject
public void setSelection(@Named(IServiceConstants.ACTIVE_SELECTION) @Optional Object object){
if(txTableViewer!=null && !insertItem.isDisposed() && !appendItem.isDisposed())
if(object instanceof ITx && appendItem.isEnabled()){
insertItem.setEnabled(true);
} else if(object instanceof IWaveform<?> && appendItem.isEnabled()){
insertItem.setEnabled(true);
} else {
insertItem.setEnabled(false);
}
public void setSelection(@Named(IServiceConstants.ACTIVE_SELECTION) @Optional Object object, EPartService partService){
MPart part = partService.getActivePart();
if(part!=null && part.getObject() != this)
otherSelectionCount = (object instanceof IWaveform<?> || object instanceof ITx)?1:0;
updateButtons();
}
private void updateButtons() {
if(txTableViewer!=null && !insertItem.isDisposed() && !appendItem.isDisposed() &&
!appendAllItem.isDisposed() && !insertAllItem.isDisposed()){
Object[] all = getFilteredChildren(txTableViewer);
appendItem.setEnabled(thisSelectionCount>0);
appendAllItem.setEnabled(all.length>0);
insertItem.setEnabled(thisSelectionCount>0 && otherSelectionCount>0);
insertAllItem.setEnabled(all.length>0 && otherSelectionCount>0);
}
}
public class WaveformAttributeFilter extends ViewerFilter {
private String searchString;
private String searchString;
public void setSearchText(String s) {
this.searchString = ".*" + s + ".*";
}
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
if (searchString == null || searchString.length() == 0) {
return true;
}
IWaveform<?> p = (IWaveform<?>) element;
if (p.getName().matches(searchString)) {
return true;
}
return false;
}
public void setSearchText(String s) {
this.searchString = ".*" + s + ".*";
}
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
if (searchString == null || searchString.length() == 0) {
return true;
}
IWaveform<?> p = (IWaveform<?>) element;
if (p.getName().matches(searchString)) {
return true;
}
return false;
}
}
protected Object[] getFilteredChildren(TableViewer viewer){
Object parent = viewer.getInput();
if(parent==null) return new Object[0];
Object[] result = null;
if (parent != null) {
IStructuredContentProvider cp = (IStructuredContentProvider) viewer.getContentProvider();
if (cp != null) {
result = cp.getElements(parent);
if(result==null) return new Object[0];
for (int i = 0, n = result.length; i < n; ++i) {
if(result[i]==null) return new Object[0];
}
}
}
ViewerFilter[] filters = viewer.getFilters();
if (filters != null) {
for (ViewerFilter f:filters) {
Object[] filteredResult = f.filter(viewer, parent, result);
result = filteredResult;
}
}
return result;
}
}

View File

@ -18,6 +18,7 @@ import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -155,9 +156,10 @@ public class WaveformViewerPart {
protected IStatus run( IProgressMonitor monitor) {
// convert to SubMonitor and set total number of work units
SubMonitor subMonitor = SubMonitor.convert(monitor, filesToLoad.size());
subMonitor.setTaskName("Loading database");
try {
for(File file: filesToLoad){
// TimeUnit.SECONDS.sleep(20);
TimeUnit.SECONDS.sleep(2);
database.load(file);
database.addPropertyChangeListener(txDisplay);
subMonitor.worked(1);
@ -169,6 +171,8 @@ public class WaveformViewerPart {
e.printStackTrace();
return Status.CANCEL_STATUS;
}
subMonitor.done();
monitor.done();
return Status.OK_STATUS;
}
};
@ -271,7 +275,7 @@ public class WaveformViewerPart {
@Inject @Optional
public void getAddWaveformEvent(@UIEventTopic(WaveformViewerPart.ADD_WAVEFORM) Object o) {
Object sel = selectionService.getSelection();
Object sel = o==null?selectionService.getSelection():o;
if(sel instanceof List<?>)
for(Object el:((List<?>)sel)){
if(el instanceof IWaveform<?>)

View File

@ -1,12 +1,12 @@
/*******************************************************************************
* Copyright (c) 2015 MINRES Technologies GmbH and others.
* Copyright (c) 2011 Google, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* MINRES Technologies GmbH - initial API and implementation
* Google, Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.wb.swt;