package com.xenoage.zong.musiclayout.text; import static com.xenoage.utils.collections.CList.clist; import static com.xenoage.utils.math.Fraction.fr; import static com.xenoage.zong.core.text.FormattedText.fText; import static com.xenoage.zong.core.text.FormattedTextUtils.styleText; import static com.xenoage.zong.core.text.UnformattedText.ut; import com.xenoage.utils.collections.CList; import com.xenoage.utils.math.Fraction; import com.xenoage.zong.core.music.TextElement; import com.xenoage.zong.core.music.direction.Tempo; import com.xenoage.zong.core.text.Alignment; import com.xenoage.zong.core.text.FormattedText; import com.xenoage.zong.core.text.FormattedTextElement; import com.xenoage.zong.core.text.FormattedTextParagraph; import com.xenoage.zong.core.text.FormattedTextString; import com.xenoage.zong.core.text.FormattedTextStyle; import com.xenoage.zong.core.text.FormattedTextSymbol; import com.xenoage.zong.core.text.Text; import com.xenoage.zong.symbols.SymbolPool; import com.xenoage.zong.symbols.common.CommonSymbol; /** * This class provides text content for {@link TextElement}s which * have a null content. * * @author Andreas Wenger */ public class DefaultTexts { public static Text getTextNotNull(TextElement element, SymbolPool symbolPool) { if (element.getText() != null) return element.getText(); else if (element instanceof Tempo) return getTempoTextNotNull((Tempo) element, symbolPool); else return ut("???"); } public static FormattedText getTempoTextNotNull(Tempo tempo, SymbolPool symbolPool) { FormattedTextStyle style = FormattedTextStyle.defaultStyle; if (tempo.getText() != null) { //use custom text return styleText(tempo.getText(), style); } else { //show meaning, e.g. "♩ = 120" CList<FormattedTextElement> elements = clist(); Fraction beat = tempo.getBaseBeat(); if (beat.equals(fr(1, 4))) { elements.add(new FormattedTextSymbol(symbolPool.getSymbol(CommonSymbol.TextNoteQuarter), /* TODO staffStamping.is * FONT_SIZE_IN_IS */12, FormattedTextStyle.defaultColor)); } else if (beat.equals(fr(1, 2))) { elements.add(new FormattedTextSymbol(symbolPool.getSymbol(CommonSymbol.TextNoteHalf), /* staffStamping.is * FONT_SIZE_IN_IS */12, FormattedTextStyle.defaultColor)); } else { elements.add(new FormattedTextString(beat.toString(), style)); } elements.add(new FormattedTextString(" = " + tempo.getBeatsPerMinute(), style)); FormattedTextParagraph paragraph = new FormattedTextParagraph(elements, Alignment.Left); return fText(paragraph); } } }