/*
* Created on 23-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.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 TGVoice {
public static final int DIRECTION_NONE = 0;
public static final int DIRECTION_UP = 1;
public static final int DIRECTION_DOWN = 2;
private TGBeat beat;
private TGDuration duration;
private List notes;
private int index;
private int direction;
private boolean empty;
public TGVoice(TGFactory factory, int index) {
this.duration = factory.newDuration();
this.notes = new ArrayList();
this.index = index;
this.empty = true;
this.direction = DIRECTION_NONE;
}
public int getIndex() {
return this.index;
}
public void setIndex(int index) {
this.index = index;
}
public boolean isEmpty() {
return this.empty;
}
public void setEmpty(boolean empty) {
this.empty = empty;
}
public int getDirection() {
return this.direction;
}
public void setDirection(int direction) {
this.direction = direction;
}
public TGDuration getDuration() {
return this.duration;
}
public void setDuration(TGDuration duration) {
this.duration = duration;
}
public TGBeat getBeat() {
return this.beat;
}
public void setBeat(TGBeat beat) {
this.beat = beat;
}
public List getNotes() {
return this.notes;
}
public void addNote(TGNote note){
note.setVoice(this);
this.notes.add(note);
this.setEmpty(false);
}
public void moveNote(int index,TGNote note){
getNotes().remove(note);
getNotes().add(index,note);
}
public void removeNote(TGNote note){
this.notes.remove(note);
}
public TGNote getNote(int index){
if(index >= 0 && index < countNotes()){
return (TGNote)this.notes.get(index);
}
return null;
}
public int countNotes(){
return this.notes.size();
}
public boolean isRestVoice(){
return this.notes.isEmpty();
}
public TGVoice clone(TGFactory factory){
TGVoice voice = factory.newVoice(getIndex());
voice.setEmpty(isEmpty());
voice.setDirection( getDirection() );
getDuration().copy(voice.getDuration());
for(int i = 0;i < countNotes();i++){
TGNote note = (TGNote)this.notes.get(i);
voice.addNote(note.clone(factory));
}
return voice;
}
}