X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fjbgui%2FAPQHandlers.java;fp=src%2Fjalview%2Fjbgui%2FAPQHandlers.java;h=1a7e971cdfd77d1beba40bc00d87cc3e1f233c18;hb=3459a8a691cb22508d7067f240b7254e588e77d3;hp=0000000000000000000000000000000000000000;hpb=5b27f1062b2203c4c31702e205f4c78e1992063e;p=jalview.git diff --git a/src/jalview/jbgui/APQHandlers.java b/src/jalview/jbgui/APQHandlers.java new file mode 100644 index 0000000..1a7e971 --- /dev/null +++ b/src/jalview/jbgui/APQHandlers.java @@ -0,0 +1,109 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ +package jalview.jbgui; + +import javax.swing.JFrame; +import javax.swing.JOptionPane; + +import com.formdev.flatlaf.extras.FlatDesktop; +import com.formdev.flatlaf.extras.FlatDesktop.Action; + +import jalview.util.MessageManager; +import jalview.util.Platform; + +public class APQHandlers +{ + public static boolean setAbout = false; + + public static boolean setPreferences = false; + + public static boolean setQuit = false; + + public static boolean setAPQHandlers(GDesktop desktop) + { + if (Platform.isJS()) + { + return false; + } + if (FlatDesktop.isSupported(Action.APP_ABOUT)) + { + FlatDesktop.setAboutHandler(() -> { + desktop.aboutMenuItem_actionPerformed(null); + }); + setAbout = true; + } + if (FlatDesktop.isSupported(Action.APP_PREFERENCES)) + { + FlatDesktop.setPreferencesHandler(() -> { + desktop.preferences_actionPerformed(null); + }); + setPreferences = true; + } + if (FlatDesktop.isSupported(Action.APP_QUIT_HANDLER)) + { + FlatDesktop.setQuitHandler(response -> { + boolean confirmQuit = jalview.bin.Cache.getDefault( + jalview.gui.Desktop.CONFIRM_KEYBOARD_QUIT, true); + boolean canQuit = !confirmQuit; + int n; + if (confirmQuit) + { + // ensure Jalview window is brought to front for Quit confirmation + // window to be visible + + // this method of raising the Jalview window is broken in java + // jalviewDesktop.setVisible(true); + // jalviewDesktop.toFront(); + + // a better hack which works instead + JFrame dialogParent = new JFrame(); + dialogParent.setAlwaysOnTop(true); + + n = JOptionPane.showConfirmDialog(dialogParent, + MessageManager.getString("label.quit_jalview"), + MessageManager.getString("action.quit"), + JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, + null); + + dialogParent.setAlwaysOnTop(false); + dialogParent.dispose(); + } + else + { + n = JOptionPane.OK_OPTION; + } + canQuit = (n == JOptionPane.OK_OPTION); + if (canQuit) + { + response.performQuit(); + } + else + { + response.cancelQuit(); + } + }); + setQuit = true; + } + // if we got to here, no exceptions occurred when we set the handlers. + return setAbout || setPreferences || setQuit; + } + +}