package com.opcoach.ecf2014.engine.ui.parts; import javax.annotation.PostConstruct; import javax.inject.Inject; import org.eclipse.draw2d.ColorConstants; import org.eclipse.draw2d.LightweightSystem; import org.eclipse.e4.core.di.annotations.Optional; import org.eclipse.nebula.visualization.widgets.datadefinition.IManualValueChangeListener; import org.eclipse.nebula.visualization.widgets.figures.ScaledSliderFigure; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Canvas; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import com.opcoach.ecf2014.engine.core.EngineSimulator; public class EngineControlPart { @Inject @Optional EngineSimulator engineSimu; @PostConstruct public void postConstruct(Composite parent) { parent.setLayout(new GridLayout(1, true)); Canvas canvas = new Canvas(parent, SWT.BORDER); canvas.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); final LightweightSystem lws = new LightweightSystem(canvas); //Create Scaled Slider final ScaledSliderFigure slider = new ScaledSliderFigure(); slider.setHorizontal(true); //Init Scaled Slider slider.setRange(-10, 10); // can brake or accelerate from -10 to 10 m/s2 slider.setValue(0); slider.setLoLevel(-5); slider.setLoloLevel(-8); slider.setHiLevel(6); slider.setHihiLevel(8); slider.setThumbColor(ColorConstants.gray); slider.setEffect3D(true); slider.setShowMinorTicks(false); slider.addManualValueChangeListener(new IManualValueChangeListener() { public void manualValueChanged(double newValue) { if (engineSimu != null) engineSimu.accelerate((int) newValue); } }); lws.setContents(slider); // Create the 2 swt buttons for start and stop. Composite buttonComposite = new Composite(parent, SWT.NONE); buttonComposite.setLayout(new GridLayout(2, true)); final Button startButton = new Button(buttonComposite, SWT.NONE); startButton.setText("Start Engine"); startButton.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_GREEN)); final Button stopButton = new Button(buttonComposite, SWT.NONE); stopButton.setText("Stop Engine"); stopButton.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_RED)); stopButton.setEnabled(false); startButton.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { if (engineSimu != null) engineSimu.start(); stopButton.setEnabled(true); startButton.setEnabled(false); } @Override public void widgetDefaultSelected(SelectionEvent e) { } }); stopButton.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { if (engineSimu != null) engineSimu.stop(); startButton.setEnabled(true); stopButton.setEnabled(false); } @Override public void widgetDefaultSelected(SelectionEvent e) { } }); } }