/*
* Created on 26-nov-2005
*
* TODO To change the template for this generated file go to Window -
* Preferences - Java - Code Style - Code Templates
*/
package org.herac.tuxguitar.song.models;
import java.util.ArrayList;
import java.util.List;
import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
/**
* @author julian
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public abstract class TGMeasure {
public static final Clef DEFAULT_CLEF = Clef.TREBLE;
public static final int DEFAULT_KEY_SIGNATURE = 0;
private List<TGBeat> beats = new ArrayList<TGBeat>();
private Clef clef = DEFAULT_CLEF;
private TGMeasureHeader header;
private int keySignature = DEFAULT_KEY_SIGNATURE;
private TGTrack track;
public TGMeasure(final TGMeasureHeader header) {
this.header = header;
}
public void addBeat(final TGBeat beat) {
beat.setMeasure(this);
this.beats.add(beat);
}
public TGMeasure clone(final TGMeasureHeader header) {
final TGMeasure measure = new TGMeasureImpl(header);
measure.setClef(this.clef);
measure.setKeySignature(this.keySignature);
for (final TGBeat beat : this.beats) {
measure.addBeat(beat.clone());
}
return measure;
}
public int countBeats() {
return this.beats.size();
}
public TGBeat getBeat(int index) {
if (index >= 0 && index < countBeats()) {
return this.beats.get(index);
}
return null;
}
public List<TGBeat> getBeats() {
return this.beats;
}
public Clef getClef() {
return this.clef;
}
public TGMeasureHeader getHeader() {
return this.header;
}
public int getKeySignature() {
return this.keySignature;
}
public long getLength() {
return this.header.getLength();
}
public TGMarker getMarker() {
return this.header.getMarker();
}
public int getNumber() {
return this.header.getNumber();
}
public int getRepeatClose() {
return this.header.getRepeatClose();
}
public long getStart() {
return this.header.getStart();
}
public TGTempo getTempo() {
return this.header.getTempo();
}
public TGTimeSignature getTimeSignature() {
return this.header.getTimeSignature();
}
public TGTrack getTrack() {
return this.track;
}
public int getTripletFeel() {
return this.header.getTripletFeel();
}
public boolean hasMarker() {
return this.header.hasMarker();
}
public boolean isRepeatOpen() {
return this.header.isRepeatOpen();
}
public void makeEqual(final TGMeasure measure) {
this.clef = measure.getClef();
this.keySignature = measure.getKeySignature();
this.beats.clear();
for (final TGBeat beat : measure.getBeats()) {
this.addBeat(beat);
}
}
public void moveBeat(final int index, final TGBeat beat) {
this.beats.remove(beat);
this.beats.add(index, beat);
}
public boolean removeBeat(final TGBeat beat) {
return this.beats.remove(beat);
}
public void setClef(final Clef clef) {
this.clef = clef;
}
public void setHeader(final TGMeasureHeader header) {
this.header = header;
}
public void setKeySignature(final int keySignature) {
this.keySignature = keySignature;
}
public void setTrack(final TGTrack track) {
this.track = track;
}
}