/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package automenta.spacenet.space.widget.slider;
import automenta.spacenet.space.geom.Rect;
import automenta.spacenet.space.geom.layout.ColRect;
import automenta.spacenet.space.geom.layout.RowRect;
import automenta.spacenet.space.geom.text3d.Font3D;
import automenta.spacenet.space.geom.text3d.Text3D;
import automenta.spacenet.space.widget.panel.Panel;
import automenta.spacenet.space.widget.slider.Slider.SliderDirection;
import automenta.spacenet.var.physical.Color;
import automenta.spacenet.var.scalar.DoubleRange;
import automenta.spacenet.var.scalar.DoubleVar;
import com.ardor3d.scenegraph.Spatial;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
*
* @author seh
*/
public class ScalarMapEqualizerPanel<X> extends Panel {
private final Map<X, DoubleVar> map;
private RowRect sliderRows;
private final Font3D font;
private final double min;
private final double max;
//TODO pass MapVar
public ScalarMapEqualizerPanel(Map<X, DoubleVar> map, Font3D font, double min, double max) {
super();
this.map = map;
this.font = font;
this.min = min;
this.max = max;
updateEqualizer();
}
protected void updateEqualizer() {
if (sliderRows!=null) {
remove(sliderRows);
sliderRows = null;
}
List<Spatial> subPanels = new LinkedList();
for (X x : map.keySet()) {
DoubleRange range = new DoubleRange(map.get(x), min, max);
DoubleVar knobWidth = new DoubleVar(0.1);
DoubleVar spinIncrement = new DoubleVar((max - min) / 50.0);
Slider slider = new Slider(SliderDirection.Horizontal, font, range, spinIncrement, knobWidth);
Text3D label = new Text3D(font, getLabel(x));
label.color(Color.White);
Rect r = new RowRect(0.05, label, slider);
subPanels.add(r);
}
sliderRows = add(new ColRect(0.05, subPanels.toArray(new Spatial[subPanels.size()])));
sliderRows.moveDZ(0.05);
}
protected String getLabel(X x) {
return x.toString();
}
}