package com.frinika.sequencer.gui.transport;
import static com.frinika.localization.CurrentLocale.getMessage;
import java.awt.event.ActionEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.AbstractAction;
import javax.swing.JOptionPane;
import com.frinika.project.gui.ProjectFrame;
import com.frinika.sequencer.FrinikaSequencer;
import com.frinika.sequencer.gui.RecordingDialog;
public class RecordAction extends AbstractAction {
/**
*
*/
private static final long serialVersionUID = 1L;
private FrinikaSequencer sequencer;
private ProjectFrame projectFrame;
public RecordAction(ProjectFrame project) {
super(getMessage("sequencer.project.record"));
this.sequencer=project.getProjectContainer().getSequencer();
this.projectFrame=project;
}
public void actionPerformed(ActionEvent e) {
final JOptionPane recordingOptionPane = new JOptionPane(getMessage("sequencer.recording.takes"));
//Frame to pop-up while recording to display each take
final RecordingDialog recordingDialog = new RecordingDialog(recordingOptionPane,sequencer);
recordingOptionPane.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
String prop = evt.getPropertyName();
if (recordingDialog.isVisible()
&& (evt.getSource() == recordingOptionPane)
&& (prop.equals(JOptionPane.VALUE_PROPERTY))) {
int[] deployableTakes = recordingDialog.getDeployableTakes();
if(deployableTakes.length>0)
{
projectFrame.getProjectContainer().getEditHistoryContainer().mark(getMessage("recording"));
sequencer.deployTake(deployableTakes);
projectFrame.getProjectContainer().getEditHistoryContainer().notifyEditHistoryListeners();
}
sequencer.stop();
}
}
});
sequencer.startRecording();
}
}