package uk.org.squirm3.ui.toolbar.navigation; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Iterator; import java.util.List; import javax.swing.JComboBox; import org.springframework.context.MessageSource; import uk.org.squirm3.engine.ApplicationEngine; import uk.org.squirm3.engine.ApplicationEngineEvent; import uk.org.squirm3.listener.Listener; import uk.org.squirm3.model.level.Level; import uk.org.squirm3.springframework.Messages; public class LevelPicker extends JComboBox<String> { private static final long serialVersionUID = 1L; private boolean update = true; public LevelPicker(final ApplicationEngine applicationEngine, final MessageSource messageSource) { super(getLevelsLabels(applicationEngine)); addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { if (!update) { applicationEngine.goToLevel(LevelPicker.this .getSelectedIndex()); } update = false; } }); setToolTipText(Messages.localize("level.selected", messageSource)); applicationEngine.addListener(new LevelListener(applicationEngine), ApplicationEngineEvent.LEVEL); } private static String[] getLevelsLabels( final ApplicationEngine applicationEngine) { final List<? extends Level> levelList = applicationEngine .getLevelManager().getLevels(); final String[] levelsLabels = new String[levelList.size()]; final Iterator<? extends Level> it = levelList.iterator(); int i = 0; while (it.hasNext()) { String number = String.valueOf(i) + " "; if (i < 10) { number += " "; } levelsLabels[i] = number + it.next().getTitle(); i++; } return levelsLabels; } private final class LevelListener implements Listener { private final ApplicationEngine applicationEngine; private LevelListener(final ApplicationEngine applicationEngine) { this.applicationEngine = applicationEngine; } @Override public void propertyHasChanged() { update = true; setSelectedIndex(applicationEngine.getLevelManager() .getCurrentLevelIndex()); } } }