package games.strategy.triplea.oddsCalculator.ta;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.Action;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.KeyStroke;
import javax.swing.WindowConstants;
import games.strategy.engine.data.GameData;
import games.strategy.engine.data.Territory;
import games.strategy.triplea.ui.IUIContext;
import games.strategy.triplea.ui.TripleAFrame;
import games.strategy.ui.SwingAction;
public class OddsCalculatorDialog extends JDialog {
private static final long serialVersionUID = -7625420355087851930L;
private static final int MAX_HEIGHT = 640;
private static Point lastPosition;
private static Dimension lastShape;
private final OddsCalculatorPanel panel;
public static void show(final TripleAFrame taFrame, final Territory t) {
final OddsCalculatorDialog dialog =
new OddsCalculatorDialog(taFrame.getGame().getData(), taFrame.getUIContext(), taFrame, t);
dialog.pack();
dialog.addWindowListener(new WindowAdapter() {
@Override
public void windowClosed(final WindowEvent e) {
if (taFrame != null && taFrame.getUIContext() != null && !taFrame.getUIContext().isShutDown()) {
taFrame.getUIContext().removeShutdownWindow(dialog);
}
}
});
// close when hitting the escape key
final KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
final Action closeAction = SwingAction.of(e -> {
dialog.setVisible(false);
dialog.dispose();
});
final String key = "odds.calc.invoke.close";
dialog.getRootPane().getActionMap().put(key, closeAction);
dialog.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(stroke, key);
dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
if (lastPosition == null) {
dialog.setLocationRelativeTo(taFrame);
if (dialog.getHeight() > MAX_HEIGHT) {
dialog.setSize(new Dimension(dialog.getWidth(), MAX_HEIGHT));
}
} else {
dialog.setLocation(lastPosition);
dialog.setSize(lastShape);
}
dialog.setVisible(true);
taFrame.getUIContext().addShutdownWindow(dialog);
}
OddsCalculatorDialog(final GameData data, final IUIContext context, final JFrame parent, final Territory location) {
super(parent, "Odds Calculator");
panel = new OddsCalculatorPanel(data, context, location, this);
getContentPane().setLayout(new BorderLayout());
getContentPane().add(panel, BorderLayout.CENTER);
pack();
}
@Override
public void dispose() {
lastPosition = new Point(getLocation());
lastShape = new Dimension(getSize());
panel.shutdown();
super.dispose();
}
@Override
public void setVisible(final boolean vis) {
super.setVisible(vis);
panel.selectCalculateButton();
}
}