TiedNumberTimer.java :  » Math » migen » uk » ac » lkl » migen » system » expresser » ui » Java Open Source

Java Open Source » Math » migen 
migen » uk » ac » lkl » migen » system » expresser » ui » TiedNumberTimer.java
/**
 * 
 */
package uk.ac.lkl.migen.system.expresser.ui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.ref.WeakReference;

import javax.swing.Timer;

import uk.ac.lkl.common.util.value.IntegerValue;
import uk.ac.lkl.migen.system.MiGenConfiguration;
import uk.ac.lkl.migen.system.expresser.model.tiednumber.TiedNumberExpression;

/**
 * The timer that causes task variables to repeated change values
 * 
 * @author Ken Kahn
 *
 */
public class TiedNumberTimer extends Timer {
    
    // if Integer.MIN_VALUE then a small random amount
    final static public int RANDOM_STEP = Integer.MIN_VALUE;
    
    protected int stepAmount = RANDOM_STEP;
    
    // valueAtStart is where the value of the tied number is saved
    // so that when the animation stops its original value is restored
    // for stepping this should be null
//    protected IntegerValue valueAtStart = null;
    
    protected WeakReference<TiedNumberExpression<?>> tiedNumberWeakReference;
    
    public TiedNumberTimer(WeakReference<TiedNumberExpression<?>> tiedNumberWeakReference) {
  super(MiGenConfiguration.getTiedNumberPlayDelay(),null);
  this.tiedNumberWeakReference = tiedNumberWeakReference;
  ActionListener actionListener = new ActionListener() {

      @SuppressWarnings("unchecked")
      public void actionPerformed(ActionEvent e) {
    TiedNumberExpression<IntegerValue> tiedNumber = 
        (TiedNumberExpression<IntegerValue>) TiedNumberTimer.this.tiedNumberWeakReference.get();
    if (tiedNumber == null || tiedNumber.isLocked()) {
        return;
    }
    int currentValue = ((IntegerValue) tiedNumber.getValue()).getInt();
    int delta;
    final int maximum = 10;
    final int minimum = 1;
    if (stepAmount == RANDOM_STEP) {
        final int deltas[] = {-3, -2, -1, 1, 2, 3};
        double random_double_less_than_6 = Math.random()*6;
        delta = deltas[(int) random_double_less_than_6];
        if (currentValue + delta > maximum) {
      delta = -delta;
        } else if (currentValue + delta < minimum) {
      delta = -delta;
        }
    } else {
        if (currentValue + stepAmount > maximum) {
      stepAmount = -stepAmount;
        } else if (currentValue + stepAmount < minimum) {
      stepAmount = -stepAmount;
        }
        delta = stepAmount;
    }  
    tiedNumber.setValue(new IntegerValue(currentValue + delta));
      }

  };
  addActionListener(actionListener);
    }
    
    @SuppressWarnings("unchecked")
    @Override
    public void start() {
  TiedNumberExpression<IntegerValue> tiedNumber = 
      (TiedNumberExpression<IntegerValue>) tiedNumberWeakReference.get();
  if (tiedNumber == null) {
      return;
  }
//  valueAtStart = tiedNumber.getValue();
  super.start();
    }
    
    @SuppressWarnings("unchecked")
    @Override
    public void stop() {
  super.stop();
  TiedNumberExpression<IntegerValue> tiedNumber = 
      (TiedNumberExpression<IntegerValue>) tiedNumberWeakReference.get();
  if (tiedNumber == null) {
      return;
  }
//  if (valueAtStart != null) {
//      tiedNumber.setValue(valueAtStart);
//      valueAtStart = null;
//  }
    }

    public int getStepAmount() {
        return stepAmount;
    }

    public void setStepAmount(int stepAmount) {
        this.stepAmount = stepAmount;
    }
    
    @Override
    // need to make this public
    public void fireActionPerformed(ActionEvent e) {
  super.fireActionPerformed(e);
    }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.