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.core.Manager;
import com.kartoflane.superluminal2.ui.GibPropContainer.PropControls;
import com.kartoflane.superluminal2.utils.UIUtils;
public class GibControlsMenu {
private static GibControlsMenu instance = null;
private PropControls result = null;
private Menu controlsMenu = null;
public GibControlsMenu(Control parent) {
if (instance != null)
throw new IllegalStateException("Previous instance has not been disposed!");
instance = this;
controlsMenu = new Menu(parent);
SelectionAdapter listener = new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
result = (PropControls) ((Widget) e.getSource()).getData();
}
};
PropControls current = Manager.getCurrentShip().getGibContainer().getShownControls();
for (PropControls pc : PropControls.values()) {
MenuItem item = new MenuItem(controlsMenu, SWT.RADIO);
item.setText(pc.toString());
item.setData(pc);
item.addSelectionListener(listener);
item.setSelection(pc == current);
}
}
public static GibControlsMenu getInstance() {
return instance;
}
public PropControls open() {
controlsMenu.setVisible(true);
Display display = UIUtils.getDisplay();
while (controlsMenu.isVisible()) {
if (!display.readAndDispatch())
display.sleep();
}
dispose();
return result;
}
public void setLocation(int x, int y) {
controlsMenu.setLocation(x, y);
}
public void setLocation(Point p) {
controlsMenu.setLocation(p.x, p.y);
}
public void dispose() {
controlsMenu.dispose();
instance = null;
}
public boolean isDisposed() {
return controlsMenu == null || controlsMenu.isDisposed();
}
}