1 /*
2  * Created on 26-nov-2005
3  *
4  * TODO To change the template for this generated file go to
5  * Window - Preferences - Java - Code Style - Code Templates
6  */
7 package org.herac.tuxguitar.song.models;
8 
9 import org.herac.tuxguitar.song.factory.TGFactory;
10 
11 /**
12  * @author julian
13  *
14  * TODO To change the template for this generated type comment go to
15  * Window - Preferences - Java - Code Style - Code Templates
16  */
17 public abstract class TGMeasureHeader {
18 	public static final int TRIPLET_FEEL_NONE = 1;
19 	public static final int TRIPLET_FEEL_EIGHTH = 2;
20 	public static final int TRIPLET_FEEL_SIXTEENTH = 3;
21 
22 	private int number;
23 	private long start;
24 	private TGTimeSignature timeSignature;
25 	private TGTempo tempo;
26 	private TGMarker marker;
27 	private boolean repeatOpen;
28 	private int repeatAlternative;
29 	private int repeatClose;
30 	private int tripletFeel;
31 	private TGSong song;
32 
TGMeasureHeader(TGFactory factory)33 	public TGMeasureHeader(TGFactory factory){
34 		this.number = 0;
35 		this.start = TGDuration.QUARTER_TIME;
36 		this.timeSignature = factory.newTimeSignature();
37 		this.tempo = factory.newTempo();
38 		this.marker = null;
39 		this.tripletFeel = TRIPLET_FEEL_NONE;
40 		this.repeatOpen = false;
41 		this.repeatClose = 0;
42 		this.repeatAlternative = 0;
43 		this.checkMarker();
44 	}
45 
getNumber()46 	public int getNumber() {
47 		return this.number;
48 	}
49 
setNumber(int number)50 	public void setNumber(int number) {
51 		this.number = number;
52 		this.checkMarker();
53 	}
54 
getRepeatClose()55 	public int getRepeatClose() {
56 		return this.repeatClose;
57 	}
58 
setRepeatClose(int repeatClose)59 	public void setRepeatClose(int repeatClose) {
60 		this.repeatClose = repeatClose;
61 	}
62 
getRepeatAlternative()63 	public int getRepeatAlternative() {
64 		return this.repeatAlternative;
65 	}
66 
67 	/**
68 	 * bitwise value 1 TO 8.
69 	 * (1 << AlternativeNumber)
70 	 */
setRepeatAlternative(int repeatAlternative)71 	public void setRepeatAlternative(int repeatAlternative) {
72 		this.repeatAlternative = repeatAlternative;
73 	}
74 
isRepeatOpen()75 	public boolean isRepeatOpen() {
76 		return this.repeatOpen;
77 	}
78 
setRepeatOpen(boolean repeatOpen)79 	public void setRepeatOpen(boolean repeatOpen) {
80 		this.repeatOpen = repeatOpen;
81 	}
82 
getStart()83 	public long getStart() {
84 		return this.start;
85 	}
86 
setStart(long start)87 	public void setStart(long start) {
88 		this.start = start;
89 	}
90 
getTripletFeel()91 	public int getTripletFeel() {
92 		return this.tripletFeel;
93 	}
94 
setTripletFeel(int tripletFeel)95 	public void setTripletFeel(int tripletFeel) {
96 		this.tripletFeel = tripletFeel;
97 	}
98 
getTempo()99 	public TGTempo getTempo() {
100 		return this.tempo;
101 	}
102 
setTempo(TGTempo tempo)103 	public void setTempo(TGTempo tempo) {
104 		this.tempo = tempo;
105 	}
106 
getTimeSignature()107 	public TGTimeSignature getTimeSignature() {
108 		return this.timeSignature;
109 	}
110 
setTimeSignature(TGTimeSignature timeSignature)111 	public void setTimeSignature(TGTimeSignature timeSignature) {
112 		this.timeSignature = timeSignature;
113 	}
114 
getMarker()115 	public TGMarker getMarker() {
116 		return this.marker;
117 	}
118 
setMarker(TGMarker marker)119 	public void setMarker(TGMarker marker) {
120 		this.marker = marker;
121 	}
122 
hasMarker()123 	public boolean hasMarker(){
124 		return (getMarker() != null);
125 	}
126 
checkMarker()127 	private void checkMarker(){
128 		if(hasMarker()){
129 			this.marker.setMeasure(getNumber());
130 		}
131 	}
132 
getLength()133 	public long getLength(){
134 		return getTimeSignature().getNumerator() * getTimeSignature().getDenominator().getTime();
135 	}
136 
getSong()137 	public TGSong getSong() {
138 		return this.song;
139 	}
140 
setSong(TGSong song)141 	public void setSong(TGSong song) {
142 		this.song = song;
143 	}
144 
makeEqual(TGMeasureHeader measure)145 	public void makeEqual(TGMeasureHeader measure){
146 		this.start = measure.getStart();
147 		this.timeSignature = measure.getTimeSignature();
148 		this.tempo = measure.getTempo();
149 		this.marker = measure.getMarker();
150 		this.repeatOpen = measure.isRepeatOpen();
151 		this.repeatClose = measure.getRepeatClose();
152 		this.repeatAlternative = measure.getRepeatAlternative();
153 		this.checkMarker();
154 	}
155 
clone(TGFactory factory)156 	public TGMeasureHeader clone(TGFactory factory){
157 		TGMeasureHeader header = factory.newHeader();
158 		header.setNumber(getNumber());
159 		header.setStart(getStart());
160 		header.setRepeatOpen(isRepeatOpen());
161 		header.setRepeatAlternative(getRepeatAlternative());
162 		header.setRepeatClose(getRepeatClose());
163 		header.setTripletFeel(getTripletFeel());
164 		getTimeSignature().copy(header.getTimeSignature());
165 		getTempo().copy(header.getTempo());
166 		header.setMarker(hasMarker()?(TGMarker)getMarker().clone(factory):null);
167 		return header;
168 	}
169 }
170