//----------------------------------------------------------------------------// // // // S y m b o l s S t e p // // // //----------------------------------------------------------------------------// // <editor-fold defaultstate="collapsed" desc="hdr"> // // Copyright © Hervé Bitteur and others 2000-2013. All rights reserved. // // This software is released under the GNU General Public License. // // Goto http://kenai.com/projects/audiveris to report bugs or suggestions. // //----------------------------------------------------------------------------// // </editor-fold> package omr.step; import omr.constant.Constant; import omr.constant.ConstantSet; import omr.glyph.ui.SymbolsEditor; import omr.score.entity.ScoreSystem; import omr.score.entity.SystemPart; import omr.selection.GlyphEvent; import omr.selection.SelectionService; import omr.sheet.Sheet; import omr.sheet.SystemInfo; import omr.util.TreeNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Iterator; /** * Class {@code SymbolsStep} builds symbols glyphs and * performs specific patterns at symbol level * (clefs, sharps, naturals, stems, slurs, etc). * * @author Hervé Bitteur */ public class SymbolsStep extends AbstractSystemStep { //~ Static fields/initializers --------------------------------------------- /** Specific application parameters */ private static final Constants constants = new Constants(); /** Usual logger utility */ private static final Logger logger = LoggerFactory.getLogger( SymbolsStep.class); //~ Constructors ----------------------------------------------------------- //-------------// // SymbolsStep // //-------------// /** * Creates a new SymbolsStep object. */ public SymbolsStep () { super( Steps.SYMBOLS, Level.SHEET_LEVEL, Mandatory.MANDATORY, DATA_TAB, "Apply specific glyph patterns"); } //~ Methods ---------------------------------------------------------------- //-----------// // displayUI // //-----------// @Override public void displayUI (Sheet sheet) { SymbolsEditor editor = sheet.getSymbolsEditor(); if (editor != null) { editor.refresh(); } // Update glyph board if needed (to see OCR'ed data) SelectionService service = sheet.getNest() .getGlyphService(); GlyphEvent glyphEvent = (GlyphEvent) service.getLastEvent( GlyphEvent.class); if (glyphEvent != null) { service.publish(glyphEvent); } } //----------// // doSystem // //----------// @Override public void doSystem (SystemInfo system) throws StepException { // // Cleanup system sentences // system.getSentences().clear(); // Cleanup system dummy parts ScoreSystem scoreSystem = system.getScoreSystem(); for (Iterator<TreeNode> it = scoreSystem.getParts() .iterator(); it.hasNext();) { SystemPart part = (SystemPart) it.next(); if (part.isDummy()) { it.remove(); } } // Iterate for (int iter = 1; iter <= constants.MaxPatternsIterations.getValue(); iter++) { logger.debug("System#{} patterns iter #{}", system.getId(), iter); clearSystemErrors(system); if (!system.runPatterns()) { return; // No more progress made } } } //~ Inner Classes ---------------------------------------------------------- //-----------// // Constants // //-----------// private static final class Constants extends ConstantSet { //~ Instance fields ---------------------------------------------------- private final Constant.Integer MaxPatternsIterations = new Constant.Integer( "count", 1, "Maximum number of iterations for PATTERNS task"); } }