package com.PP.LunarTabsAndroid.InstructionGenerator; import java.util.List; import org.herac.tuxguitar.song.models.TGMeasure; import com.PP.LunarTabsAndroid.UI.DataModel; import com.PP.LunarTabsAndroid.UI.ResourceModel; import com.example.lunartabsandroid.R; import android.content.Context; import android.util.SparseArray; import android.util.SparseIntArray; public class RepeatInstructionGenerator { /** * Returns a list of repeat instructions to append to measures * if repeats exist. * @param measures The measures to generate repeat instructions for * @return Repeat Instructions */ public static SparseArray<String> getRepeatInstructions(List<TGMeasure> measures) { SparseArray<String> rtn = new SparseArray<String>(); int lastOpen = 1; for(int x=0; x < measures.size(); x++) { TGMeasure measure = measures.get(x); if(measure.isRepeatOpen()) { lastOpen = (x+1); } if(measure.getRepeatClose()!=0) { String instruction = ""; if(lastOpen==(x+1)) { instruction = ResourceModel.getInstance().REPEAT_MEASURE+" " + measure.getRepeatClose() + " "+ResourceModel.getInstance().TIMES+"."; } else { if(measure.getRepeatClose()==1) { instruction = ResourceModel.getInstance().REPEAT_MEASURES+" " + lastOpen + " "+ResourceModel.getInstance().TO+" " + (x+1)+ "."; } else { instruction = ResourceModel.getInstance().REPEAT_MEASURES+" " + lastOpen + " "+ResourceModel.getInstance().TO+" " + (x+1) + " " + Words.getInstance(measure.getRepeatClose()).getNumberInWords() + ResourceModel.getInstance().MORE_TIMES+"."; } } rtn.put((x+1), instruction); } } return rtn; } /** * Returns a list of repeat counts indexed by measure. * @param measures The measures to generate repeat counts for * @return Repeat Counts */ public static SparseIntArray getNumRepeats(List<TGMeasure> measures) { SparseIntArray rtn = new SparseIntArray(); int lastOpen = 1; for(int x=0; x < measures.size(); x++) { TGMeasure measure = measures.get(x); if(measure.isRepeatOpen()) { lastOpen = (x+1); } if(measure.getRepeatClose()!=0) { for(int ind=lastOpen; ind <= (x+1); ind++) { int priorCount=0; if(rtn.get(ind)!=0) { priorCount = rtn.get(ind); } rtn.put(ind, priorCount + measure.getRepeatClose()); } } } return rtn; } }