Mercurial > hg > jslab
view src/samer/core_/viewers/swing/DoubleViewer.java @ 5:b67a33c44de7
Remove some crap, etc
author | samer |
---|---|
date | Fri, 05 Apr 2019 21:34:25 +0100 |
parents | bf79fb79ee13 |
children |
line wrap: on
line source
/* * DoubleViewer.java * * Copyright (c) 2000, Samer Abdallah, King's College London. * All rights reserved. * * This software is provided AS iS and WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. */ package samer.core.viewers.swing; import samer.core.types.*; import samer.core.util.*; import samer.core.util.swing.Meter; import samer.core.Agent.*; import samer.core.*; import java.awt.*; import java.util.*; import javax.swing.*; import samer.tools.SignalTrace; public class DoubleViewer extends NumberViewer { VDouble model; JSlider slider; Meter meter; VMap map; int flags; public DoubleViewer(Viewable v) { this((VDouble)v); } public DoubleViewer(VDouble model) { this(model,model.flags); } public DoubleViewer(VDouble model, int flags) { super(model); this.model = model; this.flags = flags; init((flags&VDouble.NOENTRY)==0); } protected JComponent createSlider() { Shell.push(model.getNode()); try { if ((flags&VDouble.NOSLIDER)==0) { Shell.push("slider"); slider=new JSlider( JSlider.HORIZONTAL, 0, 100, 0); slider.addChangeListener(this); map=new VMap(new LinearMap(100),true); map.addObserver( new Observer() { public void update(Observable o, Object args) { ignoreSliderChange=true; setSlider(); ignoreSliderChange=false; } } ); exposeCommands(map); Shell.pop(); return slider; } else if (Shell.getBoolean("meter",(flags&VDouble.METER)!=0)) { Shell.push("meter"); meter = new Meter(); meter.exposeMap(); meter.setMaximumSize(new Dimension(1000,6)); Shell.pop(); return meter; } else return null; } finally { Shell.pop(); } } protected void setText() { t.setText(X.string(model.get())); } protected void getText() { model.decode(t.getText()); } protected void setSlider() { if (meter!=null) { meter.next(model.get()); } else if (slider!=null) { IMap imap=this.map.getMap(); double value=model.get(); int k=imap.toInt(value); if (imap.wasClipped()) { double right=imap.getDomainMax(), left=imap.getDomainMin(); if (k<0) map.setDomain(2*value-right,right); else map.setDomain(left,2*value-left); map.changed(); } else slider.setValue(k); } } protected void getSlider() { if (slider!=null) model.value = map.getMap().inverseFromInt(slider.getValue()); } public void getCommands(Registry r) { // this gets called in VariableViewer constructor before this // object is propery constructed. Hmmmph. //if ((model.flags&VDouble.NOENTRY)==0) r.add("print").add("set"); //if (slider!=null || meter!=null) r.add("calibrate"); r.add("print").add("set"); r.add("calibrate"); r.add("trace"); r.group(); super.getCommands(r); } public void execute(String cmd, Environment env) throws Exception { if (cmd.equals("print")) Shell.print(model.toString()); else if (cmd.equals("set")) model.set(X._double(env.datum(model.getNode().fullName()),model.get())); else if (cmd.equals("calibrate")) { if (slider!=null) { map.setDomain(0,model.get()*2); setSlider(); } else if (meter!=null) meter.getMap().setDomain(0,2*model.get()); } else if (cmd.equals("trace")) { Shell.push(new Node("trace", model.getNode())); SignalTrace vwr = new SignalTrace(model); Shell.expose((Viewer)vwr,"window"); model.addObserver(vwr); Shell.pop(); } else super.execute(cmd,env); } }