package com.xenoage.zong.commands.core.music.group;
import java.util.List;
import com.xenoage.utils.document.command.Command;
import com.xenoage.utils.document.command.Undoability;
import com.xenoage.zong.core.music.StavesList;
import com.xenoage.zong.core.music.group.BarlineGroup;
import com.xenoage.zong.core.music.group.BracketGroup;
/**
* Adds a {@link BarlineGroup} to the score.
*
* @author Andreas Wenger
*/
public class BracketGroupAdd
implements Command {
//data
private StavesList stavesList;
private BracketGroup group;
public BracketGroupAdd(StavesList stavesList, BracketGroup group) {
this.stavesList = stavesList;
this.group = group;
}
@Override public void execute() {
//check parameters
int startStaff = group.getStaves().getStart();
int endStaff = group.getStaves().getStop();
if (endStaff >= stavesList.getStaves().size())
throw new IllegalArgumentException("staves out of range");
//add new group at the right position
//(the barline groups are sorted by start index)
List<BracketGroup> groups = stavesList.getBracketGroups();
int i = 0;
while (i < groups.size() && startStaff > groups.get(i).getStaves().getStart())
i++;
groups.add(i, group);
}
@Override public Undoability getUndoability() {
return Undoability.Undoable;
}
@Override public void undo() {
stavesList.getBracketGroups().remove(group);
}
}