// Decompiled by Jad v1.5.7b. Copyright 1997-99 Pavel Kouznetsov.
|
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
|
// Decompiler options: packimports(3)
|
// Source File Name: NumberField.java
|
|
//import java.awt.TextComponent;
|
//import java.awt.TextField;
|
import javax.swing.JSlider;
|
import javax.swing.JButton;
|
import javax.swing.JPanel;
|
import javax.swing.JLabel;
|
import javax.swing.border.EmptyBorder;
|
import java.awt.*;
|
import javax.swing.event.ChangeListener;
|
import javax.swing.event.ChangeEvent;
|
import java.awt.event.ActionListener;
|
//import java.util.StringTokenizer;
|
|
class NumberSlider extends JPanel implements ActionListener, ChangeListener // JSlider
|
{
|
JLabel label;
|
JSlider slider;
|
JButton resetButton;
|
JButton revert1Button;
|
JButton revert0Button;
|
JButton revertHalfButton;
|
|
NumberSlider()
|
{
|
this(0.0,10.0,1);
|
}
|
|
NumberSlider(int min, int max)
|
{
|
setLayout(new GridBagLayout());
|
|
slider = new JSlider(min,max);
|
|
slider.setPaintTicks(true);
|
//setPaintTrack(true);
|
|
if (max-min > 512)
|
{
|
slider.setMinorTickSpacing((max-min)/128);
|
slider.setMajorTickSpacing((max-min)/32);
|
}
|
else
|
{
|
slider.setMinorTickSpacing(1);
|
slider.setMajorTickSpacing(8);
|
}
|
|
slider.setSnapToTicks(true);
|
|
add(slider);
|
}
|
|
NumberSlider(double min, double max)
|
{
|
this(min,max,1);
|
}
|
|
int resolution = 10000;
|
|
NumberSlider(double min, double max, double pow)
|
{
|
setLayout(new GridBagLayout());
|
|
slider = new JSlider(0,resolution);
|
// slider.setSize(128, 16);
|
// slider.setPreferredSize(slider.getSize());
|
|
this.min = min;
|
this.max = max;
|
|
slider.setPaintTicks(false);
|
slider.setPaintTrack(true);
|
|
slider.setMajorTickSpacing(500);
|
//setSnapToTicks(true);
|
|
add(slider);
|
if (pow != 1) // && pow != -1)
|
{
|
resetButton = new cButton("-|-");
|
resetButton.setBorder(new EmptyBorder(0,8,0,0));
|
resetButton.addActionListener(this);
|
revert1Button = new JButton(" 1");
|
revert1Button.setBorder(new EmptyBorder(0,0,0,0));
|
revert1Button.addActionListener(this);
|
revert0Button = new JButton(" 0");
|
revert0Button.setBorder(new EmptyBorder(0,0,0,0));
|
revert0Button.addActionListener(this);
|
revertHalfButton = new JButton(" .5");
|
revertHalfButton.setBorder(new EmptyBorder(0,0,0,0));
|
revertHalfButton.addActionListener(this);
|
add(resetButton);
|
add(revert0Button);
|
add(revertHalfButton);
|
add(revert1Button);
|
}
|
|
if (pow <= 0)
|
{
|
// Transition between min and max
|
// value = (Math.pow(getValue()/1000.0, POW) * (max - min)) + min;
|
// value - min = Math.pow(getValue()/1000.0, POW) * (max - min);
|
// (value - min) / (max - min) = Math.pow(getValue()/1000.0, POW);
|
// LOG (value - min) / (max - min) = POW * LOG (getValue()/1000.0);
|
pow = Math.log((-pow - min) / (max - min)) / Math.log(0.5);
|
//System.out.println("POW = " + pow);
|
}
|
|
POW = pow;
|
}
|
|
public void actionPerformed(java.awt.event.ActionEvent e)
|
{
|
if (e.getSource() == resetButton)
|
{
|
frozen = true;
|
setValue(resolution/2);
|
frozen = false;
|
}
|
else if (e.getSource() == revert1Button)
|
{
|
setFloat(1);
|
}
|
else if (e.getSource() == revertHalfButton)
|
{
|
setFloat(0.5);
|
}
|
else if (e.getSource() == revert0Button)
|
{
|
setFloat(0);
|
}
|
}
|
|
void addChangeListener(ChangeListener l)
|
{
|
listener = l;
|
slider.addChangeListener(this); // l);
|
}
|
|
void removeChangeListener(ChangeListener l)
|
{
|
assert(listener == l);
|
slider.removeChangeListener(l);
|
}
|
|
public void stateChanged(ChangeEvent e)
|
{
|
assert (listener != null);
|
|
listener.stateChanged(new ChangeEvent(this));
|
}
|
|
void setInteger(int inInt)
|
{
|
setValue(inInt);
|
}
|
|
void setValue(int inInt)
|
{
|
slider.setValue(inInt);
|
}
|
|
int getInteger()
|
{
|
return getValue();
|
}
|
|
int getValue()
|
{
|
return slider.getValue();
|
}
|
|
void setFloat(double inFlt)
|
{
|
actualvalue = inFlt;
|
//System.out.println("Set Value = " + inFlt);
|
double value = Math.pow((inFlt - min) / (max - min), 1/POW);
|
//System.out.println("value = " + value);
|
overflow = (value > 1);
|
setInteger((int) (value * resolution));
|
|
// System.err.println("setFloat = " + value);
|
}
|
|
double getFloat()
|
{
|
if(overflow && getValue() == resolution)
|
return actualvalue;
|
|
double value = (Math.pow(getValue()/(double)resolution, POW) * (max - min)) + min;
|
//System.out.println("Get Value = " + value);
|
|
// System.err.println("getFloat = " + value);
|
|
return value;
|
}
|
|
double POW;
|
double min,max;
|
|
// use to handle bounds
|
double actualvalue;
|
boolean overflow;
|
|
ChangeListener listener;
|
|
static boolean frozen = false;
|
}
|