import java.util.*; import java.awt.*; import java.applet.*; class ChangeDSlider extends Slider { protected Blackboard _bb; public ChangeDSlider( Blackboard black ) { _bb = black; SetMinimum( 1 ); SetMaximum( 100 ); SetValue( 20 ); SetWidth( 100 ); _bb.globals.D( GetValue() ); } public void Motion() { _bb.globals.D( GetValue() ); } public void Release() { _bb.globals.D( GetValue() ); } } // class ChangeDSlider class ChangeLocSlider extends Slider { protected Blackboard _bb; public ChangeLocSlider( Blackboard black ) { _bb = black; SetMinimum( 1 ); SetMaximum( 10 ); SetValue( 2 ); SetWidth( 100 ); _bb.globals.localizationDepth( GetValue() ); } public void Motion() { _bb.globals.localizationDepth( GetValue() ); } public void Release() { _bb.globals.localizationDepth( GetValue() ); } } // class ChangeLoclider class ChangeCycSlider extends Slider { protected Blackboard _bb; public ChangeCycSlider( Blackboard black ) { _bb = black; SetMinimum( 2 ); SetMaximum( 20 ); SetValue( 4 ); SetWidth( 100 ); _bb.globals.cycleLength( GetValue() ); } public void Motion() { _bb.globals.cycleLength( GetValue() ); } public void Release() { _bb.globals.cycleLength( GetValue() ); } } // class ChangeLoclider class ChangeTempSlider extends Slider { protected Blackboard _bb; public ChangeTempSlider( Blackboard black ) { _bb = black; SetMinimum( 0 ); SetMaximum( 1000 ); SetValue( 0 ); SetWidth( 100 ); _bb.globals.minTemp( GetValue()/100.0 ); } public void Motion() { _bb.globals.minTemp( GetValue()/100.0 ); } public void Release() { _bb.globals.minTemp( GetValue()/100.0 ); } } // class ChangeTempSlider class ChangeACSlider extends Slider { protected Blackboard _bb; public ChangeACSlider( Blackboard black ) { _bb = black; SetMinimum( 0 ); SetMaximum( 100 ); SetValue( 10 ); SetWidth( 100 ); _bb.globals.ac( GetValue()/10.0 ); } public void Motion() { _bb.globals.ac( GetValue()/10.0 ); } public void Release() { _bb.globals.ac( GetValue()/10.0 ); } } // class ChangeACSlider class ChangeAESlider extends Slider { protected Blackboard _bb; public ChangeAESlider( Blackboard black ) { _bb = black; SetMinimum( 0 ); SetMaximum( 100 ); SetValue( 20 ); SetWidth( 100 ); _bb.globals.ae( GetValue()/10.0 ); } public void Motion() { _bb.globals.ae( GetValue()/10.0 ); } public void Release() { _bb.globals.ae( GetValue()/10.0 ); } } // class ChangeAESlider class ChangeRCSlider extends Slider { protected Blackboard _bb; public ChangeRCSlider( Blackboard black ) { _bb = black; SetMinimum( 0 ); SetMaximum( 100 ); SetValue( 10 ); SetWidth( 100 ); _bb.globals.rc( GetValue()/10.0 ); } public void Motion() { _bb.globals.rc( GetValue()/10.0 ); } public void Release() { _bb.globals.rc( GetValue()/10.0 ); } } // class ChangeRCSlider class ChangeRESlider extends Slider { protected Blackboard _bb; public ChangeRESlider( Blackboard black ) { _bb = black; SetMinimum( 0 ); SetMaximum( 100 ); SetValue( 10 ); SetWidth( 100 ); _bb.globals.re( GetValue()/10.0 ); } public void Motion() { _bb.globals.re( GetValue()/10.0 ); } public void Release() { _bb.globals.re( GetValue()/10.0 ); } } // class ChangeRESlider public class ControlWindow extends Frame implements Runnable { protected Blackboard _bb; protected Slider _sliderLoc, _sliderCyc, _sliderD, _sliderTemp, _sliderAC, _sliderAE, _sliderRC, _sliderRE; RotateWindow _rotation; protected Choice _embedder, _dimension; protected Label _currTemp; protected boolean _showing = false; public boolean showing() { return _showing; } public void showing( boolean s ) { _showing = s; } public ControlWindow( Blackboard black ) { super( "Embedding Controls" ); _bb = black; setLayout(new GridLayout( 0, 2, 4, 4 )); _embedder = new Choice(); _embedder.addItem("Stable"); _embedder.addItem("Relax"); _embedder.addItem("Random"); _embedder.addItem("Circular"); _embedder.addItem("BaryCentric"); _embedder.addItem("ForceDir"); _embedder.addItem("Level"); _embedder.select("Random"); add(_embedder); _dimension = new Choice(); _dimension.addItem("2D"); _dimension.addItem("3D"); _dimension.select("2D"); add(_dimension); add(new Button("Back")); add(new Button("Rotate")); _sliderD = new ChangeDSlider( _bb ); add( new Label("Area Constant:", Label.RIGHT) ); add( _sliderD ); _sliderLoc = new ChangeLocSlider( _bb ); add( new Label("Localiz. Depth:", Label.RIGHT) ); add( _sliderLoc ); _sliderCyc = new ChangeCycSlider( _bb ); add( new Label("Cycle Length:", Label.RIGHT) ); add( _sliderCyc ); _sliderTemp = new ChangeTempSlider( _bb ); add( new Label("100 * Min.Temp:", Label.RIGHT) ); add( _sliderTemp ); _sliderAC = new ChangeACSlider( _bb ); add( new Label("100 * Attr. Const:", Label.RIGHT) ); add( _sliderAC ); _sliderAE = new ChangeAESlider( _bb ); add( new Label("100 * Attr. Exp.:", Label.RIGHT) ); add( _sliderAE ); _sliderRC = new ChangeRCSlider( _bb ); add( new Label("100 * Rep. Const:", Label.RIGHT) ); add( _sliderRC ); _sliderRE = new ChangeRESlider( _bb ); add( new Label("100 * Rep. Exp.:", Label.RIGHT) ); add( _sliderRE ); add( new Label("Current Temp:", Label.RIGHT) ); _currTemp = new Label( "0" ); add( _currTemp ); _rotation = new RotateWindow( _bb ); _rotation.pack(); _bb.addEmbedder( "Stable", new Stabilizer( _bb ) ); _bb.addEmbedder( "Random", new Randomizer( _bb ) ); _bb.addEmbedder( "BaryCentric", new Cycleizer( _bb ) ); _bb.addEmbedder( "Circular", new Circularizer( _bb ) ); _bb.addEmbedder( "Relax", new Relaxer( _bb ) ); _bb.addEmbedder( "Level", new Leveller( _bb ) ); _bb.addEmbedder( "ForceDir", new ForceDirect( _bb ) ); _bb.setEmbedding( "Random" ); } // Thread stuff // protected synchronized void refresh() { _currTemp.setText( Double.toString(_bb.globals.Temp()) ); } protected Thread _updater; public void run() { Thread.currentThread().setPriority(Thread.MIN_PRIORITY); while (true) { refresh(); try { Thread.sleep(100); } catch (InterruptedException e) { break; } } } public void start() { _updater = new Thread(this); _updater.start(); } public void stop() { if( _updater != null ) _updater.stop(); _updater = null; } public boolean action(Event evt, Object arg) { if (evt.target == _embedder) { _bb.setEmbedding( ((Choice)evt.target).getSelectedItem() ); _bb.Init(); } if (evt.target == _dimension ) { String s = ((Choice)evt.target).getSelectedItem(); _rotation.origo(); if( "2D".equals(s) ) { _bb.globals.depth3D( 0.0 ); } else { _bb.globals.depth3D( _bb.globals.L() ); } _bb.setEmbedding( "Random" ); _bb.Init(); return true; } else if (evt.target instanceof Button && "Back".equals(arg)) { _bb.backtrack(); } else if (evt.target instanceof Button && "Rotate".equals(arg)) { if( !_rotation.showing() ) { _rotation.start(); _rotation.show(); _rotation.showing( true ); } else { _rotation.showing( false ); _rotation.stop(); _rotation.handleEvent(new Event(_rotation,Event.WINDOW_DESTROY,null)); } } else return false; return true; } public boolean handleEvent(Event evt) { if (evt.id == Event.WINDOW_ICONIFY) { hide(); return true; } if (evt.id == Event.WINDOW_DESTROY) { dispose(); return true; } return super.handleEvent(evt); } } // class GraphWindow