package jass.render; import java.io.*; public class Controller extends javax.swing.JDialog { protected static final double MAX_SLIDERVAL = 10000; protected static final int NSLIDERS = 21; // defaults protected static final int NBUTTONS = 4; // defaults protected double[] val; //initial slider values protected String[] names; //slider labels protected double[] min,max; //slider ranges protected int nsliders = NSLIDERS; protected int nbuttons = NBUTTONS; /** Set the values of the sliders and call its handlers. */ public void setSliders(double[] val,double[] min,double[] max,String[] names) { setValues(val,min,max,names); for(int i=0;i<val.length;i++) { onSlider(i); } } /** Set button names */ public void setButtonNames(String[] names) { for(int i=0;i<names.length;i++) { setButtonName(names[i],i); } } /** Set button name */ public void setButtonName(String name,int k) { jButton[k].setText(name); } /** Set the values of the sliders (will not call its handlers) */ public void setValues(double[] val,double[] min,double[] max,String[] names) { for(int i=0;i<val.length;i++) { this.names[i] = names[i]; this.val[i] = val[i]; this.min[i] = min[i]; this.max[i] = max[i]; int x = (int)(MAX_SLIDERVAL * (val[i]-min[i])/(max[i]-min[i])); jSlider[i].setValue(x); jTextPane[i].setText(names[i]+new Double(val[i]).toString()); } } private void initValues() { val = new double[nsliders]; min = new double[nsliders]; max = new double[nsliders]; names = new String[nsliders]; for(int i=0;i<nsliders;i++) { names[i] = "- "; val[i]=.511131313131231231231231212312313; min[i] = 0; max[i] = 1; } } /** Creates new form Controller with nsl sliders and nbut buttons*/ public Controller(java.awt.Frame parent,boolean modal,int nsl,int nbut) { super (parent, parent.getTitle(),modal); this.nsliders = nsl; this.nbuttons = nbut; jSlider = new javax.swing.JSlider[nsliders]; jTextPane = new javax.swing.JTextPane[nsliders]; jButton = new javax.swing.JButton[nbuttons]; initComponents (); setLocationRelativeTo(null); pack (); // put incenter } /** Member class to handle slider events */ class LabeledMouseMotionAdapter extends java.awt.event.MouseMotionAdapter { private int label; public LabeledMouseMotionAdapter(int label) { super(); this.label = label; } public void mouseDragged (java.awt.event.MouseEvent evt) { jSliderMouseDragged (label,evt); } } /** Member class to handle button events */ class LabeledMouseAdapter extends java.awt.event.MouseAdapter { private int label; public LabeledMouseAdapter(int label) { super(); this.label = label; } public void mousePressed (java.awt.event.MouseEvent evt) { jButtonMousePressed (label,evt); } } private void initComponents () { for(int i=0;i<nsliders;i++) { jSlider[i] = new javax.swing.JSlider(); jTextPane[i] = new javax.swing.JTextPane(); } for(int i=0;i<nbuttons;i++) { jButton[i] = new javax.swing.JButton (); } getContentPane ().setLayout (new java.awt.GridLayout (nsliders+(nbuttons+1)/2, 2)); /* addWindowListener (new java.awt.event.WindowAdapter () { public void windowClosing (java.awt.event.WindowEvent evt) { closeDialog (evt); System.exit(0); } } ); */ for(int i=0;i<nsliders;i++) { jSlider[i].setMaximum ((int)MAX_SLIDERVAL); getContentPane ().add (jSlider[i]); jTextPane[i].setEditable (false); jTextPane[i].setText (""); getContentPane ().add (jTextPane[i]); } for(int i=0;i<nsliders;i++) { jSlider[i].addMouseMotionListener (new LabeledMouseMotionAdapter(i)); } for(int i=0;i<nbuttons;i++) { jButton[i].addMouseListener (new LabeledMouseAdapter(i)); getContentPane().add (jButton[i]); } initValues(); setValues(val,min,max,names); } /** Save slider states to file */ public void saveToFile(String fn) { try { BufferedWriter br = new BufferedWriter(new FileWriter(fn)); double x = 0; for(int i=0;i<nsliders;i++) { br.write(names[i]); br.newLine(); br.write(new Double(val[i]).toString()); br.newLine(); br.write(new Double(min[i]).toString()); br.newLine(); br.write(new Double(max[i]).toString()); br.newLine(); } br.close(); } catch(Exception e) { System.out.println(this+" "+e); } } /** Load slider states from file and call handlers */ public void loadFromFile(String fn) { try { BufferedReader br = new BufferedReader(new FileReader(fn)); double x = 0; for(int i=0;i<nsliders;i++) { names[i] = br.readLine(); val[i] = (float)(new Double(br.readLine()).doubleValue()); min[i] = (float)(new Double(br.readLine()).doubleValue()); max[i] = (float)(new Double(br.readLine()).doubleValue()); } br.close(); setValues(val,min,max,names); for(int i=0;i<nsliders;i++) { onSlider(i); } } catch(Exception e) { System.out.println(this+" "+e); } } /** User should override this handler*/ public void onSlider(int slider) {;} /** User should override this handler*/ public void onButton(int button) {;} private void jButtonMousePressed (int k, java.awt.event.MouseEvent evt) { onButton(k); } private void jSliderMouseDragged (int k,java.awt.event.MouseEvent evt) { double sval = jSlider[k].getValue()/MAX_SLIDERVAL; val[k] = (float)(sval*(max[k]-min[k])+min[k]); jTextPane[k].setText(names[k] + new Double(val[k]).toString()); onSlider(k); } /** Closes the dialog */ private void closeDialog(java.awt.event.WindowEvent evt) { setVisible (false); dispose (); } protected javax.swing.JSlider[] jSlider; protected javax.swing.JTextPane[] jTextPane; protected javax.swing.JButton[] jButton; }