/*
* 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 org.herac.tuxguitar.song.factory.TGFactory;
/**
* @author julian
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public abstract class TGMeasureHeader {
public static final int TRIPLET_FEEL_NONE = 1;
public static final int TRIPLET_FEEL_EIGHTH = 2;
public static final int TRIPLET_FEEL_SIXTEENTH = 3;
private int number;
private long start;
private TGTimeSignature timeSignature;
private TGTempo tempo;
private TGMarker marker;
private boolean repeatOpen;
private int repeatAlternative;
private int repeatClose;
private int tripletFeel;
private TGSong song;
public TGMeasureHeader(TGFactory factory){
this.number = 0;
this.start = TGDuration.QUARTER_TIME;
this.timeSignature = factory.newTimeSignature();
this.tempo = factory.newTempo();
this.marker = null;
this.tripletFeel = TRIPLET_FEEL_NONE;
this.repeatOpen = false;
this.repeatClose = 0;
this.repeatAlternative = 0;
this.checkMarker();
}
public int getNumber() {
return this.number;
}
public void setNumber(int number) {
this.number = number;
this.checkMarker();
}
public int getRepeatClose() {
return this.repeatClose;
}
public void setRepeatClose(int repeatClose) {
this.repeatClose = repeatClose;
}
public int getRepeatAlternative() {
return this.repeatAlternative;
}
/**
* bitwise value 1 TO 8.
* (1 << AlternativeNumber)
*/
public void setRepeatAlternative(int repeatAlternative) {
this.repeatAlternative = repeatAlternative;
}
public boolean isRepeatOpen() {
return this.repeatOpen;
}
public void setRepeatOpen(boolean repeatOpen) {
this.repeatOpen = repeatOpen;
}
public long getStart() {
return this.start;
}
public void setStart(long start) {
this.start = start;
}
public int getTripletFeel() {
return this.tripletFeel;
}
public void setTripletFeel(int tripletFeel) {
this.tripletFeel = tripletFeel;
}
public TGTempo getTempo() {
return this.tempo;
}
public void setTempo(TGTempo tempo) {
this.tempo = tempo;
}
public TGTimeSignature getTimeSignature() {
return this.timeSignature;
}
public void setTimeSignature(TGTimeSignature timeSignature) {
this.timeSignature = timeSignature;
}
public TGMarker getMarker() {
return this.marker;
}
public void setMarker(TGMarker marker) {
this.marker = marker;
}
public boolean hasMarker(){
return (getMarker() != null);
}
private void checkMarker(){
if(hasMarker()){
this.marker.setMeasure(getNumber());
}
}
public long getLength(){
return getTimeSignature().getNumerator() * getTimeSignature().getDenominator().getTime();
}
public TGSong getSong() {
return this.song;
}
public void setSong(TGSong song) {
this.song = song;
}
public void makeEqual(TGMeasureHeader measure){
this.start = measure.getStart();
this.timeSignature = measure.getTimeSignature();
this.tempo = measure.getTempo();
this.marker = measure.getMarker();
this.repeatOpen = measure.isRepeatOpen();
this.repeatClose = measure.getRepeatClose();
this.repeatAlternative = measure.getRepeatAlternative();
this.checkMarker();
}
public TGMeasureHeader clone(TGFactory factory){
TGMeasureHeader header = factory.newHeader();
header.setNumber(getNumber());
header.setStart(getStart());
header.setRepeatOpen(isRepeatOpen());
header.setRepeatAlternative(getRepeatAlternative());
header.setRepeatClose(getRepeatClose());
header.setTripletFeel(getTripletFeel());
getTimeSignature().copy(header.getTimeSignature());
getTempo().copy(header.getTempo());
header.setMarker(hasMarker()?(TGMarker)getMarker().clone(factory):null);
return header;
}
}