diff --git a/src/main/java/com/itextpdf/rups/Rups.java b/src/main/java/com/itextpdf/rups/Rups.java index 0cdc56ee..ad859f70 100644 --- a/src/main/java/com/itextpdf/rups/Rups.java +++ b/src/main/java/com/itextpdf/rups/Rups.java @@ -140,7 +140,7 @@ static IRupsController initApplication(JFrame frame) { final RupsTabbedPane rupsTabbedPane = new RupsTabbedPane(); final RupsController rupsController = new RupsController(screen, rupsTabbedPane); - final RupsMenuBar rupsMenuBar = new RupsMenuBar(rupsController); + final RupsMenuBar rupsMenuBar = new RupsMenuBar(rupsController, frame); frame.setDropTarget(new RupsDropTarget(rupsController)); frame.setJMenuBar(rupsMenuBar); diff --git a/src/main/java/com/itextpdf/rups/view/Language.java b/src/main/java/com/itextpdf/rups/view/Language.java index b0805779..1aa8b93f 100644 --- a/src/main/java/com/itextpdf/rups/view/Language.java +++ b/src/main/java/com/itextpdf/rups/view/Language.java @@ -172,6 +172,7 @@ public enum Language { MENU_BAR_CLOSE, MENU_BAR_COMPARE_WITH, MENU_BAR_EDIT, + MENU_BAR_EXIT, MENU_BAR_FILE, MENU_BAR_HELP, MENU_BAR_NEW_INDIRECT, diff --git a/src/main/java/com/itextpdf/rups/view/RupsMenuBar.java b/src/main/java/com/itextpdf/rups/view/RupsMenuBar.java index d674f662..88fee70b 100644 --- a/src/main/java/com/itextpdf/rups/view/RupsMenuBar.java +++ b/src/main/java/com/itextpdf/rups/view/RupsMenuBar.java @@ -54,10 +54,14 @@ This file is part of the iText (R) project. import com.itextpdf.rups.model.MruListHandler; import com.itextpdf.rups.model.ObjectLoader; +import java.awt.Toolkit; +import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; +import java.awt.event.WindowEvent; import java.io.File; import javax.swing.Box; +import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; @@ -78,9 +82,10 @@ public final class RupsMenuBar extends JMenuBar implements IRupsEventListener { /** * Creates a JMenuBar. */ - public RupsMenuBar(RupsController controller) { + public RupsMenuBar(RupsController controller, JFrame mainFrame) { this.controller = controller; + final int shortcutKeyMask = Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx(); preferencesWindow = new PreferencesWindow(); final JMenu file = new JMenu(Language.MENU_BAR_FILE.getString()); @@ -88,7 +93,7 @@ public RupsMenuBar(RupsController controller) { file, Language.MENU_BAR_OPEN, new PdfFileOpenAction(controller::openNewFile, controller.getMasterComponent()), - KeyStroke.getKeyStroke('O', InputEvent.CTRL_DOWN_MASK) + KeyStroke.getKeyStroke(KeyEvent.VK_O, shortcutKeyMask) ); file.add(createOpenRecentSubMenu()); reopenAsOwnerMenuItem = addItem( @@ -100,22 +105,33 @@ public RupsMenuBar(RupsController controller) { file, Language.MENU_BAR_CLOSE, e -> controller.closeCurrentFile(), - KeyStroke.getKeyStroke('W', InputEvent.CTRL_DOWN_MASK) + KeyStroke.getKeyStroke(KeyEvent.VK_W, shortcutKeyMask) ); saveAsMenuItem = addItem( file, Language.MENU_BAR_SAVE_AS, new PdfFileSaveAction(controller, controller.getMasterComponent()), - KeyStroke.getKeyStroke('S', InputEvent.CTRL_DOWN_MASK) + KeyStroke.getKeyStroke(KeyEvent.VK_S, shortcutKeyMask) ); file.addSeparator(); openInPdfViewerMenuItem = addItem( file, Language.MENU_BAR_OPEN_IN_PDF_VIEWER, new OpenInViewerAction(controller), - KeyStroke.getKeyStroke('E', InputEvent.CTRL_DOWN_MASK) + KeyStroke.getKeyStroke(KeyEvent.VK_E, shortcutKeyMask) ); add(file); + if (mainFrame != null) { + file.addSeparator(); + addItem( + file, + Language.MENU_BAR_EXIT, + (ActionEvent e) -> mainFrame.dispatchEvent( + new WindowEvent(mainFrame, WindowEvent.WINDOW_CLOSING) + ), + KeyStroke.getKeyStroke(KeyEvent.VK_Q, shortcutKeyMask) + ); + } final JMenu edit = new JMenu(Language.MENU_BAR_EDIT.getString()); addItem( diff --git a/src/main/java/com/itextpdf/rups/view/itext/SyntaxHighlightedStreamPane.java b/src/main/java/com/itextpdf/rups/view/itext/SyntaxHighlightedStreamPane.java index 282bb480..6427fc41 100644 --- a/src/main/java/com/itextpdf/rups/view/itext/SyntaxHighlightedStreamPane.java +++ b/src/main/java/com/itextpdf/rups/view/itext/SyntaxHighlightedStreamPane.java @@ -61,7 +61,6 @@ This file is part of the iText (R) project. import java.awt.Toolkit; import java.awt.event.ActionEvent; -import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; @@ -136,10 +135,11 @@ public SyntaxHighlightedStreamPane(PdfReaderController controller) { manager = new UndoManager(); manager.setLimit(MAX_NUMBER_OF_EDITS); text.getDocument().addUndoableEditListener(manager); + final int shortcutKeyMask = Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx(); text.registerKeyboardAction(new UndoAction(manager), - KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_DOWN_MASK), JComponent.WHEN_FOCUSED); + KeyStroke.getKeyStroke(KeyEvent.VK_Z, shortcutKeyMask), JComponent.WHEN_FOCUSED); text.registerKeyboardAction(new RedoAction(manager), - KeyStroke.getKeyStroke(KeyEvent.VK_Y, InputEvent.CTRL_DOWN_MASK), JComponent.WHEN_FOCUSED); + KeyStroke.getKeyStroke(KeyEvent.VK_Y, shortcutKeyMask), JComponent.WHEN_FOCUSED); } /** diff --git a/src/main/resources/bundles/rups-lang.properties b/src/main/resources/bundles/rups-lang.properties index 8bc89445..ca1cf20f 100644 --- a/src/main/resources/bundles/rups-lang.properties +++ b/src/main/resources/bundles/rups-lang.properties @@ -132,6 +132,7 @@ MENU_BAR_CLEAR_RECENTLY_OPENED=Clear Recently Opened MENU_BAR_CLOSE=Close MENU_BAR_COMPARE_WITH=Compare With MENU_BAR_EDIT=Edit +MENU_BAR_EXIT=Exit MENU_BAR_FILE=File MENU_BAR_HELP=Help MENU_BAR_NEW_INDIRECT=Add New Indirect Object diff --git a/src/main/resources/bundles/rups-lang_en_US.properties b/src/main/resources/bundles/rups-lang_en_US.properties index 29427581..4e2b051f 100644 --- a/src/main/resources/bundles/rups-lang_en_US.properties +++ b/src/main/resources/bundles/rups-lang_en_US.properties @@ -121,6 +121,8 @@ MENU_BAR_ABOUT=About MENU_BAR_CLEAR_RECENTLY_OPENED=Clear Recently Opened MENU_BAR_CLOSE=Close MENU_BAR_COMPARE_WITH=Compare With +MENU_BAR_EDIT=Edit +MENU_BAR_EXIT=Exit MENU_BAR_FILE=File MENU_BAR_HELP=Help MENU_BAR_NEW_INDIRECT=Add New Indirect Object