package com.remainsoftware.ece2013.nebula.visualization;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
public class MeterComposite extends Composite {
private Meter meter1;
private Meter meter2;
private Meter meter3;
private Meter meter4;
public class Runner implements Runnable {
private int value;
private Meter meter;
Runner(Meter meter, int value) {
this.meter = meter;
this.value = value;
}
public void run() {
if (meter.getValue() - 1 == value && value >= 0) {
meter.setValue(value);
Display.getDefault().asyncExec(new Runner(meter, value - 1));
}
}
};
/**
* Create the composite.
*
* @param parent
* @param style
*/
public MeterComposite(Composite parent, int style) {
super(parent, style);
setLayout(new FillLayout(SWT.VERTICAL));
meter1 = new Meter(this, SWT.NONE);
meter2 = new Meter(this, SWT.NONE);
meter3 = new Meter(this, SWT.NONE);
meter4 = new Meter(this, SWT.NONE);
}
@Override
protected void checkSubclass() {
}
static int max = 250;
public void setValue(double value) {
if (value == 0) {
value = 1;
}
setAndRun(meter1, (int) (((value) * 50) > max ? max : ((value) * 50)));
setAndRun(meter2, (int) (((value) * 8) > max ? max : ((value) * 8)));
setAndRun(meter3, (int) (((value) * 5) > max ? max : ((value) * 5)));
setAndRun(meter4, (int) (((value) * 3) > max ? max : ((value) * 3)));
}
/**
* Takes care of a smooth roll back to 0.
*
* @param meter
* @param value
*/
private void setAndRun(Meter meter, int value) {
if (value > meter.getValue()) {
meter.setValue(value);
Display.getDefault().asyncExec(new Runner(meter, value - 1));
}
}
}