/*
* Copyright (C) 2015 たんらる
*/
package fourthline.mabiicco.fx;
import java.net.URL;
import java.util.OptionalInt;
import java.util.ResourceBundle;
import fourthline.mabiicco.midi.InstClass;
import fourthline.mabiicco.midi.InstType;
import fourthline.mabiicco.midi.MabiDLS;
import fourthline.mmlTools.MMLTrack;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.image.ImageView;
import static fourthline.mabiicco.AppResource.appText;
/**
*
*/
public class TrackViewController implements Initializable {
@FXML private ComboBox<InstClass> instComboBox;
@FXML private ComboBox<InstClass> songComboBox;
@FXML private TextField melodyText;
@FXML private TextField chord1Text;
@FXML private TextField chord2Text;
@FXML private TextField songText;
@FXML private Label rankText;
@FXML private Button muteButton;
@FXML private ImageView muteOnImage;
@FXML private ImageView muteOffImage;
private OptionalInt trackIndex = OptionalInt.empty();
private final MabiDLS dls = MabiDLS.getInstance();
private final InstClass noUseSongEx = new InstClass(appText("instrument.nouse_chorus")+",0", -1, -1, null);
public void setMMLTrack(MMLTrack mmlTrack, int trackIndex) {
this.trackIndex = OptionalInt.of(trackIndex);
String mml[] = mmlTrack.getMabiMMLArray();
TextField field[] = { melodyText, chord1Text, chord2Text, songText };
for (int i = 0; i < mml.length; i++) {
field[i].setText( mml[i] );
}
rankText.setText( mmlTrack.mmlRankFormat() );
InstClass inst = dls.getInstByProgram( mmlTrack.getProgram() );
if ( !instComboBox.getItems().contains(inst) ) {
inst = instComboBox.getItems().get(0);
}
instComboBox.setValue( inst );
InstClass songInst = dls.getInstByProgram( mmlTrack.getSongProgram() );
if ( !songComboBox.getItems().contains(songInst) ) {
songInst = noUseSongEx;
}
songComboBox.setValue( songInst );
}
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
InstClass instList[] = dls.getAvailableInstByInstType(InstType.MAIN_INST_LIST);
instComboBox.getItems().addAll( instList );
instComboBox.setValue( instList[0] );
songComboBox.getItems().addAll( dls.getAvailableInstByInstType(InstType.SUB_INST_LIST) );
songComboBox.getItems().add( noUseSongEx );
songComboBox.setValue( noUseSongEx );
}
private void updateMuteButton() {
if (trackIndex.isPresent()) {
if (dls.getMute( trackIndex.getAsInt() )) {
muteButton.setGraphic( muteOnImage );
} else {
muteButton.setGraphic( muteOffImage );
}
}
}
@FXML
private void muteAction(ActionEvent e) {
if (trackIndex.isPresent()) {
dls.toggleMute( trackIndex.getAsInt() );
updateMuteButton();
}
}
@FXML
private void soloAction(ActionEvent e) {
if (trackIndex.isPresent()) {
dls.solo( trackIndex.getAsInt() );
updateMuteButton();
}
}
@FXML
private void allAction(ActionEvent e) {
dls.all();
updateMuteButton();
}
}