From 78cef1b3c773fe6e1fdbe2b263af5b5ebb270669 Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Sun, 24 Oct 2021 11:49:48 +0200 Subject: [PATCH] Theme Editor: - use class `FlatDesktop` - hide "File > Exit" and "Help > About" on macOS - enable macOS screen menu bar --- .../themeeditor/FlatThemeFileEditor.java | 32 ++++++++++++++++--- .../themeeditor/FlatThemeFileEditor.jfd | 8 ++--- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.java index 0e6cdf80..5a576801 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.java +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.java @@ -57,6 +57,7 @@ import com.formdev.flatlaf.FlatDarkLaf; import com.formdev.flatlaf.FlatIntelliJLaf; import com.formdev.flatlaf.FlatLaf; import com.formdev.flatlaf.FlatLightLaf; +import com.formdev.flatlaf.extras.FlatDesktop; import com.formdev.flatlaf.extras.FlatInspector; import com.formdev.flatlaf.extras.FlatSVGIcon; import com.formdev.flatlaf.extras.FlatSVGUtils; @@ -65,6 +66,7 @@ import com.formdev.flatlaf.extras.components.*; import com.formdev.flatlaf.icons.FlatClearIcon; import com.formdev.flatlaf.ui.FlatUIUtils; import com.formdev.flatlaf.util.StringUtils; +import com.formdev.flatlaf.util.SystemInfo; import com.formdev.flatlaf.util.UIScale; /** @@ -102,6 +104,10 @@ class FlatThemeFileEditor Locale.setDefault( Locale.ENGLISH ); System.setProperty( "user.language", "en" ); + // on macOS enable screen menu bar + if( SystemInfo.isMacOS ) + System.setProperty( "apple.laf.useScreenMenuBar", "true" ); + SwingUtilities.invokeLater( () -> { FlatLaf.registerCustomDefaultsSource( "com.formdev.flatlaf.themeeditor" ); @@ -170,6 +176,24 @@ class FlatThemeFileEditor loadDirectory( (File) directoryField.getSelectedItem() ); enableDisableActions(); + + // hide some menu items on macOS + if( SystemInfo.isMacOS ) { + exitMenuItem.setVisible( false ); + aboutMenuItem.setVisible( false ); + } + + // integrate into macOS screen menu + FlatDesktop.setAboutHandler( this::about ); + FlatDesktop.setQuitHandler( response -> { + if( !saveAll() ) { + response.cancelQuit(); + return; + } + + saveWindowBounds(); + response.performQuit(); + } ); } private void openDirectory() { @@ -953,7 +977,7 @@ class FlatThemeFileEditor //---- newPropertiesFileMenuItem ---- newPropertiesFileMenuItem.setText("New Properties File..."); - newPropertiesFileMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, KeyEvent.CTRL_DOWN_MASK)); + newPropertiesFileMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); newPropertiesFileMenuItem.setMnemonic('N'); newPropertiesFileMenuItem.addActionListener(e -> newPropertiesFile()); fileMenu.add(newPropertiesFileMenuItem); @@ -990,13 +1014,13 @@ class FlatThemeFileEditor //---- insertColorMenuItem ---- insertColorMenuItem.setText("Insert Color"); - insertColorMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G, KeyEvent.CTRL_DOWN_MASK)); + insertColorMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); insertColorMenuItem.addActionListener(e -> insertColor()); editMenu.add(insertColorMenuItem); //---- pickColorMenuItem ---- pickColorMenuItem.setText("Pick Color from Screen"); - pickColorMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G, KeyEvent.CTRL_DOWN_MASK|KeyEvent.SHIFT_DOWN_MASK)); + pickColorMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()|KeyEvent.SHIFT_DOWN_MASK)); pickColorMenuItem.addActionListener(e -> pickColor()); editMenu.add(pickColorMenuItem); } @@ -1009,7 +1033,7 @@ class FlatThemeFileEditor //---- previewMenuItem ---- previewMenuItem.setText("Preview"); - previewMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, KeyEvent.CTRL_DOWN_MASK)); + previewMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); previewMenuItem.addActionListener(e -> showHidePreview()); viewMenu.add(previewMenuItem); viewMenu.addSeparator(); diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.jfd b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.jfd index 26f72b92..3eb1808b 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.jfd +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.jfd @@ -70,7 +70,7 @@ new FormModel { add( new FormComponent( "javax.swing.JMenuItem" ) { name: "newPropertiesFileMenuItem" "text": "New Properties File..." - "accelerator": static javax.swing.KeyStroke getKeyStroke( 78, 130, false ) + "accelerator": static javax.swing.KeyStroke getKeyStroke( 78, 4356, false ) "mnemonic": 78 addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "newPropertiesFile", false ) ) } ) @@ -109,13 +109,13 @@ new FormModel { add( new FormComponent( "javax.swing.JMenuItem" ) { name: "insertColorMenuItem" "text": "Insert Color" - "accelerator": static javax.swing.KeyStroke getKeyStroke( 71, 130, false ) + "accelerator": static javax.swing.KeyStroke getKeyStroke( 71, 4356, false ) addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "insertColor", false ) ) } ) add( new FormComponent( "javax.swing.JMenuItem" ) { name: "pickColorMenuItem" "text": "Pick Color from Screen" - "accelerator": &KeyStroke0 static javax.swing.KeyStroke getKeyStroke( 71, 195, false ) + "accelerator": static javax.swing.KeyStroke getKeyStroke( 71, 4421, false ) addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "pickColor", false ) ) } ) } ) @@ -126,7 +126,7 @@ new FormModel { add( new FormComponent( "javax.swing.JCheckBoxMenuItem" ) { name: "previewMenuItem" "text": "Preview" - "accelerator": static javax.swing.KeyStroke getKeyStroke( 80, 130, false ) + "accelerator": static javax.swing.KeyStroke getKeyStroke( 80, 4356, false ) addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showHidePreview", false ) ) } ) add( new FormComponent( "javax.swing.JPopupMenu$Separator" ) {