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