package com.tlabs.labeltool.gui;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import com.tlabs.labeltool.IPlayer;
import com.tlabs.labeltool.IRecorder;
import com.tlabs.labeltool.WavPositionChangeEvent;
public class WavPositionChangeListener implements ChangeListener {
int lastPos;
JSlider slider;
IRecorder recorder;
public WavPositionChangeListener( ) {
lastPos = 0;
recorder = null;
slider = null;
}
public WavPositionChangeListener( JSlider slider, IRecorder rec ) {
this.lastPos = 0;
this.recorder = rec;
this.slider = slider;
}
public void stateChanged(ChangeEvent ce) {
// Event from player to update slider position
if ( ce.getSource() instanceof IPlayer ) {
// System.out.println( "wav event from player=" + lastPos );
lastPos = ((WavPositionChangeEvent)ce).getPosition();
slider.setValue( (int)(slider.getMaximum()*lastPos) );
}
// Event from slider side received - notify recorder
else if ( ce.getSource() instanceof JSlider ) {
// System.out.println( "wav event from slider=" + lastPos );
JSlider source = (JSlider)ce.getSource();
if (!source.getValueIsAdjusting()) {
int newPos = source.getValue();
if ( newPos != lastPos ) {
recorder.stopRecordingPlayback();
recorder.resume( lastPos = newPos );
}
}
}
else {
// System.out.println( "wav event" + ce );
}
}
public void setRecorder( IRecorder rec ) {
this.recorder = rec;
}
public double getLastPosition() {
return lastPos;
}
}