package com.kartoflane.superluminal2.ui; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Widget; import com.kartoflane.superluminal2.components.enums.Races; import com.kartoflane.superluminal2.utils.UIUtils; public class CrewMenu { private static CrewMenu instance; private Races result = null; private Menu crewMenu; private MenuItem mntmNoCrew; public CrewMenu(Control parent) { if (instance != null) throw new IllegalStateException("Previous instance has not been disposed!"); instance = this; crewMenu = new Menu(parent); SelectionAdapter listener = new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { result = (Races) ((Widget) e.getSource()).getData(); } }; mntmNoCrew = new MenuItem(crewMenu, SWT.NONE); mntmNoCrew.setText("No Crew"); mntmNoCrew.setData(Races.NO_CREW); mntmNoCrew.addSelectionListener(listener); new MenuItem(crewMenu, SWT.SEPARATOR); for (Races race : Races.getPlayerRaces()) { MenuItem item = new MenuItem(crewMenu, SWT.NONE); item.setText(race.toString()); item.setData(race); item.addSelectionListener(listener); } } public static CrewMenu getInstance() { return instance; } public Races open() { crewMenu.setVisible(true); Display display = UIUtils.getDisplay(); while (crewMenu.isVisible()) { if (!display.readAndDispatch()) display.sleep(); } dispose(); return result; } public void setLocation(int x, int y) { crewMenu.setLocation(x, y); } public void setLocation(Point p) { crewMenu.setLocation(p.x, p.y); } public void dispose() { crewMenu.dispose(); instance = null; } public boolean isDisposed() { return crewMenu == null || crewMenu.isDisposed(); } }