package pipe.actions.gui; import pipe.controllers.application.PipeApplicationController; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; /** * Action that closes the currently displayed tab */ @SuppressWarnings("serial") public class CloseWindowAction extends GuiAction { /** * Application controller */ private final PipeApplicationController applicationController; /** * Constructor * @param applicationController PIPE main application controller */ public CloseWindowAction(PipeApplicationController applicationController) { super("Close", "Close the current tab", KeyEvent.VK_W, InputEvent.META_DOWN_MASK); this.applicationController = applicationController; } /** * On performing this action the currently displayed tab will be closed. * * If there have been modifications to the Petri net in the current tab then a confirm * dialog is shown asking the user if they really wish to close. * @param e event */ @Override public void actionPerformed(ActionEvent e) { if (!applicationController.hasCurrentPetriNetChanged()) { applicationController.removeActiveTab(); } else { int result = JOptionPane.showConfirmDialog(null, "Do you really want to close this Petri net? It has unsaved changes.", "Confirm Exit", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); if (result == JOptionPane.YES_OPTION) { applicationController.removeActiveTab(); } } } }