package org.herac.tuxguitar.player.impl.sequencer;
import java.util.ArrayList;
import java.util.List;
import org.herac.tuxguitar.player.base.MidiPlayerException;
public class MidiTrackController {
private boolean anySolo;
private MidiSequencerImpl sequencer;
private List<MidiTrack> tracks;
public MidiTrackController(MidiSequencerImpl sequencer) {
this.sequencer = sequencer;
this.tracks = new ArrayList<MidiTrack>();
this.anySolo = false;
}
public void checkAnySolo() {
this.anySolo = false;
for (int i = 0; i < this.tracks.size(); i++) {
MidiTrack track = (MidiTrack) this.tracks.get(i);
if (track.isSolo()) {
this.anySolo = true;
break;
}
}
}
public void clearTracks() {
this.tracks.clear();
}
public void init(int count) {
this.tracks.clear();
for (int i = 0; i < count; i++) {
this.tracks.add(new MidiTrack());
}
}
public boolean isAnySolo() {
return this.anySolo;
}
public boolean isMute(int index) {
if (index >= 0 && index < this.tracks.size()) {
MidiTrack track = (MidiTrack) this.tracks.get(index);
return track.isMute();
}
return false;
}
public boolean isSolo(int index) {
if (index >= 0 && index < this.tracks.size()) {
MidiTrack track = (MidiTrack) this.tracks.get(index);
return track.isSolo();
}
return false;
}
public void setMute(int index, boolean mute) throws MidiPlayerException {
if (index >= 0 && index < this.tracks.size()) {
MidiTrack track = (MidiTrack) this.tracks.get(index);
track.setMute(mute);
if (track.isMute()) {
setSolo(index, false);
this.sequencer.getTransmitter().sendAllNotesOff();
}
}
}
public void setSolo(int index, boolean solo) throws MidiPlayerException {
if (index >= 0 && index < this.tracks.size()) {
MidiTrack track = (MidiTrack) this.tracks.get(index);
track.setSolo(solo);
checkAnySolo();
if (track.isSolo()) {
setMute(index, false);
this.sequencer.getTransmitter().sendAllNotesOff();
}
}
}
}